bootstrap-sass-rails 2.3.2.1 → 3.0.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. data/README.md +5 -35
  2. data/app/assets/fonts/twitter/bootstrap/glyphiconshalflings-regular.eot +0 -0
  3. data/app/assets/fonts/twitter/bootstrap/glyphiconshalflings-regular.otf +0 -0
  4. data/app/assets/fonts/twitter/bootstrap/glyphiconshalflings-regular.svg +175 -0
  5. data/app/assets/fonts/twitter/bootstrap/glyphiconshalflings-regular.ttf +0 -0
  6. data/app/assets/fonts/twitter/bootstrap/glyphiconshalflings-regular.woff +0 -0
  7. data/app/assets/javascripts/twitter/bootstrap.js +0 -1
  8. data/app/assets/javascripts/twitter/bootstrap/affix.js +58 -49
  9. data/app/assets/javascripts/twitter/bootstrap/alert.js +36 -37
  10. data/app/assets/javascripts/twitter/bootstrap/button.js +41 -39
  11. data/app/assets/javascripts/twitter/bootstrap/carousel.js +131 -125
  12. data/app/assets/javascripts/twitter/bootstrap/collapse.js +108 -96
  13. data/app/assets/javascripts/twitter/bootstrap/dropdown.js +72 -87
  14. data/app/assets/javascripts/twitter/bootstrap/modal.js +149 -155
  15. data/app/assets/javascripts/twitter/bootstrap/popover.js +60 -59
  16. data/app/assets/javascripts/twitter/bootstrap/scrollspy.js +103 -107
  17. data/app/assets/javascripts/twitter/bootstrap/tab.js +73 -82
  18. data/app/assets/javascripts/twitter/bootstrap/tooltip.js +258 -255
  19. data/app/assets/javascripts/twitter/bootstrap/transition.js +34 -38
  20. data/app/assets/stylesheets/twitter/bootstrap.css.scss +21 -21
  21. data/app/assets/stylesheets/twitter/bootstrap/_accordion.scss +9 -13
  22. data/app/assets/stylesheets/twitter/bootstrap/_alerts.scss +44 -53
  23. data/app/assets/stylesheets/twitter/bootstrap/_badges.scss +51 -0
  24. data/app/assets/stylesheets/twitter/bootstrap/_breadcrumbs.scss +7 -9
  25. data/app/assets/stylesheets/twitter/bootstrap/_button-groups.scss +93 -151
  26. data/app/assets/stylesheets/twitter/bootstrap/_buttons.scss +94 -162
  27. data/app/assets/stylesheets/twitter/bootstrap/_carousel.scss +110 -64
  28. data/app/assets/stylesheets/twitter/bootstrap/_close.scss +9 -8
  29. data/app/assets/stylesheets/twitter/bootstrap/_code.scss +14 -21
  30. data/app/assets/stylesheets/twitter/bootstrap/_component-animations.scss +11 -5
  31. data/app/assets/stylesheets/twitter/bootstrap/_dropdowns.scss +67 -144
  32. data/app/assets/stylesheets/twitter/bootstrap/_forms.scss +279 -552
  33. data/app/assets/stylesheets/twitter/bootstrap/_glyphicons.scss +202 -0
  34. data/app/assets/stylesheets/twitter/bootstrap/_grid.scss +194 -12
  35. data/app/assets/stylesheets/twitter/bootstrap/_jumbotron.scss +29 -0
  36. data/app/assets/stylesheets/twitter/bootstrap/_labels.scss +46 -0
  37. data/app/assets/stylesheets/twitter/bootstrap/_list-group.scss +89 -0
  38. data/app/assets/stylesheets/twitter/bootstrap/_media.scss +8 -8
  39. data/app/assets/stylesheets/twitter/bootstrap/_mixins.scss +301 -419
  40. data/app/assets/stylesheets/twitter/bootstrap/_modals.scss +93 -54
  41. data/app/assets/stylesheets/twitter/bootstrap/_navbar.scss +288 -402
  42. data/app/assets/stylesheets/twitter/bootstrap/_navs.scss +176 -349
  43. data/app/assets/stylesheets/twitter/bootstrap/_normalize.scss +396 -0
  44. data/app/assets/stylesheets/twitter/bootstrap/_pager.scss +45 -34
  45. data/app/assets/stylesheets/twitter/bootstrap/_pagination.scss +89 -104
  46. data/app/assets/stylesheets/twitter/bootstrap/_panels.scss +102 -0
  47. data/app/assets/stylesheets/twitter/bootstrap/_popovers.scss +55 -54
  48. data/app/assets/stylesheets/twitter/bootstrap/_print.scss +100 -0
  49. data/app/assets/stylesheets/twitter/bootstrap/_progress-bars.scss +31 -49
  50. data/app/assets/stylesheets/twitter/bootstrap/_responsive-utilities.scss +56 -33
  51. data/app/assets/stylesheets/twitter/bootstrap/_scaffolding.scss +60 -20
  52. data/app/assets/stylesheets/twitter/bootstrap/_tables.scss +132 -177
  53. data/app/assets/stylesheets/twitter/bootstrap/_thumbnails.scss +20 -32
  54. data/app/assets/stylesheets/twitter/bootstrap/_tooltip.scss +45 -21
  55. data/app/assets/stylesheets/twitter/bootstrap/_type.scss +87 -101
  56. data/app/assets/stylesheets/twitter/bootstrap/_utilities.scss +17 -6
  57. data/app/assets/stylesheets/twitter/bootstrap/_variables.scss +448 -179
  58. data/app/assets/stylesheets/twitter/bootstrap/_wells.scss +5 -6
  59. data/lib/bootstrap/sass/rails/version.rb +1 -1
  60. data/test/cases/less_to_sass_spec.rb +1 -6
  61. data/test/cases/usage_css_spec.rb +77 -121
  62. data/test/cases/usage_js_spec.rb +13 -14
  63. data/test/dummy/app/assets/stylesheets/individual.css.scss +4 -4
  64. data/test/dummy/config/application.rb +2 -2
  65. data/test/dummy/log/test.log +431 -0
  66. data/test/dummy/tmp/cache/assets/C41/5B0/sprockets%2F095415e1141a435237aa9464752d21fd +1623 -2374
  67. data/test/dummy/tmp/cache/assets/C83/870/sprockets%2F508e55e1444b44d0187677a51893acf2 +0 -0
  68. data/test/dummy/tmp/cache/assets/C96/270/sprockets%2F7984a23519ffe6f306f43f447266634f +0 -0
  69. data/test/dummy/tmp/cache/assets/CA6/110/sprockets%2F272615ec4af76b10339048ca6da44284 +0 -0
  70. data/test/dummy/tmp/cache/assets/CC3/BF0/sprockets%2F468c709115f67bff62b7bc8c58577018 +0 -0
  71. data/test/dummy/tmp/cache/assets/CCB/C60/sprockets%2F0b4e89e7ef810989f02643e226d2799f +0 -0
  72. data/test/dummy/tmp/cache/assets/CD6/5C0/sprockets%2F95516af385b1c218d233ec924c081e2b +0 -0
  73. data/test/dummy/tmp/cache/assets/CE5/650/sprockets%2F8ab512c9b33ac90e699b73469d71f061 +0 -0
  74. data/test/dummy/tmp/cache/assets/CE9/E40/sprockets%2F47f8666418cd38da2ff7625f02422b5e +0 -0
  75. data/test/dummy/tmp/cache/assets/CF1/960/sprockets%2F339a6cb9e577ba950d8b438b9e080577 +0 -0
  76. data/test/dummy/tmp/cache/assets/CF1/ED0/sprockets%2F9947d52d16da82564b988d16366e3aea +489 -549
  77. data/test/dummy/tmp/cache/assets/CF9/BF0/sprockets%2F78b40808be290175c2aed7d0223adb10 +0 -0
  78. data/test/dummy/tmp/cache/assets/CFD/E70/sprockets%2Ff56d388878ed87bc4b45095e1e69542c +0 -0
  79. data/test/dummy/tmp/cache/assets/D04/3C0/sprockets%2F29d763bd40cc25622b1f04b876a5c3e3 +0 -0
  80. data/test/dummy/tmp/cache/assets/D07/830/sprockets%2F530e67cd61f082e10b6b1f055ef9e522 +0 -0
  81. data/test/dummy/tmp/cache/assets/D09/DA0/sprockets%2Fa128ed69035c50db9cf4530f847a232d +0 -0
  82. data/test/dummy/tmp/cache/assets/D0E/A50/sprockets%2F468261fcdd6da4ae335b6c649407642a +0 -0
  83. data/test/dummy/tmp/cache/assets/D0F/A00/sprockets%2F217ed4e8ba29d846187e02c07a7d3d16 +0 -0
  84. data/test/dummy/tmp/cache/assets/D15/460/sprockets%2F5e20cc6d707d604c87f1043fc59ae596 +0 -0
  85. data/test/dummy/tmp/cache/assets/D16/D10/sprockets%2F333dae5d08f2e7850832ce0c674e9b93 +0 -0
  86. data/test/dummy/tmp/cache/assets/D22/870/sprockets%2F4b8d9e928e17ed67ff01fa83837080f1 +0 -0
  87. data/test/dummy/tmp/cache/assets/D2D/360/sprockets%2Fc1ad77232fa01c1626bd87aef06951a2 +0 -0
  88. data/test/dummy/tmp/cache/assets/D33/070/sprockets%2F032ca4516063b36df778dcc512b8a6dc +0 -0
  89. data/test/dummy/tmp/cache/assets/D39/1E0/sprockets%2Ff9c833e26cf56e40e203bc1b4219d5c5 +0 -0
  90. data/test/dummy/tmp/cache/assets/D39/7B0/sprockets%2Fa8690aabd7f00442715ce19dd5c9b354 +0 -0
  91. data/test/dummy/tmp/cache/assets/D3F/FA0/sprockets%2F22c8366fdbaaa2872b202dfe7376629f +0 -0
  92. data/test/dummy/tmp/cache/assets/D49/BC0/sprockets%2F93df722705d460d54cacae968beb8790 +0 -0
  93. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  94. data/test/dummy/tmp/cache/assets/D52/080/sprockets%2F02ef730a09ca2dd5d1051d492825abaa +0 -0
  95. data/test/dummy/tmp/cache/assets/D5A/560/sprockets%2Fad87bf89db0c636d2899f3d47eb70838 +0 -0
  96. data/test/dummy/tmp/cache/assets/D61/DD0/sprockets%2Fb2451cc5a100eae9932abac970808df7 +0 -0
  97. data/test/dummy/tmp/cache/assets/D70/0D0/sprockets%2F75765d3bfee9346a60198cbb8cdad102 +0 -0
  98. data/test/dummy/tmp/cache/assets/D73/8E0/sprockets%2F3ca5f1e3af1278de20d8dd955c57c294 +0 -0
  99. data/test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +1093 -1435
  100. data/test/dummy/tmp/cache/assets/D91/080/sprockets%2Fbcca522c6302f184f12fe0e8a7d7e71a +0 -0
  101. data/test/dummy/tmp/cache/assets/D99/2D0/sprockets%2F9d2cc0bcc83c5c5dd8129271fc88aa04 +0 -0
  102. data/test/dummy/tmp/cache/assets/D9F/300/sprockets%2Fc13fc73ceafa45876a901b3e775b83ae +0 -0
  103. data/test/dummy/tmp/cache/assets/DA5/5E0/sprockets%2F5ce12bd3f860cef43ffd6737c98d106a +0 -0
  104. data/test/dummy/tmp/cache/assets/DAE/6A0/sprockets%2Fe416a2a891a5f97fddb97ecc762f95a1 +0 -0
  105. data/test/dummy/tmp/cache/assets/DD5/C90/sprockets%2Fd55fb0d1a6d0ea7096cf7ffcb66752f6 +0 -0
  106. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  107. data/test/dummy/tmp/cache/assets/DFF/EA0/sprockets%2Fc05f92ff4e2fa5eadcfe9d3d151047f3 +0 -0
  108. data/test/dummy/tmp/cache/assets/E02/BF0/sprockets%2F136aca6e9aaec765cd78a28a2bcb79e7 +0 -0
  109. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  110. data/test/dummy/tmp/cache/assets/E1D/200/sprockets%2Faaff0ad50df12a7ad76ce7b32d377e0b +0 -0
  111. data/test/dummy/tmp/cache/assets/E22/B10/sprockets%2Fec73dbc745e21ceda62ae0b9d41b4ed5 +152 -158
  112. data/test/dummy/tmp/cache/assets/E3A/D90/sprockets%2Fce0dbefdb4416ebc42589ecdbf7d7857 +0 -0
  113. data/test/dummy/tmp/cache/assets/E5F/300/sprockets%2F243a2fff0dbb8aeec3dd579b4ff7c81b +1624 -2374
  114. data/test/dummy/tmp/cache/assets/test/sass/8f72aeff1178075699c0d6fdead3bf4e974c0ea8/bootstrap.css.scssc +0 -0
  115. data/test/dummy/tmp/cache/assets/test/sass/9f022039bcde6dbfad5a4cecd880da08604928b6/individual.css.scssc +0 -0
  116. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_accordion.scssc +0 -0
  117. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_alerts.scssc +0 -0
  118. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_badges.scssc +0 -0
  119. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_breadcrumbs.scssc +0 -0
  120. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_button-groups.scssc +0 -0
  121. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_buttons.scssc +0 -0
  122. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_carousel.scssc +0 -0
  123. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_close.scssc +0 -0
  124. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_code.scssc +0 -0
  125. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_component-animations.scssc +0 -0
  126. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_dropdowns.scssc +0 -0
  127. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_forms.scssc +0 -0
  128. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_glyphicons.scssc +0 -0
  129. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_grid.scssc +0 -0
  130. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_jumbotron.scssc +0 -0
  131. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_labels.scssc +0 -0
  132. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_list-group.scssc +0 -0
  133. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_media.scssc +0 -0
  134. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_mixins.scssc +0 -0
  135. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_modals.scssc +0 -0
  136. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_navbar.scssc +0 -0
  137. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_navs.scssc +0 -0
  138. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_normalize.scssc +0 -0
  139. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_pager.scssc +0 -0
  140. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_pagination.scssc +0 -0
  141. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_panels.scssc +0 -0
  142. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_popovers.scssc +0 -0
  143. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_print.scssc +0 -0
  144. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_progress-bars.scssc +0 -0
  145. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_responsive-utilities.scssc +0 -0
  146. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_scaffolding.scssc +0 -0
  147. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_tables.scssc +0 -0
  148. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_thumbnails.scssc +0 -0
  149. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_tooltip.scssc +0 -0
  150. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_type.scssc +0 -0
  151. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_utilities.scssc +0 -0
  152. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_variables.scssc +0 -0
  153. data/test/dummy/tmp/cache/assets/test/sass/cfad29a224e7f58382c29443f9b09f2fd1187615/_wells.scssc +0 -0
  154. data/test/dummy/tmp/cache/assets/test/sprockets/02ef730a09ca2dd5d1051d492825abaa +0 -0
  155. data/test/dummy/tmp/cache/assets/test/sprockets/032ca4516063b36df778dcc512b8a6dc +0 -0
  156. data/test/dummy/tmp/cache/assets/test/sprockets/0b4e89e7ef810989f02643e226d2799f +0 -0
  157. data/test/dummy/tmp/cache/assets/test/sprockets/136aca6e9aaec765cd78a28a2bcb79e7 +0 -0
  158. data/test/dummy/tmp/cache/assets/test/sprockets/17944d87edb3d6c919fabddafa06e625 +0 -0
  159. data/test/dummy/tmp/cache/assets/test/sprockets/19646e859b697be7dd414259f4f9ff62 +0 -0
  160. data/test/dummy/tmp/cache/assets/test/sprockets/1ac94a8529fe0f023d8a7793a71c9ee1 +0 -0
  161. data/test/dummy/tmp/cache/assets/test/sprockets/217ed4e8ba29d846187e02c07a7d3d16 +0 -0
  162. data/test/dummy/tmp/cache/assets/test/sprockets/22c8366fdbaaa2872b202dfe7376629f +0 -0
  163. data/test/dummy/tmp/cache/assets/test/sprockets/272615ec4af76b10339048ca6da44284 +0 -0
  164. data/test/dummy/tmp/cache/assets/test/sprockets/29d763bd40cc25622b1f04b876a5c3e3 +0 -0
  165. data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  166. data/test/dummy/tmp/cache/assets/test/sprockets/333dae5d08f2e7850832ce0c674e9b93 +0 -0
  167. data/test/dummy/tmp/cache/assets/test/sprockets/339a6cb9e577ba950d8b438b9e080577 +0 -0
  168. data/test/dummy/tmp/cache/assets/test/sprockets/3ca5f1e3af1278de20d8dd955c57c294 +0 -0
  169. data/test/dummy/tmp/cache/assets/test/sprockets/468261fcdd6da4ae335b6c649407642a +0 -0
  170. data/test/dummy/tmp/cache/assets/test/sprockets/468c709115f67bff62b7bc8c58577018 +0 -0
  171. data/test/dummy/tmp/cache/assets/test/sprockets/47f8666418cd38da2ff7625f02422b5e +0 -0
  172. data/test/dummy/tmp/cache/assets/test/sprockets/4a73849355d6fd23920426e6beee0670 +0 -0
  173. data/test/dummy/tmp/cache/assets/test/sprockets/4b8d9e928e17ed67ff01fa83837080f1 +0 -0
  174. data/test/dummy/tmp/cache/assets/test/sprockets/508e55e1444b44d0187677a51893acf2 +0 -0
  175. data/test/dummy/tmp/cache/assets/test/sprockets/530e67cd61f082e10b6b1f055ef9e522 +0 -0
  176. data/test/dummy/tmp/cache/assets/test/sprockets/5ce12bd3f860cef43ffd6737c98d106a +0 -0
  177. data/test/dummy/tmp/cache/assets/test/sprockets/5e20cc6d707d604c87f1043fc59ae596 +0 -0
  178. data/test/dummy/tmp/cache/assets/test/sprockets/657e02950f485b10525c2247b3d43a97 +0 -0
  179. data/test/dummy/tmp/cache/assets/test/sprockets/70398c32ae5ccaa657b2b8ab8aafd095 +0 -0
  180. data/test/dummy/tmp/cache/assets/test/sprockets/75765d3bfee9346a60198cbb8cdad102 +0 -0
  181. data/test/dummy/tmp/cache/assets/test/sprockets/78b40808be290175c2aed7d0223adb10 +0 -0
  182. data/test/dummy/tmp/cache/assets/test/sprockets/7984a23519ffe6f306f43f447266634f +0 -0
  183. data/test/dummy/tmp/cache/assets/test/sprockets/8ab512c9b33ac90e699b73469d71f061 +0 -0
  184. data/test/dummy/tmp/cache/assets/test/sprockets/93df722705d460d54cacae968beb8790 +0 -0
  185. data/test/dummy/tmp/cache/assets/test/sprockets/95516af385b1c218d233ec924c081e2b +0 -0
  186. data/test/dummy/tmp/cache/assets/test/sprockets/9d2cc0bcc83c5c5dd8129271fc88aa04 +0 -0
  187. data/test/dummy/tmp/cache/assets/test/sprockets/a128ed69035c50db9cf4530f847a232d +0 -0
  188. data/test/dummy/tmp/cache/assets/test/sprockets/a8690aabd7f00442715ce19dd5c9b354 +0 -0
  189. data/test/dummy/tmp/cache/assets/test/sprockets/aaff0ad50df12a7ad76ce7b32d377e0b +0 -0
  190. data/test/dummy/tmp/cache/assets/test/sprockets/ab4b53d2f50152d21a34997eafa92699 +0 -0
  191. data/test/dummy/tmp/cache/assets/test/sprockets/ad87bf89db0c636d2899f3d47eb70838 +0 -0
  192. data/test/dummy/tmp/cache/assets/test/sprockets/b2451cc5a100eae9932abac970808df7 +0 -0
  193. data/test/dummy/tmp/cache/assets/test/sprockets/bcca522c6302f184f12fe0e8a7d7e71a +0 -0
  194. data/test/dummy/tmp/cache/assets/test/sprockets/c05f92ff4e2fa5eadcfe9d3d151047f3 +0 -0
  195. data/test/dummy/tmp/cache/assets/test/sprockets/c13fc73ceafa45876a901b3e775b83ae +0 -0
  196. data/test/dummy/tmp/cache/assets/test/sprockets/c1ad77232fa01c1626bd87aef06951a2 +0 -0
  197. data/test/dummy/tmp/cache/assets/test/sprockets/ce0dbefdb4416ebc42589ecdbf7d7857 +0 -0
  198. data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  199. data/test/dummy/tmp/cache/assets/test/sprockets/d55fb0d1a6d0ea7096cf7ffcb66752f6 +0 -0
  200. data/test/dummy/tmp/cache/assets/test/sprockets/e416a2a891a5f97fddb97ecc762f95a1 +0 -0
  201. data/test/dummy/tmp/cache/assets/test/sprockets/f56d388878ed87bc4b45095e1e69542c +0 -0
  202. data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  203. data/test/dummy/tmp/cache/assets/test/sprockets/f9c833e26cf56e40e203bc1b4219d5c5 +0 -0
  204. data/test/dummy/tmp/cache/assets/test/sprockets/fad89ee9eff7367c9620338e7e1f8ce1 +0 -0
  205. data/test/dummy/tmp/cache/sass/56c119ce8b3716a2decf2be77551c309cebe0abe/bootstrap.css.scssc +0 -0
  206. data/test/dummy/tmp/cache/sass/73d26439e044eca0a3af4a431659ef4346a1c77c/individual.css.scssc +0 -0
  207. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_accordion.scssc +0 -0
  208. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_alerts.scssc +0 -0
  209. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_badges.scssc +0 -0
  210. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_breadcrumbs.scssc +0 -0
  211. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_button-groups.scssc +0 -0
  212. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_buttons.scssc +0 -0
  213. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_carousel.scssc +0 -0
  214. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_close.scssc +0 -0
  215. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_code.scssc +0 -0
  216. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_component-animations.scssc +0 -0
  217. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_dropdowns.scssc +0 -0
  218. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_forms.scssc +0 -0
  219. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_glyphicons.scssc +0 -0
  220. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_grid.scssc +0 -0
  221. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_jumbotron.scssc +0 -0
  222. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_labels.scssc +0 -0
  223. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_list-group.scssc +0 -0
  224. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_media.scssc +0 -0
  225. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_mixins.scssc +0 -0
  226. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_modals.scssc +0 -0
  227. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_navbar.scssc +0 -0
  228. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_navs.scssc +0 -0
  229. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_normalize.scssc +0 -0
  230. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_pager.scssc +0 -0
  231. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_pagination.scssc +0 -0
  232. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_panels.scssc +0 -0
  233. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_popovers.scssc +0 -0
  234. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_print.scssc +0 -0
  235. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_progress-bars.scssc +0 -0
  236. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_responsive-utilities.scssc +0 -0
  237. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_scaffolding.scssc +0 -0
  238. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_tables.scssc +0 -0
  239. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_thumbnails.scssc +0 -0
  240. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_tooltip.scssc +0 -0
  241. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_type.scssc +0 -0
  242. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_utilities.scssc +0 -0
  243. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_variables.scssc +0 -0
  244. data/test/dummy/tmp/cache/sass/e41478386532815a970184a6cca59a0fc53ffa12/_wells.scssc +0 -0
  245. metadata +303 -25
  246. data/app/assets/images/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
  247. data/app/assets/images/twitter/bootstrap/glyphicons-halflings.png +0 -0
  248. data/app/assets/javascripts/twitter/bootstrap/typeahead.js +0 -335
  249. data/app/assets/stylesheets/twitter/bootstrap-no-sprites.css.scss +0 -62
  250. data/app/assets/stylesheets/twitter/bootstrap/_hero-unit.scss +0 -26
  251. data/app/assets/stylesheets/twitter/bootstrap/_labels-badges.scss +0 -84
  252. data/app/assets/stylesheets/twitter/bootstrap/_layouts.scss +0 -17
  253. data/app/assets/stylesheets/twitter/bootstrap/_reset.scss +0 -216
  254. data/app/assets/stylesheets/twitter/bootstrap/_responsive-1200px-min.scss +0 -29
  255. data/app/assets/stylesheets/twitter/bootstrap/_responsive-767px-max.scss +0 -193
  256. data/app/assets/stylesheets/twitter/bootstrap/_responsive-768px-979px.scss +0 -22
  257. data/app/assets/stylesheets/twitter/bootstrap/_responsive-navbar.scss +0 -189
  258. data/app/assets/stylesheets/twitter/bootstrap/_responsive.scss +0 -48
  259. data/app/assets/stylesheets/twitter/bootstrap/_sprites.scss +0 -199
  260. data/test/dummy/app/assets/stylesheets/no-sprites.css.scss +0 -3
@@ -1,10 +1,10 @@
1
- o: ActiveSupport::Cache::Entry :@compressedF:@created_atf1373007102.3002791:@expires_in0: @value{ I" length:EFiG�I" digest;
2
- F"%5c86908cb3f36b969febfd1090f666b6I" source;
3
- FI"G�/* ===================================================
4
- * bootstrap-transition.js v2.3.2
5
- * http://twitter.github.com/bootstrap/javascript.html#transitions
6
- * ===================================================
7
- * Copyright 2012 Twitter, Inc.
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@created_atf1374932717.470976:@expires_in0: @value{ I" length:EFi�I" digest;
2
+ F"%4a8559f84794adeaa002daa3e293e46bI" source;
3
+ FI"�/* ========================================================================
4
+ * Bootstrap: transition.js v3.0.0
5
+ * http://twbs.github.com/bootstrap/javascript.html#transitions
6
+ * ========================================================================
7
+ * Copyright 2013 Twitter, Inc.
8
8
  *
9
9
  * Licensed under the Apache License, Version 2.0 (the "License");
10
10
  * you may not use this file except in compliance with the License.
@@ -17,55 +17,51 @@ FI"G
17
17
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
18
  * See the License for the specific language governing permissions and
19
19
  * limitations under the License.
20
- * ========================================================== */
21
-
22
-
23
-
24
- !function ($) {
20
+ * ======================================================================== */
25
21
 
26
- "use strict"; // jshint ;_;
27
-
28
-
29
- /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
30
- * ======================================================= */
31
-
32
- $(function () {
33
22
 
34
- $.support.transition = (function () {
35
23
 
36
- var transitionEnd = (function () {
24
+ +function ($) { "use strict";
37
25
 
38
- var el = document.createElement('bootstrap')
39
- , transEndEventNames = {
40
- 'WebkitTransition' : 'webkitTransitionEnd'
41
- , 'MozTransition' : 'transitionend'
42
- , 'OTransition' : 'oTransitionEnd otransitionend'
43
- , 'transition' : 'transitionend'
44
- }
45
- , name
26
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
27
+ // ============================================================
46
28
 
47
- for (name in transEndEventNames){
48
- if (el.style[name] !== undefined) {
49
- return transEndEventNames[name]
50
- }
51
- }
29
+ function transitionEnd() {
30
+ var el = document.createElement('bootstrap')
52
31
 
53
- }())
32
+ var transEndEventNames = {
33
+ 'WebkitTransition' : 'webkitTransitionEnd'
34
+ , 'MozTransition' : 'transitionend'
35
+ , 'OTransition' : 'oTransitionEnd otransitionend'
36
+ , 'transition' : 'transitionend'
37
+ }
54
38
 
55
- return transitionEnd && {
56
- end: transitionEnd
39
+ for (var name in transEndEventNames) {
40
+ if (el.style[name] !== undefined) {
41
+ return { end: transEndEventNames[name] }
57
42
  }
43
+ }
44
+ }
58
45
 
59
- })()
46
+ // http://blog.alexmaccaw.com/css-transitions
47
+ $.fn.emulateTransitionEnd = function (duration) {
48
+ var called = false, $el = this
49
+ $(this).one('webkitTransitionEnd', function () { called = true })
50
+ var callback = function () { if (!called) $($el).trigger('webkitTransitionEnd') }
51
+ setTimeout(callback, duration)
52
+ return this
53
+ }
60
54
 
55
+ $(function () {
56
+ $.support.transition = transitionEnd()
61
57
  })
62
58
 
63
59
  }(window.jQuery);
64
- /* ==========================================================
65
- * bootstrap-alert.js v2.3.2
66
- * http://twitter.github.com/bootstrap/javascript.html#alerts
67
- * ==========================================================
68
- * Copyright 2012 Twitter, Inc.
60
+ /* ========================================================================
61
+ * Bootstrap: alert.js v3.0.0
62
+ * http://twbs.github.com/bootstrap/javascript.html#alerts
63
+ * ========================================================================
64
+ * Copyright 2013 Twitter, Inc.
69
65
  *
70
66
  * Licensed under the Apache License, Version 2.0 (the "License");
71
67
  * you may not use this file except in compliance with the License.
@@ -78,67 +74,66 @@ FI"G
78
74
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
79
75
  * See the License for the specific language governing permissions and
80
76
  * limitations under the License.
81
- * ========================================================== */
77
+ * ======================================================================== */
82
78
 
83
79
 
84
80
 
85
- !function ($) {
81
+ +function ($) { "use strict";
86
82
 
87
- "use strict"; // jshint ;_;
88
-
89
-
90
- /* ALERT CLASS DEFINITION
91
- * ====================== */
83
+ // ALERT CLASS DEFINITION
84
+ // ======================
92
85
 
93
86
  var dismiss = '[data-dismiss="alert"]'
94
- , Alert = function (el) {
95
- $(el).on('click', dismiss, this.close)
96
- }
87
+ var Alert = function (el) {
88
+ $(el).on('click', dismiss, this.close)
89
+ }
97
90
 
98
91
  Alert.prototype.close = function (e) {
99
- var $this = $(this)
100
- , selector = $this.attr('data-target')
101
- , $parent
92
+ var $this = $(this)
93
+ var selector = $this.attr('data-target')
102
94
 
103
95
  if (!selector) {
104
96
  selector = $this.attr('href')
105
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
97
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
106
98
  }
107
99
 
108
- $parent = $(selector)
100
+ var $parent = $(selector)
109
101
 
110
- e && e.preventDefault()
102
+ if (e) e.preventDefault()
111
103
 
112
- $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
104
+ if (!$parent.length) {
105
+ $parent = $this.hasClass('alert') ? $this : $this.parent()
106
+ }
113
107
 
114
- $parent.trigger(e = $.Event('close'))
108
+ $parent.trigger(e = $.Event('close.bs.alert'))
115
109
 
116
110
  if (e.isDefaultPrevented()) return
117
111
 
118
112
  $parent.removeClass('in')
119
113
 
120
114
  function removeElement() {
121
- $parent
122
- .trigger('closed')
123
- .remove()
115
+ $parent.trigger('closed.bs.alert').remove()
124
116
  }
125
117
 
126
118
  $.support.transition && $parent.hasClass('fade') ?
127
- $parent.on($.support.transition.end, removeElement) :
119
+ $parent
120
+ .one($.support.transition.end, removeElement)
121
+ .emulateTransitionEnd(150) :
128
122
  removeElement()
129
123
  }
130
124
 
131
125
 
132
- /* ALERT PLUGIN DEFINITION
133
- * ======================= */
126
+ // ALERT PLUGIN DEFINITION
127
+ // =======================
134
128
 
135
129
  var old = $.fn.alert
136
130
 
137
131
  $.fn.alert = function (option) {
138
132
  return this.each(function () {
139
133
  var $this = $(this)
140
- , data = $this.data('alert')
141
- if (!data) $this.data('alert', (data = new Alert(this)))
134
+ var data = $this.data('bs.alert')
135
+
136
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
142
137
  if (typeof option == 'string') data[option].call($this)
143
138
  })
144
139
  }
@@ -146,8 +141,8 @@ FI"G
146
141
  $.fn.alert.Constructor = Alert
147
142
 
148
143
 
149
- /* ALERT NO CONFLICT
150
- * ================= */
144
+ // ALERT NO CONFLICT
145
+ // =================
151
146
 
152
147
  $.fn.alert.noConflict = function () {
153
148
  $.fn.alert = old
@@ -155,17 +150,17 @@ FI"G
155
150
  }
156
151
 
157
152
 
158
- /* ALERT DATA-API
159
- * ============== */
153
+ // ALERT DATA-API
154
+ // ==============
160
155
 
161
- $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
156
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
162
157
 
163
158
  }(window.jQuery);
164
- /* ============================================================
165
- * bootstrap-button.js v2.3.2
166
- * http://twitter.github.com/bootstrap/javascript.html#buttons
167
- * ============================================================
168
- * Copyright 2012 Twitter, Inc.
159
+ /* ========================================================================
160
+ * Bootstrap: button.js v3.0.0
161
+ * http://twbs.github.com/bootstrap/javascript.html#buttons
162
+ * ========================================================================
163
+ * Copyright 2013 Twitter, Inc.
169
164
  *
170
165
  * Licensed under the Apache License, Version 2.0 (the "License");
171
166
  * you may not use this file except in compliance with the License.
@@ -178,31 +173,33 @@ FI"G
178
173
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
179
174
  * See the License for the specific language governing permissions and
180
175
  * limitations under the License.
181
- * ============================================================ */
176
+ * ======================================================================== */
182
177
 
183
178
 
184
179
 
185
- !function ($) {
180
+ +function ($) { "use strict";
186
181
 
187
- "use strict"; // jshint ;_;
188
-
189
-
190
- /* BUTTON PUBLIC CLASS DEFINITION
191
- * ============================== */
182
+ // BUTTON PUBLIC CLASS DEFINITION
183
+ // ==============================
192
184
 
193
185
  var Button = function (element, options) {
194
186
  this.$element = $(element)
195
- this.options = $.extend({}, $.fn.button.defaults, options)
187
+ this.options = $.extend({}, Button.DEFAULTS, options)
188
+ }
189
+
190
+ Button.DEFAULTS = {
191
+ loadingText: 'loading...'
196
192
  }
197
193
 
198
194
  Button.prototype.setState = function (state) {
199
- var d = 'disabled'
200
- , $el = this.$element
201
- , data = $el.data()
202
- , val = $el.is('input') ? 'val' : 'html'
195
+ var d = 'disabled'
196
+ var $el = this.$element
197
+ var val = $el.is('input') ? 'val' : 'html'
198
+ var data = $el.data()
203
199
 
204
200
  state = state + 'Text'
205
- data.resetText || $el.data('resetText', $el[val]())
201
+
202
+ if (!data.resetText) $el.data('resetText', $el[val]())
206
203
 
207
204
  $el[val](data[state] || this.options[state])
208
205
 
@@ -210,46 +207,45 @@ FI"G
210
207
  setTimeout(function () {
211
208
  state == 'loadingText' ?
212
209
  $el.addClass(d).attr(d, d) :
213
- $el.removeClass(d).removeAttr(d)
210
+ $el.removeClass(d).removeAttr(d);
214
211
  }, 0)
215
212
  }
216
213
 
217
214
  Button.prototype.toggle = function () {
218
- var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
215
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
219
216
 
220
- $parent && $parent
221
- .find('.active')
222
- .removeClass('active')
217
+ if ($parent.length) {
218
+ var $input = this.$element.find('input').prop('checked', !this.$element.hasClass('active'))
219
+ if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')
220
+ }
223
221
 
224
222
  this.$element.toggleClass('active')
225
223
  }
226
224
 
227
225
 
228
- /* BUTTON PLUGIN DEFINITION
229
- * ======================== */
226
+ // BUTTON PLUGIN DEFINITION
227
+ // ========================
230
228
 
231
229
  var old = $.fn.button
232
230
 
233
231
  $.fn.button = function (option) {
234
232
  return this.each(function () {
235
- var $this = $(this)
236
- , data = $this.data('button')
237
- , options = typeof option == 'object' && option
238
- if (!data) $this.data('button', (data = new Button(this, options)))
233
+ var $this = $(this)
234
+ var data = $this.data('button')
235
+ var options = typeof option == 'object' && option
236
+
237
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
238
+
239
239
  if (option == 'toggle') data.toggle()
240
240
  else if (option) data.setState(option)
241
241
  })
242
242
  }
243
243
 
244
- $.fn.button.defaults = {
245
- loadingText: 'loading...'
246
- }
247
-
248
244
  $.fn.button.Constructor = Button
249
245
 
250
246
 
251
- /* BUTTON NO CONFLICT
252
- * ================== */
247
+ // BUTTON NO CONFLICT
248
+ // ==================
253
249
 
254
250
  $.fn.button.noConflict = function () {
255
251
  $.fn.button = old
@@ -257,20 +253,21 @@ FI"G
257
253
  }
258
254
 
259
255
 
260
- /* BUTTON DATA-API
261
- * =============== */
256
+ // BUTTON DATA-API
257
+ // ===============
262
258
 
263
- $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
259
+ $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
264
260
  var $btn = $(e.target)
265
261
  if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
266
262
  $btn.button('toggle')
263
+ e.preventDefault()
267
264
  })
268
265
 
269
266
  }(window.jQuery);
270
- /* ==========================================================
271
- * bootstrap-carousel.js v2.3.2
272
- * http://twitter.github.com/bootstrap/javascript.html#carousel
273
- * ==========================================================
267
+ /* ========================================================================
268
+ * Bootstrap: carousel.js v3.0.0
269
+ * http://twbs.github.com/bootstrap/javascript.html#carousel
270
+ * ========================================================================
274
271
  * Copyright 2012 Twitter, Inc.
275
272
  *
276
273
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -284,201 +281,207 @@ FI"G
284
281
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
285
282
  * See the License for the specific language governing permissions and
286
283
  * limitations under the License.
287
- * ========================================================== */
288
-
284
+ * ======================================================================== */
289
285
 
290
286
 
291
- !function ($) {
292
287
 
293
- "use strict"; // jshint ;_;
288
+ +function ($) { "use strict";
294
289
 
295
-
296
- /* CAROUSEL CLASS DEFINITION
297
- * ========================= */
290
+ // CAROUSEL CLASS DEFINITION
291
+ // =========================
298
292
 
299
293
  var Carousel = function (element, options) {
300
- this.$element = $(element)
294
+ this.$element = $(element)
301
295
  this.$indicators = this.$element.find('.carousel-indicators')
302
- this.options = options
296
+ this.options = options
297
+ this.paused =
298
+ this.sliding =
299
+ this.interval =
300
+ this.$active =
301
+ this.$items = null
302
+
303
303
  this.options.pause == 'hover' && this.$element
304
304
  .on('mouseenter', $.proxy(this.pause, this))
305
305
  .on('mouseleave', $.proxy(this.cycle, this))
306
306
  }
307
307
 
308
- Carousel.prototype = {
308
+ Carousel.DEFAULTS = {
309
+ interval: 5000
310
+ , pause: 'hover'
311
+ }
312
+
313
+ Carousel.prototype.cycle = function (e) {
314
+ e || (this.paused = false)
309
315
 
310
- cycle: function (e) {
311
- if (!e) this.paused = false
312
- if (this.interval) clearInterval(this.interval);
313
- this.options.interval
314
- && !this.paused
315
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
316
- return this
317
- }
316
+ this.interval && clearInterval(this.interval)
318
317
 
319
- , getActiveIndex: function () {
320
- this.$active = this.$element.find('.item.active')
321
- this.$items = this.$active.parent().children()
322
- return this.$items.index(this.$active)
323
- }
318
+ this.options.interval
319
+ && !this.paused
320
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
324
321
 
325
- , to: function (pos) {
326
- var activeIndex = this.getActiveIndex()
327
- , that = this
322
+ return this
323
+ }
328
324
 
329
- if (pos > (this.$items.length - 1) || pos < 0) return
325
+ Carousel.prototype.getActiveIndex = function () {
326
+ this.$active = this.$element.find('.item.active')
327
+ this.$items = this.$active.parent().children()
330
328
 
331
- if (this.sliding) {
332
- return this.$element.one('slid', function () {
333
- that.to(pos)
334
- })
335
- }
329
+ return this.$items.index(this.$active)
330
+ }
336
331
 
337
- if (activeIndex == pos) {
338
- return this.pause().cycle()
339
- }
332
+ Carousel.prototype.to = function (pos) {
333
+ var that = this
334
+ var activeIndex = this.getActiveIndex()
340
335
 
341
- return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
342
- }
336
+ if (pos > (this.$items.length - 1) || pos < 0) return
343
337
 
344
- , pause: function (e) {
345
- if (!e) this.paused = true
346
- if (this.$element.find('.next, .prev').length && $.support.transition.end) {
347
- this.$element.trigger($.support.transition.end)
348
- this.cycle(true)
349
- }
350
- clearInterval(this.interval)
351
- this.interval = null
352
- return this
353
- }
338
+ if (this.sliding) return this.$element.one('slid', function () { that.to(pos) })
339
+ if (activeIndex == pos) return this.pause().cycle()
354
340
 
355
- , next: function () {
356
- if (this.sliding) return
357
- return this.slide('next')
358
- }
341
+ return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
342
+ }
359
343
 
360
- , prev: function () {
361
- if (this.sliding) return
362
- return this.slide('prev')
344
+ Carousel.prototype.pause = function (e) {
345
+ e || (this.paused = true)
346
+
347
+ if (this.$element.find('.next, .prev').length && $.support.transition.end) {
348
+ this.$element.trigger($.support.transition.end)
349
+ this.cycle(true)
363
350
  }
364
351
 
365
- , slide: function (type, next) {
366
- var $active = this.$element.find('.item.active')
367
- , $next = next || $active[type]()
368
- , isCycling = this.interval
369
- , direction = type == 'next' ? 'left' : 'right'
370
- , fallback = type == 'next' ? 'first' : 'last'
371
- , that = this
372
- , e
352
+ this.interval = clearInterval(this.interval)
373
353
 
374
- this.sliding = true
354
+ return this
355
+ }
375
356
 
376
- isCycling && this.pause()
357
+ Carousel.prototype.next = function () {
358
+ if (this.sliding) return
359
+ return this.slide('next')
360
+ }
377
361
 
378
- $next = $next.length ? $next : this.$element.find('.item')[fallback]()
362
+ Carousel.prototype.prev = function () {
363
+ if (this.sliding) return
364
+ return this.slide('prev')
365
+ }
379
366
 
380
- e = $.Event('slide', {
381
- relatedTarget: $next[0]
382
- , direction: direction
383
- })
367
+ Carousel.prototype.slide = function (type, next) {
368
+ var $active = this.$element.find('.item.active')
369
+ var $next = next || $active[type]()
370
+ var isCycling = this.interval
371
+ var direction = type == 'next' ? 'left' : 'right'
372
+ var fallback = type == 'next' ? 'first' : 'last'
373
+ var that = this
384
374
 
385
- if ($next.hasClass('active')) return
375
+ this.sliding = true
386
376
 
387
- if (this.$indicators.length) {
388
- this.$indicators.find('.active').removeClass('active')
389
- this.$element.one('slid', function () {
390
- var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
391
- $nextIndicator && $nextIndicator.addClass('active')
392
- })
393
- }
377
+ isCycling && this.pause()
394
378
 
395
- if ($.support.transition && this.$element.hasClass('slide')) {
396
- this.$element.trigger(e)
397
- if (e.isDefaultPrevented()) return
398
- $next.addClass(type)
399
- $next[0].offsetWidth // force reflow
400
- $active.addClass(direction)
401
- $next.addClass(direction)
402
- this.$element.one($.support.transition.end, function () {
379
+ $next = $next.length ? $next : this.$element.find('.item')[fallback]()
380
+
381
+ var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
382
+
383
+ if ($next.hasClass('active')) return
384
+
385
+ if (this.$indicators.length) {
386
+ this.$indicators.find('.active').removeClass('active')
387
+ this.$element.one('slid', function () {
388
+ var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
389
+ $nextIndicator && $nextIndicator.addClass('active')
390
+ })
391
+ }
392
+
393
+ if ($.support.transition && this.$element.hasClass('slide')) {
394
+ this.$element.trigger(e)
395
+ if (e.isDefaultPrevented()) return
396
+ $next.addClass(type)
397
+ $next[0].offsetWidth // force reflow
398
+ $active.addClass(direction)
399
+ $next.addClass(direction)
400
+ $active
401
+ .one($.support.transition.end, function () {
403
402
  $next.removeClass([type, direction].join(' ')).addClass('active')
404
403
  $active.removeClass(['active', direction].join(' '))
405
404
  that.sliding = false
406
405
  setTimeout(function () { that.$element.trigger('slid') }, 0)
407
406
  })
408
- } else {
409
- this.$element.trigger(e)
410
- if (e.isDefaultPrevented()) return
411
- $active.removeClass('active')
412
- $next.addClass('active')
413
- this.sliding = false
414
- this.$element.trigger('slid')
415
- }
416
-
417
- isCycling && this.cycle()
418
-
419
- return this
407
+ .emulateTransitionEnd(600)
408
+ } else {
409
+ this.$element.trigger(e)
410
+ if (e.isDefaultPrevented()) return
411
+ $active.removeClass('active')
412
+ $next.addClass('active')
413
+ this.sliding = false
414
+ this.$element.trigger('slid')
420
415
  }
421
416
 
417
+ isCycling && this.cycle()
418
+
419
+ return this
422
420
  }
423
421
 
424
422
 
425
- /* CAROUSEL PLUGIN DEFINITION
426
- * ========================== */
423
+ // CAROUSEL PLUGIN DEFINITION
424
+ // ==========================
427
425
 
428
426
  var old = $.fn.carousel
429
427
 
430
428
  $.fn.carousel = function (option) {
431
429
  return this.each(function () {
432
- var $this = $(this)
433
- , data = $this.data('carousel')
434
- , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
435
- , action = typeof option == 'string' ? option : options.slide
436
- if (!data) $this.data('carousel', (data = new Carousel(this, options)))
430
+ var $this = $(this)
431
+ var data = $this.data('bs.carousel')
432
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
433
+ var action = typeof option == 'string' ? option : options.slide
434
+
435
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
437
436
  if (typeof option == 'number') data.to(option)
438
437
  else if (action) data[action]()
439
438
  else if (options.interval) data.pause().cycle()
440
439
  })
441
440
  }
442
441
 
443
- $.fn.carousel.defaults = {
444
- interval: 5000
445
- , pause: 'hover'
446
- }
447
-
448
442
  $.fn.carousel.Constructor = Carousel
449
443
 
450
444
 
451
- /* CAROUSEL NO CONFLICT
452
- * ==================== */
445
+ // CAROUSEL NO CONFLICT
446
+ // ====================
453
447
 
454
448
  $.fn.carousel.noConflict = function () {
455
449
  $.fn.carousel = old
456
450
  return this
457
451
  }
458
452
 
459
- /* CAROUSEL DATA-API
460
- * ================= */
461
453
 
462
- $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
463
- var $this = $(this), href
464
- , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
465
- , options = $.extend({}, $target.data(), $this.data())
466
- , slideIndex
454
+ // CAROUSEL DATA-API
455
+ // =================
456
+
457
+ $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
458
+ var $this = $(this), href
459
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
460
+ var options = $.extend({}, $target.data(), $this.data())
461
+ var slideIndex = $this.attr('data-slide-to')
462
+ if (slideIndex) options.interval = false
467
463
 
468
464
  $target.carousel(options)
469
465
 
470
466
  if (slideIndex = $this.attr('data-slide-to')) {
471
- $target.data('carousel').pause().to(slideIndex).cycle()
467
+ $target.data('bs.carousel').to(slideIndex)
472
468
  }
473
469
 
474
470
  e.preventDefault()
475
471
  })
476
472
 
473
+ $(window).on('load', function () {
474
+ $('[data-ride="carousel"]').each(function () {
475
+ var $carousel = $(this)
476
+ $carousel.carousel($carousel.data())
477
+ })
478
+ })
479
+
477
480
  }(window.jQuery);
478
- /* =============================================================
479
- * bootstrap-collapse.js v2.3.2
480
- * http://twitter.github.com/bootstrap/javascript.html#collapse
481
- * =============================================================
481
+ /* ========================================================================
482
+ * Bootstrap: collapse.js v3.0.0
483
+ * http://twbs.github.com/bootstrap/javascript.html#collapse
484
+ * ========================================================================
482
485
  * Copyright 2012 Twitter, Inc.
483
486
  *
484
487
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -492,136 +495,139 @@ FI"G
492
495
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
493
496
  * See the License for the specific language governing permissions and
494
497
  * limitations under the License.
495
- * ============================================================ */
496
-
498
+ * ======================================================================== */
497
499
 
498
500
 
499
- !function ($) {
500
501
 
501
- "use strict"; // jshint ;_;
502
+ +function ($) { "use strict";
502
503
 
503
-
504
- /* COLLAPSE PUBLIC CLASS DEFINITION
505
- * ================================ */
504
+ // COLLAPSE PUBLIC CLASS DEFINITION
505
+ // ================================
506
506
 
507
507
  var Collapse = function (element, options) {
508
- this.$element = $(element)
509
- this.options = $.extend({}, $.fn.collapse.defaults, options)
508
+ this.$element = $(element)
509
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
510
+ this.transitioning = null
510
511
 
511
- if (this.options.parent) {
512
- this.$parent = $(this.options.parent)
513
- }
512
+ if (this.options.parent) this.$parent = $(this.options.parent)
513
+ if (this.options.toggle) this.toggle()
514
+ }
514
515
 
515
- this.options.toggle && this.toggle()
516
+ Collapse.DEFAULTS = {
517
+ toggle: true
516
518
  }
517
519
 
518
- Collapse.prototype = {
520
+ Collapse.prototype.dimension = function () {
521
+ var hasWidth = this.$element.hasClass('width')
522
+ return hasWidth ? 'width' : 'height'
523
+ }
519
524
 
520
- constructor: Collapse
525
+ Collapse.prototype.show = function () {
526
+ if (this.transitioning || this.$element.hasClass('in')) return
521
527
 
522
- , dimension: function () {
523
- var hasWidth = this.$element.hasClass('width')
524
- return hasWidth ? 'width' : 'height'
525
- }
528
+ var startEvent = $.Event('show.bs.collapse')
529
+ this.$element.trigger(startEvent)
530
+ if (startEvent.isDefaultPrevented()) return
526
531
 
527
- , show: function () {
528
- var dimension
529
- , scroll
530
- , actives
531
- , hasData
532
+ var actives = this.$parent && this.$parent.find('> .accordion-group > .in')
532
533
 
533
- if (this.transitioning || this.$element.hasClass('in')) return
534
+ if (actives && actives.length) {
535
+ var hasData = actives.data('bs.collapse')
536
+ if (hasData && hasData.transitioning) return
537
+ actives.collapse('hide')
538
+ hasData || actives.data('bs.collapse', null)
539
+ }
534
540
 
535
- dimension = this.dimension()
536
- scroll = $.camelCase(['scroll', dimension].join('-'))
537
- actives = this.$parent && this.$parent.find('> .accordion-group > .in')
541
+ var dimension = this.dimension()
538
542
 
539
- if (actives && actives.length) {
540
- hasData = actives.data('collapse')
541
- if (hasData && hasData.transitioning) return
542
- actives.collapse('hide')
543
- hasData || actives.data('collapse', null)
544
- }
543
+ this.$element
544
+ .removeClass('collapse')
545
+ .addClass('collapsing')
546
+ [dimension](0)
545
547
 
546
- this.$element[dimension](0)
547
- this.transition('addClass', $.Event('show'), 'shown')
548
- $.support.transition && this.$element[dimension](this.$element[0][scroll])
549
- }
548
+ this.transitioning = 1
550
549
 
551
- , hide: function () {
552
- var dimension
553
- if (this.transitioning || !this.$element.hasClass('in')) return
554
- dimension = this.dimension()
555
- this.reset(this.$element[dimension]())
556
- this.transition('removeClass', $.Event('hide'), 'hidden')
557
- this.$element[dimension](0)
550
+ var complete = function () {
551
+ this.$element
552
+ .removeClass('collapsing')
553
+ .addClass('in')
554
+ [dimension]('auto')
555
+ this.transitioning = 0
556
+ this.$element.trigger('shown.bs.collapse')
558
557
  }
559
558
 
560
- , reset: function (size) {
561
- var dimension = this.dimension()
559
+ if (!$.support.transition) return complete.call(this)
562
560
 
563
- this.$element
564
- .removeClass('collapse')
565
- [dimension](size || 'auto')
566
- [0].offsetWidth
561
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
567
562
 
568
- this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
563
+ this.$element
564
+ .one($.support.transition.end, $.proxy(complete, this))
565
+ .emulateTransitionEnd(350)
566
+ [dimension](this.$element[0][scrollSize])
567
+ }
569
568
 
570
- return this
571
- }
569
+ Collapse.prototype.hide = function () {
570
+ if (this.transitioning || !this.$element.hasClass('in')) return
572
571
 
573
- , transition: function (method, startEvent, completeEvent) {
574
- var that = this
575
- , complete = function () {
576
- if (startEvent.type == 'show') that.reset()
577
- that.transitioning = 0
578
- that.$element.trigger(completeEvent)
579
- }
572
+ var startEvent = $.Event('hide.bs.collapse')
573
+ this.$element.trigger(startEvent)
574
+ if (startEvent.isDefaultPrevented()) return
580
575
 
581
- this.$element.trigger(startEvent)
576
+ var dimension = this.dimension()
582
577
 
583
- if (startEvent.isDefaultPrevented()) return
578
+ this.$element
579
+ [dimension](this.$element[dimension]())
580
+ [0].offsetHeight
584
581
 
585
- this.transitioning = 1
582
+ this.$element
583
+ .addClass('collapsing')
584
+ .removeClass('collapse')
585
+ .removeClass('in')
586
586
 
587
- this.$element[method]('in')
587
+ this.transitioning = 1
588
588
 
589
- $.support.transition && this.$element.hasClass('collapse') ?
590
- this.$element.one($.support.transition.end, complete) :
591
- complete()
589
+ var complete = function () {
590
+ this.transitioning = 0
591
+ this.$element
592
+ .trigger('hidden.bs.collapse')
593
+ .removeClass('collapsing')
594
+ .addClass('collapse')
592
595
  }
593
596
 
594
- , toggle: function () {
595
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
596
- }
597
+ if (!$.support.transition) return complete.call(this)
598
+
599
+ this.$element
600
+ [dimension](0)
601
+ .one($.support.transition.end, $.proxy(complete, this))
602
+ .emulateTransitionEnd(350)
603
+ }
597
604
 
605
+ Collapse.prototype.toggle = function () {
606
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
598
607
  }
599
608
 
600
609
 
601
- /* COLLAPSE PLUGIN DEFINITION
602
- * ========================== */
610
+ // COLLAPSE PLUGIN DEFINITION
611
+ // ==========================
603
612
 
604
613
  var old = $.fn.collapse
605
614
 
606
615
  $.fn.collapse = function (option) {
607
616
  return this.each(function () {
608
- var $this = $(this)
609
- , data = $this.data('collapse')
610
- , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
611
- if (!data) $this.data('collapse', (data = new Collapse(this, options)))
617
+ var $this = $(this)
618
+ var data = $this.data('bs.collapse')
619
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
620
+
621
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
612
622
  if (typeof option == 'string') data[option]()
613
623
  })
614
624
  }
615
625
 
616
- $.fn.collapse.defaults = {
617
- toggle: true
618
- }
619
-
620
626
  $.fn.collapse.Constructor = Collapse
621
627
 
622
628
 
623
- /* COLLAPSE NO CONFLICT
624
- * ==================== */
629
+ // COLLAPSE NO CONFLICT
630
+ // ====================
625
631
 
626
632
  $.fn.collapse.noConflict = function () {
627
633
  $.fn.collapse = old
@@ -629,24 +635,33 @@ FI"G
629
635
  }
630
636
 
631
637
 
632
- /* COLLAPSE DATA-API
633
- * ================= */
638
+ // COLLAPSE DATA-API
639
+ // =================
634
640
 
635
- $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
636
- var $this = $(this), href
637
- , target = $this.attr('data-target')
641
+ $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
642
+ var $this = $(this), href
643
+ var target = $this.attr('data-target')
638
644
  || e.preventDefault()
639
645
  || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
640
- , option = $(target).data('collapse') ? 'toggle' : $this.data()
641
- $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
642
- $(target).collapse(option)
646
+ var $target = $(target)
647
+ var data = $target.data('bs.collapse')
648
+ var option = data ? 'toggle' : $this.data()
649
+ var parent = $this.attr('data-parent')
650
+ var $parent = parent && $(parent)
651
+
652
+ if (!data || !data.transitioning) {
653
+ if ($parent) $parent.find('[data-toggle=collapse][data-parent=' + parent + ']').not($this).addClass('collapsed')
654
+ $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
655
+ }
656
+
657
+ $target.collapse(option)
643
658
  })
644
659
 
645
660
  }(window.jQuery);
646
- /* ============================================================
647
- * bootstrap-dropdown.js v2.3.2
648
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
649
- * ============================================================
661
+ /* ========================================================================
662
+ * Bootstrap: dropdown.js v3.0.0
663
+ * http://twbs.github.com/bootstrap/javascript.html#dropdowns
664
+ * ========================================================================
650
665
  * Copyright 2012 Twitter, Inc.
651
666
  *
652
667
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -660,132 +675,117 @@ FI"G
660
675
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
661
676
  * See the License for the specific language governing permissions and
662
677
  * limitations under the License.
663
- * ============================================================ */
664
-
678
+ * ======================================================================== */
665
679
 
666
680
 
667
- !function ($) {
668
681
 
669
- "use strict"; // jshint ;_;
682
+ +function ($) { "use strict";
670
683
 
684
+ // DROPDOWN CLASS DEFINITION
685
+ // =========================
671
686
 
672
- /* DROPDOWN CLASS DEFINITION
673
- * ========================= */
674
-
675
- var toggle = '[data-toggle=dropdown]'
676
- , Dropdown = function (element) {
677
- var $el = $(element).on('click.dropdown.data-api', this.toggle)
678
- $('html').on('click.dropdown.data-api', function () {
679
- $el.parent().removeClass('open')
680
- })
681
- }
682
-
683
- Dropdown.prototype = {
684
-
685
- constructor: Dropdown
686
-
687
- , toggle: function (e) {
688
- var $this = $(this)
689
- , $parent
690
- , isActive
687
+ var backdrop = '.dropdown-backdrop'
688
+ var toggle = '[data-toggle=dropdown]'
689
+ var Dropdown = function (element) {
690
+ var $el = $(element).on('click.bs.dropdown', this.toggle)
691
+ }
691
692
 
692
- if ($this.is('.disabled, :disabled')) return
693
+ Dropdown.prototype.toggle = function (e) {
694
+ var $this = $(this)
693
695
 
694
- $parent = getParent($this)
696
+ if ($this.is('.disabled, :disabled')) return
695
697
 
696
- isActive = $parent.hasClass('open')
698
+ var $parent = getParent($this)
699
+ var isActive = $parent.hasClass('open')
697
700
 
698
- clearMenus()
701
+ clearMenus()
699
702
 
700
- if (!isActive) {
701
- if ('ontouchstart' in document.documentElement) {
702
- // if mobile we we use a backdrop because click events don't delegate
703
- $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
704
- }
705
- $parent.toggleClass('open')
703
+ if (!isActive) {
704
+ if ('ontouchstart' in document.documentElement) {
705
+ // if mobile we we use a backdrop because click events don't delegate
706
+ $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
706
707
  }
707
708
 
708
- $this.focus()
709
+ $parent.trigger(e = $.Event('show.bs.dropdown'))
709
710
 
710
- return false
711
- }
711
+ if (e.isDefaultPrevented()) return
712
712
 
713
- , keydown: function (e) {
714
- var $this
715
- , $items
716
- , $active
717
- , $parent
718
- , isActive
719
- , index
713
+ $parent
714
+ .toggleClass('open')
715
+ .trigger('shown.bs.dropdown')
716
+ }
720
717
 
721
- if (!/(38|40|27)/.test(e.keyCode)) return
718
+ $this.focus()
722
719
 
723
- $this = $(this)
720
+ return false
721
+ }
724
722
 
725
- e.preventDefault()
726
- e.stopPropagation()
723
+ Dropdown.prototype.keydown = function (e) {
724
+ if (!/(38|40|27)/.test(e.keyCode)) return
727
725
 
728
- if ($this.is('.disabled, :disabled')) return
726
+ var $this = $(this)
729
727
 
730
- $parent = getParent($this)
728
+ e.preventDefault()
729
+ e.stopPropagation()
731
730
 
732
- isActive = $parent.hasClass('open')
731
+ if ($this.is('.disabled, :disabled')) return
733
732
 
734
- if (!isActive || (isActive && e.keyCode == 27)) {
735
- if (e.which == 27) $parent.find(toggle).focus()
736
- return $this.click()
737
- }
733
+ var $parent = getParent($this)
734
+ var isActive = $parent.hasClass('open')
738
735
 
739
- $items = $('[role=menu] li:not(.divider):visible a', $parent)
736
+ if (!isActive || (isActive && e.keyCode == 27)) {
737
+ if (e.which == 27) $parent.find(toggle).focus()
738
+ return $this.click()
739
+ }
740
740
 
741
- if (!$items.length) return
741
+ var $items = $('[role=menu] li:not(.divider):visible a', $parent)
742
742
 
743
- index = $items.index($items.filter(':focus'))
743
+ if (!$items.length) return
744
744
 
745
- if (e.keyCode == 38 && index > 0) index-- // up
746
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
747
- if (!~index) index = 0
745
+ var index = $items.index($items.filter(':focus'))
748
746
 
749
- $items
750
- .eq(index)
751
- .focus()
752
- }
747
+ if (e.keyCode == 38 && index > 0) index-- // up
748
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
749
+ if (!~index) index=0
753
750
 
751
+ $items.eq(index).focus()
754
752
  }
755
753
 
756
754
  function clearMenus() {
757
- $('.dropdown-backdrop').remove()
758
- $(toggle).each(function () {
759
- getParent($(this)).removeClass('open')
755
+ $(backdrop).remove()
756
+ $(toggle).each(function (e) {
757
+ var $parent = getParent($(this))
758
+ if (!$parent.hasClass('open')) return
759
+ $parent.trigger(e = $.Event('hide.bs.dropdown'))
760
+ if (e.isDefaultPrevented()) return
761
+ $parent.removeClass('open').trigger('hidden.bs.dropdown')
760
762
  })
761
763
  }
762
764
 
763
765
  function getParent($this) {
764
766
  var selector = $this.attr('data-target')
765
- , $parent
766
767
 
767
768
  if (!selector) {
768
769
  selector = $this.attr('href')
769
770
  selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
770
771
  }
771
772
 
772
- $parent = selector && $(selector)
773
-
774
- if (!$parent || !$parent.length) $parent = $this.parent()
773
+ var $parent = selector && $(selector)
775
774
 
776
- return $parent
775
+ return $parent && $parent.length ? $parent : $this.parent()
777
776
  }
778
777
 
779
778
 
780
- /* DROPDOWN PLUGIN DEFINITION
781
- * ========================== */
779
+ // DROPDOWN PLUGIN DEFINITION
780
+ // ==========================
782
781
 
783
782
  var old = $.fn.dropdown
784
783
 
785
784
  $.fn.dropdown = function (option) {
786
785
  return this.each(function () {
787
786
  var $this = $(this)
788
- , data = $this.data('dropdown')
787
+ var data = $this.data('dropdown')
788
+
789
789
  if (!data) $this.data('dropdown', (data = new Dropdown(this)))
790
790
  if (typeof option == 'string') data[option].call($this)
791
791
  })
@@ -794,8 +794,8 @@ FI"G
794
794
  $.fn.dropdown.Constructor = Dropdown
795
795
 
796
796
 
797
- /* DROPDOWN NO CONFLICT
798
- * ==================== */
797
+ // DROPDOWN NO CONFLICT
798
+ // ====================
799
799
 
800
800
  $.fn.dropdown.noConflict = function () {
801
801
  $.fn.dropdown = old
@@ -803,20 +803,20 @@ FI"G
803
803
  }
804
804
 
805
805
 
806
- /* APPLY TO STANDARD DROPDOWN ELEMENTS
807
- * =================================== */
806
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
807
+ // ===================================
808
808
 
809
809
  $(document)
810
- .on('click.dropdown.data-api', clearMenus)
811
- .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
812
- .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
813
- .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
810
+ .on('click.bs.dropdown.data-api', clearMenus)
811
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
812
+ .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
813
+ .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
814
814
 
815
815
  }(window.jQuery);
816
- /* =========================================================
817
- * bootstrap-modal.js v2.3.2
818
- * http://twitter.github.com/bootstrap/javascript.html#modals
819
- * =========================================================
816
+ /* ========================================================================
817
+ * Bootstrap: modal.js v3.0.0
818
+ * http://twbs.github.com/bootstrap/javascript.html#modals
819
+ * ========================================================================
820
820
  * Copyright 2012 Twitter, Inc.
821
821
  *
822
822
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -830,211 +830,201 @@ FI"G
830
830
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
831
831
  * See the License for the specific language governing permissions and
832
832
  * limitations under the License.
833
- * ========================================================= */
834
-
833
+ * ======================================================================== */
835
834
 
836
835
 
837
- !function ($) {
838
836
 
839
- "use strict"; // jshint ;_;
837
+ +function ($) { "use strict";
840
838
 
841
-
842
- /* MODAL CLASS DEFINITION
843
- * ====================== */
839
+ // MODAL CLASS DEFINITION
840
+ // ======================
844
841
 
845
842
  var Modal = function (element, options) {
846
- this.options = options
847
- this.$element = $(element)
848
- .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
849
- this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
850
- }
851
-
852
- Modal.prototype = {
853
-
854
- constructor: Modal
855
-
856
- , toggle: function () {
857
- return this[!this.isShown ? 'show' : 'hide']()
858
- }
859
-
860
- , show: function () {
861
- var that = this
862
- , e = $.Event('show')
843
+ this.options = options
844
+ this.$element = $(element).on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
845
+ this.$backdrop =
846
+ this.isShown = null
863
847
 
864
- this.$element.trigger(e)
848
+ if (this.options.remote) this.$element.find('.modal-body').load(this.options.remote)
849
+ }
865
850
 
866
- if (this.isShown || e.isDefaultPrevented()) return
851
+ Modal.DEFAULTS = {
852
+ backdrop: true
853
+ , keyboard: true
854
+ , show: true
855
+ }
867
856
 
868
- this.isShown = true
857
+ Modal.prototype.toggle = function () {
858
+ return this[!this.isShown ? 'show' : 'hide']()
859
+ }
869
860
 
870
- this.escape()
861
+ Modal.prototype.show = function () {
862
+ var that = this
863
+ var e = $.Event('show.bs.modal')
871
864
 
872
- this.backdrop(function () {
873
- var transition = $.support.transition && that.$element.hasClass('fade')
865
+ this.$element.trigger(e)
874
866
 
875
- if (!that.$element.parent().length) {
876
- that.$element.appendTo(document.body) //don't move modals dom position
877
- }
867
+ if (this.isShown || e.isDefaultPrevented()) return
878
868
 
879
- that.$element.show()
869
+ this.isShown = true
880
870
 
881
- if (transition) {
882
- that.$element[0].offsetWidth // force reflow
883
- }
871
+ this.escape()
884
872
 
885
- that.$element
886
- .addClass('in')
887
- .attr('aria-hidden', false)
873
+ this.backdrop(function () {
874
+ var transition = $.support.transition && that.$element.hasClass('fade')
888
875
 
889
- that.enforceFocus()
876
+ if (!that.$element.parent().length) {
877
+ that.$element.appendTo(document.body) // don't move modals dom position
878
+ }
890
879
 
891
- transition ?
892
- that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
893
- that.$element.focus().trigger('shown')
880
+ that.$element.show()
894
881
 
895
- })
882
+ if (transition) {
883
+ that.$element[0].offsetWidth // force reflow
896
884
  }
897
885
 
898
- , hide: function (e) {
899
- e && e.preventDefault()
886
+ that.$element
887
+ .addClass('in')
888
+ .attr('aria-hidden', false)
900
889
 
901
- var that = this
890
+ that.enforceFocus()
902
891
 
903
- e = $.Event('hide')
892
+ transition ?
893
+ that.$element
894
+ .one($.support.transition.end, function () {
895
+ that.$element.focus().trigger('shown.bs.modal')
896
+ })
897
+ .emulateTransitionEnd(300) :
898
+ that.$element.focus().trigger('shown.bs.modal')
899
+ })
900
+ }
904
901
 
905
- this.$element.trigger(e)
902
+ Modal.prototype.hide = function (e) {
903
+ if (e) e.preventDefault()
906
904
 
907
- if (!this.isShown || e.isDefaultPrevented()) return
905
+ e = $.Event('hide.bs.modal')
908
906
 
909
- this.isShown = false
907
+ this.$element.trigger(e)
910
908
 
911
- this.escape()
909
+ if (!this.isShown || e.isDefaultPrevented()) return
912
910
 
913
- $(document).off('focusin.modal')
911
+ this.isShown = false
914
912
 
915
- this.$element
916
- .removeClass('in')
917
- .attr('aria-hidden', true)
913
+ this.escape()
918
914
 
919
- $.support.transition && this.$element.hasClass('fade') ?
920
- this.hideWithTransition() :
921
- this.hideModal()
922
- }
915
+ $(document).off('focusin.bs.modal')
923
916
 
924
- , enforceFocus: function () {
925
- var that = this
926
- $(document).on('focusin.modal', function (e) {
927
- if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
928
- that.$element.focus()
929
- }
930
- })
931
- }
917
+ this.$element
918
+ .removeClass('in')
919
+ .attr('aria-hidden', true)
932
920
 
933
- , escape: function () {
934
- var that = this
935
- if (this.isShown && this.options.keyboard) {
936
- this.$element.on('keyup.dismiss.modal', function ( e ) {
937
- e.which == 27 && that.hide()
938
- })
939
- } else if (!this.isShown) {
940
- this.$element.off('keyup.dismiss.modal')
941
- }
942
- }
921
+ $.support.transition && this.$element.hasClass('fade') ?
922
+ this.$element
923
+ .one($.support.transition.end, $.proxy(this.hideModal, this))
924
+ .emulateTransitionEnd(300) :
925
+ this.hideModal()
926
+ }
943
927
 
944
- , hideWithTransition: function () {
945
- var that = this
946
- , timeout = setTimeout(function () {
947
- that.$element.off($.support.transition.end)
948
- that.hideModal()
949
- }, 500)
928
+ Modal.prototype.enforceFocus = function () {
929
+ $(document)
930
+ .off('focusin.bs.modal') // guard against infinite focus loop
931
+ .on('focusin.bs.modal', $.proxy(function (e) {
932
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
933
+ this.$element.focus()
934
+ }
935
+ }, this))
936
+ }
950
937
 
951
- this.$element.one($.support.transition.end, function () {
952
- clearTimeout(timeout)
953
- that.hideModal()
954
- })
955
- }
938
+ Modal.prototype.escape = function () {
939
+ if (this.isShown && this.options.keyboard) {
940
+ this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
941
+ e.which == 27 && this.hide()
942
+ }, this))
943
+ } else if (!this.isShown) {
944
+ this.$element.off('keyup.dismiss.bs.modal')
945
+ }
946
+ }
956
947
 
957
- , hideModal: function () {
958
- var that = this
959
- this.$element.hide()
960
- this.backdrop(function () {
961
- that.removeBackdrop()
962
- that.$element.trigger('hidden')
963
- })
964
- }
948
+ Modal.prototype.hideModal = function () {
949
+ var that = this
950
+ this.$element.hide()
951
+ this.backdrop(function () {
952
+ that.removeBackdrop()
953
+ that.$element.trigger('hidden.bs.modal')
954
+ })
955
+ }
965
956
 
966
- , removeBackdrop: function () {
967
- this.$backdrop && this.$backdrop.remove()
968
- this.$backdrop = null
969
- }
957
+ Modal.prototype.removeBackdrop = function () {
958
+ this.$backdrop && this.$backdrop.remove()
959
+ this.$backdrop = null
960
+ }
970
961
 
971
- , backdrop: function (callback) {
972
- var that = this
973
- , animate = this.$element.hasClass('fade') ? 'fade' : ''
962
+ Modal.prototype.backdrop = function (callback) {
963
+ var that = this
964
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
974
965
 
975
- if (this.isShown && this.options.backdrop) {
976
- var doAnimate = $.support.transition && animate
966
+ if (this.isShown && this.options.backdrop) {
967
+ var doAnimate = $.support.transition && animate
977
968
 
978
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
979
- .appendTo(document.body)
969
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
970
+ .appendTo(document.body)
980
971
 
981
- this.$backdrop.click(
982
- this.options.backdrop == 'static' ?
983
- $.proxy(this.$element[0].focus, this.$element[0])
984
- : $.proxy(this.hide, this)
985
- )
972
+ this.$element.on('click', $.proxy(function (e) {
973
+ if (e.target !== e.currentTarget) return
974
+ this.options.backdrop == 'static'
975
+ ? this.$element[0].focus.call(this.$element[0])
976
+ : this.hide.call(this)
977
+ }, this))
986
978
 
987
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
979
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
988
980
 
989
- this.$backdrop.addClass('in')
981
+ this.$backdrop.addClass('in')
990
982
 
991
- if (!callback) return
983
+ if (!callback) return
992
984
 
993
- doAnimate ?
994
- this.$backdrop.one($.support.transition.end, callback) :
995
- callback()
985
+ doAnimate ?
986
+ this.$backdrop
987
+ .one($.support.transition.end, callback)
988
+ .emulateTransitionEnd(150) :
989
+ callback()
996
990
 
997
- } else if (!this.isShown && this.$backdrop) {
998
- this.$backdrop.removeClass('in')
991
+ } else if (!this.isShown && this.$backdrop) {
992
+ this.$backdrop.removeClass('in')
999
993
 
1000
- $.support.transition && this.$element.hasClass('fade')?
1001
- this.$backdrop.one($.support.transition.end, callback) :
1002
- callback()
994
+ $.support.transition && this.$element.hasClass('fade')?
995
+ this.$backdrop
996
+ .one($.support.transition.end, callback)
997
+ .emulateTransitionEnd(150) :
998
+ callback()
1003
999
 
1004
- } else if (callback) {
1005
- callback()
1006
- }
1007
- }
1000
+ } else if (callback) {
1001
+ callback()
1002
+ }
1008
1003
  }
1009
1004
 
1010
1005
 
1011
- /* MODAL PLUGIN DEFINITION
1012
- * ======================= */
1006
+ // MODAL PLUGIN DEFINITION
1007
+ // =======================
1013
1008
 
1014
1009
  var old = $.fn.modal
1015
1010
 
1016
1011
  $.fn.modal = function (option) {
1017
1012
  return this.each(function () {
1018
- var $this = $(this)
1019
- , data = $this.data('modal')
1020
- , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
1021
- if (!data) $this.data('modal', (data = new Modal(this, options)))
1013
+ var $this = $(this)
1014
+ var data = $this.data('bs.modal')
1015
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
1016
+
1017
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
1022
1018
  if (typeof option == 'string') data[option]()
1023
1019
  else if (options.show) data.show()
1024
1020
  })
1025
1021
  }
1026
1022
 
1027
- $.fn.modal.defaults = {
1028
- backdrop: true
1029
- , keyboard: true
1030
- , show: true
1031
- }
1032
-
1033
1023
  $.fn.modal.Constructor = Modal
1034
1024
 
1035
1025
 
1036
- /* MODAL NO CONFLICT
1037
- * ================= */
1026
+ // MODAL NO CONFLICT
1027
+ // =================
1038
1028
 
1039
1029
  $.fn.modal.noConflict = function () {
1040
1030
  $.fn.modal = old
@@ -1042,30 +1032,34 @@ FI"G
1042
1032
  }
1043
1033
 
1044
1034
 
1045
- /* MODAL DATA-API
1046
- * ============== */
1035
+ // MODAL DATA-API
1036
+ // ==============
1047
1037
 
1048
- $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
1049
- var $this = $(this)
1050
- , href = $this.attr('href')
1051
- , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1052
- , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
1038
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
1039
+ var $this = $(this)
1040
+ var href = $this.attr('href')
1041
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1042
+ var option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
1053
1043
 
1054
1044
  e.preventDefault()
1055
1045
 
1056
1046
  $target
1057
1047
  .modal(option)
1058
1048
  .one('hide', function () {
1059
- $this.focus()
1049
+ $this.is(':visible') && $this.focus()
1060
1050
  })
1061
1051
  })
1062
1052
 
1053
+ var $body = $(document.body)
1054
+ .on('shown.bs.modal', '.modal', function () { $body.addClass('modal-open') })
1055
+ .on('hidden.bs.modal', '.modal', function () { $body.removeClass('modal-open') })
1056
+
1063
1057
  }(window.jQuery);
1064
- /* ===========================================================
1065
- * bootstrap-tooltip.js v2.3.2
1066
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
1058
+ /* ========================================================================
1059
+ * Bootstrap: tooltip.js v3.0.0
1060
+ * http://twbs.github.com/bootstrap/javascript.html#affix
1067
1061
  * Inspired by the original jQuery.tipsy by Jason Frame
1068
- * ===========================================================
1062
+ * ========================================================================
1069
1063
  * Copyright 2012 Twitter, Inc.
1070
1064
  *
1071
1065
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1079,343 +1073,346 @@ FI"G
1079
1073
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1080
1074
  * See the License for the specific language governing permissions and
1081
1075
  * limitations under the License.
1082
- * ========================================================== */
1083
-
1076
+ * ======================================================================== */
1084
1077
 
1085
1078
 
1086
- !function ($) {
1087
1079
 
1088
- "use strict"; // jshint ;_;
1080
+ +function ($) { "use strict";
1089
1081
 
1090
-
1091
- /* TOOLTIP PUBLIC CLASS DEFINITION
1092
- * =============================== */
1082
+ // TOOLTIP PUBLIC CLASS DEFINITION
1083
+ // ===============================
1093
1084
 
1094
1085
  var Tooltip = function (element, options) {
1086
+ this.type =
1087
+ this.options =
1088
+ this.enabled =
1089
+ this.timeout =
1090
+ this.hoverState =
1091
+ this.$element = null
1092
+
1095
1093
  this.init('tooltip', element, options)
1096
1094
  }
1097
1095
 
1098
- Tooltip.prototype = {
1096
+ Tooltip.DEFAULTS = {
1097
+ animation: true
1098
+ , placement: 'top'
1099
+ , selector: false
1100
+ , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1101
+ , trigger: 'hover focus'
1102
+ , title: ''
1103
+ , delay: 0
1104
+ , html: false
1105
+ , container: false
1106
+ }
1099
1107
 
1100
- constructor: Tooltip
1108
+ Tooltip.prototype.init = function (type, element, options) {
1109
+ this.enabled = true
1110
+ this.type = type
1111
+ this.$element = $(element)
1112
+ this.options = this.getOptions(options)
1101
1113
 
1102
- , init: function (type, element, options) {
1103
- var eventIn
1104
- , eventOut
1105
- , triggers
1106
- , trigger
1107
- , i
1114
+ var triggers = this.options.trigger.split(' ')
1108
1115
 
1109
- this.type = type
1110
- this.$element = $(element)
1111
- this.options = this.getOptions(options)
1112
- this.enabled = true
1116
+ for (var i = triggers.length; i--;) {
1117
+ var trigger = triggers[i]
1113
1118
 
1114
- triggers = this.options.trigger.split(' ')
1119
+ if (trigger == 'click') {
1120
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1121
+ } else if (trigger != 'manual') {
1122
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
1123
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
1115
1124
 
1116
- for (i = triggers.length; i--;) {
1117
- trigger = triggers[i]
1118
- if (trigger == 'click') {
1119
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1120
- } else if (trigger != 'manual') {
1121
- eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
1122
- eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
1123
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1124
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1125
- }
1125
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1126
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1126
1127
  }
1127
-
1128
- this.options.selector ?
1129
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1130
- this.fixTitle()
1131
1128
  }
1132
1129
 
1133
- , getOptions: function (options) {
1134
- options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
1130
+ this.options.selector ?
1131
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1132
+ this.fixTitle()
1133
+ }
1135
1134
 
1136
- if (options.delay && typeof options.delay == 'number') {
1137
- options.delay = {
1138
- show: options.delay
1139
- , hide: options.delay
1140
- }
1141
- }
1135
+ Tooltip.prototype.getDefaults = function () {
1136
+ return Tooltip.DEFAULTS
1137
+ }
1138
+
1139
+ Tooltip.prototype.getOptions = function (options) {
1140
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
1142
1141
 
1143
- return options
1142
+ if (options.delay && typeof options.delay == 'number') {
1143
+ options.delay = {
1144
+ show: options.delay
1145
+ , hide: options.delay
1146
+ }
1144
1147
  }
1145
1148
 
1146
- , enter: function (e) {
1147
- var defaults = $.fn[this.type].defaults
1148
- , options = {}
1149
- , self
1149
+ return options
1150
+ }
1150
1151
 
1151
- this._options && $.each(this._options, function (key, value) {
1152
- if (defaults[key] != value) options[key] = value
1153
- }, this)
1152
+ Tooltip.prototype.enter = function (obj) {
1153
+ var defaults = this.getDefaults()
1154
+ var options = {}
1154
1155
 
1155
- self = $(e.currentTarget)[this.type](options).data(this.type)
1156
+ this._options && $.each(this._options, function (key, value) {
1157
+ if (defaults[key] != value) options[key] = value
1158
+ })
1156
1159
 
1157
- if (!self.options.delay || !self.options.delay.show) return self.show()
1160
+ var self = obj instanceof this.constructor ?
1161
+ obj : $(obj.currentTarget)[this.type](options).data('bs.' + this.type)
1158
1162
 
1159
- clearTimeout(this.timeout)
1160
- self.hoverState = 'in'
1161
- this.timeout = setTimeout(function() {
1162
- if (self.hoverState == 'in') self.show()
1163
- }, self.options.delay.show)
1164
- }
1163
+ clearTimeout(self.timeout)
1165
1164
 
1166
- , leave: function (e) {
1167
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1165
+ if (!self.options.delay || !self.options.delay.show) return self.show()
1168
1166
 
1169
- if (this.timeout) clearTimeout(this.timeout)
1170
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
1167
+ self.hoverState = 'in'
1168
+ self.timeout = setTimeout(function () {
1169
+ if (self.hoverState == 'in') self.show()
1170
+ }, self.options.delay.show)
1171
+ }
1171
1172
 
1172
- self.hoverState = 'out'
1173
- this.timeout = setTimeout(function() {
1174
- if (self.hoverState == 'out') self.hide()
1175
- }, self.options.delay.hide)
1176
- }
1173
+ Tooltip.prototype.leave = function (obj) {
1174
+ var self = obj instanceof this.constructor ?
1175
+ obj : $(obj.currentTarget)[this.type](this._options).data('bs.' + this.type)
1177
1176
 
1178
- , show: function () {
1179
- var $tip
1180
- , pos
1181
- , actualWidth
1182
- , actualHeight
1183
- , placement
1184
- , tp
1185
- , e = $.Event('show')
1186
-
1187
- if (this.hasContent() && this.enabled) {
1188
- this.$element.trigger(e)
1189
- if (e.isDefaultPrevented()) return
1190
- $tip = this.tip()
1191
- this.setContent()
1192
-
1193
- if (this.options.animation) {
1194
- $tip.addClass('fade')
1195
- }
1177
+ clearTimeout(self.timeout)
1196
1178
 
1197
- placement = typeof this.options.placement == 'function' ?
1198
- this.options.placement.call(this, $tip[0], this.$element[0]) :
1199
- this.options.placement
1179
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
1200
1180
 
1201
- $tip
1202
- .detach()
1203
- .css({ top: 0, left: 0, display: 'block' })
1181
+ self.hoverState = 'out'
1182
+ self.timeout = setTimeout(function () {
1183
+ if (self.hoverState == 'out') self.hide()
1184
+ }, self.options.delay.hide)
1185
+ }
1204
1186
 
1205
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1187
+ Tooltip.prototype.show = function () {
1188
+ var e = $.Event('show.bs.'+ this.type)
1206
1189
 
1207
- pos = this.getPosition()
1190
+ if (this.hasContent() && this.enabled) {
1191
+ this.$element.trigger(e)
1208
1192
 
1209
- actualWidth = $tip[0].offsetWidth
1210
- actualHeight = $tip[0].offsetHeight
1193
+ if (e.isDefaultPrevented()) return
1211
1194
 
1212
- switch (placement) {
1213
- case 'bottom':
1214
- tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
1215
- break
1216
- case 'top':
1217
- tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
1218
- break
1219
- case 'left':
1220
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
1221
- break
1222
- case 'right':
1223
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
1224
- break
1225
- }
1195
+ var $tip = this.tip()
1226
1196
 
1227
- this.applyPlacement(tp, placement)
1228
- this.$element.trigger('shown')
1229
- }
1230
- }
1197
+ this.setContent()
1231
1198
 
1232
- , applyPlacement: function(offset, placement){
1233
- var $tip = this.tip()
1234
- , width = $tip[0].offsetWidth
1235
- , height = $tip[0].offsetHeight
1236
- , actualWidth
1237
- , actualHeight
1238
- , delta
1239
- , replace
1199
+ if (this.options.animation) $tip.addClass('fade')
1200
+
1201
+ var placement = typeof this.options.placement == 'function' ?
1202
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
1203
+ this.options.placement
1204
+
1205
+ var autoToken = /\s?auto?\s?/i
1206
+ var autoPlace = autoToken.test(placement)
1207
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
1240
1208
 
1241
1209
  $tip
1242
- .offset(offset)
1210
+ .detach()
1211
+ .css({ top: 0, left: 0, display: 'block' })
1243
1212
  .addClass(placement)
1244
- .addClass('in')
1245
1213
 
1246
- actualWidth = $tip[0].offsetWidth
1247
- actualHeight = $tip[0].offsetHeight
1214
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1248
1215
 
1249
- if (placement == 'top' && actualHeight != height) {
1250
- offset.top = offset.top + height - actualHeight
1251
- replace = true
1252
- }
1216
+ var pos = this.getPosition()
1217
+ var actualWidth = $tip[0].offsetWidth
1218
+ var actualHeight = $tip[0].offsetHeight
1253
1219
 
1254
- if (placement == 'bottom' || placement == 'top') {
1255
- delta = 0
1220
+ if (autoPlace) {
1221
+ var $parent = this.$element.parent()
1256
1222
 
1257
- if (offset.left < 0){
1258
- delta = offset.left * -2
1259
- offset.left = 0
1260
- $tip.offset(offset)
1261
- actualWidth = $tip[0].offsetWidth
1262
- actualHeight = $tip[0].offsetHeight
1263
- }
1223
+ var orgPlacement = placement
1224
+ var docScroll = document.documentElement.scrollTop || document.body.scrollTop
1225
+ var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
1226
+ var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
1227
+ var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
1264
1228
 
1265
- this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1266
- } else {
1267
- this.replaceArrow(actualHeight - height, actualHeight, 'top')
1229
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
1230
+ placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
1231
+ placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
1232
+ placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
1233
+ placement
1234
+
1235
+ $tip
1236
+ .removeClass(orgPlacement)
1237
+ .addClass(placement)
1268
1238
  }
1269
1239
 
1270
- if (replace) $tip.offset(offset)
1271
- }
1240
+ var tp = placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1241
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1242
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
1243
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
1272
1244
 
1273
- , replaceArrow: function(delta, dimension, position){
1274
- this
1275
- .arrow()
1276
- .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
1245
+ this.applyPlacement(tp, placement)
1246
+ this.$element.trigger('shown.bs.' + this.type)
1277
1247
  }
1248
+ }
1278
1249
 
1279
- , setContent: function () {
1280
- var $tip = this.tip()
1281
- , title = this.getTitle()
1250
+ Tooltip.prototype.applyPlacement = function(offset, placement) {
1251
+ var replace
1252
+ var $tip = this.tip()
1253
+ var width = $tip[0].offsetWidth
1254
+ var height = $tip[0].offsetHeight
1282
1255
 
1283
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1284
- $tip.removeClass('fade in top bottom left right')
1285
- }
1256
+ // manually read margins because getBoundingClientRect includes difference
1257
+ offset.top = offset.top + parseInt($tip.css('margin-top'), 10)
1258
+ offset.left = offset.left + parseInt($tip.css('margin-left'), 10)
1286
1259
 
1287
- , hide: function () {
1288
- var that = this
1289
- , $tip = this.tip()
1290
- , e = $.Event('hide')
1260
+ $tip
1261
+ .offset(offset)
1262
+ .addClass('in')
1291
1263
 
1292
- this.$element.trigger(e)
1293
- if (e.isDefaultPrevented()) return
1264
+ var actualWidth = $tip[0].offsetWidth
1265
+ var actualHeight = $tip[0].offsetHeight
1294
1266
 
1295
- $tip.removeClass('in')
1267
+ if (placement == 'top' && actualHeight != height) {
1268
+ replace = true
1269
+ offset.top = offset.top + height - actualHeight
1270
+ }
1296
1271
 
1297
- function removeWithAnimation() {
1298
- var timeout = setTimeout(function () {
1299
- $tip.off($.support.transition.end).detach()
1300
- }, 500)
1272
+ if (placement == 'bottom' || placement == 'top') {
1273
+ var delta = 0
1301
1274
 
1302
- $tip.one($.support.transition.end, function () {
1303
- clearTimeout(timeout)
1304
- $tip.detach()
1305
- })
1306
- }
1275
+ if (offset.left < 0){
1276
+ delta = offset.left * -2
1277
+ offset.left = 0
1307
1278
 
1308
- $.support.transition && this.$tip.hasClass('fade') ?
1309
- removeWithAnimation() :
1310
- $tip.detach()
1279
+ $tip.offset(offset)
1311
1280
 
1312
- this.$element.trigger('hidden')
1281
+ actualWidth = $tip[0].offsetWidth
1282
+ actualHeight = $tip[0].offsetHeight
1283
+ }
1313
1284
 
1314
- return this
1285
+ this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1286
+ } else {
1287
+ this.replaceArrow(actualHeight - height, actualHeight, 'top')
1315
1288
  }
1316
1289
 
1317
- , fixTitle: function () {
1318
- var $e = this.$element
1319
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1320
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1321
- }
1322
- }
1290
+ if (replace) $tip.offset(offset)
1291
+ }
1323
1292
 
1324
- , hasContent: function () {
1325
- return this.getTitle()
1326
- }
1293
+ Tooltip.prototype.replaceArrow = function(delta, dimension, position) {
1294
+ this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
1295
+ }
1327
1296
 
1328
- , getPosition: function () {
1329
- var el = this.$element[0]
1330
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1331
- width: el.offsetWidth
1332
- , height: el.offsetHeight
1333
- }, this.$element.offset())
1334
- }
1297
+ Tooltip.prototype.setContent = function () {
1298
+ var $tip = this.tip()
1299
+ var title = this.getTitle()
1335
1300
 
1336
- , getTitle: function () {
1337
- var title
1338
- , $e = this.$element
1339
- , o = this.options
1301
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1302
+ $tip.removeClass('fade in top bottom left right')
1303
+ }
1340
1304
 
1341
- title = $e.attr('data-original-title')
1342
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1305
+ Tooltip.prototype.hide = function () {
1306
+ var that = this
1307
+ var $tip = this.tip()
1308
+ var e = $.Event('hide.bs.' + this.type)
1343
1309
 
1344
- return title
1345
- }
1310
+ this.$element.trigger(e)
1346
1311
 
1347
- , tip: function () {
1348
- return this.$tip = this.$tip || $(this.options.template)
1349
- }
1312
+ if (e.isDefaultPrevented()) return
1350
1313
 
1351
- , arrow: function(){
1352
- return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
1353
- }
1314
+ $tip.removeClass('in')
1354
1315
 
1355
- , validate: function () {
1356
- if (!this.$element[0].parentNode) {
1357
- this.hide()
1358
- this.$element = null
1359
- this.options = null
1360
- }
1361
- }
1316
+ $.support.transition && this.$tip.hasClass('fade') ?
1317
+ $tip
1318
+ .one($.support.transition.end, $tip.detach)
1319
+ .emulateTransitionEnd(150) :
1320
+ $tip.detach()
1362
1321
 
1363
- , enable: function () {
1364
- this.enabled = true
1365
- }
1322
+ this.$element.trigger('hidden.bs.' + this.type)
1366
1323
 
1367
- , disable: function () {
1368
- this.enabled = false
1369
- }
1324
+ return this
1325
+ }
1370
1326
 
1371
- , toggleEnabled: function () {
1372
- this.enabled = !this.enabled
1327
+ Tooltip.prototype.fixTitle = function () {
1328
+ var $e = this.$element
1329
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1330
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1373
1331
  }
1332
+ }
1374
1333
 
1375
- , toggle: function (e) {
1376
- var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
1377
- self.tip().hasClass('in') ? self.hide() : self.show()
1378
- }
1334
+ Tooltip.prototype.hasContent = function () {
1335
+ return this.getTitle()
1336
+ }
1337
+
1338
+ Tooltip.prototype.getPosition = function () {
1339
+ var el = this.$element[0]
1340
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1341
+ width: el.offsetWidth
1342
+ , height: el.offsetHeight
1343
+ }, this.$element.offset())
1344
+ }
1345
+
1346
+ Tooltip.prototype.getTitle = function () {
1347
+ var title
1348
+ var $e = this.$element
1349
+ var o = this.options
1350
+
1351
+ title = $e.attr('data-original-title')
1352
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1353
+
1354
+ return title
1355
+ }
1356
+
1357
+ Tooltip.prototype.tip = function () {
1358
+ return this.$tip = this.$tip || $(this.options.template)
1359
+ }
1360
+
1361
+ Tooltip.prototype.arrow =function(){
1362
+ return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
1363
+ }
1379
1364
 
1380
- , destroy: function () {
1381
- this.hide().$element.off('.' + this.type).removeData(this.type)
1365
+ Tooltip.prototype.validate = function () {
1366
+ if (!this.$element[0].parentNode) {
1367
+ this.hide()
1368
+ this.$element = null
1369
+ this.options = null
1382
1370
  }
1371
+ }
1372
+
1373
+ Tooltip.prototype.enable = function () {
1374
+ this.enabled = true
1375
+ }
1376
+
1377
+ Tooltip.prototype.disable = function () {
1378
+ this.enabled = false
1379
+ }
1380
+
1381
+ Tooltip.prototype.toggleEnabled = function () {
1382
+ this.enabled = !this.enabled
1383
+ }
1384
+
1385
+ Tooltip.prototype.toggle = function (e) {
1386
+ var self = e ? $(e.currentTarget)[this.type](this._options).data('bs.' + this.type) : this
1387
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1388
+ }
1383
1389
 
1390
+ Tooltip.prototype.destroy = function () {
1391
+ this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
1384
1392
  }
1385
1393
 
1386
1394
 
1387
- /* TOOLTIP PLUGIN DEFINITION
1388
- * ========================= */
1395
+ // TOOLTIP PLUGIN DEFINITION
1396
+ // =========================
1389
1397
 
1390
1398
  var old = $.fn.tooltip
1391
1399
 
1392
- $.fn.tooltip = function ( option ) {
1400
+ $.fn.tooltip = function (option) {
1393
1401
  return this.each(function () {
1394
- var $this = $(this)
1395
- , data = $this.data('tooltip')
1396
- , options = typeof option == 'object' && option
1397
- if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1402
+ var $this = $(this)
1403
+ var data = $this.data('bs.tooltip')
1404
+ var options = typeof option == 'object' && option
1405
+
1406
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
1398
1407
  if (typeof option == 'string') data[option]()
1399
1408
  })
1400
1409
  }
1401
1410
 
1402
1411
  $.fn.tooltip.Constructor = Tooltip
1403
1412
 
1404
- $.fn.tooltip.defaults = {
1405
- animation: true
1406
- , placement: 'top'
1407
- , selector: false
1408
- , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1409
- , trigger: 'hover focus'
1410
- , title: ''
1411
- , delay: 0
1412
- , html: false
1413
- , container: false
1414
- }
1415
-
1416
1413
 
1417
- /* TOOLTIP NO CONFLICT
1418
- * =================== */
1414
+ // TOOLTIP NO CONFLICT
1415
+ // ===================
1419
1416
 
1420
1417
  $.fn.tooltip.noConflict = function () {
1421
1418
  $.fn.tooltip = old
@@ -1423,10 +1420,10 @@ FI"G
1423
1420
  }
1424
1421
 
1425
1422
  }(window.jQuery);
1426
- /* ===========================================================
1427
- * bootstrap-popover.js v2.3.2
1428
- * http://twitter.github.com/bootstrap/javascript.html#popovers
1429
- * ===========================================================
1423
+ /* ========================================================================
1424
+ * Bootstrap: popover.js v3.0.0
1425
+ * http://twbs.github.com/bootstrap/javascript.html#popovers
1426
+ * ========================================================================
1430
1427
  * Copyright 2012 Twitter, Inc.
1431
1428
  *
1432
1429
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1440,97 +1437,98 @@ FI"G
1440
1437
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1441
1438
  * See the License for the specific language governing permissions and
1442
1439
  * limitations under the License.
1443
- * =========================================================== */
1444
-
1440
+ * ======================================================================== */
1445
1441
 
1446
1442
 
1447
- !function ($) {
1448
1443
 
1449
- "use strict"; // jshint ;_;
1444
+ +function ($) { "use strict";
1450
1445
 
1451
-
1452
- /* POPOVER PUBLIC CLASS DEFINITION
1453
- * =============================== */
1446
+ // POPOVER PUBLIC CLASS DEFINITION
1447
+ // ===============================
1454
1448
 
1455
1449
  var Popover = function (element, options) {
1456
1450
  this.init('popover', element, options)
1457
1451
  }
1458
1452
 
1453
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1459
1454
 
1460
- /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1461
- ========================================== */
1455
+ Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {
1456
+ placement: 'right'
1457
+ , trigger: 'click'
1458
+ , content: ''
1459
+ , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1460
+ })
1462
1461
 
1463
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1464
1462
 
1465
- constructor: Popover
1463
+ // NOTE: POPOVER EXTENDS tooltip.js
1464
+ // ================================
1466
1465
 
1467
- , setContent: function () {
1468
- var $tip = this.tip()
1469
- , title = this.getTitle()
1470
- , content = this.getContent()
1466
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
1471
1467
 
1472
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1473
- $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
1468
+ Popover.prototype.constructor = Popover
1474
1469
 
1475
- $tip.removeClass('fade top bottom left right in')
1476
- }
1470
+ Popover.prototype.getDefaults = function () {
1471
+ return Popover.DEFAULTS
1472
+ }
1477
1473
 
1478
- , hasContent: function () {
1479
- return this.getTitle() || this.getContent()
1480
- }
1474
+ Popover.prototype.setContent = function () {
1475
+ var $tip = this.tip()
1476
+ var title = this.getTitle()
1477
+ var content = this.getContent()
1481
1478
 
1482
- , getContent: function () {
1483
- var content
1484
- , $e = this.$element
1485
- , o = this.options
1479
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1480
+ $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
1486
1481
 
1487
- content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
1488
- || $e.attr('data-content')
1482
+ $tip.removeClass('fade top bottom left right in')
1489
1483
 
1490
- return content
1491
- }
1484
+ $tip.find('.popover-title:empty').hide()
1485
+ }
1492
1486
 
1493
- , tip: function () {
1494
- if (!this.$tip) {
1495
- this.$tip = $(this.options.template)
1496
- }
1497
- return this.$tip
1498
- }
1487
+ Popover.prototype.hasContent = function () {
1488
+ return this.getTitle() || this.getContent()
1489
+ }
1499
1490
 
1500
- , destroy: function () {
1501
- this.hide().$element.off('.' + this.type).removeData(this.type)
1502
- }
1491
+ Popover.prototype.getContent = function () {
1492
+ var $e = this.$element
1493
+ var o = this.options
1503
1494
 
1504
- })
1495
+ return $e.attr('data-content')
1496
+ || (typeof o.content == 'function' ?
1497
+ o.content.call($e[0]) :
1498
+ o.content)
1499
+ }
1500
+
1501
+ Popover.prototype.tip = function () {
1502
+ if (!this.$tip) this.$tip = $(this.options.template)
1503
+ return this.$tip
1504
+ }
1505
+
1506
+ Popover.prototype.destroy = function () {
1507
+ this.hide().$element.off('.' + this.type).removeData(this.type)
1508
+ }
1505
1509
 
1506
1510
 
1507
- /* POPOVER PLUGIN DEFINITION
1508
- * ======================= */
1511
+ // POPOVER PLUGIN DEFINITION
1512
+ // =========================
1509
1513
 
1510
1514
  var old = $.fn.popover
1511
1515
 
1512
1516
  $.fn.popover = function (option) {
1513
1517
  return this.each(function () {
1514
- var $this = $(this)
1515
- , data = $this.data('popover')
1516
- , options = typeof option == 'object' && option
1517
- if (!data) $this.data('popover', (data = new Popover(this, options)))
1518
+ var $this = $(this)
1519
+ var data = $this.data('bs.popover')
1520
+ var options = typeof option == 'object' && option
1521
+
1522
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
1518
1523
  if (typeof option == 'string') data[option]()
1519
1524
  })
1520
1525
  }
1521
1526
 
1522
1527
  $.fn.popover.Constructor = Popover
1523
1528
 
1524
- $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1525
- placement: 'right'
1526
- , trigger: 'click'
1527
- , content: ''
1528
- , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1529
- })
1530
1529
 
1531
-
1532
- /* POPOVER NO CONFLICT
1533
- * =================== */
1530
+ // POPOVER NO CONFLICT
1531
+ // ===================
1534
1532
 
1535
1533
  $.fn.popover.noConflict = function () {
1536
1534
  $.fn.popover = old
@@ -1538,10 +1536,10 @@ FI"G
1538
1536
  }
1539
1537
 
1540
1538
  }(window.jQuery);
1541
- /* =============================================================
1542
- * bootstrap-scrollspy.js v2.3.2
1543
- * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1544
- * =============================================================
1539
+ /* ========================================================================
1540
+ * Bootstrap: scrollspy.js v3.0.0
1541
+ * http://twbs.github.com/bootstrap/javascript.html#scrollspy
1542
+ * ========================================================================
1545
1543
  * Copyright 2012 Twitter, Inc.
1546
1544
  *
1547
1545
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1555,134 +1553,130 @@ FI"G
1555
1553
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1556
1554
  * See the License for the specific language governing permissions and
1557
1555
  * limitations under the License.
1558
- * ============================================================== */
1559
-
1556
+ * ======================================================================== */
1560
1557
 
1561
1558
 
1562
- !function ($) {
1563
1559
 
1564
- "use strict"; // jshint ;_;
1560
+ +function ($) { "use strict";
1565
1561
 
1566
-
1567
- /* SCROLLSPY CLASS DEFINITION
1568
- * ========================== */
1562
+ // SCROLLSPY CLASS DEFINITION
1563
+ // ==========================
1569
1564
 
1570
1565
  function ScrollSpy(element, options) {
1571
- var process = $.proxy(this.process, this)
1572
- , $element = $(element).is('body') ? $(window) : $(element)
1573
- , href
1574
- this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1575
- this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
1576
- this.selector = (this.options.target
1566
+ var href
1567
+ var process = $.proxy(this.process, this)
1568
+
1569
+ this.$element = $(element).is('body') ? $(window) : $(element)
1570
+ this.$body = $('body')
1571
+ this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
1572
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
1573
+ this.selector = (this.options.target
1577
1574
  || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1578
1575
  || '') + ' .nav li > a'
1579
- this.$body = $('body')
1576
+ this.offsets = $([])
1577
+ this.targets = $([])
1578
+ this.activeTarget = null
1579
+
1580
1580
  this.refresh()
1581
1581
  this.process()
1582
1582
  }
1583
1583
 
1584
- ScrollSpy.prototype = {
1584
+ ScrollSpy.DEFAULTS = {
1585
+ offset: 10
1586
+ }
1585
1587
 
1586
- constructor: ScrollSpy
1588
+ ScrollSpy.prototype.refresh = function () {
1589
+ var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
1587
1590
 
1588
- , refresh: function () {
1589
- var self = this
1590
- , $targets
1591
+ this.offsets = $([])
1592
+ this.targets = $([])
1591
1593
 
1592
- this.offsets = $([])
1593
- this.targets = $([])
1594
+ var self = this
1595
+ var $targets = this.$body
1596
+ .find(this.selector)
1597
+ .map(function () {
1598
+ var $el = $(this)
1599
+ var href = $el.data('target') || $el.attr('href')
1600
+ var $href = /^#\w/.test(href) && $(href)
1594
1601
 
1595
- $targets = this.$body
1596
- .find(this.selector)
1597
- .map(function () {
1598
- var $el = $(this)
1599
- , href = $el.data('target') || $el.attr('href')
1600
- , $href = /^#\w/.test(href) && $(href)
1601
- return ( $href
1602
- && $href.length
1603
- && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
1604
- })
1605
- .sort(function (a, b) { return a[0] - b[0] })
1606
- .each(function () {
1607
- self.offsets.push(this[0])
1608
- self.targets.push(this[1])
1609
- })
1610
- }
1611
-
1612
- , process: function () {
1613
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1614
- , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1615
- , maxScroll = scrollHeight - this.$scrollElement.height()
1616
- , offsets = this.offsets
1617
- , targets = this.targets
1618
- , activeTarget = this.activeTarget
1619
- , i
1620
-
1621
- if (scrollTop >= maxScroll) {
1622
- return activeTarget != (i = targets.last()[0])
1623
- && this.activate ( i )
1624
- }
1602
+ return ($href
1603
+ && $href.length
1604
+ && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
1605
+ })
1606
+ .sort(function (a, b) { return a[0] - b[0] })
1607
+ .each(function () {
1608
+ self.offsets.push(this[0])
1609
+ self.targets.push(this[1])
1610
+ })
1611
+ }
1625
1612
 
1626
- for (i = offsets.length; i--;) {
1627
- activeTarget != targets[i]
1628
- && scrollTop >= offsets[i]
1629
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1630
- && this.activate( targets[i] )
1631
- }
1632
- }
1613
+ ScrollSpy.prototype.process = function () {
1614
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1615
+ var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1616
+ var maxScroll = scrollHeight - this.$scrollElement.height()
1617
+ var offsets = this.offsets
1618
+ var targets = this.targets
1619
+ var activeTarget = this.activeTarget
1620
+ var i
1633
1621
 
1634
- , activate: function (target) {
1635
- var active
1636
- , selector
1622
+ if (scrollTop >= maxScroll) {
1623
+ return activeTarget != (i = targets.last()[0]) && this.activate(i)
1624
+ }
1637
1625
 
1638
- this.activeTarget = target
1626
+ for (i = offsets.length; i--;) {
1627
+ activeTarget != targets[i]
1628
+ && scrollTop >= offsets[i]
1629
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1630
+ && this.activate( targets[i] )
1631
+ }
1632
+ }
1639
1633
 
1640
- $(this.selector)
1641
- .parent('.active')
1642
- .removeClass('active')
1634
+ ScrollSpy.prototype.activate = function (target) {
1635
+ this.activeTarget = target
1643
1636
 
1644
- selector = this.selector
1645
- + '[data-target="' + target + '"],'
1646
- + this.selector + '[href="' + target + '"]'
1637
+ $(this.selector)
1638
+ .parents('.active')
1639
+ .removeClass('active')
1647
1640
 
1648
- active = $(selector)
1649
- .parent('li')
1650
- .addClass('active')
1641
+ var selector = this.selector
1642
+ + '[data-target="' + target + '"],'
1643
+ + this.selector + '[href="' + target + '"]'
1651
1644
 
1652
- if (active.parent('.dropdown-menu').length) {
1653
- active = active.closest('li.dropdown').addClass('active')
1654
- }
1645
+ var active = $(selector)
1646
+ .parents('li')
1647
+ .addClass('active')
1655
1648
 
1656
- active.trigger('activate')
1657
- }
1649
+ if (active.parent('.dropdown-menu').length) {
1650
+ active = active
1651
+ .closest('li.dropdown')
1652
+ .addClass('active')
1653
+ }
1658
1654
 
1655
+ active.trigger('activate')
1659
1656
  }
1660
1657
 
1661
1658
 
1662
- /* SCROLLSPY PLUGIN DEFINITION
1663
- * =========================== */
1659
+ // SCROLLSPY PLUGIN DEFINITION
1660
+ // ===========================
1664
1661
 
1665
1662
  var old = $.fn.scrollspy
1666
1663
 
1667
1664
  $.fn.scrollspy = function (option) {
1668
1665
  return this.each(function () {
1669
- var $this = $(this)
1670
- , data = $this.data('scrollspy')
1671
- , options = typeof option == 'object' && option
1672
- if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1666
+ var $this = $(this)
1667
+ var data = $this.data('bs.scrollspy')
1668
+ var options = typeof option == 'object' && option
1669
+
1670
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
1673
1671
  if (typeof option == 'string') data[option]()
1674
1672
  })
1675
1673
  }
1676
1674
 
1677
1675
  $.fn.scrollspy.Constructor = ScrollSpy
1678
1676
 
1679
- $.fn.scrollspy.defaults = {
1680
- offset: 10
1681
- }
1682
1677
 
1683
-
1684
- /* SCROLLSPY NO CONFLICT
1685
- * ===================== */
1678
+ // SCROLLSPY NO CONFLICT
1679
+ // =====================
1686
1680
 
1687
1681
  $.fn.scrollspy.noConflict = function () {
1688
1682
  $.fn.scrollspy = old
@@ -1690,8 +1684,8 @@ FI"G
1690
1684
  }
1691
1685
 
1692
1686
 
1693
- /* SCROLLSPY DATA-API
1694
- * ================== */
1687
+ // SCROLLSPY DATA-API
1688
+ // ==================
1695
1689
 
1696
1690
  $(window).on('load', function () {
1697
1691
  $('[data-spy="scroll"]').each(function () {
@@ -1701,10 +1695,10 @@ FI"G
1701
1695
  })
1702
1696
 
1703
1697
  }(window.jQuery);
1704
- /* ========================================================
1705
- * bootstrap-tab.js v2.3.2
1706
- * http://twitter.github.com/bootstrap/javascript.html#tabs
1707
- * ========================================================
1698
+ /* ========================================================================
1699
+ * Bootstrap: tab.js v3.0.0
1700
+ * http://twbs.github.com/bootstrap/javascript.html#tabs
1701
+ * ========================================================================
1708
1702
  * Copyright 2012 Twitter, Inc.
1709
1703
  *
1710
1704
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1718,109 +1712,100 @@ FI"G
1718
1712
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1719
1713
  * See the License for the specific language governing permissions and
1720
1714
  * limitations under the License.
1721
- * ======================================================== */
1722
-
1715
+ * ======================================================================== */
1723
1716
 
1724
1717
 
1725
- !function ($) {
1726
1718
 
1727
- "use strict"; // jshint ;_;
1719
+ +function ($) { "use strict";
1728
1720
 
1729
-
1730
- /* TAB CLASS DEFINITION
1731
- * ==================== */
1721
+ // TAB CLASS DEFINITION
1722
+ // ====================
1732
1723
 
1733
1724
  var Tab = function (element) {
1734
1725
  this.element = $(element)
1735
1726
  }
1736
1727
 
1737
- Tab.prototype = {
1738
-
1739
- constructor: Tab
1740
-
1741
- , show: function () {
1742
- var $this = this.element
1743
- , $ul = $this.closest('ul:not(.dropdown-menu)')
1744
- , selector = $this.attr('data-target')
1745
- , previous
1746
- , $target
1747
- , e
1748
-
1749
- if (!selector) {
1750
- selector = $this.attr('href')
1751
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1752
- }
1728
+ Tab.prototype.show = function () {
1729
+ var $this = this.element
1730
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
1731
+ var selector = $this.attr('data-target')
1753
1732
 
1754
- if ( $this.parent('li').hasClass('active') ) return
1733
+ if (!selector) {
1734
+ selector = $this.attr('href')
1735
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1736
+ }
1755
1737
 
1756
- previous = $ul.find('.active:last a')[0]
1738
+ if ($this.parent('li').hasClass('active')) return
1757
1739
 
1758
- e = $.Event('show', {
1759
- relatedTarget: previous
1760
- })
1740
+ var previous = $ul.find('.active:last a')[0]
1741
+ var e = $.Event('show.bs.tab', {
1742
+ relatedTarget: previous
1743
+ })
1761
1744
 
1762
- $this.trigger(e)
1745
+ $this.trigger(e)
1763
1746
 
1764
- if (e.isDefaultPrevented()) return
1747
+ if (e.isDefaultPrevented()) return
1765
1748
 
1766
- $target = $(selector)
1749
+ var $target = $(selector)
1767
1750
 
1768
- this.activate($this.parent('li'), $ul)
1769
- this.activate($target, $target.parent(), function () {
1770
- $this.trigger({
1771
- type: 'shown'
1772
- , relatedTarget: previous
1773
- })
1751
+ this.activate($this.parent('li'), $ul)
1752
+ this.activate($target, $target.parent(), function () {
1753
+ $this.trigger({
1754
+ type: 'shown.bs.tab'
1755
+ , relatedTarget: previous
1774
1756
  })
1775
- }
1757
+ })
1758
+ }
1776
1759
 
1777
- , activate: function ( element, container, callback) {
1778
- var $active = container.find('> .active')
1779
- , transition = callback
1780
- && $.support.transition
1781
- && $active.hasClass('fade')
1782
-
1783
- function next() {
1784
- $active
1785
- .removeClass('active')
1786
- .find('> .dropdown-menu > .active')
1787
- .removeClass('active')
1788
-
1789
- element.addClass('active')
1790
-
1791
- if (transition) {
1792
- element[0].offsetWidth // reflow for transition
1793
- element.addClass('in')
1794
- } else {
1795
- element.removeClass('fade')
1796
- }
1760
+ Tab.prototype.activate = function (element, container, callback) {
1761
+ var $active = container.find('> .active')
1762
+ var transition = callback
1763
+ && $.support.transition
1764
+ && $active.hasClass('fade')
1797
1765
 
1798
- if ( element.parent('.dropdown-menu') ) {
1799
- element.closest('li.dropdown').addClass('active')
1800
- }
1766
+ function next() {
1767
+ $active
1768
+ .removeClass('active')
1769
+ .find('> .dropdown-menu > .active')
1770
+ .removeClass('active')
1771
+
1772
+ element.addClass('active')
1801
1773
 
1802
- callback && callback()
1774
+ if (transition) {
1775
+ element[0].offsetWidth // reflow for transition
1776
+ element.addClass('in')
1777
+ } else {
1778
+ element.removeClass('fade')
1803
1779
  }
1804
1780
 
1805
- transition ?
1806
- $active.one($.support.transition.end, next) :
1807
- next()
1781
+ if (element.parent('.dropdown-menu')) {
1782
+ element.closest('li.dropdown').addClass('active')
1783
+ }
1808
1784
 
1809
- $active.removeClass('in')
1785
+ callback && callback()
1810
1786
  }
1787
+
1788
+ transition ?
1789
+ $active
1790
+ .one($.support.transition.end, next)
1791
+ .emulateTransitionEnd(150) :
1792
+ next()
1793
+
1794
+ $active.removeClass('in')
1811
1795
  }
1812
1796
 
1813
1797
 
1814
- /* TAB PLUGIN DEFINITION
1815
- * ===================== */
1798
+ // TAB PLUGIN DEFINITION
1799
+ // =====================
1816
1800
 
1817
1801
  var old = $.fn.tab
1818
1802
 
1819
1803
  $.fn.tab = function ( option ) {
1820
1804
  return this.each(function () {
1821
1805
  var $this = $(this)
1822
- , data = $this.data('tab')
1823
- if (!data) $this.data('tab', (data = new Tab(this)))
1806
+ var data = $this.data('bs.tab')
1807
+
1808
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
1824
1809
  if (typeof option == 'string') data[option]()
1825
1810
  })
1826
1811
  }
@@ -1828,8 +1813,8 @@ FI"G
1828
1813
  $.fn.tab.Constructor = Tab
1829
1814
 
1830
1815
 
1831
- /* TAB NO CONFLICT
1832
- * =============== */
1816
+ // TAB NO CONFLICT
1817
+ // ===============
1833
1818
 
1834
1819
  $.fn.tab.noConflict = function () {
1835
1820
  $.fn.tab = old
@@ -1837,19 +1822,19 @@ FI"G
1837
1822
  }
1838
1823
 
1839
1824
 
1840
- /* TAB DATA-API
1841
- * ============ */
1825
+ // TAB DATA-API
1826
+ // ============
1842
1827
 
1843
- $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1828
+ $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1844
1829
  e.preventDefault()
1845
1830
  $(this).tab('show')
1846
1831
  })
1847
1832
 
1848
1833
  }(window.jQuery);
1849
- /* =============================================================
1850
- * bootstrap-typeahead.js v2.3.2
1851
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
1852
- * =============================================================
1834
+ /* ========================================================================
1835
+ * Bootstrap: affix.js v3.0.0
1836
+ * http://twbs.github.com/bootstrap/javascript.html#affix
1837
+ * ========================================================================
1853
1838
  * Copyright 2012 Twitter, Inc.
1854
1839
  *
1855
1840
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1863,417 +1848,91 @@ FI"G
1863
1848
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1864
1849
  * See the License for the specific language governing permissions and
1865
1850
  * limitations under the License.
1866
- * ============================================================ */
1851
+ * ======================================================================== */
1867
1852
 
1868
1853
 
1869
1854
 
1870
- !function($){
1855
+ +function ($) { "use strict";
1871
1856
 
1872
- "use strict"; // jshint ;_;
1857
+ // AFFIX CLASS DEFINITION
1858
+ // ======================
1873
1859
 
1860
+ var Affix = function (element, options) {
1861
+ this.options = $.extend({}, Affix.DEFAULTS, options)
1862
+ this.$window = $(window)
1863
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
1864
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
1874
1865
 
1875
- /* TYPEAHEAD PUBLIC CLASS DEFINITION
1876
- * ================================= */
1877
-
1878
- var Typeahead = function (element, options) {
1879
1866
  this.$element = $(element)
1880
- this.options = $.extend({}, $.fn.typeahead.defaults, options)
1881
- this.matcher = this.options.matcher || this.matcher
1882
- this.sorter = this.options.sorter || this.sorter
1883
- this.highlighter = this.options.highlighter || this.highlighter
1884
- this.updater = this.options.updater || this.updater
1885
- this.source = this.options.source
1886
- this.$menu = $(this.options.menu)
1887
- this.shown = false
1888
- this.listen()
1889
- }
1890
-
1891
- Typeahead.prototype = {
1892
-
1893
- constructor: Typeahead
1894
-
1895
- , select: function () {
1896
- var val = this.$menu.find('.active').attr('data-value')
1897
- this.$element
1898
- .val(this.updater(val))
1899
- .change()
1900
- return this.hide()
1901
- }
1902
-
1903
- , updater: function (item) {
1904
- return item
1905
- }
1906
-
1907
- , show: function () {
1908
- var pos = $.extend({}, this.$element.position(), {
1909
- height: this.$element[0].offsetHeight
1910
- })
1911
-
1912
- this.$menu
1913
- .insertAfter(this.$element)
1914
- .css({
1915
- top: pos.top + pos.height
1916
- , left: pos.left
1917
- })
1918
- .show()
1919
-
1920
- this.shown = true
1921
- return this
1922
- }
1923
-
1924
- , hide: function () {
1925
- this.$menu.hide()
1926
- this.shown = false
1927
- return this
1928
- }
1929
-
1930
- , lookup: function (event) {
1931
- var items
1932
-
1933
- this.query = this.$element.val()
1934
-
1935
- if (!this.query || this.query.length < this.options.minLength) {
1936
- return this.shown ? this.hide() : this
1937
- }
1938
-
1939
- items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
1940
-
1941
- return items ? this.process(items) : this
1942
- }
1943
-
1944
- , process: function (items) {
1945
- var that = this
1946
-
1947
- items = $.grep(items, function (item) {
1948
- return that.matcher(item)
1949
- })
1950
-
1951
- items = this.sorter(items)
1952
-
1953
- if (!items.length) {
1954
- return this.shown ? this.hide() : this
1955
- }
1956
-
1957
- return this.render(items.slice(0, this.options.items)).show()
1958
- }
1959
-
1960
- , matcher: function (item) {
1961
- return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1962
- }
1963
-
1964
- , sorter: function (items) {
1965
- var beginswith = []
1966
- , caseSensitive = []
1967
- , caseInsensitive = []
1968
- , item
1969
-
1970
- while (item = items.shift()) {
1971
- if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1972
- else if (~item.indexOf(this.query)) caseSensitive.push(item)
1973
- else caseInsensitive.push(item)
1974
- }
1975
-
1976
- return beginswith.concat(caseSensitive, caseInsensitive)
1977
- }
1978
-
1979
- , highlighter: function (item) {
1980
- var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
1981
- return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
1982
- return '<strong>' + match + '</strong>'
1983
- })
1984
- }
1985
-
1986
- , render: function (items) {
1987
- var that = this
1988
-
1989
- items = $(items).map(function (i, item) {
1990
- i = $(that.options.item).attr('data-value', item)
1991
- i.find('a').html(that.highlighter(item))
1992
- return i[0]
1993
- })
1994
-
1995
- items.first().addClass('active')
1996
- this.$menu.html(items)
1997
- return this
1998
- }
1999
-
2000
- , next: function (event) {
2001
- var active = this.$menu.find('.active').removeClass('active')
2002
- , next = active.next()
2003
-
2004
- if (!next.length) {
2005
- next = $(this.$menu.find('li')[0])
2006
- }
2007
-
2008
- next.addClass('active')
2009
- }
2010
-
2011
- , prev: function (event) {
2012
- var active = this.$menu.find('.active').removeClass('active')
2013
- , prev = active.prev()
2014
-
2015
- if (!prev.length) {
2016
- prev = this.$menu.find('li').last()
2017
- }
2018
-
2019
- prev.addClass('active')
2020
- }
2021
-
2022
- , listen: function () {
2023
- this.$element
2024
- .on('focus', $.proxy(this.focus, this))
2025
- .on('blur', $.proxy(this.blur, this))
2026
- .on('keypress', $.proxy(this.keypress, this))
2027
- .on('keyup', $.proxy(this.keyup, this))
2028
-
2029
- if (this.eventSupported('keydown')) {
2030
- this.$element.on('keydown', $.proxy(this.keydown, this))
2031
- }
2032
-
2033
- this.$menu
2034
- .on('click', $.proxy(this.click, this))
2035
- .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
2036
- .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
2037
- }
2038
-
2039
- , eventSupported: function(eventName) {
2040
- var isSupported = eventName in this.$element
2041
- if (!isSupported) {
2042
- this.$element.setAttribute(eventName, 'return;')
2043
- isSupported = typeof this.$element[eventName] === 'function'
2044
- }
2045
- return isSupported
2046
- }
2047
-
2048
- , move: function (e) {
2049
- if (!this.shown) return
2050
-
2051
- switch(e.keyCode) {
2052
- case 9: // tab
2053
- case 13: // enter
2054
- case 27: // escape
2055
- e.preventDefault()
2056
- break
2057
-
2058
- case 38: // up arrow
2059
- e.preventDefault()
2060
- this.prev()
2061
- break
2062
-
2063
- case 40: // down arrow
2064
- e.preventDefault()
2065
- this.next()
2066
- break
2067
- }
2068
-
2069
- e.stopPropagation()
2070
- }
1867
+ this.affixed =
1868
+ this.unpin = null
2071
1869
 
2072
- , keydown: function (e) {
2073
- this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
2074
- this.move(e)
2075
- }
2076
-
2077
- , keypress: function (e) {
2078
- if (this.suppressKeyPressRepeat) return
2079
- this.move(e)
2080
- }
2081
-
2082
- , keyup: function (e) {
2083
- switch(e.keyCode) {
2084
- case 40: // down arrow
2085
- case 38: // up arrow
2086
- case 16: // shift
2087
- case 17: // ctrl
2088
- case 18: // alt
2089
- break
2090
-
2091
- case 9: // tab
2092
- case 13: // enter
2093
- if (!this.shown) return
2094
- this.select()
2095
- break
2096
-
2097
- case 27: // escape
2098
- if (!this.shown) return
2099
- this.hide()
2100
- break
2101
-
2102
- default:
2103
- this.lookup()
2104
- }
2105
-
2106
- e.stopPropagation()
2107
- e.preventDefault()
2108
- }
2109
-
2110
- , focus: function (e) {
2111
- this.focused = true
2112
- }
2113
-
2114
- , blur: function (e) {
2115
- this.focused = false
2116
- if (!this.mousedover && this.shown) this.hide()
2117
- }
2118
-
2119
- , click: function (e) {
2120
- e.stopPropagation()
2121
- e.preventDefault()
2122
- this.select()
2123
- this.$element.focus()
2124
- }
2125
-
2126
- , mouseenter: function (e) {
2127
- this.mousedover = true
2128
- this.$menu.find('.active').removeClass('active')
2129
- $(e.currentTarget).addClass('active')
2130
- }
2131
-
2132
- , mouseleave: function (e) {
2133
- this.mousedover = false
2134
- if (!this.focused && this.shown) this.hide()
2135
- }
2136
-
2137
- }
2138
-
2139
-
2140
- /* TYPEAHEAD PLUGIN DEFINITION
2141
- * =========================== */
2142
-
2143
- var old = $.fn.typeahead
2144
-
2145
- $.fn.typeahead = function (option) {
2146
- return this.each(function () {
2147
- var $this = $(this)
2148
- , data = $this.data('typeahead')
2149
- , options = typeof option == 'object' && option
2150
- if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
2151
- if (typeof option == 'string') data[option]()
2152
- })
2153
- }
2154
-
2155
- $.fn.typeahead.defaults = {
2156
- source: []
2157
- , items: 8
2158
- , menu: '<ul class="typeahead dropdown-menu"></ul>'
2159
- , item: '<li><a href="#"></a></li>'
2160
- , minLength: 1
1870
+ this.checkPosition()
2161
1871
  }
2162
1872
 
2163
- $.fn.typeahead.Constructor = Typeahead
2164
-
2165
-
2166
- /* TYPEAHEAD NO CONFLICT
2167
- * =================== */
1873
+ Affix.RESET = 'affix affix-top affix-bottom'
2168
1874
 
2169
- $.fn.typeahead.noConflict = function () {
2170
- $.fn.typeahead = old
2171
- return this
1875
+ Affix.DEFAULTS = {
1876
+ offset: 0
2172
1877
  }
2173
1878
 
2174
-
2175
- /* TYPEAHEAD DATA-API
2176
- * ================== */
2177
-
2178
- $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
2179
- var $this = $(this)
2180
- if ($this.data('typeahead')) return
2181
- $this.typeahead($this.data())
2182
- })
2183
-
2184
- }(window.jQuery);
2185
- /* ==========================================================
2186
- * bootstrap-affix.js v2.3.2
2187
- * http://twitter.github.com/bootstrap/javascript.html#affix
2188
- * ==========================================================
2189
- * Copyright 2012 Twitter, Inc.
2190
- *
2191
- * Licensed under the Apache License, Version 2.0 (the "License");
2192
- * you may not use this file except in compliance with the License.
2193
- * You may obtain a copy of the License at
2194
- *
2195
- * http://www.apache.org/licenses/LICENSE-2.0
2196
- *
2197
- * Unless required by applicable law or agreed to in writing, software
2198
- * distributed under the License is distributed on an "AS IS" BASIS,
2199
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2200
- * See the License for the specific language governing permissions and
2201
- * limitations under the License.
2202
- * ========================================================== */
2203
-
2204
-
2205
-
2206
- !function ($) {
2207
-
2208
- "use strict"; // jshint ;_;
2209
-
2210
-
2211
- /* AFFIX CLASS DEFINITION
2212
- * ====================== */
2213
-
2214
- var Affix = function (element, options) {
2215
- this.options = $.extend({}, $.fn.affix.defaults, options)
2216
- this.$window = $(window)
2217
- .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
2218
- .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
2219
- this.$element = $(element)
2220
- this.checkPosition()
1879
+ Affix.prototype.checkPositionWithEventLoop = function () {
1880
+ setTimeout($.proxy(this.checkPosition, this), 1)
2221
1881
  }
2222
1882
 
2223
1883
  Affix.prototype.checkPosition = function () {
2224
1884
  if (!this.$element.is(':visible')) return
2225
1885
 
2226
1886
  var scrollHeight = $(document).height()
2227
- , scrollTop = this.$window.scrollTop()
2228
- , position = this.$element.offset()
2229
- , offset = this.options.offset
2230
- , offsetBottom = offset.bottom
2231
- , offsetTop = offset.top
2232
- , reset = 'affix affix-top affix-bottom'
2233
- , affix
2234
-
2235
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
2236
- if (typeof offsetTop == 'function') offsetTop = offset.top()
1887
+ var scrollTop = this.$window.scrollTop()
1888
+ var position = this.$element.offset()
1889
+ var offset = this.options.offset
1890
+ var offsetTop = offset.top
1891
+ var offsetBottom = offset.bottom
1892
+
1893
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
1894
+ if (typeof offsetTop == 'function') offsetTop = offset.top()
2237
1895
  if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
2238
1896
 
2239
- affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
2240
- false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
2241
- 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
2242
- 'top' : false
1897
+ var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
1898
+ offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
1899
+ offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
2243
1900
 
2244
1901
  if (this.affixed === affix) return
1902
+ if (this.unpin) this.$element.css('top', '')
2245
1903
 
2246
1904
  this.affixed = affix
2247
- this.unpin = affix == 'bottom' ? position.top - scrollTop : null
1905
+ this.unpin = affix == 'bottom' ? position.top - scrollTop : null
1906
+
1907
+ this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))
2248
1908
 
2249
- this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
1909
+ if (affix == 'bottom') {
1910
+ this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })
1911
+ }
2250
1912
  }
2251
1913
 
2252
1914
 
2253
- /* AFFIX PLUGIN DEFINITION
2254
- * ======================= */
1915
+ // AFFIX PLUGIN DEFINITION
1916
+ // =======================
2255
1917
 
2256
1918
  var old = $.fn.affix
2257
1919
 
2258
1920
  $.fn.affix = function (option) {
2259
1921
  return this.each(function () {
2260
- var $this = $(this)
2261
- , data = $this.data('affix')
2262
- , options = typeof option == 'object' && option
2263
- if (!data) $this.data('affix', (data = new Affix(this, options)))
1922
+ var $this = $(this)
1923
+ var data = $this.data('bs.affix')
1924
+ var options = typeof option == 'object' && option
1925
+
1926
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
2264
1927
  if (typeof option == 'string') data[option]()
2265
1928
  })
2266
1929
  }
2267
1930
 
2268
1931
  $.fn.affix.Constructor = Affix
2269
1932
 
2270
- $.fn.affix.defaults = {
2271
- offset: 0
2272
- }
2273
1933
 
2274
-
2275
- /* AFFIX NO CONFLICT
2276
- * ================= */
1934
+ // AFFIX NO CONFLICT
1935
+ // =================
2277
1936
 
2278
1937
  $.fn.affix.noConflict = function () {
2279
1938
  $.fn.affix = old
@@ -2281,28 +1940,27 @@ FI"G
2281
1940
  }
2282
1941
 
2283
1942
 
2284
- /* AFFIX DATA-API
2285
- * ============== */
1943
+ // AFFIX DATA-API
1944
+ // ==============
2286
1945
 
2287
1946
  $(window).on('load', function () {
2288
1947
  $('[data-spy="affix"]').each(function () {
2289
1948
  var $spy = $(this)
2290
- , data = $spy.data()
1949
+ var data = $spy.data()
2291
1950
 
2292
1951
  data.offset = data.offset || {}
2293
1952
 
2294
- data.offsetBottom && (data.offset.bottom = data.offsetBottom)
2295
- data.offsetTop && (data.offset.top = data.offsetTop)
1953
+ if (data.offsetBottom) data.offset.bottom = data.offsetBottom
1954
+ if (data.offsetTop) data.offset.top = data.offsetTop
2296
1955
 
2297
1956
  $spy.affix(data)
2298
1957
  })
2299
1958
  })
2300
1959
 
2301
-
2302
1960
  }(window.jQuery);
2303
1961
 
2304
1962
  $(document).ready(function(){...});:
2305
1963
  ;
2306
1964
  ;
2307
1965
  FI"
2308
- F"%4c69546a4d16e71fdc524c756e36bd0b
1966
+ F"%4f8925e6f82465087e3db180263a784f