ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anovi...@apache.org
Subject ignite git commit: # IGNITE-1213 Implement panel button group.
Date Fri, 28 Aug 2015 02:17:53 GMT
Repository: ignite
Updated Branches:
  refs/heads/ignite-843 f5bec17d5 -> 5e851ea8e


# IGNITE-1213 Implement panel button group.


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

Branch: refs/heads/ignite-843
Commit: 5e851ea8e3230381c2f849f8bfb034ad8f0788e7
Parents: f5bec17
Author: Andrey <anovikov@gridgain.com>
Authored: Fri Aug 28 09:18:14 2015 +0700
Committer: Andrey <anovikov@gridgain.com>
Committed: Fri Aug 28 09:18:14 2015 +0700

----------------------------------------------------------------------
 .../agent/testdrive/AgentSqlTestDrive.java      | 174 ++--
 .../main/js/controllers/caches-controller.js    |   9 +-
 .../main/js/controllers/clusters-controller.js  |  11 +-
 .../src/main/js/controllers/common-module.js    |   8 +-
 .../main/js/controllers/metadata-controller.js  |   5 +-
 .../src/main/js/controllers/sql-controller.js   |   8 +-
 .../public/stylesheets/_bootstrap-custom.scss   |   2 +-
 .../stylesheets/_bootstrap-variables.scss       | 888 +++++++++++++++++++
 .../src/main/js/public/stylesheets/style.scss   | 160 +---
 .../src/main/js/views/configuration/caches.jade |   4 +-
 .../main/js/views/configuration/clusters.jade   |   4 +-
 .../main/js/views/configuration/metadata.jade   |   4 +-
 .../src/main/js/views/includes/controls.jade    |  11 +
 .../src/main/js/views/includes/header.jade      |   8 +-
 .../src/test/js/routes/agent.js                 |   2 +-
 15 files changed, 1082 insertions(+), 216 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
index 96a2717..d52deae 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/testdrive/AgentSqlTestDrive.java
@@ -22,7 +22,8 @@ public class AgentSqlTestDrive {
     /** */
     private static final AtomicBoolean initLatch = new AtomicBoolean();
 
-    private static final String CACHE_NAME = "test-drive-sql";
+    private static final String EMPLOYEE_CACHE_NAME = "test-drive-employee";
+    private static final String CAR_CACHE_NAME = "test-drive-car";
 
     private static final Random rnd = new Random();
 
@@ -35,70 +36,25 @@ public class AgentSqlTestDrive {
     /** Employees count. */
     private static final int EMPL_CNT = 1000;
 
+    /** Countries count. */
+    private static final int CAR_CNT = 100;
+
+    /** Departments count */
+    private static final int PARK_CNT = 10;
+
     /**
-     * Configure cache.
+     * Configure cacheEmployee.
      *
      * @param name Cache name.
      */
-    private static <K, V> CacheConfiguration<K, V> cache(String name) {
+    private static <K, V> CacheConfiguration<K, V> cacheEmployee(String name) {
         CacheConfiguration<K, V> ccfg = new CacheConfiguration<>(name);
 
-        // Configure cache types.
+        // Configure cacheEmployee types.
         Collection<CacheTypeMetadata> meta = new ArrayList<>();
 
-        // CAR.
-        CacheTypeMetadata type = new CacheTypeMetadata();
-
-        meta.add(type);
-
-        type.setKeyType(CarKey.class.getName());
-        type.setValueType(Car.class.getName());
-
-        // Query fields for CAR.
-        Map<String, Class<?>> qryFlds = new LinkedHashMap<>();
-
-        qryFlds.put("carId", int.class);
-        qryFlds.put("parkingId", int.class);
-        qryFlds.put("carName", String.class);
-
-        type.setQueryFields(qryFlds);
-
-        // Ascending fields for CAR.
-        Map<String, Class<?>> ascFlds = new LinkedHashMap<>();
-
-        ascFlds.put("carId", int.class);
-
-        type.setAscendingFields(ascFlds);
-
-        ccfg.setTypeMetadata(meta);
-
-        // PARKING.
-        type = new CacheTypeMetadata();
-
-        meta.add(type);
-
-        type.setKeyType(ParkingKey.class.getName());
-        type.setValueType(Parking.class.getName());
-
-        // Query fields for PARKING.
-        qryFlds = new LinkedHashMap<>();
-
-        qryFlds.put("parkingId", int.class);
-        qryFlds.put("parkingName", String.class);
-
-        type.setQueryFields(qryFlds);
-
-        // Ascending fields for PARKING.
-        ascFlds = new LinkedHashMap<>();
-
-        ascFlds.put("parkingId", int.class);
-
-        type.setAscendingFields(ascFlds);
-
-        ccfg.setTypeMetadata(meta);
-
         // COUNTRY.
-        type = new CacheTypeMetadata();
+        CacheTypeMetadata type = new CacheTypeMetadata();
 
         meta.add(type);
 
@@ -106,7 +62,7 @@ public class AgentSqlTestDrive {
         type.setValueType(Country.class.getName());
 
         // Query fields for COUNTRY.
-        qryFlds = new LinkedHashMap<>();
+        Map<String, Class<?>> qryFlds = new LinkedHashMap<>();
 
         qryFlds.put("id", int.class);
         qryFlds.put("countryName", String.class);
@@ -114,7 +70,7 @@ public class AgentSqlTestDrive {
         type.setQueryFields(qryFlds);
 
         // Ascending fields for COUNTRY.
-        ascFlds = new LinkedHashMap<>();
+        Map<String, Class<?>> ascFlds = new LinkedHashMap<>();
 
         ascFlds.put("id", int.class);
 
@@ -198,6 +154,71 @@ public class AgentSqlTestDrive {
         return ccfg;
     }
 
+    /**
+     * Configure cacheEmployee.
+     *
+     * @param name Cache name.
+     */
+    private static <K, V> CacheConfiguration<K, V> cacheCar(String name) {
+        CacheConfiguration<K, V> ccfg = new CacheConfiguration<>(name);
+
+        // Configure cacheEmployee types.
+        Collection<CacheTypeMetadata> meta = new ArrayList<>();
+
+        // CAR.
+        CacheTypeMetadata type = new CacheTypeMetadata();
+
+        meta.add(type);
+
+        type.setKeyType(CarKey.class.getName());
+        type.setValueType(Car.class.getName());
+
+        // Query fields for CAR.
+        Map<String, Class<?>> qryFlds = new LinkedHashMap<>();
+
+        qryFlds.put("carId", int.class);
+        qryFlds.put("parkingId", int.class);
+        qryFlds.put("carName", String.class);
+
+        type.setQueryFields(qryFlds);
+
+        // Ascending fields for CAR.
+        Map<String, Class<?>> ascFlds = new LinkedHashMap<>();
+
+        ascFlds.put("carId", int.class);
+
+        type.setAscendingFields(ascFlds);
+
+        ccfg.setTypeMetadata(meta);
+
+        // PARKING.
+        type = new CacheTypeMetadata();
+
+        meta.add(type);
+
+        type.setKeyType(ParkingKey.class.getName());
+        type.setValueType(Parking.class.getName());
+
+        // Query fields for PARKING.
+        qryFlds = new LinkedHashMap<>();
+
+        qryFlds.put("parkingId", int.class);
+        qryFlds.put("parkingName", String.class);
+
+        type.setQueryFields(qryFlds);
+
+        // Ascending fields for PARKING.
+        ascFlds = new LinkedHashMap<>();
+
+        ascFlds.put("parkingId", int.class);
+
+        type.setAscendingFields(ascFlds);
+
+        ccfg.setTypeMetadata(meta);
+
+        return ccfg;
+    }
+
     public static double round(double value, int places) {
         if (places < 0)
             throw new IllegalArgumentException();
@@ -215,8 +236,8 @@ public class AgentSqlTestDrive {
      * @param ignite Ignite.
      * @param name Cache name.
      */
-    private static void populateCache(Ignite ignite, String name) {
-        log.log(Level.INFO, "TEST-DRIVE: Start population '" + name + "' cache with data...");
+    private static void populateCacheEmployee(Ignite ignite, String name) {
+        log.log(Level.INFO, "TEST-DRIVE: Start population cache: '" + name + "' with data...");
 
         IgniteCache<CountryKey, Country> cacheCountry = ignite.cache(name);
 
@@ -251,11 +272,32 @@ public class AgentSqlTestDrive {
                     round(r * 5000, 2) , managerId, rnd.nextInt(DEP_CNT)));
         }
 
-        log.log(Level.INFO, "TEST-DRIVE: Finished population '" + name + "' cache with data.");
+        log.log(Level.INFO, "TEST-DRIVE: Finished population cache: '" + name + "' with data.");
     }
 
     /**
-     * Start ignite node with cache and populate it with data.
+     * @param ignite Ignite.
+     * @param name Cache name.
+     */
+    private static void populateCacheCar(Ignite ignite, String name) {
+        log.log(Level.INFO, "TEST-DRIVE: Start population cache: '" + name + "' with data...");
+
+        IgniteCache<ParkingKey, Parking> cacheParking = ignite.cache(name);
+
+        for (int i = 0; i < PARK_CNT; i++)
+            cacheParking.put(new ParkingKey(i), new Parking(i, "Parking " + (i + 1)));
+
+        IgniteCache<CarKey, Car> cacheDepartment = ignite.cache(name);
+
+        for (int i = 0; i < CAR_CNT; i++)
+            cacheDepartment.put(new CarKey(i), new Car(i, rnd.nextInt(PARK_CNT), "Car " + (i + 1)));
+
+
+        log.log(Level.INFO, "TEST-DRIVE: Finished population cache: '" + name + "' with data.");
+    }
+
+    /**
+     * Start ignite node with cacheEmployee and populate it with data.
      */
     public static void testDrive() {
         if (initLatch.compareAndSet(false, true)) {
@@ -266,15 +308,17 @@ public class AgentSqlTestDrive {
 
                 cfg.setMetricsLogFrequency(0);
 
-                cfg.setCacheConfiguration(cache(CACHE_NAME));
+                cfg.setCacheConfiguration(cacheEmployee(EMPLOYEE_CACHE_NAME), cacheCar(CAR_CACHE_NAME));
 
-                log.log(Level.INFO, "TEST-DRIVE: Start embedded node with indexed enabled cache...");
+                log.log(Level.INFO, "TEST-DRIVE: Start embedded node with indexed enabled caches...");
 
                 Ignite ignite = Ignition.start(cfg);
 
                 log.log(Level.INFO, "TEST-DRIVE: Embedded node started");
 
-                populateCache(ignite, CACHE_NAME);
+                populateCacheEmployee(ignite, EMPLOYEE_CACHE_NAME);
+
+                populateCacheCar(ignite, CAR_CACHE_NAME);
             }
             catch (Exception e) {
                 log.log(Level.SEVERE, "TEST-DRIVE: Failed to start test drive for sql!", e);

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/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 5c5fd56..f31e4ba 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
@@ -17,8 +17,11 @@
 
 // Controller for Caches screen.
 controlCenterModule.controller('cachesController', [
-        '$scope', '$http', '$timeout', '$common', '$focus', '$confirm', '$copy', '$table', '$preview',
-        function ($scope, $http, $timeout, $common, $focus, $confirm, $copy, $table, $preview) {
+        '$scope', '$controller', '$http', '$timeout', '$common', '$focus', '$confirm', '$copy', '$table', '$preview',
+        function ($scope, $controller, $http, $timeout, $common, $focus, $confirm, $copy, $table, $preview) {
+            // Initialize the super class and extend it.
+            angular.extend(this, $controller('save-remove', {$scope: $scope}));
+
             $scope.joinTip = $common.joinTip;
             $scope.getModel = $common.getModel;
             $scope.javaBuildInClasses = $common.javaBuildInClasses;
@@ -461,7 +464,7 @@ controlCenterModule.controller('cachesController', [
             };
 
             // Save cache with new name.
-            $scope.saveItemAs = function () {
+            $scope.copyItem = function () {
                 $table.tableReset();
 
                 if (validate($scope.backupItem))

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/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 49cf381..3d89f0c 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
@@ -16,8 +16,11 @@
  */
 
 // Controller for Clusters screen.
-controlCenterModule.controller('clustersController', ['$scope', '$http', '$timeout', '$common', '$focus', '$confirm', '$copy', '$table', '$preview',
-    function ($scope, $http, $timeout, $common, $focus, $confirm, $copy, $table, $preview) {
+controlCenterModule.controller('clustersController', ['$scope', '$controller', '$http', '$timeout', '$common', '$focus', '$confirm', '$copy', '$table', '$preview',
+    function ($scope, $controller, $http, $timeout, $common, $focus, $confirm, $copy, $table, $preview) {
+        // Initialize the super class and extend it.
+        angular.extend(this, $controller('save-remove', {$scope: $scope}));
+
         $scope.joinTip = $common.joinTip;
         $scope.getModel = $common.getModel;
 
@@ -397,8 +400,8 @@ controlCenterModule.controller('clustersController', ['$scope', '$http', '$timeo
                 save(item);
         };
 
-        // Save cluster with new name.
-        $scope.saveItemAs = function () {
+        // Copy cluster with new name.
+        $scope.copyItem = function () {
             $table.tableReset();
 
             if (validate($scope.backupItem))

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/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 3b18e30..40b922a 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
@@ -52,7 +52,7 @@ controlCenterModule.config(function ($selectProvider) {
         noneText: 'Clear All',
         templateUrl: '/select',
         iconCheckmark: 'fa fa-check',
-        caretHtml: '<span class="caret"></span>'
+        caretHtml: '<span class="caret" style="float: right; margin-left: 5px; margin-top: 7px;"></span>'
     });
 });
 
@@ -1319,3 +1319,9 @@ controlCenterModule.controller('notebooks', ['$scope', '$http', '$common', funct
 
     $scope.$root.reloadNotebooks();
 }]);
+
+// Navigation bar controller.
+controlCenterModule.controller('save-remove', ['$scope', function ($scope) {
+    $scope.saveDropdown = [{ 'text': 'Copy', 'click': 'copyItem()'}];
+    $scope.removeDropdown = [{ 'text': 'Remove All', 'click': 'removeAllItems'}];
+}]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/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 c81425c..3d0960c 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
@@ -20,6 +20,9 @@ controlCenterModule.controller('metadataController', [
         '$scope', '$controller', '$http', '$modal', '$common', '$timeout', '$focus', '$confirm', '$copy', '$table', '$preview',
         function ($scope, $controller, $http, $modal, $common, $timeout, $focus, $confirm, $copy, $table, $preview) {
             // Initialize the super class and extend it.
+            angular.extend(this, $controller('save-remove', {$scope: $scope}));
+
+            // Initialize the super class and extend it.
             angular.extend(this, $controller('agent-download', {$scope: $scope}));
             $scope.ui = {};
 
@@ -713,7 +716,7 @@ controlCenterModule.controller('metadataController', [
             };
 
             // Save cache type metadata with new name.
-            $scope.saveItemAs = function () {
+            $scope.copyItem = function () {
                 $table.tableReset();
 
                 if (validate($scope.backupItem))

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-web/src/main/js/controllers/sql-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/sql-controller.js b/modules/control-center-web/src/main/js/controllers/sql-controller.js
index f4cd21b..8822dc3 100644
--- a/modules/control-center-web/src/main/js/controllers/sql-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/sql-controller.js
@@ -39,6 +39,9 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http
                 $scope.notebook = notebook;
 
                 $scope.notebook_name = notebook.name;
+
+                if (!notebook.paragraphs || notebook.paragraphs.length == 0)
+                    $scope.addParagraph();
             })
             .error(function (errMsg) {
                 $common.showError(errMsg);
@@ -97,7 +100,7 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http
 
         var paragraph = {name: 'Query' + (sz ==0 ? '' : sz), editor: true, query: '', pageSize: $scope.pageSizes[0]};
 
-        if ($scope.caches.length > 0)
+        if ($scope.caches && $scope.caches.length > 0)
             paragraph.cache = $scope.caches[0];
 
         $scope.notebook.paragraphs.push(paragraph);
@@ -123,9 +126,6 @@ controlCenterModule.controller('sqlController', ['$scope', '$controller', '$http
             var node = clusters[0];
 
             $scope.caches = node.caches;
-
-            if (!$scope.notebook.paragraphs || $scope.notebook.paragraphs.length == 0)
-                $scope.addParagraph();
         })
         .error(function (err, status) {
             $scope.caches = undefined;

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-custom.scss
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-custom.scss b/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-custom.scss
index b72e6b0..3b52821 100644
--- a/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-custom.scss
+++ b/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-custom.scss
@@ -16,7 +16,7 @@
  */
 
 // Core variables and mixins
-@import "../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/variables";
+@import "bootstrap-variables";
 @import "../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins";
 
 // Reset and dependencies

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-variables.scss
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-variables.scss b/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-variables.scss
new file mode 100644
index 0000000..ee7206b
--- /dev/null
+++ b/modules/control-center-web/src/main/js/public/stylesheets/_bootstrap-variables.scss
@@ -0,0 +1,888 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+$bootstrap-sass-asset-helper: false !default;
+//
+// Variables
+// --------------------------------------------------
+
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+$gray-base:              #000 !default;
+$gray-darker:            lighten($gray-base, 13.5%) !default; // #222
+$gray-dark:              lighten($gray-base, 20%) !default;   // #333
+$gray:                   lighten($gray-base, 33.5%) !default; // #555
+$gray-light:             lighten($gray-base, 46.7%) !default; // #777
+$gray-lighter:           lighten($gray-base, 93.5%) !default; // #eee
+
+$brand-primary:         #ec1c24 !default;
+$brand-success:         #5cb85c !default;
+$brand-info:            #5bc0de !default;
+$brand-warning:         #f0ad4e !default;
+$brand-danger:          #d9534f !default;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for `<body>`.
+$body-bg:               #fff !default;
+//** Global text color on `<body>`.
+$text-color:            $gray-dark !default;
+
+//** Global textual link color.
+$link-color:            $brand-primary !default;
+//** Link hover color set via `darken()` function.
+$link-hover-color:      darken($link-color, 15%) !default;
+//** Link hover decoration.
+$link-hover-decoration: underline !default;
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+$font-family-sans-serif:  "Helvetica Neue", Helvetica, Arial, sans-serif !default;
+$font-family-serif:       Georgia, "Times New Roman", Times, serif !default;
+//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
+$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
+$font-family-base:        $font-family-sans-serif !default;
+
+$font-size-base:          14px !default;
+$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px
+
+$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px
+$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px
+$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px
+$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-h5:            $font-size-base !default;
+$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+$line-height-base:        1.428571429 !default; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
+
+//** By default, this inherits from the `<body>`.
+$headings-font-family:    inherit !default;
+$headings-font-weight:    500 !default;
+$headings-line-height:    1.1 !default;
+$headings-color:          inherit !default;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+
+// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
+// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
+$icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
+
+//** File name for all font files.
+$icon-font-name:          "glyphicons-halflings-regular" !default;
+//** Element ID within SVG icon file.
+$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+$padding-base-vertical:     6px !default;
+$padding-base-horizontal:   12px !default;
+
+$padding-large-vertical:    10px !default;
+$padding-large-horizontal:  16px !default;
+
+$padding-small-vertical:    5px !default;
+$padding-small-horizontal:  10px !default;
+
+$padding-xs-vertical:       1px !default;
+$padding-xs-horizontal:     5px !default;
+
+$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
+$line-height-small:         1.5 !default;
+
+$border-radius-base:        4px !default;
+$border-radius-large:       6px !default;
+$border-radius-small:       3px !default;
+
+//** Global color for active items (e.g., navs or dropdowns).
+$component-active-color:    $link-color !default;
+//** Global background color for active items (e.g., navs or dropdowns).
+$component-active-bg:       $brand-primary !default;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+$caret-width-base:          4px !default;
+//** Carets increase slightly in size for larger components.
+$caret-width-large:         5px !default;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `<th>`s and `<td>`s.
+$table-cell-padding:            8px !default;
+//** Padding for cells in `.table-condensed`.
+$table-condensed-cell-padding:  5px !default;
+
+//** Default background color used for all tables.
+$table-bg:                      transparent !default;
+//** Background color used for `.table-striped`.
+$table-bg-accent:               #f9f9f9 !default;
+//** Background color used for `.table-hover`.
+$table-bg-hover:                #f5f5f5 !default;
+$table-bg-active:               $table-bg-hover !default;
+
+//** Border color for table and cell borders.
+$table-border-color:            #ddd !default;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+$btn-font-weight:                normal !default;
+
+$btn-default-color:              #333 !default;
+$btn-default-bg:                 #fff !default;
+$btn-default-border:             #ccc !default;
+
+$btn-primary-color:              #fff !default;
+$btn-primary-bg:                 $brand-primary !default;
+$btn-primary-border:             darken($btn-primary-bg, 5%) !default;
+
+$btn-success-color:              #fff !default;
+$btn-success-bg:                 $brand-success !default;
+$btn-success-border:             darken($btn-success-bg, 5%) !default;
+
+$btn-info-color:                 #fff !default;
+$btn-info-bg:                    $brand-info !default;
+$btn-info-border:                darken($btn-info-bg, 5%) !default;
+
+$btn-warning-color:              #fff !default;
+$btn-warning-bg:                 $brand-warning !default;
+$btn-warning-border:             darken($btn-warning-bg, 5%) !default;
+
+$btn-danger-color:               #fff !default;
+$btn-danger-bg:                  $brand-danger !default;
+$btn-danger-border:              darken($btn-danger-bg, 5%) !default;
+
+$btn-link-disabled-color:        $gray-light !default;
+
+// Allows for customizing button radius independently from global border radius
+$btn-border-radius-base:         $border-radius-base !default;
+$btn-border-radius-large:        $border-radius-large !default;
+$btn-border-radius-small:        $border-radius-small !default;
+
+
+//== Forms
+//
+//##
+
+//** `<input>` background color
+$input-bg:                       #fff !default;
+//** `<input disabled>` background color
+$input-bg-disabled:              $gray-lighter !default;
+
+//** Text color for `<input>`s
+$input-color:                    $gray !default;
+//** `<input>` border color
+$input-border:                   #ccc !default;
+
+// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
+//** Default `.form-control` border radius
+// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
+$input-border-radius:            $border-radius-base !default;
+//** Large `.form-control` border radius
+$input-border-radius-large:      $border-radius-large !default;
+//** Small `.form-control` border radius
+$input-border-radius-small:      $border-radius-small !default;
+
+//** Border color for inputs on focus
+$input-border-focus:             #66afe9 !default;
+
+//** Placeholder text color
+$input-color-placeholder:        #999 !default;
+
+//** Default `.form-control` height
+$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
+//** Large `.form-control` height
+$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
+//** Small `.form-control` height
+$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
+
+//** `.form-group` margin
+$form-group-margin-bottom:       15px !default;
+
+$legend-color:                   $gray-dark !default;
+$legend-border-color:            #e5e5e5 !default;
+
+//** Background color for textual input addons
+$input-group-addon-bg:           $gray-lighter !default;
+//** Border color for textual input addons
+$input-group-addon-border-color: $input-border !default;
+
+//** Disabled cursor for form controls and buttons.
+$cursor-disabled:                not-allowed !default;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+$dropdown-bg:                    #fff !default;
+//** Dropdown menu `border-color`.
+$dropdown-border:                rgba(0,0,0,.15) !default;
+//** Dropdown menu `border-color` **for IE8**.
+$dropdown-fallback-border:       #ccc !default;
+//** Divider color for between dropdown items.
+$dropdown-divider-bg:            #e5e5e5 !default;
+
+//** Dropdown link text color.
+$dropdown-link-color:            #bbb !default;
+//** Hover color for dropdown links.
+$dropdown-link-hover-color:      $link-hover-color !default;
+//** Hover background for dropdown links.
+$dropdown-link-hover-bg:         transparent !default;
+
+//** Active dropdown menu item text color.
+$dropdown-link-active-color:     $component-active-color !default;
+//** Active dropdown menu item background color.
+$dropdown-link-active-bg:        $component-active-bg !default;
+
+//** Disabled dropdown menu item background color.
+$dropdown-link-disabled-color:   $gray-light !default;
+
+//** Text color for headers within dropdown menus.
+$dropdown-header-color:          $gray-light !default;
+
+//** Deprecated `$dropdown-caret-color` as of v3.1.0
+$dropdown-caret-color:           #000 !default;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+$zindex-navbar:            1000 !default;
+$zindex-dropdown:          1000 !default;
+$zindex-popover:           1060 !default;
+$zindex-tooltip:           1070 !default;
+$zindex-navbar-fixed:      1030 !default;
+$zindex-modal-background:  1040 !default;
+$zindex-modal:             1050 !default;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `$screen-xs` as of v3.0.1
+$screen-xs:                  480px !default;
+//** Deprecated `$screen-xs-min` as of v3.2.0
+$screen-xs-min:              $screen-xs !default;
+//** Deprecated `$screen-phone` as of v3.0.1
+$screen-phone:               $screen-xs-min !default;
+
+// Small screen / tablet
+//** Deprecated `$screen-sm` as of v3.0.1
+$screen-sm:                  768px !default;
+$screen-sm-min:              $screen-sm !default;
+//** Deprecated `$screen-tablet` as of v3.0.1
+$screen-tablet:              $screen-sm-min !default;
+
+// Medium screen / desktop
+//** Deprecated `$screen-md` as of v3.0.1
+$screen-md:                  992px !default;
+$screen-md-min:              $screen-md !default;
+//** Deprecated `$screen-desktop` as of v3.0.1
+$screen-desktop:             $screen-md-min !default;
+
+// Large screen / wide desktop
+//** Deprecated `$screen-lg` as of v3.0.1
+$screen-lg:                  1200px !default;
+$screen-lg-min:              $screen-lg !default;
+//** Deprecated `$screen-lg-desktop` as of v3.0.1
+$screen-lg-desktop:          $screen-lg-min !default;
+
+// So media queries don't overlap when required, provide a maximum
+$screen-xs-max:              ($screen-sm-min - 1) !default;
+$screen-sm-max:              ($screen-md-min - 1) !default;
+$screen-md-max:              ($screen-lg-min - 1) !default;
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+$grid-columns:              12 !default;
+//** Padding between columns. Gets divided in half for the left and right.
+$grid-gutter-width:         30px !default;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+$grid-float-breakpoint:     $screen-sm-min !default;
+//** Point at which the navbar begins collapsing.
+$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+$container-tablet:             (720px + $grid-gutter-width) !default;
+//** For `$screen-sm-min` and up.
+$container-sm:                 $container-tablet !default;
+
+// Medium screen / desktop
+$container-desktop:            (940px + $grid-gutter-width) !default;
+//** For `$screen-md-min` and up.
+$container-md:                 $container-desktop !default;
+
+// Large screen / wide desktop
+$container-large-desktop:      (1140px + $grid-gutter-width) !default;
+//** For `$screen-lg-min` and up.
+$container-lg:                 $container-large-desktop !default;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+$navbar-height:                    50px !default;
+$navbar-margin-bottom:             $line-height-computed !default;
+$navbar-border-radius:             $border-radius-base !default;
+$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
+$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
+$navbar-collapse-max-height:       340px !default;
+
+$navbar-default-color:             #bbb !default;
+$navbar-default-bg:                #f8f8f8 !default;
+$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
+
+// Navbar links
+$navbar-default-link-color:                #bbb !default;
+$navbar-default-link-hover-color:          $link-hover-color !default;
+$navbar-default-link-hover-bg:             transparent !default;
+$navbar-default-link-active-color:         $component-active-color !default;
+$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
+$navbar-default-link-disabled-color:       #ccc !default;
+$navbar-default-link-disabled-bg:          transparent !default;
+
+// Navbar brand label
+$navbar-default-brand-color:               $navbar-default-link-color !default;
+$navbar-default-brand-hover-color:         darken($link-color, 15%) !default;
+$navbar-default-brand-hover-bg:            transparent !default;
+
+// Navbar toggle
+$navbar-default-toggle-hover-bg:           #ddd !default;
+$navbar-default-toggle-icon-bar-bg:        #888 !default;
+$navbar-default-toggle-border-color:       #ddd !default;
+
+
+//=== Inverted navbar
+// Reset inverted navbar basics
+$navbar-inverse-color:                      lighten($gray-light, 15%) !default;
+$navbar-inverse-bg:                         #222 !default;
+$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
+
+// Inverted navbar links
+$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;
+$navbar-inverse-link-hover-color:           #fff !default;
+$navbar-inverse-link-hover-bg:              transparent !default;
+$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
+$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
+$navbar-inverse-link-disabled-color:        #444 !default;
+$navbar-inverse-link-disabled-bg:           transparent !default;
+
+// Inverted navbar brand label
+$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
+$navbar-inverse-brand-hover-color:          #fff !default;
+$navbar-inverse-brand-hover-bg:             transparent !default;
+
+// Inverted navbar toggle
+$navbar-inverse-toggle-hover-bg:            #333 !default;
+$navbar-inverse-toggle-icon-bar-bg:         #fff !default;
+$navbar-inverse-toggle-border-color:        #333 !default;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+$nav-link-padding:                          10px 15px !default;
+$nav-link-hover-bg:                         transparent !default;
+
+$nav-disabled-link-color:                   $gray-light !default;
+$nav-disabled-link-hover-color:             $gray-light !default;
+
+//== Tabs
+$nav-tabs-border-color:                     #ddd !default;
+
+$nav-tabs-link-hover-border-color:          $gray-lighter !default;
+
+$nav-tabs-active-link-hover-bg:             $body-bg !default;
+$nav-tabs-active-link-hover-color:          $gray !default;
+$nav-tabs-active-link-hover-border-color:   #ddd !default;
+
+$nav-tabs-justified-link-border-color:            #ddd !default;
+$nav-tabs-justified-active-link-border-color:     $body-bg !default;
+
+//== Pills
+$nav-pills-border-radius:                   $border-radius-base !default;
+$nav-pills-active-link-hover-bg:            $component-active-bg !default;
+$nav-pills-active-link-hover-color:         $component-active-color !default;
+
+
+//== Pagination
+//
+//##
+
+$pagination-color:                     $link-color !default;
+$pagination-bg:                        #fff !default;
+$pagination-border:                    #ddd !default;
+
+$pagination-hover-color:               $link-hover-color !default;
+$pagination-hover-bg:                  $gray-lighter !default;
+$pagination-hover-border:              #ddd !default;
+
+$pagination-active-color:              #fff !default;
+$pagination-active-bg:                 $brand-primary !default;
+$pagination-active-border:             $brand-primary !default;
+
+$pagination-disabled-color:            $gray-light !default;
+$pagination-disabled-bg:               #fff !default;
+$pagination-disabled-border:           #ddd !default;
+
+
+//== Pager
+//
+//##
+
+$pager-bg:                             $pagination-bg !default;
+$pager-border:                         $pagination-border !default;
+$pager-border-radius:                  15px !default;
+
+$pager-hover-bg:                       $pagination-hover-bg !default;
+
+$pager-active-bg:                      $pagination-active-bg !default;
+$pager-active-color:                   $pagination-active-color !default;
+
+$pager-disabled-color:                 $pagination-disabled-color !default;
+
+
+//== Jumbotron
+//
+//##
+
+$jumbotron-padding:              30px !default;
+$jumbotron-color:                inherit !default;
+$jumbotron-bg:                   $gray-lighter !default;
+$jumbotron-heading-color:        inherit !default;
+$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
+$jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+$state-success-text:             #3c763d !default;
+$state-success-bg:               #dff0d8 !default;
+$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;
+
+$state-info-text:                #31708f !default;
+$state-info-bg:                  #d9edf7 !default;
+$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;
+
+$state-warning-text:             #8a6d3b !default;
+$state-warning-bg:               #fcf8e3 !default;
+$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;
+
+$state-danger-text:              #a94442 !default;
+$state-danger-bg:                #f2dede !default;
+$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+$tooltip-max-width:           200px !default;
+//** Tooltip text color
+$tooltip-color:               #fff !default;
+//** Tooltip background color
+$tooltip-bg:                  #000 !default;
+$tooltip-opacity:             .9 !default;
+
+//** Tooltip arrow width
+$tooltip-arrow-width:         5px !default;
+//** Tooltip arrow color
+$tooltip-arrow-color:         $tooltip-bg !default;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+$popover-bg:                          #fff !default;
+//** Popover maximum width
+$popover-max-width:                   276px !default;
+//** Popover border color
+$popover-border-color:                rgba(0,0,0,.2) !default;
+//** Popover fallback border color
+$popover-fallback-border-color:       #ccc !default;
+
+//** Popover title background color
+$popover-title-bg:                    darken($popover-bg, 3%) !default;
+
+//** Popover arrow width
+$popover-arrow-width:                 10px !default;
+//** Popover arrow color
+$popover-arrow-color:                 $popover-bg !default;
+
+//** Popover outer arrow width
+$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
+//** Popover outer arrow color
+$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;
+//** Popover outer arrow fallback color
+$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+$label-default-bg:            $gray-light !default;
+//** Primary label background color
+$label-primary-bg:            $brand-primary !default;
+//** Success label background color
+$label-success-bg:            $brand-success !default;
+//** Info label background color
+$label-info-bg:               $brand-info !default;
+//** Warning label background color
+$label-warning-bg:            $brand-warning !default;
+//** Danger label background color
+$label-danger-bg:             $brand-danger !default;
+
+//** Default label text color
+$label-color:                 #fff !default;
+//** Default text color of a linked label
+$label-link-hover-color:      #fff !default;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+$modal-inner-padding:         15px !default;
+
+//** Padding applied to the modal title
+$modal-title-padding:         15px !default;
+//** Modal title line-height
+$modal-title-line-height:     $line-height-base !default;
+
+//** Background color of modal content area
+$modal-content-bg:                             #fff !default;
+//** Modal content border color
+$modal-content-border-color:                   rgba(0,0,0,.2) !default;
+//** Modal content border color **for IE8**
+$modal-content-fallback-border-color:          #999 !default;
+
+//** Modal backdrop background color
+$modal-backdrop-bg:           #000 !default;
+//** Modal backdrop opacity
+$modal-backdrop-opacity:      .5 !default;
+//** Modal header border color
+$modal-header-border-color:   #e5e5e5 !default;
+//** Modal footer border color
+$modal-footer-border-color:   $modal-header-border-color !default;
+
+$modal-lg:                    900px !default;
+$modal-md:                    600px !default;
+$modal-sm:                    300px !default;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+$alert-padding:               15px !default;
+$alert-border-radius:         $border-radius-base !default;
+$alert-link-font-weight:      bold !default;
+
+$alert-success-bg:            $state-success-bg !default;
+$alert-success-text:          $state-success-text !default;
+$alert-success-border:        $state-success-border !default;
+
+$alert-info-bg:               $state-info-bg !default;
+$alert-info-text:             $state-info-text !default;
+$alert-info-border:           $state-info-border !default;
+
+$alert-warning-bg:            $state-warning-bg !default;
+$alert-warning-text:          $state-warning-text !default;
+$alert-warning-border:        $state-warning-border !default;
+
+$alert-danger-bg:             $state-danger-bg !default;
+$alert-danger-text:           $state-danger-text !default;
+$alert-danger-border:         $state-danger-border !default;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+$progress-bg:                 #f5f5f5 !default;
+//** Progress bar text color
+$progress-bar-color:          #fff !default;
+//** Variable for setting rounded corners on progress bar.
+$progress-border-radius:      $border-radius-base !default;
+
+//** Default progress bar color
+$progress-bar-bg:             $brand-primary !default;
+//** Success progress bar color
+$progress-bar-success-bg:     $brand-success !default;
+//** Warning progress bar color
+$progress-bar-warning-bg:     $brand-warning !default;
+//** Danger progress bar color
+$progress-bar-danger-bg:      $brand-danger !default;
+//** Info progress bar color
+$progress-bar-info-bg:        $brand-info !default;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+$list-group-bg:                 #fff !default;
+//** `.list-group-item` border color
+$list-group-border:             #ddd !default;
+//** List group border radius
+$list-group-border-radius:      $border-radius-base !default;
+
+//** Background color of single list items on hover
+$list-group-hover-bg:           #f5f5f5 !default;
+//** Text color of active list items
+$list-group-active-color:       $component-active-color !default;
+//** Background color of active list items
+$list-group-active-bg:          $component-active-bg !default;
+//** Border color of active list elements
+$list-group-active-border:      $list-group-active-bg !default;
+//** Text color for content within active list items
+$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
+
+//** Text color of disabled list items
+$list-group-disabled-color:      $gray-light !default;
+//** Background color of disabled list items
+$list-group-disabled-bg:         $gray-lighter !default;
+//** Text color for content within disabled list items
+$list-group-disabled-text-color: $list-group-disabled-color !default;
+
+$list-group-link-color:         #555 !default;
+$list-group-link-hover-color:   $list-group-link-color !default;
+$list-group-link-heading-color: #333 !default;
+
+
+//== Panels
+//
+//##
+
+$panel-bg:                    #fff !default;
+$panel-body-padding:          15px !default;
+$panel-heading-padding:       10px 15px !default;
+$panel-footer-padding:        $panel-heading-padding !default;
+$panel-border-radius:         $border-radius-base !default;
+
+//** Border color for elements within panels
+$panel-inner-border:          #ddd !default;
+$panel-footer-bg:             #f5f5f5 !default;
+
+$panel-default-text:          $gray-dark !default;
+$panel-default-border:        #ddd !default;
+$panel-default-heading-bg:    #f5f5f5 !default;
+
+$panel-primary-text:          #fff !default;
+$panel-primary-border:        $brand-primary !default;
+$panel-primary-heading-bg:    $brand-primary !default;
+
+$panel-success-text:          $state-success-text !default;
+$panel-success-border:        $state-success-border !default;
+$panel-success-heading-bg:    $state-success-bg !default;
+
+$panel-info-text:             $state-info-text !default;
+$panel-info-border:           $state-info-border !default;
+$panel-info-heading-bg:       $state-info-bg !default;
+
+$panel-warning-text:          $state-warning-text !default;
+$panel-warning-border:        $state-warning-border !default;
+$panel-warning-heading-bg:    $state-warning-bg !default;
+
+$panel-danger-text:           $state-danger-text !default;
+$panel-danger-border:         $state-danger-border !default;
+$panel-danger-heading-bg:     $state-danger-bg !default;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+$thumbnail-padding:           4px !default;
+//** Thumbnail background color
+$thumbnail-bg:                $body-bg !default;
+//** Thumbnail border color
+$thumbnail-border:            #ddd !default;
+//** Thumbnail border radius
+$thumbnail-border-radius:     $border-radius-base !default;
+
+//** Custom text color for thumbnail captions
+$thumbnail-caption-color:     $text-color !default;
+//** Padding around the thumbnail caption
+$thumbnail-caption-padding:   9px !default;
+
+
+//== Wells
+//
+//##
+
+$well-bg:                     #f5f5f5 !default;
+$well-border:                 darken($well-bg, 7%) !default;
+
+
+//== Badges
+//
+//##
+
+$badge-color:                 #fff !default;
+//** Linked badge text color on hover
+$badge-link-hover-color:      #fff !default;
+$badge-bg:                    $gray-light !default;
+
+//** Badge text color in active nav link
+$badge-active-color:          $link-color !default;
+//** Badge background color in active nav link
+$badge-active-bg:             #fff !default;
+
+$badge-font-weight:           bold !default;
+$badge-line-height:           1 !default;
+$badge-border-radius:         10px !default;
+
+
+//== Breadcrumbs
+//
+//##
+
+$breadcrumb-padding-vertical:   8px !default;
+$breadcrumb-padding-horizontal: 15px !default;
+//** Breadcrumb background color
+$breadcrumb-bg:                 #f5f5f5 !default;
+//** Breadcrumb text color
+$breadcrumb-color:              #ccc !default;
+//** Text color of current page in the breadcrumb
+$breadcrumb-active-color:       $gray-light !default;
+//** Textual separator for between breadcrumb elements
+$breadcrumb-separator:          "/" !default;
+
+
+//== Carousel
+//
+//##
+
+$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;
+
+$carousel-control-color:                      #fff !default;
+$carousel-control-width:                      15% !default;
+$carousel-control-opacity:                    .5 !default;
+$carousel-control-font-size:                  20px !default;
+
+$carousel-indicator-active-bg:                #fff !default;
+$carousel-indicator-border-color:             #fff !default;
+
+$carousel-caption-color:                      #fff !default;
+
+
+//== Close
+//
+//##
+
+$close-font-weight:           bold !default;
+$close-color:                 #000 !default;
+$close-text-shadow:           0 1px 0 #fff !default;
+
+
+//== Code
+//
+//##
+
+$code-color:                  #c7254e !default;
+$code-bg:                     #f9f2f4 !default;
+
+$kbd-color:                   #fff !default;
+$kbd-bg:                      #333 !default;
+
+$pre-bg:                      #f5f5f5 !default;
+$pre-color:                   $gray-dark !default;
+$pre-border-color:            #ccc !default;
+$pre-scrollable-max-height:   340px !default;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+$component-offset-horizontal: 180px !default;
+//** Text muted color
+$text-muted:                  $gray-light !default;
+//** Abbreviations and acronyms border color
+$abbr-border-color:           $gray-light !default;
+//** Headings small color
+$headings-small-color:        $gray-light !default;
+//** Blockquote small color
+$blockquote-small-color:      $gray-light !default;
+//** Blockquote font size
+$blockquote-font-size:        ($font-size-base * 1.25) !default;
+//** Blockquote border color
+$blockquote-border-color:     $gray-lighter !default;
+//** Page header border color
+$page-header-border-color:    $gray-lighter !default;
+//** Width of horizontal description list titles
+$dl-horizontal-offset:        $component-offset-horizontal !default;
+//** Horizontal line color.
+$hr-border:                   $gray-lighter !default;

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/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 9bc6eed..dcac909 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
@@ -107,16 +107,6 @@ hr {
     text-decoration: none;
 }
 
-.theme-line .navbar-nav a {
-    background-color: transparent;
-}
-
-.theme-line .navbar-nav a:hover,
-.theme-line .navbar-nav a:active,
-.theme-line .navbar-nav a:focus {
-    background-color: transparent;
-}
-
 .theme-line .main-links {
     padding-top: 50px;
 }
@@ -173,15 +163,6 @@ hr {
     font-size: 22px;
 }
 
-.theme-line .btn-primary {
-    border: 0 none;
-    background-color: $ignite-red;
-}
-
-.theme-line .btn-primary:hover {
-    background-color: $ignite-red-hover;
-}
-
 .theme-line .main-content .nav-horizontal a {
     box-shadow: 0 0;
     border: 0 none;
@@ -201,15 +182,14 @@ hr {
     border-bottom: 5px solid #888;
 }
 
-.theme-line .navbar-nav, .theme-line .sidebar-nav {
-    ul li > a.active {
+ul.navbar-nav, .sidebar-nav {
+    li > a.active:not(.dropdown-toggle) {
         cursor: default;
         pointer-events: none;
     }
 }
 
 .theme-line .sidebar-nav {
-    color: #474a54;
     padding-bottom: 30px;
 
     ul {
@@ -217,8 +197,8 @@ hr {
         list-style: none;
         font-size: 14px;
         margin: 3px 0 0;
+
         li {
-            color: #666;
             line-height: $input-height;
 
             span.fa-stack {
@@ -236,6 +216,14 @@ hr {
                 -o-text-overflow: ellipsis;
                 text-overflow: ellipsis;
             }
+
+            a:hover {
+                color: $link-hover-color;
+            }
+
+            a.active {
+                color: $link-color;
+            }
         }
     }
 }
@@ -251,10 +239,6 @@ hr {
         background-color: transparent;
     }
 
-    li a:hover {
-        color: $ignite-red;
-    }
-
     .active {
         background-color: #eee;
     }
@@ -386,80 +370,16 @@ hr {
     border-bottom-color: $ignite-red;
 }
 
-.theme-line .navbar-nav {
-    color: #888;
-}
-
-.theme-line .navbar-nav a {
-    color: #bbb;
-}
-
-.theme-line header a.btn {
-    background-color: $ignite-red;
-}
-
-.theme-line header a.btn:hover {
-    background-color: $ignite-red-hover;
+.nav > li {
+    > a { color: $navbar-default-link-color }
+    > a:hover { color: $link-hover-color }
+    > a.active { color: $link-color }
 }
 
 .theme-line header .navbar-nav .tt-cursor {
     background-color: $ignite-red;
 }
 
-.theme-line header .navbar-nav a:hover, .theme-line header .navbar-nav .open > a {
-    color: $ignite-red;
-}
-
-.theme-line .navbar-nav .active a {
-    //font-weight: bold;
-    color: $ignite-red;
-}
-
-.theme-line .navbar-nav .active a:hover {
-    color: $ignite-red-hover;
-}
-
-.theme-line .main-links .links a:hover {
-    color: $ignite-red;
-}
-
-.theme-line .main-content a {
-    color: $ignite-red;
-}
-
-.theme-line .main-content a:hover {
-    color: $ignite-red-hover;
-}
-
-.theme-line .sidebar-nav ul li a.active:before {
-    background-color: $ignite-red;
-}
-
-.theme-line .sidebar-nav ul li a.active {
-    color: $ignite-red;
-}
-
-.theme-line .sidebar-nav ul li a:hover, .theme-line .sidebar-nav ul li a.active:hover {
-    color: $ignite-red-hover;
-}
-
-.theme-line .main-content .nav-horizontal a.active {
-    border-color: $ignite-red;
-    color: $ignite-red;
-}
-
-.theme-line .main-content .nav-horizontal a:hover {
-    color: $ignite-red-hover;
-}
-
-.theme-line .main-content .nav-horizontal a.active:hover {
-    border-color: $ignite-red-hover;
-}
-
-.theme-line header .navbar-nav a.active, .theme-line #versions-list li a:hover strong, .theme-line #versions-list li a.active .current, .theme-line #versions-list li a:active .current {
-    color: $ignite-red;
-}
-
 .theme-line header .navbar-nav a {
     font-size: 18px;
 }
@@ -495,22 +415,6 @@ h1, h2, h3, h4, h5, h6 {
     margin-bottom: 10px;
 }
 
-.submit-vote.submit-vote-parent.voted a.submit-vote-button, .submit-vote.submit-vote-parent a.submit-vote-button:hover {
-    background-color: $ignite-red;
-}
-
-div.submit-vote.submit-vote-parent.voted a.submit-vote-button:hover {
-    background-color: $ignite-red-hover;
-}
-
-a, .link .title {
-    color: $ignite-red;
-}
-
-a:hover, .link:hover .title {
-    color: $ignite-red-hover;
-}
-
 .header h1.navbar-brand a {
     background-image: url("#{$logo-path}");
 }
@@ -647,6 +551,18 @@ button {
     margin-right: 5px;
 }
 
+.btn {
+    padding: 3px 6px;
+}
+
+.btn-group {
+    margin-right: 5px;
+
+    > button {
+        margin-right: 0;
+    }
+}
+
 h1,
 h2,
 h3 {
@@ -667,16 +583,6 @@ table tr:hover {
     cursor: pointer;
 }
 
-.btn {
-    padding: 3px 6px;
-}
-
-button .caret, .btn .caret {
-    float: right;
-    margin-left: 5px;
-    margin-top: 7px;
-}
-
 .base-control {
     text-align: left;
     padding: 3px 3px;
@@ -922,6 +828,16 @@ button .caret, .btn .caret {
         padding-right: 0 !important;
     }
 
+    margin: 0;
+
+    //tbody, thead { display: block; }
+    //
+    //tbody {
+    //    height: 100px;
+    //    overflow-y: auto;
+    //    overflow-x: hidden;
+    //}
+
     td {
         padding: 3px 6px;
     }
@@ -950,8 +866,6 @@ button .caret, .btn .caret {
             }
         }
     }
-
-    margin: 0;
 }
 
 div.affix.padding-top-dflt {

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-web/src/main/js/views/configuration/caches.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/caches.jade b/modules/control-center-web/src/main/js/views/configuration/caches.jade
index 1ae37dc..ef02c35 100644
--- a/modules/control-center-web/src/main/js/views/configuration/caches.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/caches.jade
@@ -30,9 +30,7 @@ block content
         +main-table('Caches:', 'caches', 'cacheName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}, {{row.mode | displayValue:modes:"Cache mode not set"}}, {{row.atomicityMode | displayValue:atomicities:"Cache atomicity not set"}}')
         .padding-top-dflt(bs-affix)
             button.btn.btn-primary(ng-click='createItem()') New
-            button.btn.btn-primary(ng-disabled='!formChanged(ui.inputForm)' ng-click='saveItem()') Save
-            button.btn.btn-primary(ng-show='backupItem._id' ng-click='saveItemAs()') Copy
-            button.btn.btn-primary(ng-show='backupItem._id' ng-click='removeItem()') Remove
+            +save-remove-buttons
             //label {{ui.formTitle}}
             hr
         form.form-horizontal(name='ui.inputForm' ng-if='backupItem' novalidate)

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-web/src/main/js/views/configuration/clusters.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/clusters.jade b/modules/control-center-web/src/main/js/views/configuration/clusters.jade
index aa1c22c..809e1de 100644
--- a/modules/control-center-web/src/main/js/views/configuration/clusters.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/clusters.jade
@@ -30,9 +30,7 @@ block content
         +main-table('Clusters:', 'clusters', 'clusterName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}, {{row.discovery.kind | displayValue:discoveries:"Discovery not set"}}')
         .padding-top-dflt(bs-affix)
             button.btn.btn-primary(ng-click='createItem()') New
-            button.btn.btn-primary(ng-disabled='!formChanged(ui.inputForm)' ng-click='saveItem()') Save
-            button.btn.btn-primary(ng-show='backupItem._id' ng-click='saveItemAs()') Copy
-            button.btn.btn-primary(ng-show='backupItem._id' ng-click='removeItem()') Remove
+            +save-remove-buttons
             //label {{ui.formTitle}}
             hr
         form.form-horizontal(name='ui.inputForm' ng-if='backupItem' novalidate)

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-web/src/main/js/views/configuration/metadata.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/metadata.jade b/modules/control-center-web/src/main/js/views/configuration/metadata.jade
index c2e70f8..58589f3 100644
--- a/modules/control-center-web/src/main/js/views/configuration/metadata.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/metadata.jade
@@ -31,9 +31,7 @@ block content
         .padding-top-dflt(bs-affix)
             button.btn.btn-primary(ng-click='createItem()') New
             button.btn.btn-primary(ng-click='showLoadMetadataModal()') Load from database
-            button.btn.btn-primary(ng-disabled='!formChanged(ui.inputForm)' ng-click='saveItem()') Save
-            button.btn.btn-primary(ng-show='backupItem._id' ng-click='saveItemAs()') Copy
-            button.btn.btn-primary.btn-second(ng-show='backupItem._id' ng-click='removeItem()') Remove
+            +save-remove-buttons
             //label {{ui.formTitle}}
             hr
         form.form-horizontal(name='ui.inputForm' ng-if='backupItem' novalidate)

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/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 db9d250..83c9e01 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
@@ -473,3 +473,14 @@ mixin preview(previewModel, id)
                 img(ng-if='!#{previewModelState}' src='/images/java.png' title='Show Java code')
         div(ng-if='!#{previewModelState}' id='#{id}' ui-ace='{onLoad: previewInit, mode: "xml"}' ng-model='preview[#{previewModel} + "Xml"]')
         div(ng-if='#{previewModelState}' id='#{id}' ui-ace='{onLoad: previewInit, mode: "java"}' ng-model='preview[#{previewModel} + "Java"]')
+
+mixin save-remove-buttons
+    button.btn.btn-primary(ng-hide='backupItem._id' ng-disabled='!formChanged(ui.inputForm)' ng-click='saveItem()') Save
+    .btn-group(ng-show='backupItem._id')
+        button.btn.btn-primary(ng-disabled='!formChanged(ui.inputForm)' ng-click='saveItem()') Save
+        button.btn.dropdown-toggle.btn-primary(ng-disabled='!backupItem._id' data-toggle='dropdown' bs-dropdown='saveDropdown' data-placement='bottom-center')
+            span.caret
+    .btn-group(ng-show='backupItem._id')
+        button.btn.btn-primary(ng-click='removeItem()') Remove
+        button.btn.dropdown-toggle.btn-primary(data-toggle='dropdown' bs-dropdown='removeDropdown' data-placement='bottom-center')
+            span.caret

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-web/src/main/js/views/includes/header.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/includes/header.jade b/modules/control-center-web/src/main/js/views/includes/header.jade
index 35b946f..6e7b5ca 100644
--- a/modules/control-center-web/src/main/js/views/includes/header.jade
+++ b/modules/control-center-web/src/main/js/views/includes/header.jade
@@ -22,11 +22,11 @@ header#header.header
         strong {{user.username}}
         | ",&nbsp;&nbsp;
         a(href='/admin/become') revert to your identity.
-    .container
+    .container(ng-controller='auth')
         h1.navbar-brand
             a(href='/') Apache Ignite Web Configurator
-        .navbar-collapse.collapse(ng-controller='auth')
-            ul.nav.navbar-nav(ng-controller='activeLink' ng-show='user')
+        .navbar-collapse.collapse(ng-controller='activeLink')
+            ul.nav.navbar-nav(ng-show='user')
                 +header-item('/configuration', '/configuration/clusters', 'Configuration')
                 //+header-item('/monitoring', '/monitoring', 'Monitoring')
                 li(ng-controller='notebooks')
@@ -36,7 +36,7 @@ header#header.header
                 //+header-item('/deploy', '/deploy', 'Deploy')
             ul.nav.navbar-nav.pull-right
                 li(ng-if='user')
-                    a.dropdown-toggle(data-toggle='dropdown' bs-dropdown='userDropdown' data-placement='bottom-right') {{user.username}}
+                    a.dropdown-toggle(data-toggle='dropdown' ng-class='{active: isActive("/profile") || isActive("/admin")}' bs-dropdown='userDropdown' data-placement='bottom-right') {{user.username}}
                         span.caret
                 li.nav-login(ng-if='!user')
                     a(ng-click='login()') Log In

http://git-wip-us.apache.org/repos/asf/ignite/blob/5e851ea8/modules/control-center-web/src/test/js/routes/agent.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/test/js/routes/agent.js b/modules/control-center-web/src/test/js/routes/agent.js
index c8bfd82..318d4e6 100644
--- a/modules/control-center-web/src/test/js/routes/agent.js
+++ b/modules/control-center-web/src/test/js/routes/agent.js
@@ -47,7 +47,7 @@ describe('request from agent', function() {
 
         agent
             .post('/login')
-            .send({email: 'anovikov@gridgain.com', password: 'extHB2aXgb'})
+            .send({email: 'test@test.com', password: 'test'})
             .expect(302)
             .end(function (err) {
                 if (err)


Mime
View raw message