volt-semantic-ui 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -0
  3. data/Gemfile +0 -0
  4. data/LICENSE.txt +0 -0
  5. data/README.md +0 -0
  6. data/Rakefile +0 -0
  7. data/app/semanticui/assets/css/semantic.min.css +3 -3
  8. data/app/semanticui/assets/css/themes/basic/assets/fonts/icons.eot +0 -0
  9. data/app/semanticui/assets/css/themes/basic/assets/fonts/icons.svg +0 -0
  10. data/app/semanticui/assets/css/themes/basic/assets/fonts/icons.ttf +0 -0
  11. data/app/semanticui/assets/css/themes/basic/assets/fonts/icons.woff +0 -0
  12. data/app/semanticui/assets/css/themes/default/assets/fonts/icons.eot +0 -0
  13. data/app/semanticui/assets/css/themes/default/assets/fonts/icons.otf +0 -0
  14. data/app/semanticui/assets/css/themes/default/assets/fonts/icons.svg +526 -465
  15. data/app/semanticui/assets/css/themes/default/assets/fonts/icons.ttf +0 -0
  16. data/app/semanticui/assets/css/themes/default/assets/fonts/icons.woff +0 -0
  17. data/app/semanticui/assets/css/themes/default/assets/fonts/icons.woff2 +0 -0
  18. data/app/semanticui/assets/css/themes/default/assets/images/flags.png +0 -0
  19. data/app/semanticui/assets/js/components/accordion.css +256 -0
  20. data/app/semanticui/assets/js/components/accordion.js +578 -0
  21. data/app/semanticui/assets/js/components/accordion.min.css +10 -0
  22. data/app/semanticui/assets/js/components/accordion.min.js +11 -0
  23. data/app/semanticui/assets/js/components/ad.css +276 -0
  24. data/app/semanticui/assets/js/components/ad.min.css +10 -0
  25. data/app/semanticui/assets/js/components/api.js +871 -0
  26. data/app/semanticui/assets/js/components/api.min.js +11 -0
  27. data/app/semanticui/assets/js/components/breadcrumb.css +124 -0
  28. data/app/semanticui/assets/js/components/breadcrumb.min.css +10 -0
  29. data/app/semanticui/assets/js/components/button.css +2391 -0
  30. data/app/semanticui/assets/js/components/button.min.css +10 -0
  31. data/app/semanticui/assets/js/components/card.css +909 -0
  32. data/app/semanticui/assets/js/components/card.min.css +10 -0
  33. data/app/semanticui/assets/js/components/checkbox.css +513 -0
  34. data/app/semanticui/assets/js/components/checkbox.js +509 -0
  35. data/app/semanticui/assets/js/components/checkbox.min.css +10 -0
  36. data/app/semanticui/assets/js/components/checkbox.min.js +11 -0
  37. data/app/semanticui/assets/js/components/comment.css +259 -0
  38. data/app/semanticui/assets/js/components/comment.min.css +10 -0
  39. data/app/semanticui/assets/js/components/dimmer.css +186 -0
  40. data/app/semanticui/assets/js/components/dimmer.js +669 -0
  41. data/app/semanticui/assets/js/components/dimmer.min.css +10 -0
  42. data/app/semanticui/assets/js/components/dimmer.min.js +11 -0
  43. data/app/semanticui/assets/js/components/divider.css +241 -0
  44. data/app/semanticui/assets/js/components/divider.min.css +10 -0
  45. data/app/semanticui/assets/js/components/dropdown.css +1103 -0
  46. data/app/semanticui/assets/js/components/dropdown.js +1795 -0
  47. data/app/semanticui/assets/js/components/dropdown.min.css +10 -0
  48. data/app/semanticui/assets/js/components/dropdown.min.js +11 -0
  49. data/app/semanticui/assets/js/components/feed.css +276 -0
  50. data/app/semanticui/assets/js/components/feed.min.css +10 -0
  51. data/app/semanticui/assets/js/components/flag.css +1024 -0
  52. data/app/semanticui/assets/js/components/flag.min.css +10 -0
  53. data/app/semanticui/assets/js/components/form.css +891 -0
  54. data/app/semanticui/assets/js/components/form.js +1118 -0
  55. data/app/semanticui/assets/js/components/form.min.css +10 -0
  56. data/app/semanticui/assets/js/components/form.min.js +11 -0
  57. data/app/semanticui/assets/js/components/grid.css +1871 -0
  58. data/app/semanticui/assets/js/components/grid.min.css +10 -0
  59. data/app/semanticui/assets/js/components/header.css +596 -0
  60. data/app/semanticui/assets/js/components/header.min.css +10 -0
  61. data/app/semanticui/assets/js/components/icon.css +2467 -0
  62. data/app/semanticui/assets/js/components/icon.min.css +10 -0
  63. data/app/semanticui/assets/js/components/image.css +288 -0
  64. data/app/semanticui/assets/js/components/image.min.css +10 -0
  65. data/app/semanticui/assets/js/components/input.css +439 -0
  66. data/app/semanticui/assets/js/components/input.min.css +10 -0
  67. data/app/semanticui/assets/js/components/item.css +456 -0
  68. data/app/semanticui/assets/js/components/item.min.css +10 -0
  69. data/app/semanticui/assets/js/components/label.css +963 -0
  70. data/app/semanticui/assets/js/components/label.min.css +10 -0
  71. data/app/semanticui/assets/js/components/list.css +878 -0
  72. data/app/semanticui/assets/js/components/list.min.css +10 -0
  73. data/app/semanticui/assets/js/components/loader.css +284 -0
  74. data/app/semanticui/assets/js/components/loader.min.css +10 -0
  75. data/app/semanticui/assets/js/components/menu.css +1608 -0
  76. data/app/semanticui/assets/js/components/menu.min.css +10 -0
  77. data/app/semanticui/assets/js/components/message.css +421 -0
  78. data/app/semanticui/assets/js/components/message.min.css +10 -0
  79. data/app/semanticui/assets/js/components/modal.css +432 -0
  80. data/app/semanticui/assets/js/components/modal.js +860 -0
  81. data/app/semanticui/assets/js/components/modal.min.css +10 -0
  82. data/app/semanticui/assets/js/components/modal.min.js +11 -0
  83. data/app/semanticui/assets/js/components/nag.css +148 -0
  84. data/app/semanticui/assets/js/components/nag.js +477 -0
  85. data/app/semanticui/assets/js/components/nag.min.css +10 -0
  86. data/app/semanticui/assets/js/components/nag.min.js +11 -0
  87. data/app/semanticui/assets/js/components/popup.css +293 -0
  88. data/app/semanticui/assets/js/components/popup.js +1224 -0
  89. data/app/semanticui/assets/js/components/popup.min.css +10 -0
  90. data/app/semanticui/assets/js/components/popup.min.js +11 -0
  91. data/app/semanticui/assets/js/components/progress.css +461 -0
  92. data/app/semanticui/assets/js/components/progress.js +785 -0
  93. data/app/semanticui/assets/js/components/progress.min.css +10 -0
  94. data/app/semanticui/assets/js/components/progress.min.js +11 -0
  95. data/app/semanticui/assets/js/components/rail.css +124 -0
  96. data/app/semanticui/assets/js/components/rail.min.css +10 -0
  97. data/app/semanticui/assets/js/components/rating.css +251 -0
  98. data/app/semanticui/assets/js/components/rating.js +451 -0
  99. data/app/semanticui/assets/js/components/rating.min.css +10 -0
  100. data/app/semanticui/assets/js/components/rating.min.js +11 -0
  101. data/app/semanticui/assets/js/components/reset.css +429 -0
  102. data/app/semanticui/assets/js/components/reset.min.css +10 -0
  103. data/app/semanticui/assets/js/components/reveal.css +293 -0
  104. data/app/semanticui/assets/js/components/reveal.min.css +10 -0
  105. data/app/semanticui/assets/js/components/search.css +329 -0
  106. data/app/semanticui/assets/js/components/search.js +1096 -0
  107. data/app/semanticui/assets/js/components/search.min.css +10 -0
  108. data/app/semanticui/assets/js/components/search.min.js +11 -0
  109. data/app/semanticui/assets/js/components/segment.css +635 -0
  110. data/app/semanticui/assets/js/components/segment.min.css +10 -0
  111. data/app/semanticui/assets/js/components/shape.css +154 -0
  112. data/app/semanticui/assets/js/components/shape.js +830 -0
  113. data/app/semanticui/assets/js/components/shape.min.css +10 -0
  114. data/app/semanticui/assets/js/components/shape.min.js +11 -0
  115. data/app/semanticui/assets/js/components/sidebar.css +625 -0
  116. data/app/semanticui/assets/js/components/sidebar.js +1089 -0
  117. data/app/semanticui/assets/js/components/sidebar.min.css +10 -0
  118. data/app/semanticui/assets/js/components/sidebar.min.js +11 -0
  119. data/app/semanticui/assets/js/components/site.css +160 -0
  120. data/app/semanticui/assets/js/components/site.js +487 -0
  121. data/app/semanticui/assets/js/components/site.min.css +10 -0
  122. data/app/semanticui/assets/js/components/site.min.js +11 -0
  123. data/app/semanticui/assets/js/components/state.js +695 -0
  124. data/app/semanticui/assets/js/components/state.min.js +11 -0
  125. data/app/semanticui/assets/js/components/statistic.css +409 -0
  126. data/app/semanticui/assets/js/components/statistic.min.css +10 -0
  127. data/app/semanticui/assets/js/components/step.css +432 -0
  128. data/app/semanticui/assets/js/components/step.min.css +10 -0
  129. data/app/semanticui/assets/js/components/sticky.css +79 -0
  130. data/app/semanticui/assets/js/components/sticky.js +792 -0
  131. data/app/semanticui/assets/js/components/sticky.min.css +10 -0
  132. data/app/semanticui/assets/js/components/sticky.min.js +11 -0
  133. data/app/semanticui/assets/js/components/tab.css +92 -0
  134. data/app/semanticui/assets/js/components/tab.js +802 -0
  135. data/app/semanticui/assets/js/components/tab.min.css +10 -0
  136. data/app/semanticui/assets/js/components/tab.min.js +11 -0
  137. data/app/semanticui/assets/js/components/table.css +1000 -0
  138. data/app/semanticui/assets/js/components/table.min.css +10 -0
  139. data/app/semanticui/assets/js/components/transition.css +1990 -0
  140. data/app/semanticui/assets/js/components/transition.js +1038 -0
  141. data/app/semanticui/assets/js/components/transition.min.css +10 -0
  142. data/app/semanticui/assets/js/components/transition.min.js +11 -0
  143. data/app/semanticui/assets/js/components/video.css +125 -0
  144. data/app/semanticui/assets/js/components/video.js +540 -0
  145. data/app/semanticui/assets/js/components/video.min.css +10 -0
  146. data/app/semanticui/assets/js/components/video.min.js +11 -0
  147. data/app/semanticui/assets/js/components/visibility.js +1032 -0
  148. data/app/semanticui/assets/js/components/visibility.min.js +11 -0
  149. data/app/semanticui/assets/js/semantic.min.js +9 -9
  150. data/lib/volt/semanticui.rb +0 -0
  151. data/lib/volt/semanticui/version.rb +1 -1
  152. data/volt-semantic-ui-0.0.1.gem +0 -0
  153. data/volt-semanticui-0.0.1.gem +0 -0
  154. data/volt-semanticui.gemspec +0 -0
  155. metadata +141 -10
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * # Semantic UI 1.11.4 - Accordion
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2014 Contributors
7
+ * Released under the MIT license
8
+ * http://opensource.org/licenses/MIT
9
+ *
10
+ */.ui.accordion,.ui.accordion .accordion{max-width:100%;font-size:1em}.ui.accordion .accordion{margin:1em 0 0;padding:0}.ui.accordion .accordion .title,.ui.accordion .title{cursor:pointer}.ui.accordion .title:not(.ui){padding:.5em 0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1em;color:rgba(0,0,0,.8)}.ui.accordion .accordion .title~.content,.ui.accordion .title~.content{display:none}.ui.accordion:not(.styled) .accordion .title~.content:not(.ui),.ui.accordion:not(.styled) .title~.content:not(.ui){margin:0;padding:.5em 0 1em}.ui.accordion:not(.styled) .title~.content:not(.ui):last-child{padding-bottom:0}.ui.accordion .accordion .title .dropdown.icon,.ui.accordion .title .dropdown.icon{display:inline-block;float:none;opacity:1;width:1.25em;height:1em;margin:0 .25rem 0 0;padding:0;font-size:1em;-webkit-transition:-webkit-transform .2s ease,opacity .2s ease;transition:transform .2s ease,opacity .2s ease;vertical-align:baseline;-webkit-transform:none;-ms-transform:none;transform:none}.ui.accordion.menu .item .title{display:block;padding:0}.ui.accordion.menu .item .title>.dropdown.icon{float:right;margin:.165em 0 0 1em;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.ui.accordion .ui.header .dropdown.icon{font-size:1em;margin:0 .25rem 0 0}.ui.accordion .accordion .active.title .dropdown.icon,.ui.accordion .active.title .dropdown.icon,.ui.accordion.menu .item .active.title>.dropdown.icon{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.ui.styled.accordion{width:600px}.ui.styled.accordion,.ui.styled.accordion .accordion{border-radius:.2857rem;background:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05),0 0 0 1px rgba(39,41,43,.15)}.ui.styled.accordion .accordion .title,.ui.styled.accordion .title{margin:0;padding:.75em 1em;color:rgba(0,0,0,.4);font-weight:700;border-top:1px solid rgba(39,41,43,.15);-webkit-transition:background .2s ease,color .2s ease;transition:background .2s ease,color .2s ease}.ui.styled.accordion .accordion .title:first-child,.ui.styled.accordion>.title:first-child{border-top:none}.ui.styled.accordion .accordion .content,.ui.styled.accordion .content{margin:0;padding:.5em 1em 1.5em}.ui.styled.accordion .accordion .content{padding:.5em 1em 1.5em}.ui.styled.accordion .accordion .active.title,.ui.styled.accordion .accordion .title:hover,.ui.styled.accordion .active.title,.ui.styled.accordion .title:hover{background:0 0;color:rgba(0,0,0,.8)}.ui.accordion .accordion .active.content,.ui.accordion .active.content{display:block}.ui.fluid.accordion,.ui.fluid.accordion .accordion{width:100%}.ui.inverted.accordion .title:not(.ui){color:#fff}@font-face{font-family:Accordion;src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'),url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');font-weight:400;font-style:normal}.ui.accordion .accordion .title .dropdown.icon,.ui.accordion .title .dropdown.icon{font-family:Accordion;line-height:1;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-weight:400;font-style:normal;text-align:center}.ui.accordion .accordion .title .dropdown.icon:before,.ui.accordion .title .dropdown.icon:before{content:'\f0da'}
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * # Semantic UI 1.11.4 - Accordion
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2014 Contributors
7
+ * Released under the MIT license
8
+ * http://opensource.org/licenses/MIT
9
+ *
10
+ */
11
+ !function(e,n,t,i){"use strict";e.fn.accordion=function(t){{var o,a=e(this),s=(new Date).getTime(),r=[],c=arguments[0],l="string"==typeof c,u=[].slice.call(arguments,1);n.requestAnimationFrame||n.mozRequestAnimationFrame||n.webkitRequestAnimationFrame||n.msRequestAnimationFrame||function(e){setTimeout(e,0)}}return a.each(function(){var d,m,g=e.isPlainObject(t)?e.extend(!0,{},e.fn.accordion.settings,t):e.extend({},e.fn.accordion.settings),f=g.className,p=g.namespace,v=g.selector,h=g.error,b="."+p,y="module-"+p,C=a.selector||"",O=e(this),x=O.find(v.title),F=O.find(v.content),T=this,q=O.data(y);m={initialize:function(){m.debug("Initializing",O),m.bind.events(),m.observeChanges(),m.instantiate()},instantiate:function(){q=m,O.data(y,m)},destroy:function(){m.debug("Destroying previous instance",O),O.off(b).removeData(y)},refresh:function(){x=O.find(v.title),F=O.find(v.content)},observeChanges:function(){"MutationObserver"in n&&(d=new MutationObserver(function(){m.debug("DOM tree modified, updating selector cache"),m.refresh()}),d.observe(T,{childList:!0,subtree:!0}),m.debug("Setting up mutation observer",d))},bind:{events:function(){m.debug("Binding delegated events"),O.on("click"+b,v.trigger,m.event.click)}},event:{click:function(){m.toggle.call(this)}},toggle:function(n){var t=n!==i?"number"==typeof n?x.eq(n):e(n).closest(v.title):e(this).closest(v.title),o=t.next(F),a=o.hasClass(f.animating),s=o.hasClass(f.active),r=s&&!a,c=!s&&a;m.debug("Toggling visibility of content",t),r||c?g.collapsible?m.close.call(t):m.debug("Cannot close accordion content collapsing is disabled"):m.open.call(t)},open:function(n){var t=n!==i?"number"==typeof n?x.eq(n):e(n).closest(v.title):e(this).closest(v.title),o=t.next(F),a=o.hasClass(f.animating),s=o.hasClass(f.active),r=!s&&!a;r&&(m.debug("Opening accordion content",t),g.exclusive&&m.closeOthers.call(t),t.addClass(f.active),o.addClass(f.animating),g.animateChildren&&(e.fn.transition!==i&&O.transition("is supported")?o.children().transition({animation:"fade in",queue:!1,useFailSafe:!0,debug:g.debug,verbose:g.verbose,duration:g.duration}):o.children().stop(!0).animate({opacity:1},g.duration,m.resetOpacity)),o.stop(!0).slideDown(g.duration,g.easing,function(){o.removeClass(f.animating).addClass(f.active),m.reset.display.call(this),g.onOpen.call(this),g.onChange.call(this)}))},close:function(n){var t=n!==i?"number"==typeof n?x.eq(n):e(n).closest(v.title):e(this).closest(v.title),o=t.next(F),a=o.hasClass(f.animating),s=o.hasClass(f.active),r=!s&&a,c=s&&a;!s&&!r||c||(m.debug("Closing accordion content",o),t.removeClass(f.active),o.addClass(f.animating),g.animateChildren&&(e.fn.transition!==i&&O.transition("is supported")?o.children().transition({animation:"fade out",queue:!1,useFailSafe:!0,debug:g.debug,verbose:g.verbose,duration:g.duration}):o.children().stop(!0).animate({opacity:0},g.duration,m.resetOpacity)),o.stop(!0).slideUp(g.duration,g.easing,function(){o.removeClass(f.animating).removeClass(f.active),m.reset.display.call(this),g.onClose.call(this),g.onChange.call(this)}))},closeOthers:function(n){var t,o,a,s=n!==i?x.eq(n):e(this).closest(v.title),r=s.parents(v.content).prev(v.title),c=s.closest(v.accordion),l=v.title+"."+f.active+":visible",u=v.content+"."+f.active+":visible";g.closeNested?(t=c.find(l).not(r),a=t.next(F)):(t=c.find(l).not(r),o=c.find(u).find(l).not(r),t=t.not(o),a=t.next(F)),t.length>0&&(m.debug("Exclusive enabled, closing other content",t),t.removeClass(f.active),g.animateChildren&&(e.fn.transition!==i&&O.transition("is supported")?a.children().transition({animation:"fade out",useFailSafe:!0,debug:g.debug,verbose:g.verbose,duration:g.duration}):a.children().stop().animate({opacity:0},g.duration,m.resetOpacity)),a.stop().slideUp(g.duration,g.easing,function(){e(this).removeClass(f.active),m.reset.display.call(this)}))},reset:{display:function(){m.verbose("Removing inline display from element",this),e(this).css("display",""),""===e(this).attr("style")&&e(this).attr("style","").removeAttr("style")},opacity:function(){m.verbose("Removing inline opacity from element",this),e(this).css("opacity",""),""===e(this).attr("style")&&e(this).attr("style","").removeAttr("style")}},setting:function(n,t){if(m.debug("Changing setting",n,t),e.isPlainObject(n))e.extend(!0,g,n);else{if(t===i)return g[n];g[n]=t}},internal:function(n,t){return m.debug("Changing internal",n,t),t===i?m[n]:void(e.isPlainObject(n)?e.extend(!0,m,n):m[n]=t)},debug:function(){g.debug&&(g.performance?m.performance.log(arguments):(m.debug=Function.prototype.bind.call(console.info,console,g.name+":"),m.debug.apply(console,arguments)))},verbose:function(){g.verbose&&g.debug&&(g.performance?m.performance.log(arguments):(m.verbose=Function.prototype.bind.call(console.info,console,g.name+":"),m.verbose.apply(console,arguments)))},error:function(){m.error=Function.prototype.bind.call(console.error,console,g.name+":"),m.error.apply(console,arguments)},performance:{log:function(e){var n,t,i;g.performance&&(n=(new Date).getTime(),i=s||n,t=n-i,s=n,r.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:T,"Execution Time":t})),clearTimeout(m.performance.timer),m.performance.timer=setTimeout(m.performance.display,100)},display:function(){var n=g.name+":",t=0;s=!1,clearTimeout(m.performance.timer),e.each(r,function(e,n){t+=n["Execution Time"]}),n+=" "+t+"ms",C&&(n+=" '"+C+"'"),(console.group!==i||console.table!==i)&&r.length>0&&(console.groupCollapsed(n),console.table?console.table(r):e.each(r,function(e,n){console.log(n.Name+": "+n["Execution Time"]+"ms")}),console.groupEnd()),r=[]}},invoke:function(n,t,a){var s,r,c,l=q;return t=t||u,a=T||a,"string"==typeof n&&l!==i&&(n=n.split(/[\. ]/),s=n.length-1,e.each(n,function(t,o){var a=t!=s?o+n[t+1].charAt(0).toUpperCase()+n[t+1].slice(1):n;if(e.isPlainObject(l[a])&&t!=s)l=l[a];else{if(l[a]!==i)return r=l[a],!1;if(!e.isPlainObject(l[o])||t==s)return l[o]!==i?(r=l[o],!1):(m.error(h.method,n),!1);l=l[o]}})),e.isFunction(r)?c=r.apply(a,t):r!==i&&(c=r),e.isArray(o)?o.push(c):o!==i?o=[o,c]:c!==i&&(o=c),r}},l?(q===i&&m.initialize(),m.invoke(c)):(q!==i&&q.invoke("destroy"),m.initialize())}),o!==i?o:this},e.fn.accordion.settings={name:"Accordion",namespace:"accordion",debug:!1,verbose:!0,performance:!0,exclusive:!0,collapsible:!0,closeNested:!1,animateChildren:!0,duration:350,easing:"easeOutQuad",onOpen:function(){},onClose:function(){},onChange:function(){},error:{method:"The method you called is not defined"},className:{active:"active",animating:"animating"},selector:{accordion:".accordion",title:".title",trigger:".title",content:".content"}},e.extend(e.easing,{easeOutQuad:function(e,n,t,i,o){return-i*(n/=o)*(n-2)+t}})}(jQuery,window,document);
@@ -0,0 +1,276 @@
1
+ /*!
2
+ * # Semantic UI 1.11.4 - 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: #333333;
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.85714em;
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
+
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * # Semantic UI 1.11.4 - 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
+ */.ui.ad{display:block;overflow:hidden;margin:1em 0}.ui.ad:first-child,.ui.ad:last-child{margin:0}.ui.ad iframe{margin:0;padding:0;border:none;overflow:hidden}.ui.leaderboard.ad{width:728px;height:90px}.ui[class*="medium rectangle"].ad{width:300px;height:250px}.ui[class*="large rectangle"].ad{width:336px;height:280px}.ui[class*="half page"].ad{width:300px;height:600px}.ui.square.ad{width:250px;height:250px}.ui[class*="small square"].ad{width:200px;height:200px}.ui[class*="small rectangle"].ad{width:180px;height:150px}.ui[class*="vertical rectangle"].ad{width:240px;height:400px}.ui.button.ad{width:120px;height:90px}.ui[class*="square button"].ad{width:125px;height:125px}.ui[class*="small button"].ad{width:120px;height:60px}.ui.skyscraper.ad{width:120px;height:600px}.ui[class*="wide skyscraper"].ad{width:160px}.ui.banner.ad{width:468px;height:60px}.ui[class*="vertical banner"].ad{width:120px;height:240px}.ui[class*="top banner"].ad{width:930px;height:180px}.ui[class*="half banner"].ad{width:234px;height:60px}.ui[class*="large leaderboard"].ad{width:970px;height:90px}.ui.billboard.ad{width:970px;height:250px}.ui.panorama.ad{width:980px;height:120px}.ui.netboard.ad{width:580px;height:400px}.ui[class*="large mobile banner"].ad{width:320px;height:100px}.ui[class*="mobile leaderboard"].ad{width:320px;height:50px}.ui.mobile.ad{display:none}@media only screen and (max-width:767px){.ui.mobile.ad{display:block}}.ui.centered.ad{margin-left:auto;margin-right:auto}.ui.test.ad{position:relative;background:#333}.ui.test.ad:after{position:absolute;top:50%;left:50%;width:100%;text-align:center;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);content:'Ad';color:#fff;font-size:1em;font-weight:700}.ui.mobile.test.ad:after{font-size:.85714em}.ui.test.ad[data-text]:after{content:attr(data-text)}
@@ -0,0 +1,871 @@
1
+ /*!
2
+ * # Semantic UI 1.11.4 - API
3
+ * http://github.com/semantic-org/semantic-ui/
4
+ *
5
+ *
6
+ * Copyright 2014 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
+ $.api = $.fn.api = function(parameters) {
17
+
18
+ var
19
+ // use window context if none specified
20
+ $allModules = $.isFunction(this)
21
+ ? $(window)
22
+ : $(this),
23
+ moduleSelector = $allModules.selector || '',
24
+ time = new Date().getTime(),
25
+ performance = [],
26
+
27
+ query = arguments[0],
28
+ methodInvoked = (typeof query == 'string'),
29
+ queryArguments = [].slice.call(arguments, 1),
30
+
31
+ returnedValue
32
+ ;
33
+
34
+ $allModules
35
+ .each(function() {
36
+ var
37
+ settings = ( $.isPlainObject(parameters) )
38
+ ? $.extend(true, {}, $.fn.api.settings, parameters)
39
+ : $.extend({}, $.fn.api.settings),
40
+
41
+ // internal aliases
42
+ namespace = settings.namespace,
43
+ metadata = settings.metadata,
44
+ selector = settings.selector,
45
+ error = settings.error,
46
+ className = settings.className,
47
+
48
+ // define namespaces for modules
49
+ eventNamespace = '.' + namespace,
50
+ moduleNamespace = 'module-' + namespace,
51
+
52
+ // element that creates request
53
+ $module = $(this),
54
+ $form = $module.closest(selector.form),
55
+
56
+ // context used for state
57
+ $context = (settings.stateContext)
58
+ ? $(settings.stateContext)
59
+ : $module,
60
+
61
+ // request details
62
+ ajaxSettings,
63
+ requestSettings,
64
+ url,
65
+ data,
66
+
67
+ // standard module
68
+ element = this,
69
+ context = $context.get(),
70
+ instance = $module.data(moduleNamespace),
71
+ module
72
+ ;
73
+
74
+ module = {
75
+
76
+ initialize: function() {
77
+ var
78
+ triggerEvent = module.get.event()
79
+ ;
80
+ // bind events
81
+ if(!methodInvoked) {
82
+ if( triggerEvent ) {
83
+ module.debug('Attaching API events to element', triggerEvent);
84
+ $module
85
+ .on(triggerEvent + eventNamespace, module.event.trigger)
86
+ ;
87
+ }
88
+ else if(settings.on == 'now') {
89
+ module.debug('Querying API now', triggerEvent);
90
+ module.query();
91
+ }
92
+ }
93
+ module.instantiate();
94
+ },
95
+
96
+ instantiate: function() {
97
+ module.verbose('Storing instance of module', module);
98
+ instance = module;
99
+ $module
100
+ .data(moduleNamespace, instance)
101
+ ;
102
+ },
103
+
104
+ destroy: function() {
105
+ module.verbose('Destroying previous module for', element);
106
+ $module
107
+ .removeData(moduleNamespace)
108
+ .off(eventNamespace)
109
+ ;
110
+ },
111
+
112
+ query: function() {
113
+
114
+ if(module.is.disabled()) {
115
+ module.debug('Element is disabled API request aborted');
116
+ return;
117
+ }
118
+ // determine if an api event already occurred
119
+ if(module.is.loading() && settings.throttle === 0 ) {
120
+ module.debug('Cancelling request, previous request is still pending');
121
+ return;
122
+ }
123
+
124
+ // pass element metadata to url (value, text)
125
+ if(settings.defaultData) {
126
+ $.extend(true, settings.urlData, module.get.defaultData());
127
+ }
128
+
129
+ // Add form content
130
+ if(settings.serializeForm !== false || $context.is('form')) {
131
+ if(settings.serializeForm == 'json') {
132
+ $.extend(true, settings.data, module.get.formData());
133
+ }
134
+ else {
135
+ settings.data = module.get.formData();
136
+ }
137
+ }
138
+
139
+ // call beforesend and get any settings changes
140
+ requestSettings = module.get.settings();
141
+
142
+ // check if before send cancelled request
143
+ if(requestSettings === false) {
144
+ module.cancelled = true;
145
+ module.error(error.beforeSend);
146
+ return;
147
+ }
148
+ else {
149
+ module.cancelled = false;
150
+ }
151
+
152
+ if(settings.url) {
153
+ // override with url if specified
154
+ module.debug('Using specified url', url);
155
+ url = module.add.urlData( settings.url );
156
+ }
157
+ else {
158
+ // otherwise find url from api endpoints
159
+ url = module.add.urlData( module.get.templateURL() );
160
+ module.debug('Added URL Data to url', url);
161
+ }
162
+
163
+ // exit conditions reached, missing url parameters
164
+ if( !url ) {
165
+ if( module.is.form() ) {
166
+ url = $module.attr('action') || '';
167
+ module.debug('No url or action specified, defaulting to form action', url);
168
+ }
169
+ else {
170
+ module.error(error.missingURL, settings.action);
171
+ return;
172
+ }
173
+ }
174
+
175
+ // add loading state
176
+ module.set.loading();
177
+
178
+ // look for jQuery ajax parameters in settings
179
+ ajaxSettings = $.extend(true, {}, settings, {
180
+ type : settings.method || settings.type,
181
+ data : data,
182
+ url : settings.base + url,
183
+ beforeSend : settings.beforeXHR,
184
+ success : function() {},
185
+ failure : function() {},
186
+ complete : function() {}
187
+ });
188
+
189
+ module.debug('Querying URL', ajaxSettings.url);
190
+ module.debug('Sending data', data, ajaxSettings.method);
191
+ module.verbose('Using AJAX settings', ajaxSettings);
192
+
193
+ if( module.is.loading() ) {
194
+ // throttle additional requests
195
+ module.timer = setTimeout(function() {
196
+ module.request = module.create.request();
197
+ module.xhr = module.create.xhr();
198
+ settings.onRequest.call(context, module.request, module.xhr);
199
+ }, settings.throttle);
200
+ }
201
+ else {
202
+ // immediately on first request
203
+ module.request = module.create.request();
204
+ module.xhr = module.create.xhr();
205
+ settings.onRequest.call(context, module.request, module.xhr);
206
+ }
207
+
208
+ },
209
+
210
+
211
+ is: {
212
+ disabled: function() {
213
+ return ($module.filter(settings.filter).length > 0);
214
+ },
215
+ form: function() {
216
+ return $module.is('form');
217
+ },
218
+ input: function() {
219
+ return $module.is('input');
220
+ },
221
+ loading: function() {
222
+ return (module.request && module.request.state() == 'pending');
223
+ }
224
+ },
225
+
226
+ was: {
227
+ cancelled: function() {
228
+ return (module.cancelled || false);
229
+ },
230
+ succesful: function() {
231
+ return (module.request && module.request.state() == 'resolved');
232
+ },
233
+ failure: function() {
234
+ return (module.request && module.request.state() == 'rejected');
235
+ },
236
+ complete: function() {
237
+ return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );
238
+ }
239
+ },
240
+
241
+ add: {
242
+ urlData: function(url, urlData) {
243
+ var
244
+ requiredVariables,
245
+ optionalVariables
246
+ ;
247
+ if(url) {
248
+ requiredVariables = url.match(settings.regExp.required);
249
+ optionalVariables = url.match(settings.regExp.optional);
250
+ urlData = urlData || settings.urlData;
251
+ if(requiredVariables) {
252
+ module.debug('Looking for required URL variables', requiredVariables);
253
+ $.each(requiredVariables, function(index, templatedString) {
254
+ var
255
+ // allow legacy {$var} style
256
+ variable = (templatedString.indexOf('$') !== -1)
257
+ ? templatedString.substr(2, templatedString.length - 3)
258
+ : templatedString.substr(1, templatedString.length - 2),
259
+ value = ($.isPlainObject(urlData) && urlData[variable] !== undefined)
260
+ ? urlData[variable]
261
+ : ($module.data(variable) !== undefined)
262
+ ? $module.data(variable)
263
+ : ($context.data(variable) !== undefined)
264
+ ? $context.data(variable)
265
+ : urlData[variable]
266
+ ;
267
+ // remove value
268
+ if(value === undefined) {
269
+ module.error(error.requiredParameter, variable, url);
270
+ url = false;
271
+ return false;
272
+ }
273
+ else {
274
+ module.verbose('Found required variable', variable, value);
275
+ url = url.replace(templatedString, value);
276
+ }
277
+ });
278
+ }
279
+ if(optionalVariables) {
280
+ module.debug('Looking for optional URL variables', requiredVariables);
281
+ $.each(optionalVariables, function(index, templatedString) {
282
+ var
283
+ // allow legacy {/$var} style
284
+ variable = (templatedString.indexOf('$') !== -1)
285
+ ? templatedString.substr(3, templatedString.length - 4)
286
+ : templatedString.substr(2, templatedString.length - 3),
287
+ value = ($.isPlainObject(urlData) && urlData[variable] !== undefined)
288
+ ? urlData[variable]
289
+ : ($module.data(variable) !== undefined)
290
+ ? $module.data(variable)
291
+ : ($context.data(variable) !== undefined)
292
+ ? $context.data(variable)
293
+ : urlData[variable]
294
+ ;
295
+ // optional replacement
296
+ if(value !== undefined) {
297
+ module.verbose('Optional variable Found', variable, value);
298
+ url = url.replace(templatedString, value);
299
+ }
300
+ else {
301
+ module.verbose('Optional variable not found', variable);
302
+ // remove preceding slash if set
303
+ if(url.indexOf('/' + templatedString) !== -1) {
304
+ url = url.replace('/' + templatedString, '');
305
+ }
306
+ else {
307
+ url = url.replace(templatedString, '');
308
+ }
309
+ }
310
+ });
311
+ }
312
+ }
313
+ return url;
314
+ }
315
+ },
316
+
317
+ event: {
318
+ trigger: function(event) {
319
+ module.query();
320
+ if(event.type == 'submit' || event.type == 'click') {
321
+ event.preventDefault();
322
+ }
323
+ },
324
+ xhr: {
325
+ always: function() {
326
+ // calculate if loading time was below minimum threshold
327
+ },
328
+ done: function(response) {
329
+ var
330
+ context = this,
331
+ elapsedTime = (new Date().getTime() - time),
332
+ timeLeft = (settings.loadingDuration - elapsedTime)
333
+ ;
334
+ timeLeft = (timeLeft > 0)
335
+ ? timeLeft
336
+ : 0
337
+ ;
338
+ setTimeout(function() {
339
+ module.request.resolveWith(context, [response]);
340
+ }, timeLeft);
341
+ },
342
+ fail: function(xhr, status, httpMessage) {
343
+ var
344
+ context = this,
345
+ elapsedTime = (new Date().getTime() - time),
346
+ timeLeft = (settings.loadingDuration - elapsedTime)
347
+ ;
348
+ timeLeft = (timeLeft > 0)
349
+ ? timeLeft
350
+ : 0
351
+ ;
352
+ // page triggers abort on navigation, dont show error
353
+ setTimeout(function() {
354
+ if(status !== 'abort') {
355
+ module.request.rejectWith(context, [xhr, status, httpMessage]);
356
+ }
357
+ else {
358
+ module.reset();
359
+ }
360
+ }, timeLeft);
361
+ }
362
+ },
363
+ request: {
364
+ complete: function(response) {
365
+ module.remove.loading();
366
+ settings.onComplete.call(context, response, $module);
367
+ },
368
+ done: function(response) {
369
+ module.debug('API Response Received', response);
370
+ if(settings.dataType == 'json') {
371
+ if( $.isFunction(settings.successTest) ) {
372
+ module.debug('Checking JSON returned success', settings.successTest, response);
373
+ if( settings.successTest(response) ) {
374
+ settings.onSuccess.call(context, response, $module);
375
+ }
376
+ else {
377
+ module.debug('JSON test specified by user and response failed', response);
378
+ settings.onFailure.call(context, response, $module);
379
+ }
380
+ }
381
+ else {
382
+ settings.onSuccess.call(context, response, $module);
383
+ }
384
+ }
385
+ else {
386
+ settings.onSuccess.call(context, response, $module);
387
+ }
388
+ },
389
+ error: function(xhr, status, httpMessage) {
390
+ var
391
+ errorMessage = (settings.error[status] !== undefined)
392
+ ? settings.error[status]
393
+ : httpMessage,
394
+ response
395
+ ;
396
+ // let em know unless request aborted
397
+ if(xhr !== undefined) {
398
+ // readyState 4 = done, anything less is not really sent
399
+ if(xhr.readyState !== undefined && xhr.readyState == 4) {
400
+
401
+ // if http status code returned and json returned error, look for it
402
+ if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {
403
+ module.error(error.statusMessage + httpMessage, ajaxSettings.url);
404
+ }
405
+ else {
406
+ if(status == 'error' && settings.dataType == 'json') {
407
+ try {
408
+ response = $.parseJSON(xhr.responseText);
409
+ if(response && response.error !== undefined) {
410
+ errorMessage = response.error;
411
+ }
412
+ }
413
+ catch(e) {
414
+ module.error(error.JSONParse);
415
+ }
416
+ }
417
+ }
418
+ module.remove.loading();
419
+ module.set.error();
420
+ // show error state only for duration specified in settings
421
+ if(settings.errorDuration) {
422
+ setTimeout(module.remove.error, settings.errorDuration);
423
+ }
424
+ module.debug('API Request error:', errorMessage);
425
+ settings.onError.call(context, errorMessage, $module);
426
+ }
427
+ else {
428
+ settings.onAbort.call(context, errorMessage, $module);
429
+ module.debug('Request Aborted (Most likely caused by page change or CORS Policy)', status, httpMessage);
430
+ }
431
+ }
432
+ }
433
+ }
434
+ },
435
+
436
+ create: {
437
+ request: function() {
438
+ return $.Deferred()
439
+ .always(module.event.request.complete)
440
+ .done(module.event.request.done)
441
+ .fail(module.event.request.error)
442
+ ;
443
+ },
444
+ xhr: function() {
445
+ return $.ajax(ajaxSettings)
446
+ .always(module.event.xhr.always)
447
+ .done(module.event.xhr.done)
448
+ .fail(module.event.xhr.fail)
449
+ ;
450
+ }
451
+ },
452
+
453
+ set: {
454
+ error: function() {
455
+ module.verbose('Adding error state to element', $context);
456
+ $context.addClass(className.error);
457
+ },
458
+ loading: function() {
459
+ module.verbose('Adding loading state to element', $context);
460
+ $context.addClass(className.loading);
461
+ }
462
+ },
463
+
464
+ remove: {
465
+ error: function() {
466
+ module.verbose('Removing error state from element', $context);
467
+ $context.removeClass(className.error);
468
+ },
469
+ loading: function() {
470
+ module.verbose('Removing loading state from element', $context);
471
+ $context.removeClass(className.loading);
472
+ }
473
+ },
474
+
475
+ get: {
476
+ request: function() {
477
+ return module.request || false;
478
+ },
479
+ xhr: function() {
480
+ return module.xhr || false;
481
+ },
482
+ settings: function() {
483
+ var
484
+ runSettings
485
+ ;
486
+ runSettings = settings.beforeSend.call($module, settings);
487
+ if(runSettings) {
488
+ if(runSettings.success !== undefined) {
489
+ module.debug('Legacy success callback detected', runSettings);
490
+ module.error(error.legacyParameters, runSettings.success);
491
+ runSettings.onSuccess = runSettings.success;
492
+ }
493
+ if(runSettings.failure !== undefined) {
494
+ module.debug('Legacy failure callback detected', runSettings);
495
+ module.error(error.legacyParameters, runSettings.failure);
496
+ runSettings.onFailure = runSettings.failure;
497
+ }
498
+ if(runSettings.complete !== undefined) {
499
+ module.debug('Legacy complete callback detected', runSettings);
500
+ module.error(error.legacyParameters, runSettings.complete);
501
+ runSettings.onComplete = runSettings.complete;
502
+ }
503
+ }
504
+ if(runSettings === undefined) {
505
+ module.error(error.noReturnedValue);
506
+ }
507
+ return (runSettings !== undefined)
508
+ ? runSettings
509
+ : settings
510
+ ;
511
+ },
512
+ defaultData: function() {
513
+ var
514
+ data = {}
515
+ ;
516
+ if( !$.isWindow(element) ) {
517
+ if( module.is.input() ) {
518
+ data.value = $module.val();
519
+ }
520
+ else if( !module.is.form() ) {
521
+
522
+ }
523
+ else {
524
+ data.text = $module.text();
525
+ }
526
+ }
527
+ return data;
528
+ },
529
+ event: function() {
530
+ if( $.isWindow(element) || settings.on == 'now' ) {
531
+ module.debug('API called without element, no events attached');
532
+ return false;
533
+ }
534
+ else if(settings.on == 'auto') {
535
+ if( $module.is('input') ) {
536
+ return (element.oninput !== undefined)
537
+ ? 'input'
538
+ : (element.onpropertychange !== undefined)
539
+ ? 'propertychange'
540
+ : 'keyup'
541
+ ;
542
+ }
543
+ else if( $module.is('form') ) {
544
+ return 'submit';
545
+ }
546
+ else {
547
+ return 'click';
548
+ }
549
+ }
550
+ else {
551
+ return settings.on;
552
+ }
553
+ },
554
+ formData: function() {
555
+ var
556
+ formData
557
+ ;
558
+ if($module.serializeObject !== undefined) {
559
+ formData = $form.serializeObject();
560
+ }
561
+ else {
562
+ module.error(error.missingSerialize);
563
+ formData = $form.serialize();
564
+ }
565
+ module.debug('Retrieved form data', formData);
566
+ return formData;
567
+ },
568
+ templateURL: function(action) {
569
+ var
570
+ url
571
+ ;
572
+ action = action || $module.data(metadata.action) || settings.action || false;
573
+ if(action) {
574
+ module.debug('Looking up url for action', action, settings.api);
575
+ if(settings.api[action] !== undefined) {
576
+ url = settings.api[action];
577
+ module.debug('Found template url', url);
578
+ }
579
+ else if( !module.is.form() ) {
580
+ module.error(error.missingAction, settings.action, settings.api);
581
+ }
582
+ }
583
+ return url;
584
+ }
585
+ },
586
+
587
+ abort: function() {
588
+ var
589
+ xhr = module.get.xhr()
590
+ ;
591
+ if( xhr && xhr.state() !== 'resolved') {
592
+ module.debug('Cancelling API request');
593
+ xhr.abort();
594
+ module.request.rejectWith(settings.apiSettings);
595
+ }
596
+ },
597
+
598
+ // reset state
599
+ reset: function() {
600
+ module.remove.error();
601
+ module.remove.loading();
602
+ },
603
+
604
+ setting: function(name, value) {
605
+ module.debug('Changing setting', name, value);
606
+ if( $.isPlainObject(name) ) {
607
+ $.extend(true, settings, name);
608
+ }
609
+ else if(value !== undefined) {
610
+ settings[name] = value;
611
+ }
612
+ else {
613
+ return settings[name];
614
+ }
615
+ },
616
+ internal: function(name, value) {
617
+ if( $.isPlainObject(name) ) {
618
+ $.extend(true, module, name);
619
+ }
620
+ else if(value !== undefined) {
621
+ module[name] = value;
622
+ }
623
+ else {
624
+ return module[name];
625
+ }
626
+ },
627
+ debug: function() {
628
+ if(settings.debug) {
629
+ if(settings.performance) {
630
+ module.performance.log(arguments);
631
+ }
632
+ else {
633
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
634
+ module.debug.apply(console, arguments);
635
+ }
636
+ }
637
+ },
638
+ verbose: function() {
639
+ if(settings.verbose && settings.debug) {
640
+ if(settings.performance) {
641
+ module.performance.log(arguments);
642
+ }
643
+ else {
644
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
645
+ module.verbose.apply(console, arguments);
646
+ }
647
+ }
648
+ },
649
+ error: function() {
650
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
651
+ module.error.apply(console, arguments);
652
+ },
653
+ performance: {
654
+ log: function(message) {
655
+ var
656
+ currentTime,
657
+ executionTime,
658
+ previousTime
659
+ ;
660
+ if(settings.performance) {
661
+ currentTime = new Date().getTime();
662
+ previousTime = time || currentTime;
663
+ executionTime = currentTime - previousTime;
664
+ time = currentTime;
665
+ performance.push({
666
+ 'Name' : message[0],
667
+ 'Arguments' : [].slice.call(message, 1) || '',
668
+ //'Element' : element,
669
+ 'Execution Time' : executionTime
670
+ });
671
+ }
672
+ clearTimeout(module.performance.timer);
673
+ module.performance.timer = setTimeout(module.performance.display, 100);
674
+ },
675
+ display: function() {
676
+ var
677
+ title = settings.name + ':',
678
+ totalTime = 0
679
+ ;
680
+ time = false;
681
+ clearTimeout(module.performance.timer);
682
+ $.each(performance, function(index, data) {
683
+ totalTime += data['Execution Time'];
684
+ });
685
+ title += ' ' + totalTime + 'ms';
686
+ if(moduleSelector) {
687
+ title += ' \'' + moduleSelector + '\'';
688
+ }
689
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
690
+ console.groupCollapsed(title);
691
+ if(console.table) {
692
+ console.table(performance);
693
+ }
694
+ else {
695
+ $.each(performance, function(index, data) {
696
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
697
+ });
698
+ }
699
+ console.groupEnd();
700
+ }
701
+ performance = [];
702
+ }
703
+ },
704
+ invoke: function(query, passedArguments, context) {
705
+ var
706
+ object = instance,
707
+ maxDepth,
708
+ found,
709
+ response
710
+ ;
711
+ passedArguments = passedArguments || queryArguments;
712
+ context = element || context;
713
+ if(typeof query == 'string' && object !== undefined) {
714
+ query = query.split(/[\. ]/);
715
+ maxDepth = query.length - 1;
716
+ $.each(query, function(depth, value) {
717
+ var camelCaseValue = (depth != maxDepth)
718
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
719
+ : query
720
+ ;
721
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
722
+ object = object[camelCaseValue];
723
+ }
724
+ else if( object[camelCaseValue] !== undefined ) {
725
+ found = object[camelCaseValue];
726
+ return false;
727
+ }
728
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
729
+ object = object[value];
730
+ }
731
+ else if( object[value] !== undefined ) {
732
+ found = object[value];
733
+ return false;
734
+ }
735
+ else {
736
+ module.error(error.method, query);
737
+ return false;
738
+ }
739
+ });
740
+ }
741
+ if ( $.isFunction( found ) ) {
742
+ response = found.apply(context, passedArguments);
743
+ }
744
+ else if(found !== undefined) {
745
+ response = found;
746
+ }
747
+ if($.isArray(returnedValue)) {
748
+ returnedValue.push(response);
749
+ }
750
+ else if(returnedValue !== undefined) {
751
+ returnedValue = [returnedValue, response];
752
+ }
753
+ else if(response !== undefined) {
754
+ returnedValue = response;
755
+ }
756
+ return found;
757
+ }
758
+ };
759
+
760
+ if(methodInvoked) {
761
+ if(instance === undefined) {
762
+ module.initialize();
763
+ }
764
+ module.invoke(query);
765
+ }
766
+ else {
767
+ if(instance !== undefined) {
768
+ instance.invoke('destroy');
769
+ }
770
+ module.initialize();
771
+ }
772
+ })
773
+ ;
774
+
775
+ return (returnedValue !== undefined)
776
+ ? returnedValue
777
+ : this
778
+ ;
779
+ };
780
+
781
+ $.api.settings = {
782
+
783
+ name : 'API',
784
+ namespace : 'api',
785
+
786
+ debug : true,
787
+ verbose : false,
788
+ performance : true,
789
+
790
+ // event binding
791
+ on : 'auto',
792
+ filter : '.disabled',
793
+ stateContext : false,
794
+
795
+ // state
796
+ loadingDuration : 0,
797
+ errorDuration : 2000,
798
+
799
+ // templating
800
+ action : false,
801
+ url : false,
802
+ base : '',
803
+
804
+ // data
805
+ urlData : {},
806
+
807
+ // ui
808
+ defaultData : true,
809
+ serializeForm : false,
810
+ throttle : 0,
811
+
812
+ // jQ ajax
813
+ method : 'get',
814
+ data : {},
815
+ dataType : 'json',
816
+
817
+ // callbacks
818
+ beforeSend : function(settings) { return settings; },
819
+ beforeXHR : function(xhr) {},
820
+
821
+ onRequest : function(promise, xhr) {},
822
+ onSuccess : function(response, $module) {},
823
+ onComplete : function(response, $module) {},
824
+ onFailure : function(errorMessage, $module) {},
825
+ onError : function(errorMessage, $module) {},
826
+ onAbort : function(errorMessage, $module) {},
827
+
828
+ successTest : false,
829
+
830
+ // errors
831
+ error : {
832
+ beforeSend : 'The before send function has aborted the request',
833
+ error : 'There was an error with your request',
834
+ exitConditions : 'API Request Aborted. Exit conditions met',
835
+ JSONParse : 'JSON could not be parsed during error handling',
836
+ legacyParameters : 'You are using legacy API success callback names',
837
+ method : 'The method you called is not defined',
838
+ missingAction : 'API action used but no url was defined',
839
+ missingSerialize : 'Required dependency jquery-serialize-object missing, using basic serialize',
840
+ missingURL : 'No URL specified for api event',
841
+ noReturnedValue : 'The beforeSend callback must return a settings object, beforeSend ignored.',
842
+ parseError : 'There was an error parsing your request',
843
+ requiredParameter : 'Missing a required URL parameter: ',
844
+ statusMessage : 'Server gave an error: ',
845
+ timeout : 'Your request timed out'
846
+ },
847
+
848
+ regExp : {
849
+ required: /\{\$*[A-z0-9]+\}/g,
850
+ optional: /\{\/\$*[A-z0-9]+\}/g,
851
+ },
852
+
853
+ className: {
854
+ loading : 'loading',
855
+ error : 'error'
856
+ },
857
+
858
+ selector: {
859
+ form: 'form'
860
+ },
861
+
862
+ metadata: {
863
+ action : 'action'
864
+ }
865
+ };
866
+
867
+
868
+ $.api.settings.api = {};
869
+
870
+
871
+ })( jQuery, window , document );