You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by zh...@apache.org on 2016/07/12 12:25:40 UTC

[2/5] kylin git commit: reformat code

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/index.html
----------------------------------------------------------------------
diff --git a/webapp/app/index.html b/webapp/app/index.html
index 36245f1..282567c 100644
--- a/webapp/app/index.html
+++ b/webapp/app/index.html
@@ -20,54 +20,54 @@
 <!doctype html>
 <html id="ng-app">
 <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <base href="/kylin/">
-    <link rel="icon" href="image/favicon.ico" type="image/x-icon">
-    <link rel="shortcut icon" href="image/favicon.ico" type="image/x-icon">
-    <title>Kylin</title>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <base href="/kylin/">
+  <link rel="icon" href="image/favicon.ico" type="image/x-icon">
+  <link rel="shortcut icon" href="image/favicon.ico" type="image/x-icon">
+  <title>Kylin</title>
 
-    <!-- ref:css css/styles.min.<%= buildNumber %>.css -->
-    <link rel="stylesheet" type="text/css" href="components/bootstrap/dist/css/bootstrap.min.css">
-    <link rel="stylesheet" type="text/css" href="components/components-font-awesome/css/font-awesome.css">
+  <!-- ref:css css/styles.min.<%= buildNumber %>.css -->
+  <link rel="stylesheet" type="text/css" href="components/bootstrap/dist/css/bootstrap.min.css">
+  <link rel="stylesheet" type="text/css" href="components/components-font-awesome/css/font-awesome.css">
 
-    <link rel="stylesheet" type="text/css" href="components/angular-tree-control/css/tree-control.css">
-    <link rel="stylesheet" type="text/css" href="components/angular-tree-control/css/tree-control-attribute.css">
-    <link rel="stylesheet" type="text/css" href="components/messenger/build/css/messenger.css">
-    <link rel="stylesheet" type="text/css" href="components/messenger/build/css/messenger-theme-ice.css">
-    <link rel="stylesheet" type="text/css" href="components/ng-grid/ng-grid.css">
-    <link rel="stylesheet" type="text/css" href="components/angular-ui-grid/ui-grid.min.css">
-    <link rel="stylesheet" type="text/css" href="components/chosen/chosen.css">
-    <link rel="stylesheet" type="text/css" href="components/angular-chosen-localytics/chosen-spinner.css">
-    <link rel="stylesheet" type="text/css" href="components/animate.css/animate.css">
-    <link rel="stylesheet" type="text/css" href="components/nvd3/nv.d3.min.css">
+  <link rel="stylesheet" type="text/css" href="components/angular-tree-control/css/tree-control.css">
+  <link rel="stylesheet" type="text/css" href="components/angular-tree-control/css/tree-control-attribute.css">
+  <link rel="stylesheet" type="text/css" href="components/messenger/build/css/messenger.css">
+  <link rel="stylesheet" type="text/css" href="components/messenger/build/css/messenger-theme-ice.css">
+  <link rel="stylesheet" type="text/css" href="components/ng-grid/ng-grid.css">
+  <link rel="stylesheet" type="text/css" href="components/angular-ui-grid/ui-grid.min.css">
+  <link rel="stylesheet" type="text/css" href="components/chosen/chosen.css">
+  <link rel="stylesheet" type="text/css" href="components/angular-chosen-localytics/chosen-spinner.css">
+  <link rel="stylesheet" type="text/css" href="components/animate.css/animate.css">
+  <link rel="stylesheet" type="text/css" href="components/nvd3/nv.d3.min.css">
 
-    <link rel="stylesheet" type="text/css" href="css/AdminLTE.css">
-    <link rel="stylesheet" type="text/css" href="components/bootstrap-sweetalert/lib/sweet-alert.css">
-    <link rel="stylesheet" type="text/css" href="components/angular-bootstrap-nav-tree/dist/abn_tree.css">
-    <link rel="stylesheet" type="text/css" href="components/angular-toggle-switch/angular-toggle-switch.css">
-    <link rel="stylesheet" type="text/css" href="components/angular-ui-select/dist/select.css">
-    <link rel="stylesheet" type="text/css" href="components/angular-bootstrap-datetimepicker/src/css/datetimepicker.css">
+  <link rel="stylesheet" type="text/css" href="css/AdminLTE.css">
+  <link rel="stylesheet" type="text/css" href="components/bootstrap-sweetalert/lib/sweet-alert.css">
+  <link rel="stylesheet" type="text/css" href="components/angular-bootstrap-nav-tree/dist/abn_tree.css">
+  <link rel="stylesheet" type="text/css" href="components/angular-toggle-switch/angular-toggle-switch.css">
+  <link rel="stylesheet" type="text/css" href="components/angular-ui-select/dist/select.css">
+  <link rel="stylesheet" type="text/css" href="components/angular-bootstrap-datetimepicker/src/css/datetimepicker.css">
 
-    <link rel="stylesheet/less" href="less/build.less">
-    <!-- endref -->
+  <link rel="stylesheet/less" href="less/build.less">
+  <!-- endref -->
 
-    <!-- This has to be at the top to make it works in IE   -->
-    <!--[if lte IE 8]>
-    <script>
-        document.createElement('loading');
-        document.createElement('pagination');
-    </script>
-    <![endif]-->
+  <!-- This has to be at the top to make it works in IE   -->
+  <!--[if lte IE 8]>
+  <script>
+    document.createElement('loading');
+    document.createElement('pagination');
+  </script>
+  <![endif]-->
 </head>
 
 <body ng-controller="PageCtrl">
 
 <div class="navbar navbar-default navbar-fixed-top" ng-include="'partials/header.html'"></div>
 <div id="main" class="main-container">
-    <div class="main-content">
-        <div class="page-content" ng-view></div>
-    </div>
+  <div class="main-content">
+    <div class="page-content" ng-view></div>
+  </div>
 </div>
 <footer class="navbar-fixed-bottom navbar-footer" ng-include="'partials/footer.html'"></footer>
 
@@ -205,39 +205,39 @@
 <!--template-->
 <!-- static template for cube save/update result notification -->
 <script type="text/ng-template" id="cubeResultError.html">
-    <div class="callout">
-        <h4>Error Message</h4>
-        <p>{{text}}</p>
-    </div>
-    <div class="callout callout-danger">
-        <h4>Cube Schema</h4>
-        <pre>{{schema}}</pre>
-    </div>
+  <div class="callout">
+    <h4>Error Message</h4>
+    <p>{{text}}</p>
+  </div>
+  <div class="callout callout-danger">
+    <h4>Cube Schema</h4>
+    <pre>{{schema}}</pre>
+  </div>
 </script>
 
 <script type="text/ng-template" id="cubeResultSuccess.html">
-    <div class="callout callout-info">
-        <p>{{text}}</p>
-    </div>
+  <div class="callout callout-info">
+    <p>{{text}}</p>
+  </div>
 </script>
 
 <!--template-->
 <!-- static template for cube save/update result notification -->
 <script type="text/ng-template" id=" modelResultError.html">
-    <div class="callout callout-info">
-        <h4>Error Message</h4>
-        <p>{{text}}</p>
-    </div>
-    <div class="callout callout-danger">
-        <h4>Model Schema</h4>
-        <pre>{{schema}}</pre>
-    </div>
+  <div class="callout callout-info">
+    <h4>Error Message</h4>
+    <p>{{text}}</p>
+  </div>
+  <div class="callout callout-danger">
+    <h4>Model Schema</h4>
+    <pre>{{schema}}</pre>
+  </div>
 </script>
 
 <script type="text/ng-template" id="modelResultSuccess.html">
-    <div class="callout callout-info">
-        <p>{{text}}</p>
-    </div>
+  <div class="callout callout-info">
+    <p>{{text}}</p>
+  </div>
 </script>
 
 <!-- static template for cube save/update result notification -->

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/js/app.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/app.js b/webapp/app/js/app.js
index 3691b82..3708037 100644
--- a/webapp/app/js/app.js
+++ b/webapp/app/js/app.js
@@ -14,7 +14,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
-*/
+ */
 
 //Kylin Application Module
-KylinApp = angular.module('kylin', ['ngRoute', 'ngResource', 'ngGrid', 'ui.grid', 'ui.grid.resizeColumns', 'ui.bootstrap', 'ui.ace', 'base64', 'angularLocalStorage', 'localytics.directives', 'treeControl', 'nvd3ChartDirectives','ngLoadingRequest','oitozero.ngSweetAlert','ngCookies','angular-underscore', 'ngAnimate', 'ui.sortable','angularBootstrapNavTree','toggle-switch','ngSanitize','ui.select','ui.bootstrap.datetimepicker']);
+KylinApp = angular.module('kylin', ['ngRoute', 'ngResource', 'ngGrid', 'ui.grid', 'ui.grid.resizeColumns', 'ui.bootstrap', 'ui.ace', 'base64', 'angularLocalStorage', 'localytics.directives', 'treeControl', 'nvd3ChartDirectives', 'ngLoadingRequest', 'oitozero.ngSweetAlert', 'ngCookies', 'angular-underscore', 'ngAnimate', 'ui.sortable', 'angularBootstrapNavTree', 'toggle-switch', 'ngSanitize', 'ui.select', 'ui.bootstrap.datetimepicker']);

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/js/config.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/config.js b/webapp/app/js/config.js
index 46fdecd..ce4531e 100644
--- a/webapp/app/js/config.js
+++ b/webapp/app/js/config.js
@@ -39,61 +39,61 @@ var Config = {
 // Angular module to load routes.
 KylinApp.config(function ($routeProvider, $httpProvider, $locationProvider, $logProvider) {
 
-  // Set debug to true by default.
-  if (angular.isUndefined(Config.debug) || Config.debug !== false) {
-    Config.debug = true;
-  }
-
-  // Set development to true by default.
-  if (angular.isUndefined(Config.development) || Config.development !== false) {
-    Config.development = true;
-  }
-
-  // Disable logging if debug is off.
-  if (Config.debug === false) {
-    $logProvider.debugEnabled(false);
-  }
+    // Set debug to true by default.
+    if (angular.isUndefined(Config.debug) || Config.debug !== false) {
+      Config.debug = true;
+    }
 
-  // Loop over routes and add to router.
-  angular.forEach(Config.routes, function (route) {
-    $routeProvider.when(route.url, route.params).otherwise({redirectTo:'/'});
-  });
+    // Set development to true by default.
+    if (angular.isUndefined(Config.development) || Config.development !== false) {
+      Config.development = true;
+    }
 
-  // Set to use HTML5 mode, which removes the #! from modern browsers.
-  $locationProvider.html5Mode(true);
-
-  //configure $http to view a login whenever a 401 unauthorized response arrives
-  $httpProvider.responseInterceptors.push(function ($rootScope, $q) {
-    return function (promise) {
-      return promise.then(
-        //success -> don't intercept
-        function (response) {
-          return response;
-        },
-        //error -> if 401 save the request and broadcast an event
-        function (response) {
-          if (response.status === 401 && !(response.config.url.indexOf("user/authentication") !== -1 && response.config.method === 'POST')) {
-            var deferred = $q.defer(),
-              req = {
-                config: response.config,
-                deferred: deferred
-              };
-            $rootScope.requests401.push(req);
-            $rootScope.$broadcast('event:loginRequired');
-            return deferred.promise;
-          }
+    // Disable logging if debug is off.
+    if (Config.debug === false) {
+      $logProvider.debugEnabled(false);
+    }
 
-          if (response.status === 403) {
-            $rootScope.$broadcast('event:forbidden', response.data.exception);
+    // Loop over routes and add to router.
+    angular.forEach(Config.routes, function (route) {
+      $routeProvider.when(route.url, route.params).otherwise({redirectTo: '/'});
+    });
+
+    // Set to use HTML5 mode, which removes the #! from modern browsers.
+    $locationProvider.html5Mode(true);
+
+    //configure $http to view a login whenever a 401 unauthorized response arrives
+    $httpProvider.responseInterceptors.push(function ($rootScope, $q) {
+      return function (promise) {
+        return promise.then(
+          //success -> don't intercept
+          function (response) {
+            return response;
+          },
+          //error -> if 401 save the request and broadcast an event
+          function (response) {
+            if (response.status === 401 && !(response.config.url.indexOf("user/authentication") !== -1 && response.config.method === 'POST')) {
+              var deferred = $q.defer(),
+                req = {
+                  config: response.config,
+                  deferred: deferred
+                };
+              $rootScope.requests401.push(req);
+              $rootScope.$broadcast('event:loginRequired');
+              return deferred.promise;
+            }
+
+            if (response.status === 403) {
+              $rootScope.$broadcast('event:forbidden', response.data.exception);
+            }
+
+            return $q.reject(response);
           }
-
-          return $q.reject(response);
-        }
-      );
-    };
-  });
-  httpHeaders = $httpProvider.defaults.headers;
-})
+        );
+      };
+    });
+    httpHeaders = $httpProvider.defaults.headers;
+  })
   .run(function ($location) {
 
     if (angular.isUndefined(Config.uri)) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/js/listeners.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/listeners.js b/webapp/app/js/listeners.js
index ab32a0d..e5c40fb 100644
--- a/webapp/app/js/listeners.js
+++ b/webapp/app/js/listeners.js
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-KylinApp.run(function ($rootScope, $http, $location, UserService, AuthenticationService, MessageService, $cookieStore,ProjectService,ProjectModel,AccessService,SweetAlert,loadingRequest) {
+KylinApp.run(function ($rootScope, $http, $location, UserService, AuthenticationService, MessageService, $cookieStore, ProjectService, ProjectModel, AccessService, SweetAlert, loadingRequest) {
 
   $rootScope.permissions = {
     READ: {name: 'CUBE QUERY', value: 'READ', mask: 1},
@@ -28,17 +28,17 @@ KylinApp.run(function ($rootScope, $http, $location, UserService, Authentication
   $rootScope.$on("$routeChangeStart", function () {
     AuthenticationService.ping(function (data) {
       UserService.setCurUser(data);
-      if(!data.userDetails){
+      if (!data.userDetails) {
         $location.path(UserService.getHomePage());
-      }else{
+      } else {
         //get project info when login
-        if (!ProjectModel.projects.length&&!$rootScope.userAction.islogout) {
+        if (!ProjectModel.projects.length && !$rootScope.userAction.islogout) {
 
           loadingRequest.show();
           ProjectService.listReadable({}, function (projects) {
             loadingRequest.hide();
 
-            if(!projects.length){
+            if (!projects.length) {
               return;
             }
 
@@ -48,15 +48,15 @@ KylinApp.run(function ($rootScope, $http, $location, UserService, Authentication
             });
             ProjectModel.setProjects(_projects);
             var projectInCookie = $cookieStore.get("project");
-            if(projectInCookie&&ProjectModel.getIndex(projectInCookie)==-1){
+            if (projectInCookie && ProjectModel.getIndex(projectInCookie) == -1) {
               projectInCookie = null;
             }
             var selectedProject = projectInCookie != null ? projectInCookie : null;
-            if(projectInCookie!=null){
+            if (projectInCookie != null) {
               selectedProject = projectInCookie;
-            }else if(UserService.hasRole('ROLE_ADMIN')){
+            } else if (UserService.hasRole('ROLE_ADMIN')) {
               selectedProject = null;
-            }else{
+            } else {
               selectedProject = ProjectModel.projects[0].name
             }
 
@@ -70,7 +70,7 @@ KylinApp.run(function ($rootScope, $http, $location, UserService, Authentication
               });
             });
 
-          },function(e){
+          }, function (e) {
             loadingRequest.hide();
             $location.path(UserService.getHomePage());
           });

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/less/app.less
----------------------------------------------------------------------
diff --git a/webapp/app/less/app.less b/webapp/app/less/app.less
index cc52b41..5aa2a25 100644
--- a/webapp/app/less/app.less
+++ b/webapp/app/less/app.less
@@ -785,25 +785,25 @@ input:-moz-placeholder {
   text-overflow: ellipsis;
 }
 
-.dropdown-menu{
-  z-index:9999;
+.dropdown-menu {
+  z-index: 9999;
 }
 
-.panel-group .panel{
+.panel-group .panel {
   overflow: auto !important;
 }
 
-.middle-popover .popover{
+.middle-popover .popover {
   width: 360px;
   max-width: 360px;
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
   font-size: 14px;
   line-height: 1.428571429;
-  color:#808080;
+  color: #808080;
   background-color: #ffffff;
 }
 
-.middle-popover .popover-content, .large-popover .popover-content{
+.middle-popover .popover-content, .large-popover .popover-content {
   font-size: 13px;
   font-weight: normal;
   line-height: 18px;
@@ -812,19 +812,21 @@ input:-moz-placeholder {
   word-break: normal;
 }
 
-.middle-popover .popover-content ol, .large-popover .popover-content ol{
+.middle-popover .popover-content ol, .large-popover .popover-content ol {
   -webkit-padding-start: 20px;
   padding-start: 20px;
 }
-.large-popover .popover{
+
+.large-popover .popover {
   width: 600px;
   max-width: 600px;
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
   font-size: 14px;
-  color:#808080;
+  color: #808080;
   line-height: 1.428571429;
   background-color: #ffffff;
 }
+
 pre {
   white-space: pre-wrap;
   white-space: -moz-pre-wrap;

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/less/build.less
----------------------------------------------------------------------
diff --git a/webapp/app/less/build.less b/webapp/app/less/build.less
index be8f7df..4271bac 100644
--- a/webapp/app/less/build.less
+++ b/webapp/app/less/build.less
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 @import 'layout.less';
 @import 'navbar.less';
 @import 'home.less';

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/less/component.less
----------------------------------------------------------------------
diff --git a/webapp/app/less/component.less b/webapp/app/less/component.less
index 929006f..e23859d 100644
--- a/webapp/app/less/component.less
+++ b/webapp/app/less/component.less
@@ -16,278 +16,365 @@
  */
 
 /** table related **/
-.dataTables_wrapper>.row:first-child {
+.dataTables_wrapper > .row:first-child {
   padding-top: 12px;
   padding-bottom: 12px;
   background-color: #EFF3F8;
 }
 
-.dataTables_wrapper>.row {
-  margin: 0!important;
+.dataTables_wrapper > .row {
+  margin: 0 !important;
 }
 
 /** utilities **/
 .dark {
   color: #333333 !important;
 }
+
 .white {
   color: #ffffff !important;
 }
+
 .red {
   color: #dd5a43 !important;
 }
+
 .red2 {
   color: #e08374 !important;
 }
+
 .light-red {
   color: #ff7777 !important;
 }
+
 .blue {
   color: #478fca !important;
 }
+
 .light-blue {
   color: #93cbf9 !important;
 }
+
 .green {
   color: #69aa46 !important;
 }
+
 .light-green {
   color: #b0d877 !important;
 }
+
 .orange {
   color: #ff892a !important;
 }
+
 .orange2 {
   color: #feb902 !important;
 }
+
 .light-orange {
   color: #fcac6f !important;
 }
+
 .purple {
   color: #a069c3 !important;
 }
+
 .pink {
   color: #c6699f !important;
 }
+
 .pink2 {
   color: #d6487e !important;
 }
+
 .brown {
   color: #a52a2a !important;
 }
+
 .grey {
   color: #777777 !important;
 }
+
 .light-grey {
   color: #bbbbbb !important;
 }
+
 .bigger-110 {
   font-size: 110% !important;
 }
+
 .bigger-120 {
   font-size: 120% !important;
 }
+
 .bigger-130 {
   font-size: 130% !important;
 }
+
 .bigger-140 {
   font-size: 140% !important;
 }
+
 .bigger-150 {
   font-size: 150% !important;
 }
+
 .bigger-160 {
   font-size: 160% !important;
 }
+
 .bigger-170 {
   font-size: 170% !important;
 }
+
 .bigger-180 {
   font-size: 180% !important;
 }
+
 .bigger-190 {
   font-size: 190% !important;
 }
+
 .bigger-200 {
   font-size: 200% !important;
 }
+
 .bigger-210 {
   font-size: 210% !important;
 }
+
 .bigger-220 {
   font-size: 220% !important;
 }
+
 .bigger-230 {
   font-size: 230% !important;
 }
+
 .bigger-240 {
   font-size: 240% !important;
 }
+
 .bigger-250 {
   font-size: 250% !important;
 }
+
 .bigger-260 {
   font-size: 260% !important;
 }
+
 .bigger-270 {
   font-size: 270% !important;
 }
+
 .bigger-280 {
   font-size: 280% !important;
 }
+
 .bigger-290 {
   font-size: 290% !important;
 }
+
 .bigger-300 {
   font-size: 300% !important;
 }
+
 .bigger-115 {
   font-size: 115% !important;
 }
+
 .bigger-125 {
   font-size: 125% !important;
 }
+
 .bigger-175 {
   font-size: 175% !important;
 }
+
 .bigger-225 {
   font-size: 225% !important;
 }
+
 .bigger-275 {
   font-size: 275% !important;
 }
+
 .smaller-90 {
   font-size: 90% !important;
 }
+
 .smaller-80 {
   font-size: 80% !important;
 }
+
 .smaller-70 {
   font-size: 70% !important;
 }
+
 .smaller-60 {
   font-size: 60% !important;
 }
+
 .smaller-50 {
   font-size: 50% !important;
 }
+
 .smaller-40 {
   font-size: 40% !important;
 }
+
 .smaller-30 {
   font-size: 30% !important;
 }
+
 .smaller-20 {
   font-size: 20% !important;
 }
+
 .smaller-75 {
   font-size: 75% !important;
 }
+
 .width-20 {
   width: 20% !important;
 }
+
 .width-25 {
   width: 25% !important;
 }
+
 .width-30 {
   width: 30% !important;
 }
+
 .width-35 {
   width: 35% !important;
 }
+
 .width-40 {
   width: 40% !important;
 }
+
 .width-45 {
   width: 45% !important;
 }
+
 .width-50 {
   width: 50% !important;
 }
+
 .width-55 {
   width: 55% !important;
 }
+
 .width-60 {
   width: 60% !important;
 }
+
 .width-65 {
   width: 65% !important;
 }
+
 .width-70 {
   width: 70% !important;
 }
+
 .width-75 {
   width: 75% !important;
 }
+
 .width-80 {
   width: 80% !important;
 }
+
 .width-85 {
   width: 85% !important;
 }
+
 .width-90 {
   width: 90% !important;
 }
+
 .width-95 {
   width: 95% !important;
 }
+
 .width-100 {
   width: 100% !important;
 }
+
 .width-75 {
   width: 75% !important;
 }
+
 .width-25 {
   width: 25% !important;
 }
+
 .width-auto {
   width: auto !important;
 }
+
 .height-auto {
   height: auto !important;
 }
+
 .no-padding {
   padding: 0 !important;
 }
+
 .no-padding-bottom {
   padding-bottom: 0 !important;
 }
+
 .no-padding-top {
   padding-top: 0 !important;
 }
+
 .no-padding-left {
   padding-left: 0 !important;
 }
+
 .no-padding-right {
   padding-right: 0 !important;
 }
+
 .no-margin {
   margin: 0 !important;
 }
+
 .no-margin-bottom {
   margin-bottom: 0 !important;
 }
+
 .no-margin-top {
   margin-top: 0 !important;
 }
+
 .no-margin-left {
   margin-left: 0 !important;
 }
+
 .no-margin-right {
   margin-right: 0 !important;
 }
+
 .no-border {
   border-width: 0;
 }
+
 .no-border-bottom {
   border-bottom-width: 0;
 }
+
 .no-border-top {
   border-top-width: 0;
 }
+
 .no-border-left {
   border-left-width: 0;
 }
+
 .no-border-right {
   border-right-width: 0;
 }
@@ -304,25 +391,25 @@ span.input-icon {
 .nav-search .nav-search-input {
   border: 1px solid #6fb3e0;
   width: 152px;
-  height: 28px!important;
+  height: 28px !important;
   padding-top: 2px;
   padding-bottom: 2px;
-  border-radius: 4px!important;
+  border-radius: 4px !important;
   font-size: 13px;
   line-height: 1.3;
-  color: #666!important;
+  color: #666 !important;
   z-index: 11;
   -webkit-transition: width ease .15s;
   -o-transition: width ease .15s;
   transition: width ease .15s;
 }
 
-.input-icon>input {
+.input-icon > input {
   padding-left: 24px;
   padding-right: 6px;
 }
 
-.input-icon.input-icon-right>input {
+.input-icon.input-icon-right > input {
   padding-left: 6px;
   padding-right: 24px;
 }
@@ -331,7 +418,7 @@ span.input-icon {
   text-align: center;
 }
 
-.input-icon>.ace-icon {
+.input-icon > .ace-icon {
   padding: 0 3px;
   z-index: 2;
   position: absolute;
@@ -344,7 +431,7 @@ span.input-icon {
   font-size: 16px;
 }
 
-.input-icon.input-icon-right>.ace-icon {
+.input-icon.input-icon-right > .ace-icon {
   left: auto;
   right: 3px;
 }
@@ -360,6 +447,7 @@ span.input-icon {
   margin: 12px 0;
   border-top-color: rgba(0, 0, 0, 0.11);
 }
+
 .hr-double {
   height: 3px;
   border-top: 1px solid #E3E3E3;
@@ -367,83 +455,103 @@ span.input-icon {
   border-top-color: rgba(0, 0, 0, 0.11);
   border-bottom-color: rgba(0, 0, 0, 0.11);
 }
+
 .hr.dotted,
 .hr-dotted {
   border-style: dotted;
 }
+
 .hr-32,
 .hr32 {
   margin: 32px 0;
 }
+
 .hr-30,
 .hr30 {
   margin: 30px 0;
 }
+
 .hr-28,
 .hr28 {
   margin: 28px 0;
 }
+
 .hr-26,
 .hr26 {
   margin: 26px 0;
 }
+
 .hr-24,
 .hr24 {
   margin: 24px 0;
 }
+
 .hr-22,
 .hr22 {
   margin: 22px 0;
 }
+
 .hr-20,
 .hr20 {
   margin: 20px 0;
 }
+
 .hr-18,
 .hr18 {
   margin: 18px 0;
 }
+
 .hr-16,
 .hr16 {
   margin: 16px 0;
 }
+
 .hr-14,
 .hr14 {
   margin: 14px 0;
 }
+
 .hr-12,
 .hr12 {
   margin: 12px 0;
 }
+
 .hr-10,
 .hr10 {
   margin: 10px 0;
 }
+
 .hr-8,
 .hr8 {
   margin: 8px 0;
 }
+
 .hr-6,
 .hr6 {
   margin: 6px 0;
 }
+
 .hr-4,
 .hr4 {
   margin: 4px 0;
 }
+
 .hr-2,
 .hr2 {
   margin: 2px 0;
 }
+
 .space {
   max-height: 1px;
   min-height: 1px;
   overflow: hidden;
   margin: 12px 0;
 }
+
 [class*="vspace-"] {
   display: none;
 }
+
 .space-32 {
   max-height: 1px;
   min-height: 1px;
@@ -451,6 +559,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 32px 0 31px;
 }
+
 [class*="vspace-32"] {
   max-height: 1px;
   min-height: 1px;
@@ -458,6 +567,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 32px 0 31px 0;
 }
+
 .space-30 {
   max-height: 1px;
   min-height: 1px;
@@ -465,6 +575,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 30px 0 29px;
 }
+
 [class*="vspace-30"] {
   max-height: 1px;
   min-height: 1px;
@@ -472,6 +583,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 30px 0 29px 0;
 }
+
 .space-28 {
   max-height: 1px;
   min-height: 1px;
@@ -479,6 +591,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 28px 0 27px;
 }
+
 [class*="vspace-28"] {
   max-height: 1px;
   min-height: 1px;
@@ -486,6 +599,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 28px 0 27px 0;
 }
+
 .space-26 {
   max-height: 1px;
   min-height: 1px;
@@ -493,6 +607,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 26px 0 25px;
 }
+
 [class*="vspace-26"] {
   max-height: 1px;
   min-height: 1px;
@@ -500,6 +615,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 26px 0 25px 0;
 }
+
 .space-24 {
   max-height: 1px;
   min-height: 1px;
@@ -507,6 +623,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 24px 0 23px;
 }
+
 [class*="vspace-24"] {
   max-height: 1px;
   min-height: 1px;
@@ -514,6 +631,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 24px 0 23px 0;
 }
+
 .space-22 {
   max-height: 1px;
   min-height: 1px;
@@ -521,6 +639,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 22px 0 21px;
 }
+
 [class*="vspace-22"] {
   max-height: 1px;
   min-height: 1px;
@@ -528,6 +647,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 22px 0 21px 0;
 }
+
 .space-20 {
   max-height: 1px;
   min-height: 1px;
@@ -535,6 +655,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 20px 0 19px;
 }
+
 [class*="vspace-20"] {
   max-height: 1px;
   min-height: 1px;
@@ -542,6 +663,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 20px 0 19px 0;
 }
+
 .space-18 {
   max-height: 1px;
   min-height: 1px;
@@ -549,6 +671,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 18px 0 17px;
 }
+
 [class*="vspace-18"] {
   max-height: 1px;
   min-height: 1px;
@@ -556,6 +679,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 18px 0 17px 0;
 }
+
 .space-16 {
   max-height: 1px;
   min-height: 1px;
@@ -563,6 +687,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 16px 0 15px;
 }
+
 [class*="vspace-16"] {
   max-height: 1px;
   min-height: 1px;
@@ -570,6 +695,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 16px 0 15px 0;
 }
+
 .space-14 {
   max-height: 1px;
   min-height: 1px;
@@ -577,6 +703,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 14px 0 13px;
 }
+
 [class*="vspace-14"] {
   max-height: 1px;
   min-height: 1px;
@@ -584,6 +711,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 14px 0 13px 0;
 }
+
 .space-12 {
   max-height: 1px;
   min-height: 1px;
@@ -591,6 +719,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 12px 0 11px;
 }
+
 [class*="vspace-12"] {
   max-height: 1px;
   min-height: 1px;
@@ -598,6 +727,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 12px 0 11px 0;
 }
+
 .space-10 {
   max-height: 1px;
   min-height: 1px;
@@ -605,6 +735,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 10px 0 9px;
 }
+
 [class*="vspace-10"] {
   max-height: 1px;
   min-height: 1px;
@@ -612,6 +743,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 10px 0 9px 0;
 }
+
 .space-8 {
   max-height: 1px;
   min-height: 1px;
@@ -619,6 +751,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 8px 0 7px;
 }
+
 [class*="vspace-8"] {
   max-height: 1px;
   min-height: 1px;
@@ -626,6 +759,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 8px 0 7px 0;
 }
+
 .space-6 {
   max-height: 1px;
   min-height: 1px;
@@ -633,6 +767,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 6px 0 5px;
 }
+
 [class*="vspace-6"] {
   max-height: 1px;
   min-height: 1px;
@@ -640,6 +775,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 6px 0 5px 0;
 }
+
 .space-4 {
   max-height: 1px;
   min-height: 1px;
@@ -647,6 +783,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 4px 0 3px;
 }
+
 [class*="vspace-4"] {
   max-height: 1px;
   min-height: 1px;
@@ -654,6 +791,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 4px 0 3px 0;
 }
+
 .space-2 {
   max-height: 1px;
   min-height: 1px;
@@ -661,6 +799,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 2px 0 1px;
 }
+
 [class*="vspace-2"] {
   max-height: 1px;
   min-height: 1px;
@@ -668,6 +807,7 @@ span.input-icon {
   margin: 12px 0;
   margin: 2px 0 1px 0;
 }
+
 .space-0,
 [class*="vspace-0"] {
   max-height: 1px;
@@ -676,21 +816,25 @@ span.input-icon {
   margin: 12px 0;
   margin: 0;
 }
+
 @media only screen and (max-width: 479px) {
   [class*="vspace-"][class*="-xs"] {
     display: block;
   }
 }
+
 @media only screen and (max-width: 767px) {
   [class*="vspace-"][class*="-sm"] {
     display: block;
   }
 }
+
 @media only screen and (max-width: 991px) {
   [class*="vspace-"][class*="-md"] {
     display: block;
   }
 }
+
 @media only screen and (max-width: 1199px) {
   [class*="vspace-"][class*="-lg"] {
     display: block;
@@ -706,11 +850,13 @@ span.input-icon {
   margin: 0;
   position: relative;
 }
+
 .wizard-steps li {
   display: table-cell;
   text-align: center;
   width: 1%;
 }
+
 .wizard-steps li .step {
   border: 5px solid #ced1d6;
   color: #546474;
@@ -725,6 +871,7 @@ span.input-icon {
   line-height: 30px;
   text-align: center;
 }
+
 .wizard-steps li:before {
   display: block;
   content: "";
@@ -737,20 +884,24 @@ span.input-icon {
   top: 21px;
   z-index: 1;
 }
+
 .wizard-steps li:last-child:before {
   max-width: 50%;
   width: 50%;
 }
+
 .wizard-steps li:first-child:before {
   max-width: 51%;
   left: 50%;
 }
+
 .wizard-steps li.active:before,
 .wizard-steps li.complete:before,
 .wizard-steps li.active .step,
 .wizard-steps li.complete .step {
   border-color: #5293c4;
 }
+
 .wizard-steps li.complete .step {
   cursor: default;
   color: #FFF;
@@ -758,6 +909,7 @@ span.input-icon {
   -o-transition: transform ease 0.1s;
   transition: transform ease 0.1s;
 }
+
 .wizard-steps li.complete .step:before {
   display: block;
   position: absolute;
@@ -775,6 +927,7 @@ span.input-icon {
   font-size: 17px;
   color: #87ba21;
 }
+
 .wizard-steps li.complete:hover .step {
   -moz-transform: scale(1.1);
   -webkit-transform: scale(1.1);
@@ -783,9 +936,11 @@ span.input-icon {
   transform: scale(1.1);
   border-color: #80afd4;
 }
+
 .wizard-steps li.complete:hover:before {
   border-color: #80afd4;
 }
+
 .wizard-steps li .title {
   display: block;
   margin-top: 4px;
@@ -797,24 +952,30 @@ span.input-icon {
   table-layout: fixed;
   word-wrap: break-word;
 }
+
 .wizard-steps li.complete .title,
 .wizard-steps li.active .title {
   color: #2b3d53;
 }
+
 .step-content {
   position: relative;
 }
+
 .step-content .step-pane {
   display: none;
   min-height: 200px;
   padding: 4px 8px 12px;
 }
+
 .step-content .step-pane.active {
   display: block;
 }
+
 .wizard-actions {
   text-align: right;
 }
+
 @media only screen and (max-width: 767px) {
   .wizard-steps li .step {
     width: 30px;
@@ -822,37 +983,43 @@ span.input-icon {
     line-height: 24px;
     border-width: 3px;
   }
+
   .wizard-steps li:before,
   .wizard-steps li:after {
     border-width: 3px;
   }
+
   .wizard-steps li.complete .step:before {
     line-height: 24px;
     font-size: 13px;
   }
+
   .wizard-steps li:before {
     top: 16px;
   }
+
   .step-content .step-pane {
     padding: 4px 4px 6px;
     min-height: 150px;
   }
 }
-.progress-bar-inverse{
+
+.progress-bar-inverse {
   background-color: #000000;
 }
-.progress-bar-pending{
+
+.progress-bar-pending {
   background-color: #C6C41D;
 }
 
 .sort-item {
-    padding: 2px;
-    width: 50px;
-    height: 20px;
-    cursor: move;
+  padding: 2px;
+  width: 50px;
+  height: 20px;
+  cursor: move;
 }
 
-.cube-dimension .dl-horizontal{
+.cube-dimension .dl-horizontal {
   margin-top: 0px !important;
   margin-bottom: 0px !important;
 }
@@ -863,12 +1030,15 @@ span.input-icon {
   border-radius: 3px;
   border: 1px solid #CCCCCC;
 }
+
 .chosen-container-single .chosen-single span {
   padding-top: 2px;
 }
+
 .chosen-container-single .chosen-single div b {
   margin-top: 2px;
 }
+
 .chosen-container-active .chosen-single,
 .chosen-container-active.chosen-with-drop .chosen-single {
   border-color: #ccc;
@@ -879,14 +1049,13 @@ span.input-icon {
   box-shadow: 0 0 8px rgba(82, 168, 236, .6)
 }
 
-
 //override callout info in AdinLTE.css
 .callout {
-   margin: 0 0 20px 0 !important;
-   padding: 15px 30px 15px 15px !important;
-   border-left: 5px solid #eee !important;
-   color: black !important;
- }
+  margin: 0 0 20px 0 !important;
+  padding: 15px 30px 15px 15px !important;
+  border-left: 5px solid #eee !important;
+  color: black !important;
+}
 
 .callout.callout-info {
   background-color: #f0f7fd !important;
@@ -895,8 +1064,8 @@ span.input-icon {
 }
 
 .callout.callout-danger {
-  background-color: #fcf2f2  !important;
-  border-color: #dFb5b4  !important;
+  background-color: #fcf2f2 !important;
+  border-color: #dFb5b4 !important;
   color: black !important;
 }
 
@@ -906,18 +1075,18 @@ span.input-icon {
   color: black !important;
 }
 
-ul.messenger-theme-ice .messenger-message{
-  color:#666667 !important;
+ul.messenger-theme-ice .messenger-message {
+  color: #666667 !important;
 }
-.messenger-message.alert{
+
+.messenger-message.alert {
   background-color: #f6f6f6 !important;
 }
 
-.model-dimension-edit .chosen-container{
-  width:100% !important;
+.model-dimension-edit .chosen-container {
+  width: 100% !important;
 }
 
-
 //overwrite style for abn-tree
 .abn-tree-animate-enter,
 li.abn-tree-row.ng-enter {
@@ -925,12 +1094,13 @@ li.abn-tree-row.ng-enter {
   position: relative;
   display: block;
   opacity: 0;
-  max-height:0px;
+  max-height: 0px;
 }
+
 .abn-tree-animate-enter.abn-tree-animate-enter-active,
-li.abn-tree-row.ng-enter-active{
+li.abn-tree-row.ng-enter-active {
   opacity: 1;
-  max-height:30px;
+  max-height: 30px;
 }
 
 .abn-tree-animate-leave,
@@ -938,65 +1108,69 @@ li.abn-tree-row.ng-leave {
   transition: 200ms linear all;
   position: relative;
   display: block;
-  height:30px;
+  height: 30px;
   max-height: 30px;
   opacity: 1;
 }
+
 .abn-tree-animate-leave.abn-tree-animate-leave-active,
 li.abn-tree-row.ng-leave-active {
   height: 0px;
-  max-height:0px;
+  max-height: 0px;
   opacity: 0;
 }
 
-
 /*
 ------------------------------------------
 Angular 1.2.0 Animation
 */
 
-
-.abn-tree-animate.ng-enter{
+.abn-tree-animate.ng-enter {
 
 }
-.abn-tree-animate.ng-enter{
+
+.abn-tree-animate.ng-enter {
 
 }
 
-.abn-tree .indented  {
+.abn-tree .indented {
   font-size: 13px;
   color: #3a87ad;
 }
-ul.abn-tree li.abn-tree-row a{
- word-break: break-all;
+
+ul.abn-tree li.abn-tree-row a {
+  word-break: break-all;
 }
-.model-design .btn-box-tool{
+
+.model-design .btn-box-tool {
   font-size: 13px !important;
 }
-.dropdown-menu a{
+
+.dropdown-menu a {
   cursor: pointer;
 }
 
-.box-2px{
-  border-top:solid 2px #3c8dbc !important;
+.box-2px {
+  border-top: solid 2px #3c8dbc !important;
 }
 
-.abn-tree i.indented{
-  font-size:14px !important;
+.abn-tree i.indented {
+  font-size: 14px !important;
 }
 
 //form validate
-.has-feedback{
+.has-feedback {
 
 }
-.highlight-bule{
-  color:#428bca !important;
+
+.highlight-bule {
+  color: #428bca !important;
 }
 
-.sweet-alert .lead.text-muted{
-  word-break:break-all;
+.sweet-alert .lead.text-muted {
+  word-break: break-all;
 }
 
-.modal-body.streaming-source .ace_editor{
+.modal-body.streaming-source .ace_editor {
   height: 600px !important;
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/less/home.less
----------------------------------------------------------------------
diff --git a/webapp/app/less/home.less b/webapp/app/less/home.less
index ed7a0a4..e123976 100644
--- a/webapp/app/less/home.less
+++ b/webapp/app/less/home.less
@@ -18,7 +18,7 @@
 /** Home page style **/
 .bg-holder {
   position: absolute;
-  top:0;
+  top: 0;
   left: 0;
   width: 100%;
 }
@@ -80,7 +80,7 @@
 }
 
 /** Login page **/
-.login-backgroud{
+.login-backgroud {
   background-color: #FFF;
 }
 
@@ -89,7 +89,7 @@
   margin: 0 auto;
 }
 
-.mylogin-body{
+.mylogin-body {
   margin-top: 100px;
 }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/less/layout.less
----------------------------------------------------------------------
diff --git a/webapp/app/less/layout.less b/webapp/app/less/layout.less
index 2553ab2..d9501f2 100644
--- a/webapp/app/less/layout.less
+++ b/webapp/app/less/layout.less
@@ -15,15 +15,16 @@
  * limitations under the License.
  */
 
-.navbar-fixed-top+.main-container {
+.navbar-fixed-top + .main-container {
   padding-top: 45px;
 }
 
-body{
+body {
   overflow: auto !important;
   min-width: 960px;
 
 }
+
 .main-container {
   padding-bottom: 45px;
   min-width: 960px;

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/less/navbar.less
----------------------------------------------------------------------
diff --git a/webapp/app/less/navbar.less b/webapp/app/less/navbar.less
index d56b98a..b3e4eeb 100644
--- a/webapp/app/less/navbar.less
+++ b/webapp/app/less/navbar.less
@@ -46,48 +46,49 @@
   padding-right: 12px;
 }
 
-@media only screen and (max-height: 320px){
+@media only screen and (max-height: 320px) {
   .navbar-fixed-top .navbar-collapse {
     max-height: 200px;
   }
 }
 
-@media only screen and (max-height: 360px){
+@media only screen and (max-height: 360px) {
   .navbar-fixed-top .navbar-collapse {
     max-height: 240px;
   }
 }
 
-@media only screen and (max-height: 400px){
+@media only screen and (max-height: 400px) {
   .navbar-fixed-top .navbar-collapse {
     max-height: 280px;
   }
 }
 
-@media only screen and (max-width: 991px){
+@media only screen and (max-width: 991px) {
   .navbar .navbar-nav {
     margin: 0 -6px;
   }
 }
 
-@media only screen and (max-width: 991px){
-  .navbar .navbar-nav>li:first-child {
+@media only screen and (max-width: 991px) {
+  .navbar .navbar-nav > li:first-child {
     border-top-width: 0;
   }
 }
-@media only screen and (max-width: 991px){
-  .navbar .navbar-nav>li, .navbar .navbar-nav>li:first-child {
+
+@media only screen and (max-width: 991px) {
+  .navbar .navbar-nav > li, .navbar .navbar-nav > li:first-child {
     border-width: 1px 0 0;
   }
 }
 
-@media only screen and (max-width: 991px){
-  .navbar .navbar-nav .dropdown-menu>li>a {
-    color: #FFF!important;
+@media only screen and (max-width: 991px) {
+  .navbar .navbar-nav .dropdown-menu > li > a {
+    color: #FFF !important;
   }
 }
 
-@media only screen and (max-width: 991px){
+@media only screen and (max-width: 991px) {
   .navbar .navbar-nav .dropdown-menu {
     float: none;
     position: relative;
@@ -97,24 +98,24 @@
   }
 }
 
-@media only screen and (max-width: 767px){
+@media only screen and (max-width: 767px) {
   .user-menu.dropdown-close.dropdown-menu-right {
-    right: 0!important;
+    right: 0 !important;
   }
 }
 
-.navbar .navbar-nav>li:first-child {
+.navbar .navbar-nav > li:first-child {
   border-width: 0 1px;
 }
 
-.navbar .navbar-nav>li {
-  border: 1px solid rgba(0,0,0,.2);
+.navbar .navbar-nav > li {
+  border: 1px solid rgba(0, 0, 0, .2);
   border-width: 0 1px 0 0;
 }
 
-.navbar .navbar-nav>li.open>a, .navbar .navbar-nav>li>a:focus, .navbar .navbar-nav>li>a:hover {
-  background-color: rgba(0,0,0,.1)!important;
-  color: #fff!important;
+.navbar .navbar-nav > li.open > a, .navbar .navbar-nav > li > a:focus, .navbar .navbar-nav > li > a:hover {
+  background-color: rgba(0, 0, 0, .1) !important;
+  color: #fff !important;
 }
 
 .navbar .navbar-brand:focus, .navbar .navbar-brand:hover {
@@ -130,38 +131,42 @@
   height: auto;
 }
 
-.navbar .navbar-nav>li>a {
+.navbar .navbar-nav > li > a {
   padding-top: 12px;
   padding-bottom: 11px;
   height: 45px;
   background-color: transparent;
   font-size: 13px;
   color: #fff;
-  text-shadow: 0 1px 0 rgba(0,0,0,.25);
+  text-shadow: 0 1px 0 rgba(0, 0, 0, .25);
 }
 
-.navbar-nav:not(.navbar-right)> li > a {
+.navbar-nav:not(.navbar-right) > li > a {
   font-size: 16px !important;
 }
-.navbar-nav> li.purple > a {
+
+.navbar-nav > li.purple > a {
   background-color: #892e65;
 }
-.navbar-nav> li.purple > a:link {
+
+.navbar-nav > li.purple > a:link {
+  background-color: #892e65 !important;
+}
+
+.navbar-nav > li.purple > a:visited {
   background-color: #892e65 !important;
- }
-.navbar-nav> li.purple > a:visited {
-  background-color: #892e65  !important;
 }
-.navbar-nav>li.purple>a:hover {
-  background-color: #762c59  !important;
+
+.navbar-nav > li.purple > a:hover {
+  background-color: #762c59 !important;
 }
 
-.navbar-nav> li.green > a {
+.navbar-nav > li.green > a {
   background-color: #2e8965;
 }
 
-.navbar-nav>li.green>a:hover {
-  background-color: #2c7659  !important;
+.navbar-nav > li.green > a:hover {
+  background-color: #2c7659 !important;
 }
 
 .user-info {
@@ -195,11 +200,11 @@
   margin-left: 7px;
 }
 
-.navbar .navbar-nav>li>.dropdown-menu>li>a {
+.navbar .navbar-nav > li > .dropdown-menu > li > a {
   line-height: 2;
 }
 
-.dropdown-menu>li>a {
+.dropdown-menu > li > a {
   font-size: 13px;
   padding-left: 11px;
   padding-right: 11px;
@@ -207,7 +212,7 @@
   margin-top: 1px;
 }
 
-.user-menu>li>a {
+.user-menu > li > a {
   padding: 4px 12px;
 }
 
@@ -215,7 +220,8 @@
   left: auto;
   right: -5px;
 }
-.navbar-nav>li>.dropdown-menu {
+
+.navbar-nav > li > .dropdown-menu {
   z-index: 1033;
 }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/partials/footer.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/footer.html b/webapp/app/partials/footer.html
index d0a513a..ca42ed0 100644
--- a/webapp/app/partials/footer.html
+++ b/webapp/app/partials/footer.html
@@ -17,12 +17,13 @@
 -->
 
 <nav class="navbar-inner">
-    <div class="container">
-        <div class="copyright">
+  <div class="container">
+    <div class="copyright">
             <span>
                 <a href="http://kylin.apache.org" style="color:#808080;"><i class="fa fa-home"></i> Apache Kylin</a> |
-                <a href="http://kylin.apache.org/community/" style="color:#808080;"><i class="fa fa-users"></i> Apache Kylin Community</a>
+                <a href="http://kylin.apache.org/community/" style="color:#808080;"><i class="fa fa-users"></i> Apache
+                  Kylin Community</a>
             </span>
-        </div>
     </div>
+  </div>
 </nav>

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/partials/header.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/header.html b/webapp/app/partials/header.html
index b87fea1..6249f51 100644
--- a/webapp/app/partials/header.html
+++ b/webapp/app/partials/header.html
@@ -17,61 +17,68 @@
 -->
 
 <div class="navbar-container" id="navbar-container">
-    <div class="navbar navbar-default" role="navigation">
-        <div class="container-fluid">
-            <div class="navbar-header">
-                <a class="navbar-brand" href="query" style="padding: 2px 10px 0px 0px"><img src="image/logo.png" height="40px" width="40px"/><small> Kylin </small></a>
-            </div>
+  <div class="navbar navbar-default" role="navigation">
+    <div class="container-fluid">
+      <div class="navbar-header">
+        <a class="navbar-brand" href="query" style="padding: 2px 10px 0px 0px"><img src="image/logo.png" height="40px"
+                                                                                    width="40px"/>
+          <small> Kylin</small>
+        </a>
+      </div>
 
-            <div class="navbar-collapse collapse" collapse="isCollapsed">
-                <ul class="nav navbar-nav">
-                    <li class="project-cntnr"  style="padding:7px 15px;background-color:#2e8965;" ng-if="userService.isAuthorized()">
-                        <select chosen ng-model="projectModel.selectedProject" ng-init="newAccess.permission=permissions.READ.value;"
-                                ng-options="project.name as project.name for project in projectModel.projects"
-                                style="width: 180px"
-                                data-placeholder="select a project"
-                                class="chosen-select">
-                            <option ng-if="userService.hasRole('ROLE_ADMIN')" ng-selected="projectModel.selectedProject==null"  value=""> -- Choose Project -- </option>
-                        </select>
-                    </li>
-                    <li class="{{activeTab=='query'?'purple':'green'}}" ng-if="userService.isAuthorized()">
-                        <a href="query">Insight</a>
-                    </li>
-                    <li class="{{activeTab=='models'?'purple':'green'}}" ng-if="userService.isAuthorized()">
-                        <a href="models">Model</a>
-                    </li>
-                    <li class="{{activeTab=='jobs'?'purple':'green'}}" ng-if="userService.isAuthorized()">
-                        <a href="jobs">Monitor</a>
-                    </li>
-                    <li class="{{activeTab=='admin'?'purple':'green'}}" ng-if="userService.isAuthorized()">
-                        <a href="admin">System</a>
-                    </li>
-                </ul>
-                <ul class="nav navbar-nav navbar-right">
-                    <li class="dropdown light-blue" ng-if="config.documents.length > 0">
-                        <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-book"></i> Help <i class="ace-icon fa fa-caret-down"></i></a>
-                        <ul class="user-menu dropdown-menu-right dropdown-menu dropdown-yellow dropdown-caret dropdown-close">
-                            <li ng-repeat="document in config.documents" ng-if="document.link">
-                                <a target="_blank" href="{{document.link}}" >{{document.displayName}}</a>
-                            </li>
-                        </ul>
-                    </li>
-                    <li class="purple" ng-if="!userService.isAuthorized()"><a href="login">Login</a></li>
-                    <li class="dropdown light-blue" ng-if="userService.isAuthorized()">
-                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
-                            <span class="user-info"><small>Welcome,</small> {{userService.getCurUser().userDetails.username}}</span>
-                            <i class="ace-icon fa fa-caret-down"></i>
-                        </a>
-                        <ul class="user-menu dropdown-menu-right dropdown-menu dropdown-yellow dropdown-caret dropdown-close" role="menu">
-                            <li> <a ng-click="logout()"><i class="ace-icon fa fa-power-off"></i> Logout</a> </li>
-                        </ul>
-                    </li>
-                </ul>
-            </div>
-        </div>
+      <div class="navbar-collapse collapse" collapse="isCollapsed">
+        <ul class="nav navbar-nav">
+          <li class="project-cntnr" style="padding:7px 15px;background-color:#2e8965;"
+              ng-if="userService.isAuthorized()">
+            <select chosen ng-model="projectModel.selectedProject"
+                    ng-init="newAccess.permission=permissions.READ.value;"
+                    ng-options="project.name as project.name for project in projectModel.projects"
+                    style="width: 180px"
+                    data-placeholder="select a project"
+                    class="chosen-select">
+              <option ng-if="userService.hasRole('ROLE_ADMIN')" ng-selected="projectModel.selectedProject==null"
+                      value=""> -- Choose Project --
+              </option>
+            </select>
+          </li>
+          <li class="{{activeTab=='query'?'purple':'green'}}" ng-if="userService.isAuthorized()">
+            <a href="query">Insight</a>
+          </li>
+          <li class="{{activeTab=='models'?'purple':'green'}}" ng-if="userService.isAuthorized()">
+            <a href="models">Model</a>
+          </li>
+          <li class="{{activeTab=='jobs'?'purple':'green'}}" ng-if="userService.isAuthorized()">
+            <a href="jobs">Monitor</a>
+          </li>
+          <li class="{{activeTab=='admin'?'purple':'green'}}" ng-if="userService.isAuthorized()">
+            <a href="admin">System</a>
+          </li>
+        </ul>
+        <ul class="nav navbar-nav navbar-right">
+          <li class="dropdown light-blue" ng-if="config.documents.length > 0">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-book"></i> Help <i
+              class="ace-icon fa fa-caret-down"></i></a>
+            <ul class="user-menu dropdown-menu-right dropdown-menu dropdown-yellow dropdown-caret dropdown-close">
+              <li ng-repeat="document in config.documents" ng-if="document.link">
+                <a target="_blank" href="{{document.link}}">{{document.displayName}}</a>
+              </li>
+            </ul>
+          </li>
+          <li class="purple" ng-if="!userService.isAuthorized()"><a href="login">Login</a></li>
+          <li class="dropdown light-blue" ng-if="userService.isAuthorized()">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+              <span class="user-info"><small>Welcome,</small> {{userService.getCurUser().userDetails.username}}</span>
+              <i class="ace-icon fa fa-caret-down"></i>
+            </a>
+            <ul class="user-menu dropdown-menu-right dropdown-menu dropdown-yellow dropdown-caret dropdown-close"
+                role="menu">
+              <li><a ng-click="logout()"><i class="ace-icon fa fa-power-off"></i> Logout</a></li>
+            </ul>
+          </li>
+        </ul>
+      </div>
     </div>
-
-
+  </div>
 
 
 </div>

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/partials/home.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/home.html b/webapp/app/partials/home.html
index f6c63d0..1e5cf02 100644
--- a/webapp/app/partials/home.html
+++ b/webapp/app/partials/home.html
@@ -18,48 +18,48 @@
 
 <!--Big Background Image-->
 <div class="bg-holder">
-    <img src="image/Himg.png" />
+  <img src="image/Himg.png"/>
 </div>
 
 <!--Carousel Part-->
 <div style="height: 442px;">
-    <carousel interval="myInterval">
-        <slide ng-repeat="slide in slides" active="slide.active">
-            <img ng-src="{{slide.image}}" />
-            <div class="carousel-caption">
-                <h1>{{slide.caption}}</h1>
-                <p>{{slide.text}}</p>
-            </div>
-        </slide>
-    </carousel>
+  <carousel interval="myInterval">
+    <slide ng-repeat="slide in slides" active="slide.active">
+      <img ng-src="{{slide.image}}"/>
+      <div class="carousel-caption">
+        <h1>{{slide.caption}}</h1>
+        <p>{{slide.text}}</p>
+      </div>
+    </slide>
+  </carousel>
 </div>
 
 <!--Features Part-->
 <div id="features" class="container marketing">
-    <div class="row">
-        <div class="col-xs-12 col-sm-4 feature">
-            <a><i class="fa fa-cubes fa-5x"></i></a>
-            <h2>Create Cube</h2>
-            <p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies
-                vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo
-                cursus magna.</p>
-            <p><a class="btn btn-default" href="cubes" role="button">View details �</a></p>
-        </div>
-        <div class="col-xs-12 col-sm-4 feature">
-            <a><i class="fa fa-tasks fa-5x"></i></a>
-            <h2>Query Online</h2>
-            <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras
-                mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris
-                condimentum nibh.</p>
-            <p><a class="btn btn-default" href="query" role="button">View details �</a></p>
-        </div>
-        <div class="col-xs-12 col-sm-4 feature">
-            <a><i class="fa fa-sort-amount-asc fa-5x"></i></a>
-            <h2>Jobs</h2>
-            <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula
-                porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh,
-                ut fermentum massa justo sit amet risus.</p>
-            <p><a class="btn btn-default" href="jobs" role="button">View details �</a></p>
-        </div>
+  <div class="row">
+    <div class="col-xs-12 col-sm-4 feature">
+      <a><i class="fa fa-cubes fa-5x"></i></a>
+      <h2>Create Cube</h2>
+      <p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies
+        vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo
+        cursus magna.</p>
+      <p><a class="btn btn-default" href="cubes" role="button">View details �</a></p>
     </div>
+    <div class="col-xs-12 col-sm-4 feature">
+      <a><i class="fa fa-tasks fa-5x"></i></a>
+      <h2>Query Online</h2>
+      <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras
+        mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris
+        condimentum nibh.</p>
+      <p><a class="btn btn-default" href="query" role="button">View details �</a></p>
+    </div>
+    <div class="col-xs-12 col-sm-4 feature">
+      <a><i class="fa fa-sort-amount-asc fa-5x"></i></a>
+      <h2>Jobs</h2>
+      <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula
+        porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh,
+        ut fermentum massa justo sit amet risus.</p>
+      <p><a class="btn btn-default" href="jobs" role="button">View details �</a></p>
+    </div>
+  </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/partials/login.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/login.html b/webapp/app/partials/login.html
index 452257b..faffb87 100644
--- a/webapp/app/partials/login.html
+++ b/webapp/app/partials/login.html
@@ -17,45 +17,47 @@
 -->
 
 <div class="my-light-login login-layout login-backgroud">
-    <div class="main-container ">
-        <div class="main-content row">
-            <div class="col-sm-10 col-sm-offset-1">
-                <div class="login-container mylogin-body">
-                    <div class="login-box box box-solid">
-                        <div class="box-header">
-                            <div class="box-title">
-                                <h4 class="header blue lighter bigger"> <i class="ace-icon fa fa-coffee green"></i> Sign in </h4>
-                            </div>
-                        </div>
-                        <div class="box-body">
-                            <div class="alert alert-danger animated fadeIn" ng-if="error">{{error}}</div>
-                            <form name="login_form" ng-submit="login()">
-                                <div class="form-group">
+  <div class="main-container ">
+    <div class="main-content row">
+      <div class="col-sm-10 col-sm-offset-1">
+        <div class="login-container mylogin-body">
+          <div class="login-box box box-solid">
+            <div class="box-header">
+              <div class="box-title">
+                <h4 class="header blue lighter bigger"><i class="ace-icon fa fa-coffee green"></i> Sign in </h4>
+              </div>
+            </div>
+            <div class="box-body">
+              <div class="alert alert-danger animated fadeIn" ng-if="error">{{error}}</div>
+              <form name="login_form" ng-submit="login()">
+                <div class="form-group">
                                     <span class="width-100 input-icon input-icon-right">
-                                        <input id="username" class="form-control" ng-model="username" type="text" autofocus="autofocus" ng-required placeholder="Username" auto-fill-sync />
+                                        <input id="username" class="form-control" ng-model="username" type="text"
+                                               autofocus="autofocus" ng-required placeholder="Username" auto-fill-sync/>
                                         <i class="ace-icon fa fa-user"></i>
                                     </span>
-                                </div>
-                                <div class="form-group">
+                </div>
+                <div class="form-group">
                                     <span class="width-100 input-icon input-icon-right">
-                                        <input id="password" class="form-control" ng-model="password" type="password" ng-required placeholder="Password" auto-fill-sync />
+                                        <input id="password" class="form-control" ng-model="password" type="password"
+                                               ng-required placeholder="Password" auto-fill-sync/>
                                         <i class="ace-icon fa fa-lock"></i>
                                     </span>
-                                </div>
-                                <div class="space"></div>
-                                <div class="form-group">
-                                    <a href="http://kylin.apache.org/community/" target="_blank" class="text-muted">Login Issue?</a>
-                                    <button class="pull-right btn btn-sm btn-primary" type="submit" ng-disabled="login_form.$invalid">
-                                        <i class="ace-icon fa fa-key"></i>
-                                        <span class="bigger-110">{{loading? 'Logging In...': 'Log In'}}</span>
-                                    </button>
-                                </div>
-                                <div class="space-4"></div>
-                            </form>
-                        </div>
-                    </div>
                 </div>
+                <div class="space"></div>
+                <div class="form-group">
+                  <a href="http://kylin.apache.org/community/" target="_blank" class="text-muted">Login Issue?</a>
+                  <button class="pull-right btn btn-sm btn-primary" type="submit" ng-disabled="login_form.$invalid">
+                    <i class="ace-icon fa fa-key"></i>
+                    <span class="bigger-110">{{loading? 'Logging In...': 'Log In'}}</span>
+                  </button>
+                </div>
+                <div class="space-4"></div>
+              </form>
             </div>
+          </div>
         </div>
+      </div>
     </div>
+  </div>
 </div>

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/app/routes.json
----------------------------------------------------------------------
diff --git a/webapp/app/routes.json b/webapp/app/routes.json
index f4a2e91..75be448 100644
--- a/webapp/app/routes.json
+++ b/webapp/app/routes.json
@@ -1,100 +1,100 @@
 [
-    {
-        "url": "/jobs",
-        "params": {
-            "templateUrl": "partials/jobs/jobs.html",
-            "tab": "jobs",
-            "controller": "JobCtrl"
-        }
-    },
-    {
-        "url": "/projects",
-        "params": {
-            "templateUrl": "partials/projects/projects.html",
-            "tab": "query",
-            "controller": "ProjectCtrl"
-        }
-    },
-    {
-        "url": "/cubes/add/",
-        "params": {
-            "templateUrl": "partials/cubes/cube_edit.html",
-            "tab": "models",
-            "controller": "CubeEditCtrl"
-        }
-    },
-    {
-        "url": "/cubes/edit/:cubeName/json",
-        "params": {
-            "templateUrl": "partials/cubes/cube_json_edit.html",
-            "tab": "models",
-            "controller": "CubeEditCtrl"
-        }
-    },
-    {
-        "url": "/cubes/edit/:cubeName",
-        "params": {
-            "templateUrl": "partials/cubes/cube_edit.html",
-            "tab": "models",
-            "controller": "CubeEditCtrl"
-        }
-    },
-    {
-        "url": "/sourceMeta",
-        "params": {
-            "templateUrl": "partials/tables/source_metadata.html",
-            "tab": "sourceMeta",
-            "controller": "SourceMetaCtrl"
-        }
-    },
-    {
-        "url": "/query",
-        "params": {
-            "templateUrl": "partials/query/query.html",
-            "tab": "query",
-            "controller": "QueryCtrl",
-            "reloadOnSearch": false
-        }
-    },
-    {
-        "url": "/admin",
-        "params": {
-            "templateUrl": "partials/admin/admin.html",
-            "tab": "admin",
-            "controller": "AdminCtrl",
-            "reloadOnSearch": false
-        }
-    },
-    {
-        "url": "/login",
-        "params": {
-            "templateUrl": "partials/login.html",
-            "controller": "LoginCtrl",
-            "reloadOnSearch": false
-        }
-    },
-    {
-        "url": "/models",
-        "params": {
-            "templateUrl": "partials/models/models.html",
-            "tab": "models",
-            "controller": "ModelsCtrl"
-        }
-    },
-    {
-        "url": "/models/add",
-        "params": {
-            "templateUrl": "partials/models/model_edit.html",
-            "tab": "models",
-            "controller": "ModelEditCtrl"
-        }
-    },
-    {
-        "url": "/models/edit/:modelName",
-        "params": {
-            "templateUrl": "partials/models/model_edit.html",
-            "tab": "models",
-            "controller": "ModelEditCtrl"
-        }
+  {
+    "url": "/jobs",
+    "params": {
+      "templateUrl": "partials/jobs/jobs.html",
+      "tab": "jobs",
+      "controller": "JobCtrl"
     }
+  },
+  {
+    "url": "/projects",
+    "params": {
+      "templateUrl": "partials/projects/projects.html",
+      "tab": "query",
+      "controller": "ProjectCtrl"
+    }
+  },
+  {
+    "url": "/cubes/add/",
+    "params": {
+      "templateUrl": "partials/cubes/cube_edit.html",
+      "tab": "models",
+      "controller": "CubeEditCtrl"
+    }
+  },
+  {
+    "url": "/cubes/edit/:cubeName/json",
+    "params": {
+      "templateUrl": "partials/cubes/cube_json_edit.html",
+      "tab": "models",
+      "controller": "CubeEditCtrl"
+    }
+  },
+  {
+    "url": "/cubes/edit/:cubeName",
+    "params": {
+      "templateUrl": "partials/cubes/cube_edit.html",
+      "tab": "models",
+      "controller": "CubeEditCtrl"
+    }
+  },
+  {
+    "url": "/sourceMeta",
+    "params": {
+      "templateUrl": "partials/tables/source_metadata.html",
+      "tab": "sourceMeta",
+      "controller": "SourceMetaCtrl"
+    }
+  },
+  {
+    "url": "/query",
+    "params": {
+      "templateUrl": "partials/query/query.html",
+      "tab": "query",
+      "controller": "QueryCtrl",
+      "reloadOnSearch": false
+    }
+  },
+  {
+    "url": "/admin",
+    "params": {
+      "templateUrl": "partials/admin/admin.html",
+      "tab": "admin",
+      "controller": "AdminCtrl",
+      "reloadOnSearch": false
+    }
+  },
+  {
+    "url": "/login",
+    "params": {
+      "templateUrl": "partials/login.html",
+      "controller": "LoginCtrl",
+      "reloadOnSearch": false
+    }
+  },
+  {
+    "url": "/models",
+    "params": {
+      "templateUrl": "partials/models/models.html",
+      "tab": "models",
+      "controller": "ModelsCtrl"
+    }
+  },
+  {
+    "url": "/models/add",
+    "params": {
+      "templateUrl": "partials/models/model_edit.html",
+      "tab": "models",
+      "controller": "ModelEditCtrl"
+    }
+  },
+  {
+    "url": "/models/edit/:modelName",
+    "params": {
+      "templateUrl": "partials/models/model_edit.html",
+      "tab": "models",
+      "controller": "ModelEditCtrl"
+    }
+  }
 ]

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/bower.json
----------------------------------------------------------------------
diff --git a/webapp/bower.json b/webapp/bower.json
index 9fd080f..4d5a311 100755
--- a/webapp/bower.json
+++ b/webapp/bower.json
@@ -31,7 +31,7 @@
     "angular-bootstrap-nav-tree": "*",
     "components-font-awesome": "~4.3.0",
     "bootstrap-sweetalert": "~0.4.3",
-    "angular-toggle-switch":"1.3.0",
+    "angular-toggle-switch": "1.3.0",
     "angular-ui-select": "0.13.2",
     "angular-sanitize": "1.2.18",
     "angular-tree-control": "0.2.8",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/grunt.json
----------------------------------------------------------------------
diff --git a/webapp/grunt.json b/webapp/grunt.json
index 7a7e4c8..3c2cbf8 100755
--- a/webapp/grunt.json
+++ b/webapp/grunt.json
@@ -1,75 +1,81 @@
 {
-    "bump": {
-        "options": {
-            "files": ["package.json"],
-            "commitFiles": ["package.json", "bower.json",  "CHANGELOG.md"]
-        }
+  "bump": {
+    "options": {
+      "files": [
+        "package.json"
+      ],
+      "commitFiles": [
+        "package.json",
+        "bower.json",
+        "CHANGELOG.md"
+      ]
+    }
+  },
+  "concat": {
+    "components": {
+      "src": [
+        "app/components/jquery/dist/jquery.min.js",
+        "app/components/bootstrap/dist/js/bootstrap.min.js",
+        "app/components/angular/angular.js",
+        "app/components/angular-animate/angular-animate.min.js",
+        "app/components/angular-route/angular-route.min.js",
+        "app/components/angular-resource/angular-resource.js",
+        "app/components/angular-bootstrap/ui-bootstrap-tpls.min.js",
+        "app/components/angular-cookies/angular-cookies.js",
+        "app/components/angularLocalStorage/src/angularLocalStorage.js",
+        "app/components/angular-base64/angular-base64.min.js",
+        "app/components/ng-grid/build/ng-grid.js",
+        "app/components/ace-builds/src-min-noconflict/ace.js",
+        "app/components/ace-builds/src-min-noconflict/ext-language_tools.js",
+        "app/components/ace-builds/src-min-noconflict/mode-json.js",
+        "app/components/ace-builds/src-min-noconflict/mode-sql.js",
+        "app/components/ace-builds/src-min-noconflict/theme-chrome.js",
+        "app/components/angular-ui-ace/ui-ace.min.js",
+        "app/components/messenger/build/js/messenger.min.js",
+        "app/components/messenger/build/js/messenger-theme-future.js",
+        "app/components/chosen/chosen.jquery.min.js",
+        "app/components/angular-chosen-localytics/chosen.js",
+        "app/components/moment/min/moment.min.js",
+        "app/components/d3/d3.min.js",
+        "app/components/nvd3/nv.d3.min.js",
+        "app/components/angularjs-nvd3-directives/dist/angularjs-nvd3-directives.js",
+        "app/components/bootstrap-sweetalert/lib/sweet-alert.js",
+        "app/components/angular-sweetalert/SweetAlert.js",
+        "app/components/underscore/underscore.js",
+        "app/components/angular-underscore/angular-underscore.js",
+        "app/components/jquery-ui/jquery-ui.min.js",
+        "app/components/angular-ui-sortable/sortable.js",
+        "app/components/angular-toggle-switch/angular-toggle-switch.js",
+        "app/components/angular-ui-select/dist/select.js",
+        "app/components/angular-sanitize/angular-sanitize.js",
+        "tmp/js/scripts.js"
+      ],
+      "dest": "tmp/js/scripts.min.js"
     },
-    "concat": {
-        "components": {
-            "src": [
-                "app/components/jquery/dist/jquery.min.js",
-                "app/components/bootstrap/dist/js/bootstrap.min.js",
-                "app/components/angular/angular.js",
-                "app/components/angular-animate/angular-animate.min.js",
-                "app/components/angular-route/angular-route.min.js",
-                "app/components/angular-resource/angular-resource.js",
-                "app/components/angular-bootstrap/ui-bootstrap-tpls.min.js",
-                "app/components/angular-cookies/angular-cookies.js",
-                "app/components/angularLocalStorage/src/angularLocalStorage.js",
-                "app/components/angular-base64/angular-base64.min.js",
-                "app/components/ng-grid/build/ng-grid.js",
-                "app/components/ace-builds/src-min-noconflict/ace.js",
-                "app/components/ace-builds/src-min-noconflict/ext-language_tools.js",
-                "app/components/ace-builds/src-min-noconflict/mode-json.js",
-                "app/components/ace-builds/src-min-noconflict/mode-sql.js",
-                "app/components/ace-builds/src-min-noconflict/theme-chrome.js",
-                "app/components/angular-ui-ace/ui-ace.min.js",
-                "app/components/messenger/build/js/messenger.min.js",
-                "app/components/messenger/build/js/messenger-theme-future.js",
-                "app/components/chosen/chosen.jquery.min.js",
-                "app/components/angular-chosen-localytics/chosen.js",
-                "app/components/moment/min/moment.min.js",
-                "app/components/d3/d3.min.js",
-                "app/components/nvd3/nv.d3.min.js",
-                "app/components/angularjs-nvd3-directives/dist/angularjs-nvd3-directives.js",
-                "app/components/bootstrap-sweetalert/lib/sweet-alert.js",
-                "app/components/angular-sweetalert/SweetAlert.js",
-                "app/components/underscore/underscore.js",
-                "app/components/angular-underscore/angular-underscore.js",
-                "app/components/jquery-ui/jquery-ui.min.js",
-                "app/components/angular-ui-sortable/sortable.js",
-                "app/components/angular-toggle-switch/angular-toggle-switch.js",
-                "app/components/angular-ui-select/dist/select.js",
-                "app/components/angular-sanitize/angular-sanitize.js",
-                "tmp/js/scripts.js"
-            ],
-            "dest": "tmp/js/scripts.min.js"
-        },
-        "css": {
-            "src": [
-                "app/components/bootstrap/dist/css/bootstrap.min.css",
-                "app/components/components-font-awesome/css/font-awesome.css",
-                "app/components/ng-grid/ng-grid.css",
-                "app/components/angular-tree-control/css/tree-control.css",
-                "app/components/angular-tree-control/css/tree-control-attribute.css",
-                "app/components/angular-ui-grid/ui-grid.min.css",
-                "app/components/animate.css/animate.min.css",
-                "app/components/messenger/build/css/messenger.css",
-                "app/components/messenger/build/css/messenger-theme-ice.css",
-                "app/components/chosen/chosen.css",
-                "app/components/angular-chosen-localytics/chosen-spinner.css",
-                "app/components/nvd3/nv.d3.min.css",
-                "app/css/AdminLTE.css",
-                "app/css/skins/_all-skins.min.css",
-                "app/components/bootstrap-sweetalert/lib/sweet-alert.css",
-                "app/components/angular-bootstrap-nav-tree/dist/abn_tree.css",
-                "app/components/angular-toggle-switch/angular-toggle-switch.css",
-                "app/components/angular-ui-select/dist/select.css",
-                "app/components/angular-bootstrap-datetimepicker/src/css/datetimepicker.css",
-                "tmp/css/styles.css"
-            ],
-            "dest": "tmp/css/styles.min.css"
-        }
+    "css": {
+      "src": [
+        "app/components/bootstrap/dist/css/bootstrap.min.css",
+        "app/components/components-font-awesome/css/font-awesome.css",
+        "app/components/ng-grid/ng-grid.css",
+        "app/components/angular-tree-control/css/tree-control.css",
+        "app/components/angular-tree-control/css/tree-control-attribute.css",
+        "app/components/angular-ui-grid/ui-grid.min.css",
+        "app/components/animate.css/animate.min.css",
+        "app/components/messenger/build/css/messenger.css",
+        "app/components/messenger/build/css/messenger-theme-ice.css",
+        "app/components/chosen/chosen.css",
+        "app/components/angular-chosen-localytics/chosen-spinner.css",
+        "app/components/nvd3/nv.d3.min.css",
+        "app/css/AdminLTE.css",
+        "app/css/skins/_all-skins.min.css",
+        "app/components/bootstrap-sweetalert/lib/sweet-alert.css",
+        "app/components/angular-bootstrap-nav-tree/dist/abn_tree.css",
+        "app/components/angular-toggle-switch/angular-toggle-switch.css",
+        "app/components/angular-ui-select/dist/select.css",
+        "app/components/angular-bootstrap-datetimepicker/src/css/datetimepicker.css",
+        "tmp/css/styles.css"
+      ],
+      "dest": "tmp/css/styles.min.css"
     }
+  }
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/e3b8be38/webapp/package.json
----------------------------------------------------------------------
diff --git a/webapp/package.json b/webapp/package.json
index a588a75..b11a162 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -1,22 +1,22 @@
 {
-    "name": "base",
-    "version": "0.0.1",
-    "description": "Client Base Applicaion",
-    "author": "DataHub",
-    "repository": {
-        "type:": "git",
-        "url": "https://github.com/KylinOLAP/Kylin.git"
-    },
-    "devDependencies": {
-        "grunt": "~0.4.x",
-        "grunt-cli": "~0.1.13",
-        "grunt-contrib": "~0.7.0",
-        "grunt-html2js": "~0.1.3",
-        "grunt-bump": "0.0.6",
-        "grunt-htmlrefs": "~0.4.1",
-        "grunt-regex-replace": "~0.2.5",
-        "grunt-lesslint": "~0.8.0",
-        "grunt-manifest": "~0.4.0",
-        "grunt-conventional-changelog": "~0.1.2"
-    }
+  "name": "base",
+  "version": "0.0.1",
+  "description": "Client Base Applicaion",
+  "author": "DataHub",
+  "repository": {
+    "type:": "git",
+    "url": "https://github.com/KylinOLAP/Kylin.git"
+  },
+  "devDependencies": {
+    "grunt": "~0.4.x",
+    "grunt-cli": "~0.1.13",
+    "grunt-contrib": "~0.7.0",
+    "grunt-html2js": "~0.1.3",
+    "grunt-bump": "0.0.6",
+    "grunt-htmlrefs": "~0.4.1",
+    "grunt-regex-replace": "~0.2.5",
+    "grunt-lesslint": "~0.8.0",
+    "grunt-manifest": "~0.4.0",
+    "grunt-conventional-changelog": "~0.1.2"
+  }
 }