gutter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (329) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +58 -0
  4. data/Rakefile +40 -0
  5. data/app/assets/javascripts/base.js +228 -0
  6. data/app/assets/javascripts/gutter/application.js +18 -0
  7. data/app/assets/javascripts/gutter/bootstrap.js +1726 -0
  8. data/app/assets/javascripts/gutter/dashboard.js +512 -0
  9. data/app/assets/javascripts/gutter/gutter.js +2 -0
  10. data/app/assets/javascripts/gutter/odometer.js +2 -0
  11. data/app/assets/stylesheets/gutter/bootstrap-responsive.min.css +12 -0
  12. data/app/assets/stylesheets/gutter/bootstrap.min.css +3647 -0
  13. data/app/assets/stylesheets/gutter/font-awesome/css/archive/font-awesome-ie7.css +1203 -0
  14. data/app/assets/stylesheets/gutter/font-awesome/css/archive/font-awesome-ie7.min.css +384 -0
  15. data/app/assets/stylesheets/gutter/font-awesome/css/archive/font-awesome.css +1479 -0
  16. data/app/assets/stylesheets/gutter/font-awesome/css/font-awesome.min.css +403 -0
  17. data/app/assets/stylesheets/gutter/font-awesome/font/FontAwesome.otf +0 -0
  18. data/app/assets/stylesheets/gutter/font-awesome/font/fontawesome-webfont.eot +0 -0
  19. data/app/assets/stylesheets/gutter/font-awesome/font/fontawesome-webfont.svg +399 -0
  20. data/app/assets/stylesheets/gutter/font-awesome/font/fontawesome-webfont.ttf +0 -0
  21. data/app/assets/stylesheets/gutter/font-awesome/font/fontawesome-webfont.woff +0 -0
  22. data/app/assets/stylesheets/gutter/font/OpenSans-Regular-webfont.eot +0 -0
  23. data/app/assets/stylesheets/gutter/font/OpenSans-Regular-webfont.svg +958 -0
  24. data/app/assets/stylesheets/gutter/font/OpenSans-Regular-webfont.ttf +0 -0
  25. data/app/assets/stylesheets/gutter/font/OpenSans-Regular-webfont.woff +0 -0
  26. data/app/assets/stylesheets/gutter/odometer.css +94 -0
  27. data/app/assets/stylesheets/gutter/pages/dashboard.css +357 -0
  28. data/app/assets/stylesheets/gutter/style.css +1335 -0
  29. data/app/controllers/gutter/application_controller.rb +4 -0
  30. data/app/controllers/gutter/gutter_controller.rb +28 -0
  31. data/app/helpers/gutter/application_helper.rb +4 -0
  32. data/app/helpers/gutter/gutter_helper.rb +148 -0
  33. data/app/views/gutter/gutter/index.html.erb +476 -0
  34. data/app/views/layouts/gutter/application.html.erb +29 -0
  35. data/config/routes.rb +4 -0
  36. data/lib/gutter.rb +4 -0
  37. data/lib/gutter/engine.rb +5 -0
  38. data/lib/gutter/version.rb +3 -0
  39. data/lib/tasks/gutter_tasks.rake +4 -0
  40. data/test/dummy/-version}] +0 -0
  41. data/test/dummy/README.rdoc +261 -0
  42. data/test/dummy/Rakefile +7 -0
  43. data/test/dummy/app/assets/javascripts/application.js +15 -0
  44. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  45. data/test/dummy/app/controllers/application_controller.rb +3 -0
  46. data/test/dummy/app/helpers/application_helper.rb +2 -0
  47. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  48. data/test/dummy/config.ru +4 -0
  49. data/test/dummy/config/application.rb +59 -0
  50. data/test/dummy/config/boot.rb +10 -0
  51. data/test/dummy/config/database.yml +25 -0
  52. data/test/dummy/config/environment.rb +5 -0
  53. data/test/dummy/config/environments/development.rb +37 -0
  54. data/test/dummy/config/environments/production.rb +67 -0
  55. data/test/dummy/config/environments/test.rb +37 -0
  56. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  57. data/test/dummy/config/initializers/inflections.rb +15 -0
  58. data/test/dummy/config/initializers/mime_types.rb +5 -0
  59. data/test/dummy/config/initializers/secret_token.rb +7 -0
  60. data/test/dummy/config/initializers/session_store.rb +8 -0
  61. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  62. data/test/dummy/config/locales/en.yml +5 -0
  63. data/test/dummy/config/routes.rb +4 -0
  64. data/test/dummy/db/development.sqlite3 +0 -0
  65. data/test/dummy/log/development.log +68803 -0
  66. data/test/dummy/plain +1 -0
  67. data/test/dummy/public/404.html +26 -0
  68. data/test/dummy/public/422.html +26 -0
  69. data/test/dummy/public/500.html +25 -0
  70. data/test/dummy/public/favicon.ico +0 -0
  71. data/test/dummy/script/rails +6 -0
  72. data/test/dummy/tmp/cache/assets/C0F/230/sprockets%2Fe235290a73e0368353a12d52b4008880 +0 -0
  73. data/test/dummy/tmp/cache/assets/C10/200/sprockets%2F014c132130107a064cf1462b567f7996 +0 -0
  74. data/test/dummy/tmp/cache/assets/C1F/600/sprockets%2Ff6315a5472f4449974300a605b9307b6 +0 -0
  75. data/test/dummy/tmp/cache/assets/C29/C60/sprockets%2F60d27d33199c6c58260750985a00c589 +0 -0
  76. data/test/dummy/tmp/cache/assets/C2F/0D0/sprockets%2F9755059392092185dd2fd9a3472f5722 +0 -0
  77. data/test/dummy/tmp/cache/assets/C37/2D0/sprockets%2F814be07a2034dfd2254d166408000707 +0 -0
  78. data/test/dummy/tmp/cache/assets/C46/130/sprockets%2F876c2751f8181102c232a2849f0b43f1 +0 -0
  79. data/test/dummy/tmp/cache/assets/C4D/710/sprockets%2Fa50630663d18903094ff074c24039ff5 +0 -0
  80. data/test/dummy/tmp/cache/assets/C50/330/sprockets%2Fb50529295251120a96c04ba84676f9b8 +0 -0
  81. data/test/dummy/tmp/cache/assets/C5A/C60/sprockets%2Fd2e3dc7116846175bf63872e05444289 +0 -0
  82. data/test/dummy/tmp/cache/assets/C5D/510/sprockets%2F699511812376f70b70225799b77ecb4a +0 -0
  83. data/test/dummy/tmp/cache/assets/C62/340/sprockets%2F685468f90cd007509b87023fe53548f6 +0 -0
  84. data/test/dummy/tmp/cache/assets/C65/1A0/sprockets%2Fce80371336a1f2115b407060fa36624b +0 -0
  85. data/test/dummy/tmp/cache/assets/C65/870/sprockets%2F88d9680a907f3345596d0e71e69a1625 +0 -0
  86. data/test/dummy/tmp/cache/assets/C72/230/sprockets%2F02127f6a1704f956f0380622a18aa3d9 +0 -0
  87. data/test/dummy/tmp/cache/assets/C72/8A0/sprockets%2F9af3a44690e2503492e1d5a43016085b +0 -0
  88. data/test/dummy/tmp/cache/assets/C7B/160/sprockets%2F20b082505bb2eb8c31f979180385736c +0 -0
  89. data/test/dummy/tmp/cache/assets/C80/580/sprockets%2F884728b425edf02184c5abc660547163 +0 -0
  90. data/test/dummy/tmp/cache/assets/C84/D10/sprockets%2F04b1c499392c09e64e01ce5620966b49 +0 -0
  91. data/test/dummy/tmp/cache/assets/C86/ED0/sprockets%2F448f1cd3609483a3b4c1231e8494c985 +0 -0
  92. data/test/dummy/tmp/cache/assets/C87/200/sprockets%2F93e306c2913ab04984def9297462108d +0 -0
  93. data/test/dummy/tmp/cache/assets/C89/180/sprockets%2F13dd63a30f961887bb06389378833b5b +0 -0
  94. data/test/dummy/tmp/cache/assets/C8B/C30/sprockets%2F22476c169944fa06b7aaa08b88906839 +0 -0
  95. data/test/dummy/tmp/cache/assets/C99/6D0/sprockets%2Fd06185ff5de8f46176799a9b61648160 +0 -0
  96. data/test/dummy/tmp/cache/assets/CA3/960/sprockets%2F410c27fc287714811417e074c32dae5c +0 -0
  97. data/test/dummy/tmp/cache/assets/CA4/740/sprockets%2F44b9704319c995f5d33a13c235af22a0 +0 -0
  98. data/test/dummy/tmp/cache/assets/CA5/8A0/sprockets%2F60dae2c244014fc89264159f3d1052d7 +0 -0
  99. data/test/dummy/tmp/cache/assets/CA6/B10/sprockets%2F7a1f934840fbe5c20475b5177f040b15 +0 -0
  100. data/test/dummy/tmp/cache/assets/CA8/020/sprockets%2F22272da364674547025cfa718a9a32cf +0 -0
  101. data/test/dummy/tmp/cache/assets/CA8/9B0/sprockets%2F308d9364105b79f083d0ba4d06b6436d +0 -0
  102. data/test/dummy/tmp/cache/assets/CAB/9E0/sprockets%2Fa99ca5b056b04732410c439ce865d760 +0 -0
  103. data/test/dummy/tmp/cache/assets/CB0/510/sprockets%2F55c71fa75f40008a4fa3807c8662385c +0 -0
  104. data/test/dummy/tmp/cache/assets/CB1/370/sprockets%2F37594dc21e68305891632b01ffb2eb49 +0 -0
  105. data/test/dummy/tmp/cache/assets/CB3/3C0/sprockets%2F75d6b40181d32bf26f34676cbe814494 +0 -0
  106. data/test/dummy/tmp/cache/assets/CB8/830/sprockets%2Fde2ff94651818674052c63136ab9d54d +0 -0
  107. data/test/dummy/tmp/cache/assets/CBA/C40/sprockets%2F865e6f3c235f4a88006a9649616dbc06 +0 -0
  108. data/test/dummy/tmp/cache/assets/CBB/260/sprockets%2F79da0de746521480455e65683df4be53 +0 -0
  109. data/test/dummy/tmp/cache/assets/CBB/410/sprockets%2F9d2d200a8ede615f6187d94934c62627 +0 -0
  110. data/test/dummy/tmp/cache/assets/CBB/DB0/sprockets%2F384981bb74dece48d02624553e617e83 +0 -0
  111. data/test/dummy/tmp/cache/assets/CBD/A30/sprockets%2F943d0159eee3634ec448b6c098b45079 +0 -0
  112. data/test/dummy/tmp/cache/assets/CBE/F70/sprockets%2F664f0c2e6be06256d516965d5572e8e5 +0 -0
  113. data/test/dummy/tmp/cache/assets/CC0/DD0/sprockets%2F36c97b1ccd2cd9b455887578b8821108 +0 -0
  114. data/test/dummy/tmp/cache/assets/CC2/070/sprockets%2F7925984f3e398b2325c27466caaed772 +0 -0
  115. data/test/dummy/tmp/cache/assets/CC2/390/sprockets%2Fb4b02574362368489699c5fec248ab8d +0 -0
  116. data/test/dummy/tmp/cache/assets/CC3/E00/sprockets%2Fb1580a7235647fc541e89fc418479fe6 +0 -0
  117. data/test/dummy/tmp/cache/assets/CC4/C90/sprockets%2Fd7626eb467d298f1698303704a9feb55 +0 -0
  118. data/test/dummy/tmp/cache/assets/CCA/4D0/sprockets%2Fcd64342c823cf657989ea194759d265e +0 -0
  119. data/test/dummy/tmp/cache/assets/CCE/BE0/sprockets%2Ffea718309b57fa3ff13b288887099669 +0 -0
  120. data/test/dummy/tmp/cache/assets/CCF/1C0/sprockets%2F85e27c4ccfb28f57998026a654644f89 +0 -0
  121. data/test/dummy/tmp/cache/assets/CD2/380/sprockets%2F7182431dc52391d415b27bcf20d94aa8 +0 -0
  122. data/test/dummy/tmp/cache/assets/CD5/9B0/sprockets%2F427511319aada8b2bf069b58906b504e +0 -0
  123. data/test/dummy/tmp/cache/assets/CD6/9B0/sprockets%2F5d453b0c85629d2982c030e084abd24e +0 -0
  124. data/test/dummy/tmp/cache/assets/CDA/CC0/sprockets%2F2d36fe07a11e546f4f2057ec42d01975 +0 -0
  125. data/test/dummy/tmp/cache/assets/CDC/5C0/sprockets%2Fb5a92f7a15c1604d83f97e418242e60a +0 -0
  126. data/test/dummy/tmp/cache/assets/CDE/C90/sprockets%2Fac188cb77c378d6aa11c101b88392765 +0 -0
  127. data/test/dummy/tmp/cache/assets/CDF/AC0/sprockets%2Ff35824c8b6661c6bf9520de114c4e038 +0 -0
  128. data/test/dummy/tmp/cache/assets/CE1/CA0/sprockets%2F44949ccf3c4d522859c1a4a516b2990b +0 -0
  129. data/test/dummy/tmp/cache/assets/CE2/690/sprockets%2F09f229a496db3c1dd79e17d24821180f +0 -0
  130. data/test/dummy/tmp/cache/assets/CE3/8D0/sprockets%2F96a042cd2446c12b6a9f95bd9773a076 +0 -0
  131. data/test/dummy/tmp/cache/assets/CE3/8F0/sprockets%2Fa423a9ce56e4c7f202f6583384a2f375 +0 -0
  132. data/test/dummy/tmp/cache/assets/CE4/470/sprockets%2Fb02a979ae3ecc608b2d25182e7834883 +0 -0
  133. data/test/dummy/tmp/cache/assets/CE5/540/sprockets%2F7b046c9f357854421afd13859ba02f8e +0 -0
  134. data/test/dummy/tmp/cache/assets/CE6/260/sprockets%2F435678e2ae094e5830358a9eb11f7c2e +0 -0
  135. data/test/dummy/tmp/cache/assets/CE6/C20/sprockets%2Fad7105d14f2e08c67c2914f868fc2970 +0 -0
  136. data/test/dummy/tmp/cache/assets/CE7/810/sprockets%2Fa51abc8a79a9b2537e248911665d5f19 +0 -0
  137. data/test/dummy/tmp/cache/assets/CE7/EA0/sprockets%2F30722195fc547f326f2e5257a54ceee8 +0 -0
  138. data/test/dummy/tmp/cache/assets/CE8/4A0/sprockets%2F129c884f2be4f1615bec65709935dd05 +0 -0
  139. data/test/dummy/tmp/cache/assets/CE8/660/sprockets%2F011f5b365a97afde492263b2d529b989 +0 -0
  140. data/test/dummy/tmp/cache/assets/CEA/110/sprockets%2F61964b4862f6dc8930f311af66d6a84b +0 -0
  141. data/test/dummy/tmp/cache/assets/CF1/320/sprockets%2F53e57e472039b8de942f7f132b8b098f +0 -0
  142. data/test/dummy/tmp/cache/assets/CF1/490/sprockets%2Fd72384993e511934e71d19cde88da17d +0 -0
  143. data/test/dummy/tmp/cache/assets/CF5/260/sprockets%2F1a8b5ca173638a60a5a34330bce530f5 +0 -0
  144. data/test/dummy/tmp/cache/assets/CF7/B60/sprockets%2Fe39a1b9531c33dd2b2e2f8223320a6e0 +0 -0
  145. data/test/dummy/tmp/cache/assets/CF8/0F0/sprockets%2F1ab9e9914c115a74bec77796596e93b8 +0 -0
  146. data/test/dummy/tmp/cache/assets/CFD/0C0/sprockets%2F69d1826e5df7d7e0901980c49c979ae5 +0 -0
  147. data/test/dummy/tmp/cache/assets/CFE/150/sprockets%2F454f6e9228995d7097ce715ed13feb95 +0 -0
  148. data/test/dummy/tmp/cache/assets/CFE/240/sprockets%2F64f388105986c6b7cb9795ff7d30ee90 +0 -0
  149. data/test/dummy/tmp/cache/assets/CFE/880/sprockets%2F130a631c8dd033d7cdc7167b42fb2095 +0 -0
  150. data/test/dummy/tmp/cache/assets/CFF/2E0/sprockets%2Fa424f4a76604a80cc8f14dca3006b791 +0 -0
  151. data/test/dummy/tmp/cache/assets/D00/000/sprockets%2Fd96f55595f346cb60cb721b30dc220a0 +0 -0
  152. data/test/dummy/tmp/cache/assets/D05/980/sprockets%2Fff0d95b28cd3841c307318a6321c3df2 +0 -0
  153. data/test/dummy/tmp/cache/assets/D06/500/sprockets%2F9c4124aebf4c4555552b43c93a018cf4 +0 -0
  154. data/test/dummy/tmp/cache/assets/D07/610/sprockets%2F581daf5ef5107402dec463707a223af9 +0 -0
  155. data/test/dummy/tmp/cache/assets/D07/E80/sprockets%2F9b0f31e35a2141b594e3eed543dc7174 +0 -0
  156. data/test/dummy/tmp/cache/assets/D08/AA0/sprockets%2Fc5dc62c650a9c855965601ce31e1a06d +0 -0
  157. data/test/dummy/tmp/cache/assets/D09/A70/sprockets%2F0633defe1740a45ef30f85172f2172df +0 -0
  158. data/test/dummy/tmp/cache/assets/D0A/D80/sprockets%2F607b2af13fb941c1196cb093cd6e4881 +0 -0
  159. data/test/dummy/tmp/cache/assets/D0B/DA0/sprockets%2F30d1963f5ace216f47fb170131df81f9 +0 -0
  160. data/test/dummy/tmp/cache/assets/D0C/730/sprockets%2F2e63f21ba951e5e5b84670220f0ff2e9 +0 -0
  161. data/test/dummy/tmp/cache/assets/D0C/BA0/sprockets%2F08e9ee505a554e9d3e0bb3fc96523022 +0 -0
  162. data/test/dummy/tmp/cache/assets/D0C/E20/sprockets%2F7c7c0244b33b6df3c44179be9d22a259 +0 -0
  163. data/test/dummy/tmp/cache/assets/D11/A80/sprockets%2F6fe649a19180291b3187bd0a2d896cbc +0 -0
  164. data/test/dummy/tmp/cache/assets/D12/A10/sprockets%2Fa74f0ead865c1781953d0ff40090d76d +0 -0
  165. data/test/dummy/tmp/cache/assets/D14/EE0/sprockets%2F1881c04e0d2ea6915c4b4fc7b584f649 +0 -0
  166. data/test/dummy/tmp/cache/assets/D15/2C0/sprockets%2F43a086426cee4a2aafe5d991992e2816 +0 -0
  167. data/test/dummy/tmp/cache/assets/D15/9E0/sprockets%2F6eeff9405c4f8216a7e14e174d9f6001 +0 -0
  168. data/test/dummy/tmp/cache/assets/D15/C00/sprockets%2F6a6253c58e31f8e59d0de53255ea62d5 +0 -0
  169. data/test/dummy/tmp/cache/assets/D16/230/sprockets%2Ff48e5dea249ff033738f1f822c3337e0 +0 -0
  170. data/test/dummy/tmp/cache/assets/D1A/A20/sprockets%2F5c4d61c3376080dddedb319799e9d613 +0 -0
  171. data/test/dummy/tmp/cache/assets/D1B/630/sprockets%2F9bf2cfa5d34c327c03796b8946d935c2 +0 -0
  172. data/test/dummy/tmp/cache/assets/D1B/7A0/sprockets%2F3b13121e46c0a04a3c17427bdbbb85b4 +0 -0
  173. data/test/dummy/tmp/cache/assets/D1B/D80/sprockets%2F613c5b5186e4dc6dc5875c9652c24dd7 +0 -0
  174. data/test/dummy/tmp/cache/assets/D1E/E50/sprockets%2Ff4fb783105bdd65392f3567b841f4fd7 +0 -0
  175. data/test/dummy/tmp/cache/assets/D23/2D0/sprockets%2Fe8984f7c23d8a9d23f7bd07e3862e037 +0 -0
  176. data/test/dummy/tmp/cache/assets/D27/0B0/sprockets%2Fda1064a1c1679e19cb7a40f4a304b4d3 +0 -0
  177. data/test/dummy/tmp/cache/assets/D28/830/sprockets%2F97a8d51d3554eb01c02342a24efe0a3c +0 -0
  178. data/test/dummy/tmp/cache/assets/D28/DC0/sprockets%2F8e5a6fcdb5c823616c8996734c7da873 +0 -0
  179. data/test/dummy/tmp/cache/assets/D2A/250/sprockets%2F4c3b6f7de8c6ed856f9c40617588911e +0 -0
  180. data/test/dummy/tmp/cache/assets/D2B/A80/sprockets%2Ff43c20cdb36ce7edca1609300862046b +0 -0
  181. data/test/dummy/tmp/cache/assets/D30/060/sprockets%2F46f5ab9946171d1bb0d4dc1d35510a6e +0 -0
  182. data/test/dummy/tmp/cache/assets/D32/D10/sprockets%2Fb2f54606c3d212e5cea02b9b88490fc0 +0 -0
  183. data/test/dummy/tmp/cache/assets/D34/160/sprockets%2F53ea14edc816eb782774d2a101cad096 +0 -0
  184. data/test/dummy/tmp/cache/assets/D35/B30/sprockets%2F2fdd1b87e220f90505cf6d0f7373e02a +0 -0
  185. data/test/dummy/tmp/cache/assets/D37/6E0/sprockets%2Fb45fed0679012aaf91c4f36a08a4294c +0 -0
  186. data/test/dummy/tmp/cache/assets/D37/B40/sprockets%2Feb3217413f27f423c855cfc25affb460 +0 -0
  187. data/test/dummy/tmp/cache/assets/D38/D90/sprockets%2Fa7974e36f7152e3d0e0227dadfe54b11 +0 -0
  188. data/test/dummy/tmp/cache/assets/D39/7F0/sprockets%2Fb83f84e0ff47c5ea4ba1e8b042649013 +0 -0
  189. data/test/dummy/tmp/cache/assets/D3C/110/sprockets%2F843b92604362095bb0e69c90af2cedce +0 -0
  190. data/test/dummy/tmp/cache/assets/D3D/AE0/sprockets%2Fa446178197fb5aac557517b3a4aa7f6b +0 -0
  191. data/test/dummy/tmp/cache/assets/D3E/910/sprockets%2F922c9dffef01a035565919f0fb5cb702 +0 -0
  192. data/test/dummy/tmp/cache/assets/D3F/B10/sprockets%2Fb297607f301f8ddaa2238cc925f80f6a +0 -0
  193. data/test/dummy/tmp/cache/assets/D40/050/sprockets%2F88e0e3c625bd66fe51d1822d28af2d80 +0 -0
  194. data/test/dummy/tmp/cache/assets/D42/020/sprockets%2Fff66c71248d0f2672f93273ecba353ea +0 -0
  195. data/test/dummy/tmp/cache/assets/D42/B80/sprockets%2Fcfb9f1eec464f256284ebe1f36233317 +0 -0
  196. data/test/dummy/tmp/cache/assets/D43/180/sprockets%2F45bc45aac3d7f422fc46f8d422464e78 +0 -0
  197. data/test/dummy/tmp/cache/assets/D45/E90/sprockets%2Faec58a429ded259be31756b92ff15613 +0 -0
  198. data/test/dummy/tmp/cache/assets/D46/590/sprockets%2F55f507a58768d425dd4a627e40a7aefc +0 -0
  199. data/test/dummy/tmp/cache/assets/D46/B50/sprockets%2F10d770caa62701b52de688e97ee73d8e +0 -0
  200. data/test/dummy/tmp/cache/assets/D47/3B0/sprockets%2F97bb04754ad9d9ece853080b2aa925f7 +0 -0
  201. data/test/dummy/tmp/cache/assets/D48/570/sprockets%2Fa4eea835a9f6ce9660a507db3798027b +0 -0
  202. data/test/dummy/tmp/cache/assets/D48/FC0/sprockets%2F47cf2e58f56acbe7238b29631aac1779 +0 -0
  203. data/test/dummy/tmp/cache/assets/D4C/E70/sprockets%2F17678645a655cdf95b204e86dda4d8ca +0 -0
  204. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  205. data/test/dummy/tmp/cache/assets/D4F/190/sprockets%2Fadcc2e8b83fe4792f917447c86a44c80 +0 -0
  206. data/test/dummy/tmp/cache/assets/D4F/190/sprockets%2Fe68d3a8389e75eacdbd8983c09e19010 +0 -0
  207. data/test/dummy/tmp/cache/assets/D4F/950/sprockets%2Ff8b1e4a369d77442fe6bc39508e3e09e +0 -0
  208. data/test/dummy/tmp/cache/assets/D51/100/sprockets%2F571715ceabc7e33e66f846b456ef75d6 +0 -0
  209. data/test/dummy/tmp/cache/assets/D52/520/sprockets%2F68d5c86f6c9ea8fd1085f18449ae0d51 +0 -0
  210. data/test/dummy/tmp/cache/assets/D54/840/sprockets%2F2aafcd340835ca3bc69ed700b1c45501 +0 -0
  211. data/test/dummy/tmp/cache/assets/D59/400/sprockets%2Ff619d3fd22ddaac2f92a28fb40200720 +0 -0
  212. data/test/dummy/tmp/cache/assets/D5C/940/sprockets%2F6c29bc6eeefc3667299df20792e844e7 +0 -0
  213. data/test/dummy/tmp/cache/assets/D5F/C50/sprockets%2F4ec20042f390ae48d7b5a3cfec5141e4 +0 -0
  214. data/test/dummy/tmp/cache/assets/D62/F50/sprockets%2F66002908f508efb50b9c4cba2a5a6bf3 +0 -0
  215. data/test/dummy/tmp/cache/assets/D63/0D0/sprockets%2F323add23ad8d005af95bdb5095bd7725 +0 -0
  216. data/test/dummy/tmp/cache/assets/D63/A70/sprockets%2Fca01340b98e0b682d267ba1fd15bfe67 +0 -0
  217. data/test/dummy/tmp/cache/assets/D64/2F0/sprockets%2F341b06b57bb1fb630df8c1bef327b793 +0 -0
  218. data/test/dummy/tmp/cache/assets/D65/190/sprockets%2F75aad633ccedab73c51274a3391a8d74 +0 -0
  219. data/test/dummy/tmp/cache/assets/D68/F60/sprockets%2Fb057c6f6087cfc735b5a4c23a128bce5 +0 -0
  220. data/test/dummy/tmp/cache/assets/D6C/3B0/sprockets%2F45d5b58136f21d7df8c0dfb726e2e1c1 +0 -0
  221. data/test/dummy/tmp/cache/assets/D6E/620/sprockets%2F31eddf4853c19ed403d0f147be92df26 +0 -0
  222. data/test/dummy/tmp/cache/assets/D6F/1A0/sprockets%2Fe3d23db8d63093ae39833afcf34e31e6 +0 -0
  223. data/test/dummy/tmp/cache/assets/D6F/380/sprockets%2Fe5be640cc42df8c6a6049a790cf523c6 +0 -0
  224. data/test/dummy/tmp/cache/assets/D70/940/sprockets%2F5e653ff1a51de6c26d6e3abc92b76327 +0 -0
  225. data/test/dummy/tmp/cache/assets/D70/E80/sprockets%2F3a249d9c51393ce16d2640d9bbce3f7d +0 -0
  226. data/test/dummy/tmp/cache/assets/D71/910/sprockets%2F69527a4f2a5d2a2c0fe195f9f62d5b4c +0 -0
  227. data/test/dummy/tmp/cache/assets/D72/760/sprockets%2F9b3e9ea2de2065ac138b6363f7f890ac +0 -0
  228. data/test/dummy/tmp/cache/assets/D72/EF0/sprockets%2Ffc3f19c479f22a4d85c564ea13e51c8a +0 -0
  229. data/test/dummy/tmp/cache/assets/D75/D00/sprockets%2F03a8fbb049950569d4d87dab629dea5b +0 -0
  230. data/test/dummy/tmp/cache/assets/D76/0D0/sprockets%2F676ec207d3fead338ded78c856066a0b +0 -0
  231. data/test/dummy/tmp/cache/assets/D76/8E0/sprockets%2F10a7936c71ad9dff761d2d46d7eeb058 +0 -0
  232. data/test/dummy/tmp/cache/assets/D77/080/sprockets%2F43ff65dd091c2c6cf48cc646034d68cf +0 -0
  233. data/test/dummy/tmp/cache/assets/D77/6F0/sprockets%2Ffe6fcab6288ae589c13237e96b060cf2 +0 -0
  234. data/test/dummy/tmp/cache/assets/D77/900/sprockets%2F77e6b4eb7e3b05edf1650af6681676ad +0 -0
  235. data/test/dummy/tmp/cache/assets/D77/980/sprockets%2Fce065901d3959c67bec634eeb4e8fe10 +0 -0
  236. data/test/dummy/tmp/cache/assets/D78/660/sprockets%2Ffbaccc52e4e5859e6a0e1967f20627e6 +0 -0
  237. data/test/dummy/tmp/cache/assets/D78/770/sprockets%2F5dd67434b177d5b4efe2936efda284e0 +0 -0
  238. data/test/dummy/tmp/cache/assets/D78/A80/sprockets%2F238267f61c90e8b48ee46f4bf8a2c2db +0 -0
  239. data/test/dummy/tmp/cache/assets/D7B/770/sprockets%2Fb0c04ed32d0faa65210c0d52749fab0c +0 -0
  240. data/test/dummy/tmp/cache/assets/D7C/990/sprockets%2F22a69dc590f2f6eda8b7afe666c51890 +0 -0
  241. data/test/dummy/tmp/cache/assets/D7D/A50/sprockets%2F88d515afd730fef79c65550aa66ad68c +0 -0
  242. data/test/dummy/tmp/cache/assets/D7F/6A0/sprockets%2F3d99d4017a9f81fddcf380295a7b68cd +0 -0
  243. data/test/dummy/tmp/cache/assets/D80/D50/sprockets%2Fe86788cdff3e66bab07c115c91f8f624 +0 -0
  244. data/test/dummy/tmp/cache/assets/D81/B80/sprockets%2F6c3ca820fdd948e17a374d395c868fdd +0 -0
  245. data/test/dummy/tmp/cache/assets/D83/920/sprockets%2Fa4353a2776cfb78269d7fbff5e99c23b +0 -0
  246. data/test/dummy/tmp/cache/assets/D85/CA0/sprockets%2F03a58eb49cba3223f94c243aad1ad4a4 +0 -0
  247. data/test/dummy/tmp/cache/assets/D86/D80/sprockets%2F001c46974abf20cf3af4f01c61cf53ac +0 -0
  248. data/test/dummy/tmp/cache/assets/D8A/990/sprockets%2Fed89f0e69fb99fca78140bc4589465ca +0 -0
  249. data/test/dummy/tmp/cache/assets/D8C/610/sprockets%2F319bdc365f809d7e37fa8afd964659df +0 -0
  250. data/test/dummy/tmp/cache/assets/D8E/8B0/sprockets%2F6f0dd508157f0efd0aa6a1d7fca14902 +0 -0
  251. data/test/dummy/tmp/cache/assets/D8F/E30/sprockets%2F06fd1ba6b3ff60b75692a211c38a5afc +0 -0
  252. data/test/dummy/tmp/cache/assets/D8F/FD0/sprockets%2F285135cf1a8e04aacb4578c2dc6c3bc3 +0 -0
  253. data/test/dummy/tmp/cache/assets/D93/D50/sprockets%2Fba7262b8f2e69471fcd0287aae33ad0a +0 -0
  254. data/test/dummy/tmp/cache/assets/D95/1E0/sprockets%2F3a3eb981006b45a2cbe6f5a7bb47d95a +0 -0
  255. data/test/dummy/tmp/cache/assets/D95/5A0/sprockets%2F378dfc7f79f6c9e8f6bc0339d6965bc5 +0 -0
  256. data/test/dummy/tmp/cache/assets/D98/720/sprockets%2F2434ea0068e2695cbda673bacd54ddd7 +0 -0
  257. data/test/dummy/tmp/cache/assets/D9A/C20/sprockets%2F26067ec4dfe2554edc3d8f0fb340c54b +0 -0
  258. data/test/dummy/tmp/cache/assets/D9B/930/sprockets%2Fb681f3ffcd05af4603f0cc61abf29855 +0 -0
  259. data/test/dummy/tmp/cache/assets/D9D/C10/sprockets%2F60a29e756d0233a7de2ae66a7e6e7adc +0 -0
  260. data/test/dummy/tmp/cache/assets/D9F/EC0/sprockets%2F3f2504f96d16dca528633ff3eac07cfd +0 -0
  261. data/test/dummy/tmp/cache/assets/DA0/1D0/sprockets%2F8bfdcf3c0d64c1e1afc1e119c6693559 +0 -0
  262. data/test/dummy/tmp/cache/assets/DA1/810/sprockets%2F05650792d7f6ba6cb751dfad824f6acd +0 -0
  263. data/test/dummy/tmp/cache/assets/DA2/BA0/sprockets%2F9a568ad7ba24d4750ff257aef4ef054b +0 -0
  264. data/test/dummy/tmp/cache/assets/DA6/180/sprockets%2F323ef4f0c03fadb6488f17a46ff7e94b +0 -0
  265. data/test/dummy/tmp/cache/assets/DA7/120/sprockets%2Fbe8125168aeec567a27f3057bd6ebff7 +0 -0
  266. data/test/dummy/tmp/cache/assets/DA7/F70/sprockets%2F27a40d69eee047cb6fdfe6bf96028b61 +0 -0
  267. data/test/dummy/tmp/cache/assets/DAC/110/sprockets%2F6258f6e1e529d7e09e24c07fbbecdd93 +0 -0
  268. data/test/dummy/tmp/cache/assets/DAC/2C0/sprockets%2F3806cf983e7fe8daa4cf83e6a007dd28 +0 -0
  269. data/test/dummy/tmp/cache/assets/DAE/AF0/sprockets%2Fea723747dced4e7c5937af13b48c97eb +0 -0
  270. data/test/dummy/tmp/cache/assets/DB0/710/sprockets%2F3cef41ed9a7c6f52fae191d84783e5d7 +0 -0
  271. data/test/dummy/tmp/cache/assets/DBC/540/sprockets%2F86f6c9053499a920f48c7f5addfee7ed +0 -0
  272. data/test/dummy/tmp/cache/assets/DC0/770/sprockets%2Fa359adf42a317c4a5edce04902bc5dc7 +0 -0
  273. data/test/dummy/tmp/cache/assets/DC2/380/sprockets%2Ff4a7fc0145cc1dabcf19de1649392a2b +0 -0
  274. data/test/dummy/tmp/cache/assets/DC2/C50/sprockets%2F8e4dfd4afa600c1b2087bc8eb272e26b +0 -0
  275. data/test/dummy/tmp/cache/assets/DC3/130/sprockets%2F0672e7e19aa9f9d3020b292eadafb1eb +0 -0
  276. data/test/dummy/tmp/cache/assets/DC3/700/sprockets%2F0d2f8e4ddd72d14f6ad338b3a9b05cc1 +0 -0
  277. data/test/dummy/tmp/cache/assets/DC8/4B0/sprockets%2F44e6f9eaba33fcb43a434d80ef8ac073 +0 -0
  278. data/test/dummy/tmp/cache/assets/DC8/B60/sprockets%2F9bd8be564a3ad9f68a7105b0cda4ef11 +0 -0
  279. data/test/dummy/tmp/cache/assets/DC9/B30/sprockets%2Ffaa921fa9eaed21d4826a9d661b9dd10 +0 -0
  280. data/test/dummy/tmp/cache/assets/DCB/A70/sprockets%2F6fcd98bbdab531575399a42ae1ded2d0 +0 -0
  281. data/test/dummy/tmp/cache/assets/DCD/140/sprockets%2F83c3caad52462c9fcfacf32c3fd27944 +0 -0
  282. data/test/dummy/tmp/cache/assets/DCF/1F0/sprockets%2F42c410adb8a2cfdfb21e01f003dc30aa +0 -0
  283. data/test/dummy/tmp/cache/assets/DCF/250/sprockets%2F2d76775ea0f52a5e3d1c86c2dfba0ff8 +0 -0
  284. data/test/dummy/tmp/cache/assets/DD1/8C0/sprockets%2F84bff024614f1e15fa0d77fd1ff7dd7b +0 -0
  285. data/test/dummy/tmp/cache/assets/DD2/280/sprockets%2Fe1f8c863bf2d18e0a2bd7be69a2b9e36 +0 -0
  286. data/test/dummy/tmp/cache/assets/DD2/710/sprockets%2F8628d8ed90ded6b0e0eb755a78acac24 +0 -0
  287. data/test/dummy/tmp/cache/assets/DD3/630/sprockets%2Ffe6d0ef414fe3382a471e3faf7e4dd63 +0 -0
  288. data/test/dummy/tmp/cache/assets/DD4/0A0/sprockets%2Fe6bb2a5ff873cf3158ed0ac4b3f86f09 +0 -0
  289. data/test/dummy/tmp/cache/assets/DD4/130/sprockets%2Fb0ef8baf598339a286cd0df63ac7b83b +0 -0
  290. data/test/dummy/tmp/cache/assets/DD4/CB0/sprockets%2F2fb64db80b4dc8ee8fcfc16f4270e473 +0 -0
  291. data/test/dummy/tmp/cache/assets/DD6/C30/sprockets%2Fff35f1f235d08836d5c2b7fa55bfef5b +0 -0
  292. data/test/dummy/tmp/cache/assets/DD8/B90/sprockets%2F7ae70acd3b6ebb964d280f97cfb4955c +0 -0
  293. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  294. data/test/dummy/tmp/cache/assets/DDC/E10/sprockets%2F61ce8847c7f5d1d08edfea0d146df5e8 +0 -0
  295. data/test/dummy/tmp/cache/assets/DE0/170/sprockets%2F9a9b79ff56fdcebe5486f0e367c411bb +0 -0
  296. data/test/dummy/tmp/cache/assets/DE2/260/sprockets%2Ff8f896defc5e94cfa30e2f5515db7c08 +0 -0
  297. data/test/dummy/tmp/cache/assets/DE3/300/sprockets%2Fc53d49c8920d7b95a7ed8ff4ea6ea6e4 +0 -0
  298. data/test/dummy/tmp/cache/assets/DE7/630/sprockets%2F5f3ce8dffadfd5990f5e44c68d9425e1 +0 -0
  299. data/test/dummy/tmp/cache/assets/DEC/BA0/sprockets%2Ff6bec7e8e869ef7749d660d45bba7ca7 +0 -0
  300. data/test/dummy/tmp/cache/assets/DED/550/sprockets%2F6b111cf52f042fe47ebd8baa81dab53e +0 -0
  301. data/test/dummy/tmp/cache/assets/DEE/540/sprockets%2F8bad16d64dbacd8bc46b2c145d0ce318 +0 -0
  302. data/test/dummy/tmp/cache/assets/DF2/E40/sprockets%2F102f882bdb07bebda9a4db5b4c2b48d8 +0 -0
  303. data/test/dummy/tmp/cache/assets/DF3/A30/sprockets%2F03dd29ddb09be1c8aee5db733b4d047c +0 -0
  304. data/test/dummy/tmp/cache/assets/DFA/AA0/sprockets%2F0bdf9202bafff6fe48cf8a300a5393ed +0 -0
  305. data/test/dummy/tmp/cache/assets/DFD/420/sprockets%2F5128ab1ee04279ebee5edbfed9182ab6 +0 -0
  306. data/test/dummy/tmp/cache/assets/E00/AB0/sprockets%2F997319d32bcaccfbce780f3ccc8a27f0 +0 -0
  307. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  308. data/test/dummy/tmp/cache/assets/E04/A10/sprockets%2Fe97eabd6255d0ef5f9b0ccb3c292f2d9 +0 -0
  309. data/test/dummy/tmp/cache/assets/E07/6F0/sprockets%2F5b96fbbf00d6ae89b172aecc79a7a95e +0 -0
  310. data/test/dummy/tmp/cache/assets/E13/B00/sprockets%2Fc2f4bc4b6df7022fbe7a0cb00a3afd45 +0 -0
  311. data/test/dummy/tmp/cache/assets/E16/F80/sprockets%2F9ede6a58cd5c1fff42e8c5cf4563d7f6 +0 -0
  312. data/test/dummy/tmp/cache/assets/E1C/060/sprockets%2F2497df812be0edad860cecbb200ba4fd +0 -0
  313. data/test/dummy/tmp/cache/assets/E23/040/sprockets%2Faf3f9526dc1358bb0c06ffabba0feb67 +0 -0
  314. data/test/dummy/tmp/cache/assets/E25/470/sprockets%2F550ad2a5de4f1715af8df2afe15fb1fe +0 -0
  315. data/test/dummy/tmp/cache/assets/E33/430/sprockets%2Fbcdf44f9c1fbd5cf69b77801af27aa5d +0 -0
  316. data/test/dummy/tmp/cache/assets/E54/3F0/sprockets%2Fcb7e21a767fc3d2ac45f8bc4dc1dce4a +0 -0
  317. data/test/dummy/tmp/cache/assets/E5B/510/sprockets%2F1fa4efe0ab3f55fef3f67483b3eac6ba +0 -0
  318. data/test/dummy/tmp/cache/assets/E5E/2B0/sprockets%2F6eb5aba2f6fa8a56fe6da1d77bbea970 +0 -0
  319. data/test/dummy/tmp/cache/assets/E90/F00/sprockets%2Fc1ab3aec41ccae8fa8ee48b1f85d89ec +0 -0
  320. data/test/dummy/tmp/cache/assets/E9A/140/sprockets%2Faf8b05634ecfcdeb876bdf0de4b79ffc +0 -0
  321. data/test/dummy/tmp/cache/assets/E9B/570/sprockets%2F07f6b4f95754ee6e8da8deb7cbacdadd +0 -0
  322. data/test/dummy/tmp/cache/assets/EA4/AD0/sprockets%2Fcbe751f1bc0a3ab64e3eac8e80abaead +0 -0
  323. data/test/dummy/tmp/pids/server.pid +1 -0
  324. data/test/functional/gutter/gutter_controller_test.rb +11 -0
  325. data/test/gutter_test.rb +7 -0
  326. data/test/integration/navigation_test.rb +10 -0
  327. data/test/test_helper.rb +15 -0
  328. data/test/unit/helpers/gutter/gutter_helper_test.rb +6 -0
  329. metadata +688 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c7b32d0851ab649d6d67477f75794974c50295d3
4
+ data.tar.gz: 8d944760913764eac53062da3b0d42691bf97e82
5
+ SHA512:
6
+ metadata.gz: 65f03df192de17c2e1dbbfbea18b9f4b996ba1c75d43036fef79a004547297267135a6b7a9f67e9f3cc0a4dda231fc69f51512f45b39dcd7da2d96389187a70a
7
+ data.tar.gz: aadcae53fd0edc28b7041238044d38a96d129627bb5513444e214d0262ed43c2351c867c5837dbbaef9698a7e89345d411dd5cc150a04efe87e199d7766bfda5
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Rajeev Kannav Sharma
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,58 @@
1
+ ## Gutter - Linux-Ruby DashBoard
2
+
3
+ A low-overhead monitoring web dashboard for a GNU/Linux machine. Simply drop-in the app and go!
4
+
5
+ [**View Features**](#features) | [**Installation Instructions**](#installation) | [**News**](https://github.com/afaqurk/linux-dash/news) | [**Documentation**](https://github.com/afaqurk/linux-dash/wiki)
6
+
7
+ ## Features
8
+ * A beautiful web-based dashboard for monitoring server info
9
+ * Live, on-demand monitoring of RAM, Load, Uptime, Disk Allocation, Users and many more system stats
10
+ * Drop-in install for servers with Apache2/nginx + PHP
11
+ * Click and drag to re-arrange widgets
12
+ * Support for wide range of linux server flavors [(See Support section)](#support)
13
+
14
+ ## Installation
15
+
16
+ 1. add to your `Gemfile` -> `'gutter'`.
17
+ 2. bundle install.
18
+ 3. `rails s`
19
+ 4 Goto `http://localhost:3000/gutter`
20
+
21
+ ## Support
22
+
23
+ *The information listed here is currently limited and will expand shortly.*
24
+
25
+ * OS
26
+ * Arch
27
+ * Debian 6, 7
28
+ * Ubuntu 11.04+
29
+ * Linux Mint 16+
30
+ * Apache 2
31
+ * Nginx
32
+ * Ruby
33
+ * Modern browsers
34
+
35
+ ## Contributing
36
+
37
+ We hope that you will consider contributing to gutter. You can contribute in many ways. For example, you might:
38
+
39
+ add documentation and “how-to” articles to the README or Wiki.
40
+
41
+ improve the existing application with more system specific features in gutter.
42
+
43
+ When contributing to gutter, we ask that you:
44
+
45
+ provide tests and documentation whenever possible. It is very unlikely that we will accept new features or functionality into Devise without the proper testing and documentation. When fixing a bug, provide a failing test case that your patch solves.
46
+
47
+ open a GitHub Pull Request with your patches and we will review your contribution and respond as quickly as possible. Keep in mind that this is an open source project, and it may take us some time to get back to you. Your patience is very much appreciated.
48
+
49
+ Soon you'll be listed here:
50
+ * [gutter-people](https://github.com/rajeevkannav/gutter/graphs/contributors)
51
+
52
+ ## Credits:
53
+ * [linux-dash](https://github.com/afaqurk/linux-dash) - [afaqurk](https://github.com/afaqurk/) Thank-you So much!
54
+ * [Dashboard Template](http://www.egrappler.com/templatevamp-free-twitter-bootstrap-admin-template/)
55
+ * [Bootstrap](http://getbootstrap.com)
56
+ * [Font Awesome](http://fontawesome.io/)
57
+
58
+ This project rocks and uses MIT-LICENSE.
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'Gutter'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+
28
+ Bundler::GemHelper.install_tasks
29
+
30
+ require 'rake/testtask'
31
+
32
+ Rake::TestTask.new(:test) do |t|
33
+ t.libs << 'lib'
34
+ t.libs << 'test'
35
+ t.pattern = 'test/**/*_test.rb'
36
+ t.verbose = false
37
+ end
38
+
39
+
40
+ task :default => :test
@@ -0,0 +1,228 @@
1
+ $(document).ready(function () {
2
+ // keep widgets ordered
3
+ keepWidgetOrdered();
4
+
5
+ // hide localstored hidden widgets
6
+ keepWidgetHidden();
7
+
8
+ // enable popovers
9
+ // $(".pop").popover();
10
+
11
+ // activate tooltips on hover
12
+ $("[data-toggle='tooltip']").tooltip({trigger: 'hover', placement: 'right'});
13
+
14
+ dashboard.getAll();
15
+ }).on("click", ".js-smoothscroll",function (event) {
16
+ event.preventDefault();
17
+ var target = $(this.hash).parent();
18
+ pulseElement(target, 8, 400);
19
+
20
+ $("html,body").animate({
21
+ scrollTop: target.offset().top - 130
22
+ }, 1000);
23
+ }).on("click", ".js-refresh-info", function (event) {
24
+ event.preventDefault();
25
+ var target = event.target;
26
+ var item = target.id.split("-").splice(-1)[0];
27
+
28
+ // if the refresh icon is click (where in a <span>) target will not have an id, so grab its parent instead
29
+ if (target.id == "") {
30
+ var parent = $(target).parent()[0];
31
+ item = parent.id.split("-").splice(-1)[0];
32
+ }
33
+
34
+ dashboard.fnMap[item]();
35
+ });
36
+
37
+ // Handle for cancelling active effect.
38
+ var pulsing = {
39
+ element: null,
40
+ timeoutIDs: [],
41
+ resetfn: function () {
42
+ pulsing.element = null;
43
+ pulsing.timeoutIDs = [];
44
+ }
45
+ };
46
+
47
+ /**
48
+ * Applies a pulse effect to the specified element. If triggered while already
49
+ * active the ongoing effect is cancelled immediately.
50
+ *
51
+ * @param {HTMLElement} element The element to apply the effect to.
52
+ * @param {Number} times How many pulses.
53
+ * @param {Number} interval Milliseconds between pulses.
54
+ */
55
+ function pulseElement(element, times, interval) {
56
+ if (pulsing.element) {
57
+ pulsing.element.removeClass("pulse").
58
+ parent().removeClass("pulse-border");
59
+ pulsing.timeoutIDs.forEach(function (ID) {
60
+ clearTimeout(ID);
61
+ });
62
+ pulsing.timeoutIDs = [];
63
+ }
64
+ pulsing.element = element;
65
+ var parent = element.parent();
66
+ var f = function () {
67
+ element.toggleClass("pulse");
68
+ parent.toggleClass("pulse-border");
69
+ };
70
+
71
+ pulsing.timeoutIDs.push(setTimeout(pulsing.resetfn,
72
+ (times + 1) * interval));
73
+ for (; times > 0; --times) {
74
+ pulsing.timeoutIDs.push(setTimeout(f, times * interval));
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Adds jQuery UI sortable portlet functionality to widgets
80
+ *
81
+ *
82
+ */
83
+ // general cached DOM objects
84
+ closedWidgetCount = $('#closed-widget-count'),
85
+ closedWidgets = $('#closed-widget-list');
86
+ allWidgets = $('.widget');
87
+
88
+ $(document).ready(function () {
89
+
90
+ $("#widgets").sortable({
91
+ handle: ".widget-header",
92
+ cancel: "#filter-ps",
93
+ cursor: "move",
94
+ opacity: 0.7,
95
+ scrollSensitivity: 10,
96
+ tolerance: 'pointer',
97
+ stop: function (event, ui) {
98
+ // save widget order in localstorage
99
+ var newOrder = new Array();
100
+ $('.widget').each(function () {
101
+ newOrder.push($(this).attr("id"));
102
+ });
103
+ localStorage.setItem('positions', JSON.stringify(newOrder));
104
+ }
105
+ });
106
+
107
+ /**
108
+ *
109
+ * Widget hide functionality
110
+ *
111
+ **/
112
+
113
+
114
+ // Close all widgets
115
+ $('#close-all-widgets').click(function () {
116
+ allWidgets.each(function (index) {
117
+ if ($(this).is(":visible")) {
118
+ hideWidget($(this), 400);
119
+ }
120
+ });
121
+ });
122
+
123
+ // Open all widgets
124
+ $('#open-all-widgets').click(function () {
125
+ allWidgets.each(function (index) {
126
+ openWidget($(this), $(this).attr('id'), 500);
127
+ });
128
+ });
129
+
130
+ // attach a close button to all widget headers
131
+ $('.widget-header').append('<div class="btn btn-icon-only icon-remove hide-widget"></div>');
132
+
133
+ // hide / close widget function
134
+ $('.hide-widget').off('click').on('click', function () {
135
+ var widget = $(this).parent().parent();
136
+ hideWidget(widget, 300);
137
+ });
138
+
139
+ // unhide closed widget
140
+ $('.open-widget').off('click').on('click', function () {
141
+ // cache DOM objects/data used in this function
142
+ var widgetIdentifier = $(this).data('id');
143
+ var widget = $("#" + widgetIdentifier);
144
+ var navItem = $(this).parent();
145
+
146
+ openWidget(widget, widgetIdentifier, 500);
147
+
148
+ // remove item from closed-widget-list
149
+ navItem.remove();
150
+
151
+ });
152
+ });
153
+
154
+
155
+ function openWidget(widget, widgetIdentifier, speed) {
156
+
157
+ // decrement closed-widget-count
158
+ if (widget.is(":hidden")) {
159
+ closedWidgetCount.text(Number(closedWidgetCount.text()) - 1);
160
+ }
161
+
162
+ // unhide widget
163
+ widget.show(500);
164
+
165
+ // remove widget from localstorage
166
+ var localData = JSON.parse(window.localStorage.getItem('hidden'));
167
+ for (var i = localData.length; i--;) {
168
+ if (localData[i] == widgetIdentifier) {
169
+ localData.splice(i, 1);
170
+ }
171
+ }
172
+ localStorage.setItem('hidden', JSON.stringify(localData));
173
+ }
174
+
175
+
176
+ function hideWidget(widget, speed) {
177
+ // cache DOM objects/data used in this function
178
+ var widgetName = widget.find('.widget-header h3').text();
179
+ var widgetIdentifier = widget.attr('id');
180
+
181
+ // update count
182
+ if (!widget.is(":hidden")) {
183
+ closedWidgetCount.text(Number(closedWidgetCount.text()) + 1);
184
+ }
185
+
186
+ // hide widget from DOM
187
+ widget.hide(speed);
188
+
189
+ // add to hidden list
190
+ closedWidgets.append('<li><a class="open-widget" data-id="' + widgetIdentifier + '"><i class="icon-plus-sign"></i> ' + widgetName + '</a></li>');
191
+
192
+ // add widget to localstorage (and create item if needed)
193
+ var localData = JSON.parse(window.localStorage.getItem('hidden'));
194
+ if (localData == null) {
195
+ hidden = new Array();
196
+ hidden.push(widgetIdentifier);
197
+ localStorage.setItem('hidden', JSON.stringify(hidden));
198
+ }
199
+ else {
200
+ if (!isInArray(localData, widgetIdentifier)) {
201
+ localData.push(widgetIdentifier);
202
+ localStorage.setItem('hidden', JSON.stringify(localData));
203
+ }
204
+ }
205
+ }
206
+
207
+ function keepWidgetHidden() {
208
+ var localData = JSON.parse(window.localStorage.getItem('hidden'));
209
+ if (localData != null) {
210
+ $.each(localData, function (i, value) {
211
+ hideWidget($("#" + value), 0);
212
+ });
213
+ }
214
+ }
215
+
216
+ function keepWidgetOrdered() {
217
+ var localData = JSON.parse(window.localStorage.getItem('positions'));
218
+ if (localData != null) {
219
+ $.each(localData, function (i, value) {
220
+ var widgetId = "#" + value;
221
+ $("#widgets").append($(widgetId).parent());
222
+ });
223
+ }
224
+ }
225
+
226
+ function isInArray(array, search) {
227
+ return (array.indexOf(search) >= 0) ? true : false;
228
+ }
@@ -0,0 +1,18 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require jquery.ui.all
16
+ //= require dataTables/jquery.dataTables
17
+ //= require_tree .
18
+ //= require ../base.js
@@ -0,0 +1,1726 @@
1
+ ///* ===================================================
2
+ // * bootstrap-transition.js v2.0.2
3
+ // * http://twitter.github.com/bootstrap/javascript.html#transitions
4
+ // * ===================================================
5
+ // * Copyright 2012 Twitter, Inc.
6
+ // *
7
+ // * Licensed under the Apache License, Version 2.0 (the "License");
8
+ // * you may not use this file except in compliance with the License.
9
+ // * You may obtain a copy of the License at
10
+ // *
11
+ // * http://www.apache.org/licenses/LICENSE-2.0
12
+ // *
13
+ // * Unless required by applicable law or agreed to in writing, software
14
+ // * distributed under the License is distributed on an "AS IS" BASIS,
15
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ // * See the License for the specific language governing permissions and
17
+ // * limitations under the License.
18
+ // * ========================================================== */
19
+ //
20
+ //!function( $ ) {
21
+ //
22
+ // $(function () {
23
+ //
24
+ // "use strict"
25
+ //
26
+ // /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
27
+ // * ======================================================= */
28
+ //
29
+ // $.support.transition = (function () {
30
+ // var thisBody = document.body || document.documentElement
31
+ // , thisStyle = thisBody.style
32
+ // , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
33
+ //
34
+ // return support && {
35
+ // end: (function () {
36
+ // var transitionEnd = "TransitionEnd"
37
+ // if ( $.browser.webkit ) {
38
+ // transitionEnd = "webkitTransitionEnd"
39
+ // } else if ( $.browser.mozilla ) {
40
+ // transitionEnd = "transitionend"
41
+ // } else if ( $.browser.opera ) {
42
+ // transitionEnd = "oTransitionEnd"
43
+ // }
44
+ // return transitionEnd
45
+ // }())
46
+ // }
47
+ // })()
48
+ //
49
+ // })
50
+ //
51
+ //}( window.jQuery );/* ==========================================================
52
+ // * bootstrap-alert.js v2.0.2
53
+ // * http://twitter.github.com/bootstrap/javascript.html#alerts
54
+ // * ==========================================================
55
+ // * Copyright 2012 Twitter, Inc.
56
+ // *
57
+ // * Licensed under the Apache License, Version 2.0 (the "License");
58
+ // * you may not use this file except in compliance with the License.
59
+ // * You may obtain a copy of the License at
60
+ // *
61
+ // * http://www.apache.org/licenses/LICENSE-2.0
62
+ // *
63
+ // * Unless required by applicable law or agreed to in writing, software
64
+ // * distributed under the License is distributed on an "AS IS" BASIS,
65
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
66
+ // * See the License for the specific language governing permissions and
67
+ // * limitations under the License.
68
+ // * ========================================================== */
69
+ //
70
+ //
71
+ //!function( $ ){
72
+ //
73
+ // "use strict"
74
+ //
75
+ // /* ALERT CLASS DEFINITION
76
+ // * ====================== */
77
+ //
78
+ // var dismiss = '[data-dismiss="alert"]'
79
+ // , Alert = function ( el ) {
80
+ // $(el).on('click', dismiss, this.close)
81
+ // }
82
+ //
83
+ // Alert.prototype = {
84
+ //
85
+ // constructor: Alert
86
+ //
87
+ // , close: function ( e ) {
88
+ // var $this = $(this)
89
+ // , selector = $this.attr('data-target')
90
+ // , $parent
91
+ //
92
+ // if (!selector) {
93
+ // selector = $this.attr('href')
94
+ // selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
95
+ // }
96
+ //
97
+ // $parent = $(selector)
98
+ // $parent.trigger('close')
99
+ //
100
+ // e && e.preventDefault()
101
+ //
102
+ // $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
103
+ //
104
+ // $parent
105
+ // .trigger('close')
106
+ // .removeClass('in')
107
+ //
108
+ // function removeElement() {
109
+ // $parent
110
+ // .trigger('closed')
111
+ // .remove()
112
+ // }
113
+ //
114
+ // $.support.transition && $parent.hasClass('fade') ?
115
+ // $parent.on($.support.transition.end, removeElement) :
116
+ // removeElement()
117
+ // }
118
+ //
119
+ // }
120
+ //
121
+ //
122
+ // /* ALERT PLUGIN DEFINITION
123
+ // * ======================= */
124
+ //
125
+ // $.fn.alert = function ( option ) {
126
+ // return this.each(function () {
127
+ // var $this = $(this)
128
+ // , data = $this.data('alert')
129
+ // if (!data) $this.data('alert', (data = new Alert(this)))
130
+ // if (typeof option == 'string') data[option].call($this)
131
+ // })
132
+ // }
133
+ //
134
+ // $.fn.alert.Constructor = Alert
135
+ //
136
+ //
137
+ // /* ALERT DATA-API
138
+ // * ============== */
139
+ //
140
+ // $(function () {
141
+ // $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
142
+ // })
143
+ //
144
+ //}( window.jQuery );/* ============================================================
145
+ // * bootstrap-button.js v2.0.2
146
+ // * http://twitter.github.com/bootstrap/javascript.html#buttons
147
+ // * ============================================================
148
+ // * Copyright 2012 Twitter, Inc.
149
+ // *
150
+ // * Licensed under the Apache License, Version 2.0 (the "License");
151
+ // * you may not use this file except in compliance with the License.
152
+ // * You may obtain a copy of the License at
153
+ // *
154
+ // * http://www.apache.org/licenses/LICENSE-2.0
155
+ // *
156
+ // * Unless required by applicable law or agreed to in writing, software
157
+ // * distributed under the License is distributed on an "AS IS" BASIS,
158
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159
+ // * See the License for the specific language governing permissions and
160
+ // * limitations under the License.
161
+ // * ============================================================ */
162
+ //
163
+ //!function( $ ){
164
+ //
165
+ // "use strict"
166
+ //
167
+ // /* BUTTON PUBLIC CLASS DEFINITION
168
+ // * ============================== */
169
+ //
170
+ // var Button = function ( element, options ) {
171
+ // this.$element = $(element)
172
+ // this.options = $.extend({}, $.fn.button.defaults, options)
173
+ // }
174
+ //
175
+ // Button.prototype = {
176
+ //
177
+ // constructor: Button
178
+ //
179
+ // , setState: function ( state ) {
180
+ // var d = 'disabled'
181
+ // , $el = this.$element
182
+ // , data = $el.data()
183
+ // , val = $el.is('input') ? 'val' : 'html'
184
+ //
185
+ // state = state + 'Text'
186
+ // data.resetText || $el.data('resetText', $el[val]())
187
+ //
188
+ // $el[val](data[state] || this.options[state])
189
+ //
190
+ // // push to event loop to allow forms to submit
191
+ // setTimeout(function () {
192
+ // state == 'loadingText' ?
193
+ // $el.addClass(d).attr(d, d) :
194
+ // $el.removeClass(d).removeAttr(d)
195
+ // }, 0)
196
+ // }
197
+ //
198
+ // , toggle: function () {
199
+ // var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
200
+ //
201
+ // $parent && $parent
202
+ // .find('.active')
203
+ // .removeClass('active')
204
+ //
205
+ // this.$element.toggleClass('active')
206
+ // }
207
+ //
208
+ // }
209
+ //
210
+ //
211
+ // /* BUTTON PLUGIN DEFINITION
212
+ // * ======================== */
213
+ //
214
+ // $.fn.button = function ( option ) {
215
+ // return this.each(function () {
216
+ // var $this = $(this)
217
+ // , data = $this.data('button')
218
+ // , options = typeof option == 'object' && option
219
+ // if (!data) $this.data('button', (data = new Button(this, options)))
220
+ // if (option == 'toggle') data.toggle()
221
+ // else if (option) data.setState(option)
222
+ // })
223
+ // }
224
+ //
225
+ // $.fn.button.defaults = {
226
+ // loadingText: 'loading...'
227
+ // }
228
+ //
229
+ // $.fn.button.Constructor = Button
230
+ //
231
+ //
232
+ // /* BUTTON DATA-API
233
+ // * =============== */
234
+ //
235
+ // $(function () {
236
+ // $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
237
+ // var $btn = $(e.target)
238
+ // if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
239
+ // $btn.button('toggle')
240
+ // })
241
+ // })
242
+ //
243
+ //}( window.jQuery );/* ==========================================================
244
+ // * bootstrap-carousel.js v2.0.2
245
+ // * http://twitter.github.com/bootstrap/javascript.html#carousel
246
+ // * ==========================================================
247
+ // * Copyright 2012 Twitter, Inc.
248
+ // *
249
+ // * Licensed under the Apache License, Version 2.0 (the "License");
250
+ // * you may not use this file except in compliance with the License.
251
+ // * You may obtain a copy of the License at
252
+ // *
253
+ // * http://www.apache.org/licenses/LICENSE-2.0
254
+ // *
255
+ // * Unless required by applicable law or agreed to in writing, software
256
+ // * distributed under the License is distributed on an "AS IS" BASIS,
257
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
258
+ // * See the License for the specific language governing permissions and
259
+ // * limitations under the License.
260
+ // * ========================================================== */
261
+ //
262
+ //
263
+ //!function( $ ){
264
+ //
265
+ // "use strict"
266
+ //
267
+ // /* CAROUSEL CLASS DEFINITION
268
+ // * ========================= */
269
+ //
270
+ // var Carousel = function (element, options) {
271
+ // this.$element = $(element)
272
+ // this.options = $.extend({}, $.fn.carousel.defaults, options)
273
+ // this.options.slide && this.slide(this.options.slide)
274
+ // this.options.pause == 'hover' && this.$element
275
+ // .on('mouseenter', $.proxy(this.pause, this))
276
+ // .on('mouseleave', $.proxy(this.cycle, this))
277
+ // }
278
+ //
279
+ // Carousel.prototype = {
280
+ //
281
+ // cycle: function () {
282
+ // this.interval = setInterval($.proxy(this.next, this), this.options.interval)
283
+ // return this
284
+ // }
285
+ //
286
+ // , to: function (pos) {
287
+ // var $active = this.$element.find('.active')
288
+ // , children = $active.parent().children()
289
+ // , activePos = children.index($active)
290
+ // , that = this
291
+ //
292
+ // if (pos > (children.length - 1) || pos < 0) return
293
+ //
294
+ // if (this.sliding) {
295
+ // return this.$element.one('slid', function () {
296
+ // that.to(pos)
297
+ // })
298
+ // }
299
+ //
300
+ // if (activePos == pos) {
301
+ // return this.pause().cycle()
302
+ // }
303
+ //
304
+ // return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
305
+ // }
306
+ //
307
+ // , pause: function () {
308
+ // clearInterval(this.interval)
309
+ // this.interval = null
310
+ // return this
311
+ // }
312
+ //
313
+ // , next: function () {
314
+ // if (this.sliding) return
315
+ // return this.slide('next')
316
+ // }
317
+ //
318
+ // , prev: function () {
319
+ // if (this.sliding) return
320
+ // return this.slide('prev')
321
+ // }
322
+ //
323
+ // , slide: function (type, next) {
324
+ // var $active = this.$element.find('.active')
325
+ // , $next = next || $active[type]()
326
+ // , isCycling = this.interval
327
+ // , direction = type == 'next' ? 'left' : 'right'
328
+ // , fallback = type == 'next' ? 'first' : 'last'
329
+ // , that = this
330
+ //
331
+ // this.sliding = true
332
+ //
333
+ // isCycling && this.pause()
334
+ //
335
+ // $next = $next.length ? $next : this.$element.find('.item')[fallback]()
336
+ //
337
+ // if ($next.hasClass('active')) return
338
+ //
339
+ // if (!$.support.transition && this.$element.hasClass('slide')) {
340
+ // this.$element.trigger('slide')
341
+ // $active.removeClass('active')
342
+ // $next.addClass('active')
343
+ // this.sliding = false
344
+ // this.$element.trigger('slid')
345
+ // } else {
346
+ // $next.addClass(type)
347
+ // $next[0].offsetWidth // force reflow
348
+ // $active.addClass(direction)
349
+ // $next.addClass(direction)
350
+ // this.$element.trigger('slide')
351
+ // this.$element.one($.support.transition.end, function () {
352
+ // $next.removeClass([type, direction].join(' ')).addClass('active')
353
+ // $active.removeClass(['active', direction].join(' '))
354
+ // that.sliding = false
355
+ // setTimeout(function () { that.$element.trigger('slid') }, 0)
356
+ // })
357
+ // }
358
+ //
359
+ // isCycling && this.cycle()
360
+ //
361
+ // return this
362
+ // }
363
+ //
364
+ // }
365
+ //
366
+ //
367
+ // /* CAROUSEL PLUGIN DEFINITION
368
+ // * ========================== */
369
+ //
370
+ // $.fn.carousel = function ( option ) {
371
+ // return this.each(function () {
372
+ // var $this = $(this)
373
+ // , data = $this.data('carousel')
374
+ // , options = typeof option == 'object' && option
375
+ // if (!data) $this.data('carousel', (data = new Carousel(this, options)))
376
+ // if (typeof option == 'number') data.to(option)
377
+ // else if (typeof option == 'string' || (option = options.slide)) data[option]()
378
+ // else data.cycle()
379
+ // })
380
+ // }
381
+ //
382
+ // $.fn.carousel.defaults = {
383
+ // interval: 5000
384
+ // , pause: 'hover'
385
+ // }
386
+ //
387
+ // $.fn.carousel.Constructor = Carousel
388
+ //
389
+ //
390
+ // /* CAROUSEL DATA-API
391
+ // * ================= */
392
+ //
393
+ // $(function () {
394
+ // $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
395
+ // var $this = $(this), href
396
+ // , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
397
+ // , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
398
+ // $target.carousel(options)
399
+ // e.preventDefault()
400
+ // })
401
+ // })
402
+ //
403
+ //}( window.jQuery );/* =============================================================
404
+ // * bootstrap-collapse.js v2.0.2
405
+ // * http://twitter.github.com/bootstrap/javascript.html#collapse
406
+ // * =============================================================
407
+ // * Copyright 2012 Twitter, Inc.
408
+ // *
409
+ // * Licensed under the Apache License, Version 2.0 (the "License");
410
+ // * you may not use this file except in compliance with the License.
411
+ // * You may obtain a copy of the License at
412
+ // *
413
+ // * http://www.apache.org/licenses/LICENSE-2.0
414
+ // *
415
+ // * Unless required by applicable law or agreed to in writing, software
416
+ // * distributed under the License is distributed on an "AS IS" BASIS,
417
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
418
+ // * See the License for the specific language governing permissions and
419
+ // * limitations under the License.
420
+ // * ============================================================ */
421
+ //
422
+ //!function( $ ){
423
+ //
424
+ // "use strict"
425
+ //
426
+ // var Collapse = function ( element, options ) {
427
+ // this.$element = $(element)
428
+ // this.options = $.extend({}, $.fn.collapse.defaults, options)
429
+ //
430
+ // if (this.options["parent"]) {
431
+ // this.$parent = $(this.options["parent"])
432
+ // }
433
+ //
434
+ // this.options.toggle && this.toggle()
435
+ // }
436
+ //
437
+ // Collapse.prototype = {
438
+ //
439
+ // constructor: Collapse
440
+ //
441
+ // , dimension: function () {
442
+ // var hasWidth = this.$element.hasClass('width')
443
+ // return hasWidth ? 'width' : 'height'
444
+ // }
445
+ //
446
+ // , show: function () {
447
+ // var dimension = this.dimension()
448
+ // , scroll = $.camelCase(['scroll', dimension].join('-'))
449
+ // , actives = this.$parent && this.$parent.find('.in')
450
+ // , hasData
451
+ //
452
+ // if (actives && actives.length) {
453
+ // hasData = actives.data('collapse')
454
+ // actives.collapse('hide')
455
+ // hasData || actives.data('collapse', null)
456
+ // }
457
+ //
458
+ // this.$element[dimension](0)
459
+ // this.transition('addClass', 'show', 'shown')
460
+ // this.$element[dimension](this.$element[0][scroll])
461
+ //
462
+ // }
463
+ //
464
+ // , hide: function () {
465
+ // var dimension = this.dimension()
466
+ // this.reset(this.$element[dimension]())
467
+ // this.transition('removeClass', 'hide', 'hidden')
468
+ // this.$element[dimension](0)
469
+ // }
470
+ //
471
+ // , reset: function ( size ) {
472
+ // var dimension = this.dimension()
473
+ //
474
+ // this.$element
475
+ // .removeClass('collapse')
476
+ // [dimension](size || 'auto')
477
+ // [0].offsetWidth
478
+ //
479
+ // this.$element[size ? 'addClass' : 'removeClass']('collapse')
480
+ //
481
+ // return this
482
+ // }
483
+ //
484
+ // , transition: function ( method, startEvent, completeEvent ) {
485
+ // var that = this
486
+ // , complete = function () {
487
+ // if (startEvent == 'show') that.reset()
488
+ // that.$element.trigger(completeEvent)
489
+ // }
490
+ //
491
+ // this.$element
492
+ // .trigger(startEvent)
493
+ // [method]('in')
494
+ //
495
+ // $.support.transition && this.$element.hasClass('collapse') ?
496
+ // this.$element.one($.support.transition.end, complete) :
497
+ // complete()
498
+ // }
499
+ //
500
+ // , toggle: function () {
501
+ // this[this.$element.hasClass('in') ? 'hide' : 'show']()
502
+ // }
503
+ //
504
+ // }
505
+ //
506
+ // /* COLLAPSIBLE PLUGIN DEFINITION
507
+ // * ============================== */
508
+ //
509
+ // $.fn.collapse = function ( option ) {
510
+ // return this.each(function () {
511
+ // var $this = $(this)
512
+ // , data = $this.data('collapse')
513
+ // , options = typeof option == 'object' && option
514
+ // if (!data) $this.data('collapse', (data = new Collapse(this, options)))
515
+ // if (typeof option == 'string') data[option]()
516
+ // })
517
+ // }
518
+ //
519
+ // $.fn.collapse.defaults = {
520
+ // toggle: true
521
+ // }
522
+ //
523
+ // $.fn.collapse.Constructor = Collapse
524
+ //
525
+ //
526
+ // /* COLLAPSIBLE DATA-API
527
+ // * ==================== */
528
+ //
529
+ // $(function () {
530
+ // $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
531
+ // var $this = $(this), href
532
+ // , target = $this.attr('data-target')
533
+ // || e.preventDefault()
534
+ // || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
535
+ // , option = $(target).data('collapse') ? 'toggle' : $this.data()
536
+ // $(target).collapse(option)
537
+ // })
538
+ // })
539
+ //
540
+ //}( window.jQuery );/* ============================================================
541
+ // * bootstrap-dropdown.js v2.0.2
542
+ // * http://twitter.github.com/bootstrap/javascript.html#dropdowns
543
+ // * ============================================================
544
+ // * Copyright 2012 Twitter, Inc.
545
+ // *
546
+ // * Licensed under the Apache License, Version 2.0 (the "License");
547
+ // * you may not use this file except in compliance with the License.
548
+ // * You may obtain a copy of the License at
549
+ // *
550
+ // * http://www.apache.org/licenses/LICENSE-2.0
551
+ // *
552
+ // * Unless required by applicable law or agreed to in writing, software
553
+ // * distributed under the License is distributed on an "AS IS" BASIS,
554
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
555
+ // * See the License for the specific language governing permissions and
556
+ // * limitations under the License.
557
+ // * ============================================================ */
558
+ //
559
+ //
560
+ //!function( $ ){
561
+ //
562
+ // "use strict"
563
+ //
564
+ // /* DROPDOWN CLASS DEFINITION
565
+ // * ========================= */
566
+ //
567
+ // var toggle = '[data-toggle="dropdown"]'
568
+ // , Dropdown = function ( element ) {
569
+ // var $el = $(element).on('click.dropdown.data-api', this.toggle)
570
+ // $('html').on('click.dropdown.data-api', function () {
571
+ // $el.parent().removeClass('open')
572
+ // })
573
+ // }
574
+ //
575
+ // Dropdown.prototype = {
576
+ //
577
+ // constructor: Dropdown
578
+ //
579
+ // , toggle: function ( e ) {
580
+ // var $this = $(this)
581
+ // , selector = $this.attr('data-target')
582
+ // , $parent
583
+ // , isActive
584
+ //
585
+ // if (!selector) {
586
+ // selector = $this.attr('href')
587
+ // selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
588
+ // }
589
+ //
590
+ // $parent = $(selector)
591
+ // $parent.length || ($parent = $this.parent())
592
+ //
593
+ // isActive = $parent.hasClass('open')
594
+ //
595
+ // clearMenus()
596
+ // !isActive && $parent.toggleClass('open')
597
+ //
598
+ // return false
599
+ // }
600
+ //
601
+ // }
602
+ //
603
+ // function clearMenus() {
604
+ // $(toggle).parent().removeClass('open')
605
+ // }
606
+ //
607
+ //
608
+ // /* DROPDOWN PLUGIN DEFINITION
609
+ // * ========================== */
610
+ //
611
+ // $.fn.dropdown = function ( option ) {
612
+ // return this.each(function () {
613
+ // var $this = $(this)
614
+ // , data = $this.data('dropdown')
615
+ // if (!data) $this.data('dropdown', (data = new Dropdown(this)))
616
+ // if (typeof option == 'string') data[option].call($this)
617
+ // })
618
+ // }
619
+ //
620
+ // $.fn.dropdown.Constructor = Dropdown
621
+ //
622
+ //
623
+ // /* APPLY TO STANDARD DROPDOWN ELEMENTS
624
+ // * =================================== */
625
+ //
626
+ // $(function () {
627
+ // $('html').on('click.dropdown.data-api', clearMenus)
628
+ // $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
629
+ // })
630
+ //
631
+ //}( window.jQuery );/* =========================================================
632
+ // * bootstrap-modal.js v2.0.2
633
+ // * http://twitter.github.com/bootstrap/javascript.html#modals
634
+ // * =========================================================
635
+ // * Copyright 2012 Twitter, Inc.
636
+ // *
637
+ // * Licensed under the Apache License, Version 2.0 (the "License");
638
+ // * you may not use this file except in compliance with the License.
639
+ // * You may obtain a copy of the License at
640
+ // *
641
+ // * http://www.apache.org/licenses/LICENSE-2.0
642
+ // *
643
+ // * Unless required by applicable law or agreed to in writing, software
644
+ // * distributed under the License is distributed on an "AS IS" BASIS,
645
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
646
+ // * See the License for the specific language governing permissions and
647
+ // * limitations under the License.
648
+ // * ========================================================= */
649
+ //
650
+ //
651
+ //!function( $ ){
652
+ //
653
+ // "use strict"
654
+ //
655
+ // /* MODAL CLASS DEFINITION
656
+ // * ====================== */
657
+ //
658
+ // var Modal = function ( content, options ) {
659
+ // this.options = options
660
+ // this.$element = $(content)
661
+ // .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
662
+ // }
663
+ //
664
+ // Modal.prototype = {
665
+ //
666
+ // constructor: Modal
667
+ //
668
+ // , toggle: function () {
669
+ // return this[!this.isShown ? 'show' : 'hide']()
670
+ // }
671
+ //
672
+ // , show: function () {
673
+ // var that = this
674
+ //
675
+ // if (this.isShown) return
676
+ //
677
+ // $('body').addClass('modal-open')
678
+ //
679
+ // this.isShown = true
680
+ // this.$element.trigger('show')
681
+ //
682
+ // escape.call(this)
683
+ // backdrop.call(this, function () {
684
+ // var transition = $.support.transition && that.$element.hasClass('fade')
685
+ //
686
+ // !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
687
+ //
688
+ // that.$element
689
+ // .show()
690
+ //
691
+ // if (transition) {
692
+ // that.$element[0].offsetWidth // force reflow
693
+ // }
694
+ //
695
+ // that.$element.addClass('in')
696
+ //
697
+ // transition ?
698
+ // that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
699
+ // that.$element.trigger('shown')
700
+ //
701
+ // })
702
+ // }
703
+ //
704
+ // , hide: function ( e ) {
705
+ // e && e.preventDefault()
706
+ //
707
+ // if (!this.isShown) return
708
+ //
709
+ // var that = this
710
+ // this.isShown = false
711
+ //
712
+ // $('body').removeClass('modal-open')
713
+ //
714
+ // escape.call(this)
715
+ //
716
+ // this.$element
717
+ // .trigger('hide')
718
+ // .removeClass('in')
719
+ //
720
+ // $.support.transition && this.$element.hasClass('fade') ?
721
+ // hideWithTransition.call(this) :
722
+ // hideModal.call(this)
723
+ // }
724
+ //
725
+ // }
726
+ //
727
+ //
728
+ // /* MODAL PRIVATE METHODS
729
+ // * ===================== */
730
+ //
731
+ // function hideWithTransition() {
732
+ // var that = this
733
+ // , timeout = setTimeout(function () {
734
+ // that.$element.off($.support.transition.end)
735
+ // hideModal.call(that)
736
+ // }, 500)
737
+ //
738
+ // this.$element.one($.support.transition.end, function () {
739
+ // clearTimeout(timeout)
740
+ // hideModal.call(that)
741
+ // })
742
+ // }
743
+ //
744
+ // function hideModal( that ) {
745
+ // this.$element
746
+ // .hide()
747
+ // .trigger('hidden')
748
+ //
749
+ // backdrop.call(this)
750
+ // }
751
+ //
752
+ // function backdrop( callback ) {
753
+ // var that = this
754
+ // , animate = this.$element.hasClass('fade') ? 'fade' : ''
755
+ //
756
+ // if (this.isShown && this.options.backdrop) {
757
+ // var doAnimate = $.support.transition && animate
758
+ //
759
+ // this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
760
+ // .appendTo(document.body)
761
+ //
762
+ // if (this.options.backdrop != 'static') {
763
+ // this.$backdrop.click($.proxy(this.hide, this))
764
+ // }
765
+ //
766
+ // if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
767
+ //
768
+ // this.$backdrop.addClass('in')
769
+ //
770
+ // doAnimate ?
771
+ // this.$backdrop.one($.support.transition.end, callback) :
772
+ // callback()
773
+ //
774
+ // } else if (!this.isShown && this.$backdrop) {
775
+ // this.$backdrop.removeClass('in')
776
+ //
777
+ // $.support.transition && this.$element.hasClass('fade')?
778
+ // this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
779
+ // removeBackdrop.call(this)
780
+ //
781
+ // } else if (callback) {
782
+ // callback()
783
+ // }
784
+ // }
785
+ //
786
+ // function removeBackdrop() {
787
+ // this.$backdrop.remove()
788
+ // this.$backdrop = null
789
+ // }
790
+ //
791
+ // function escape() {
792
+ // var that = this
793
+ // if (this.isShown && this.options.keyboard) {
794
+ // $(document).on('keyup.dismiss.modal', function ( e ) {
795
+ // e.which == 27 && that.hide()
796
+ // })
797
+ // } else if (!this.isShown) {
798
+ // $(document).off('keyup.dismiss.modal')
799
+ // }
800
+ // }
801
+ //
802
+ //
803
+ // /* MODAL PLUGIN DEFINITION
804
+ // * ======================= */
805
+ //
806
+ // $.fn.modal = function ( option ) {
807
+ // return this.each(function () {
808
+ // var $this = $(this)
809
+ // , data = $this.data('modal')
810
+ // , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
811
+ // if (!data) $this.data('modal', (data = new Modal(this, options)))
812
+ // if (typeof option == 'string') data[option]()
813
+ // else if (options.show) data.show()
814
+ // })
815
+ // }
816
+ //
817
+ // $.fn.modal.defaults = {
818
+ // backdrop: true
819
+ // , keyboard: true
820
+ // , show: true
821
+ // }
822
+ //
823
+ // $.fn.modal.Constructor = Modal
824
+ //
825
+ //
826
+ // /* MODAL DATA-API
827
+ // * ============== */
828
+ //
829
+ // $(function () {
830
+ // $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
831
+ // var $this = $(this), href
832
+ // , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
833
+ // , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
834
+ //
835
+ // e.preventDefault()
836
+ // $target.modal(option)
837
+ // })
838
+ // })
839
+ //
840
+ //}( window.jQuery );/* ===========================================================
841
+ // * bootstrap-tooltip.js v2.0.2
842
+ // * http://twitter.github.com/bootstrap/javascript.html#tooltips
843
+ // * Inspired by the original jQuery.tipsy by Jason Frame
844
+ // * ===========================================================
845
+ // * Copyright 2012 Twitter, Inc.
846
+ // *
847
+ // * Licensed under the Apache License, Version 2.0 (the "License");
848
+ // * you may not use this file except in compliance with the License.
849
+ // * You may obtain a copy of the License at
850
+ // *
851
+ // * http://www.apache.org/licenses/LICENSE-2.0
852
+ // *
853
+ // * Unless required by applicable law or agreed to in writing, software
854
+ // * distributed under the License is distributed on an "AS IS" BASIS,
855
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
856
+ // * See the License for the specific language governing permissions and
857
+ // * limitations under the License.
858
+ // * ========================================================== */
859
+ //
860
+ //!function( $ ) {
861
+ //
862
+ // "use strict"
863
+ //
864
+ // /* TOOLTIP PUBLIC CLASS DEFINITION
865
+ // * =============================== */
866
+ //
867
+ // var Tooltip = function ( element, options ) {
868
+ // this.init('tooltip', element, options)
869
+ // }
870
+ //
871
+ // Tooltip.prototype = {
872
+ //
873
+ // constructor: Tooltip
874
+ //
875
+ // , init: function ( type, element, options ) {
876
+ // var eventIn
877
+ // , eventOut
878
+ //
879
+ // this.type = type
880
+ // this.$element = $(element)
881
+ // this.options = this.getOptions(options)
882
+ // this.enabled = true
883
+ //
884
+ // if (this.options.trigger != 'manual') {
885
+ // eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
886
+ // eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
887
+ // this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
888
+ // this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
889
+ // }
890
+ //
891
+ // this.options.selector ?
892
+ // (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
893
+ // this.fixTitle()
894
+ // }
895
+ //
896
+ // , getOptions: function ( options ) {
897
+ // options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
898
+ //
899
+ // if (options.delay && typeof options.delay == 'number') {
900
+ // options.delay = {
901
+ // show: options.delay
902
+ // , hide: options.delay
903
+ // }
904
+ // }
905
+ //
906
+ // return options
907
+ // }
908
+ //
909
+ // , enter: function ( e ) {
910
+ // var self = $(e.currentTarget)[this.type](this._options).data(this.type)
911
+ //
912
+ // if (!self.options.delay || !self.options.delay.show) {
913
+ // self.show()
914
+ // } else {
915
+ // self.hoverState = 'in'
916
+ // setTimeout(function() {
917
+ // if (self.hoverState == 'in') {
918
+ // self.show()
919
+ // }
920
+ // }, self.options.delay.show)
921
+ // }
922
+ // }
923
+ //
924
+ // , leave: function ( e ) {
925
+ // var self = $(e.currentTarget)[this.type](this._options).data(this.type)
926
+ //
927
+ // if (!self.options.delay || !self.options.delay.hide) {
928
+ // self.hide()
929
+ // } else {
930
+ // self.hoverState = 'out'
931
+ // setTimeout(function() {
932
+ // if (self.hoverState == 'out') {
933
+ // self.hide()
934
+ // }
935
+ // }, self.options.delay.hide)
936
+ // }
937
+ // }
938
+ //
939
+ // , show: function () {
940
+ // var $tip
941
+ // , inside
942
+ // , pos
943
+ // , actualWidth
944
+ // , actualHeight
945
+ // , placement
946
+ // , tp
947
+ //
948
+ // if (this.hasContent() && this.enabled) {
949
+ // $tip = this.tip()
950
+ // this.setContent()
951
+ //
952
+ // if (this.options.animation) {
953
+ // $tip.addClass('fade')
954
+ // }
955
+ //
956
+ // placement = typeof this.options.placement == 'function' ?
957
+ // this.options.placement.call(this, $tip[0], this.$element[0]) :
958
+ // this.options.placement
959
+ //
960
+ // inside = /in/.test(placement)
961
+ //
962
+ // $tip
963
+ // .remove()
964
+ // .css({ top: 0, left: 0, display: 'block' })
965
+ // .appendTo(inside ? this.$element : document.body)
966
+ //
967
+ // pos = this.getPosition(inside)
968
+ //
969
+ // actualWidth = $tip[0].offsetWidth
970
+ // actualHeight = $tip[0].offsetHeight
971
+ //
972
+ // switch (inside ? placement.split(' ')[1] : placement) {
973
+ // case 'bottom':
974
+ // tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
975
+ // break
976
+ // case 'top':
977
+ // tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
978
+ // break
979
+ // case 'left':
980
+ // tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
981
+ // break
982
+ // case 'right':
983
+ // tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
984
+ // break
985
+ // }
986
+ //
987
+ // $tip
988
+ // .css(tp)
989
+ // .addClass(placement)
990
+ // .addClass('in')
991
+ // }
992
+ // }
993
+ //
994
+ // , setContent: function () {
995
+ // var $tip = this.tip()
996
+ // $tip.find('.tooltip-inner').html(this.getTitle())
997
+ // $tip.removeClass('fade in top bottom left right')
998
+ // }
999
+ //
1000
+ // , hide: function () {
1001
+ // var that = this
1002
+ // , $tip = this.tip()
1003
+ //
1004
+ // $tip.removeClass('in')
1005
+ //
1006
+ // function removeWithAnimation() {
1007
+ // var timeout = setTimeout(function () {
1008
+ // $tip.off($.support.transition.end).remove()
1009
+ // }, 500)
1010
+ //
1011
+ // $tip.one($.support.transition.end, function () {
1012
+ // clearTimeout(timeout)
1013
+ // $tip.remove()
1014
+ // })
1015
+ // }
1016
+ //
1017
+ // $.support.transition && this.$tip.hasClass('fade') ?
1018
+ // removeWithAnimation() :
1019
+ // $tip.remove()
1020
+ // }
1021
+ //
1022
+ // , fixTitle: function () {
1023
+ // var $e = this.$element
1024
+ // if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1025
+ // $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
1026
+ // }
1027
+ // }
1028
+ //
1029
+ // , hasContent: function () {
1030
+ // return this.getTitle()
1031
+ // }
1032
+ //
1033
+ // , getPosition: function (inside) {
1034
+ // return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
1035
+ // width: this.$element[0].offsetWidth
1036
+ // , height: this.$element[0].offsetHeight
1037
+ // })
1038
+ // }
1039
+ //
1040
+ // , getTitle: function () {
1041
+ // var title
1042
+ // , $e = this.$element
1043
+ // , o = this.options
1044
+ //
1045
+ // title = $e.attr('data-original-title')
1046
+ // || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1047
+ //
1048
+ // title = (title || '').toString().replace(/(^\s*|\s*$)/, "")
1049
+ //
1050
+ // return title
1051
+ // }
1052
+ //
1053
+ // , tip: function () {
1054
+ // return this.$tip = this.$tip || $(this.options.template)
1055
+ // }
1056
+ //
1057
+ // , validate: function () {
1058
+ // if (!this.$element[0].parentNode) {
1059
+ // this.hide()
1060
+ // this.$element = null
1061
+ // this.options = null
1062
+ // }
1063
+ // }
1064
+ //
1065
+ // , enable: function () {
1066
+ // this.enabled = true
1067
+ // }
1068
+ //
1069
+ // , disable: function () {
1070
+ // this.enabled = false
1071
+ // }
1072
+ //
1073
+ // , toggleEnabled: function () {
1074
+ // this.enabled = !this.enabled
1075
+ // }
1076
+ //
1077
+ // , toggle: function () {
1078
+ // this[this.tip().hasClass('in') ? 'hide' : 'show']()
1079
+ // }
1080
+ //
1081
+ // }
1082
+ //
1083
+ //
1084
+ // /* TOOLTIP PLUGIN DEFINITION
1085
+ // * ========================= */
1086
+ //
1087
+ // $.fn.tooltip = function ( option ) {
1088
+ // return this.each(function () {
1089
+ // var $this = $(this)
1090
+ // , data = $this.data('tooltip')
1091
+ // , options = typeof option == 'object' && option
1092
+ // if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1093
+ // if (typeof option == 'string') data[option]()
1094
+ // })
1095
+ // }
1096
+ //
1097
+ // $.fn.tooltip.Constructor = Tooltip
1098
+ //
1099
+ // $.fn.tooltip.defaults = {
1100
+ // animation: true
1101
+ // , delay: 0
1102
+ // , selector: false
1103
+ // , placement: 'top'
1104
+ // , trigger: 'hover'
1105
+ // , title: ''
1106
+ // , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1107
+ // }
1108
+ //
1109
+ //}( window.jQuery );/* ===========================================================
1110
+ // * bootstrap-popover.js v2.0.2
1111
+ // * http://twitter.github.com/bootstrap/javascript.html#popovers
1112
+ // * ===========================================================
1113
+ // * Copyright 2012 Twitter, Inc.
1114
+ // *
1115
+ // * Licensed under the Apache License, Version 2.0 (the "License");
1116
+ // * you may not use this file except in compliance with the License.
1117
+ // * You may obtain a copy of the License at
1118
+ // *
1119
+ // * http://www.apache.org/licenses/LICENSE-2.0
1120
+ // *
1121
+ // * Unless required by applicable law or agreed to in writing, software
1122
+ // * distributed under the License is distributed on an "AS IS" BASIS,
1123
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1124
+ // * See the License for the specific language governing permissions and
1125
+ // * limitations under the License.
1126
+ // * =========================================================== */
1127
+ //
1128
+ //
1129
+ //!function( $ ) {
1130
+ //
1131
+ // "use strict"
1132
+ //
1133
+ // var Popover = function ( element, options ) {
1134
+ // this.init('popover', element, options)
1135
+ // }
1136
+ //
1137
+ // /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1138
+ // ========================================== */
1139
+ //
1140
+ // Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1141
+ //
1142
+ // constructor: Popover
1143
+ //
1144
+ // , setContent: function () {
1145
+ // var $tip = this.tip()
1146
+ // , title = this.getTitle()
1147
+ // , content = this.getContent()
1148
+ //
1149
+ // $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
1150
+ // $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
1151
+ //
1152
+ // $tip.removeClass('fade top bottom left right in')
1153
+ // }
1154
+ //
1155
+ // , hasContent: function () {
1156
+ // return this.getTitle() || this.getContent()
1157
+ // }
1158
+ //
1159
+ // , getContent: function () {
1160
+ // var content
1161
+ // , $e = this.$element
1162
+ // , o = this.options
1163
+ //
1164
+ // content = $e.attr('data-content')
1165
+ // || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
1166
+ //
1167
+ // content = content.toString().replace(/(^\s*|\s*$)/, "")
1168
+ //
1169
+ // return content
1170
+ // }
1171
+ //
1172
+ // , tip: function() {
1173
+ // if (!this.$tip) {
1174
+ // this.$tip = $(this.options.template)
1175
+ // }
1176
+ // return this.$tip
1177
+ // }
1178
+ //
1179
+ // })
1180
+ //
1181
+ //
1182
+ // /* POPOVER PLUGIN DEFINITION
1183
+ // * ======================= */
1184
+ //
1185
+ // $.fn.popover = function ( option ) {
1186
+ // return this.each(function () {
1187
+ // var $this = $(this)
1188
+ // , data = $this.data('popover')
1189
+ // , options = typeof option == 'object' && option
1190
+ // if (!data) $this.data('popover', (data = new Popover(this, options)))
1191
+ // if (typeof option == 'string') data[option]()
1192
+ // })
1193
+ // }
1194
+ //
1195
+ // $.fn.popover.Constructor = Popover
1196
+ //
1197
+ // $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1198
+ // placement: 'right'
1199
+ // , content: ''
1200
+ // , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
1201
+ // })
1202
+ //
1203
+ //}( window.jQuery );/* =============================================================
1204
+ // * bootstrap-scrollspy.js v2.0.2
1205
+ // * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1206
+ // * =============================================================
1207
+ // * Copyright 2012 Twitter, Inc.
1208
+ // *
1209
+ // * Licensed under the Apache License, Version 2.0 (the "License");
1210
+ // * you may not use this file except in compliance with the License.
1211
+ // * You may obtain a copy of the License at
1212
+ // *
1213
+ // * http://www.apache.org/licenses/LICENSE-2.0
1214
+ // *
1215
+ // * Unless required by applicable law or agreed to in writing, software
1216
+ // * distributed under the License is distributed on an "AS IS" BASIS,
1217
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1218
+ // * See the License for the specific language governing permissions and
1219
+ // * limitations under the License.
1220
+ // * ============================================================== */
1221
+ //
1222
+ //!function ( $ ) {
1223
+ //
1224
+ // "use strict"
1225
+ //
1226
+ // /* SCROLLSPY CLASS DEFINITION
1227
+ // * ========================== */
1228
+ //
1229
+ // function ScrollSpy( element, options) {
1230
+ // var process = $.proxy(this.process, this)
1231
+ // , $element = $(element).is('body') ? $(window) : $(element)
1232
+ // , href
1233
+ // this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1234
+ // this.$scrollElement = $element.on('scroll.scroll.data-api', process)
1235
+ // this.selector = (this.options.target
1236
+ // || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1237
+ // || '') + ' .nav li > a'
1238
+ // this.$body = $('body').on('click.scroll.data-api', this.selector, process)
1239
+ // this.refresh()
1240
+ // this.process()
1241
+ // }
1242
+ //
1243
+ // ScrollSpy.prototype = {
1244
+ //
1245
+ // constructor: ScrollSpy
1246
+ //
1247
+ // , refresh: function () {
1248
+ // this.targets = this.$body
1249
+ // .find(this.selector)
1250
+ // .map(function () {
1251
+ // var href = $(this).attr('href')
1252
+ // return /^#\w/.test(href) && $(href).length ? href : null
1253
+ // })
1254
+ //
1255
+ // this.offsets = $.map(this.targets, function (id) {
1256
+ // return $(id).position().top
1257
+ // })
1258
+ // }
1259
+ //
1260
+ // , process: function () {
1261
+ // var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1262
+ // , offsets = this.offsets
1263
+ // , targets = this.targets
1264
+ // , activeTarget = this.activeTarget
1265
+ // , i
1266
+ //
1267
+ // for (i = offsets.length; i--;) {
1268
+ // activeTarget != targets[i]
1269
+ // && scrollTop >= offsets[i]
1270
+ // && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1271
+ // && this.activate( targets[i] )
1272
+ // }
1273
+ // }
1274
+ //
1275
+ // , activate: function (target) {
1276
+ // var active
1277
+ //
1278
+ // this.activeTarget = target
1279
+ //
1280
+ // this.$body
1281
+ // .find(this.selector).parent('.active')
1282
+ // .removeClass('active')
1283
+ //
1284
+ // active = this.$body
1285
+ // .find(this.selector + '[href="' + target + '"]')
1286
+ // .parent('li')
1287
+ // .addClass('active')
1288
+ //
1289
+ // if ( active.parent('.dropdown-menu') ) {
1290
+ // active.closest('li.dropdown').addClass('active')
1291
+ // }
1292
+ // }
1293
+ //
1294
+ // }
1295
+ //
1296
+ //
1297
+ // /* SCROLLSPY PLUGIN DEFINITION
1298
+ // * =========================== */
1299
+ //
1300
+ // $.fn.scrollspy = function ( option ) {
1301
+ // return this.each(function () {
1302
+ // var $this = $(this)
1303
+ // , data = $this.data('scrollspy')
1304
+ // , options = typeof option == 'object' && option
1305
+ // if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1306
+ // if (typeof option == 'string') data[option]()
1307
+ // })
1308
+ // }
1309
+ //
1310
+ // $.fn.scrollspy.Constructor = ScrollSpy
1311
+ //
1312
+ // $.fn.scrollspy.defaults = {
1313
+ // offset: 10
1314
+ // }
1315
+ //
1316
+ //
1317
+ // /* SCROLLSPY DATA-API
1318
+ // * ================== */
1319
+ //
1320
+ // $(function () {
1321
+ // $('[data-spy="scroll"]').each(function () {
1322
+ // var $spy = $(this)
1323
+ // $spy.scrollspy($spy.data())
1324
+ // })
1325
+ // })
1326
+ //
1327
+ //}( window.jQuery );/* ========================================================
1328
+ // * bootstrap-tab.js v2.0.2
1329
+ // * http://twitter.github.com/bootstrap/javascript.html#tabs
1330
+ // * ========================================================
1331
+ // * Copyright 2012 Twitter, Inc.
1332
+ // *
1333
+ // * Licensed under the Apache License, Version 2.0 (the "License");
1334
+ // * you may not use this file except in compliance with the License.
1335
+ // * You may obtain a copy of the License at
1336
+ // *
1337
+ // * http://www.apache.org/licenses/LICENSE-2.0
1338
+ // *
1339
+ // * Unless required by applicable law or agreed to in writing, software
1340
+ // * distributed under the License is distributed on an "AS IS" BASIS,
1341
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1342
+ // * See the License for the specific language governing permissions and
1343
+ // * limitations under the License.
1344
+ // * ======================================================== */
1345
+ //
1346
+ //
1347
+ //!function( $ ){
1348
+ //
1349
+ // "use strict"
1350
+ //
1351
+ // /* TAB CLASS DEFINITION
1352
+ // * ==================== */
1353
+ //
1354
+ // var Tab = function ( element ) {
1355
+ // this.element = $(element)
1356
+ // }
1357
+ //
1358
+ // Tab.prototype = {
1359
+ //
1360
+ // constructor: Tab
1361
+ //
1362
+ // , show: function () {
1363
+ // var $this = this.element
1364
+ // , $ul = $this.closest('ul:not(.dropdown-menu)')
1365
+ // , selector = $this.attr('data-target')
1366
+ // , previous
1367
+ // , $target
1368
+ //
1369
+ // if (!selector) {
1370
+ // selector = $this.attr('href')
1371
+ // selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1372
+ // }
1373
+ //
1374
+ // if ( $this.parent('li').hasClass('active') ) return
1375
+ //
1376
+ // previous = $ul.find('.active a').last()[0]
1377
+ //
1378
+ // $this.trigger({
1379
+ // type: 'show'
1380
+ // , relatedTarget: previous
1381
+ // })
1382
+ //
1383
+ // $target = $(selector)
1384
+ //
1385
+ // this.activate($this.parent('li'), $ul)
1386
+ // this.activate($target, $target.parent(), function () {
1387
+ // $this.trigger({
1388
+ // type: 'shown'
1389
+ // , relatedTarget: previous
1390
+ // })
1391
+ // })
1392
+ // }
1393
+ //
1394
+ // , activate: function ( element, container, callback) {
1395
+ // var $active = container.find('> .active')
1396
+ // , transition = callback
1397
+ // && $.support.transition
1398
+ // && $active.hasClass('fade')
1399
+ //
1400
+ // function next() {
1401
+ // $active
1402
+ // .removeClass('active')
1403
+ // .find('> .dropdown-menu > .active')
1404
+ // .removeClass('active')
1405
+ //
1406
+ // element.addClass('active')
1407
+ //
1408
+ // if (transition) {
1409
+ // element[0].offsetWidth // reflow for transition
1410
+ // element.addClass('in')
1411
+ // } else {
1412
+ // element.removeClass('fade')
1413
+ // }
1414
+ //
1415
+ // if ( element.parent('.dropdown-menu') ) {
1416
+ // element.closest('li.dropdown').addClass('active')
1417
+ // }
1418
+ //
1419
+ // callback && callback()
1420
+ // }
1421
+ //
1422
+ // transition ?
1423
+ // $active.one($.support.transition.end, next) :
1424
+ // next()
1425
+ //
1426
+ // $active.removeClass('in')
1427
+ // }
1428
+ // }
1429
+ //
1430
+ //
1431
+ // /* TAB PLUGIN DEFINITION
1432
+ // * ===================== */
1433
+ //
1434
+ // $.fn.tab = function ( option ) {
1435
+ // return this.each(function () {
1436
+ // var $this = $(this)
1437
+ // , data = $this.data('tab')
1438
+ // if (!data) $this.data('tab', (data = new Tab(this)))
1439
+ // if (typeof option == 'string') data[option]()
1440
+ // })
1441
+ // }
1442
+ //
1443
+ // $.fn.tab.Constructor = Tab
1444
+ //
1445
+ //
1446
+ // /* TAB DATA-API
1447
+ // * ============ */
1448
+ //
1449
+ // $(function () {
1450
+ // $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1451
+ // e.preventDefault()
1452
+ // $(this).tab('show')
1453
+ // })
1454
+ // })
1455
+ //
1456
+ //}( window.jQuery );/* =============================================================
1457
+ // * bootstrap-typeahead.js v2.0.2
1458
+ // * http://twitter.github.com/bootstrap/javascript.html#typeahead
1459
+ // * =============================================================
1460
+ // * Copyright 2012 Twitter, Inc.
1461
+ // *
1462
+ // * Licensed under the Apache License, Version 2.0 (the "License");
1463
+ // * you may not use this file except in compliance with the License.
1464
+ // * You may obtain a copy of the License at
1465
+ // *
1466
+ // * http://www.apache.org/licenses/LICENSE-2.0
1467
+ // *
1468
+ // * Unless required by applicable law or agreed to in writing, software
1469
+ // * distributed under the License is distributed on an "AS IS" BASIS,
1470
+ // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1471
+ // * See the License for the specific language governing permissions and
1472
+ // * limitations under the License.
1473
+ // * ============================================================ */
1474
+ //
1475
+ //!function( $ ){
1476
+ //
1477
+ // "use strict"
1478
+ //
1479
+ // var Typeahead = function ( element, options ) {
1480
+ // this.$element = $(element)
1481
+ // this.options = $.extend({}, $.fn.typeahead.defaults, options)
1482
+ // this.matcher = this.options.matcher || this.matcher
1483
+ // this.sorter = this.options.sorter || this.sorter
1484
+ // this.highlighter = this.options.highlighter || this.highlighter
1485
+ // this.$menu = $(this.options.menu).appendTo('body')
1486
+ // this.source = this.options.source
1487
+ // this.shown = false
1488
+ // this.listen()
1489
+ // }
1490
+ //
1491
+ // Typeahead.prototype = {
1492
+ //
1493
+ // constructor: Typeahead
1494
+ //
1495
+ // , select: function () {
1496
+ // var val = this.$menu.find('.active').attr('data-value')
1497
+ // this.$element.val(val)
1498
+ // this.$element.change();
1499
+ // return this.hide()
1500
+ // }
1501
+ //
1502
+ // , show: function () {
1503
+ // var pos = $.extend({}, this.$element.offset(), {
1504
+ // height: this.$element[0].offsetHeight
1505
+ // })
1506
+ //
1507
+ // this.$menu.css({
1508
+ // top: pos.top + pos.height
1509
+ // , left: pos.left
1510
+ // })
1511
+ //
1512
+ // this.$menu.show()
1513
+ // this.shown = true
1514
+ // return this
1515
+ // }
1516
+ //
1517
+ // , hide: function () {
1518
+ // this.$menu.hide()
1519
+ // this.shown = false
1520
+ // return this
1521
+ // }
1522
+ //
1523
+ // , lookup: function (event) {
1524
+ // var that = this
1525
+ // , items
1526
+ // , q
1527
+ //
1528
+ // this.query = this.$element.val()
1529
+ //
1530
+ // if (!this.query) {
1531
+ // return this.shown ? this.hide() : this
1532
+ // }
1533
+ //
1534
+ // items = $.grep(this.source, function (item) {
1535
+ // if (that.matcher(item)) return item
1536
+ // })
1537
+ //
1538
+ // items = this.sorter(items)
1539
+ //
1540
+ // if (!items.length) {
1541
+ // return this.shown ? this.hide() : this
1542
+ // }
1543
+ //
1544
+ // return this.render(items.slice(0, this.options.items)).show()
1545
+ // }
1546
+ //
1547
+ // , matcher: function (item) {
1548
+ // return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1549
+ // }
1550
+ //
1551
+ // , sorter: function (items) {
1552
+ // var beginswith = []
1553
+ // , caseSensitive = []
1554
+ // , caseInsensitive = []
1555
+ // , item
1556
+ //
1557
+ // while (item = items.shift()) {
1558
+ // if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1559
+ // else if (~item.indexOf(this.query)) caseSensitive.push(item)
1560
+ // else caseInsensitive.push(item)
1561
+ // }
1562
+ //
1563
+ // return beginswith.concat(caseSensitive, caseInsensitive)
1564
+ // }
1565
+ //
1566
+ // , highlighter: function (item) {
1567
+ // return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
1568
+ // return '<strong>' + match + '</strong>'
1569
+ // })
1570
+ // }
1571
+ //
1572
+ // , render: function (items) {
1573
+ // var that = this
1574
+ //
1575
+ // items = $(items).map(function (i, item) {
1576
+ // i = $(that.options.item).attr('data-value', item)
1577
+ // i.find('a').html(that.highlighter(item))
1578
+ // return i[0]
1579
+ // })
1580
+ //
1581
+ // items.first().addClass('active')
1582
+ // this.$menu.html(items)
1583
+ // return this
1584
+ // }
1585
+ //
1586
+ // , next: function (event) {
1587
+ // var active = this.$menu.find('.active').removeClass('active')
1588
+ // , next = active.next()
1589
+ //
1590
+ // if (!next.length) {
1591
+ // next = $(this.$menu.find('li')[0])
1592
+ // }
1593
+ //
1594
+ // next.addClass('active')
1595
+ // }
1596
+ //
1597
+ // , prev: function (event) {
1598
+ // var active = this.$menu.find('.active').removeClass('active')
1599
+ // , prev = active.prev()
1600
+ //
1601
+ // if (!prev.length) {
1602
+ // prev = this.$menu.find('li').last()
1603
+ // }
1604
+ //
1605
+ // prev.addClass('active')
1606
+ // }
1607
+ //
1608
+ // , listen: function () {
1609
+ // this.$element
1610
+ // .on('blur', $.proxy(this.blur, this))
1611
+ // .on('keypress', $.proxy(this.keypress, this))
1612
+ // .on('keyup', $.proxy(this.keyup, this))
1613
+ //
1614
+ // if ($.browser.webkit || $.browser.msie) {
1615
+ // this.$element.on('keydown', $.proxy(this.keypress, this))
1616
+ // }
1617
+ //
1618
+ // this.$menu
1619
+ // .on('click', $.proxy(this.click, this))
1620
+ // .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
1621
+ // }
1622
+ //
1623
+ // , keyup: function (e) {
1624
+ // switch(e.keyCode) {
1625
+ // case 40: // down arrow
1626
+ // case 38: // up arrow
1627
+ // break
1628
+ //
1629
+ // case 9: // tab
1630
+ // case 13: // enter
1631
+ // if (!this.shown) return
1632
+ // this.select()
1633
+ // break
1634
+ //
1635
+ // case 27: // escape
1636
+ // if (!this.shown) return
1637
+ // this.hide()
1638
+ // break
1639
+ //
1640
+ // default:
1641
+ // this.lookup()
1642
+ // }
1643
+ //
1644
+ // e.stopPropagation()
1645
+ // e.preventDefault()
1646
+ // }
1647
+ //
1648
+ // , keypress: function (e) {
1649
+ // if (!this.shown) return
1650
+ //
1651
+ // switch(e.keyCode) {
1652
+ // case 9: // tab
1653
+ // case 13: // enter
1654
+ // case 27: // escape
1655
+ // e.preventDefault()
1656
+ // break
1657
+ //
1658
+ // case 38: // up arrow
1659
+ // e.preventDefault()
1660
+ // this.prev()
1661
+ // break
1662
+ //
1663
+ // case 40: // down arrow
1664
+ // e.preventDefault()
1665
+ // this.next()
1666
+ // break
1667
+ // }
1668
+ //
1669
+ // e.stopPropagation()
1670
+ // }
1671
+ //
1672
+ // , blur: function (e) {
1673
+ // var that = this
1674
+ // setTimeout(function () { that.hide() }, 150)
1675
+ // }
1676
+ //
1677
+ // , click: function (e) {
1678
+ // e.stopPropagation()
1679
+ // e.preventDefault()
1680
+ // this.select()
1681
+ // }
1682
+ //
1683
+ // , mouseenter: function (e) {
1684
+ // this.$menu.find('.active').removeClass('active')
1685
+ // $(e.currentTarget).addClass('active')
1686
+ // }
1687
+ //
1688
+ // }
1689
+ //
1690
+ //
1691
+ // /* TYPEAHEAD PLUGIN DEFINITION
1692
+ // * =========================== */
1693
+ //
1694
+ // $.fn.typeahead = function ( option ) {
1695
+ // return this.each(function () {
1696
+ // var $this = $(this)
1697
+ // , data = $this.data('typeahead')
1698
+ // , options = typeof option == 'object' && option
1699
+ // if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
1700
+ // if (typeof option == 'string') data[option]()
1701
+ // })
1702
+ // }
1703
+ //
1704
+ // $.fn.typeahead.defaults = {
1705
+ // source: []
1706
+ // , items: 8
1707
+ // , menu: '<ul class="typeahead dropdown-menu"></ul>'
1708
+ // , item: '<li><a href="#"></a></li>'
1709
+ // }
1710
+ //
1711
+ // $.fn.typeahead.Constructor = Typeahead
1712
+ //
1713
+ //
1714
+ // /* TYPEAHEAD DATA-API
1715
+ // * ================== */
1716
+ //
1717
+ // $(function () {
1718
+ // $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
1719
+ // var $this = $(this)
1720
+ // if ($this.data('typeahead')) return
1721
+ // e.preventDefault()
1722
+ // $this.typeahead($this.data())
1723
+ // })
1724
+ // })
1725
+ //
1726
+ //}( window.jQuery );