From 1e58b21cb5c59258c434e653acd459d894eeb003 Mon Sep 17 00:00:00 2001 From: Chris Jackson Date: Sun, 15 May 2016 22:33:23 +0100 Subject: [PATCH] feat(UI): Add extensions interfaces Signed-off-by: Chris Jackson --- src/app/app.js | 1 + src/app/configuration/extensionsConfig.js | 82 ++++++++++ .../configuration/extensionsConfig.tpl.html | 154 ++++++++++++++++++ src/app/models/extensionModel.js | 96 +++++++++++ src/index.html | 6 + src/languages/en-GB/habmin.lang.json | 3 +- 6 files changed, 341 insertions(+), 1 deletion(-) create mode 100644 src/app/configuration/extensionsConfig.js create mode 100644 src/app/configuration/extensionsConfig.tpl.html create mode 100644 src/app/models/extensionModel.js diff --git a/src/app/app.js b/src/app/app.js index 32b10a34..0cc6af11 100644 --- a/src/app/app.js +++ b/src/app/app.js @@ -34,6 +34,7 @@ angular.module('HABmin', [ 'FloorplanEditor', 'ZWaveLogViewer', 'ZWaveNetwork', + 'Config.Extensions', 'Config.Bindings', 'Config.Things', 'Config.Items', diff --git a/src/app/configuration/extensionsConfig.js b/src/app/configuration/extensionsConfig.js new file mode 100644 index 00000000..bdcd77d1 --- /dev/null +++ b/src/app/configuration/extensionsConfig.js @@ -0,0 +1,82 @@ +/** + * HABmin - Home Automation User and Administration Interface + * Designed for openHAB (www.openhab.com) + * + * This software is copyright of Chris Jackson under the GPL license. + * Note that this licence may be changed at a later date. + * + * (c) 2014-2016 Chris Jackson (chris@cd-jackson.com) + */ +angular.module('Config.Extensions', [ + 'ui.router', + 'ui.bootstrap', + 'ngLocalize', + 'HABmin.userModel', + 'HABmin.extensionModel', + 'Config.parameter', + 'angular-growl', + 'ngVis', + 'ResizePanel' +]) + + .config(function config($stateProvider) { + $stateProvider.state('extensions', { + url: '/extensions', + views: { + "main": { + controller: 'ExtensionsConfigCtrl', + templateUrl: 'configuration/extensionsConfig.tpl.html' + } + }, + data: {pageTitle: 'Extensions'}, + resolve: { + // Make sure the localisation files are resolved before the controller runs + localisations: function (locale) { + return locale.ready('habmin'); + } + } + }); + }) + + .controller('ExtensionsConfigCtrl', + function BindingConfigCtrl($scope, locale, growl, $timeout, $window, $http, $interval, UserService, ExtensionModel) { + $scope.panelDisplayed = 'DESCRIPTION'; + $scope.extensionTypes = null; + $scope.bindingsCnt = -1; + + ExtensionModel.getTypes().then( + function (extensionTypes) { + $scope.extensionTypes = extensionTypes; + $scope.typesCnt = extensionTypes.length; + }, + function (reason) { + // Handle failure + growl.warning(locale.getString("habmin.ErrorGettingBindings")); + } + ); + + $scope.selectBinding = function (binding) { + $scope.setPanelDisplayed("DESCRIPTION"); + $scope.selectedBinding = binding; + + if (binding.configDescriptionURI != null) { + // Get the configuration + ConfigModel.getConfig(binding.configDescriptionURI).then( + function (cfg) { + $scope.bindingConfig = cfg; + }, + function () { + $scope.bindingConfig = null; + } + ); + } + }; + + $scope.setPanelDisplayed = function (panel) { + $scope.panelDisplayed = panel; + }; + + + }) + +; diff --git a/src/app/configuration/extensionsConfig.tpl.html b/src/app/configuration/extensionsConfig.tpl.html new file mode 100644 index 00000000..52ca20cf --- /dev/null +++ b/src/app/configuration/extensionsConfig.tpl.html @@ -0,0 +1,154 @@ + +
+
+ +
+ Extension Sets +
+ + +
+ + + + +
+ + +
+
+ + +
+
+ + + +
+
+ + +
+
+ +
+

+  {{selectedBinding.name}} +

+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+ + +
+ {{selectedBinding.author}} +
+
+
+ + + +
+ +
+
+
+ +
+
+
+
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + + +
+
diff --git a/src/app/models/extensionModel.js b/src/app/models/extensionModel.js new file mode 100644 index 00000000..c4fb3428 --- /dev/null +++ b/src/app/models/extensionModel.js @@ -0,0 +1,96 @@ +/** + * HABmin - Home Automation User and Administration Interface + * Designed for openHAB (www.openhab.com) + * + * This software is copyright of Chris Jackson under the GPL license. + * Note that this licence may be changed at a later date. + * + * (c) 2014-2016 Chris Jackson (chris@cd-jackson.com) + */ +angular.module('HABmin.extensionModel', [ + 'HABmin.userModel', + 'HABmin.restModel' +]) + + .service('ExtensionModel', function ($http, $q, UserService, RestService) { + var svcExtensions = "/extensions"; + var extensionTypeList = []; + + this.getTypes = function () { + var tStart = new Date().getTime(); + var deferred = $q.defer(); + + RestService.getService(svcExtensions).then( + function (url) { + if (url == null) { + deferred.resolve(null); + return; + } + + $http.get(url + "/types") + .success(function (data) { + console.log("Fetch completed in", new Date().getTime() - tStart); + + // Keep a local copy. + // This allows us to update the data later and keeps the GUI in sync. + angular.forEach(data, function (newType) { + var found = false; + angular.forEach(extensionTypeList, function (extensionType) { + if (extensionType.id == newType.id) { + for (var i in newType) { + extensionType[i] = newType[i]; + } + found = true; + } + }); + + // Is this a new binding we've not seen before? + if (found == false) { + extensionTypeList.push(newType); + } + }); + + console.log("Processing completed in", new Date().getTime() - tStart); + + deferred.resolve(extensionTypeList); + }) + .error(function (data, status) { + deferred.reject(); + }); + }, + function () { + deferred.reject(); + } + ); + + return deferred.promise; + }; + + this.startDiscovery = function (binding) { + var deferred = $q.defer(); + + RestService.getService(svcDisc).then( + function (url) { + if (url == null) { + deferred.resolve(false); + return deferred.promise; + } + + $http.post(url + "/bindings/" + binding + "/scan") //, {bindingId: binding}) + .success(function (data) { + deferred.resolve(true); + }) + .error(function (data, status) { + deferred.reject(false); + }); + }, + function () { + deferred.reject(false); + } + ); + + return deferred.promise; + }; + + }) +; diff --git a/src/index.html b/src/index.html index f86714c0..59327451 100644 --- a/src/index.html +++ b/src/index.html @@ -318,6 +318,12 @@

+
  • + + + + +
  • diff --git a/src/languages/en-GB/habmin.lang.json b/src/languages/en-GB/habmin.lang.json index 6f365f1e..462e01e1 100644 --- a/src/languages/en-GB/habmin.lang.json +++ b/src/languages/en-GB/habmin.lang.json @@ -33,5 +33,6 @@ "ErrorLoadingInbox": "Error loading inbox!", "ErrorGettingBindings": "Error loading list of bindings!", "OpenHABOffline": "OpenHAB is offline!", - "ZWaveNetworkViewer": "Z-Wave Network Viewer" + "ZWaveNetworkViewer": "Z-Wave Network Viewer", + "Extensions": "Extensions" }