kulesa-sidekiq 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/.gitignore +6 -0
  2. data/.rvmrc +4 -0
  3. data/COMM-LICENSE +83 -0
  4. data/Changes.md +207 -0
  5. data/Gemfile +12 -0
  6. data/LICENSE +22 -0
  7. data/README.md +61 -0
  8. data/Rakefile +9 -0
  9. data/bin/client +7 -0
  10. data/bin/sidekiq +14 -0
  11. data/bin/sidekiqctl +74 -0
  12. data/config.ru +18 -0
  13. data/examples/chef/cookbooks/sidekiq/README.rdoc +11 -0
  14. data/examples/chef/cookbooks/sidekiq/recipes/default.rb +55 -0
  15. data/examples/chef/cookbooks/sidekiq/templates/default/monitrc.conf.erb +8 -0
  16. data/examples/chef/cookbooks/sidekiq/templates/default/sidekiq.erb +219 -0
  17. data/examples/chef/cookbooks/sidekiq/templates/default/sidekiq.yml.erb +22 -0
  18. data/examples/clockwork.rb +44 -0
  19. data/examples/config.yml +10 -0
  20. data/examples/monitrc.conf +6 -0
  21. data/examples/por.rb +27 -0
  22. data/examples/scheduling.rb +37 -0
  23. data/examples/sinkiq.rb +59 -0
  24. data/examples/web-ui.png +0 -0
  25. data/lib/sidekiq.rb +98 -0
  26. data/lib/sidekiq/capistrano.rb +35 -0
  27. data/lib/sidekiq/cli.rb +214 -0
  28. data/lib/sidekiq/client.rb +72 -0
  29. data/lib/sidekiq/extensions/action_mailer.rb +26 -0
  30. data/lib/sidekiq/extensions/active_record.rb +27 -0
  31. data/lib/sidekiq/extensions/generic_proxy.rb +21 -0
  32. data/lib/sidekiq/fetch.rb +76 -0
  33. data/lib/sidekiq/logging.rb +46 -0
  34. data/lib/sidekiq/manager.rb +163 -0
  35. data/lib/sidekiq/middleware/chain.rb +96 -0
  36. data/lib/sidekiq/middleware/client/unique_jobs.rb +36 -0
  37. data/lib/sidekiq/middleware/server/active_record.rb +13 -0
  38. data/lib/sidekiq/middleware/server/exception_handler.rb +38 -0
  39. data/lib/sidekiq/middleware/server/failure_jobs.rb +25 -0
  40. data/lib/sidekiq/middleware/server/logging.rb +31 -0
  41. data/lib/sidekiq/middleware/server/retry_jobs.rb +69 -0
  42. data/lib/sidekiq/middleware/server/timeout.rb +21 -0
  43. data/lib/sidekiq/middleware/server/unique_jobs.rb +17 -0
  44. data/lib/sidekiq/processor.rb +92 -0
  45. data/lib/sidekiq/rails.rb +21 -0
  46. data/lib/sidekiq/redis_connection.rb +27 -0
  47. data/lib/sidekiq/retry.rb +59 -0
  48. data/lib/sidekiq/testing.rb +44 -0
  49. data/lib/sidekiq/testing/inline.rb +37 -0
  50. data/lib/sidekiq/util.rb +40 -0
  51. data/lib/sidekiq/version.rb +3 -0
  52. data/lib/sidekiq/web.rb +185 -0
  53. data/lib/sidekiq/worker.rb +62 -0
  54. data/lib/sidekiq/yaml_patch.rb +21 -0
  55. data/myapp/.gitignore +15 -0
  56. data/myapp/Capfile +5 -0
  57. data/myapp/Gemfile +19 -0
  58. data/myapp/Rakefile +7 -0
  59. data/myapp/app/controllers/application_controller.rb +3 -0
  60. data/myapp/app/controllers/work_controller.rb +38 -0
  61. data/myapp/app/helpers/application_helper.rb +2 -0
  62. data/myapp/app/mailers/.gitkeep +0 -0
  63. data/myapp/app/mailers/user_mailer.rb +9 -0
  64. data/myapp/app/models/.gitkeep +0 -0
  65. data/myapp/app/models/post.rb +5 -0
  66. data/myapp/app/views/layouts/application.html.erb +14 -0
  67. data/myapp/app/views/user_mailer/greetings.html.erb +3 -0
  68. data/myapp/app/views/work/index.html.erb +1 -0
  69. data/myapp/app/workers/hard_worker.rb +10 -0
  70. data/myapp/config.ru +4 -0
  71. data/myapp/config/application.rb +59 -0
  72. data/myapp/config/boot.rb +6 -0
  73. data/myapp/config/database.yml +25 -0
  74. data/myapp/config/deploy.rb +15 -0
  75. data/myapp/config/environment.rb +5 -0
  76. data/myapp/config/environments/development.rb +38 -0
  77. data/myapp/config/environments/production.rb +67 -0
  78. data/myapp/config/environments/test.rb +37 -0
  79. data/myapp/config/initializers/backtrace_silencers.rb +7 -0
  80. data/myapp/config/initializers/inflections.rb +15 -0
  81. data/myapp/config/initializers/mime_types.rb +5 -0
  82. data/myapp/config/initializers/secret_token.rb +7 -0
  83. data/myapp/config/initializers/session_store.rb +8 -0
  84. data/myapp/config/initializers/sidekiq.rb +6 -0
  85. data/myapp/config/initializers/wrap_parameters.rb +14 -0
  86. data/myapp/config/locales/en.yml +5 -0
  87. data/myapp/config/routes.rb +10 -0
  88. data/myapp/db/migrate/20120123214055_create_posts.rb +10 -0
  89. data/myapp/db/seeds.rb +7 -0
  90. data/myapp/lib/assets/.gitkeep +0 -0
  91. data/myapp/lib/tasks/.gitkeep +0 -0
  92. data/myapp/log/.gitkeep +0 -0
  93. data/myapp/script/rails +6 -0
  94. data/sidekiq.gemspec +27 -0
  95. data/test/config.yml +9 -0
  96. data/test/fake_env.rb +0 -0
  97. data/test/helper.rb +16 -0
  98. data/test/test_cli.rb +168 -0
  99. data/test/test_client.rb +119 -0
  100. data/test/test_extensions.rb +69 -0
  101. data/test/test_manager.rb +51 -0
  102. data/test/test_middleware.rb +92 -0
  103. data/test/test_processor.rb +32 -0
  104. data/test/test_retry.rb +125 -0
  105. data/test/test_stats.rb +68 -0
  106. data/test/test_testing.rb +97 -0
  107. data/test/test_testing_inline.rb +75 -0
  108. data/test/test_web.rb +122 -0
  109. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  110. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  111. data/web/assets/javascripts/application.js +20 -0
  112. data/web/assets/javascripts/vendor/bootstrap.js +12 -0
  113. data/web/assets/javascripts/vendor/bootstrap/bootstrap-alert.js +91 -0
  114. data/web/assets/javascripts/vendor/bootstrap/bootstrap-button.js +98 -0
  115. data/web/assets/javascripts/vendor/bootstrap/bootstrap-carousel.js +154 -0
  116. data/web/assets/javascripts/vendor/bootstrap/bootstrap-collapse.js +136 -0
  117. data/web/assets/javascripts/vendor/bootstrap/bootstrap-dropdown.js +92 -0
  118. data/web/assets/javascripts/vendor/bootstrap/bootstrap-modal.js +210 -0
  119. data/web/assets/javascripts/vendor/bootstrap/bootstrap-popover.js +95 -0
  120. data/web/assets/javascripts/vendor/bootstrap/bootstrap-scrollspy.js +125 -0
  121. data/web/assets/javascripts/vendor/bootstrap/bootstrap-tab.js +130 -0
  122. data/web/assets/javascripts/vendor/bootstrap/bootstrap-tooltip.js +270 -0
  123. data/web/assets/javascripts/vendor/bootstrap/bootstrap-transition.js +51 -0
  124. data/web/assets/javascripts/vendor/bootstrap/bootstrap-typeahead.js +271 -0
  125. data/web/assets/javascripts/vendor/jquery.js +9266 -0
  126. data/web/assets/javascripts/vendor/jquery.timeago.js +148 -0
  127. data/web/assets/stylesheets/application.css +27 -0
  128. data/web/assets/stylesheets/vendor/bootstrap-responsive.css +567 -0
  129. data/web/assets/stylesheets/vendor/bootstrap.css +3365 -0
  130. data/web/views/index.slim +48 -0
  131. data/web/views/layout.slim +26 -0
  132. data/web/views/queue.slim +11 -0
  133. data/web/views/retries.slim +29 -0
  134. data/web/views/retry.slim +52 -0
  135. metadata +371 -0
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Timeago is a jQuery plugin that makes it easy to support automatically
3
+ * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
4
+ *
5
+ * @name timeago
6
+ * @version 0.11.1
7
+ * @requires jQuery v1.2.3+
8
+ * @author Ryan McGeary
9
+ * @license MIT License - http://www.opensource.org/licenses/mit-license.php
10
+ *
11
+ * For usage and examples, visit:
12
+ * http://timeago.yarp.com/
13
+ *
14
+ * Copyright (c) 2008-2011, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org)
15
+ */
16
+ (function($) {
17
+ $.timeago = function(timestamp) {
18
+ if (timestamp instanceof Date) {
19
+ return inWords(timestamp);
20
+ } else if (typeof timestamp === "string") {
21
+ return inWords($.timeago.parse(timestamp));
22
+ } else {
23
+ return inWords($.timeago.datetime(timestamp));
24
+ }
25
+ };
26
+ var $t = $.timeago;
27
+
28
+ $.extend($.timeago, {
29
+ settings: {
30
+ refreshMillis: 60000,
31
+ allowFuture: false,
32
+ strings: {
33
+ prefixAgo: null,
34
+ prefixFromNow: null,
35
+ suffixAgo: "ago",
36
+ suffixFromNow: "from now",
37
+ seconds: "less than a minute",
38
+ minute: "about a minute",
39
+ minutes: "%d minutes",
40
+ hour: "about an hour",
41
+ hours: "about %d hours",
42
+ day: "a day",
43
+ days: "%d days",
44
+ month: "about a month",
45
+ months: "%d months",
46
+ year: "about a year",
47
+ years: "%d years",
48
+ wordSeparator: " ",
49
+ numbers: []
50
+ }
51
+ },
52
+ inWords: function(distanceMillis) {
53
+ var $l = this.settings.strings;
54
+ var prefix = $l.prefixAgo;
55
+ var suffix = $l.suffixAgo;
56
+ if (this.settings.allowFuture) {
57
+ if (distanceMillis < 0) {
58
+ prefix = $l.prefixFromNow;
59
+ suffix = $l.suffixFromNow;
60
+ }
61
+ }
62
+
63
+ var seconds = Math.abs(distanceMillis) / 1000;
64
+ var minutes = seconds / 60;
65
+ var hours = minutes / 60;
66
+ var days = hours / 24;
67
+ var years = days / 365;
68
+
69
+ function substitute(stringOrFunction, number) {
70
+ var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
71
+ var value = ($l.numbers && $l.numbers[number]) || number;
72
+ return string.replace(/%d/i, value);
73
+ }
74
+
75
+ var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
76
+ seconds < 90 && substitute($l.minute, 1) ||
77
+ minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
78
+ minutes < 90 && substitute($l.hour, 1) ||
79
+ hours < 24 && substitute($l.hours, Math.round(hours)) ||
80
+ hours < 42 && substitute($l.day, 1) ||
81
+ days < 30 && substitute($l.days, Math.round(days)) ||
82
+ days < 45 && substitute($l.month, 1) ||
83
+ days < 365 && substitute($l.months, Math.round(days / 30)) ||
84
+ years < 1.5 && substitute($l.year, 1) ||
85
+ substitute($l.years, Math.round(years));
86
+
87
+ var separator = $l.wordSeparator === undefined ? " " : $l.wordSeparator;
88
+ return $.trim([prefix, words, suffix].join(separator));
89
+ },
90
+ parse: function(iso8601) {
91
+ var s = $.trim(iso8601);
92
+ s = s.replace(/\.\d\d\d+/,""); // remove milliseconds
93
+ s = s.replace(/-/,"/").replace(/-/,"/");
94
+ s = s.replace(/T/," ").replace(/Z/," UTC");
95
+ s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
96
+ return new Date(s);
97
+ },
98
+ datetime: function(elem) {
99
+ // jQuery's `is()` doesn't play well with HTML5 in IE
100
+ var isTime = $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
101
+ var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title");
102
+ return $t.parse(iso8601);
103
+ }
104
+ });
105
+
106
+ $.fn.timeago = function() {
107
+ var self = this;
108
+ self.each(refresh);
109
+
110
+ var $s = $t.settings;
111
+ if ($s.refreshMillis > 0) {
112
+ setInterval(function() { self.each(refresh); }, $s.refreshMillis);
113
+ }
114
+ return self;
115
+ };
116
+
117
+ function refresh() {
118
+ var data = prepareData(this);
119
+ if (!isNaN(data.datetime)) {
120
+ $(this).text(inWords(data.datetime));
121
+ }
122
+ return this;
123
+ }
124
+
125
+ function prepareData(element) {
126
+ element = $(element);
127
+ if (!element.data("timeago")) {
128
+ element.data("timeago", { datetime: $t.datetime(element) });
129
+ var text = $.trim(element.text());
130
+ if (text.length > 0) {
131
+ element.attr("title", text);
132
+ }
133
+ }
134
+ return element.data("timeago");
135
+ }
136
+
137
+ function inWords(date) {
138
+ return $t.inWords(distance(date));
139
+ }
140
+
141
+ function distance(date) {
142
+ return (new Date().getTime() - date.getTime());
143
+ }
144
+
145
+ // fix for IE6 suckage
146
+ document.createElement("abbr");
147
+ document.createElement("time");
148
+ }(jQuery));
@@ -0,0 +1,27 @@
1
+ /*
2
+ *= require vendor/bootstrap
3
+ *= require vendor/bootstrap-responsive
4
+ *= require_self
5
+ */
6
+ body {
7
+ position: relative;
8
+ padding-top: 90px;
9
+ }
10
+
11
+ td form {
12
+ margin: 0;
13
+ }
14
+
15
+ td form .btn {
16
+ margin: 0;
17
+ }
18
+
19
+ code {
20
+ padding: 0;
21
+ border: 0;
22
+ background-color: inherit;
23
+ }
24
+
25
+ .hero-unit {
26
+ padding: 30px;
27
+ }
@@ -0,0 +1,567 @@
1
+ /*!
2
+ * Bootstrap Responsive v2.0.0
3
+ *
4
+ * Copyright 2012 Twitter, Inc
5
+ * Licensed under the Apache License v2.0
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
9
+ */
10
+ .hidden {
11
+ display: none;
12
+ visibility: hidden;
13
+ }
14
+ @media (max-width: 480px) {
15
+ .nav-collapse {
16
+ -webkit-transform: translate3d(0, 0, 0);
17
+ }
18
+ .page-header h1 small {
19
+ display: block;
20
+ line-height: 18px;
21
+ }
22
+ input[class*="span"],
23
+ select[class*="span"],
24
+ textarea[class*="span"],
25
+ .uneditable-input {
26
+ display: block;
27
+ width: 100%;
28
+ height: 28px;
29
+ /* Make inputs at least the height of their button counterpart */
30
+
31
+ /* Makes inputs behave like true block-level elements */
32
+
33
+ -webkit-box-sizing: border-box;
34
+ /* Older Webkit */
35
+
36
+ -moz-box-sizing: border-box;
37
+ /* Older FF */
38
+
39
+ -ms-box-sizing: border-box;
40
+ /* IE8 */
41
+
42
+ box-sizing: border-box;
43
+ /* CSS3 spec*/
44
+
45
+ }
46
+ .input-prepend input[class*="span"], .input-append input[class*="span"] {
47
+ width: auto;
48
+ }
49
+ input[type="checkbox"], input[type="radio"] {
50
+ border: 1px solid #ccc;
51
+ }
52
+ .form-horizontal .control-group > label {
53
+ float: none;
54
+ width: auto;
55
+ padding-top: 0;
56
+ text-align: left;
57
+ }
58
+ .form-horizontal .controls {
59
+ margin-left: 0;
60
+ }
61
+ .form-horizontal .control-list {
62
+ padding-top: 0;
63
+ }
64
+ .form-horizontal .form-actions {
65
+ padding-left: 10px;
66
+ padding-right: 10px;
67
+ }
68
+ .modal {
69
+ position: absolute;
70
+ top: 10px;
71
+ left: 10px;
72
+ right: 10px;
73
+ width: auto;
74
+ margin: 0;
75
+ }
76
+ .modal.fade.in {
77
+ top: auto;
78
+ }
79
+ .modal-header .close {
80
+ padding: 10px;
81
+ margin: -10px;
82
+ }
83
+ .carousel-caption {
84
+ position: static;
85
+ }
86
+ }
87
+ @media (max-width: 768px) {
88
+ .container {
89
+ width: auto;
90
+ padding: 0 20px;
91
+ }
92
+ .row-fluid {
93
+ width: 100%;
94
+ }
95
+ .row {
96
+ margin-left: 0;
97
+ }
98
+ .row > [class*="span"], .row-fluid > [class*="span"] {
99
+ float: none;
100
+ display: block;
101
+ width: auto;
102
+ margin: 0;
103
+ }
104
+ }
105
+ @media (min-width: 768px) and (max-width: 980px) {
106
+ .row {
107
+ margin-left: -20px;
108
+ *zoom: 1;
109
+ }
110
+ .row:before, .row:after {
111
+ display: table;
112
+ content: "";
113
+ }
114
+ .row:after {
115
+ clear: both;
116
+ }
117
+ [class*="span"] {
118
+ float: left;
119
+ margin-left: 20px;
120
+ }
121
+ .span1 {
122
+ width: 42px;
123
+ }
124
+ .span2 {
125
+ width: 104px;
126
+ }
127
+ .span3 {
128
+ width: 166px;
129
+ }
130
+ .span4 {
131
+ width: 228px;
132
+ }
133
+ .span5 {
134
+ width: 290px;
135
+ }
136
+ .span6 {
137
+ width: 352px;
138
+ }
139
+ .span7 {
140
+ width: 414px;
141
+ }
142
+ .span8 {
143
+ width: 476px;
144
+ }
145
+ .span9 {
146
+ width: 538px;
147
+ }
148
+ .span10 {
149
+ width: 600px;
150
+ }
151
+ .span11 {
152
+ width: 662px;
153
+ }
154
+ .span12, .container {
155
+ width: 724px;
156
+ }
157
+ .offset1 {
158
+ margin-left: 82px;
159
+ }
160
+ .offset2 {
161
+ margin-left: 144px;
162
+ }
163
+ .offset3 {
164
+ margin-left: 206px;
165
+ }
166
+ .offset4 {
167
+ margin-left: 268px;
168
+ }
169
+ .offset5 {
170
+ margin-left: 330px;
171
+ }
172
+ .offset6 {
173
+ margin-left: 392px;
174
+ }
175
+ .offset7 {
176
+ margin-left: 454px;
177
+ }
178
+ .offset8 {
179
+ margin-left: 516px;
180
+ }
181
+ .offset9 {
182
+ margin-left: 578px;
183
+ }
184
+ .offset10 {
185
+ margin-left: 640px;
186
+ }
187
+ .offset11 {
188
+ margin-left: 702px;
189
+ }
190
+ .row-fluid {
191
+ width: 100%;
192
+ *zoom: 1;
193
+ }
194
+ .row-fluid:before, .row-fluid:after {
195
+ display: table;
196
+ content: "";
197
+ }
198
+ .row-fluid:after {
199
+ clear: both;
200
+ }
201
+ .row-fluid > [class*="span"] {
202
+ float: left;
203
+ margin-left: 2.762430939%;
204
+ }
205
+ .row-fluid > [class*="span"]:first-child {
206
+ margin-left: 0;
207
+ }
208
+ .row-fluid .span1 {
209
+ width: 5.801104972%;
210
+ }
211
+ .row-fluid .span2 {
212
+ width: 14.364640883%;
213
+ }
214
+ .row-fluid .span3 {
215
+ width: 22.928176794%;
216
+ }
217
+ .row-fluid .span4 {
218
+ width: 31.491712705%;
219
+ }
220
+ .row-fluid .span5 {
221
+ width: 40.055248616%;
222
+ }
223
+ .row-fluid .span6 {
224
+ width: 48.618784527%;
225
+ }
226
+ .row-fluid .span7 {
227
+ width: 57.182320438000005%;
228
+ }
229
+ .row-fluid .span8 {
230
+ width: 65.74585634900001%;
231
+ }
232
+ .row-fluid .span9 {
233
+ width: 74.30939226%;
234
+ }
235
+ .row-fluid .span10 {
236
+ width: 82.87292817100001%;
237
+ }
238
+ .row-fluid .span11 {
239
+ width: 91.436464082%;
240
+ }
241
+ .row-fluid .span12 {
242
+ width: 99.999999993%;
243
+ }
244
+ input.span1, textarea.span1, .uneditable-input.span1 {
245
+ width: 32px;
246
+ }
247
+ input.span2, textarea.span2, .uneditable-input.span2 {
248
+ width: 94px;
249
+ }
250
+ input.span3, textarea.span3, .uneditable-input.span3 {
251
+ width: 156px;
252
+ }
253
+ input.span4, textarea.span4, .uneditable-input.span4 {
254
+ width: 218px;
255
+ }
256
+ input.span5, textarea.span5, .uneditable-input.span5 {
257
+ width: 280px;
258
+ }
259
+ input.span6, textarea.span6, .uneditable-input.span6 {
260
+ width: 342px;
261
+ }
262
+ input.span7, textarea.span7, .uneditable-input.span7 {
263
+ width: 404px;
264
+ }
265
+ input.span8, textarea.span8, .uneditable-input.span8 {
266
+ width: 466px;
267
+ }
268
+ input.span9, textarea.span9, .uneditable-input.span9 {
269
+ width: 528px;
270
+ }
271
+ input.span10, textarea.span10, .uneditable-input.span10 {
272
+ width: 590px;
273
+ }
274
+ input.span11, textarea.span11, .uneditable-input.span11 {
275
+ width: 652px;
276
+ }
277
+ input.span12, textarea.span12, .uneditable-input.span12 {
278
+ width: 714px;
279
+ }
280
+ }
281
+ @media (max-width: 980px) {
282
+ body {
283
+ padding-top: 0;
284
+ }
285
+ .navbar-fixed-top {
286
+ position: static;
287
+ margin-bottom: 18px;
288
+ }
289
+ .navbar-fixed-top .navbar-inner {
290
+ padding: 5px;
291
+ }
292
+ .navbar .container {
293
+ width: auto;
294
+ padding: 0;
295
+ }
296
+ .navbar .brand {
297
+ padding-left: 10px;
298
+ padding-right: 10px;
299
+ margin: 0 0 0 -5px;
300
+ }
301
+ .navbar .nav-collapse {
302
+ clear: left;
303
+ }
304
+ .navbar .nav {
305
+ float: none;
306
+ margin: 0 0 9px;
307
+ }
308
+ .navbar .nav > li {
309
+ float: none;
310
+ }
311
+ .navbar .nav > li > a {
312
+ margin-bottom: 2px;
313
+ }
314
+ .navbar .nav > .divider-vertical {
315
+ display: none;
316
+ }
317
+ .navbar .nav > li > a, .navbar .dropdown-menu a {
318
+ padding: 6px 15px;
319
+ font-weight: bold;
320
+ color: #999999;
321
+ -webkit-border-radius: 3px;
322
+ -moz-border-radius: 3px;
323
+ border-radius: 3px;
324
+ }
325
+ .navbar .dropdown-menu li + li a {
326
+ margin-bottom: 2px;
327
+ }
328
+ .navbar .nav > li > a:hover, .navbar .dropdown-menu a:hover {
329
+ background-color: #222222;
330
+ }
331
+ .navbar .dropdown-menu {
332
+ position: static;
333
+ top: auto;
334
+ left: auto;
335
+ float: none;
336
+ display: block;
337
+ max-width: none;
338
+ margin: 0 15px;
339
+ padding: 0;
340
+ background-color: transparent;
341
+ border: none;
342
+ -webkit-border-radius: 0;
343
+ -moz-border-radius: 0;
344
+ border-radius: 0;
345
+ -webkit-box-shadow: none;
346
+ -moz-box-shadow: none;
347
+ box-shadow: none;
348
+ }
349
+ .navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
350
+ display: none;
351
+ }
352
+ .navbar .dropdown-menu .divider {
353
+ display: none;
354
+ }
355
+ .navbar-form, .navbar-search {
356
+ float: none;
357
+ padding: 9px 15px;
358
+ margin: 9px 0;
359
+ border-top: 1px solid #222222;
360
+ border-bottom: 1px solid #222222;
361
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
362
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
363
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
364
+ }
365
+ .navbar .nav.pull-right {
366
+ float: none;
367
+ margin-left: 0;
368
+ }
369
+ .navbar-static .navbar-inner {
370
+ padding-left: 10px;
371
+ padding-right: 10px;
372
+ }
373
+ .btn-navbar {
374
+ display: block;
375
+ }
376
+ .nav-collapse {
377
+ overflow: hidden;
378
+ height: 0;
379
+ }
380
+ }
381
+ @media (min-width: 980px) {
382
+ .nav-collapse.collapse {
383
+ height: auto !important;
384
+ }
385
+ }
386
+ @media (min-width: 1200px) {
387
+ .row {
388
+ margin-left: -30px;
389
+ *zoom: 1;
390
+ }
391
+ .row:before, .row:after {
392
+ display: table;
393
+ content: "";
394
+ }
395
+ .row:after {
396
+ clear: both;
397
+ }
398
+ [class*="span"] {
399
+ float: left;
400
+ margin-left: 30px;
401
+ }
402
+ .span1 {
403
+ width: 70px;
404
+ }
405
+ .span2 {
406
+ width: 170px;
407
+ }
408
+ .span3 {
409
+ width: 270px;
410
+ }
411
+ .span4 {
412
+ width: 370px;
413
+ }
414
+ .span5 {
415
+ width: 470px;
416
+ }
417
+ .span6 {
418
+ width: 570px;
419
+ }
420
+ .span7 {
421
+ width: 670px;
422
+ }
423
+ .span8 {
424
+ width: 770px;
425
+ }
426
+ .span9 {
427
+ width: 870px;
428
+ }
429
+ .span10 {
430
+ width: 970px;
431
+ }
432
+ .span11 {
433
+ width: 1070px;
434
+ }
435
+ .span12, .container {
436
+ width: 1170px;
437
+ }
438
+ .offset1 {
439
+ margin-left: 130px;
440
+ }
441
+ .offset2 {
442
+ margin-left: 230px;
443
+ }
444
+ .offset3 {
445
+ margin-left: 330px;
446
+ }
447
+ .offset4 {
448
+ margin-left: 430px;
449
+ }
450
+ .offset5 {
451
+ margin-left: 530px;
452
+ }
453
+ .offset6 {
454
+ margin-left: 630px;
455
+ }
456
+ .offset7 {
457
+ margin-left: 730px;
458
+ }
459
+ .offset8 {
460
+ margin-left: 830px;
461
+ }
462
+ .offset9 {
463
+ margin-left: 930px;
464
+ }
465
+ .offset10 {
466
+ margin-left: 1030px;
467
+ }
468
+ .offset11 {
469
+ margin-left: 1130px;
470
+ }
471
+ .row-fluid {
472
+ width: 100%;
473
+ *zoom: 1;
474
+ }
475
+ .row-fluid:before, .row-fluid:after {
476
+ display: table;
477
+ content: "";
478
+ }
479
+ .row-fluid:after {
480
+ clear: both;
481
+ }
482
+ .row-fluid > [class*="span"] {
483
+ float: left;
484
+ margin-left: 2.564102564%;
485
+ }
486
+ .row-fluid > [class*="span"]:first-child {
487
+ margin-left: 0;
488
+ }
489
+ .row-fluid .span1 {
490
+ width: 5.982905983%;
491
+ }
492
+ .row-fluid .span2 {
493
+ width: 14.529914530000001%;
494
+ }
495
+ .row-fluid .span3 {
496
+ width: 23.076923077%;
497
+ }
498
+ .row-fluid .span4 {
499
+ width: 31.623931624%;
500
+ }
501
+ .row-fluid .span5 {
502
+ width: 40.170940171000005%;
503
+ }
504
+ .row-fluid .span6 {
505
+ width: 48.717948718%;
506
+ }
507
+ .row-fluid .span7 {
508
+ width: 57.264957265%;
509
+ }
510
+ .row-fluid .span8 {
511
+ width: 65.81196581200001%;
512
+ }
513
+ .row-fluid .span9 {
514
+ width: 74.358974359%;
515
+ }
516
+ .row-fluid .span10 {
517
+ width: 82.905982906%;
518
+ }
519
+ .row-fluid .span11 {
520
+ width: 91.45299145300001%;
521
+ }
522
+ .row-fluid .span12 {
523
+ width: 100%;
524
+ }
525
+ input.span1, textarea.span1, .uneditable-input.span1 {
526
+ width: 60px;
527
+ }
528
+ input.span2, textarea.span2, .uneditable-input.span2 {
529
+ width: 160px;
530
+ }
531
+ input.span3, textarea.span3, .uneditable-input.span3 {
532
+ width: 260px;
533
+ }
534
+ input.span4, textarea.span4, .uneditable-input.span4 {
535
+ width: 360px;
536
+ }
537
+ input.span5, textarea.span5, .uneditable-input.span5 {
538
+ width: 460px;
539
+ }
540
+ input.span6, textarea.span6, .uneditable-input.span6 {
541
+ width: 560px;
542
+ }
543
+ input.span7, textarea.span7, .uneditable-input.span7 {
544
+ width: 660px;
545
+ }
546
+ input.span8, textarea.span8, .uneditable-input.span8 {
547
+ width: 760px;
548
+ }
549
+ input.span9, textarea.span9, .uneditable-input.span9 {
550
+ width: 860px;
551
+ }
552
+ input.span10, textarea.span10, .uneditable-input.span10 {
553
+ width: 960px;
554
+ }
555
+ input.span11, textarea.span11, .uneditable-input.span11 {
556
+ width: 1060px;
557
+ }
558
+ input.span12, textarea.span12, .uneditable-input.span12 {
559
+ width: 1160px;
560
+ }
561
+ .thumbnails {
562
+ margin-left: -30px;
563
+ }
564
+ .thumbnails > li {
565
+ margin-left: 30px;
566
+ }
567
+ }