spiderfw 0.6.26.pre1 → 0.6.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/CHANGELOG +4 -0
  2. data/VERSION +1 -1
  3. data/apps/app_server/lib/git_app.rb +1 -1
  4. data/apps/core/admin/admin.rb +2 -1
  5. data/apps/core/components/public/bootstrap/LICENSE +0 -0
  6. data/apps/core/components/public/bootstrap/README.md +3 -2
  7. data/apps/core/components/public/bootstrap/img/glyphicons-halflings-white.png +0 -0
  8. data/apps/core/components/public/bootstrap/img/glyphicons-halflings.png +0 -0
  9. data/apps/core/components/public/bootstrap/js/README.md +2 -2
  10. data/apps/core/components/public/bootstrap/js/bootstrap-alert.js +8 -5
  11. data/apps/core/components/public/bootstrap/js/bootstrap-button.js +5 -3
  12. data/apps/core/components/public/bootstrap/js/bootstrap-carousel.js +5 -2
  13. data/apps/core/components/public/bootstrap/js/bootstrap-collapse.js +2 -2
  14. data/apps/core/components/public/bootstrap/js/bootstrap-dropdown.js +2 -2
  15. data/apps/core/components/public/bootstrap/js/bootstrap-modal.js +6 -5
  16. data/apps/core/components/public/bootstrap/js/bootstrap-popover.js +2 -2
  17. data/apps/core/components/public/bootstrap/js/bootstrap-scrollspy.js +2 -2
  18. data/apps/core/components/public/bootstrap/js/bootstrap-tab.js +2 -2
  19. data/apps/core/components/public/bootstrap/js/bootstrap-tooltip.js +2 -2
  20. data/apps/core/components/public/bootstrap/js/bootstrap-transition.js +3 -3
  21. data/apps/core/components/public/bootstrap/js/bootstrap-typeahead.js +2 -2
  22. data/apps/core/components/public/bootstrap/js/tests/index.html +0 -0
  23. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-alert.js +2 -2
  24. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-button.js +25 -2
  25. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-collapse.js +0 -0
  26. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-dropdown.js +0 -0
  27. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-modal.js +0 -0
  28. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-popover.js +0 -0
  29. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-scrollspy.js +0 -0
  30. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-tab.js +0 -0
  31. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-tooltip.js +0 -0
  32. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-transition.js +0 -0
  33. data/apps/core/components/public/bootstrap/js/tests/unit/bootstrap-typeahead.js +0 -0
  34. data/apps/core/components/public/bootstrap/js/tests/vendor/jquery.js +0 -0
  35. data/apps/core/components/public/bootstrap/js/tests/vendor/qunit.css +0 -0
  36. data/apps/core/components/public/bootstrap/js/tests/vendor/qunit.js +0 -0
  37. data/apps/core/components/public/bootstrap/scss/_accordion.scss +0 -0
  38. data/apps/core/components/public/bootstrap/scss/_alerts.scss +0 -0
  39. data/apps/core/components/public/bootstrap/scss/_breadcrumbs.scss +0 -0
  40. data/apps/core/components/public/bootstrap/scss/_button-groups.scss +1 -1
  41. data/apps/core/components/public/bootstrap/scss/_buttons.scss +25 -7
  42. data/apps/core/components/public/bootstrap/scss/_carousel.scss +1 -1
  43. data/apps/core/components/public/bootstrap/scss/_close.scss +0 -0
  44. data/apps/core/components/public/bootstrap/scss/_code.scss +13 -0
  45. data/apps/core/components/public/bootstrap/scss/_component-animations.scss +2 -2
  46. data/apps/core/components/public/bootstrap/scss/_dropdowns.scss +2 -3
  47. data/apps/core/components/public/bootstrap/scss/_forms.scss +50 -44
  48. data/apps/core/components/public/bootstrap/scss/_grid.scss +0 -0
  49. data/apps/core/components/public/bootstrap/scss/_hero-unit.scss +0 -0
  50. data/apps/core/components/public/bootstrap/scss/_labels.scss +23 -7
  51. data/apps/core/components/public/bootstrap/scss/_layouts.scss +0 -0
  52. data/apps/core/components/public/bootstrap/scss/_mixins.scss +83 -68
  53. data/apps/core/components/public/bootstrap/scss/_modals.scss +11 -0
  54. data/apps/core/components/public/bootstrap/scss/_navbar.scss +11 -3
  55. data/apps/core/components/public/bootstrap/scss/_navs.scss +27 -17
  56. data/apps/core/components/public/bootstrap/scss/_pager.scss +0 -0
  57. data/apps/core/components/public/bootstrap/scss/_pagination.scss +38 -47
  58. data/apps/core/components/public/bootstrap/scss/_popovers.scss +0 -0
  59. data/apps/core/components/public/bootstrap/scss/_print.scss +0 -0
  60. data/apps/core/components/public/bootstrap/scss/_progress-bars.scss +0 -0
  61. data/apps/core/components/public/bootstrap/scss/_reset.scss +1 -1
  62. data/apps/core/components/public/bootstrap/scss/_scaffolding.scss +0 -0
  63. data/apps/core/components/public/bootstrap/scss/_sprites.scss +7 -5
  64. data/apps/core/components/public/bootstrap/scss/_tables.scss +14 -3
  65. data/apps/core/components/public/bootstrap/scss/_thumbnails.scss +2 -2
  66. data/apps/core/components/public/bootstrap/scss/_tooltip.scss +0 -0
  67. data/apps/core/components/public/bootstrap/scss/_type.scss +3 -2
  68. data/apps/core/components/public/bootstrap/scss/_utilities.scss +0 -0
  69. data/apps/core/components/public/bootstrap/scss/_variables.scss +12 -4
  70. data/apps/core/components/public/bootstrap/scss/_wells.scss +0 -0
  71. data/apps/core/components/public/bootstrap/scss/bootstrap.css +290 -820
  72. data/apps/core/components/public/bootstrap/scss/bootstrap.scss +1 -1
  73. data/apps/core/components/public/bootstrap/scss/{bootstrap-responsive.css → responsive.css} +42 -31
  74. data/apps/core/components/public/bootstrap/scss/{bootstrap-responsive.scss → responsive.scss} +10 -6
  75. data/apps/core/components/public/css/table_base.css +0 -4
  76. data/apps/core/components/public/js/jquery/jquery-ui-1.8.11/ui/jquery.ui.sortable.js +10 -2
  77. data/apps/core/components/public/js/plugins/sortable.js +4 -4
  78. data/apps/core/components/public/js/spider.js +3 -1
  79. data/apps/core/components/widgets/confirm/confirm.rb +20 -7
  80. data/apps/core/components/widgets/table/table.shtml +1 -1
  81. data/apps/core/forms/public/html_area.js +5 -4
  82. data/apps/core/forms/public/input.js +28 -28
  83. data/apps/core/forms/public/search_select.js +131 -131
  84. data/apps/core/forms/public/select.js +16 -16
  85. data/apps/core/forms/widgets/form/form.rb +11 -7
  86. data/apps/core/forms/widgets/inputs/date_time/date_time.rb +1 -1
  87. data/apps/core/forms/widgets/inputs/html_area/html_area.shtml +2 -2
  88. data/apps/core/forms/widgets/inputs/input/input.rb +3 -1
  89. data/apps/messenger/lib/backends/mobyt.rb +11 -0
  90. data/apps/messenger/test/features/sms_mobyt.feature +24 -0
  91. data/apps/messenger/test/features/step_definitions/sms_mobyt.rb +21 -0
  92. data/apps/messenger/views/index.shtml +2 -2
  93. data/apps/soap/controllers/soap_controller.rb +5 -2
  94. data/lib/spiderfw/app.rb +13 -0
  95. data/lib/spiderfw/config/configuration.rb +4 -1
  96. data/lib/spiderfw/config/options/spider.rb +1 -1
  97. data/lib/spiderfw/controller/http_controller.rb +2 -0
  98. data/lib/spiderfw/http/adapters/rack.rb +1 -1
  99. data/lib/spiderfw/i18n/cldr.rb +1 -1
  100. data/lib/spiderfw/model/base_model.rb +5 -0
  101. data/lib/spiderfw/model/mappers/mapper.rb +3 -1
  102. data/lib/spiderfw/model/mixins/tree.rb +11 -1
  103. data/lib/spiderfw/model/model.rb +7 -5
  104. data/lib/spiderfw/model/query_set.rb +6 -0
  105. data/lib/spiderfw/setup/app_server_client.rb +1 -1
  106. data/lib/spiderfw/spider.rb +9 -9
  107. data/lib/spiderfw/templates/layout.rb +5 -3
  108. data/lib/spiderfw/templates/resources/sass.rb +31 -3
  109. data/lib/spiderfw/templates/template.rb +10 -9
  110. data/lib/spiderfw/widget/widget.rb +2 -2
  111. metadata +13 -17
  112. data/apps/core/components/public/bootstrap/scss/_custom.css +0 -0
  113. data/apps/core/components/public/bootstrap/scss/_patterns.scss +0 -13
  114. data/apps/core/components/public/bootstrap/scss/config.rb +0 -36
@@ -28,6 +28,12 @@ legend {
28
28
  color: $grayDark;
29
29
  border: 0;
30
30
  border-bottom: 1px solid #eee;
31
+
32
+ // Small
33
+ small {
34
+ font-size: $baseLineHeight * .75;
35
+ color: $grayLight;
36
+ }
31
37
  }
32
38
 
33
39
  // Set font for forms
@@ -38,6 +44,12 @@ select,
38
44
  textarea {
39
45
  @include font-sans-serif($baseFontSize,normal,$baseLineHeight);
40
46
  }
47
+ input,
48
+ button,
49
+ select,
50
+ textarea {
51
+ @include font-sans-serif(); // And only set font-family here for those that need it (note the missing label element)
52
+ }
41
53
 
42
54
  // Identify controls by their labels
43
55
  label {
@@ -75,22 +87,26 @@ label select {
75
87
  }
76
88
 
77
89
  // Mini reset for unique input types
78
- input[type=image],
79
- input[type=checkbox],
80
- input[type=radio] {
90
+ input[type="image"],
91
+ input[type="checkbox"],
92
+ input[type="radio"] {
81
93
  width: auto;
82
94
  height: auto;
83
95
  padding: 0;
84
96
  margin: 3px 0;
85
97
  *margin-top: 0; /* IE7 */
86
98
  line-height: normal;
87
- border: none;
88
99
  cursor: pointer;
89
- border-radius: 0 #{"\0/"}; // Nuke border-radius for IE9 only
100
+ @include border-radius(0); // Nuke border-radius for IE9 only
101
+ border: 0 \9; /* IE9 and down */
102
+ }
103
+ input[type="image"] {
104
+ border: 0;
90
105
  }
91
106
 
92
107
  // Reset the file input to browser defaults
93
108
  input[type="file"] {
109
+ width: auto;
94
110
  padding: initial;
95
111
  line-height: initial;
96
112
  border: initial;
@@ -115,6 +131,11 @@ input[type="file"] {
115
131
  line-height: 28px;
116
132
  }
117
133
 
134
+ // Reset line-height for IE
135
+ input[type="file"] {
136
+ line-height: 18px \9;
137
+ }
138
+
118
139
  // Chrome on Linux and Mobile Safari need background-color
119
140
  select {
120
141
  width: 220px; // default input width + 10px of padding that doesn't get applied
@@ -132,6 +153,7 @@ input[type="image"] {
132
153
  @include box-shadow(none);
133
154
  }
134
155
 
156
+ // Make textarea height behave
135
157
  textarea {
136
158
  height: auto;
137
159
  }
@@ -165,6 +187,7 @@ input[type="hidden"] {
165
187
  }
166
188
 
167
189
  // Radios and checkboxes on same line
190
+ // TODO v3: Convert .inline to .control-inline
168
191
  .radio.inline,
169
192
  .checkbox.inline {
170
193
  display: inline-block;
@@ -175,11 +198,6 @@ input[type="hidden"] {
175
198
  .checkbox.inline + .checkbox.inline {
176
199
  margin-left: 10px; // space out consecutive inline controls
177
200
  }
178
- // But don't forget to remove their padding on first-child
179
- .controls > .radio.inline:first-child,
180
- .controls > .checkbox.inline:first-child {
181
- padding-top: 0;
182
- }
183
201
 
184
202
 
185
203
 
@@ -201,8 +219,8 @@ textarea:focus {
201
219
  outline: thin dotted \9; /* IE6-8 */
202
220
  }
203
221
  input[type="file"]:focus,
222
+ input[type="radio"]:focus,
204
223
  input[type="checkbox"]:focus,
205
-
206
224
  select:focus {
207
225
  @include box-shadow(none); // override for file inputs
208
226
  @include tab-focus();
@@ -261,33 +279,6 @@ textarea[readonly] {
261
279
  // FORM FIELD FEEDBACK STATES
262
280
  // --------------------------
263
281
 
264
- // Mixin for form field states
265
- @mixin formFieldState($textColor: #555, $borderColor: #ccc, $backgroundColor: #f5f5f5) {
266
- // Set the text color
267
- > label,
268
- .help-block,
269
- .help-inline {
270
- color: $textColor;
271
- }
272
- // Style inputs accordingly
273
- input,
274
- select,
275
- textarea {
276
- color: $textColor;
277
- border-color: $borderColor;
278
- &:focus {
279
- border-color: darken($borderColor, 10%);
280
- @include box-shadow(0 0 6px lighten($borderColor, 20%));
281
- }
282
- }
283
- // Give a small background color for input-prepend/-append
284
- .input-prepend .add-on,
285
- .input-append .add-on {
286
- color: $textColor;
287
- background-color: $backgroundColor;
288
- border-color: $textColor;
289
- }
290
- }
291
282
  // Warning
292
283
  .control-group.warning {
293
284
  @include formFieldState($warningText, $warningText, $warningBackground);
@@ -345,6 +336,7 @@ select:focus:required:invalid {
345
336
  // ---------
346
337
 
347
338
  .help-block {
339
+ display: block; // account for any element using help-block
348
340
  margin-top: 5px;
349
341
  margin-bottom: 0;
350
342
  color: $grayLight;
@@ -413,6 +405,7 @@ select:focus:required:invalid {
413
405
  @include border-radius(3px 0 0 3px);
414
406
  }
415
407
  .uneditable-input {
408
+ border-left-color: #eee;
416
409
  border-right-color: #ccc;
417
410
  }
418
411
  .add-on {
@@ -462,6 +455,10 @@ select:focus:required:invalid {
462
455
  display: inline-block;
463
456
  margin-bottom: 0;
464
457
  }
458
+ // Re-hide hidden elements due to specifity
459
+ .hide {
460
+ display: none;
461
+ }
465
462
  }
466
463
  .form-search label,
467
464
  .form-inline label,
@@ -478,21 +475,30 @@ select:focus:required:invalid {
478
475
  .form-inline .input-prepend .add-on {
479
476
  vertical-align: middle;
480
477
  }
478
+ // Inline checkbox/radio labels
479
+ .form-search .radio,
480
+ .form-inline .radio,
481
+ .form-search .checkbox,
482
+ .form-inline .checkbox {
483
+ margin-bottom: 0;
484
+ vertical-align: middle;
485
+ }
481
486
 
482
487
  // Margin to space out fieldsets
483
488
  .control-group {
484
489
  margin-bottom: $baseLineHeight / 2;
485
490
  }
486
491
 
492
+ // Legend collapses margin, so next element is responsible for spacing
493
+ legend + .control-group {
494
+ margin-top: $baseLineHeight;
495
+ -webkit-margin-top-collapse: separate;
496
+ }
497
+
487
498
  // Horizontal-specific styles
488
499
  // --------------------------
489
500
 
490
501
  .form-horizontal {
491
- // Legend collapses margin, so we're relegated to padding
492
- legend + .control-group {
493
- margin-top: $baseLineHeight;
494
- -webkit-margin-top-collapse: separate;
495
- }
496
502
  // Increase spacing between groups
497
503
  .control-group {
498
504
  margin-bottom: $baseLineHeight;
@@ -513,4 +519,4 @@ select:focus:required:invalid {
513
519
  .form-actions {
514
520
  padding-left: 160px;
515
521
  }
516
- }
522
+ }
@@ -1,16 +1,32 @@
1
1
  // LABELS
2
2
  // ------
3
3
 
4
+ // Base
4
5
  .label {
5
- padding: 1px 3px 2px;
6
- font-size: $baseFontSize * .75;
6
+ padding: 2px 4px 3px;
7
+ font-size: $baseFontSize * .85;
7
8
  font-weight: bold;
8
9
  color: $white;
9
- text-transform: uppercase;
10
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
10
11
  background-color: $grayLight;
11
12
  @include border-radius(3px);
12
13
  }
13
- .label-important { background-color: $errorText; }
14
- .label-warning { background-color: $orange; }
15
- .label-success { background-color: $successText; }
16
- .label-info { background-color: $infoText; }
14
+
15
+ // Hover state
16
+ .label:hover {
17
+ color: $white;
18
+ text-decoration: none;
19
+ }
20
+
21
+ // Colors
22
+ .label-important { background-color: $errorText; }
23
+ .label-important:hover { background-color: darken($errorText, 10%); }
24
+
25
+ .label-warning { background-color: $orange; }
26
+ .label-warning:hover { background-color: darken($orange, 10%); }
27
+
28
+ .label-success { background-color: $successText; }
29
+ .label-success:hover { background-color: darken($successText, 10%); }
30
+
31
+ .label-info { background-color: $infoText; }
32
+ .label-info:hover { background-color: darken($infoText, 10%); }
@@ -25,7 +25,7 @@
25
25
  // ------------------
26
26
  @mixin tab-focus() {
27
27
  // Default
28
- outline: thin dotted;
28
+ outline: thin dotted #333;
29
29
  // Webkit
30
30
  outline: 5px auto -webkit-focus-ring-color;
31
31
  outline-offset: -2px;
@@ -89,6 +89,15 @@
89
89
  }
90
90
  }
91
91
 
92
+ // Text overflow
93
+ // -------------------------
94
+ // Requires inline-block or block for proper styling
95
+ @mixin text-overflow() {
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ white-space: nowrap;
99
+ }
100
+
92
101
 
93
102
 
94
103
  // FONTS
@@ -127,9 +136,6 @@
127
136
 
128
137
 
129
138
 
130
-
131
-
132
-
133
139
  // GRID SYSTEM
134
140
  // --------------------------------------------------
135
141
 
@@ -167,31 +173,16 @@
167
173
  @include gridSystem-gridColumn($gridGutterWidth);
168
174
  }
169
175
  // Default columns
170
- .span1 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 1); }
171
- .span2 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 2); }
172
- .span3 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 3); }
173
- .span4 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 4); }
174
- .span5 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 5); }
175
- .span6 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 6); }
176
- .span7 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 7); }
177
- .span8 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 8); }
178
- .span9 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 9); }
179
- .span10 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 10); }
180
- .span11 { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 11); }
181
- .span12,
176
+ @for $i from 1 through $gridColumns {
177
+ .span#{$i} { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $i); }
178
+ }
179
+
182
180
  .container { @include gridSystem-columns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 12); }
181
+
183
182
  // Offset column options
184
- .offset1 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 1); }
185
- .offset2 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 2); }
186
- .offset3 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 3); }
187
- .offset4 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 4); }
188
- .offset5 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 5); }
189
- .offset6 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 6); }
190
- .offset7 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 7); }
191
- .offset8 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 8); }
192
- .offset9 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 9); }
193
- .offset10 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 10); }
194
- .offset11 { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, 11); }
183
+ @for $i from 1 through $gridColumns - 1 {
184
+ .offset#{$i} { @include gridSystem-offset($gridColumnWidth, $gridGutterWidth, $i); }
185
+ }
195
186
  }
196
187
 
197
188
  // Fluid grid system
@@ -218,18 +209,9 @@
218
209
  margin-left: 0;
219
210
  }
220
211
  // Default columns
221
- .span1 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 1); }
222
- .span2 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 2); }
223
- .span3 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 3); }
224
- .span4 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 4); }
225
- .span5 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 5); }
226
- .span6 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 6); }
227
- .span7 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 7); }
228
- .span8 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 8); }
229
- .span9 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 9); }
230
- .span10 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 10); }
231
- .span11 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 11); }
232
- .span12 { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, 12); }
212
+ @for $i from 1 through $gridColumns {
213
+ > .span#{$i} { @include fluidGridSystem-columns($fluidGridGutterWidth, $fluidGridColumnWidth, $i); }
214
+ }
233
215
  }
234
216
  }
235
217
 
@@ -244,18 +226,9 @@
244
226
  input,
245
227
  textarea,
246
228
  .uneditable-input {
247
- &.span1 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 1); }
248
- &.span2 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 2); }
249
- &.span3 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 3); }
250
- &.span4 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 4); }
251
- &.span5 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 5); }
252
- &.span6 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 6); }
253
- &.span7 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 7); }
254
- &.span8 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 8); }
255
- &.span9 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 9); }
256
- &.span10 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 10); }
257
- &.span11 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 11); }
258
- &.span12 { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, 12); }
229
+ @for $i from 1 through $gridColumns {
230
+ &.span#{$i} { @include inputGridSystem-inputColumns($gridGutterWidth, $gridColumnWidth, $gridRowWidth, $i); }
231
+ }
259
232
  }
260
233
  }
261
234
 
@@ -264,8 +237,52 @@
264
237
 
265
238
 
266
239
 
240
+ // Make a Grid
241
+ // -------------------------
242
+ // Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
243
+ @mixin makeRow() {
244
+ margin-left: $gridGutterWidth * -1;
245
+ @include clearfix();
246
+ }
247
+ @mixin makeColumn($columns: 1) {
248
+ float: left;
249
+ margin-left: $gridGutterWidth;
250
+ width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1));
251
+ }
252
+
267
253
 
268
254
 
255
+ // Form field states (used in forms.less)
256
+ // --------------------------------------------------
257
+
258
+ // Mixin for form field states
259
+ @mixin formFieldState($textColor: #555, $borderColor: #ccc, $backgroundColor: #f5f5f5) {
260
+ // Set the text color
261
+ > label,
262
+ .help-block,
263
+ .help-inline {
264
+ color: $textColor;
265
+ }
266
+ // Style inputs accordingly
267
+ input,
268
+ select,
269
+ textarea {
270
+ color: $textColor;
271
+ border-color: $borderColor;
272
+ &:focus {
273
+ border-color: darken($borderColor, 10%);
274
+ @include box-shadow(0 0 6px lighten($borderColor, 20%));
275
+ }
276
+ }
277
+ // Give a small background color for input-prepend/-append
278
+ .input-prepend .add-on,
279
+ .input-append .add-on {
280
+ color: $textColor;
281
+ background-color: $backgroundColor;
282
+ border-color: $textColor;
283
+ }
284
+ }
285
+
269
286
 
270
287
 
271
288
  // CSS3 PROPERTIES
@@ -323,12 +340,12 @@
323
340
  -o-transform: translate($x, $y);
324
341
  transform: translate($x, $y);
325
342
  }
326
- @mixin skew($x: 0, $y: 0) {
327
- -webkit-transform: skew($x, $y);
328
- -moz-transform: skew($x, $y);
329
- -ms-transform: skew($x, $y);
330
- -o-transform: skew($x, $y);
331
- transform: skew($x, $y);
343
+ @mixin translate3d($x: 0, $y: 0, $z: 0) {
344
+ -webkit-transform: translate($x, $y, $z);
345
+ -moz-transform: translate($x, $y, $z);
346
+ -ms-transform: translate($x, $y, $z);
347
+ -o-transform: translate($x, $y, $z);
348
+ transform: translate($x, $y, $z);
332
349
  }
333
350
 
334
351
  // Background clipping
@@ -405,27 +422,25 @@
405
422
  // Gradients
406
423
  @mixin gradient-horizontal($startColor: #555, $endColor: #333) {
407
424
  background-color: $endColor;
408
- background-image: -khtml-gradient(linear, left top, right top, from($startColor), to($endColor)); // Konqueror
409
425
  background-image: -moz-linear-gradient(left, $startColor, $endColor); // FF 3.6+
410
426
  background-image: -ms-linear-gradient(left, $startColor, $endColor); // IE10
411
- background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, $startColor), color-stop(100%, $endColor)); // Safari 4+, Chrome 2+
427
+ background-image: -webkit-gradient(linear, 0 0, 100% 0, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
412
428
  background-image: -webkit-linear-gradient(left, $startColor, $endColor); // Safari 5.1+, Chrome 10+
413
429
  background-image: -o-linear-gradient(left, $startColor, $endColor); // Opera 11.10
414
430
  background-image: linear-gradient(left, $startColor, $endColor); // Le standard
415
431
  background-repeat: repeat-x;
416
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=1); // IE9 and down
432
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=1), $startColor, $endColor; // IE9 and down
417
433
  }
418
434
  @mixin gradient-vertical($startColor: #555, $endColor: #333) {
419
- background-color: $endColor;
420
- background-image: -khtml-gradient(linear, left top, left bottom, from($startColor), to($endColor)); // Konqueror
435
+ background-color: mix($startColor, $endColor, 60%);
421
436
  background-image: -moz-linear-gradient(top, $startColor, $endColor); // FF 3.6+
422
437
  background-image: -ms-linear-gradient(top, $startColor, $endColor); // IE10
423
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, $startColor), color-stop(100%, $endColor)); // Safari 4+, Chrome 2+
438
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
424
439
  background-image: -webkit-linear-gradient(top, $startColor, $endColor); // Safari 5.1+, Chrome 10+
425
440
  background-image: -o-linear-gradient(top, $startColor, $endColor); // Opera 11.10
426
- //background-image: linear-gradient(top left, $startColor, $endColor); // The standard
441
+ background-image: linear-gradient(top, $startColor, $endColor); // The standard
427
442
  background-repeat: repeat-x;
428
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=0); // IE9 and down
443
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=0),$startColor,$endColor; // IE9 and down
429
444
  }
430
445
  @mixin gradient-directional($startColor: #555, $endColor: #333, $deg: 45deg) {
431
446
  background-color: $endColor;
@@ -437,7 +452,7 @@
437
452
  background-image: linear-gradient($deg, $startColor, $endColor); // The standard
438
453
  }
439
454
  @mixin gradient-vertical-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) {
440
- background-color: $endColor;
455
+ background-color: mix($midColor, $endColor, 80%);
441
456
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), color-stop($colorStop, $midColor), to($endColor));
442
457
  background-image: -webkit-linear-gradient($startColor, $midColor $colorStop, $endColor);
443
458
  background-image: -moz-linear-gradient(top, $startColor, $midColor $colorStop, $endColor);
@@ -445,10 +460,10 @@
445
460
  background-image: -o-linear-gradient($startColor, $midColor $colorStop, $endColor);
446
461
  background-image: linear-gradient($startColor, $midColor $colorStop, $endColor);
447
462
  background-repeat: no-repeat;
448
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=0); // IE9 and down, gets no color-stop at all the proper fallback
463
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=0), $startColor, $endColor; // IE9 and down, gets no color-stop at all the proper fallback
449
464
  }
450
465
  @mixin gradient-radial($centerColor: #555, $outsideColor: #333) {
451
- background-color: $outsideColor;
466
+ background-color: $outerColor;
452
467
  background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($centerColor), to($outsideColor));
453
468
  background-image: -webkit-radial-gradient(circle, $centerColor, $outsideColor);
454
469
  background-image: -moz-radial-gradient(circle, $centerColor, $outsideColor);
@@ -1,6 +1,7 @@
1
1
  // MODALS
2
2
  // ------
3
3
 
4
+ // Recalculate z-index where appropriate
4
5
  .modal-open {
5
6
  .dropdown-menu { z-index: $zindexDropdown + $zindexModal; }
6
7
  .dropdown.open { *z-index: $zindexDropdown + $zindexModal; }
@@ -8,6 +9,7 @@
8
9
  .tooltip { z-index: $zindexTooltip + $zindexModal; }
9
10
  }
10
11
 
12
+ // Background
11
13
  .modal-backdrop {
12
14
  position: fixed;
13
15
  top: 0;
@@ -25,6 +27,7 @@
25
27
  @include opacity(80);
26
28
  }
27
29
 
30
+ // Base modal
28
31
  .modal {
29
32
  position: fixed;
30
33
  top: 50%;
@@ -53,9 +56,17 @@
53
56
  // Close icon
54
57
  .close { margin-top: 2px; }
55
58
  }
59
+
60
+ // Body (where all modal content resises)
56
61
  .modal-body {
57
62
  padding: 15px;
58
63
  }
64
+ // Remove bottom margin if need be
65
+ .modal-body .modal-form {
66
+ margin-bottom: 0;
67
+ }
68
+
69
+ // Footer (for actions)
59
70
  .modal-footer {
60
71
  padding: 14px 15px 15px;
61
72
  margin-bottom: 0;
@@ -81,7 +81,7 @@
81
81
  margin-top: 5px; // make buttons vertically centered in navbar
82
82
  }
83
83
  .btn-group .btn {
84
- margin-top: 0;
84
+ margin-top: 0; // then undo the margin here so we don't accidentally double it
85
85
  }
86
86
  }
87
87
 
@@ -104,6 +104,14 @@
104
104
  input[type="radio"] {
105
105
  margin-top: 3px;
106
106
  }
107
+ .input-append,
108
+ .input-prepend {
109
+ margin-top: 6px;
110
+ white-space: nowrap; // preven two items from separating within a .navbar-form that has .pull-left
111
+ input {
112
+ margin-top: 0; // remove the margin on top since it's on the parent
113
+ }
114
+ }
107
115
  }
108
116
 
109
117
  // Navbar search
@@ -133,7 +141,7 @@
133
141
  background-color: $grayLight;
134
142
  background-color: rgba(255,255,255,.5);
135
143
  }
136
- // Focus states (we use .focused since IE8 and down doesn't support :focus)
144
+ // Focus states (we use .focused since IE7-8 and down doesn't support :focus)
137
145
  &:focus,
138
146
  &.focused {
139
147
  padding: 5px 10px;
@@ -194,7 +202,7 @@
194
202
  }
195
203
  // Hover
196
204
  .navbar .nav > li > a:hover {
197
- background-color: transparent;
205
+ background-color: $navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover from .active
198
206
  color: $navbarLinkColorHover;
199
207
  text-decoration: none;
200
208
  }
@@ -21,6 +21,21 @@
21
21
  background-color: $grayLighter;
22
22
  }
23
23
 
24
+ // Nav headers (for dropdowns and lists)
25
+ .nav .nav-header {
26
+ display: block;
27
+ padding: 3px 15px;
28
+ font-size: 11px;
29
+ font-weight: bold;
30
+ line-height: $baseLineHeight;
31
+ color: $grayLight;
32
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
33
+ text-transform: uppercase;
34
+ }
35
+ // Space them out when they follow another list item (link)
36
+ .nav li + .nav-header {
37
+ margin-top: 9px;
38
+ }
24
39
 
25
40
 
26
41
  // NAV LIST
@@ -33,28 +48,20 @@
33
48
  }
34
49
  .nav-list > li > a,
35
50
  .nav-list .nav-header {
36
- display: block;
37
- padding: 3px 15px;
38
51
  margin-left: -15px;
39
52
  margin-right: -15px;
40
53
  text-shadow: 0 1px 0 rgba(255,255,255,.5);
41
54
  }
42
- .nav-list .nav-header {
43
- font-size: 11px;
44
- font-weight: bold;
45
- line-height: $baseLineHeight;
46
- color: $grayLight;
47
- text-transform: uppercase;
48
- }
49
- .nav-list > li + .nav-header {
50
- margin-top: 9px;
55
+ .nav-list > li > a {
56
+ padding: 3px 15px;
51
57
  }
52
- .nav-list .active > a {
58
+ .nav-list .active > a,
59
+ .nav-list .active > a:hover {
53
60
  color: $white;
54
61
  text-shadow: 0 -1px 0 rgba(0,0,0,.2);
55
62
  background-color: $linkColor;
56
63
  }
57
- .nav-list .icon {
64
+ .nav-list [class^="icon-"] {
58
65
  margin-right: 2px;
59
66
  }
60
67
 
@@ -204,7 +211,7 @@
204
211
  // -------------------------
205
212
  .nav-tabs .active .dropdown-toggle .caret,
206
213
  .nav-pills .active .dropdown-toggle .caret {
207
- border-top-color: #333;
214
+ border-top-color: $grayDark;
208
215
  }
209
216
 
210
217
  // Active:hover dropdown links
@@ -232,7 +239,7 @@
232
239
 
233
240
  // Dropdowns in stacked tabs
234
241
  .tabs-stacked .open > a:hover {
235
- border-color: #999;
242
+ border-color: $grayLight;
236
243
  }
237
244
 
238
245
 
@@ -248,6 +255,9 @@
248
255
  .tabbable {
249
256
  @include clearfix();
250
257
  }
258
+ .tab-content {
259
+ overflow: hidden; // prevent content from running below tabs
260
+ }
251
261
 
252
262
  // Remove border on bottom, left, right
253
263
  .tabs-below .nav-tabs,
@@ -284,8 +294,8 @@
284
294
  border-top-color: #ddd;
285
295
  }
286
296
  }
287
- .tabs-below .tabs .active > a,
288
- .tabs-below .tabs .active > a:hover {
297
+ .tabs-below .nav-tabs .active > a,
298
+ .tabs-below .nav-tabs .active > a:hover {
289
299
  border-color: transparent #ddd #ddd #ddd;
290
300
  }
291
301