From bc27141603b6a6ad7cc4cd5d351d4135a03a0cb3 Mon Sep 17 00:00:00 2001
From: blavenie <benoit.lavenier@e-is.pro>
Date: Mon, 20 Jan 2020 16:54:57 +0100
Subject: [PATCH] [enh] Cesium+ settings: Use the specific Cs+ network view, to
 select a node

---
 .../es/js/controllers/network-controllers.js  | 104 +++++------
 .../es/js/controllers/settings-controllers.js | 167 +++++++++---------
 www/plugins/es/js/services/modal-services.js  |   4 +-
 3 files changed, 133 insertions(+), 142 deletions(-)

diff --git a/www/plugins/es/js/controllers/network-controllers.js b/www/plugins/es/js/controllers/network-controllers.js
index 758b3247..b0d8f52a 100644
--- a/www/plugins/es/js/controllers/network-controllers.js
+++ b/www/plugins/es/js/controllers/network-controllers.js
@@ -1,73 +1,73 @@
-
 angular.module('cesium.es.network.controllers', ['cesium.es.services'])
 
-.config(function(PluginServiceProvider, csConfig) {
-  'ngInject';
-
-  var enable = csConfig.plugins && csConfig.plugins.es;
-  if (enable) {
-    PluginServiceProvider.extendState('app.network', {
-      points: {
-        'network-buttons': {
-          templateUrl: "plugins/es/templates/network/view_network_extend.html",
-          controller: 'ESExtensionCtrl'
-        },
-        'blockchain-buttons': {
-          templateUrl: "plugins/es/templates/network/view_network_extend.html",
-          controller: 'ESExtensionCtrl'
+  .config(function(PluginServiceProvider, csConfig) {
+    'ngInject';
+
+    var enable = csConfig.plugins && csConfig.plugins.es;
+    if (enable) {
+      PluginServiceProvider.extendState('app.network', {
+        points: {
+          'network-buttons': {
+            templateUrl: "plugins/es/templates/network/view_network_extend.html",
+            controller: 'ESExtensionCtrl'
+          },
+          'blockchain-buttons': {
+            templateUrl: "plugins/es/templates/network/view_network_extend.html",
+            controller: 'ESExtensionCtrl'
+          }
         }
-      }
-    })
-    ;
-  }
-})
+      })
+      ;
+    }
+  })
 
-.config(function($stateProvider) {
-  'ngInject';
+  .config(function($stateProvider) {
+    'ngInject';
 
-  $stateProvider
+    $stateProvider
 
-    .state('app.es_network', {
-      url: "/network/data?online&expert",
-      cache: false, // fix #766
-      views: {
-        'menuContent': {
-          templateUrl: "plugins/es/templates/network/view_es_network.html",
-          controller: 'ESNetworkLookupCtrl'
+      .state('app.es_network', {
+        url: "/network/data?online&expert",
+        cache: false, // fix #766
+        views: {
+          'menuContent': {
+            templateUrl: "plugins/es/templates/network/view_es_network.html",
+            controller: 'ESNetworkLookupCtrl'
+          }
+        },
+        data: {
+          silentLocationChange: true
         }
-      },
-      data: {
-        silentLocationChange: true
-      }
-    })
-
-    .state('app.view_es_peer', {
-      url: "/network/data/peer/:server?ssl&tor",
-      cache: false,
-      views: {
-        'menuContent': {
-          templateUrl: "plugins/es/templates/network/view_es_peer.html",
-          controller: 'ESPeerViewCtrl'
+      })
+
+      .state('app.view_es_peer', {
+        url: "/network/data/peer/:server?ssl&tor",
+        cache: false,
+        views: {
+          'menuContent': {
+            templateUrl: "plugins/es/templates/network/view_es_peer.html",
+            controller: 'ESPeerViewCtrl'
+          }
+        },
+        data: {
+          preferHttp: true // avoid HTTPS if config has httpsMode=clever
         }
-      },
-      data: {
-        preferHttp: true // avoid HTTPS if config has httpsMode=clever
-      }
-    });
-})
+      });
+  })
 
   .controller('ESNetworkLookupCtrl', ESNetworkLookupController)
 
-  .controller('ESPeerViewCtrl', ESPeerViewController)
-
   .controller('ESNetworkLookupModalCtrl', ESNetworkLookupModalController)
 
+  .controller('ESPeerViewCtrl', ESPeerViewController)
+
   .controller('ESNetworkLookupPopoverCtrl', ESNetworkLookupPopoverController)
 
   .controller('ESPeerInfoPopoverCtrl', ESPeerInfoPopoverController)
 
 ;
 
+
 function ESNetworkLookupController($scope,  $state, $location, $ionicPopover, $window, $translate,
                                  esHttp, UIUtils, csConfig, csSettings, csCurrency, esNetwork, csWot) {
   'ngInject';
@@ -355,7 +355,7 @@ function ESNetworkLookupModalController($scope, $controller, parameters) {
   'ngInject';
 
   // Initialize the super class and extend it.
-  angular.extend(this, $controller('NetworkLookupCtrl', {$scope: $scope}));
+  angular.extend(this, $controller('ESNetworkLookupCtrl', {$scope: $scope}));
 
   // Read parameters
   parameters = parameters || {};
diff --git a/www/plugins/es/js/controllers/settings-controllers.js b/www/plugins/es/js/controllers/settings-controllers.js
index 8635cb3f..0170f7ea 100644
--- a/www/plugins/es/js/controllers/settings-controllers.js
+++ b/www/plugins/es/js/controllers/settings-controllers.js
@@ -17,39 +17,27 @@ angular.module('cesium.es.settings.controllers', ['cesium.es.services'])
       });
 
       $stateProvider
-      .state('app.es_settings', {
-        url: "/settings/es",
-        views: {
-          'menuContent': {
-            templateUrl: "plugins/es/templates/settings/plugin_settings.html",
-            controller: 'ESPluginSettingsCtrl'
+        .state('app.es_settings', {
+          url: "/settings/es",
+          views: {
+            'menuContent': {
+              templateUrl: "plugins/es/templates/settings/plugin_settings.html",
+              controller: 'ESPluginSettingsCtrl'
+            }
           }
-        }
-      });
+        });
     }
   })
 
- .controller('ESExtendSettingsCtrl', ESExtendSettingsController)
-
- .controller('ESPluginSettingsCtrl', ESPluginSettingsController)
-
+  .controller('ESPluginSettingsCtrl', ESPluginSettingsController)
 ;
 
-/*
- * Settings extend controller
- */
-function ESExtendSettingsController ($scope, PluginService) {
-  'ngInject';
-
-  $scope.extensionPoint = PluginService.extensions.points.current.get();
-
-}
 
 /*
  * Settings extend controller
  */
 function ESPluginSettingsController ($scope, $window, $q,  $translate, $ionicPopup,
-                                     UIUtils, Modals, csHttp, csConfig, csSettings, esHttp, esSettings) {
+                                     UIUtils, Modals, csHttp, csConfig, csSettings, esHttp, esSettings, esModals) {
   'ngInject';
 
   $scope.hasWindowNotification = !!("Notification" in window);
@@ -68,10 +56,10 @@ function ESPluginSettingsController ($scope, $window, $q,  $translate, $ionicPop
     var wasEnable = $scope.formData.enable;
     $scope.formData = csSettings.data.plugins && csSettings.data.plugins.es ?
       angular.copy(csSettings.data.plugins.es) : {
-      enable: false,
-      host: undefined,
-      port: undefined
-    };
+        enable: false,
+        host: undefined,
+        port: undefined
+      };
     if (keepEnableState && wasEnable) {
       $scope.formData.enable = wasEnable;
     }
@@ -93,46 +81,46 @@ function ESPluginSettingsController ($scope, $window, $q,  $translate, $ionicPop
   // Change ESnode
   $scope.changeEsNode= function(node) {
     node = node || {
-        host: $scope.formData.host,
-        port: $scope.formData.port && $scope.formData.port != 80 && $scope.formData.port != 443 ? $scope.formData.port : undefined,
-        useSsl: angular.isDefined($scope.formData.useSsl) ?
-          $scope.formData.useSsl :
-          ($scope.formData.port == 443)
-      };
+      host: $scope.formData.host,
+      port: $scope.formData.port && $scope.formData.port != 80 && $scope.formData.port != 443 ? $scope.formData.port : undefined,
+      useSsl: angular.isDefined($scope.formData.useSsl) ?
+        $scope.formData.useSsl :
+        ($scope.formData.port == 443)
+    };
 
     $scope.showNodePopup(node)
-    .then(function(newNode) {
-      if (newNode.host == $scope.formData.host &&
-        newNode.port == $scope.formData.port &&
-        newNode.useSsl == $scope.formData.useSsl) {
-        UIUtils.loading.hide();
-        return; // same node = nothing to do
-      }
-      UIUtils.loading.show();
+      .then(function(newNode) {
+        if (newNode.host == $scope.formData.host &&
+          newNode.port == $scope.formData.port &&
+          newNode.useSsl == $scope.formData.useSsl) {
+          UIUtils.loading.hide();
+          return; // same node = nothing to do
+        }
+        UIUtils.loading.show();
 
-      var newEsNode = esHttp.instance(newNode.host, newNode.port, newNode.useSsl);
-      return newEsNode.isAlive() // ping the node
-        .then(function(alive) {
-          if (!alive) {
-            UIUtils.loading.hide();
-            return UIUtils.alert.error('ERROR.INVALID_NODE_SUMMARY')
-              .then(function(){
-                $scope.changeEsNode(newNode); // loop
-              });
-          }
+        var newEsNode = esHttp.instance(newNode.host, newNode.port, newNode.useSsl);
+        return newEsNode.isAlive() // ping the node
+          .then(function(alive) {
+            if (!alive) {
+              UIUtils.loading.hide();
+              return UIUtils.alert.error('ERROR.INVALID_NODE_SUMMARY')
+                .then(function(){
+                  $scope.changeEsNode(newNode); // loop
+                });
+            }
 
-          $scope.formData.host = newEsNode.host;
-          $scope.formData.port = newEsNode.port;
-          $scope.formData.useSsl = newEsNode.useSsl;
+            $scope.formData.host = newEsNode.host;
+            $scope.formData.port = newEsNode.port;
+            $scope.formData.useSsl = newEsNode.useSsl;
 
-          return esHttp.copy(newEsNode);
-        })
-        .then(function() {
-          $scope.server = $scope.getServer(esHttp);
-          $scope.isFallbackNode = false;
-          UIUtils.loading.hide();
-        });
-    });
+            return esHttp.copy(newEsNode);
+          })
+          .then(function() {
+            $scope.server = $scope.getServer(esHttp);
+            $scope.isFallbackNode = false;
+            UIUtils.loading.hide();
+          });
+      });
   };
 
   // Show node popup
@@ -167,25 +155,28 @@ function ESPluginSettingsController ($scope, $window, $q,  $translate, $ionicPop
                     //don't allow the user to close unless he enters a node
                     e.preventDefault();
                   } else {
-                    return $scope.popupData.newNode;
+                    return {
+                      server: $scope.popupData.newNode,
+                      useSsl: $scope.popupData.useSsl
+                    };
                   }
                 }
               }
             ]
           })
-          .then(function(node) {
-            if (!node) { // user cancel
-              UIUtils.loading.hide();
-              return;
-            }
-            var parts = node.split(':');
-            var useSsl = $scope.popupData.useSsl || (parts[1] == 443);
-            resolve({
-              host: parts[0],
-              port: parts[1] || (useSsl ? 443 : 80),
-              useSsl: useSsl
+            .then(function(res) {
+              if (!res) { // user cancel
+                UIUtils.loading.hide();
+                return;
+              }
+              var parts = res.server.split(':');
+              parts[1] = parts[1] ? parts[1] : (res.useSsl ? 443 : 80);
+              resolve({
+                host: parts[0],
+                port: parts[1],
+                useSsl: res.useSsl
+              });
             });
-          });
         });
     });
   };
@@ -196,28 +187,28 @@ function ESPluginSettingsController ($scope, $window, $q,  $translate, $ionicPop
     ($window.location && $window.location.protocol === 'https:') ? true : false;
 
     $ionicPopup._popupStack[0].responseDeferred.promise.close();
-    return Modals.showNetworkLookup({
+    return esModals.showNetworkLookup({
       enableFilter: true,
       endpoint: esHttp.constants.ES_USER_API_ENDPOINT,
       ssl: forceUseSsl ? true: undefined
     })
       .then(function (peer) {
         if (!peer) return;
-          var esEps = peer.getEndpoints().reduce(function(res, ep){
-            var esEp = esHttp.node.parseEndPoint(ep);
-            return esEp ? res.concat(esEp) : res;
-          }, []);
-          if (!esEps.length) return;
-          var ep = esEps[0];
-          return {
-            host: (ep.dns ? ep.dns :
-                   (peer.hasValid4(ep) ? ep.ipv4 : ep.ipv6)),
-            port: ep.port || 80,
-            useSsl: ep.useSsl || ep.port == 443
-          };
+        var esEps = peer.getEndpoints().reduce(function(res, ep){
+          var esEp = esHttp.node.parseEndPoint(ep);
+          return esEp ? res.concat(esEp) : res;
+        }, []);
+        if (!esEps.length) return;
+        var ep = esEps[0];
+        return {
+          host: (ep.dns ? ep.dns :
+                 (peer.hasValid4(ep) ? ep.ipv4 : ep.ipv6)),
+          port: ep.port || 80,
+          useSsl: ep.useSsl || ep.port == 443
+        };
       })
       .then(function(newEsNode) {
-        $scope.changeEsNode(newEsNode);
+        $scope.changeEsNode(newEsNode); // get back to node popup
       });
   };
 
diff --git a/www/plugins/es/js/services/modal-services.js b/www/plugins/es/js/services/modal-services.js
index b1186405..7f686a3b 100644
--- a/www/plugins/es/js/services/modal-services.js
+++ b/www/plugins/es/js/services/modal-services.js
@@ -69,8 +69,8 @@ angular.module('cesium.es.modal.services', ['cesium.modal.services', 'cesium.es.
     }
 
     function showNetworkLookup(parameters) {
-      return ModalUtils.show('plugins/es/templates/network/modal_network.html', 'NetworkLookupModalCtrl',
-        parameters, {focusFirstInput: true});
+      return ModalUtils.show('plugins/es/templates/network/modal_network.html', 'ESNetworkLookupModalCtrl',
+        parameters, {focusFirstInput: false});
     }
 
     return {
-- 
GitLab