Browse Source

Add semantic UI assets

Jocelyn Delande 3 years ago
parent
commit
80dba63b85
100 changed files with 40173 additions and 0 deletions
  1. 4 0
      costs/static/costs/3rd/semantic/.versions
  2. 22 0
      costs/static/costs/3rd/semantic/LICENSE
  3. 7 0
      costs/static/costs/3rd/semantic/README.md
  4. 255 0
      costs/static/costs/3rd/semantic/components/accordion.css
  5. 596 0
      costs/static/costs/3rd/semantic/components/accordion.js
  6. 10 0
      costs/static/costs/3rd/semantic/components/accordion.min.css
  7. 11 0
      costs/static/costs/3rd/semantic/components/accordion.min.js
  8. 276 0
      costs/static/costs/3rd/semantic/components/ad.css
  9. 10 0
      costs/static/costs/3rd/semantic/components/ad.min.css
  10. 1142 0
      costs/static/costs/3rd/semantic/components/api.js
  11. 11 0
      costs/static/costs/3rd/semantic/components/api.min.js
  12. 125 0
      costs/static/costs/3rd/semantic/components/breadcrumb.css
  13. 10 0
      costs/static/costs/3rd/semantic/components/breadcrumb.min.css
  14. 3322 0
      costs/static/costs/3rd/semantic/components/button.css
  15. 10 0
      costs/static/costs/3rd/semantic/components/button.min.css
  16. 955 0
      costs/static/costs/3rd/semantic/components/card.css
  17. 10 0
      costs/static/costs/3rd/semantic/components/card.min.css
  18. 624 0
      costs/static/costs/3rd/semantic/components/checkbox.css
  19. 809 0
      costs/static/costs/3rd/semantic/components/checkbox.js
  20. 10 0
      costs/static/costs/3rd/semantic/components/checkbox.min.css
  21. 11 0
      costs/static/costs/3rd/semantic/components/checkbox.min.js
  22. 274 0
      costs/static/costs/3rd/semantic/components/colorize.js
  23. 11 0
      costs/static/costs/3rd/semantic/components/colorize.min.js
  24. 259 0
      costs/static/costs/3rd/semantic/components/comment.css
  25. 10 0
      costs/static/costs/3rd/semantic/components/comment.min.css
  26. 149 0
      costs/static/costs/3rd/semantic/components/container.css
  27. 10 0
      costs/static/costs/3rd/semantic/components/container.min.css
  28. 200 0
      costs/static/costs/3rd/semantic/components/dimmer.css
  29. 693 0
      costs/static/costs/3rd/semantic/components/dimmer.js
  30. 10 0
      costs/static/costs/3rd/semantic/components/dimmer.min.css
  31. 11 0
      costs/static/costs/3rd/semantic/components/dimmer.min.js
  32. 264 0
      costs/static/costs/3rd/semantic/components/divider.css
  33. 10 0
      costs/static/costs/3rd/semantic/components/divider.min.css
  34. 1406 0
      costs/static/costs/3rd/semantic/components/dropdown.css
  35. 3442 0
      costs/static/costs/3rd/semantic/components/dropdown.js
  36. 10 0
      costs/static/costs/3rd/semantic/components/dropdown.min.css
  37. 12 0
      costs/static/costs/3rd/semantic/components/dropdown.min.js
  38. 168 0
      costs/static/costs/3rd/semantic/components/embed.css
  39. 659 0
      costs/static/costs/3rd/semantic/components/embed.js
  40. 10 0
      costs/static/costs/3rd/semantic/components/embed.min.css
  41. 11 0
      costs/static/costs/3rd/semantic/components/embed.min.js
  42. 301 0
      costs/static/costs/3rd/semantic/components/feed.css
  43. 10 0
      costs/static/costs/3rd/semantic/components/feed.min.css
  44. 1032 0
      costs/static/costs/3rd/semantic/components/flag.css
  45. 10 0
      costs/static/costs/3rd/semantic/components/flag.min.css
  46. 1065 0
      costs/static/costs/3rd/semantic/components/form.css
  47. 1517 0
      costs/static/costs/3rd/semantic/components/form.js
  48. 10 0
      costs/static/costs/3rd/semantic/components/form.min.css
  49. 11 0
      costs/static/costs/3rd/semantic/components/form.min.js
  50. 2028 0
      costs/static/costs/3rd/semantic/components/grid.css
  51. 10 0
      costs/static/costs/3rd/semantic/components/grid.min.css
  52. 721 0
      costs/static/costs/3rd/semantic/components/header.css
  53. 10 0
      costs/static/costs/3rd/semantic/components/header.min.css
  54. 2590 0
      costs/static/costs/3rd/semantic/components/icon.css
  55. 10 0
      costs/static/costs/3rd/semantic/components/icon.min.css
  56. 302 0
      costs/static/costs/3rd/semantic/components/image.css
  57. 10 0
      costs/static/costs/3rd/semantic/components/image.min.css
  58. 517 0
      costs/static/costs/3rd/semantic/components/input.css
  59. 10 0
      costs/static/costs/3rd/semantic/components/input.min.css
  60. 482 0
      costs/static/costs/3rd/semantic/components/item.css
  61. 10 0
      costs/static/costs/3rd/semantic/components/item.min.css
  62. 1314 0
      costs/static/costs/3rd/semantic/components/label.css
  63. 10 0
      costs/static/costs/3rd/semantic/components/label.min.css
  64. 939 0
      costs/static/costs/3rd/semantic/components/list.css
  65. 10 0
      costs/static/costs/3rd/semantic/components/list.min.css
  66. 286 0
      costs/static/costs/3rd/semantic/components/loader.css
  67. 10 0
      costs/static/costs/3rd/semantic/components/loader.min.css
  68. 1984 0
      costs/static/costs/3rd/semantic/components/menu.css
  69. 1 0
      costs/static/costs/3rd/semantic/components/menu.min.css
  70. 463 0
      costs/static/costs/3rd/semantic/components/message.css
  71. 10 0
      costs/static/costs/3rd/semantic/components/message.min.css
  72. 510 0
      costs/static/costs/3rd/semantic/components/modal.css
  73. 892 0
      costs/static/costs/3rd/semantic/components/modal.js
  74. 10 0
      costs/static/costs/3rd/semantic/components/modal.min.css
  75. 11 0
      costs/static/costs/3rd/semantic/components/modal.min.js
  76. 148 0
      costs/static/costs/3rd/semantic/components/nag.css
  77. 486 0
      costs/static/costs/3rd/semantic/components/nag.js
  78. 10 0
      costs/static/costs/3rd/semantic/components/nag.min.css
  79. 11 0
      costs/static/costs/3rd/semantic/components/nag.min.js
  80. 385 0
      costs/static/costs/3rd/semantic/components/popup.css
  81. 1413 0
      costs/static/costs/3rd/semantic/components/popup.js
  82. 10 0
      costs/static/costs/3rd/semantic/components/popup.min.css
  83. 11 0
      costs/static/costs/3rd/semantic/components/popup.min.js
  84. 517 0
      costs/static/costs/3rd/semantic/components/progress.css
  85. 795 0
      costs/static/costs/3rd/semantic/components/progress.js
  86. 10 0
      costs/static/costs/3rd/semantic/components/progress.min.css
  87. 11 0
      costs/static/costs/3rd/semantic/components/progress.min.js
  88. 132 0
      costs/static/costs/3rd/semantic/components/rail.css
  89. 10 0
      costs/static/costs/3rd/semantic/components/rail.min.css
  90. 266 0
      costs/static/costs/3rd/semantic/components/rating.css
  91. 475 0
      costs/static/costs/3rd/semantic/components/rating.js
  92. 10 0
      costs/static/costs/3rd/semantic/components/rating.min.css
  93. 11 0
      costs/static/costs/3rd/semantic/components/rating.min.js
  94. 429 0
      costs/static/costs/3rd/semantic/components/reset.css
  95. 10 0
      costs/static/costs/3rd/semantic/components/reset.min.css
  96. 304 0
      costs/static/costs/3rd/semantic/components/reveal.css
  97. 10 0
      costs/static/costs/3rd/semantic/components/reveal.min.css
  98. 409 0
      costs/static/costs/3rd/semantic/components/search.css
  99. 1345 0
      costs/static/costs/3rd/semantic/components/search.js
  100. 0 0
      costs/static/costs/3rd/semantic/components/search.min.css

+ 4 - 0
costs/static/costs/3rd/semantic/.versions

@@ -0,0 +1,4 @@
1
+jquery@1.11.3_2
2
+meteor@1.1.6
3
+semantic:ui-css@2.0.7
4
+underscore@1.0.3

+ 22 - 0
costs/static/costs/3rd/semantic/LICENSE

@@ -0,0 +1,22 @@
1
+The MIT License (MIT)
2
+
3
+Copyright (c) 2015 Semantic Org
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy
6
+of this software and associated documentation files (the "Software"), to deal
7
+in the Software without restriction, including without limitation the rights
8
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+copies of the Software, and to permit persons to whom the Software is
10
+furnished to do so, subject to the following conditions:
11
+
12
+The above copyright notice and this permission notice shall be included in all
13
+copies or substantial portions of the Software.
14
+
15
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+SOFTWARE.
22
+

+ 7 - 0
costs/static/costs/3rd/semantic/README.md

@@ -0,0 +1,7 @@
1
+# CSS  Distribution
2
+
3
+This repository is automatically synced with the main [Semantic UI](https://github.com/Semantic-Org/Semantic-UI) repository to provide lightweight CSS only version of Semantic UI.
4
+
5
+This package **does not support theming** and includes generated CSS files of the default theme only.
6
+
7
+You can view more on Semantic UI at [LearnSemantic.com](http://www.learnsemantic.com) and [Semantic-UI.com](http://www.semantic-ui.com)

File diff suppressed because it is too large
+ 255 - 0
costs/static/costs/3rd/semantic/components/accordion.css


+ 596 - 0
costs/static/costs/3rd/semantic/components/accordion.js

@@ -0,0 +1,596 @@
1
+/*!
2
+ * # Semantic UI 2.1.7 - Accordion
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2015 Contributors
7
+ * Released under the MIT license
8
+ * http://opensource.org/licenses/MIT
9
+ *
10
+ */
11
+
12
+;(function ($, window, document, undefined) {
13
+
14
+"use strict";
15
+
16
+$.fn.accordion = function(parameters) {
17
+  var
18
+    $allModules     = $(this),
19
+
20
+    time            = new Date().getTime(),
21
+    performance     = [],
22
+
23
+    query           = arguments[0],
24
+    methodInvoked   = (typeof query == 'string'),
25
+    queryArguments  = [].slice.call(arguments, 1),
26
+
27
+    requestAnimationFrame = window.requestAnimationFrame
28
+      || window.mozRequestAnimationFrame
29
+      || window.webkitRequestAnimationFrame
30
+      || window.msRequestAnimationFrame
31
+      || function(callback) { setTimeout(callback, 0); },
32
+
33
+    returnedValue
34
+  ;
35
+  $allModules
36
+    .each(function() {
37
+      var
38
+        settings        = ( $.isPlainObject(parameters) )
39
+          ? $.extend(true, {}, $.fn.accordion.settings, parameters)
40
+          : $.extend({}, $.fn.accordion.settings),
41
+
42
+        className       = settings.className,
43
+        namespace       = settings.namespace,
44
+        selector        = settings.selector,
45
+        error           = settings.error,
46
+
47
+        eventNamespace  = '.' + namespace,
48
+        moduleNamespace = 'module-' + namespace,
49
+        moduleSelector  = $allModules.selector || '',
50
+
51
+        $module  = $(this),
52
+        $title   = $module.find(selector.title),
53
+        $content = $module.find(selector.content),
54
+
55
+        element  = this,
56
+        instance = $module.data(moduleNamespace),
57
+        observer,
58
+        module
59
+      ;
60
+
61
+      module = {
62
+
63
+        initialize: function() {
64
+          module.debug('Initializing', $module);
65
+          module.bind.events();
66
+          if(settings.observeChanges) {
67
+            module.observeChanges();
68
+          }
69
+          module.instantiate();
70
+        },
71
+
72
+        instantiate: function() {
73
+          instance = module;
74
+          $module
75
+            .data(moduleNamespace, module)
76
+          ;
77
+        },
78
+
79
+        destroy: function() {
80
+          module.debug('Destroying previous instance', $module);
81
+          $module
82
+            .off(eventNamespace)
83
+            .removeData(moduleNamespace)
84
+          ;
85
+        },
86
+
87
+        refresh: function() {
88
+          $title   = $module.find(selector.title);
89
+          $content = $module.find(selector.content);
90
+        },
91
+
92
+        observeChanges: function() {
93
+          if('MutationObserver' in window) {
94
+            observer = new MutationObserver(function(mutations) {
95
+              module.debug('DOM tree modified, updating selector cache');
96
+              module.refresh();
97
+            });
98
+            observer.observe(element, {
99
+              childList : true,
100
+              subtree   : true
101
+            });
102
+            module.debug('Setting up mutation observer', observer);
103
+          }
104
+        },
105
+
106
+        bind: {
107
+          events: function() {
108
+            module.debug('Binding delegated events');
109
+            $module
110
+              .on(settings.on + eventNamespace, selector.trigger, module.event.click)
111
+            ;
112
+          }
113
+        },
114
+
115
+        event: {
116
+          click: function() {
117
+            module.toggle.call(this);
118
+          }
119
+        },
120
+
121
+        toggle: function(query) {
122
+          var
123
+            $activeTitle = (query !== undefined)
124
+              ? (typeof query === 'number')
125
+                ? $title.eq(query)
126
+                : $(query).closest(selector.title)
127
+              : $(this).closest(selector.title),
128
+            $activeContent = $activeTitle.next($content),
129
+            isAnimating = $activeContent.hasClass(className.animating),
130
+            isActive    = $activeContent.hasClass(className.active),
131
+            isOpen      = (isActive && !isAnimating),
132
+            isOpening   = (!isActive && isAnimating)
133
+          ;
134
+          module.debug('Toggling visibility of content', $activeTitle);
135
+          if(isOpen || isOpening) {
136
+            if(settings.collapsible) {
137
+              module.close.call($activeTitle);
138
+            }
139
+            else {
140
+              module.debug('Cannot close accordion content collapsing is disabled');
141
+            }
142
+          }
143
+          else {
144
+            module.open.call($activeTitle);
145
+          }
146
+        },
147
+
148
+        open: function(query) {
149
+          var
150
+            $activeTitle = (query !== undefined)
151
+              ? (typeof query === 'number')
152
+                ? $title.eq(query)
153
+                : $(query).closest(selector.title)
154
+              : $(this).closest(selector.title),
155
+            $activeContent = $activeTitle.next($content),
156
+            isAnimating = $activeContent.hasClass(className.animating),
157
+            isActive    = $activeContent.hasClass(className.active),
158
+            isOpen      = (isActive || isAnimating)
159
+          ;
160
+          if(isOpen) {
161
+            module.debug('Accordion already open, skipping', $activeContent);
162
+            return;
163
+          }
164
+          module.debug('Opening accordion content', $activeTitle);
165
+          settings.onOpening.call($activeContent);
166
+          if(settings.exclusive) {
167
+            module.closeOthers.call($activeTitle);
168
+          }
169
+          $activeTitle
170
+            .addClass(className.active)
171
+          ;
172
+          $activeContent
173
+            .stop(true, true)
174
+            .addClass(className.animating)
175
+          ;
176
+          if(settings.animateChildren) {
177
+            if($.fn.transition !== undefined && $module.transition('is supported')) {
178
+              $activeContent
179
+                .children()
180
+                  .transition({
181
+                    animation   : 'fade in',
182
+                    queue       : false,
183
+                    useFailSafe : true,
184
+                    debug       : settings.debug,
185
+                    verbose     : settings.verbose,
186
+                    duration    : settings.duration
187
+                  })
188
+              ;
189
+            }
190
+            else {
191
+              $activeContent
192
+                .children()
193
+                  .stop(true, true)
194
+                  .animate({
195
+                    opacity: 1
196
+                  }, settings.duration, module.resetOpacity)
197
+              ;
198
+            }
199
+          }
200
+          $activeContent
201
+            .slideDown(settings.duration, settings.easing, function() {
202
+              $activeContent
203
+                .removeClass(className.animating)
204
+                .addClass(className.active)
205
+              ;
206
+              module.reset.display.call(this);
207
+              settings.onOpen.call(this);
208
+              settings.onChange.call(this);
209
+            })
210
+          ;
211
+        },
212
+
213
+        close: function(query) {
214
+          var
215
+            $activeTitle = (query !== undefined)
216
+              ? (typeof query === 'number')
217
+                ? $title.eq(query)
218
+                : $(query).closest(selector.title)
219
+              : $(this).closest(selector.title),
220
+            $activeContent = $activeTitle.next($content),
221
+            isAnimating    = $activeContent.hasClass(className.animating),
222
+            isActive       = $activeContent.hasClass(className.active),
223
+            isOpening      = (!isActive && isAnimating),
224
+            isClosing      = (isActive && isAnimating)
225
+          ;
226
+          if((isActive || isOpening) && !isClosing) {
227
+            module.debug('Closing accordion content', $activeContent);
228
+            settings.onClosing.call($activeContent);
229
+            $activeTitle
230
+              .removeClass(className.active)
231
+            ;
232
+            $activeContent
233
+              .stop(true, true)
234
+              .addClass(className.animating)
235
+            ;
236
+            if(settings.animateChildren) {
237
+              if($.fn.transition !== undefined && $module.transition('is supported')) {
238
+                $activeContent
239
+                  .children()
240
+                    .transition({
241
+                      animation   : 'fade out',
242
+                      queue       : false,
243
+                      useFailSafe : true,
244
+                      debug       : settings.debug,
245
+                      verbose     : settings.verbose,
246
+                      duration    : settings.duration
247
+                    })
248
+                ;
249
+              }
250
+              else {
251
+                $activeContent
252
+                  .children()
253
+                    .stop(true, true)
254
+                    .animate({
255
+                      opacity: 0
256
+                    }, settings.duration, module.resetOpacity)
257
+                ;
258
+              }
259
+            }
260
+            $activeContent
261
+              .slideUp(settings.duration, settings.easing, function() {
262
+                $activeContent
263
+                  .removeClass(className.animating)
264
+                  .removeClass(className.active)
265
+                ;
266
+                module.reset.display.call(this);
267
+                settings.onClose.call(this);
268
+                settings.onChange.call(this);
269
+              })
270
+            ;
271
+          }
272
+        },
273
+
274
+        closeOthers: function(index) {
275
+          var
276
+            $activeTitle = (index !== undefined)
277
+              ? $title.eq(index)
278
+              : $(this).closest(selector.title),
279
+            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),
280
+            $activeAccordion = $activeTitle.closest(selector.accordion),
281
+            activeSelector   = selector.title + '.' + className.active + ':visible',
282
+            activeContent    = selector.content + '.' + className.active + ':visible',
283
+            $openTitles,
284
+            $nestedTitles,
285
+            $openContents
286
+          ;
287
+          if(settings.closeNested) {
288
+            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);
289
+            $openContents = $openTitles.next($content);
290
+          }
291
+          else {
292
+            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);
293
+            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);
294
+            $openTitles   = $openTitles.not($nestedTitles);
295
+            $openContents = $openTitles.next($content);
296
+          }
297
+          if( ($openTitles.length > 0) ) {
298
+            module.debug('Exclusive enabled, closing other content', $openTitles);
299
+            $openTitles
300
+              .removeClass(className.active)
301
+            ;
302
+            $openContents
303
+              .removeClass(className.animating)
304
+              .stop(true, true)
305
+            ;
306
+            if(settings.animateChildren) {
307
+              if($.fn.transition !== undefined && $module.transition('is supported')) {
308
+                $openContents
309
+                  .children()
310
+                    .transition({
311
+                      animation   : 'fade out',
312
+                      useFailSafe : true,
313
+                      debug       : settings.debug,
314
+                      verbose     : settings.verbose,
315
+                      duration    : settings.duration
316
+                    })
317
+                ;
318
+              }
319
+              else {
320
+                $openContents
321
+                  .children()
322
+                    .stop(true, true)
323
+                    .animate({
324
+                      opacity: 0
325
+                    }, settings.duration, module.resetOpacity)
326
+                ;
327
+              }
328
+            }
329
+            $openContents
330
+              .slideUp(settings.duration , settings.easing, function() {
331
+                $(this).removeClass(className.active);
332
+                module.reset.display.call(this);
333
+              })
334
+            ;
335
+          }
336
+        },
337
+
338
+        reset: {
339
+
340
+          display: function() {
341
+            module.verbose('Removing inline display from element', this);
342
+            $(this).css('display', '');
343
+            if( $(this).attr('style') === '') {
344
+              $(this)
345
+                .attr('style', '')
346
+                .removeAttr('style')
347
+              ;
348
+            }
349
+          },
350
+
351
+          opacity: function() {
352
+            module.verbose('Removing inline opacity from element', this);
353
+            $(this).css('opacity', '');
354
+            if( $(this).attr('style') === '') {
355
+              $(this)
356
+                .attr('style', '')
357
+                .removeAttr('style')
358
+              ;
359
+            }
360
+          },
361
+
362
+        },
363
+
364
+        setting: function(name, value) {
365
+          module.debug('Changing setting', name, value);
366
+          if( $.isPlainObject(name) ) {
367
+            $.extend(true, settings, name);
368
+          }
369
+          else if(value !== undefined) {
370
+            settings[name] = value;
371
+          }
372
+          else {
373
+            return settings[name];
374
+          }
375
+        },
376
+        internal: function(name, value) {
377
+          module.debug('Changing internal', name, value);
378
+          if(value !== undefined) {
379
+            if( $.isPlainObject(name) ) {
380
+              $.extend(true, module, name);
381
+            }
382
+            else {
383
+              module[name] = value;
384
+            }
385
+          }
386
+          else {
387
+            return module[name];
388
+          }
389
+        },
390
+        debug: function() {
391
+          if(settings.debug) {
392
+            if(settings.performance) {
393
+              module.performance.log(arguments);
394
+            }
395
+            else {
396
+              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
397
+              module.debug.apply(console, arguments);
398
+            }
399
+          }
400
+        },
401
+        verbose: function() {
402
+          if(settings.verbose && settings.debug) {
403
+            if(settings.performance) {
404
+              module.performance.log(arguments);
405
+            }
406
+            else {
407
+              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
408
+              module.verbose.apply(console, arguments);
409
+            }
410
+          }
411
+        },
412
+        error: function() {
413
+          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
414
+          module.error.apply(console, arguments);
415
+        },
416
+        performance: {
417
+          log: function(message) {
418
+            var
419
+              currentTime,
420
+              executionTime,
421
+              previousTime
422
+            ;
423
+            if(settings.performance) {
424
+              currentTime   = new Date().getTime();
425
+              previousTime  = time || currentTime;
426
+              executionTime = currentTime - previousTime;
427
+              time          = currentTime;
428
+              performance.push({
429
+                'Name'           : message[0],
430
+                'Arguments'      : [].slice.call(message, 1) || '',
431
+                'Element'        : element,
432
+                'Execution Time' : executionTime
433
+              });
434
+            }
435
+            clearTimeout(module.performance.timer);
436
+            module.performance.timer = setTimeout(module.performance.display, 500);
437
+          },
438
+          display: function() {
439
+            var
440
+              title = settings.name + ':',
441
+              totalTime = 0
442
+            ;
443
+            time = false;
444
+            clearTimeout(module.performance.timer);
445
+            $.each(performance, function(index, data) {
446
+              totalTime += data['Execution Time'];
447
+            });
448
+            title += ' ' + totalTime + 'ms';
449
+            if(moduleSelector) {
450
+              title += ' \'' + moduleSelector + '\'';
451
+            }
452
+            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
453
+              console.groupCollapsed(title);
454
+              if(console.table) {
455
+                console.table(performance);
456
+              }
457
+              else {
458
+                $.each(performance, function(index, data) {
459
+                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
460
+                });
461
+              }
462
+              console.groupEnd();
463
+            }
464
+            performance = [];
465
+          }
466
+        },
467
+        invoke: function(query, passedArguments, context) {
468
+          var
469
+            object = instance,
470
+            maxDepth,
471
+            found,
472
+            response
473
+          ;
474
+          passedArguments = passedArguments || queryArguments;
475
+          context         = element         || context;
476
+          if(typeof query == 'string' && object !== undefined) {
477
+            query    = query.split(/[\. ]/);
478
+            maxDepth = query.length - 1;
479
+            $.each(query, function(depth, value) {
480
+              var camelCaseValue = (depth != maxDepth)
481
+                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
482
+                : query
483
+              ;
484
+              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
485
+                object = object[camelCaseValue];
486
+              }
487
+              else if( object[camelCaseValue] !== undefined ) {
488
+                found = object[camelCaseValue];
489
+                return false;
490
+              }
491
+              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
492
+                object = object[value];
493
+              }
494
+              else if( object[value] !== undefined ) {
495
+                found = object[value];
496
+                return false;
497
+              }
498
+              else {
499
+                module.error(error.method, query);
500
+                return false;
501
+              }
502
+            });
503
+          }
504
+          if ( $.isFunction( found ) ) {
505
+            response = found.apply(context, passedArguments);
506
+          }
507
+          else if(found !== undefined) {
508
+            response = found;
509
+          }
510
+          if($.isArray(returnedValue)) {
511
+            returnedValue.push(response);
512
+          }
513
+          else if(returnedValue !== undefined) {
514
+            returnedValue = [returnedValue, response];
515
+          }
516
+          else if(response !== undefined) {
517
+            returnedValue = response;
518
+          }
519
+          return found;
520
+        }
521
+      };
522
+      if(methodInvoked) {
523
+        if(instance === undefined) {
524
+          module.initialize();
525
+        }
526
+        module.invoke(query);
527
+      }
528
+      else {
529
+        if(instance !== undefined) {
530
+          instance.invoke('destroy');
531
+        }
532
+        module.initialize();
533
+      }
534
+    })
535
+  ;
536
+  return (returnedValue !== undefined)
537
+    ? returnedValue
538
+    : this
539
+  ;
540
+};
541
+
542
+$.fn.accordion.settings = {
543
+
544
+  name            : 'Accordion',
545
+  namespace       : 'accordion',
546
+
547
+  debug           : false,
548
+  verbose         : false,
549
+  performance     : true,
550
+
551
+  on              : 'click', // event on title that opens accordion
552
+
553
+  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion
554
+
555
+  exclusive       : true,  // whether a single accordion content panel should be open at once
556
+  collapsible     : true,  // whether accordion content can be closed
557
+  closeNested     : false, // whether nested content should be closed when a panel is closed
558
+  animateChildren : true,  // whether children opacity should be animated
559
+
560
+  duration        : 350, // duration of animation
561
+  easing          : 'easeOutQuad', // easing equation for animation
562
+
563
+
564
+  onOpening       : function(){}, // callback before open animation
565
+  onOpen          : function(){}, // callback after open animation
566
+  onClosing       : function(){}, // callback before closing animation
567
+  onClose         : function(){}, // callback after closing animation
568
+  onChange        : function(){}, // callback after closing or opening animation
569
+
570
+  error: {
571
+    method : 'The method you called is not defined'
572
+  },
573
+
574
+  className   : {
575
+    active    : 'active',
576
+    animating : 'animating'
577
+  },
578
+
579
+  selector    : {
580
+    accordion : '.accordion',
581
+    title     : '.title',
582
+    trigger   : '.title',
583
+    content   : '.content'
584
+  }
585
+
586
+};
587
+
588
+// Adds easing
589
+$.extend( $.easing, {
590
+  easeOutQuad: function (x, t, b, c, d) {
591
+    return -c *(t/=d)*(t-2) + b;
592
+  }
593
+});
594
+
595
+})( jQuery, window, document );
596
+

File diff suppressed because it is too large
+ 10 - 0
costs/static/costs/3rd/semantic/components/accordion.min.css


File diff suppressed because it is too large
+ 11 - 0
costs/static/costs/3rd/semantic/components/accordion.min.js


+ 276 - 0
costs/static/costs/3rd/semantic/components/ad.css

@@ -0,0 +1,276 @@
1
+/*!
2
+ * # Semantic UI 2.1.7 - Ad
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2013 Contributors
7
+ * Released under the MIT license
8
+ * http://opensource.org/licenses/MIT
9
+ *
10
+ */
11
+
12
+
13
+/*******************************
14
+         Advertisement
15
+*******************************/
16
+
17
+.ui.ad {
18
+  display: block;
19
+  overflow: hidden;
20
+  margin: 1em 0em;
21
+}
22
+.ui.ad:first-child {
23
+  margin: 0em;
24
+}
25
+.ui.ad:last-child {
26
+  margin: 0em;
27
+}
28
+.ui.ad iframe {
29
+  margin: 0em;
30
+  padding: 0em;
31
+  border: none;
32
+  overflow: hidden;
33
+}
34
+
35
+/*--------------
36
+     Common
37
+---------------*/
38
+
39
+
40
+/* Leaderboard */
41
+.ui.leaderboard.ad {
42
+  width: 728px;
43
+  height: 90px;
44
+}
45
+
46
+/* Medium Rectangle */
47
+.ui[class*="medium rectangle"].ad {
48
+  width: 300px;
49
+  height: 250px;
50
+}
51
+
52
+/* Large Rectangle */
53
+.ui[class*="large rectangle"].ad {
54
+  width: 336px;
55
+  height: 280px;
56
+}
57
+
58
+/* Half Page */
59
+.ui[class*="half page"].ad {
60
+  width: 300px;
61
+  height: 600px;
62
+}
63
+
64
+/*--------------
65
+     Square
66
+---------------*/
67
+
68
+
69
+/* Square */
70
+.ui.square.ad {
71
+  width: 250px;
72
+  height: 250px;
73
+}
74
+
75
+/* Small Square */
76
+.ui[class*="small square"].ad {
77
+  width: 200px;
78
+  height: 200px;
79
+}
80
+
81
+/*--------------
82
+    Rectangle
83
+---------------*/
84
+
85
+
86
+/* Small Rectangle */
87
+.ui[class*="small rectangle"].ad {
88
+  width: 180px;
89
+  height: 150px;
90
+}
91
+
92
+/* Vertical Rectangle */
93
+.ui[class*="vertical rectangle"].ad {
94
+  width: 240px;
95
+  height: 400px;
96
+}
97
+
98
+/*--------------
99
+     Button
100
+---------------*/
101
+
102
+.ui.button.ad {
103
+  width: 120px;
104
+  height: 90px;
105
+}
106
+.ui[class*="square button"].ad {
107
+  width: 125px;
108
+  height: 125px;
109
+}
110
+.ui[class*="small button"].ad {
111
+  width: 120px;
112
+  height: 60px;
113
+}
114
+
115
+/*--------------
116
+   Skyscrapers
117
+---------------*/
118
+
119
+
120
+/* Skyscraper */
121
+.ui.skyscraper.ad {
122
+  width: 120px;
123
+  height: 600px;
124
+}
125
+
126
+/* Wide Skyscraper */
127
+.ui[class*="wide skyscraper"].ad {
128
+  width: 160px;
129
+}
130
+
131
+/*--------------
132
+     Banners
133
+---------------*/
134
+
135
+
136
+/* Banner */
137
+.ui.banner.ad {
138
+  width: 468px;
139
+  height: 60px;
140
+}
141
+
142
+/* Vertical Banner */
143
+.ui[class*="vertical banner"].ad {
144
+  width: 120px;
145
+  height: 240px;
146
+}
147
+
148
+/* Top Banner */
149
+.ui[class*="top banner"].ad {
150
+  width: 930px;
151
+  height: 180px;
152
+}
153
+
154
+/* Half Banner */
155
+.ui[class*="half banner"].ad {
156
+  width: 234px;
157
+  height: 60px;
158
+}
159
+
160
+/*--------------
161
+    Boards
162
+---------------*/
163
+
164
+
165
+/* Leaderboard */
166
+.ui[class*="large leaderboard"].ad {
167
+  width: 970px;
168
+  height: 90px;
169
+}
170
+
171
+/* Billboard */
172
+.ui.billboard.ad {
173
+  width: 970px;
174
+  height: 250px;
175
+}
176
+
177
+/*--------------
178
+    Panorama
179
+---------------*/
180
+
181
+
182
+/* Panorama */
183
+.ui.panorama.ad {
184
+  width: 980px;
185
+  height: 120px;
186
+}
187
+
188
+/*--------------
189
+     Netboard
190
+---------------*/
191
+
192
+
193
+/* Netboard */
194
+.ui.netboard.ad {
195
+  width: 580px;
196
+  height: 400px;
197
+}
198
+
199
+/*--------------
200
+     Mobile
201
+---------------*/
202
+
203
+
204
+/* Large Mobile Banner */
205
+.ui[class*="large mobile banner"].ad {
206
+  width: 320px;
207
+  height: 100px;
208
+}
209
+
210
+/* Mobile Leaderboard */
211
+.ui[class*="mobile leaderboard"].ad {
212
+  width: 320px;
213
+  height: 50px;
214
+}
215
+
216
+
217
+/*******************************
218
+             Types
219
+*******************************/
220
+
221
+
222
+/* Mobile Sizes */
223
+.ui.mobile.ad {
224
+  display: none;
225
+}
226
+@media only screen and (max-width: 767px) {
227
+  .ui.mobile.ad {
228
+    display: block;
229
+  }
230
+}
231
+
232
+
233
+/*******************************
234
+           Variations
235
+*******************************/
236
+
237
+.ui.centered.ad {
238
+  margin-left: auto;
239
+  margin-right: auto;
240
+}
241
+.ui.test.ad {
242
+  position: relative;
243
+  background: #545454;
244
+}
245
+.ui.test.ad:after {
246
+  position: absolute;
247
+  top: 50%;
248
+  left: 50%;
249
+  width: 100%;
250
+  text-align: center;
251
+  -webkit-transform: translateX(-50%) translateY(-50%);
252
+      -ms-transform: translateX(-50%) translateY(-50%);
253
+          transform: translateX(-50%) translateY(-50%);
254
+  content: 'Ad';
255
+  color: #ffffff;
256
+  font-size: 1em;
257
+  font-weight: bold;
258
+}
259
+.ui.mobile.test.ad:after {
260
+  font-size: 0.85714286em;
261
+}
262
+.ui.test.ad[data-text]:after {
263
+  content: attr(data-text);
264
+}
265
+
266
+
267
+/*******************************
268
+         Theme Overrides
269
+*******************************/
270
+
271
+
272
+
273
+/*******************************
274
+    User Variable Overrides
275
+*******************************/
276
+

File diff suppressed because it is too large
+ 10 - 0
costs/static/costs/3rd/semantic/components/ad.min.css


File diff suppressed because it is too large
+ 1142 - 0
costs/static/costs/3rd/semantic/components/api.js


File diff suppressed because it is too large
+ 11 - 0
costs/static/costs/3rd/semantic/components/api.min.js


+ 125 - 0
costs/static/costs/3rd/semantic/components/breadcrumb.css

@@ -0,0 +1,125 @@
1
+/*!
2
+ * # Semantic UI 2.1.7 - Breadcrumb
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2015 Contributors
7
+ * Released under the MIT license
8
+ * http://opensource.org/licenses/MIT
9
+ *
10
+ */
11
+
12
+
13
+/*******************************
14
+           Breadcrumb
15
+*******************************/
16
+
17
+.ui.breadcrumb {
18
+  line-height: 1;
19
+  display: inline-block;
20
+  margin: 0em 0em;
21
+  vertical-align: middle;
22
+}
23
+.ui.breadcrumb:first-child {
24
+  margin-top: 0em;
25
+}
26
+.ui.breadcrumb:last-child {
27
+  margin-bottom: 0em;
28
+}
29
+
30
+
31
+/*******************************
32
+          Content
33
+*******************************/
34
+
35
+
36
+/* Divider */
37
+.ui.breadcrumb .divider {
38
+  display: inline-block;
39
+  opacity: 0.7;
40
+  margin: 0em 0.21428571rem 0em;
41
+  font-size: 0.92857143em;
42
+  color: rgba(0, 0, 0, 0.4);
43
+  vertical-align: baseline;
44
+}
45
+
46
+/* Link */
47
+.ui.breadcrumb a {
48
+  color: #4183c4;
49
+}
50
+.ui.breadcrumb a:hover {
51
+  color: #1e70bf;
52
+}
53
+
54
+/* Icon Divider */
55
+.ui.breadcrumb .icon.divider {
56
+  font-size: 0.85714286em;
57
+  vertical-align: baseline;
58
+}
59
+
60
+/* Section */
61
+.ui.breadcrumb a.section {
62
+  cursor: pointer;
63
+}
64
+.ui.breadcrumb .section {
65
+  display: inline-block;
66
+  margin: 0em;
67
+  padding: 0em;
68
+}
69
+
70
+/* Loose Coupling */
71
+.ui.breadcrumb.segment {
72
+  display: inline-block;
73
+  padding: 0.71428571em 1em;
74
+}
75
+
76
+
77
+/*******************************
78
+            States
79
+*******************************/
80
+
81
+.ui.breadcrumb .active.section {
82
+  font-weight: bold;
83
+}
84
+
85
+
86
+/*******************************
87
+           Variations
88
+*******************************/
89
+
90
+.ui.mini.breadcrumb {
91
+  font-size: 0.71428571rem;
92
+}
93
+.ui.tiny.breadcrumb {
94
+  font-size: 0.85714286rem;
95
+}
96
+.ui.small.breadcrumb {
97
+  font-size: 0.92857143rem;
98
+}
99
+.ui.breadcrumb {
100
+  font-size: 1rem;
101
+}
102
+.ui.large.breadcrumb {
103
+  font-size: 1.14285714rem;
104
+}
105
+.ui.big.breadcrumb {
106
+  font-size: 1.28571429rem;
107
+}
108
+.ui.huge.breadcrumb {
109
+  font-size: 1.42857143rem;
110
+}
111
+.ui.massive.breadcrumb {
112
+  font-size: 1.71428571rem;
113
+}
114
+
115
+
116
+/*******************************
117
+         Theme Overrides
118
+*******************************/
119
+
120
+
121
+
122
+/*******************************
123
+         Site Overrides
124
+*******************************/
125
+

File diff suppressed because it is too large
+ 10 - 0
costs/static/costs/3rd/semantic/components/breadcrumb.min.css


File diff suppressed because it is too large
+ 3322 - 0
costs/static/costs/3rd/semantic/components/button.css


File diff suppressed because it is too large
+ 10 - 0
costs/static/costs/3rd/semantic/components/button.min.css


+ 955 - 0
costs/static/costs/3rd/semantic/components/card.css

@@ -0,0 +1,955 @@
1
+/*!
2
+ * # Semantic UI 2.1.7 - Item
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2015 Contributors
7
+ * Released under the MIT license
8
+ * http://opensource.org/licenses/MIT
9
+ *
10
+ */
11
+
12
+
13
+/*******************************
14
+            Standard
15
+*******************************/
16
+
17
+
18
+/*--------------
19
+      Card
20
+---------------*/
21
+
22
+.ui.cards > .card,
23
+.ui.card {
24
+  max-width: 100%;
25
+  position: relative;
26
+  display: -webkit-box;
27
+  display: -webkit-flex;
28
+  display: -ms-flexbox;
29
+  display: flex;
30
+  -webkit-box-orient: vertical;
31
+  -webkit-box-direction: normal;
32
+  -webkit-flex-direction: column;
33
+      -ms-flex-direction: column;
34
+          flex-direction: column;
35
+  width: 290px;
36
+  min-height: 0px;
37
+  background: #ffffff;
38
+  padding: 0em;
39
+  border: none;
40
+  border-radius: 0.28571429rem;
41
+  box-shadow: 0px 1px 3px 0px #d4d4d5, 0px 0px 0px 1px #d4d4d5;
42
+  -webkit-transition: box-shadow 0.1s ease, -webkit-transform 0.1s ease;
43
+          transition: box-shadow 0.1s ease, transform 0.1s ease;
44
+  z-index: '';
45
+}
46
+.ui.card {
47
+  margin: 1em 0em;
48
+}
49
+.ui.cards > .card a,
50
+.ui.card a {
51
+  cursor: pointer;
52
+}
53
+.ui.card:first-child {
54
+  margin-top: 0em;
55
+}
56
+.ui.card:last-child {
57
+  margin-bottom: 0em;
58
+}
59
+
60
+/*--------------
61
+      Cards
62
+---------------*/
63
+
64
+.ui.cards {
65
+  display: -webkit-box;
66
+  display: -webkit-flex;
67
+  display: -ms-flexbox;
68
+  display: flex;
69
+  margin: -0.875em -0.5em;
70
+  -webkit-flex-wrap: wrap;
71
+      -ms-flex-wrap: wrap;
72
+          flex-wrap: wrap;
73
+}
74
+.ui.cards > .card {
75
+  display: -webkit-box;
76
+  display: -webkit-flex;
77
+  display: -ms-flexbox;
78
+  display: flex;
79
+  margin: 0.875em 0.5em;
80
+  float: none;
81
+}
82
+
83
+/* Clearing */
84
+.ui.cards:after,
85
+.ui.card:after {
86
+  display: block;
87
+  content: ' ';
88
+  height: 0px;
89
+  clear: both;
90
+  overflow: hidden;
91
+  visibility: hidden;
92
+}
93
+
94
+/* Consecutive Card Groups Preserve Row Spacing */
95
+.ui.cards ~ .ui.cards {
96
+  margin-top: 0.875em;
97
+}
98
+
99
+/*--------------
100
+  Rounded Edges
101
+---------------*/
102
+
103
+.ui.cards > .card > :first-child,
104
+.ui.card > :first-child {
105
+  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;
106
+  border-top: none !important;
107
+}
108
+.ui.cards > .card > :last-child,
109
+.ui.card > :last-child {
110
+  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;
111
+}
112
+.ui.cards > .card > :only-child,
113
+.ui.card > :only-child {
114
+  border-radius: 0.28571429rem !important;
115
+}
116
+
117
+/*--------------
118
+     Images
119
+---------------*/
120
+
121
+.ui.cards > .card > .image,
122
+.ui.card > .image {
123
+  position: relative;
124
+  display: block;
125
+  -webkit-box-flex: 0;
126
+  -webkit-flex: 0 0 auto;
127
+      -ms-flex: 0 0 auto;
128
+          flex: 0 0 auto;
129
+  padding: 0em;
130
+  background: rgba(0, 0, 0, 0.05);
131
+}
132
+.ui.cards > .card > .image > img,
133
+.ui.card > .image > img {
134
+  display: block;
135
+  width: 100%;
136
+  height: auto;
137
+  border-radius: inherit;
138
+}
139
+.ui.cards > .card > .image:not(.ui) > img,
140
+.ui.card > .image:not(.ui) > img {
141
+  border: none;
142
+}
143
+
144
+/*--------------
145
+     Content
146
+---------------*/
147
+
148
+.ui.cards > .card > .content,
149
+.ui.card > .content {
150
+  -webkit-box-flex: 1;
151
+  -webkit-flex-grow: 1;
152
+      -ms-flex-positive: 1;
153
+          flex-grow: 1;
154
+  border: none;
155
+  border-top: 1px solid rgba(34, 36, 38, 0.1);
156
+  background: none;
157
+  margin: 0em;
158
+  padding: 1em 1em;
159
+  box-shadow: none;
160
+  font-size: 1em;
161
+  border-radius: 0em;
162
+}
163
+.ui.cards > .card > .content:after,
164
+.ui.card > .content:after {
165
+  display: block;
166
+  content: ' ';
167
+  height: 0px;
168
+  clear: both;
169
+  overflow: hidden;
170
+  visibility: hidden;
171
+}
172
+.ui.cards > .card > .content > .header,
173
+.ui.card > .content > .header {
174
+  display: block;
175
+  margin: '';
176
+  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;
177
+  color: rgba(0, 0, 0, 0.85);
178
+}
179
+
180
+/* Default Header Size */
181
+.ui.cards > .card > .content > .header:not(.ui),
182
+.ui.card > .content > .header:not(.ui) {
183
+  font-weight: bold;
184
+  font-size: 1.28571429em;
185
+  margin-top: -0.21425em;
186
+  line-height: 1.2857em;
187
+}
188
+.ui.cards > .card > .content > .meta + .description,
189
+.ui.cards > .card > .content > .header + .description,
190
+.ui.card > .content > .meta + .description,
191
+.ui.card > .content > .header + .description {
192
+  margin-top: 0.5em;
193
+}
194
+
195
+/*----------------
196
+ Floated Content
197
+-----------------*/
198
+
199
+.ui.cards > .card [class*="left floated"],
200
+.ui.card [class*="left floated"] {
201
+  float: left;
202
+}
203
+.ui.cards > .card [class*="right floated"],
204
+.ui.card [class*="right floated"] {
205
+  float: right;
206
+}
207
+
208
+/*--------------
209
+     Aligned
210
+---------------*/
211
+
212
+.ui.cards > .card [class*="left aligned"],
213
+.ui.card [class*="left aligned"] {
214
+  text-align: left;
215
+}
216
+.ui.cards > .card [class*="center aligned"],
217
+.ui.card [class*="center aligned"] {
218
+  text-align: center;
219
+}
220
+.ui.cards > .card [class*="right aligned"],
221
+.ui.card [class*="right aligned"] {
222
+  text-align: right;
223
+}
224
+
225
+/*--------------
226
+  Content Image
227
+---------------*/
228
+
229
+.ui.cards > .card .content img,
230
+.ui.card .content img {
231
+  display: inline-block;
232
+  vertical-align: middle;
233
+  width: '';
234
+}
235
+.ui.cards > .card img.avatar,
236
+.ui.cards > .card .avatar img,
237
+.ui.card img.avatar,
238
+.ui.card .avatar img {
239
+  width: 2em;
240
+  height: 2em;
241
+  border-radius: 500rem;
242
+}
243
+
244
+/*--------------
245
+   Description
246
+---------------*/
247
+
248
+.ui.cards > .card > .content > .description,
249
+.ui.card > .content > .description {
250
+  clear: both;
251
+  color: rgba(0, 0, 0, 0.68);
252
+}
253
+
254
+/*--------------
255
+    Paragraph
256
+---------------*/
257
+
258
+.ui.cards > .card > .content p,
259
+.ui.card > .content p {
260
+  margin: 0em 0em 0.5em;
261
+}
262
+.ui.cards > .card > .content p:last-child,
263
+.ui.card > .content p:last-child {
264
+  margin-bottom: 0em;
265
+}
266
+
267
+/*--------------
268
+      Meta
269
+---------------*/
270
+
271
+.ui.cards > .card .meta,
272
+.ui.card .meta {
273
+  font-size: 1em;
274
+  color: rgba(0, 0, 0, 0.4);
275
+}
276
+.ui.cards > .card .meta *,
277
+.ui.card .meta * {
278
+  margin-right: 0.3em;
279
+}
280
+.ui.cards > .card .meta :last-child,
281
+.ui.card .meta :last-child {
282
+  margin-right: 0em;
283
+}
284
+.ui.cards > .card .meta [class*="right floated"],
285
+.ui.card .meta [class*="right floated"] {
286
+  margin-right: 0em;
287
+  margin-left: 0.3em;
288
+}
289
+
290
+/*--------------
291
+      Links
292
+---------------*/
293
+
294
+
295
+/* Generic */
296
+.ui.cards > .card > .content a:not(.ui),
297
+.ui.card > .content a:not(.ui) {
298
+  color: '';
299
+  -webkit-transition: color 0.1s ease;
300
+          transition: color 0.1s ease;
301
+}
302
+.ui.cards > .card > .content a:not(.ui):hover,
303
+.ui.card > .content a:not(.ui):hover {
304
+  color: '';
305
+}
306
+
307
+/* Header */
308
+.ui.cards > .card > .content > a.header,
309
+.ui.card > .content > a.header {
310
+  color: rgba(0, 0, 0, 0.85);
311
+}
312
+.ui.cards > .card > .content > a.header:hover,
313
+.ui.card > .content > a.header:hover {
314
+  color: #1e70bf;
315
+}
316
+
317
+/* Meta */
318
+.ui.cards > .card .meta > a:not(.ui),
319
+.ui.card .meta > a:not(.ui) {
320
+  color: rgba(0, 0, 0, 0.4);
321
+}
322
+.ui.cards > .card .meta > a:not(.ui):hover,
323
+.ui.card .meta > a:not(.ui):hover {
324
+  color: rgba(0, 0, 0, 0.87);
325
+}
326
+
327
+/*--------------
328
+     Buttons
329
+---------------*/
330
+
331
+.ui.cards > .card > .buttons,
332
+.ui.card > .buttons,
333
+.ui.cards > .card > .button,
334
+.ui.card > .button {
335
+  margin: 0px -1px;
336
+  width: calc(100% +  2px );
337
+}
338
+
339
+/*--------------
340
+      Dimmer
341
+---------------*/
342
+
343
+.ui.cards > .card .dimmer,
344
+.ui.card .dimmer {
345
+  background-color: '';
346
+  z-index: 10;
347
+}
348
+
349
+/*--------------
350
+     Labels
351
+---------------*/
352
+
353
+
354
+/*-----Star----- */
355
+
356
+
357
+/* Icon */
358
+.ui.cards > .card > .content .star.icon,
359
+.ui.card > .content .star.icon {
360
+  cursor: pointer;
361
+  opacity: 0.75;
362
+  -webkit-transition: color 0.1s ease;
363
+          transition: color 0.1s ease;
364
+}
365
+.ui.cards > .card > .content .star.icon:hover,
366
+.ui.card > .content .star.icon:hover {
367
+  opacity: 1;
368
+  color: #ffb70a;
369
+}
370
+.ui.cards > .card > .content .active.star.icon,
371
+.ui.card > .content .active.star.icon {
372
+  color: #ffe623;
373
+}
374
+
375
+/*-----Like----- */
376
+
377
+
378
+/* Icon */
379
+.ui.cards > .card > .content .like.icon,
380
+.ui.card > .content .like.icon {
381
+  cursor: pointer;
382
+  opacity: 0.75;
383
+  -webkit-transition: color 0.1s ease;
384
+          transition: color 0.1s ease;
385
+}
386
+.ui.cards > .card > .content .like.icon:hover,
387
+.ui.card > .content .like.icon:hover {
388
+  opacity: 1;
389
+  color: #ff2733;
390
+}
391
+.ui.cards > .card > .content .active.like.icon,
392
+.ui.card > .content .active.like.icon {
393
+  color: #ff2733;
394
+}
395
+
396
+/*----------------
397
+  Extra Content
398
+-----------------*/
399
+
400
+.ui.cards > .card > .extra,
401
+.ui.card > .extra {
402
+  max-width: 100%;
403
+  min-height: 0em !important;
404
+  -webkit-box-flex: 0;
405
+  -webkit-flex-grow: 0;
406
+      -ms-flex-positive: 0;
407
+          flex-grow: 0;
408
+  border-top: 1px solid rgba(0, 0, 0, 0.05) !important;
409
+  position: static;
410
+  background: none;
411
+  width: auto;
412
+  margin: 0em 0em;
413
+  padding: 0.75em 1em;
414
+  top: 0em;
415
+  left: 0em;
416
+  color: rgba(0, 0, 0, 0.4);
417
+  box-shadow: none;
418
+  -webkit-transition: color 0.1s ease;
419
+          transition: color 0.1s ease;
420
+}
421
+.ui.cards > .card > .extra a:not(.ui),
422
+.ui.card > .extra a:not(.ui) {
423
+  color: rgba(0, 0, 0, 0.4);
424
+}
425
+.ui.cards > .card > .extra a:not(.ui):hover,
426
+.ui.card > .extra a:not(.ui):hover {
427
+  color: #1e70bf;
428
+}
429
+
430
+
431
+/*******************************
432
+           Variations
433
+*******************************/
434
+
435
+
436
+/*-------------------
437
+       Centered
438
+--------------------*/
439
+
440
+.ui.centered.cards {
441
+  -webkit-box-pack: center;
442
+  -webkit-justify-content: center;
443
+      -ms-flex-pack: center;
444
+          justify-content: center;
445
+}
446
+.ui.centered.card {
447
+  margin-left: auto;
448
+  margin-right: auto;
449
+}
450
+
451
+/*-------------------
452
+        Fluid
453
+--------------------*/
454
+
455
+.ui.fluid.card {
456
+  width: 100%;
457
+  max-width: 9999px;
458
+}
459
+
460
+/*-------------------
461
+        Link
462
+--------------------*/
463
+
464
+.ui.cards a.card,
465
+.ui.link.cards .card,
466
+a.ui.card,
467
+.ui.link.card {
468
+  -webkit-transform: none;
469
+      -ms-transform: none;
470
+          transform: none;
471
+}
472
+.ui.cards a.card:hover,
473
+.ui.link.cards .card:hover,
474
+a.ui.card:hover,
475
+.ui.link.card:hover {
476
+  cursor: pointer;
477
+  z-index: 5;
478
+  background: #ffffff;
479
+  border: none;
480
+  box-shadow: 0px 1px 3px 0px #bcbdbd, 0px 0px 0px 1px #d4d4d5;
481
+  -webkit-transform: translateY(-3px);
482
+      -ms-transform: translateY(-3px);
483
+          transform: translateY(-3px);
484
+}
485
+
486
+/*-------------------
487
+       Colors
488
+--------------------*/
489
+
490
+
491
+/* Red */
492
+.ui.red.cards > .card,
493
+.ui.cards > .red.card,
494
+.ui.red.card {
495
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #db2828, 0px 1px 3px 0px #d4d4d5;
496
+}
497
+.ui.red.cards > .card:hover,
498
+.ui.cards > .red.card:hover,
499
+.ui.red.card:hover {
500
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #bcbdbd;
501
+}
502
+
503
+/* Orange */
504
+.ui.orange.cards > .card,
505
+.ui.cards > .orange.card,
506
+.ui.orange.card {
507
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #f2711c, 0px 1px 3px 0px #d4d4d5;
508
+}
509
+.ui.orange.cards > .card:hover,
510
+.ui.cards > .orange.card:hover,
511
+.ui.orange.card:hover {
512
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #bcbdbd;
513
+}
514
+
515
+/* Yellow */
516
+.ui.yellow.cards > .card,
517
+.ui.cards > .yellow.card,
518
+.ui.yellow.card {
519
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #fbbd08, 0px 1px 3px 0px #d4d4d5;
520
+}
521
+.ui.yellow.cards > .card:hover,
522
+.ui.cards > .yellow.card:hover,
523
+.ui.yellow.card:hover {
524
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #bcbdbd;
525
+}
526
+
527
+/* Olive */
528
+.ui.olive.cards > .card,
529
+.ui.cards > .olive.card,
530
+.ui.olive.card {
531
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #b5cc18, 0px 1px 3px 0px #d4d4d5;
532
+}
533
+.ui.olive.cards > .card:hover,
534
+.ui.cards > .olive.card:hover,
535
+.ui.olive.card:hover {
536
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #bcbdbd;
537
+}
538
+
539
+/* Green */
540
+.ui.green.cards > .card,
541
+.ui.cards > .green.card,
542
+.ui.green.card {
543
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #21ba45, 0px 1px 3px 0px #d4d4d5;
544
+}
545
+.ui.green.cards > .card:hover,
546
+.ui.cards > .green.card:hover,
547
+.ui.green.card:hover {
548
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #bcbdbd;
549
+}
550
+
551
+/* Teal */
552
+.ui.teal.cards > .card,
553
+.ui.cards > .teal.card,
554
+.ui.teal.card {
555
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #00b5ad, 0px 1px 3px 0px #d4d4d5;
556
+}
557
+.ui.teal.cards > .card:hover,
558
+.ui.cards > .teal.card:hover,
559
+.ui.teal.card:hover {
560
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #bcbdbd;
561
+}
562
+
563
+/* Blue */
564
+.ui.blue.cards > .card,
565
+.ui.cards > .blue.card,
566
+.ui.blue.card {
567
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #2185d0, 0px 1px 3px 0px #d4d4d5;
568
+}
569
+.ui.blue.cards > .card:hover,
570
+.ui.cards > .blue.card:hover,
571
+.ui.blue.card:hover {
572
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #bcbdbd;
573
+}
574
+
575
+/* Violet */
576
+.ui.violet.cards > .card,
577
+.ui.cards > .violet.card,
578
+.ui.violet.card {
579
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #6435c9, 0px 1px 3px 0px #d4d4d5;
580
+}
581
+.ui.violet.cards > .card:hover,
582
+.ui.cards > .violet.card:hover,
583
+.ui.violet.card:hover {
584
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #bcbdbd;
585
+}
586
+
587
+/* Purple */
588
+.ui.purple.cards > .card,
589
+.ui.cards > .purple.card,
590
+.ui.purple.card {
591
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #a333c8, 0px 1px 3px 0px #d4d4d5;
592
+}
593
+.ui.purple.cards > .card:hover,
594
+.ui.cards > .purple.card:hover,
595
+.ui.purple.card:hover {
596
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #bcbdbd;
597
+}
598
+
599
+/* Pink */
600
+.ui.pink.cards > .card,
601
+.ui.cards > .pink.card,
602
+.ui.pink.card {
603
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #e03997, 0px 1px 3px 0px #d4d4d5;
604
+}
605
+.ui.pink.cards > .card:hover,
606
+.ui.cards > .pink.card:hover,
607
+.ui.pink.card:hover {
608
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #bcbdbd;
609
+}
610
+
611
+/* Brown */
612
+.ui.brown.cards > .card,
613
+.ui.cards > .brown.card,
614
+.ui.brown.card {
615
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #a5673f, 0px 1px 3px 0px #d4d4d5;
616
+}
617
+.ui.brown.cards > .card:hover,
618
+.ui.cards > .brown.card:hover,
619
+.ui.brown.card:hover {
620
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #bcbdbd;
621
+}
622
+
623
+/* Grey */
624
+.ui.grey.cards > .card,
625
+.ui.cards > .grey.card,
626
+.ui.grey.card {
627
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #d4d4d5;
628
+}
629
+.ui.grey.cards > .card:hover,
630
+.ui.cards > .grey.card:hover,
631
+.ui.grey.card:hover {
632
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #bcbdbd;
633
+}
634
+
635
+/* Black */
636
+.ui.black.cards > .card,
637
+.ui.cards > .black.card,
638
+.ui.black.card {
639
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #1b1c1d, 0px 1px 3px 0px #d4d4d5;
640
+}
641
+.ui.black.cards > .card:hover,
642
+.ui.cards > .black.card:hover,
643
+.ui.black.card:hover {
644
+  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #bcbdbd;
645
+}
646
+
647
+/*--------------
648
+   Card Count
649
+---------------*/
650
+
651
+.ui.one.cards {
652
+  margin-left: 0em;
653
+  margin-right: 0em;
654
+}
655
+.ui.one.cards > .card {
656
+  width: 100%;
657
+}
658
+.ui.two.cards {
659
+  margin-left: -1em;
660
+  margin-right: -1em;
661
+}
662
+.ui.two.cards > .card {
663
+  width: calc( 50%  -  2em );
664
+  margin-left: 1em;
665
+  margin-right: 1em;
666
+}
667
+.ui.three.cards {
668
+  margin-left: -1em;
669
+  margin-right: -1em;
670
+}
671
+.ui.three.cards > .card {
672
+  width: calc( 33.33333333%  -  2em );
673
+  margin-left: 1em;
674
+  margin-right: 1em;
675
+}
676
+.ui.four.cards {
677
+  margin-left: -0.75em;
678
+  margin-right: -0.75em;
679
+}
680
+.ui.four.cards > .card {
681
+  width: calc( 25%  -  1.5em );
682
+  margin-left: 0.75em;
683
+  margin-right: 0.75em;
684
+}
685
+.ui.five.cards {
686
+  margin-left: -0.75em;
687
+  margin-right: -0.75em;
688
+}
689
+.ui.five.cards > .card {
690
+  width: calc( 20%  -  1.5em );
691
+  margin-left: 0.75em;
692
+  margin-right: 0.75em;
693
+}
694
+.ui.six.cards {
695
+  margin-left: -0.75em;
696
+  margin-right: -0.75em;
697
+}
698
+.ui.six.cards > .card {
699
+  width: calc( 16.66666667%  -  1.5em );
700
+  margin-left: 0.75em;
701
+  margin-right: 0.75em;
702
+}
703
+.ui.seven.cards {
704
+  margin-left: -0.5em;
705
+  margin-right: -0.5em;
706
+}
707
+.ui.seven.cards > .card {
708
+  width: calc( 14.28571429%  -  1em );
709
+  margin-left: 0.5em;
710
+  margin-right: 0.5em;
711
+}
712
+.ui.eight.cards {
713
+  margin-left: -0.5em;
714
+  margin-right: -0.5em;
715
+}
716
+.ui.eight.cards > .card {
717
+  width: calc( 12.5%  -  1em );
718
+  margin-left: 0.5em;
719
+  margin-right: 0.5em;
720
+  font-size: 11px;
721
+}
722
+.ui.nine.cards {
723
+  margin-left: -0.5em;
724
+  margin-right: -0.5em;
725
+}
726
+.ui.nine.cards > .card {
727
+  width: calc( 11.11111111%  -  1em );
728
+  margin-left: 0.5em;
729
+  margin-right: 0.5em;
730
+  font-size: 10px;
731
+}
732
+.ui.ten.cards {
733
+  margin-left: -0.5em;
734
+  margin-right: -0.5em;
735
+}
736
+.ui.ten.cards > .card {
737
+  width: calc( 10%  -  1em );
738
+  margin-left: 0.5em;
739
+  margin-right: 0.5em;
740
+}
741
+
742
+/*-------------------
743
+      Doubling
744
+--------------------*/
745
+
746
+
747
+/* Mobily Only */
748
+@media only screen and (max-width: 767px) {
749
+  .ui.two.doubling.cards {
750
+    margin-left: 0em;
751
+    margin-right: 0em;
752
+  }
753
+  .ui.two.doubling.cards .card {
754
+    width: 100%;
755
+    margin-left: 0em;
756
+    margin-right: 0em;
757
+  }
758
+  .ui.three.doubling.cards {
759
+    margin-left: -1em;
760
+    margin-right: -1em;
761
+  }
762
+  .ui.three.doubling.cards .card {
763
+    width: calc( 50%  -  2em );
764
+    margin-left: 1em;
765
+    margin-right: 1em;
766
+  }
767
+  .ui.four.doubling.cards {
768
+    margin-left: -1em;
769
+    margin-right: -1em;
770
+  }
771
+  .ui.four.doubling.cards .card {
772
+    width: calc( 50%  -  2em );
773
+    margin-left: 1em;
774
+    margin-right: 1em;
775
+  }
776
+  .ui.five.doubling.cards {
777
+    margin-left: -1em;
778
+    margin-right: -1em;
779
+  }
780
+  .ui.five.doubling.cards .card {
781
+    width: calc( 50%  -  2em );
782
+    margin-left: 1em;
783
+    margin-right: 1em;
784
+  }
785
+  .ui.six.doubling.cards {
786
+    margin-left: -1em;
787
+    margin-right: -1em;
788
+  }
789
+  .ui.six.doubling.cards .card {
790
+    width: calc( 50%  -  2em );
791
+    margin-left: 1em;
792
+    margin-right: 1em;
793
+  }
794
+  .ui.seven.doubling.cards {
795
+    margin-left: -1em;
796
+    margin-right: -1em;
797
+  }
798
+  .ui.seven.doubling.cards .card {
799
+    width: calc( 33.33333333%  -  2em );
800
+    margin-left: 1em;
801
+    margin-right: 1em;
802
+  }
803
+  .ui.eight.doubling.cards {
804
+    margin-left: -1em;
805
+    margin-right: -1em;
806
+  }
807
+  .ui.eight.doubling.cards .card {
808
+    width: calc( 33.33333333%  -  2em );
809
+    margin-left: 1em;
810
+    margin-right: 1em;
811
+  }
812
+  .ui.nine.doubling.cards {
813
+    margin-left: -1em;
814
+    margin-right: -1em;
815
+  }
816
+  .ui.nine.doubling.cards .card {
817
+    width: calc( 33.33333333%  -  2em );
818
+    margin-left: 1em;
819
+    margin-right: 1em;
820
+  }
821
+  .ui.ten.doubling.cards {
822
+    margin-left: -1em;
823
+    margin-right: -1em;
824
+  }
825
+  .ui.ten.doubling.cards .card {
826
+    width: calc( 33.33333333%  -  2em );
827
+    margin-left: 1em;
828
+    margin-right: 1em;
829
+  }
830
+}
831
+
832
+/* Tablet Only */
833
+@media only screen and (min-width: 768px) and (max-width: 991px) {
834
+  .ui.two.doubling.cards {
835
+    margin-left: 0em;
836
+    margin-right: 0em;
837
+  }
838
+  .ui.two.doubling.cards .card {
839
+    width: 100%;
840
+    margin-left: 0em;
841
+    margin-right: 0em;
842
+  }
843
+  .ui.three.doubling.cards {
844
+    margin-left: -1em;
845
+    margin-right: -1em;
846
+  }
847
+  .ui.three.doubling.cards .card {
848
+    width: calc( 50%  -  2em );
849
+    margin-left: 1em;
850
+    margin-right: 1em;
851
+  }
852
+  .ui.four.doubling.cards {
853
+    margin-left: -1em;
854
+    margin-right: -1em;
855
+  }
856
+  .ui.four.doubling.cards .card {
857
+    width: calc( 50%  -  2em );
858
+    margin-left: 1em;
859
+    margin-right: 1em;
860
+  }
861
+  .ui.five.doubling.cards {
862
+    margin-left: -1em;
863
+    margin-right: -1em;
864
+  }
865
+  .ui.five.doubling.cards .card {
866
+    width: calc( 33.33333333%  -  2em );
867
+    margin-left: 1em;
868
+    margin-right: 1em;
869
+  }
870
+  .ui.six.doubling.cards {
871
+    margin-left: -1em;
872
+    margin-right: -1em;
873
+  }
874
+  .ui.six.doubling.cards .card {
875
+    width: calc( 33.33333333%  -  2em );
876
+    margin-left: 1em;
877
+    margin-right: 1em;
878
+  }
879
+  .ui.eight.doubling.cards {
880
+    margin-left: -1em;
881
+    margin-right: -1em;
882
+  }
883
+  .ui.eight.doubling.cards .card {
884
+    width: calc( 33.33333333%  -  2em );
885
+    margin-left: 1em;
886
+    margin-right: 1em;
887
+  }
888
+  .ui.eight.doubling.cards {
889
+    margin-left: -0.75em;
890
+    margin-right: -0.75em;
891
+  }
892
+  .ui.eight.doubling.cards .card {
893
+    width: calc( 25%  -  1.5em );
894
+    margin-left: 0.75em;
895
+    margin-right: 0.75em;
896
+  }
897
+  .ui.nine.doubling.cards {
898
+    margin-left: -0.75em;
899
+    margin-right: -0.75em;
900
+  }
901
+  .ui.nine.doubling.cards .card {
902
+    width: calc( 25%  -  1.5em );
903
+    margin-left: 0.75em;
904
+    margin-right: 0.75em;
905
+  }
906
+  .ui.ten.doubling.cards {
907
+    margin-left: -0.75em;
908
+    margin-right: -0.75em;
909
+  }
910
+  .ui.ten.doubling.cards .card {
911
+    width: calc( 20%  -  1.5em );
912
+    margin-left: 0.75em;
913
+    margin-right: 0.75em;
914
+  }
915
+}
916
+
917
+/*-------------------
918
+      Stackable
919
+--------------------*/
920
+
921
+@media only screen and (max-width: 767px) {
922
+  .ui.stackable.cards {
923
+    display: block !important;
924
+  }
925
+  .ui.stackable.cards .card:first-child {
926
+    margin-top: 0em !important;
927
+  }
928
+  .ui.stackable.cards > .card {
929
+    display: block !important;
930
+    height: auto !important;
931
+    margin: 1em 1em;
932
+    padding: 0 !important;
933
+    width: calc( 100%  -  2em ) !important;
934
+  }
935
+}
936
+
937
+/*--------------
938
+      Size
939
+---------------*/
940
+
941
+.ui.cards > .card {
942
+  font-size: 1em;
943
+}
944
+
945
+
946
+/*******************************
947
+         Theme Overrides
948
+*******************************/
949
+
950
+
951
+
952
+/*******************************
953
+    User Variable Overrides
954
+*******************************/
955
+

File diff suppressed because it is too large
+ 10 - 0
costs/static/costs/3rd/semantic/components/card.min.css


File diff suppressed because it is too large
+ 624 - 0
costs/static/costs/3rd/semantic/components/checkbox.css


+ 809 - 0
costs/static/costs/3rd/semantic/components/checkbox.js

@@ -0,0 +1,809 @@
1
+/*!
2
+ * # Semantic UI 2.1.7 - Checkbox
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2015 Contributors
7
+ * Released under the MIT license
8
+ * http://opensource.org/licenses/MIT
9
+ *
10
+ */
11
+
12
+;(function ( $, window, document, undefined ) {
13
+
14
+"use strict";
15
+
16
+$.fn.checkbox = function(parameters) {
17
+  var
18
+    $allModules    = $(this),
19
+    moduleSelector = $allModules.selector || '',
20
+
21
+    time           = new Date().getTime(),
22
+    performance    = [],
23
+
24
+    query          = arguments[0],
25
+    methodInvoked  = (typeof query == 'string'),
26
+    queryArguments = [].slice.call(arguments, 1),
27
+    returnedValue
28
+  ;
29
+
30
+  $allModules
31
+    .each(function() {
32
+      var
33
+        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),
34
+
35
+        className       = settings.className,
36
+        namespace       = settings.namespace,
37
+        selector        = settings.selector,
38
+        error           = settings.error,
39
+
40
+        eventNamespace  = '.' + namespace,
41
+        moduleNamespace = 'module-' + namespace,
42
+
43
+        $module         = $(this),
44
+        $label          = $(this).children(selector.label),
45
+        $input          = $(this).children(selector.input),
46
+        input           = $input[0],
47
+
48
+        initialLoad     = false,
49
+        shortcutPressed = false,
50
+        instance        = $module.data(moduleNamespace),
51
+
52
+        observer,
53
+        element         = this,
54
+        module
55
+      ;
56
+
57
+      module      = {
58
+
59
+        initialize: function() {
60
+          module.verbose('Initializing checkbox', settings);
61
+
62
+          module.create.label();
63
+          module.bind.events();
64
+
65
+          module.set.tabbable();
66
+          module.hide.input();
67
+
68
+          module.observeChanges();
69
+          module.instantiate();
70
+          module.setup();
71
+        },
72
+
73
+        instantiate: function() {
74
+          module.verbose('Storing instance of module', module);
75
+          instance = module;
76
+          $module
77
+            .data(moduleNamespace, module)
78
+          ;
79
+        },
80
+
81
+        destroy: function() {
82
+          module.verbose('Destroying module');
83
+          module.unbind.events();
84
+          module.show.input();
85
+          $module.removeData(moduleNamespace);
86
+        },
87
+
88
+        fix: {
89
+          reference: function() {
90
+            if( $module.is(selector.input) ) {
91
+              module.debug('Behavior called on <input> adjusting invoked element');
92
+              $module = $module.closest(selector.checkbox);
93
+              module.refresh();
94
+            }
95
+          }
96
+        },
97
+
98
+        setup: function() {
99
+          module.set.initialLoad();
100
+          if( module.is.indeterminate() ) {
101
+            module.debug('Initial value is indeterminate');
102
+            module.indeterminate();
103
+          }
104
+          else if( module.is.checked() ) {
105
+            module.debug('Initial value is checked');
106
+            module.check();
107
+          }
108
+          else {
109
+            module.debug('Initial value is unchecked');
110
+            module.uncheck();
111
+          }
112
+          module.remove.initialLoad();
113
+        },
114
+
115
+        refresh: function() {
116
+          $label = $module.children(selector.label);
117
+          $input = $module.children(selector.input);
118
+          input  = $input[0];
119
+        },
120
+
121
+        hide: {
122
+          input: function() {
123
+            module.verbose('Modfying <input> z-index to be unselectable');
124
+            $input.addClass(className.hidden);
125
+          }
126
+        },
127
+        show: {
128
+          input: function() {
129
+            module.verbose('Modfying <input> z-index to be selectable');
130
+            $input.removeClass(className.hidden);
131
+          }
132
+        },
133
+
134
+        observeChanges: function() {
135
+          if('MutationObserver' in window) {
136
+            observer = new MutationObserver(function(mutations) {
137
+              module.debug('DOM tree modified, updating selector cache');
138
+              module.refresh();
139
+            });
140
+            observer.observe(element, {
141
+              childList : true,
142
+              subtree   : true
143
+            });
144
+            module.debug('Setting up mutation observer', observer);
145
+          }
146
+        },
147
+
148
+        attachEvents: function(selector, event) {
149
+          var
150
+            $element = $(selector)
151
+          ;
152
+          event = $.isFunction(module[event])
153
+            ? module[event]
154
+            : module.toggle
155
+          ;
156
+          if($element.length > 0) {
157
+            module.debug('Attaching checkbox events to element', selector, event);
158
+            $element
159
+              .on('click' + eventNamespace, event)
160
+            ;
161
+          }
162
+          else {
163
+            module.error(error.notFound);
164
+          }
165
+        },
166
+
167
+        event: {
168
+          click: function(event) {
169
+            var
170
+              $target = $(event.target)
171
+            ;
172
+            if( $target.is(selector.input) ) {
173
+              module.verbose('Using default check action on initialized checkbox');
174
+              return;
175
+            }
176
+            if( $target.is(selector.link) ) {
177
+              module.debug('Clicking link inside checkbox, skipping toggle');
178
+              return;
179
+            }
180
+            module.toggle();
181
+            $input.focus();
182
+            event.preventDefault();
183
+          },
184
+          keydown: function(event) {
185
+            var
186
+              key     = event.which,
187
+              keyCode = {
188
+                enter  : 13,
189
+                space  : 32,
190
+                escape : 27
191
+              }
192
+            ;
193
+            if(key == keyCode.escape) {
194
+              module.verbose('Escape key pressed blurring field');
195
+              $input.blur();
196
+              shortcutPressed = true;
197
+            }
198
+            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {
199
+              module.verbose('Enter/space key pressed, toggling checkbox');
200
+              module.toggle();
201
+              shortcutPressed = true;
202
+            }
203
+            else {
204
+              shortcutPressed = false;
205
+            }
206
+          },
207
+          keyup: function(event) {
208
+            if(shortcutPressed) {
209
+              event.preventDefault();
210
+            }
211
+          }
212
+        },
213
+
214
+        check: function() {
215
+          if( !module.should.allowCheck() ) {
216
+            return;
217
+          }
218
+          module.debug('Checking checkbox', $input);
219
+          module.set.checked();
220
+          if( !module.should.ignoreCallbacks() ) {
221
+            settings.onChecked.call(input);
222
+            settings.onChange.call(input);
223
+          }
224
+        },
225
+
226
+        uncheck: function() {
227
+          if( !module.should.allowUncheck() ) {
228
+            return;
229
+          }
230
+          module.debug('Unchecking checkbox');
231
+          module.set.unchecked();
232
+          if( !module.should.ignoreCallbacks() ) {
233
+            settings.onUnchecked.call(input);
234
+            settings.onChange.call(input);
235
+          }
236
+        },
237
+
238
+        indeterminate: function() {
239
+          if( module.should.allowIndeterminate() ) {
240
+            module.debug('Checkbox is already indeterminate');
241
+            return;
242
+          }
243
+          module.debug('Making checkbox indeterminate');
244
+          module.set.indeterminate();
245
+          if( !module.should.ignoreCallbacks() ) {
246
+            settings.onIndeterminate.call(input);
247
+            settings.onChange.call(input);
248
+          }
249
+        },
250
+
251
+        determinate: function() {
252
+          if( module.should.allowDeterminate() ) {
253
+            module.debug('Checkbox is already determinate');
254
+            return;
255
+          }
256
+          module.debug('Making checkbox determinate');
257
+          module.set.determinate();
258
+          if( !module.should.ignoreCallbacks() ) {
259
+            settings.onDeterminate.call(input);
260
+            settings.onChange.call(input);
261
+          }
262
+        },
263
+
264
+        enable: function() {
265
+          if( module.is.enabled() ) {
266
+            module.debug('Checkbox is already enabled');
267
+            return;
268
+          }
269
+          module.debug('Enabling checkbox');
270
+          module.set.enabled();
271
+          settings.onEnabled.call(input);
272
+        },
273
+
274
+        disable: function() {
275
+          if( module.is.disabled() ) {
276
+            module.debug('Checkbox is already disabled');
277
+            return;
278
+          }
279
+          module.debug('Disabling checkbox');
280
+          module.set.disabled();
281
+          settings.onDisabled.call(input);
282
+        },
283
+
284
+        get: {
285
+          radios: function() {
286
+            var
287
+              name = module.get.name()
288
+            ;
289
+            return $('input[name="' + name + '"]').closest(selector.checkbox);
290
+          },
291
+          otherRadios: function() {
292
+            return module.get.radios().not($module);
293
+          },
294
+          name: function() {
295
+            return $input.attr('name');
296
+          }
297
+        },
298
+
299
+        is: {
300
+          initialLoad: function() {
301
+            return initialLoad;
302
+          },
303
+          radio: function() {
304
+            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');
305
+          },
306
+          indeterminate: function() {
307
+            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');
308
+          },
309
+          checked: function() {
310
+            return $input.prop('checked') !== undefined && $input.prop('checked');
311
+          },
312
+          disabled: function() {
313
+            return $input.prop('disabled') !== undefined && $input.prop('disabled');
314
+          },
315
+          enabled: function() {
316
+            return !module.is.disabled();
317
+          },
318
+          determinate: function() {
319
+            return !module.is.indeterminate();
320
+          },
321
+          unchecked: function() {
322
+            return !module.is.checked();
323
+          }
324
+        },
325
+
326
+        should: {
327
+          allowCheck: function() {
328
+            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {
329
+              module.debug('Should not allow check, checkbox is already checked');
330
+              return false;
331
+            }
332
+            if(settings.beforeChecked.apply(input) === false) {
333
+              module.debug('Should not allow check, beforeChecked cancelled');
334
+              return false;
335
+            }
336
+            return true;
337
+          },
338
+          allowUncheck: function() {
339
+            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {
340
+              module.debug('Should not allow uncheck, checkbox is already unchecked');
341
+              return false;
342
+            }
343
+            if(settings.beforeUnchecked.apply(input) === false) {
344
+              module.debug('Should not allow uncheck, beforeUnchecked cancelled');
345
+              return false;
346
+            }
347
+            return true;
348
+          },
349
+          allowIndeterminate: function() {
350
+            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {
351
+              module.debug('Should not allow indeterminate, checkbox is already indeterminate');
352
+              return false;
353
+            }
354
+            if(settings.beforeIndeterminate.apply(input) === false) {
355
+              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');
356
+              return false;
357
+            }
358
+            return true;
359
+          },
360
+          allowDeterminate: function() {
361
+            if(module.is.determinate() && !module.should.forceCallbacks() ) {
362
+              module.debug('Should not allow determinate, checkbox is already determinate');
363
+              return false;
364
+            }
365
+            if(settings.beforeDeterminate.apply(input) === false) {
366
+              module.debug('Should not allow determinate, beforeDeterminate cancelled');
367
+              return false;
368
+            }
369
+            return true;
370
+          },
371
+          forceCallbacks: function() {
372
+            return (module.is.initialLoad() && settings.fireOnInit);
373
+          },
374
+          ignoreCallbacks: function() {
375
+            return (initialLoad && !settings.fireOnInit);
376
+          }
377
+        },
378
+
379
+        can: {
380
+          change: function() {
381
+            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );
382
+          },
383
+          uncheck: function() {
384
+            return (typeof settings.uncheckable === 'boolean')
385
+              ? settings.uncheckable
386
+              : !module.is.radio()
387
+            ;
388
+          }
389
+        },
390
+
391
+        set: {
392
+          initialLoad: function() {
393
+            initialLoad = true;
394
+          },
395
+          checked: function() {
396
+            module.verbose('Setting class to checked');
397
+            $module
398
+              .removeClass(className.indeterminate)
399
+              .addClass(className.checked)
400
+            ;
401
+            if( module.is.radio() ) {
402
+              module.uncheckOthers();
403
+            }
404
+            if(!module.is.indeterminate() && module.is.checked()) {
405
+              module.debug('Input is already checked, skipping input property change');
406
+              return;
407
+            }
408
+            module.verbose('Setting state to checked', input);
409
+            $input
410
+              .prop('indeterminate', false)
411
+              .prop('checked', true)
412
+            ;
413
+            module.trigger.change();
414
+          },
415
+          unchecked: function() {
416
+            module.verbose('Removing checked class');
417
+            $module
418
+              .removeClass(className.indeterminate)
419
+              .removeClass(className.checked)
420
+            ;
421
+            if(!module.is.indeterminate() &&  module.is.unchecked() ) {
422
+              module.debug('Input is already unchecked');
423
+              return;
424
+            }
425
+            module.debug('Setting state to unchecked');
426
+            $input
427
+              .prop('indeterminate', false)
428
+              .prop('checked', false)
429
+            ;
430
+            module.trigger.change();
431
+          },
432
+          indeterminate: function() {
433
+            module.verbose('Setting class to indeterminate');
434
+            $module
435
+              .addClass(className.indeterminate)
436
+            ;
437
+            if( module.is.indeterminate() ) {
438
+              module.debug('Input is already indeterminate, skipping input property change');
439
+              return;
440
+            }
441
+            module.debug('Setting state to indeterminate');
442
+            $input
443
+              .prop('indeterminate', true)
444
+            ;
445
+            module.trigger.change();
446
+          },
447
+          determinate: function() {
448
+            module.verbose('Removing indeterminate class');
449
+            $module
450
+              .removeClass(className.indeterminate)
451
+            ;
452
+            if( module.is.determinate() ) {
453
+              module.debug('Input is already determinate, skipping input property change');
454
+              return;
455
+            }
456
+            module.debug('Setting state to determinate');
457
+            $input
458
+              .prop('indeterminate', false)
459
+            ;
460
+          },
461
+          disabled: function() {
462
+            module.verbose('Setting class to disabled');
463
+            $module
464
+              .addClass(className.disabled)
465
+            ;
466
+            if( module.is.disabled() ) {
467
+              module.debug('Input is already disabled, skipping input property change');
468
+              return;
469
+            }
470
+            module.debug('Setting state to disabled');
471
+            $input
472
+              .prop('disabled', 'disabled')
473
+            ;
474
+            module.trigger.change();
475
+          },
476
+          enabled: function() {
477
+            module.verbose('Removing disabled class');
478
+            $module.removeClass(className.disabled);
479
+            if( module.is.enabled() ) {
480
+              module.debug('Input is already enabled, skipping input property change');
481
+              return;
482
+            }
483
+            module.debug('Setting state to enabled');
484
+            $input
485
+              .prop('disabled', false)
486
+            ;
487
+            module.trigger.change();
488
+          },
489
+          tabbable: function() {
490
+            module.verbose('Adding tabindex to checkbox');
491
+            if( $input.attr('tabindex') === undefined) {
492
+              $input.attr('tabindex', 0);
493
+            }
494
+          }
495
+        },
496
+
497
+        remove: {
498
+          initialLoad: function() {
499
+            initialLoad = false;
500
+          }
501
+        },
502
+
503
+        trigger: {
504
+          change: function() {
505
+            var
506
+              events       = document.createEvent('HTMLEvents'),
507
+              inputElement = $input[0]
508
+            ;
509
+            if(inputElement) {
510
+              module.verbose('Triggering native change event');
511
+              events.initEvent('change', true, false);
512
+              inputElement.dispatchEvent(events);
513
+            }
514
+          }
515
+        },
516
+
517
+
518
+        create: {
519
+          label: function() {
520
+            if($input.prevAll(selector.label).length > 0) {
521
+              $input.prev(selector.label).detach().insertAfter($input);
522
+              module.debug('Moving existing label', $label);
523
+            }
524
+            else if( !module.has.label() ) {
525
+              $label = $('<label>').insertAfter($input);
526
+              module.debug('Creating label', $label);
527
+            }
528
+          }
529
+        },
530
+
531
+        has: {
532
+          label: function() {
533
+            return ($label.length > 0);
534
+          }
535
+        },
536
+
537
+        bind: {
538
+          events: function() {
539
+            module.verbose('Attaching checkbox events');
540
+            $module
541
+              .on('click'   + eventNamespace, module.event.click)
542
+              .on('keydown' + eventNamespace, selector.input, module.event.keydown)
543
+              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)
544
+            ;
545
+          }
546
+        },
547
+
548
+        unbind: {
549
+          events: function() {
550
+            module.debug('Removing events');
551
+            $module
552
+              .off(eventNamespace)
553
+            ;
554
+          }
555
+        },
556
+
557
+        uncheckOthers: function() {
558
+          var
559
+            $radios = module.get.otherRadios()
560
+          ;
561
+          module.debug('Unchecking other radios', $radios);
562
+          $radios.removeClass(className.checked);
563
+        },
564
+
565
+        toggle: function() {
566
+          if( !module.can.change() ) {
567
+            if(!module.is.radio()) {
568
+              module.debug('Checkbox is read-only or disabled, ignoring toggle');
569
+            }
570
+            return;
571
+          }
572
+          if( module.is.indeterminate() || module.is.unchecked() ) {
573
+            module.debug('Currently unchecked');
574
+            module.check();
575
+          }
576
+          else if( module.is.checked() && module.can.uncheck() ) {
577
+            module.debug('Currently checked');
578
+            module.uncheck();
579
+          }
580
+        },
581
+        setting: function(name, value) {
582
+          module.debug('Changing setting', name, value);
583
+          if( $.isPlainObject(name) ) {
584
+            $.extend(true, settings, name);
585
+          }
586
+          else if(value !== undefined) {
587
+            settings[name] = value;
588
+          }
589
+          else {
590
+            return settings[name];
591
+          }
592
+        },
593
+        internal: function(name, value) {
594
+          if( $.isPlainObject(name) ) {
595
+            $.extend(true, module, name);
596
+          }
597
+          else if(value !== undefined) {
598
+            module[name] = value;
599
+          }
600
+          else {
601
+            return module[name];
602
+          }
603
+        },
604
+        debug: function() {
605
+          if(settings.debug) {
606
+            if(settings.performance) {
607
+              module.performance.log(arguments);
608
+            }
609
+            else {
610
+              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
611
+              module.debug.apply(console, arguments);
612
+            }
613
+          }
614
+        },
615
+        verbose: function() {
616
+          if(settings.verbose && settings.debug) {
617
+            if(settings.performance) {
618
+              module.performance.log(arguments);
619
+            }
620
+            else {
621
+              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
622
+              module.verbose.apply(console, arguments);
623
+            }
624
+          }
625
+        },
626
+        error: function() {
627
+          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
628
+          module.error.apply(console, arguments);
629
+        },
630
+        performance: {
631
+          log: function(message) {
632
+            var
633
+              currentTime,
634
+              executionTime,
635
+              previousTime
636
+            ;
637
+            if(settings.performance) {
638
+              currentTime   = new Date().getTime();
639
+              previousTime  = time || currentTime;
640
+              executionTime = currentTime - previousTime;
641
+              time          = currentTime;
642
+              performance.push({
643
+                'Name'           : message[0],
644
+                'Arguments'      : [].slice.call(message, 1) || '',
645
+                'Element'        : element,
646
+                'Execution Time' : executionTime
647
+              });
648
+            }
649
+            clearTimeout(module.performance.timer);
650
+            module.performance.timer = setTimeout(module.performance.display, 500);
651
+          },
652
+          display: function() {
653
+            var
654
+              title = settings.name + ':',
655
+              totalTime = 0
656
+            ;
657
+            time = false;
658
+            clearTimeout(module.performance.timer);
659
+            $.each(performance, function(index, data) {
660
+              totalTime += data['Execution Time'];
661
+            });
662
+            title += ' ' + totalTime + 'ms';
663
+            if(moduleSelector) {
664
+              title += ' \'' + moduleSelector + '\'';
665
+            }
666
+            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
667
+              console.groupCollapsed(title);
668
+              if(console.table) {
669
+                console.table(performance);
670
+              }
671
+              else {
672
+                $.each(performance, function(index, data) {
673
+                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
674
+                });
675
+              }
676
+              console.groupEnd();
677
+            }
678
+            performance = [];
679
+          }
680
+        },
681
+        invoke: function(query, passedArguments, context) {
682
+          var
683
+            object = instance,
684
+            maxDepth,
685
+            found,
686
+            response
687
+          ;
688
+          passedArguments = passedArguments || queryArguments;
689
+          context         = element         || context;
690
+          if(typeof query == 'string' && object !== undefined) {
691
+            query    = query.split(/[\. ]/);
692
+            maxDepth = query.length - 1;
693
+            $.each(query, function(depth, value) {
694
+              var camelCaseValue = (depth != maxDepth)
695
+                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
696
+                : query
697
+              ;
698
+              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
699
+                object = object[camelCaseValue];
700
+              }
701
+              else if( object[camelCaseValue] !== undefined ) {
702
+                found = object[camelCaseValue];
703
+                return false;
704
+              }
705
+              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
706
+                object = object[value];
707
+              }
708
+              else if( object[value] !== undefined ) {
709
+                found = object[value];
710
+                return false;
711
+              }
712
+