dynflow 0.7.9 → 0.8.0

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 (118) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +16 -1
  3. data/Gemfile +13 -1
  4. data/doc/pages/source/_drafts/2015-03-01-new-documentation.markdown +10 -0
  5. data/doc/pages/source/_includes/menu.html +1 -0
  6. data/doc/pages/source/_includes/menu_right.html +1 -1
  7. data/doc/pages/source/_sass/_bootstrap-variables.sass +1 -0
  8. data/doc/pages/source/_sass/_style.scss +4 -0
  9. data/doc/pages/source/blog/index.html +12 -0
  10. data/doc/pages/source/documentation/index.md +330 -5
  11. data/dynflow.gemspec +3 -1
  12. data/examples/example_helper.rb +18 -11
  13. data/examples/orchestrate_evented.rb +2 -1
  14. data/examples/remote_executor.rb +53 -20
  15. data/lib/dynflow.rb +16 -6
  16. data/lib/dynflow/action/suspended.rb +1 -1
  17. data/lib/dynflow/action/with_sub_plans.rb +3 -6
  18. data/lib/dynflow/actor.rb +56 -0
  19. data/lib/dynflow/clock.rb +43 -38
  20. data/lib/dynflow/config.rb +107 -0
  21. data/lib/dynflow/connectors.rb +7 -0
  22. data/lib/dynflow/connectors/abstract.rb +41 -0
  23. data/lib/dynflow/connectors/database.rb +175 -0
  24. data/lib/dynflow/connectors/direct.rb +71 -0
  25. data/lib/dynflow/coordinator.rb +280 -0
  26. data/lib/dynflow/coordinator_adapters.rb +8 -0
  27. data/lib/dynflow/coordinator_adapters/abstract.rb +28 -0
  28. data/lib/dynflow/coordinator_adapters/sequel.rb +29 -0
  29. data/lib/dynflow/dispatcher.rb +58 -0
  30. data/lib/dynflow/dispatcher/abstract.rb +14 -0
  31. data/lib/dynflow/dispatcher/client_dispatcher.rb +139 -0
  32. data/lib/dynflow/dispatcher/executor_dispatcher.rb +86 -0
  33. data/lib/dynflow/errors.rb +7 -1
  34. data/lib/dynflow/execution_history.rb +46 -0
  35. data/lib/dynflow/execution_plan.rb +19 -15
  36. data/lib/dynflow/executors.rb +0 -1
  37. data/lib/dynflow/executors/abstract.rb +5 -10
  38. data/lib/dynflow/executors/parallel.rb +16 -13
  39. data/lib/dynflow/executors/parallel/core.rb +76 -78
  40. data/lib/dynflow/executors/parallel/execution_plan_manager.rb +4 -5
  41. data/lib/dynflow/executors/parallel/pool.rb +22 -52
  42. data/lib/dynflow/executors/parallel/running_steps_manager.rb +9 -2
  43. data/lib/dynflow/executors/parallel/worker.rb +5 -10
  44. data/lib/dynflow/persistence.rb +14 -0
  45. data/lib/dynflow/persistence_adapters/abstract.rb +14 -3
  46. data/lib/dynflow/persistence_adapters/sequel.rb +142 -38
  47. data/lib/dynflow/persistence_adapters/sequel_migrations/004_coordinator_records.rb +14 -0
  48. data/lib/dynflow/persistence_adapters/sequel_migrations/005_envelopes.rb +14 -0
  49. data/lib/dynflow/round_robin.rb +37 -0
  50. data/lib/dynflow/serializable.rb +1 -2
  51. data/lib/dynflow/serializer.rb +46 -0
  52. data/lib/dynflow/testing/dummy_executor.rb +2 -2
  53. data/lib/dynflow/testing/dummy_world.rb +1 -1
  54. data/lib/dynflow/transaction_adapters/abstract.rb +0 -5
  55. data/lib/dynflow/transaction_adapters/active_record.rb +0 -10
  56. data/lib/dynflow/version.rb +1 -1
  57. data/lib/dynflow/web.rb +26 -0
  58. data/lib/dynflow/web/console.rb +108 -0
  59. data/lib/dynflow/web/console_helpers.rb +158 -0
  60. data/lib/dynflow/web/filtering_helpers.rb +85 -0
  61. data/lib/dynflow/web/world_helpers.rb +9 -0
  62. data/lib/dynflow/web_console.rb +3 -310
  63. data/lib/dynflow/world.rb +188 -119
  64. data/test/abnormal_states_recovery_test.rb +152 -0
  65. data/test/action_test.rb +2 -3
  66. data/test/clock_test.rb +1 -5
  67. data/test/coordinator_test.rb +152 -0
  68. data/test/dispatcher_test.rb +146 -0
  69. data/test/execution_plan_test.rb +2 -1
  70. data/test/executor_test.rb +534 -612
  71. data/test/middleware_test.rb +4 -4
  72. data/test/persistence_test.rb +17 -0
  73. data/test/prepare_travis_env.sh +35 -0
  74. data/test/rescue_test.rb +5 -3
  75. data/test/round_robin_test.rb +28 -0
  76. data/test/support/code_workflow_example.rb +0 -73
  77. data/test/support/dummy_example.rb +130 -0
  78. data/test/support/test_execution_log.rb +41 -0
  79. data/test/test_helper.rb +222 -116
  80. data/test/testing_test.rb +10 -10
  81. data/test/web_console_test.rb +3 -3
  82. data/test/world_test.rb +23 -0
  83. data/web/assets/images/logo-square.png +0 -0
  84. data/web/assets/stylesheets/application.css +9 -0
  85. data/web/assets/vendor/bootstrap/config.json +429 -0
  86. data/web/assets/vendor/bootstrap/css/bootstrap-theme.css +479 -0
  87. data/web/assets/vendor/bootstrap/css/bootstrap-theme.min.css +10 -0
  88. data/web/assets/vendor/bootstrap/css/bootstrap.css +5377 -4980
  89. data/web/assets/vendor/bootstrap/css/bootstrap.min.css +9 -8
  90. data/web/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  91. data/web/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg +288 -0
  92. data/web/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  93. data/web/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  94. data/web/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  95. data/web/assets/vendor/bootstrap/js/bootstrap.js +1674 -1645
  96. data/web/assets/vendor/bootstrap/js/bootstrap.min.js +11 -5
  97. data/web/views/execution_history.erb +17 -0
  98. data/web/views/index.erb +4 -6
  99. data/web/views/layout.erb +44 -8
  100. data/web/views/show.erb +4 -5
  101. data/web/views/worlds.erb +26 -0
  102. metadata +116 -23
  103. checksums.yaml +0 -15
  104. data/lib/dynflow/daemon.rb +0 -30
  105. data/lib/dynflow/executors/remote_via_socket.rb +0 -43
  106. data/lib/dynflow/executors/remote_via_socket/core.rb +0 -184
  107. data/lib/dynflow/future.rb +0 -173
  108. data/lib/dynflow/listeners.rb +0 -7
  109. data/lib/dynflow/listeners/abstract.rb +0 -17
  110. data/lib/dynflow/listeners/serialization.rb +0 -77
  111. data/lib/dynflow/listeners/socket.rb +0 -117
  112. data/lib/dynflow/micro_actor.rb +0 -102
  113. data/lib/dynflow/simple_world.rb +0 -19
  114. data/test/remote_via_socket_test.rb +0 -170
  115. data/web/assets/vendor/bootstrap/css/bootstrap-responsive.css +0 -1109
  116. data/web/assets/vendor/bootstrap/css/bootstrap-responsive.min.css +0 -9
  117. data/web/assets/vendor/bootstrap/img/glyphicons-halflings-white.png +0 -0
  118. data/web/assets/vendor/bootstrap/img/glyphicons-halflings.png +0 -0
@@ -0,0 +1,479 @@
1
+ /*!
2
+ * Bootstrap v3.3.2 (http://getbootstrap.com)
3
+ * Copyright 2011-2015 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ */
6
+
7
+ /*!
8
+ * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=9d12231ad700ab8f1be0)
9
+ * Config saved to config.json and https://gist.github.com/9d12231ad700ab8f1be0
10
+ */
11
+ .btn-default,
12
+ .btn-primary,
13
+ .btn-success,
14
+ .btn-info,
15
+ .btn-warning,
16
+ .btn-danger {
17
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
18
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
19
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
20
+ }
21
+ .btn-default:active,
22
+ .btn-primary:active,
23
+ .btn-success:active,
24
+ .btn-info:active,
25
+ .btn-warning:active,
26
+ .btn-danger:active,
27
+ .btn-default.active,
28
+ .btn-primary.active,
29
+ .btn-success.active,
30
+ .btn-info.active,
31
+ .btn-warning.active,
32
+ .btn-danger.active {
33
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
34
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
35
+ }
36
+ .btn-default .badge,
37
+ .btn-primary .badge,
38
+ .btn-success .badge,
39
+ .btn-info .badge,
40
+ .btn-warning .badge,
41
+ .btn-danger .badge {
42
+ text-shadow: none;
43
+ }
44
+ .btn:active,
45
+ .btn.active {
46
+ background-image: none;
47
+ }
48
+ .btn-default {
49
+ background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);
50
+ background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);
51
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e0));
52
+ background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);
53
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
54
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
55
+ background-repeat: repeat-x;
56
+ border-color: #dbdbdb;
57
+ text-shadow: 0 1px 0 #fff;
58
+ border-color: #ccc;
59
+ }
60
+ .btn-default:hover,
61
+ .btn-default:focus {
62
+ background-color: #e0e0e0;
63
+ background-position: 0 -15px;
64
+ }
65
+ .btn-default:active,
66
+ .btn-default.active {
67
+ background-color: #e0e0e0;
68
+ border-color: #dbdbdb;
69
+ }
70
+ .btn-default.disabled,
71
+ .btn-default:disabled,
72
+ .btn-default[disabled] {
73
+ background-color: #e0e0e0;
74
+ background-image: none;
75
+ }
76
+ .btn-primary {
77
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
78
+ background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
79
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
80
+ background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
81
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
82
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
83
+ background-repeat: repeat-x;
84
+ border-color: #245580;
85
+ }
86
+ .btn-primary:hover,
87
+ .btn-primary:focus {
88
+ background-color: #265a88;
89
+ background-position: 0 -15px;
90
+ }
91
+ .btn-primary:active,
92
+ .btn-primary.active {
93
+ background-color: #265a88;
94
+ border-color: #245580;
95
+ }
96
+ .btn-primary.disabled,
97
+ .btn-primary:disabled,
98
+ .btn-primary[disabled] {
99
+ background-color: #265a88;
100
+ background-image: none;
101
+ }
102
+ .btn-success {
103
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
104
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
105
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
106
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
107
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
108
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
109
+ background-repeat: repeat-x;
110
+ border-color: #3e8f3e;
111
+ }
112
+ .btn-success:hover,
113
+ .btn-success:focus {
114
+ background-color: #419641;
115
+ background-position: 0 -15px;
116
+ }
117
+ .btn-success:active,
118
+ .btn-success.active {
119
+ background-color: #419641;
120
+ border-color: #3e8f3e;
121
+ }
122
+ .btn-success.disabled,
123
+ .btn-success:disabled,
124
+ .btn-success[disabled] {
125
+ background-color: #419641;
126
+ background-image: none;
127
+ }
128
+ .btn-info {
129
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
130
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
131
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
132
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
133
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
134
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
135
+ background-repeat: repeat-x;
136
+ border-color: #28a4c9;
137
+ }
138
+ .btn-info:hover,
139
+ .btn-info:focus {
140
+ background-color: #2aabd2;
141
+ background-position: 0 -15px;
142
+ }
143
+ .btn-info:active,
144
+ .btn-info.active {
145
+ background-color: #2aabd2;
146
+ border-color: #28a4c9;
147
+ }
148
+ .btn-info.disabled,
149
+ .btn-info:disabled,
150
+ .btn-info[disabled] {
151
+ background-color: #2aabd2;
152
+ background-image: none;
153
+ }
154
+ .btn-warning {
155
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
156
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
157
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
158
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
159
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
160
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
161
+ background-repeat: repeat-x;
162
+ border-color: #e38d13;
163
+ }
164
+ .btn-warning:hover,
165
+ .btn-warning:focus {
166
+ background-color: #eb9316;
167
+ background-position: 0 -15px;
168
+ }
169
+ .btn-warning:active,
170
+ .btn-warning.active {
171
+ background-color: #eb9316;
172
+ border-color: #e38d13;
173
+ }
174
+ .btn-warning.disabled,
175
+ .btn-warning:disabled,
176
+ .btn-warning[disabled] {
177
+ background-color: #eb9316;
178
+ background-image: none;
179
+ }
180
+ .btn-danger {
181
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
182
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
183
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
184
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
185
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
186
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
187
+ background-repeat: repeat-x;
188
+ border-color: #b92c28;
189
+ }
190
+ .btn-danger:hover,
191
+ .btn-danger:focus {
192
+ background-color: #c12e2a;
193
+ background-position: 0 -15px;
194
+ }
195
+ .btn-danger:active,
196
+ .btn-danger.active {
197
+ background-color: #c12e2a;
198
+ border-color: #b92c28;
199
+ }
200
+ .btn-danger.disabled,
201
+ .btn-danger:disabled,
202
+ .btn-danger[disabled] {
203
+ background-color: #c12e2a;
204
+ background-image: none;
205
+ }
206
+ .thumbnail,
207
+ .img-thumbnail {
208
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
209
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
210
+ }
211
+ .dropdown-menu > li > a:hover,
212
+ .dropdown-menu > li > a:focus {
213
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
214
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
215
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
216
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
217
+ background-repeat: repeat-x;
218
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
219
+ background-color: #e8e8e8;
220
+ }
221
+ .dropdown-menu > .active > a,
222
+ .dropdown-menu > .active > a:hover,
223
+ .dropdown-menu > .active > a:focus {
224
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
225
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
226
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
227
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
228
+ background-repeat: repeat-x;
229
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
230
+ background-color: #2e6da4;
231
+ }
232
+ .navbar-default {
233
+ background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
234
+ background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
235
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));
236
+ background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
237
+ background-repeat: repeat-x;
238
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
239
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
240
+ border-radius: 4px;
241
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
242
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
243
+ }
244
+ .navbar-default .navbar-nav > .open > a,
245
+ .navbar-default .navbar-nav > .active > a {
246
+ background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
247
+ background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
248
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
249
+ background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
250
+ background-repeat: repeat-x;
251
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
252
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
253
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
254
+ }
255
+ .navbar-brand,
256
+ .navbar-nav > li > a {
257
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
258
+ }
259
+ .navbar-inverse {
260
+ background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);
261
+ background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);
262
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222222));
263
+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
264
+ background-repeat: repeat-x;
265
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
266
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
267
+ }
268
+ .navbar-inverse .navbar-nav > .open > a,
269
+ .navbar-inverse .navbar-nav > .active > a {
270
+ background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
271
+ background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
272
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
273
+ background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
274
+ background-repeat: repeat-x;
275
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
276
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
277
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
278
+ }
279
+ .navbar-inverse .navbar-brand,
280
+ .navbar-inverse .navbar-nav > li > a {
281
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
282
+ }
283
+ .navbar-static-top,
284
+ .navbar-fixed-top,
285
+ .navbar-fixed-bottom {
286
+ border-radius: 0;
287
+ }
288
+ @media (max-width: 767px) {
289
+ .navbar .navbar-nav .open .dropdown-menu > .active > a,
290
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
291
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
292
+ color: #fff;
293
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
294
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
295
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
296
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
297
+ background-repeat: repeat-x;
298
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
299
+ }
300
+ }
301
+ .alert {
302
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
303
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
304
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
305
+ }
306
+ .alert-success {
307
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
308
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
309
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
310
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
311
+ background-repeat: repeat-x;
312
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
313
+ border-color: #b2dba1;
314
+ }
315
+ .alert-info {
316
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
317
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
318
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
319
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
320
+ background-repeat: repeat-x;
321
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
322
+ border-color: #9acfea;
323
+ }
324
+ .alert-warning {
325
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
326
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
327
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
328
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
329
+ background-repeat: repeat-x;
330
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
331
+ border-color: #f5e79e;
332
+ }
333
+ .alert-danger {
334
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
335
+ background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
336
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
337
+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
338
+ background-repeat: repeat-x;
339
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
340
+ border-color: #dca7a7;
341
+ }
342
+ .progress {
343
+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
344
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
345
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
346
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
347
+ background-repeat: repeat-x;
348
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
349
+ }
350
+ .progress-bar {
351
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
352
+ background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
353
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
354
+ background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
355
+ background-repeat: repeat-x;
356
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
357
+ }
358
+ .progress-bar-success {
359
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
360
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
361
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
362
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
363
+ background-repeat: repeat-x;
364
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
365
+ }
366
+ .progress-bar-info {
367
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
368
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
369
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
370
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
371
+ background-repeat: repeat-x;
372
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
373
+ }
374
+ .progress-bar-warning {
375
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
376
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
377
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
378
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
379
+ background-repeat: repeat-x;
380
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
381
+ }
382
+ .progress-bar-danger {
383
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
384
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
385
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
386
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
387
+ background-repeat: repeat-x;
388
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
389
+ }
390
+ .progress-bar-striped {
391
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
392
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
393
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
394
+ }
395
+ .list-group {
396
+ border-radius: 4px;
397
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
398
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
399
+ }
400
+ .list-group-item.active,
401
+ .list-group-item.active:hover,
402
+ .list-group-item.active:focus {
403
+ text-shadow: 0 -1px 0 #286090;
404
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
405
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
406
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
407
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
408
+ background-repeat: repeat-x;
409
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
410
+ border-color: #2b669a;
411
+ }
412
+ .list-group-item.active .badge,
413
+ .list-group-item.active:hover .badge,
414
+ .list-group-item.active:focus .badge {
415
+ text-shadow: none;
416
+ }
417
+ .panel {
418
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
419
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
420
+ }
421
+ .panel-default > .panel-heading {
422
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
423
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
424
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
425
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
426
+ background-repeat: repeat-x;
427
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
428
+ }
429
+ .panel-primary > .panel-heading {
430
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
431
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
432
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
433
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
434
+ background-repeat: repeat-x;
435
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
436
+ }
437
+ .panel-success > .panel-heading {
438
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
439
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
440
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
441
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
442
+ background-repeat: repeat-x;
443
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
444
+ }
445
+ .panel-info > .panel-heading {
446
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
447
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
448
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
449
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
450
+ background-repeat: repeat-x;
451
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
452
+ }
453
+ .panel-warning > .panel-heading {
454
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
455
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
456
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
457
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
458
+ background-repeat: repeat-x;
459
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
460
+ }
461
+ .panel-danger > .panel-heading {
462
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
463
+ background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
464
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
465
+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
466
+ background-repeat: repeat-x;
467
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
468
+ }
469
+ .well {
470
+ background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
471
+ background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
472
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
473
+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
474
+ background-repeat: repeat-x;
475
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
476
+ border-color: #dcdcdc;
477
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
478
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
479
+ }