Repository: ignite
Updated Branches:
  refs/heads/ignite-843 bd46179d9 -> cc0dbfe0a


IGNITE-843: WIP preview.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/cc0dbfe0
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/cc0dbfe0
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/cc0dbfe0

Branch: refs/heads/ignite-843
Commit: cc0dbfe0aa1cdd578b6f6ec396b88e3274d5f6db
Parents: bd46179
Author: Alexey Kuznetsov <[email protected]>
Authored: Thu Sep 3 11:33:39 2015 +0700
Committer: Alexey Kuznetsov <[email protected]>
Committed: Thu Sep 3 11:33:39 2015 +0700

----------------------------------------------------------------------
 .../main/js/controllers/caches-controller.js    | 156 +++++++++-------
 .../main/js/controllers/clusters-controller.js  | 180 +++++++++++--------
 .../src/main/js/controllers/common-module.js    |  84 +++------
 .../main/js/controllers/metadata-controller.js  |  55 +++---
 .../src/main/js/public/stylesheets/style.scss   |   1 +
 .../js/routes/generator/generator-common.js     |  11 +-
 .../src/main/js/views/includes/controls.jade    |   4 +-
 7 files changed, 258 insertions(+), 233 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/cc0dbfe0/modules/control-center-web/src/main/js/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/controllers/caches-controller.js 
b/modules/control-center-web/src/main/js/controllers/caches-controller.js
index 65e6a33..b6b6e31 100644
--- a/modules/control-center-web/src/main/js/controllers/caches-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/caches-controller.js
@@ -101,12 +101,6 @@ controlCenterModule.controller('cachesController', [
 
             $scope.panels = {activePanels: [0]};
 
-            $scope.$watchCollection('panels.activePanels', function () {
-                $timeout(function() {
-                    $common.previewHeightUpdate();
-                })
-            });
-
             $scope.general = [];
             $scope.advanced = [];
 
@@ -224,6 +218,86 @@ controlCenterModule.controller('cachesController', [
                 return true;
             };
 
+            // Fill cache previews.
+            function generatePreview(val) {
+                if ($common.isDefined(val)) {
+                    var qryMeta = _.reduce($scope.queryMetadata, 
function(memo, meta){
+                        if (_.contains(val.queryMetadata, meta.value)) {
+                            memo.push(meta.meta);
+                        }
+
+                        return memo;
+                    }, []);
+
+                    var storeMeta = _.reduce($scope.storeMetadata, 
function(memo, meta){
+                        if (_.contains(val.storeMetadata, meta.value)) {
+                            memo.push(meta.meta);
+                        }
+
+                        return memo;
+                    }, []);
+
+                    var varName = 'cache';
+
+                    $scope.preview.general.xml = 
$generatorXml.cacheGeneral(val).join('');
+                    $scope.preview.general.java = 
$generatorJava.cacheGeneral(val, varName).join('');
+                    $scope.preview.general.allDefaults = 
$common.isEmptyString($scope.preview.general.xml);
+
+                    $scope.preview.memory.xml = 
$generatorXml.cacheMemory(val).join('');
+                    $scope.preview.memory.java = 
$generatorJava.cacheMemory(val, varName).join('');
+                    $scope.preview.memory.allDefaults = 
$common.isEmptyString($scope.preview.memory.xml);
+
+                    $scope.preview.query.xml = 
$generatorXml.cacheMetadatas(qryMeta, null, 
$generatorXml.cacheQuery(val)).join('');
+                    $scope.preview.query.java = 
$generatorJava.cacheMetadatas(qryMeta, null, varName, 
$generatorJava.cacheQuery(val, varName)).join('');
+                    $scope.preview.query.allDefaults = 
$common.isEmptyString($scope.preview.query.xml);
+
+                    $scope.preview.store.xml = 
$generatorXml.cacheMetadatas(null, storeMeta, 
$generatorXml.cacheStore(val)).join('');
+                    $scope.preview.store.java = 
$generatorJava.cacheMetadatas(null, storeMeta, varName, 
$generatorJava.cacheStore(val, varName)).join('');
+                    $scope.preview.store.allDefaults = 
$common.isEmptyString($scope.preview.store.xml);
+
+                    $scope.preview.concurrency.xml = 
$generatorXml.cacheConcurrency(val).join('');
+                    $scope.preview.concurrency.java = 
$generatorJava.cacheConcurrency(val, varName).join('');
+                    $scope.preview.concurrency.allDefaults = 
$common.isEmptyString($scope.preview.concurrency.xml);
+
+                    $scope.preview.rebalance.xml = 
$generatorXml.cacheRebalance(val).join('');
+                    $scope.preview.rebalance.java = 
$generatorJava.cacheRebalance(val, varName).join('');
+                    $scope.preview.rebalance.allDefaults = 
$common.isEmptyString($scope.preview.rebalance.xml);
+
+                    $scope.preview.serverNearCache.xml = 
$generatorXml.cacheServerNearCache(val).join('');
+                    $scope.preview.serverNearCache.java = 
$generatorJava.cacheServerNearCache(val, varName).join('');
+                    $scope.preview.serverNearCache.allDefaults = 
$common.isEmptyString($scope.preview.serverNearCache.xml);
+
+                    $scope.preview.statistics.xml = 
$generatorXml.cacheStatistics(val).join('');
+                    $scope.preview.statistics.java = 
$generatorJava.cacheStatistics(val, varName).join('');
+                    $scope.preview.statistics.allDefaults = 
$common.isEmptyString($scope.preview.statistics.xml);
+                }
+                else {
+                    $scope.preview.general.xml = ' ';
+                    $scope.preview.general.java = ' ';
+
+                    $scope.preview.memory.xml = ' ';
+                    $scope.preview.memory.java = ' ';
+
+                    $scope.preview.query.xml = ' ';
+                    $scope.preview.query.java = ' ';
+
+                    $scope.preview.store.xml = ' ';
+                    $scope.preview.store.java = ' ';
+
+                    $scope.preview.concurrency.xml = ' ';
+                    $scope.preview.concurrency.java = ' ';
+
+                    $scope.preview.rebalance.xml = ' ';
+                    $scope.preview.rebalance.java = ' ';
+
+                    $scope.preview.serverNearCache.xml = ' ';
+                    $scope.preview.serverNearCache.java = ' ';
+
+                    $scope.preview.statistics.xml = ' ';
+                    $scope.preview.statistics.java = ' ';
+                }
+            }
+
             // When landing on the page, get caches and show them.
             $http.post('caches/list')
                 .success(function (data) {
@@ -302,63 +376,11 @@ controlCenterModule.controller('cachesController', [
                         if (val) {
                             sessionStorage.cacheBackupItem = 
angular.toJson(val);
 
-                            var qryMeta = _.reduce($scope.queryMetadata, 
function(memo, meta){
-                                if (_.contains(val.queryMetadata, meta.value)) 
{
-                                    memo.push(meta.meta);
-                                }
-
-                                return memo;
-                            }, []);
-
-                            var storeMeta = _.reduce($scope.storeMetadata, 
function(memo, meta){
-                                if (_.contains(val.storeMetadata, meta.value)) 
{
-                                    memo.push(meta.meta);
-                                }
-
-                                return memo;
-                            }, []);
-
-                            var varName = 'cache';
-
-                            $scope.preview.general.xml = 
$generatorXml.cacheGeneral(val).join('');
-                            $scope.preview.general.java = 
$generatorJava.cacheGeneral(val, varName).join('');
-                            $scope.preview.general.allDefaults = 
$common.isEmptyString($scope.preview.general.xml);
-
-                            $scope.preview.memory.xml = 
$generatorXml.cacheMemory(val).join('');
-                            $scope.preview.memory.java = 
$generatorJava.cacheMemory(val, varName).join('');
-                            $scope.preview.memory.allDefaults = 
$common.isEmptyString($scope.preview.memory.xml);
-
-                            $scope.preview.query.xml = 
$generatorXml.cacheMetadatas(qryMeta, null, 
$generatorXml.cacheQuery(val)).join('');
-                            $scope.preview.query.java = 
$generatorJava.cacheMetadatas(qryMeta, null, varName, 
$generatorJava.cacheQuery(val, varName)).join('');
-                            $scope.preview.query.allDefaults = 
$common.isEmptyString($scope.preview.query.xml);
-
-                            $scope.preview.store.xml = 
$generatorXml.cacheMetadatas(null, storeMeta, 
$generatorXml.cacheStore(val)).join('');
-                            $scope.preview.store.java = 
$generatorJava.cacheMetadatas(null, storeMeta, varName, 
$generatorJava.cacheStore(val, varName)).join('');
-                            $scope.preview.store.allDefaults = 
$common.isEmptyString($scope.preview.store.xml);
-
-                            $scope.preview.concurrency.xml = 
$generatorXml.cacheConcurrency(val).join('');
-                            $scope.preview.concurrency.java = 
$generatorJava.cacheConcurrency(val, varName).join('');
-                            $scope.preview.concurrency.allDefaults = 
$common.isEmptyString($scope.preview.concurrency.xml);
-
-                            $scope.preview.rebalance.xml = 
$generatorXml.cacheRebalance(val).join('');
-                            $scope.preview.rebalance.java = 
$generatorJava.cacheRebalance(val, varName).join('');
-                            $scope.preview.rebalance.allDefaults = 
$common.isEmptyString($scope.preview.rebalance.xml);
-
-                            $scope.preview.serverNearCache.xml = 
$generatorXml.cacheServerNearCache(val).join('');
-                            $scope.preview.serverNearCache.java = 
$generatorJava.cacheServerNearCache(val, varName).join('');
-                            $scope.preview.serverNearCache.allDefaults = 
$common.isEmptyString($scope.preview.serverNearCache.xml);
-
-                            $scope.preview.statistics.xml = 
$generatorXml.cacheStatistics(val).join('');
-                            $scope.preview.statistics.java = 
$generatorJava.cacheStatistics(val, varName).join('');
-                            $scope.preview.statistics.allDefaults = 
$common.isEmptyString($scope.preview.statistics.xml);
+                            generatePreview(val);
 
                             $common.markChanged($scope.ui.inputForm, 
'cacheBackupItemChanged');
                         }
                     }, true);
-
-                    $timeout(function () {
-                        $common.initPreview();
-                    })
                })
                 .error(function (errMsg) {
                     $common.showError(errMsg);
@@ -368,13 +390,6 @@ controlCenterModule.controller('cachesController', [
                 function selectItem() {
                     $table.tableReset();
 
-                    if (backup)
-                        $scope.backupItem = backup;
-                    else if (item)
-                        $scope.backupItem = angular.copy(item);
-                    else
-                        $scope.backupItem = undefined;
-
                     $scope.selectedItem = item;
 
                     if (item)
@@ -382,8 +397,15 @@ controlCenterModule.controller('cachesController', [
                     else
                         sessionStorage.removeItem('cacheSelectedItem');
 
+                    generatePreview();
+
                     $timeout(function () {
-                        $common.previewHeightUpdate();
+                        if (backup)
+                            $scope.backupItem = backup;
+                        else if (item)
+                            $scope.backupItem = angular.copy(item);
+                        else
+                            $scope.backupItem = undefined;
                     });
 
                     $timeout(function () {

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc0dbfe0/modules/control-center-web/src/main/js/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/controllers/clusters-controller.js 
b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
index a6b9dac..44f39ff 100644
--- a/modules/control-center-web/src/main/js/controllers/clusters-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
@@ -112,12 +112,6 @@ controlCenterModule.controller('clustersController', 
['$scope', '$controller', '
 
         $scope.panels = {activePanels: [0]};
 
-        $scope.$watchCollection('panels.activePanels', function () {
-            $timeout(function() {
-                $common.previewHeightUpdate();
-            })
-        });
-
         var simpleTables = {
             addresses: {msg: 'Such IP address already exists!', id: 
'IpAddress'},
             regions: {msg: 'Such region already exists!', id: 'Region'},
@@ -158,6 +152,104 @@ controlCenterModule.controller('clustersController', 
['$scope', '$controller', '
                 $common.showError(errMsg);
             });
 
+        // Fill cluster previews.
+        function generatePreview(val) {
+            if ($common.isDefined(val)) {
+                var clusterCaches = _.reduce($scope.caches, function(caches, 
cache){
+                    if (_.contains(val.caches, cache.value)) {
+                        caches.push(cache.cache);
+                    }
+
+                    return caches;
+                }, []);
+
+                $scope.preview.general.xml = 
$generatorXml.clusterCaches(clusterCaches, 
$generatorXml.clusterGeneral(val)).join('');
+                $scope.preview.general.java = 
$generatorJava.clusterCaches(clusterCaches, 
$generatorJava.clusterGeneral(val)).join('');
+                $scope.preview.general.allDefaults = 
$common.isEmptyString($scope.preview.general.xml);
+
+                $scope.preview.atomics.xml = 
$generatorXml.clusterAtomics(val).join('');
+                $scope.preview.atomics.java = 
$generatorJava.clusterAtomics(val).join('');
+                $scope.preview.atomics.allDefaults = 
$common.isEmptyString($scope.preview.atomics.xml);
+
+                $scope.preview.communication.xml = 
$generatorXml.clusterCommunication(val).join('');
+                $scope.preview.communication.java = 
$generatorJava.clusterCommunication(val).join('');
+                $scope.preview.communication.allDefaults = 
$common.isEmptyString($scope.preview.communication.xml);
+
+                $scope.preview.deployment.xml = 
$generatorXml.clusterDeployment(val).join('');
+                $scope.preview.deployment.java = 
$generatorJava.clusterDeployment(val).join('');
+                $scope.preview.deployment.allDefaults = 
$common.isEmptyString($scope.preview.deployment.xml);
+
+                $scope.preview.events.xml = 
$generatorXml.clusterEvents(val).join('');
+                $scope.preview.events.java = 
$generatorJava.clusterEvents(val).join('');
+                $scope.preview.events.allDefaults = 
$common.isEmptyString($scope.preview.events.xml);
+
+                $scope.preview.marshaller.xml = 
$generatorXml.clusterMarshaller(val).join('');
+                $scope.preview.marshaller.java = 
$generatorJava.clusterMarshaller(val).join('');
+                $scope.preview.marshaller.allDefaults = 
$common.isEmptyString($scope.preview.marshaller.xml);
+
+                $scope.preview.metrics.xml = 
$generatorXml.clusterMetrics(val).join('');
+                $scope.preview.metrics.java = 
$generatorJava.clusterMetrics(val).join('');
+                $scope.preview.metrics.allDefaults = 
$common.isEmptyString($scope.preview.metrics.xml);
+
+                $scope.preview.p2p.xml = 
$generatorXml.clusterP2p(val).join('');
+                $scope.preview.p2p.java = 
$generatorJava.clusterP2p(val).join('');
+                $scope.preview.p2p.allDefaults = 
$common.isEmptyString($scope.preview.p2p.xml);
+
+                $scope.preview.swap.xml = 
$generatorXml.clusterSwap(val).join('');
+                $scope.preview.swap.java = 
$generatorJava.clusterSwap(val).join('');
+                $scope.preview.swap.allDefaults = 
$common.isEmptyString($scope.preview.swap.xml);
+
+                $scope.preview.time.xml = 
$generatorXml.clusterTime(val).join('');
+                $scope.preview.time.java = 
$generatorJava.clusterTime(val).join('');
+                $scope.preview.time.allDefaults = 
$common.isEmptyString($scope.preview.time.xml);
+
+                $scope.preview.pools.xml = 
$generatorXml.clusterPools(val).join('');
+                $scope.preview.pools.java = 
$generatorJava.clusterPools(val).join('');
+                $scope.preview.pools.allDefaults = 
$common.isEmptyString($scope.preview.pools.xml);
+
+                $scope.preview.transactions.xml = 
$generatorXml.clusterTransactions(val).join('');
+                $scope.preview.transactions.java = 
$generatorJava.clusterTransactions(val).join('');
+                $scope.preview.transactions.allDefaults = 
$common.isEmptyString($scope.preview.transactions.xml);
+            }
+            else {
+                $scope.preview.general.xml = ' ';
+                $scope.preview.general.java = ' ';
+
+                $scope.preview.atomics.xml = ' ';
+                $scope.preview.atomics.java = ' ';
+
+                $scope.preview.communication.xml = ' ';
+                $scope.preview.communication.java = ' ';
+
+                $scope.preview.deployment.xml = ' ';
+                $scope.preview.deployment.java = ' ';
+
+                $scope.preview.events.xml = ' ';
+                $scope.preview.events.java = ' ';
+
+                $scope.preview.marshaller.xml = ' ';
+                $scope.preview.marshaller.java = ' ';
+
+                $scope.preview.metrics.xml = ' ';
+                $scope.preview.metrics.java = ' ';
+
+                $scope.preview.p2p.xml = ' ';
+                $scope.preview.p2p.java = ' ';
+
+                $scope.preview.swap.xml = ' ';
+                $scope.preview.swap.java = ' ';
+
+                $scope.preview.time.xml = ' ';
+                $scope.preview.time.java = ' ';
+
+                $scope.preview.pools.xml = ' ';
+                $scope.preview.pools.java = ' ';
+
+                $scope.preview.transactions.xml = ' ';
+                $scope.preview.transactions.java = ' ';
+            }
+        }
+
         // When landing on the page, get clusters and show them.
         $http.post('clusters/list')
             .success(function (data) {
@@ -212,69 +304,11 @@ controlCenterModule.controller('clustersController', 
['$scope', '$controller', '
                     if (val) {
                         sessionStorage.clusterBackupItem = angular.toJson(val);
 
-                        var clusterCaches = _.reduce($scope.caches, 
function(caches, cache){
-                            if (_.contains(val.caches, cache.value)) {
-                                caches.push(cache.cache);
-                            }
-
-                            return caches;
-                        }, []);
-
-                        $scope.preview.general.xml = 
$generatorXml.clusterCaches(clusterCaches, 
$generatorXml.clusterGeneral(val)).join('');
-                        $scope.preview.general.java = 
$generatorJava.clusterCaches(clusterCaches, 
$generatorJava.clusterGeneral(val)).join('');
-                        $scope.preview.general.allDefaults = 
$common.isEmptyString($scope.preview.general.xml);
-
-                        $scope.preview.atomics.xml = 
$generatorXml.clusterAtomics(val).join('');
-                        $scope.preview.atomics.java = 
$generatorJava.clusterAtomics(val).join('');
-                        $scope.preview.atomics.allDefaults = 
$common.isEmptyString($scope.preview.atomics.xml);
-
-                        $scope.preview.communication.xml = 
$generatorXml.clusterCommunication(val).join('');
-                        $scope.preview.communication.java = 
$generatorJava.clusterCommunication(val).join('');
-                        $scope.preview.communication.allDefaults = 
$common.isEmptyString($scope.preview.communication.xml);
-
-                        $scope.preview.deployment.xml = 
$generatorXml.clusterDeployment(val).join('');
-                        $scope.preview.deployment.java = 
$generatorJava.clusterDeployment(val).join('');
-                        $scope.preview.deployment.allDefaults = 
$common.isEmptyString($scope.preview.deployment.xml);
-
-                        $scope.preview.events.xml = 
$generatorXml.clusterEvents(val).join('');
-                        $scope.preview.events.java = 
$generatorJava.clusterEvents(val).join('');
-                        $scope.preview.events.allDefaults = 
$common.isEmptyString($scope.preview.events.xml);
-
-                        $scope.preview.marshaller.xml = 
$generatorXml.clusterMarshaller(val).join('');
-                        $scope.preview.marshaller.java = 
$generatorJava.clusterMarshaller(val).join('');
-                        $scope.preview.marshaller.allDefaults = 
$common.isEmptyString($scope.preview.marshaller.xml);
-
-                        $scope.preview.metrics.xml = 
$generatorXml.clusterMetrics(val).join('');
-                        $scope.preview.metrics.java = 
$generatorJava.clusterMetrics(val).join('');
-                        $scope.preview.metrics.allDefaults = 
$common.isEmptyString($scope.preview.metrics.xml);
-
-                        $scope.preview.p2p.xml = 
$generatorXml.clusterP2p(val).join('');
-                        $scope.preview.p2p.java = 
$generatorJava.clusterP2p(val).join('');
-                        $scope.preview.p2p.allDefaults = 
$common.isEmptyString($scope.preview.p2p.xml);
-
-                        $scope.preview.swap.xml = 
$generatorXml.clusterSwap(val).join('');
-                        $scope.preview.swap.java = 
$generatorJava.clusterSwap(val).join('');
-                        $scope.preview.swap.allDefaults = 
$common.isEmptyString($scope.preview.swap.xml);
-
-                        $scope.preview.time.xml = 
$generatorXml.clusterTime(val).join('');
-                        $scope.preview.time.java = 
$generatorJava.clusterTime(val).join('');
-                        $scope.preview.time.allDefaults = 
$common.isEmptyString($scope.preview.time.xml);
-
-                        $scope.preview.pools.xml = 
$generatorXml.clusterPools(val).join('');
-                        $scope.preview.pools.java = 
$generatorJava.clusterPools(val).join('');
-                        $scope.preview.pools.allDefaults = 
$common.isEmptyString($scope.preview.pools.xml);
-
-                        $scope.preview.transactions.xml = 
$generatorXml.clusterTransactions(val).join('');
-                        $scope.preview.transactions.java = 
$generatorJava.clusterTransactions(val).join('');
-                        $scope.preview.transactions.allDefaults = 
$common.isEmptyString($scope.preview.transactions.xml);
+                        generatePreview(val);
 
                         $common.markChanged($scope.ui.inputForm, 
'clusterBackupItemChanged');
                     }
                 }, true);
-
-                $timeout(function () {
-                    $common.initPreview();
-                })
             })
             .error(function (errMsg) {
                 $common.showError(errMsg);
@@ -286,20 +320,20 @@ controlCenterModule.controller('clustersController', 
['$scope', '$controller', '
 
                 $scope.selectedItem = item;
 
-                if (backup)
-                    $scope.backupItem = backup;
-                else if (item)
-                    $scope.backupItem = angular.copy(item);
-                else
-                    $scope.backupItem = undefined;
-
                 if (item)
                     sessionStorage.clusterSelectedItem = angular.toJson(item);
                 else
                     sessionStorage.removeItem('clusterSelectedItem');
 
+                generatePreview();
+
                 $timeout(function () {
-                    $common.previewHeightUpdate();
+                    if (backup)
+                        $scope.backupItem = backup;
+                    else if (item)
+                        $scope.backupItem = angular.copy(item);
+                    else
+                        $scope.backupItem = undefined;
                 });
 
                 $timeout(function () {

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc0dbfe0/modules/control-center-web/src/main/js/controllers/common-module.js
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/controllers/common-module.js 
b/modules/control-center-web/src/main/js/controllers/common-module.js
index e04fb69..921cff5 100644
--- a/modules/control-center-web/src/main/js/controllers/common-module.js
+++ b/modules/control-center-web/src/main/js/controllers/common-module.js
@@ -481,37 +481,6 @@ controlCenterModule.service('$common', [
             return false;
         }
 
-        function resizePreview (el) {
-            var left = $('#' + el.id + '-left');
-
-            if (left.height() > 0) {
-                var right = $('#' + el.id + '-right');
-
-                var parent = right.parent();
-
-                var hScroll = right.find('.ace_scrollbar-h');
-
-                var scrollHeight = hScroll.length > 0 ? hScroll.height() : 0;
-
-                var marginTop = parent.css('marginTop');
-
-                var minHeight = right.attr('min-height');
-
-                if (isDefined(minHeight) && minHeight.length > 0)
-                    minHeight = minHeight.replace('px', '');
-                else
-                    minHeight = 0;
-
-                var parentHeight = Math.max(minHeight, 75, left.height() - 2 * 
(isDefined(marginTop) ? marginTop.replace('px', '') : 0));
-
-                parent.outerHeight(parentHeight);
-
-                right.height(parentHeight - scrollHeight * 3 / 4);
-
-                right.resize();
-            }
-        }
-
         function formChanged (form) {
             return isDefined(form) && form.$dirty;
         }
@@ -665,26 +634,6 @@ controlCenterModule.service('$common', [
                 if (popover)
                     popover.hide();
             },
-            previewHeightUpdate: function () {
-                $('.panel-collapse').each(function (ix, el) {
-                    resizePreview(el);
-                })
-            },
-            initPreview: function () {
-                MutationObserver = window.MutationObserver || 
window.WebKitMutationObserver || window.MozMutationObserver;
-
-                $('.panel-collapse').each(function (ix, el) {
-                    var observer = new MutationObserver(function(mutations, 
observer) {
-                        resizePreview(el);
-                    });
-
-                    observer.observe(el, {
-                        childList: true,
-                        subtree: true,
-                        attributeFilter: ['class']
-                    });
-                });
-            },
             markChanged: function (form, item) {
                 sessionStorage.setItem(item, 'true');
 
@@ -1006,24 +955,29 @@ controlCenterModule.service('$preview', ['$timeout', 
function ($timeout) {
 
     var previewPrevContent = [];
 
-    var clearPromise = null;
-
     function previewChanged (ace) {
         var content = ace[0];
 
+        var editor = ace[1];
+
+        var clearPromise = editor.clearPromise;
+
+        var previewNewContent = content.lines;
+
         if (content.action == 'remove')
             previewPrevContent = content.lines;
-        else {
+        // Do not mark the text changes for special marker value: ' '.
+        else if (previewPrevContent.length > 0 && previewNewContent.length > 0 
&& previewNewContent[0] != ' '
+            && previewPrevContent[0] != ' ') {
             if (clearPromise)
                 $timeout.cancel(clearPromise);
 
-            var previewNewContent = content.lines;
-
             var start = -1;
             var end = -1;
             var prevLen = previewPrevContent.length;
             var newLen = previewNewContent.length;
 
+            // Find an index of a first line with different text.
             for (var i = 0; (i < newLen || i < prevLen) && start < 0; i++) {
                 if (previewNewContent[i] != previewPrevContent[i]) {
                     start = i;
@@ -1033,8 +987,10 @@ controlCenterModule.service('$preview', ['$timeout', 
function ($timeout) {
             }
 
             if (start >= 0) {
+                // Find an index of a last line with different text by 
checking last string of old and new content in reverse order.
                 for (i = 1; (i <= newLen || i <= prevLen) && end < 0; i++) {
-                    if (previewNewContent[newLen - i] != 
previewPrevContent[prevLen - i]) {
+                    // Also check when difference added in end of content.
+                    if (previewNewContent[newLen - i] != 
previewPrevContent[prevLen - i] || prevLen - i < start) {
                         end = newLen - i + 1;
 
                         break;
@@ -1044,15 +1000,15 @@ controlCenterModule.service('$preview', ['$timeout', 
function ($timeout) {
                 if (end < 0)
                     end = start + 1;
 
-                var editor = ace[1];
-
-                editor.selection.setSelectionRange(new Range(start, 0, end, 
0), false);
+                if (start <= end) {
+                    editor.selection.setSelectionRange(new Range(start, 0, 
end, 0), false);
 
-                clearPromise = $timeout(function () {
-                    editor.clearSelection();
+                    editor.clearPromise = $timeout(function () {
+                        editor.clearSelection();
 
-                    clearPromise = null;
-                }, 3000);
+                        editor.clearPromise = null;
+                    }, 3000);
+                }
             }
 
             previewPrevContent = [];

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc0dbfe0/modules/control-center-web/src/main/js/controllers/metadata-controller.js
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/controllers/metadata-controller.js 
b/modules/control-center-web/src/main/js/controllers/metadata-controller.js
index 400104f..9e418bf 100644
--- a/modules/control-center-web/src/main/js/controllers/metadata-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/metadata-controller.js
@@ -168,11 +168,6 @@ controlCenterModule.controller('metadataController', [
 
             $scope.panels = {activePanels: [0, 1]};
 
-            $scope.$watchCollection('panels.activePanels', function () {
-                $timeout(function() {
-                    $common.previewHeightUpdate();
-                })
-            });
             $scope.metadatas = [];
 
             $scope.isJavaBuildInClass = function () {
@@ -204,11 +199,12 @@ controlCenterModule.controller('metadataController', [
                 function setSelectedAndBackupItem() {
                     $table.tableReset();
 
-                    $scope.backupItem = bak;
                     $scope.selectedItem = sel;
 
+                    generatePreview();
+
                     $timeout(function () {
-                        $common.previewHeightUpdate();
+                        $scope.backupItem = bak;
                     });
 
                     $timeout(function () {
@@ -489,6 +485,35 @@ controlCenterModule.controller('metadataController', [
                     $scope.loadMeta.action = 'connect';
             };
 
+            function generatePreview(val) {
+                if ($common.isDefined(val)) {
+                    $scope.preview.general.xml = 
$generatorXml.metadataGeneral(val).join('');
+                    $scope.preview.general.java = 
$generatorJava.metadataGeneral(val).join('');
+                    $scope.preview.general.allDefaults = 
$common.isEmptyString($scope.preview.general.xml);
+
+                    $scope.preview.query.xml = 
$generatorXml.metadataQuery(val).join('');
+                    $scope.preview.query.java = 
$generatorJava.metadataQuery(val).join('');
+                    $scope.preview.query.allDefaults = 
$common.isEmptyString($scope.preview.query.xml);
+
+                    $scope.preview.store.xml = 
$generatorXml.metadataStore(val).join('');
+                    $scope.preview.store.java = 
$generatorJava.metadataStore(val).join('');
+                    $scope.preview.store.allDefaults = 
$common.isEmptyString($scope.preview.store.xml);
+                }
+                else {
+                    $scope.preview.general.xml = ' ';
+                    $scope.preview.general.java = ' ';
+                    $scope.preview.general.allDefaults = ' ';
+
+                    $scope.preview.query.xml = ' ';
+                    $scope.preview.query.java = ' ';
+                    $scope.preview.query.allDefaults = ' ';
+
+                    $scope.preview.store.xml = ' ';
+                    $scope.preview.store.java = ' ';
+                    $scope.preview.store.allDefaults = ' ';
+                }
+            }
+
             // When landing on the page, get metadatas and show them.
             $http.post('metadata/list')
                 .success(function (data) {
@@ -540,25 +565,11 @@ controlCenterModule.controller('metadataController', [
                         if (val) {
                             sessionStorage.metadataBackupItem = 
angular.toJson(val);
 
-                            $scope.preview.general.xml = 
$generatorXml.metadataGeneral(val).join('');
-                            $scope.preview.general.java = 
$generatorJava.metadataGeneral(val).join('');
-                            $scope.preview.general.allDefaults = 
$common.isEmptyString($scope.preview.general.xml);
-
-                            $scope.preview.query.xml = 
$generatorXml.metadataQuery(val).join('');
-                            $scope.preview.query.java = 
$generatorJava.metadataQuery(val).join('');
-                            $scope.preview.query.allDefaults = 
$common.isEmptyString($scope.preview.query.xml);
-
-                            $scope.preview.store.xml = 
$generatorXml.metadataStore(val).join('');
-                            $scope.preview.store.java = 
$generatorJava.metadataStore(val).join('');
-                            $scope.preview.store.allDefaults = 
$common.isEmptyString($scope.preview.store.xml);
+                            generatePreview(val);
 
                             $common.markChanged($scope.ui.inputForm, 
'metadataBackupItemChanged');
                         }
                     }, true);
-
-                    $timeout(function () {
-                        $common.initPreview();
-                    });
                 })
                 .error(function (errMsg) {
                     $common.showError(errMsg);

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc0dbfe0/modules/control-center-web/src/main/js/public/stylesheets/style.scss
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/public/stylesheets/style.scss 
b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
index 0b9e4ae..ed274a5 100644
--- a/modules/control-center-web/src/main/js/public/stylesheets/style.scss
+++ b/modules/control-center-web/src/main/js/public/stylesheets/style.scss
@@ -1188,6 +1188,7 @@ a {
     color: $input-color-placeholder;
     display: table;
     width: 100%;
+    height: 26px;
 
     label {
         display: table-cell;

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc0dbfe0/modules/control-center-web/src/main/js/routes/generator/generator-common.js
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/routes/generator/generator-common.js 
b/modules/control-center-web/src/main/js/routes/generator/generator-common.js
index 9a7dfa0..5789506 100644
--- 
a/modules/control-center-web/src/main/js/routes/generator/generator-common.js
+++ 
b/modules/control-center-web/src/main/js/routes/generator/generator-common.js
@@ -74,13 +74,14 @@ $generatorCommon.builder = function () {
     };
 
     res.line = function (s) {
-        if (this.needEmptyLine) {
-            this.push('\n');
-            this.needEmptyLine = false;
-        }
+        if (s) {
+            if (this.needEmptyLine)
+                this.push('\n');
 
-        if (s)
             this.append(s);
+        }
+
+        this.needEmptyLine = false;
 
         this.push('\n');
         this.lineStart = true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc0dbfe0/modules/control-center-web/src/main/js/views/includes/controls.jade
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/views/includes/controls.jade 
b/modules/control-center-web/src/main/js/views/includes/controls.jade
index 58eda61..b9dbfa7 100644
--- a/modules/control-center-web/src/main/js/views/includes/controls.jade
+++ b/modules/control-center-web/src/main/js/views/includes/controls.jade
@@ -466,8 +466,8 @@ mixin preview(preview, id)
         .preview-legend(ng-show='!preview[#{preview}].allDefaults')
             a(ng-class='{active: !#{previewState}, inactive: #{previewState}}' 
ng-click='#{previewState} = false') XML&nbsp;
             a(ng-class='{active: #{previewState}, inactive: !#{previewState}}' 
ng-click='#{previewState} = true') Java
-        .preview-content(ng-if='!preview[#{preview}].allDefaults && 
!#{previewState}' id='#{id}' ui-ace='{onLoad: previewInit, onChange: 
previewChanged, mode: "xml"}' ng-model='preview[#{preview}].xml' 
min-height='{{::group.minHeight}}')
-        .preview-content(ng-if='!preview[#{preview}].allDefaults && 
#{previewState}' id='#{id}' ui-ace='{onLoad: previewInit, onChange: 
previewChanged, mode: "java"}' ng-model='preview[#{preview}].java' 
min-height='{{::group.minHeight}}')
+        .preview-content(ng-if='!preview[#{preview}].allDefaults && 
!#{previewState}' id='#{id}' ui-ace='{onLoad: previewInit, onChange: 
previewChanged, mode: "xml", advanced: {autoScrollEditorIntoView: true, 
minLines: 3, maxLines: 50}}' ng-model='preview[#{preview}].xml' 
min-height='{{::group.minHeight}}')
+        .preview-content(ng-if='!preview[#{preview}].allDefaults && 
#{previewState}' id='#{id}' ui-ace='{onLoad: previewInit, onChange: 
previewChanged, mode: "java", advanced: {autoScrollEditorIntoView: true, 
minLines: 3, maxLines: 50}}' ng-model='preview[#{preview}].java' 
min-height='{{::group.minHeight}}')
         .preview-content-empty(ng-if='preview[#{preview}].allDefaults' 
id='#{id}')
             label All Defaults
 

Reply via email to