kibana-sinatra 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/kibana-sinatra.gemspec +1 -0
  4. data/lib/kibana/assets/app/app.js +8 -3
  5. data/lib/kibana/assets/app/components/kbn.js +45 -10
  6. data/lib/kibana/assets/app/components/{underscore.extended.js → lodash.extended.js} +2 -4
  7. data/lib/kibana/assets/app/components/require.config.js +5 -6
  8. data/lib/kibana/assets/app/components/settings.js +1 -1
  9. data/lib/kibana/assets/app/controllers/dash.js +10 -5
  10. data/lib/kibana/assets/app/controllers/dashLoader.js +1 -1
  11. data/lib/kibana/assets/app/controllers/pulldown.js +1 -1
  12. data/lib/kibana/assets/app/controllers/row.js +1 -1
  13. data/lib/kibana/assets/app/dashboards/default.json +1 -1
  14. data/lib/kibana/assets/app/dashboards/logstash.js +4 -4
  15. data/lib/kibana/assets/app/dashboards/logstash.json +1 -1
  16. data/lib/kibana/assets/app/directives/addPanel.js +1 -1
  17. data/lib/kibana/assets/app/directives/arrayJoin.js +1 -1
  18. data/lib/kibana/assets/app/directives/configModal.js +23 -5
  19. data/lib/kibana/assets/app/directives/kibanaPanel.js +70 -50
  20. data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +1 -1
  21. data/lib/kibana/assets/app/factories/store.js +59 -0
  22. data/lib/kibana/assets/app/filters/all.js +6 -13
  23. data/lib/kibana/assets/app/panels/bettermap/module.html +5 -0
  24. data/lib/kibana/assets/app/panels/bettermap/module.js +1 -1
  25. data/lib/kibana/assets/app/panels/column/editor.html +1 -1
  26. data/lib/kibana/assets/app/panels/column/module.js +7 -6
  27. data/lib/kibana/assets/app/panels/dashcontrol/module.js +1 -1
  28. data/lib/kibana/assets/app/panels/derivequeries/module.js +1 -1
  29. data/lib/kibana/assets/app/panels/fields/module.js +1 -1
  30. data/lib/kibana/assets/app/panels/filtering/module.html +10 -17
  31. data/lib/kibana/assets/app/panels/filtering/module.js +19 -1
  32. data/lib/kibana/assets/app/panels/histogram/module.html +4 -4
  33. data/lib/kibana/assets/app/panels/histogram/module.js +62 -12
  34. data/lib/kibana/assets/app/panels/histogram/timeSeries.js +6 -3
  35. data/lib/kibana/assets/app/panels/hits/module.js +1 -1
  36. data/lib/kibana/assets/app/panels/map/module.js +1 -1
  37. data/lib/kibana/assets/app/panels/pie/editor.html +1 -1
  38. data/lib/kibana/assets/app/panels/pie/module.js +1 -1
  39. data/lib/kibana/assets/app/panels/query/meta.html +1 -1
  40. data/lib/kibana/assets/app/panels/query/module.html +1 -1
  41. data/lib/kibana/assets/app/panels/query/module.js +2 -7
  42. data/lib/kibana/assets/app/panels/query/query.css +9 -7
  43. data/lib/kibana/assets/app/panels/sparklines/module.js +2 -2
  44. data/lib/kibana/assets/app/panels/sparklines/timeSeries.js +3 -3
  45. data/lib/kibana/assets/app/panels/stats/editor.html +36 -0
  46. data/lib/kibana/assets/app/panels/stats/module.html +15 -0
  47. data/lib/kibana/assets/app/panels/stats/module.js +199 -0
  48. data/lib/kibana/assets/app/panels/table/editor.html +23 -27
  49. data/lib/kibana/assets/app/panels/table/micropanel.html +3 -1
  50. data/lib/kibana/assets/app/panels/table/module.js +7 -1
  51. data/lib/kibana/assets/app/panels/terms/editor.html +16 -3
  52. data/lib/kibana/assets/app/panels/terms/module.html +14 -5
  53. data/lib/kibana/assets/app/panels/terms/module.js +66 -18
  54. data/lib/kibana/assets/app/panels/text/module.js +1 -1
  55. data/lib/kibana/assets/app/panels/timepicker/editor.html +14 -12
  56. data/lib/kibana/assets/app/panels/timepicker/module.html +3 -8
  57. data/lib/kibana/assets/app/panels/timepicker/module.js +1 -1
  58. data/lib/kibana/assets/app/panels/trends/module.js +1 -1
  59. data/lib/kibana/assets/app/partials/dashLoader.html +10 -10
  60. data/lib/kibana/assets/app/partials/dashboard.html +35 -44
  61. data/lib/kibana/assets/app/partials/dasheditor.html +7 -5
  62. data/lib/kibana/assets/app/partials/paneleditor.html +2 -1
  63. data/lib/kibana/assets/app/partials/panelgeneral.html +1 -1
  64. data/lib/kibana/assets/app/partials/roweditor.html +11 -9
  65. data/lib/kibana/assets/app/services/alertSrv.js +1 -1
  66. data/lib/kibana/assets/app/services/dashboard.js +27 -14
  67. data/lib/kibana/assets/app/services/esVersion.js +70 -31
  68. data/lib/kibana/assets/app/services/fields.js +14 -37
  69. data/lib/kibana/assets/app/services/filterSrv.js +7 -11
  70. data/lib/kibana/assets/app/services/kbnIndex.js +24 -15
  71. data/lib/kibana/assets/app/services/panelMove.js +1 -1
  72. data/lib/kibana/assets/app/services/querySrv.js +20 -6
  73. data/lib/kibana/assets/app/services/timer.js +1 -1
  74. data/lib/kibana/assets/css/bootstrap.dark.min.css +1 -1
  75. data/lib/kibana/assets/css/bootstrap.light.min.css +1 -1
  76. data/lib/kibana/assets/img/cubes.png +0 -0
  77. data/lib/kibana/assets/img/light.png +0 -0
  78. data/lib/kibana/assets/index.html +3 -2
  79. data/lib/kibana/assets/vendor/LICENSE.json +90 -0
  80. data/lib/kibana/assets/vendor/angular/angular-cookies.js +185 -0
  81. data/lib/kibana/assets/vendor/angular/angular-dragdrop.js +33 -4
  82. data/lib/kibana/assets/vendor/blob.js +178 -0
  83. data/lib/kibana/assets/vendor/bootstrap/bootstrap.js +6 -1
  84. data/lib/kibana/assets/vendor/bootstrap/less/bak/bootswatch.dark.less +555 -0
  85. data/lib/kibana/assets/vendor/bootstrap/less/bak/variables.dark.less +304 -0
  86. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.dark.less +349 -327
  87. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.light.less +590 -7
  88. data/lib/kibana/assets/vendor/bootstrap/less/modals.less +1 -1
  89. data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +191 -75
  90. data/lib/kibana/assets/vendor/bootstrap/less/variables.dark.less +96 -97
  91. data/lib/kibana/assets/vendor/bootstrap/less/variables.light.less +84 -81
  92. data/lib/kibana/assets/vendor/jquery/jquery.flot.events.js +39 -51
  93. data/lib/kibana/assets/vendor/lodash.js +6785 -0
  94. data/lib/kibana/assets/vendor/numeral.js +565 -0
  95. data/lib/kibana/sinatra/version.rb +1 -1
  96. data/lib/kibana/views/config.erb +1 -0
  97. data/test/sinatra_test.rb +2 -2
  98. metadata +30 -4
  99. data/lib/kibana/assets/vendor/underscore.js +0 -1246
@@ -1,7 +1,36 @@
1
- /*
2
- This has been modified from the default angular-draganddrop to provide the original
3
- model and some other stuff as the 'data' arguement to callEventCallback
4
- */
1
+ /**
2
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
3
+ * of this software and associated documentation files (the "Software"), to
4
+ * deal in the Software without restriction, including without limitation the
5
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
6
+ * sell copies of the Software, and to permit persons to whom the Software is
7
+ * furnished to do so, subject to the following conditions:
8
+ *
9
+ * The above copyright notice and this permission notice shall be included in
10
+ * all copies or substantial portions of the Software.
11
+ *
12
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
17
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
18
+ * IN THE SOFTWARE.
19
+ */
20
+
21
+ /**
22
+ * Implementing Drag and Drop functionality in AngularJS is easier than ever.
23
+ * Demo: http://codef0rmer.github.com/angular-dragdrop/
24
+ *
25
+ * @version 1.0.4
26
+ *
27
+ * (c) 2013 Amit Gharat a.k.a codef0rmer <amit.2006.it@gmail.com> - amitgharat.wordpress.com
28
+ */
29
+
30
+ /**
31
+ * This has been modified from the default angular-draganddrop to provide the original
32
+ * model and some other stuff as the 'data' arguement to callEventCallback
33
+ */
5
34
 
6
35
  (function (window, angular, undefined) {
7
36
  'use strict';
@@ -0,0 +1,178 @@
1
+ /* Blob.js
2
+ * A Blob implementation.
3
+ * 2013-06-20
4
+ *
5
+ * By Eli Grey, http://eligrey.com
6
+ * By Devin Samarin, https://github.com/eboyjr
7
+ * License: X11/MIT
8
+ * See LICENSE.md
9
+ */
10
+
11
+ /*global self, unescape */
12
+ /*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
13
+ plusplus: true */
14
+
15
+ /*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
16
+
17
+ if (typeof Blob !== "function" || typeof URL === "undefined")
18
+ if (typeof Blob === "function" && typeof webkitURL !== "undefined") var URL = webkitURL;
19
+ else var Blob = (function (view) {
20
+ "use strict";
21
+
22
+ var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || view.MSBlobBuilder || (function(view) {
23
+ var
24
+ get_class = function(object) {
25
+ return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
26
+ }
27
+ , FakeBlobBuilder = function BlobBuilder() {
28
+ this.data = [];
29
+ }
30
+ , FakeBlob = function Blob(data, type, encoding) {
31
+ this.data = data;
32
+ this.size = data.length;
33
+ this.type = type;
34
+ this.encoding = encoding;
35
+ }
36
+ , FBB_proto = FakeBlobBuilder.prototype
37
+ , FB_proto = FakeBlob.prototype
38
+ , FileReaderSync = view.FileReaderSync
39
+ , FileException = function(type) {
40
+ this.code = this[this.name = type];
41
+ }
42
+ , file_ex_codes = (
43
+ "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
44
+ + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
45
+ ).split(" ")
46
+ , file_ex_code = file_ex_codes.length
47
+ , real_URL = view.URL || view.webkitURL || view
48
+ , real_create_object_URL = real_URL.createObjectURL
49
+ , real_revoke_object_URL = real_URL.revokeObjectURL
50
+ , URL = real_URL
51
+ , btoa = view.btoa
52
+ , atob = view.atob
53
+ , can_apply_typed_arrays = false
54
+ , can_apply_typed_arrays_test = function(pass) {
55
+ can_apply_typed_arrays = !pass;
56
+ }
57
+
58
+ , ArrayBuffer = view.ArrayBuffer
59
+ , Uint8Array = view.Uint8Array
60
+ ;
61
+ FakeBlob.fake = FB_proto.fake = true;
62
+ while (file_ex_code--) {
63
+ FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
64
+ }
65
+ try {
66
+ if (Uint8Array) {
67
+ can_apply_typed_arrays_test.apply(0, new Uint8Array(1));
68
+ }
69
+ } catch (ex) {}
70
+ if (!real_URL.createObjectURL) {
71
+ URL = view.URL = {};
72
+ }
73
+ URL.createObjectURL = function(blob) {
74
+ var
75
+ type = blob.type
76
+ , data_URI_header
77
+ ;
78
+ if (type === null) {
79
+ type = "application/octet-stream";
80
+ }
81
+ if (blob instanceof FakeBlob) {
82
+ data_URI_header = "data:" + type;
83
+ if (blob.encoding === "base64") {
84
+ return data_URI_header + ";base64," + blob.data;
85
+ } else if (blob.encoding === "URI") {
86
+ return data_URI_header + "," + decodeURIComponent(blob.data);
87
+ } if (btoa) {
88
+ return data_URI_header + ";base64," + btoa(blob.data);
89
+ } else {
90
+ return data_URI_header + "," + encodeURIComponent(blob.data);
91
+ }
92
+ } else if (real_create_object_URL) {
93
+ return real_create_object_URL.call(real_URL, blob);
94
+ }
95
+ };
96
+ URL.revokeObjectURL = function(object_URL) {
97
+ if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
98
+ real_revoke_object_URL.call(real_URL, object_URL);
99
+ }
100
+ };
101
+ FBB_proto.append = function(data/*, endings*/) {
102
+ var bb = this.data;
103
+ // decode data to a binary string
104
+ if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
105
+ if (can_apply_typed_arrays) {
106
+ bb.push(String.fromCharCode.apply(String, new Uint8Array(data)));
107
+ } else {
108
+ var
109
+ str = ""
110
+ , buf = new Uint8Array(data)
111
+ , i = 0
112
+ , buf_len = buf.length
113
+ ;
114
+ for (; i < buf_len; i++) {
115
+ str += String.fromCharCode(buf[i]);
116
+ }
117
+ }
118
+ } else if (get_class(data) === "Blob" || get_class(data) === "File") {
119
+ if (FileReaderSync) {
120
+ var fr = new FileReaderSync;
121
+ bb.push(fr.readAsBinaryString(data));
122
+ } else {
123
+ // async FileReader won't work as BlobBuilder is sync
124
+ throw new FileException("NOT_READABLE_ERR");
125
+ }
126
+ } else if (data instanceof FakeBlob) {
127
+ if (data.encoding === "base64" && atob) {
128
+ bb.push(atob(data.data));
129
+ } else if (data.encoding === "URI") {
130
+ bb.push(decodeURIComponent(data.data));
131
+ } else if (data.encoding === "raw") {
132
+ bb.push(data.data);
133
+ }
134
+ } else {
135
+ if (typeof data !== "string") {
136
+ data += ""; // convert unsupported types to strings
137
+ }
138
+ // decode UTF-16 to binary string
139
+ bb.push(unescape(encodeURIComponent(data)));
140
+ }
141
+ };
142
+ FBB_proto.getBlob = function(type) {
143
+ if (!arguments.length) {
144
+ type = null;
145
+ }
146
+ return new FakeBlob(this.data.join(""), type, "raw");
147
+ };
148
+ FBB_proto.toString = function() {
149
+ return "[object BlobBuilder]";
150
+ };
151
+ FB_proto.slice = function(start, end, type) {
152
+ var args = arguments.length;
153
+ if (args < 3) {
154
+ type = null;
155
+ }
156
+ return new FakeBlob(
157
+ this.data.slice(start, args > 1 ? end : this.data.length)
158
+ , type
159
+ , this.encoding
160
+ );
161
+ };
162
+ FB_proto.toString = function() {
163
+ return "[object Blob]";
164
+ };
165
+ return FakeBlobBuilder;
166
+ }(view));
167
+
168
+ return function Blob(blobParts, options) {
169
+ var type = options ? (options.type || "") : "";
170
+ var builder = new BlobBuilder();
171
+ if (blobParts) {
172
+ for (var i = 0, len = blobParts.length; i < len; i++) {
173
+ builder.append(blobParts[i]);
174
+ }
175
+ }
176
+ return builder.getBlob(type);
177
+ };
178
+ }(self));
@@ -1908,6 +1908,7 @@
1908
1908
  , select: function () {
1909
1909
  // CHANGE (rashidkpc) If nothing is selected, use existing value
1910
1910
  var val = this.$menu.find('.active').attr('data-value') || this.$element.val();
1911
+ val = $('<div />').html(val).text()
1911
1912
  this.$element
1912
1913
  .val(this.updater(val))
1913
1914
  .change()
@@ -1968,6 +1969,10 @@
1968
1969
  return this.shown ? this.hide() : this
1969
1970
  }
1970
1971
 
1972
+ items = $.map(items,function(v,k){
1973
+ return $('<div />').text(v).html()
1974
+ })
1975
+
1971
1976
  return this.render(items.slice(0, this.options.items)).show()
1972
1977
  }
1973
1978
 
@@ -1993,7 +1998,7 @@
1993
1998
  , highlighter: function (item) {
1994
1999
  var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
1995
2000
  return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
1996
- return '<strong>' + match + '</strong>'
2001
+ return match.length > 0 ? '<strong>' + match + '</strong>' : match
1997
2002
  })
1998
2003
  }
1999
2004
 
@@ -0,0 +1,555 @@
1
+ // Slate 2.3.2
2
+ // Bootswatch
3
+ // -----------------------------------------------------
4
+
5
+ // KIBANA
6
+ .panelCont {
7
+ outline: 1px solid darken(@bodyBackground, 10%);
8
+ border-top: 1px solid lighten(@bodyBackground, 10%);
9
+ padding: 0px 10px 10px 10px;
10
+ background: darken(@bodyBackground, 3%);
11
+ margin: 0px;
12
+ }
13
+
14
+
15
+ // TYPOGRAPHY
16
+ // -----------------------------------------------------
17
+
18
+ h1, h2, h3, h4, h5, h6 {
19
+ text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
20
+ }
21
+
22
+ code, pre {
23
+ background-color: #F7F7F7;
24
+ border: 1px solid darken(@grayDarker, 5%);
25
+ text-shadow: none;
26
+ }
27
+
28
+ // SCAFFOLDING
29
+ // -----------------------------------------------------
30
+
31
+ legend, .page-header {
32
+ border-bottom: 1px solid @hrBorder;
33
+ }
34
+
35
+ hr {
36
+ border-bottom: none;
37
+ }
38
+
39
+ // NAVBAR
40
+ // -----------------------------------------------------
41
+
42
+ .navbar {
43
+
44
+ .navbar-inner {
45
+ #gradient > .vertical-three-colors(@grayDark, darken(@bodyBackground,3%), 70%, darken(@bodyBackground,3%));
46
+ }
47
+
48
+ .brand {
49
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
50
+ border-right: none;
51
+ }
52
+
53
+ .navbar-text {
54
+ padding: 0 15px;
55
+ font-weight: bold;
56
+ }
57
+
58
+ .nav > li > a {
59
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
60
+ border-right: 1px solid rgba(0, 0, 0, 0.2);
61
+ border-left: 1px solid rgba(255, 255, 255, 0.1);
62
+
63
+ &:hover {
64
+ #gradient > .directional(@grayDarker, @grayDark, 280deg);
65
+ border-left: 1px solid transparent;
66
+ border-right: 1px solid transparent;
67
+ }
68
+ }
69
+
70
+ .nav > li.active > a,
71
+ .nav > li.active > a:hover {
72
+ color: @grayLighter;
73
+ background-color: @grayDark;
74
+ #gradient > .directional(lighten(@grayDarker, 2%), lighten(@grayDark, 2%), 0deg);
75
+ border-right: 1px solid darken(@gray, 15%);
76
+ }
77
+
78
+ .navbar-search .search-query {
79
+ border: 1px solid darken(@gray, 15%);
80
+ }
81
+
82
+ .btn,
83
+ .btn-group {
84
+ margin: 4px 0;
85
+ }
86
+
87
+ .divider-vertical {
88
+ background-color: transparent;
89
+ border-right: none;
90
+ }
91
+
92
+ .dropdown-menu::after {
93
+ border-bottom: 6px solid @grayDark;
94
+ }
95
+
96
+ &-inverse {
97
+
98
+ .navbar-inner {
99
+ #gradient > .vertical-three-colors(darken(@grayDarker, 3%), darken(@grayDarker, 8%), 70%, darken(@grayDarker, 8%));
100
+ }
101
+
102
+ .nav li > a {
103
+ background-image: none;
104
+ background-color: transparent;
105
+ }
106
+
107
+ .nav li > a:hover,
108
+ .nav li.active > a,
109
+ .nav li.active > a:hover {
110
+ #gradient > .directional(darken(@grayDarker, 10%), darken(@grayDarker, 5%), 280deg);
111
+ }
112
+ }
113
+ }
114
+
115
+ @media (max-width: @navbarCollapseWidth) {
116
+
117
+ .navbar .nav-collapse {
118
+
119
+ .nav li > a,
120
+ .nav li > a:hover,
121
+ .nav .active > a,
122
+ .nav .active > a:hover {
123
+ .box-shadow(none);
124
+ color: @grayLighter;
125
+ border: 1px solid transparent;
126
+ background-color: transparent;
127
+ background-image: none;
128
+ }
129
+
130
+ .nav li > a:hover,
131
+ .nav .active > a:hover {
132
+ background-color: @grayDarker;
133
+ }
134
+
135
+ .navbar-form,
136
+ .navbar-search {
137
+ border-color: transparent;
138
+ .box-shadow(none);
139
+ }
140
+
141
+ .nav-header {
142
+ color: @grayLight;
143
+ }
144
+ }
145
+
146
+ .navbar-inverse .nav-collapse {
147
+
148
+ .nav li > a:hover,
149
+ .nav .active > a:hover {
150
+ background-color: @grayDarker !important;
151
+ }
152
+ }
153
+ }
154
+
155
+ .nav-tabs {
156
+ .active > a, .active a:hover {
157
+ border-bottom: 1px solid darken(@grayDark, 5%);;
158
+ }
159
+ }
160
+
161
+ div.subnav {
162
+
163
+ margin: 0 1px;
164
+ //#gradient > .vertical-three-colors(@gray, @grayDark, 70%, @grayDark);
165
+ border: 1px solid transparent;
166
+ .box-shadow('0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)');
167
+
168
+ .nav > li > a {
169
+ color: @grayLighter;
170
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
171
+ border-right: 1px solid darken(@gray, 15%);
172
+ border-left: 1px solid @gray;
173
+
174
+ &:hover {
175
+ color: @grayLighter;
176
+ background-color: @grayDark;
177
+ //#gradient > .directional(@grayDarker, @grayDark, 280deg);
178
+ border-left: 1px solid transparent;
179
+ border-right: 1px solid transparent;
180
+ }
181
+ }
182
+
183
+ .nav > li.active > a,
184
+ .nav > li.active > a:hover {
185
+ color: @grayLighter;
186
+ background-color: @grayDark;
187
+ #gradient > .directional(lighten(@grayDarker, 4%), lighten(@grayDark, 4%), 280deg);
188
+ border-right: 1px solid darken(@gray, 15%);
189
+ }
190
+
191
+ .nav > li:first-child > a,
192
+ .nav > li:first-child > a:hover {
193
+ border-left: 1px solid transparent;
194
+ }
195
+
196
+ .nav > li.active:last-child > a,
197
+ .nav > li:last-child > a:hover {
198
+ border-right: 1px solid darken(@gray, 15%);
199
+ }
200
+
201
+ .open .dropdown-toggle {
202
+ border-right: 1px solid darken(@gray, 15%);
203
+ border-left: 1px solid @gray;
204
+ }
205
+
206
+ &.subnav-fixed {
207
+ top: @navbarHeight;
208
+ margin: 0;
209
+ .box-shadow(none);
210
+
211
+ .nav > li.active:first-child > a,
212
+ .nav > li:first-child > a:hover {
213
+ border-left: 1px solid darken(@gray, 15%);
214
+ }
215
+ }
216
+ }
217
+
218
+ // NAV
219
+ // -----------------------------------------------------
220
+
221
+ .nav {
222
+
223
+ .nav-header {
224
+ text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
225
+ }
226
+
227
+ & > li > a {
228
+ //#gradient > .vertical-three-colors(@gray, @grayDark, 70%, @grayDark);
229
+ .box-shadow('0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)');
230
+ border: none;
231
+ color: @grayLight;
232
+ font-weight: bold;
233
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
234
+ }
235
+
236
+ li.active > a,
237
+ li.active > a:hover {
238
+ background-color: transparent;
239
+ color: @white;
240
+ }
241
+
242
+ & > li.disabled > a,
243
+ & > li.disabled > a:hover {
244
+ color: @gray;
245
+ }
246
+
247
+ li > a:hover {
248
+ background-color: transparent;
249
+ color: @grayLighter;
250
+ }
251
+
252
+ }
253
+
254
+ .breadcrumb {
255
+ border: 1px solid transparent;
256
+ #gradient > .vertical-three-colors(@gray, @grayDark, 70%, @grayDark);
257
+ .box-shadow('0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)');
258
+
259
+ a {
260
+ color: @grayLighter;
261
+ font-weight: bold;
262
+ }
263
+
264
+ li {
265
+ color: @grayLight;
266
+ font-weight: bold;
267
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
268
+ }
269
+ }
270
+
271
+ .pagination {
272
+
273
+ ul {
274
+ .box-shadow(none);
275
+ }
276
+
277
+ ul > li > a,
278
+ ul > li > span {
279
+ border-left: 1px solid @gray;
280
+ border-right: 1px solid darken(@gray, 15%);
281
+ border-top: none;
282
+ border-bottom: none;
283
+ #gradient > .vertical-three-colors(@gray, @grayDark, 70%, @grayDark);
284
+ .box-shadow('0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)');
285
+ color: @grayLighter;
286
+ font-weight: bold;
287
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
288
+
289
+ &:hover {
290
+ #gradient > .directional(@grayDarker, @grayDark, 280deg);
291
+ border-left: 1px solid transparent;
292
+ }
293
+ }
294
+
295
+ ul > .active > a,
296
+ ul > .active > a:hover,
297
+ ul > .active > span,
298
+ ul > .active > span:hover {
299
+ color: @grayLighter;
300
+ background-color: @grayDark;
301
+ #gradient > .directional(lighten(@grayDarker, 4%), lighten(@grayDark, 4%), 280deg);
302
+ border-left: 1px solid transparent;
303
+ }
304
+
305
+ ul > .disabled > a,
306
+ ul > .disabled > a:hover,
307
+ ul > .disabled > span,
308
+ ul > .disabled > span:hover {
309
+ border-left: 1px solid @gray;
310
+ border-right: 1px solid darken(@gray, 15%);
311
+ border-top: none;
312
+ border-bottom: none;
313
+ #gradient > .vertical-three-colors(@grayLight, @gray, 70%, @gray);
314
+ }
315
+ }
316
+
317
+ .pager {
318
+
319
+ li > a,
320
+ li > span {
321
+
322
+ border: 1px solid transparent;
323
+ .box-shadow('0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)');
324
+ #gradient > .vertical-three-colors(@gray, @grayDark, 70%, @grayDark);
325
+
326
+ &:hover {
327
+ #gradient > .directional(@grayDarker, @grayDark, 280deg);
328
+ border: 1px solid transparent;
329
+ }
330
+ }
331
+
332
+ .disabled a,
333
+ .disabled a:hover {
334
+ background-color: transparent;
335
+ #gradient > .vertical-three-colors(@gray, @grayDark, 70%, @grayDark);
336
+ }
337
+ }
338
+
339
+ // BUTTONS
340
+ // -----------------------------------------------------
341
+
342
+ .btn {
343
+ .buttonBackground(@gray, darken(@gray, 10%));
344
+ .border-radius(3px);
345
+ border: 1px solid @grayDarker;
346
+ }
347
+
348
+ .btn, .btn:hover {
349
+ color: @white;
350
+ font-weight: bold;
351
+ text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.3);
352
+ }
353
+
354
+ .btn-primary {
355
+ .buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20));
356
+ color: @grayDark;
357
+ text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.3);
358
+ }
359
+
360
+ .btn-warning {
361
+ .buttonBackground(lighten(@orange, 15%), @orange);
362
+ }
363
+
364
+ .btn-danger {
365
+ .buttonBackground(@red, #bd362f);
366
+ }
367
+
368
+ .btn-success {
369
+ .buttonBackground(@green, #51a351);
370
+ }
371
+
372
+ .btn-info {
373
+ .buttonBackground(@blue, #2f96b4);
374
+ }
375
+
376
+ .btn-inverse {
377
+ .buttonBackground(@gray, @grayDarker);
378
+ }
379
+
380
+ .caret {
381
+ border-top-color: @white;
382
+ }
383
+
384
+ // TABLES
385
+ // -----------------------------------------------------
386
+
387
+ .table {
388
+
389
+ tbody tr.success td {
390
+ background-color: @successText;
391
+ }
392
+
393
+ tbody tr.error td {
394
+ background-color: @errorText;
395
+ }
396
+
397
+ tbody tr.info td {
398
+ background-color: @infoText;
399
+ }
400
+
401
+ }
402
+
403
+
404
+ // FORMS
405
+ // -----------------------------------------------------
406
+
407
+ label, input, button, select, textarea, legend {
408
+ color: @textColor;
409
+ }
410
+
411
+ legend, label {
412
+ text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
413
+ }
414
+
415
+ .input-prepend .add-on,
416
+ .input-append .add-on {
417
+ vertical-align: top;
418
+ background-color: @gray;
419
+ border-top: 1px solid @grayLight;
420
+ border-left: 1px solid @grayLight;
421
+ border-bottom: 1px solid @grayDark;
422
+ border-right: 1px solid @grayDark;
423
+ text-shadow: none;
424
+ }
425
+
426
+ .input-append .btn,
427
+ .input-prepend .btn {
428
+ margin-top: -1px;
429
+ padding: 5px 14px;
430
+ }
431
+
432
+ .uneditable-input,
433
+ input[disabled],
434
+ select[disabled],
435
+ textarea[disabled],
436
+ input[readonly],
437
+ select[readonly],
438
+ textarea[readonly] {
439
+ color: @gray;
440
+ background: @grayDarker;
441
+ }
442
+
443
+ .form-actions {
444
+ border-top: none;
445
+ }
446
+
447
+ // DROPDOWNS
448
+ // -----------------------------------------------------
449
+
450
+ .dropdown-menu {
451
+ .box-shadow(0 5px 5px rgba(0, 0, 0, 0.2));
452
+ }
453
+
454
+ .dropdown.open .dropdown-toggle {
455
+ background-color: @grayDark;
456
+ color: @grayLighter;
457
+ }
458
+
459
+ .dropdown-submenu > a::after {
460
+ border-left-color: @white;
461
+ }
462
+
463
+ // ALERTS, LABELS, BADGES
464
+ // -----------------------------------------------------
465
+
466
+ .label, .alert {
467
+ color: rgba(255, 255, 255, 0.9);
468
+ text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);
469
+ .box-shadow(1px 1px 1px rgba(0, 0, 0, 0.3));
470
+ }
471
+
472
+ .alert {
473
+ background-color: @orange;
474
+ border-color: @orange;
475
+
476
+ .alert-heading {
477
+ color: rgba(255, 255, 255, 0.9);
478
+ text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.4);
479
+ }
480
+ }
481
+
482
+ .alert-success {
483
+ background-color: @successText;
484
+ border-color: @successText;
485
+ }
486
+
487
+ .alert-error {
488
+ background-color: @errorText;
489
+ border-color: @errorText;
490
+ }
491
+
492
+ .alert-info {
493
+ background-color: @infoText;
494
+ border-color: @infoText;
495
+ }
496
+
497
+ // MISC
498
+ // -----------------------------------------------------
499
+
500
+ .well, .hero-unit {
501
+ .box-shadow(inset 1px 1px 1px rgba(0, 0, 0, 0.5));
502
+ }
503
+
504
+ .thumbnail,
505
+ a.thumbnail:hover {
506
+ border: 1px solid darken(@grayDarker, 5%);
507
+ }
508
+
509
+ .progress {
510
+ background-color: darken(@grayDarker, 3%);
511
+ #gradient > .vertical(darken(@grayDarker, 3%), darken(@grayDarker, 3%));
512
+ .box-shadow(inset 1px 1px 1px rgba(0, 0, 0, 0.5));
513
+ }
514
+
515
+ .footer {
516
+ border-top: 1px solid darken(@grayDarker, 5%);
517
+
518
+ p {
519
+ color: @textColor;
520
+ }
521
+ }
522
+
523
+ .modal {
524
+
525
+ background-color: darken(@grayDark, 5%);
526
+
527
+ &-header {
528
+ border-bottom: none;
529
+ }
530
+
531
+ &-body {
532
+ border-bottom: 1px solid #1C1E22;
533
+ }
534
+
535
+ &-footer {
536
+ border-top: none;
537
+ background-color: @grayDarker;
538
+ .box-shadow(none);
539
+ }
540
+ }
541
+
542
+ // MEDIA QUERIES
543
+ // -----------------------------------------------------
544
+
545
+ @media (max-width: 979px) {
546
+ .navbar .brand {
547
+ border-right: none;
548
+ }
549
+ }
550
+
551
+ @media (max-width: 768px) {
552
+ div.subnav .nav > li + li > a {
553
+ border-top: 1px solid transparent;
554
+ }
555
+ }