From 9b1cd555d700b0f922b5f49b7e96c184132252a5 Mon Sep 17 00:00:00 2001 From: zyzo Date: Sat, 4 Jul 2015 12:57:57 +0200 Subject: [PATCH 1/3] implement Connect page to add external services (IoT, Email) & data sources Issues : #205 #206 Server side requirements : https://github.com/loklak/loklak_server/issues/35 https://github.com/loklak/loklak_server/issues/37 https://github.com/loklak/loklak_server/issues/58 (implemented) https://github.com/loklak/loklak_server/pull/59 (implemented) --- app/js/controllers/dataConnect.js | 41 +++++++++++++++ app/js/on_run.js | 5 ++ app/js/routes.js | 6 +++ app/styles/_data-connect.scss | 20 ++++++++ app/styles/main.scss | 3 +- .../data-connect/data-connect-modal.html | 51 +++++++++++++++++++ app/views/data-connect/data-connect.html | 13 +++++ 7 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 app/js/controllers/dataConnect.js create mode 100644 app/styles/_data-connect.scss create mode 100644 app/views/data-connect/data-connect-modal.html create mode 100644 app/views/data-connect/data-connect.html diff --git a/app/js/controllers/dataConnect.js b/app/js/controllers/dataConnect.js new file mode 100644 index 0000000..dcf3260 --- /dev/null +++ b/app/js/controllers/dataConnect.js @@ -0,0 +1,41 @@ +'use strict'; + +var controllersModule = require('./_index'); + + +controllersModule.controller('DataConnectCtrl', ['$scope', 'SearchService', + function($scope, SearchService) { + + var vm = this; + $scope.navItems = [ + { + 'title' : 'Data Source', + 'icon' : 'fa fa-database', + 'target' : 'data-source-tab' + }, + { + 'title' : 'Email, Contact and Calendar', + 'icon' : 'fa fa-users', + 'target' : 'contact-tab' + }, + { + 'title' : 'Internet of Things', + 'icon' : 'fa fa-share-alt', + 'target' : 'iot-tab' + } + ]; + $scope.dataSourceItems = []; + + const query = '-/source_type=TWITTER&count=200&minified=true'; + + SearchService.getData(query).then(function(data) { + console.log("Done. " + data.statuses.length + " results"); + var statuses = data.statuses; + statuses.forEach(function(status) { + if (status.source_type !== "TWITTER") { + $scope.dataSourceItems.push(status); + } + }); + console.log($scope.dataSourceItems); + }, function() {}); +}]); diff --git a/app/js/on_run.js b/app/js/on_run.js index 107b5de..1b60544 100644 --- a/app/js/on_run.js +++ b/app/js/on_run.js @@ -28,6 +28,11 @@ function OnRun($rootScope, AppSettings, HelloService) { 'title': 'Wall', 'link' : '/wall', 'icon' : 'fa fa-list' + }, + { + 'title': 'Connect', + 'link' : '/dataConnect', + 'icon' : 'fa fa-cloud' } ]; diff --git a/app/js/routes.js b/app/js/routes.js index db119e2..303c4ce 100644 --- a/app/js/routes.js +++ b/app/js/routes.js @@ -70,6 +70,12 @@ function Routes($stateProvider, $locationProvider, $urlRouterProvider, $httpProv controller: 'MapCtrl as map', title: 'Map' }) + .state('DataConnect', { + url: '/dataConnect', + templateUrl: 'data-connect/data-connect.html', + controller: 'DataConnectCtrl as dataConnect', + title: 'Connect Data' + }) .state('Redirecting', { url: '/redirect', templateUrl: 'redirect.html', diff --git a/app/styles/_data-connect.scss b/app/styles/_data-connect.scss new file mode 100644 index 0000000..e479e2d --- /dev/null +++ b/app/styles/_data-connect.scss @@ -0,0 +1,20 @@ +.data-connect-panel { + width: 100%; + margin-top: 44px ! important; +} +.data-connect-modal-dialog h2 { + margin : 0; +} + +.data-connect-modal-dialog .modal-content { + height: 100%; + overflow-y: scroll; +} + +@media (min-width: 1200px) { + .data-connect-panel { + width: 1170px; + margin: auto; + padding-left: 15px; + } +} diff --git a/app/styles/main.scss b/app/styles/main.scss index a477f86..e12d8c3 100644 --- a/app/styles/main.scss +++ b/app/styles/main.scss @@ -8,6 +8,7 @@ // Partials @import 'topnav'; @import 'home'; +@import 'data-connect'; * { font-family: $font-family; } @@ -2013,7 +2014,7 @@ text-align: center; padding: 20% 0; } - .wall-modal-dialog { + .wall-modal-dialog, .data-connect-modal-dialog { width: 100%; height: 95%; margin-top: 10px; diff --git a/app/views/data-connect/data-connect-modal.html b/app/views/data-connect/data-connect-modal.html new file mode 100644 index 0000000..7b1e3e9 --- /dev/null +++ b/app/views/data-connect/data-connect-modal.html @@ -0,0 +1,51 @@ + diff --git a/app/views/data-connect/data-connect.html b/app/views/data-connect/data-connect.html new file mode 100644 index 0000000..44e5c09 --- /dev/null +++ b/app/views/data-connect/data-connect.html @@ -0,0 +1,13 @@ + + + +
+ +
+
+ +
+
+
+ +
From ebc341edd6af0dc8d0cc3104b9501c863ab2427f Mon Sep 17 00:00:00 2001 From: zyzo Date: Sun, 5 Jul 2015 14:01:27 +0200 Subject: [PATCH 2/3] implement add datasource form call PushService to push import messages to push/geojson.json --- app/js/controllers/dataConnect.js | 51 ++++++++++++++----- app/js/services/push.js | 30 +++++++++++ app/styles/_data-connect.scss | 34 +++++++++++-- app/styles/main.scss | 2 +- .../data-connect/data-connect-modal.html | 23 +++++++-- app/views/data-connect/data-connect.html | 2 +- 6 files changed, 120 insertions(+), 22 deletions(-) create mode 100644 app/js/services/push.js diff --git a/app/js/controllers/dataConnect.js b/app/js/controllers/dataConnect.js index dcf3260..1a73580 100644 --- a/app/js/controllers/dataConnect.js +++ b/app/js/controllers/dataConnect.js @@ -3,10 +3,9 @@ var controllersModule = require('./_index'); -controllersModule.controller('DataConnectCtrl', ['$scope', 'SearchService', - function($scope, SearchService) { +controllersModule.controller('DataConnectCtrl', ['$scope', 'SearchService', 'PushService', + function($scope, SearchService, PushService) { - var vm = this; $scope.navItems = [ { 'title' : 'Data Source', @@ -25,17 +24,43 @@ controllersModule.controller('DataConnectCtrl', ['$scope', 'SearchService', } ]; $scope.dataSourceItems = []; + /** + * Add data source form inputs values, success & error message + */ + $scope.addForm = {inputs : {}, success: '', errorĀ : ''}; + /** + * Add datasource form show state + */ + $scope.addFormOpen = false; - const query = '-/source_type=TWITTER&count=200&minified=true'; + function getDataSources() { + const query = '-/source_type=TWITTER&count=200&minified=true'; - SearchService.getData(query).then(function(data) { - console.log("Done. " + data.statuses.length + " results"); - var statuses = data.statuses; - statuses.forEach(function(status) { - if (status.source_type !== "TWITTER") { - $scope.dataSourceItems.push(status); - } + SearchService.getData(query).then(function(data) { + var statuses = data.statuses; + statuses.forEach(function(status) { + if (status.source_type !== 'TWITTER') { + $scope.dataSourceItems.push(status); + } + }); + }, function() {}); + } + + $scope.confirmAddDataSource = function() { + PushService.pushGeoJsonData($scope.addForm.inputs.url).then(function(data) { + $scope.addForm.error = ''; + $scope.addForm.success = data.known + " source(s) known, " + data['new'] + " new source(s) added"; + }, function(err, status) { + $scope.addForm.success = ''; + $scope.addForm.error = 'Add new source failed. Please verify link avaibility & data format.'; }); - console.log($scope.dataSourceItems); - }, function() {}); + } + + $scope.toggleAddForm = function(){ + $scope.addForm.error = null; + $scope.addForm.success = null; + $scope.addFormOpen = !$scope.addFormOpen; + } + + getDataSources(); }]); diff --git a/app/js/services/push.js b/app/js/services/push.js new file mode 100644 index 0000000..a210cfd --- /dev/null +++ b/app/js/services/push.js @@ -0,0 +1,30 @@ +'use strict'; + +var servicesModule = require('./_index.js'); + +/** + * @ngInject + */ +function PushService($q, $http, AppSettings) { + + var service = {}; + + service.pushData = undefined; + + service.pushGeoJsonData = function(url, source_type, map_type) { + var deferred = $q.defer(); + + $http.jsonp(AppSettings.apiUrl+'push/geojson.json?callback=JSON_CALLBACK', { + params: {url: url, source_type : source_type | 'IMPORT', map_type : map_type} + }).success(function(data) { + deferred.resolve(data); + }).error(function(err, status) { + deferred.reject(err, status); + }); + return deferred.promise; + }; + + return service; +} + +servicesModule.service('PushService',['$q', '$http', 'AppSettings', PushService]); diff --git a/app/styles/_data-connect.scss b/app/styles/_data-connect.scss index e479e2d..21f42c8 100644 --- a/app/styles/_data-connect.scss +++ b/app/styles/_data-connect.scss @@ -1,20 +1,46 @@ -.data-connect-panel { +#data-connect-panel { width: 100%; margin-top: 44px ! important; } -.data-connect-modal-dialog h2 { +#data-connect-modal-dialog h2 { margin : 0; } -.data-connect-modal-dialog .modal-content { +#data-connect-modal-dialog .modal-content { height: 100%; overflow-y: scroll; } @media (min-width: 1200px) { - .data-connect-panel { + #data-connect-panel { width: 1170px; margin: auto; padding-left: 15px; } } + +#data-connect-modal-dialog #add-datasource-form { + background-color: #f4f4f4; + color: #444; + border: 1px solid #ddd; + padding: 12px; + position: absolute; + right: 14px; + z-index: 10; + width: 300px; +} + +#data-connect-modal .alert { + padding: 5px; +} +// overwrite admin.css +#data-connect-modal .alert-danger { + background-color: #f2dede !important; + border-color: #ebccd1; + color: #a94442 !important; +} +#data-connect-modal .alert-success { + background-color: #dff0d8 !important; + border-color: #d6e9c6; + color: #3c763d !important; +} \ No newline at end of file diff --git a/app/styles/main.scss b/app/styles/main.scss index e12d8c3..11b6b5e 100644 --- a/app/styles/main.scss +++ b/app/styles/main.scss @@ -2014,7 +2014,7 @@ text-align: center; padding: 20% 0; } - .wall-modal-dialog, .data-connect-modal-dialog { + .wall-modal-dialog, #data-connect-modal-dialog { width: 100%; height: 95%; margin-top: 10px; diff --git a/app/views/data-connect/data-connect-modal.html b/app/views/data-connect/data-connect-modal.html index 7b1e3e9..d27ff85 100644 --- a/app/views/data-connect/data-connect-modal.html +++ b/app/views/data-connect/data-connect-modal.html @@ -1,5 +1,5 @@