spiderfw 0.6.26.pre1 → 0.6.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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