roda-component 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (692) hide show
  1. checksums.yaml +4 -4
  2. data/.gems +3 -0
  3. data/.gitignore +2 -1
  4. data/.ruby-version +1 -1
  5. data/Gemfile +13 -0
  6. data/Makefile +18 -23
  7. data/Rakefile +0 -1
  8. data/lib/roda/component.rb +98 -44
  9. data/lib/roda/component/dom.rb +27 -17
  10. data/lib/roda/component/events.rb +58 -19
  11. data/lib/roda/component/faye.rb +131 -34
  12. data/lib/roda/component/form.rb +64 -0
  13. data/lib/roda/component/form/validations.rb +204 -0
  14. data/lib/roda/component/version.rb +1 -1
  15. data/lib/roda/plugins/component.rb +54 -24
  16. data/roda-component.gemspec +17 -7
  17. data/test/component_test.rb +20 -5
  18. data/test/dummy/.bowerrc +3 -0
  19. data/test/dummy/.sass-cache/00f9c07200bf85fc7effbdcbe3ee44551cdb2ce5/login.scssc +0 -0
  20. data/test/dummy/app.rb +99 -9
  21. data/test/dummy/bower.json +21 -0
  22. data/test/dummy/components/chat.rb +50 -0
  23. data/test/dummy/components/forms/login.rb +20 -0
  24. data/test/dummy/components/layout.rb +22 -2
  25. data/test/dummy/components/login.rb +123 -0
  26. data/test/dummy/components/theme.rb +89 -0
  27. data/test/dummy/config.ru +18 -0
  28. data/test/dummy/constants.rb +3 -0
  29. data/test/dummy/dummy.db +0 -0
  30. data/test/dummy/models/user.rb +20 -0
  31. data/test/dummy/public/AdminLTE-master/.gitignore +2 -0
  32. data/test/dummy/public/AdminLTE-master/LICENSE +20 -0
  33. data/test/dummy/public/AdminLTE-master/README.md +104 -0
  34. data/test/dummy/public/AdminLTE-master/ajax/dashboard-boxrefresh-demo.php +64 -0
  35. data/test/dummy/public/AdminLTE-master/composer.json +24 -0
  36. data/test/dummy/public/AdminLTE-master/css/AdminLTE.css +3539 -0
  37. data/test/dummy/public/AdminLTE-master/css/bootstrap-slider/slider.css +169 -0
  38. data/test/dummy/public/AdminLTE-master/css/bootstrap-wysihtml5/bootstrap3-wysihtml5.css +102 -0
  39. data/test/dummy/public/AdminLTE-master/css/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css +3 -0
  40. data/test/dummy/public/AdminLTE-master/css/colorpicker/bootstrap-colorpicker.css +214 -0
  41. data/test/dummy/public/AdminLTE-master/css/colorpicker/bootstrap-colorpicker.min.css +9 -0
  42. data/test/dummy/public/AdminLTE-master/css/datatables/dataTables.bootstrap.css +223 -0
  43. data/test/dummy/public/AdminLTE-master/css/datatables/images/sort_asc.png +0 -0
  44. data/test/dummy/public/AdminLTE-master/css/datatables/images/sort_asc_disabled.png +0 -0
  45. data/test/dummy/public/AdminLTE-master/css/datatables/images/sort_both.png +0 -0
  46. data/test/dummy/public/AdminLTE-master/css/datatables/images/sort_desc.png +0 -0
  47. data/test/dummy/public/AdminLTE-master/css/datatables/images/sort_desc_disabled.png +0 -0
  48. data/test/dummy/public/AdminLTE-master/css/datepicker/datepicker3.css +790 -0
  49. data/test/dummy/public/AdminLTE-master/css/daterangepicker/daterangepicker-bs3.css +245 -0
  50. data/test/dummy/public/AdminLTE-master/css/iCheck/all.css +61 -0
  51. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/_all.css +560 -0
  52. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/aero.css +56 -0
  53. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/aero.png +0 -0
  54. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/aero@2x.png +0 -0
  55. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/blue.css +56 -0
  56. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/blue.png +0 -0
  57. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/blue@2x.png +0 -0
  58. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/flat.css +56 -0
  59. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/flat.png +0 -0
  60. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/flat@2x.png +0 -0
  61. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/green.css +56 -0
  62. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/green.png +0 -0
  63. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/green@2x.png +0 -0
  64. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/grey.css +56 -0
  65. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/grey.png +0 -0
  66. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/grey@2x.png +0 -0
  67. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/orange.css +56 -0
  68. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/orange.png +0 -0
  69. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/orange@2x.png +0 -0
  70. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/pink.css +56 -0
  71. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/pink.png +0 -0
  72. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/pink@2x.png +0 -0
  73. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/purple.css +56 -0
  74. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/purple.png +0 -0
  75. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/purple@2x.png +0 -0
  76. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/red.css +56 -0
  77. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/red.png +0 -0
  78. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/red@2x.png +0 -0
  79. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/yellow.css +56 -0
  80. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/yellow.png +0 -0
  81. data/test/dummy/public/AdminLTE-master/css/iCheck/flat/yellow@2x.png +0 -0
  82. data/test/dummy/public/AdminLTE-master/css/iCheck/futurico/futurico.css +56 -0
  83. data/test/dummy/public/AdminLTE-master/css/iCheck/futurico/futurico.png +0 -0
  84. data/test/dummy/public/AdminLTE-master/css/iCheck/futurico/futurico@2x.png +0 -0
  85. data/test/dummy/public/AdminLTE-master/css/iCheck/line/_all.css +740 -0
  86. data/test/dummy/public/AdminLTE-master/css/iCheck/line/aero.css +74 -0
  87. data/test/dummy/public/AdminLTE-master/css/iCheck/line/blue.css +74 -0
  88. data/test/dummy/public/AdminLTE-master/css/iCheck/line/green.css +74 -0
  89. data/test/dummy/public/AdminLTE-master/css/iCheck/line/grey.css +74 -0
  90. data/test/dummy/public/AdminLTE-master/css/iCheck/line/line.css +74 -0
  91. data/test/dummy/public/AdminLTE-master/css/iCheck/line/line.png +0 -0
  92. data/test/dummy/public/AdminLTE-master/css/iCheck/line/line@2x.png +0 -0
  93. data/test/dummy/public/AdminLTE-master/css/iCheck/line/orange.css +74 -0
  94. data/test/dummy/public/AdminLTE-master/css/iCheck/line/pink.css +74 -0
  95. data/test/dummy/public/AdminLTE-master/css/iCheck/line/purple.css +74 -0
  96. data/test/dummy/public/AdminLTE-master/css/iCheck/line/red.css +74 -0
  97. data/test/dummy/public/AdminLTE-master/css/iCheck/line/yellow.css +74 -0
  98. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/_all.css +557 -0
  99. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/aero.css +62 -0
  100. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/aero.png +0 -0
  101. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/aero@2x.png +0 -0
  102. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/blue.css +62 -0
  103. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/blue.png +0 -0
  104. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/blue@2x.png +0 -0
  105. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/green.css +62 -0
  106. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/green.png +0 -0
  107. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/green@2x.png +0 -0
  108. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/grey.css +62 -0
  109. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/grey.png +0 -0
  110. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/grey@2x.png +0 -0
  111. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/minimal.css +62 -0
  112. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/minimal.png +0 -0
  113. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/minimal@2x.png +0 -0
  114. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/orange.css +62 -0
  115. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/orange.png +0 -0
  116. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/orange@2x.png +0 -0
  117. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/pink.css +62 -0
  118. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/pink.png +0 -0
  119. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/pink@2x.png +0 -0
  120. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/purple.css +62 -0
  121. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/purple.png +0 -0
  122. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/purple@2x.png +0 -0
  123. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/red.css +62 -0
  124. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/red.png +0 -0
  125. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/red@2x.png +0 -0
  126. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/yellow.css +62 -0
  127. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/yellow.png +0 -0
  128. data/test/dummy/public/AdminLTE-master/css/iCheck/minimal/yellow@2x.png +0 -0
  129. data/test/dummy/public/AdminLTE-master/css/iCheck/polaris/polaris.css +62 -0
  130. data/test/dummy/public/AdminLTE-master/css/iCheck/polaris/polaris.png +0 -0
  131. data/test/dummy/public/AdminLTE-master/css/iCheck/polaris/polaris@2x.png +0 -0
  132. data/test/dummy/public/AdminLTE-master/css/iCheck/square/_all.css +620 -0
  133. data/test/dummy/public/AdminLTE-master/css/iCheck/square/aero.css +62 -0
  134. data/test/dummy/public/AdminLTE-master/css/iCheck/square/aero.png +0 -0
  135. data/test/dummy/public/AdminLTE-master/css/iCheck/square/aero@2x.png +0 -0
  136. data/test/dummy/public/AdminLTE-master/css/iCheck/square/blue.css +62 -0
  137. data/test/dummy/public/AdminLTE-master/css/iCheck/square/blue.png +0 -0
  138. data/test/dummy/public/AdminLTE-master/css/iCheck/square/blue@2x.png +0 -0
  139. data/test/dummy/public/AdminLTE-master/css/iCheck/square/green.css +62 -0
  140. data/test/dummy/public/AdminLTE-master/css/iCheck/square/green.png +0 -0
  141. data/test/dummy/public/AdminLTE-master/css/iCheck/square/green@2x.png +0 -0
  142. data/test/dummy/public/AdminLTE-master/css/iCheck/square/grey.css +62 -0
  143. data/test/dummy/public/AdminLTE-master/css/iCheck/square/grey.png +0 -0
  144. data/test/dummy/public/AdminLTE-master/css/iCheck/square/grey@2x.png +0 -0
  145. data/test/dummy/public/AdminLTE-master/css/iCheck/square/orange.css +62 -0
  146. data/test/dummy/public/AdminLTE-master/css/iCheck/square/orange.png +0 -0
  147. data/test/dummy/public/AdminLTE-master/css/iCheck/square/orange@2x.png +0 -0
  148. data/test/dummy/public/AdminLTE-master/css/iCheck/square/pink.css +62 -0
  149. data/test/dummy/public/AdminLTE-master/css/iCheck/square/pink.png +0 -0
  150. data/test/dummy/public/AdminLTE-master/css/iCheck/square/pink@2x.png +0 -0
  151. data/test/dummy/public/AdminLTE-master/css/iCheck/square/purple.css +62 -0
  152. data/test/dummy/public/AdminLTE-master/css/iCheck/square/purple.png +0 -0
  153. data/test/dummy/public/AdminLTE-master/css/iCheck/square/purple@2x.png +0 -0
  154. data/test/dummy/public/AdminLTE-master/css/iCheck/square/red.css +62 -0
  155. data/test/dummy/public/AdminLTE-master/css/iCheck/square/red.png +0 -0
  156. data/test/dummy/public/AdminLTE-master/css/iCheck/square/red@2x.png +0 -0
  157. data/test/dummy/public/AdminLTE-master/css/iCheck/square/square.css +62 -0
  158. data/test/dummy/public/AdminLTE-master/css/iCheck/square/square.png +0 -0
  159. data/test/dummy/public/AdminLTE-master/css/iCheck/square/square@2x.png +0 -0
  160. data/test/dummy/public/AdminLTE-master/css/iCheck/square/yellow.css +62 -0
  161. data/test/dummy/public/AdminLTE-master/css/iCheck/square/yellow.png +0 -0
  162. data/test/dummy/public/AdminLTE-master/css/iCheck/square/yellow@2x.png +0 -0
  163. data/test/dummy/public/AdminLTE-master/css/images/animated-overlay.gif +0 -0
  164. data/test/dummy/public/AdminLTE-master/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  165. data/test/dummy/public/AdminLTE-master/css/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  166. data/test/dummy/public/AdminLTE-master/css/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  167. data/test/dummy/public/AdminLTE-master/css/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  168. data/test/dummy/public/AdminLTE-master/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  169. data/test/dummy/public/AdminLTE-master/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  170. data/test/dummy/public/AdminLTE-master/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  171. data/test/dummy/public/AdminLTE-master/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  172. data/test/dummy/public/AdminLTE-master/css/images/ui-icons_217bc0_256x240.png +0 -0
  173. data/test/dummy/public/AdminLTE-master/css/images/ui-icons_2e83ff_256x240.png +0 -0
  174. data/test/dummy/public/AdminLTE-master/css/images/ui-icons_469bdd_256x240.png +0 -0
  175. data/test/dummy/public/AdminLTE-master/css/images/ui-icons_6da8d5_256x240.png +0 -0
  176. data/test/dummy/public/AdminLTE-master/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  177. data/test/dummy/public/AdminLTE-master/css/images/ui-icons_d8e7f3_256x240.png +0 -0
  178. data/test/dummy/public/AdminLTE-master/css/images/ui-icons_f9bd01_256x240.png +0 -0
  179. data/test/dummy/public/AdminLTE-master/css/ionslider/ion.rangeSlider.css +126 -0
  180. data/test/dummy/public/AdminLTE-master/css/ionslider/ion.rangeSlider.skinFlat.css +89 -0
  181. data/test/dummy/public/AdminLTE-master/css/ionslider/ion.rangeSlider.skinNice.css +85 -0
  182. data/test/dummy/public/AdminLTE-master/css/jvectormap/jquery-jvectormap-1.2.2.css +36 -0
  183. data/test/dummy/public/AdminLTE-master/css/morris/morris.css +2 -0
  184. data/test/dummy/public/AdminLTE-master/css/timepicker/bootstrap-timepicker.css +121 -0
  185. data/test/dummy/public/AdminLTE-master/css/timepicker/bootstrap-timepicker.min.css +10 -0
  186. data/test/dummy/public/AdminLTE-master/empty.html +417 -0
  187. data/test/dummy/public/AdminLTE-master/fonts/glyphicons-halflings-regular.eot +0 -0
  188. data/test/dummy/public/AdminLTE-master/fonts/glyphicons-halflings-regular.svg +229 -0
  189. data/test/dummy/public/AdminLTE-master/fonts/glyphicons-halflings-regular.ttf +0 -0
  190. data/test/dummy/public/AdminLTE-master/fonts/glyphicons-halflings-regular.woff +0 -0
  191. data/test/dummy/public/AdminLTE-master/img/ajax-loader.gif +0 -0
  192. data/test/dummy/public/AdminLTE-master/img/ajax-loader1.gif +0 -0
  193. data/test/dummy/public/AdminLTE-master/img/avatar.png +0 -0
  194. data/test/dummy/public/AdminLTE-master/img/avatar04.png +0 -0
  195. data/test/dummy/public/AdminLTE-master/img/avatar2.png +0 -0
  196. data/test/dummy/public/AdminLTE-master/img/avatar3.png +0 -0
  197. data/test/dummy/public/AdminLTE-master/img/avatar5.png +0 -0
  198. data/test/dummy/public/AdminLTE-master/img/blur-background04.jpg +0 -0
  199. data/test/dummy/public/AdminLTE-master/img/blur-background08.jpg +0 -0
  200. data/test/dummy/public/AdminLTE-master/img/blur-background09.jpg +0 -0
  201. data/test/dummy/public/AdminLTE-master/img/bootstrap-colorpicker/alpha-horizontal.png +0 -0
  202. data/test/dummy/public/AdminLTE-master/img/bootstrap-colorpicker/alpha.png +0 -0
  203. data/test/dummy/public/AdminLTE-master/img/bootstrap-colorpicker/hue-horizontal.png +0 -0
  204. data/test/dummy/public/AdminLTE-master/img/bootstrap-colorpicker/hue.png +0 -0
  205. data/test/dummy/public/AdminLTE-master/img/bootstrap-colorpicker/saturation.png +0 -0
  206. data/test/dummy/public/AdminLTE-master/img/credit/american-express.png +0 -0
  207. data/test/dummy/public/AdminLTE-master/img/credit/cirrus.png +0 -0
  208. data/test/dummy/public/AdminLTE-master/img/credit/mastercard.png +0 -0
  209. data/test/dummy/public/AdminLTE-master/img/credit/mestro.png +0 -0
  210. data/test/dummy/public/AdminLTE-master/img/credit/paypal.png +0 -0
  211. data/test/dummy/public/AdminLTE-master/img/credit/paypal2.png +0 -0
  212. data/test/dummy/public/AdminLTE-master/img/credit/visa.png +0 -0
  213. data/test/dummy/public/AdminLTE-master/img/icons.png +0 -0
  214. data/test/dummy/public/AdminLTE-master/img/sprite-skin-flat.png +0 -0
  215. data/test/dummy/public/AdminLTE-master/img/sprite-skin-nice.png +0 -0
  216. data/test/dummy/public/AdminLTE-master/img/user-bg.png +0 -0
  217. data/test/dummy/public/AdminLTE-master/img/user.jpg +0 -0
  218. data/test/dummy/public/AdminLTE-master/img/user2.jpg +0 -0
  219. data/test/dummy/public/AdminLTE-master/index.html +900 -0
  220. data/test/dummy/public/AdminLTE-master/js/AdminLTE/app.js +1054 -0
  221. data/test/dummy/public/AdminLTE-master/js/AdminLTE/dashboard.js +252 -0
  222. data/test/dummy/public/AdminLTE-master/js/AdminLTE/demo.js +81 -0
  223. data/test/dummy/public/AdminLTE-master/js/plugins/bootstrap-slider/bootstrap-slider.js +1167 -0
  224. data/test/dummy/public/AdminLTE-master/js/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js +6 -0
  225. data/test/dummy/public/AdminLTE-master/js/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.js +350 -0
  226. data/test/dummy/public/AdminLTE-master/js/plugins/colorpicker/bootstrap-colorpicker.js +949 -0
  227. data/test/dummy/public/AdminLTE-master/js/plugins/colorpicker/bootstrap-colorpicker.min.js +1 -0
  228. data/test/dummy/public/AdminLTE-master/js/plugins/datatables/dataTables.bootstrap.js +250 -0
  229. data/test/dummy/public/AdminLTE-master/js/plugins/datatables/jquery.dataTables.js +12099 -0
  230. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/bootstrap-datepicker.js +1671 -0
  231. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.ar.js +15 -0
  232. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.az.js +12 -0
  233. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.bg.js +14 -0
  234. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.ca.js +14 -0
  235. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.cs.js +15 -0
  236. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.cy.js +14 -0
  237. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.da.js +15 -0
  238. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.de.js +17 -0
  239. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.el.js +13 -0
  240. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.es.js +14 -0
  241. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.et.js +18 -0
  242. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.fa.js +17 -0
  243. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.fi.js +16 -0
  244. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.fr.js +17 -0
  245. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.gl.js +11 -0
  246. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.he.js +15 -0
  247. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.hr.js +13 -0
  248. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.hu.js +16 -0
  249. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.id.js +15 -0
  250. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.is.js +14 -0
  251. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.it.js +17 -0
  252. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.ja.js +15 -0
  253. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.ka.js +17 -0
  254. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.kk.js +15 -0
  255. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.kr.js +13 -0
  256. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.lt.js +16 -0
  257. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.lv.js +16 -0
  258. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.mk.js +15 -0
  259. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.ms.js +14 -0
  260. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.nb.js +14 -0
  261. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.nl-BE.js +17 -0
  262. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.nl.js +14 -0
  263. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.no.js +16 -0
  264. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.pl.js +15 -0
  265. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.pt-BR.js +15 -0
  266. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.pt.js +16 -0
  267. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.ro.js +16 -0
  268. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.rs-latin.js +14 -0
  269. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.rs.js +14 -0
  270. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.ru.js +15 -0
  271. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.sk.js +15 -0
  272. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.sl.js +14 -0
  273. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.sq.js +15 -0
  274. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.sv.js +16 -0
  275. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.sw.js +15 -0
  276. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.th.js +14 -0
  277. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.tr.js +16 -0
  278. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.ua.js +15 -0
  279. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.vi.js +16 -0
  280. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js +16 -0
  281. data/test/dummy/public/AdminLTE-master/js/plugins/datepicker/locales/bootstrap-datepicker.zh-TW.js +17 -0
  282. data/test/dummy/public/AdminLTE-master/js/plugins/daterangepicker/daterangepicker.js +883 -0
  283. data/test/dummy/public/AdminLTE-master/js/plugins/flot/excanvas.js +1428 -0
  284. data/test/dummy/public/AdminLTE-master/js/plugins/flot/excanvas.min.js +1 -0
  285. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.colorhelpers.js +180 -0
  286. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.colorhelpers.min.js +1 -0
  287. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.canvas.js +345 -0
  288. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.canvas.min.js +1 -0
  289. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.categories.js +190 -0
  290. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.categories.min.js +1 -0
  291. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.crosshair.js +176 -0
  292. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.crosshair.min.js +1 -0
  293. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.errorbars.js +353 -0
  294. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.errorbars.min.js +1 -0
  295. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.fillbetween.js +226 -0
  296. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.fillbetween.min.js +1 -0
  297. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.image.js +241 -0
  298. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.image.min.js +1 -0
  299. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.js +3137 -0
  300. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.min.js +2 -0
  301. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.navigate.js +346 -0
  302. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.navigate.min.js +1 -0
  303. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.pie.js +817 -0
  304. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.pie.min.js +1 -0
  305. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.resize.js +60 -0
  306. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.resize.min.js +1 -0
  307. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.selection.js +360 -0
  308. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.selection.min.js +1 -0
  309. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.stack.js +188 -0
  310. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.stack.min.js +1 -0
  311. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.symbol.js +71 -0
  312. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.symbol.min.js +1 -0
  313. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.threshold.js +142 -0
  314. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.threshold.min.js +1 -0
  315. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.time.js +431 -0
  316. data/test/dummy/public/AdminLTE-master/js/plugins/flot/jquery.flot.time.min.js +1 -0
  317. data/test/dummy/public/AdminLTE-master/js/plugins/iCheck/icheck.js +506 -0
  318. data/test/dummy/public/AdminLTE-master/js/plugins/iCheck/icheck.min.js +10 -0
  319. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/jquery.inputmask.date.extensions.js +488 -0
  320. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/jquery.inputmask.extensions.js +122 -0
  321. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/jquery.inputmask.js +1632 -0
  322. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/jquery.inputmask.numeric.extensions.js +177 -0
  323. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/jquery.inputmask.phone.extensions.js +50 -0
  324. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/jquery.inputmask.regex.extensions.js +170 -0
  325. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/phone-codes/phone-be.json +45 -0
  326. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/phone-codes/phone-codes.json +294 -0
  327. data/test/dummy/public/AdminLTE-master/js/plugins/input-mask/phone-codes/readme.txt +1 -0
  328. data/test/dummy/public/AdminLTE-master/js/plugins/ionslider/ion.rangeSlider.min.js +22 -0
  329. data/test/dummy/public/AdminLTE-master/js/plugins/jqueryKnob/jquery.knob.js +764 -0
  330. data/test/dummy/public/AdminLTE-master/js/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js +8 -0
  331. data/test/dummy/public/AdminLTE-master/js/plugins/jvectormap/jquery-jvectormap-world-mill-en.js +1 -0
  332. data/test/dummy/public/AdminLTE-master/js/plugins/misc/html5shiv.js +8 -0
  333. data/test/dummy/public/AdminLTE-master/js/plugins/misc/jquery.ba-resize.min.js +9 -0
  334. data/test/dummy/public/AdminLTE-master/js/plugins/misc/jquery.placeholder.js +187 -0
  335. data/test/dummy/public/AdminLTE-master/js/plugins/misc/modernizr.min.js +4 -0
  336. data/test/dummy/public/AdminLTE-master/js/plugins/misc/respond.min.js +1 -0
  337. data/test/dummy/public/AdminLTE-master/js/plugins/morris/morris.js +1888 -0
  338. data/test/dummy/public/AdminLTE-master/js/plugins/morris/morris.min.js +2 -0
  339. data/test/dummy/public/AdminLTE-master/js/plugins/slimScroll/jquery.slimscroll.js +464 -0
  340. data/test/dummy/public/AdminLTE-master/js/plugins/slimScroll/jquery.slimscroll.min.js +16 -0
  341. data/test/dummy/public/AdminLTE-master/js/plugins/slimScroll/slimScroll.jquery.json +30 -0
  342. data/test/dummy/public/AdminLTE-master/js/plugins/sparkline/jquery.sparkline.js +3054 -0
  343. data/test/dummy/public/AdminLTE-master/js/plugins/sparkline/jquery.sparkline.min.js +5 -0
  344. data/test/dummy/public/AdminLTE-master/js/plugins/timepicker/bootstrap-timepicker.js +903 -0
  345. data/test/dummy/public/AdminLTE-master/js/plugins/timepicker/bootstrap-timepicker.min.js +5 -0
  346. data/test/dummy/public/AdminLTE-master/less/404_500_errors.less +38 -0
  347. data/test/dummy/public/AdminLTE-master/less/AdminLTE.less +49 -0
  348. data/test/dummy/public/AdminLTE-master/less/alerts.less +25 -0
  349. data/test/dummy/public/AdminLTE-master/less/bootstrap-social.less +167 -0
  350. data/test/dummy/public/AdminLTE-master/less/boxes.less +396 -0
  351. data/test/dummy/public/AdminLTE-master/less/buttons.less +179 -0
  352. data/test/dummy/public/AdminLTE-master/less/callout.less +49 -0
  353. data/test/dummy/public/AdminLTE-master/less/core.less +422 -0
  354. data/test/dummy/public/AdminLTE-master/less/dropdown.less +392 -0
  355. data/test/dummy/public/AdminLTE-master/less/forms.less +73 -0
  356. data/test/dummy/public/AdminLTE-master/less/header.less +191 -0
  357. data/test/dummy/public/AdminLTE-master/less/iCheck.less +70 -0
  358. data/test/dummy/public/AdminLTE-master/less/invoice.less +38 -0
  359. data/test/dummy/public/AdminLTE-master/less/lockscreen.less +86 -0
  360. data/test/dummy/public/AdminLTE-master/less/login_and_register.less +42 -0
  361. data/test/dummy/public/AdminLTE-master/less/mailbox.less +64 -0
  362. data/test/dummy/public/AdminLTE-master/less/mixins.less +166 -0
  363. data/test/dummy/public/AdminLTE-master/less/navs.less +161 -0
  364. data/test/dummy/public/AdminLTE-master/less/pace.less +17 -0
  365. data/test/dummy/public/AdminLTE-master/less/progress-bars.less +62 -0
  366. data/test/dummy/public/AdminLTE-master/less/sidebar.less +135 -0
  367. data/test/dummy/public/AdminLTE-master/less/skins.less +232 -0
  368. data/test/dummy/public/AdminLTE-master/less/small-box.less +122 -0
  369. data/test/dummy/public/AdminLTE-master/less/timeline.less +101 -0
  370. data/test/dummy/public/AdminLTE-master/less/vars.less +64 -0
  371. data/test/dummy/public/AdminLTE-master/pages/UI/buttons.html +1270 -0
  372. data/test/dummy/public/AdminLTE-master/pages/UI/empty.html +415 -0
  373. data/test/dummy/public/AdminLTE-master/pages/UI/general.html +985 -0
  374. data/test/dummy/public/AdminLTE-master/pages/UI/icons.html +2176 -0
  375. data/test/dummy/public/AdminLTE-master/pages/UI/jquery-ui.html +539 -0
  376. data/test/dummy/public/AdminLTE-master/pages/UI/sliders.html +562 -0
  377. data/test/dummy/public/AdminLTE-master/pages/UI/timeline.html +564 -0
  378. data/test/dummy/public/AdminLTE-master/pages/calendar.html +643 -0
  379. data/test/dummy/public/AdminLTE-master/pages/charts/empty.html +415 -0
  380. data/test/dummy/public/AdminLTE-master/pages/charts/flot.html +763 -0
  381. data/test/dummy/public/AdminLTE-master/pages/charts/inline.html +888 -0
  382. data/test/dummy/public/AdminLTE-master/pages/charts/morris.html +554 -0
  383. data/test/dummy/public/AdminLTE-master/pages/empty.html +445 -0
  384. data/test/dummy/public/AdminLTE-master/pages/examples/404.html +433 -0
  385. data/test/dummy/public/AdminLTE-master/pages/examples/500.html +433 -0
  386. data/test/dummy/public/AdminLTE-master/pages/examples/blank.html +416 -0
  387. data/test/dummy/public/AdminLTE-master/pages/examples/invoice.html +553 -0
  388. data/test/dummy/public/AdminLTE-master/pages/examples/lockscreen.html +114 -0
  389. data/test/dummy/public/AdminLTE-master/pages/examples/login.html +58 -0
  390. data/test/dummy/public/AdminLTE-master/pages/examples/register.html +60 -0
  391. data/test/dummy/public/AdminLTE-master/pages/forms/advanced.html +742 -0
  392. data/test/dummy/public/AdminLTE-master/pages/forms/editors.html +472 -0
  393. data/test/dummy/public/AdminLTE-master/pages/forms/empty.html +415 -0
  394. data/test/dummy/public/AdminLTE-master/pages/forms/general.html +714 -0
  395. data/test/dummy/public/AdminLTE-master/pages/mailbox.html +671 -0
  396. data/test/dummy/public/AdminLTE-master/pages/tables/data.html +1304 -0
  397. data/test/dummy/public/AdminLTE-master/pages/tables/empty.html +414 -0
  398. data/test/dummy/public/AdminLTE-master/pages/tables/simple.html +716 -0
  399. data/test/dummy/public/AdminLTE-master/pages/widgets.html +1028 -0
  400. data/test/dummy/public/chat/bower/font-awesome/.bower.json +37 -0
  401. data/test/dummy/public/chat/bower/font-awesome/.gitignore +32 -0
  402. data/test/dummy/public/chat/bower/font-awesome/.npmignore +42 -0
  403. data/test/dummy/public/chat/bower/font-awesome/bower.json +23 -0
  404. data/test/dummy/public/chat/bower/font-awesome/css/font-awesome.css +1672 -0
  405. data/test/dummy/public/chat/bower/font-awesome/css/font-awesome.min.css +4 -0
  406. data/test/dummy/public/chat/bower/font-awesome/fonts/FontAwesome.otf +0 -0
  407. data/test/dummy/public/chat/bower/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  408. data/test/dummy/public/chat/bower/font-awesome/fonts/fontawesome-webfont.svg +520 -0
  409. data/test/dummy/public/chat/bower/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  410. data/test/dummy/public/chat/bower/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  411. data/test/dummy/public/chat/bower/font-awesome/less/bordered-pulled.less +16 -0
  412. data/test/dummy/public/chat/bower/font-awesome/less/core.less +11 -0
  413. data/test/dummy/public/chat/bower/font-awesome/less/extras.less +2 -0
  414. data/test/dummy/public/chat/bower/font-awesome/less/fixed-width.less +6 -0
  415. data/test/dummy/public/chat/bower/font-awesome/less/font-awesome.less +17 -0
  416. data/test/dummy/public/chat/bower/font-awesome/less/icons.less +552 -0
  417. data/test/dummy/public/chat/bower/font-awesome/less/larger.less +13 -0
  418. data/test/dummy/public/chat/bower/font-awesome/less/list.less +19 -0
  419. data/test/dummy/public/chat/bower/font-awesome/less/mixins.less +25 -0
  420. data/test/dummy/public/chat/bower/font-awesome/less/path.less +14 -0
  421. data/test/dummy/public/chat/bower/font-awesome/less/rotated-flipped.less +20 -0
  422. data/test/dummy/public/chat/bower/font-awesome/less/spinning.less +29 -0
  423. data/test/dummy/public/chat/bower/font-awesome/less/stacked.less +20 -0
  424. data/test/dummy/public/chat/bower/font-awesome/less/variables.less +561 -0
  425. data/test/dummy/public/chat/bower/font-awesome/scss/_bordered-pulled.scss +16 -0
  426. data/test/dummy/public/chat/bower/font-awesome/scss/_core.scss +11 -0
  427. data/test/dummy/public/chat/bower/font-awesome/scss/_extras.scss +44 -0
  428. data/test/dummy/public/chat/bower/font-awesome/scss/_fixed-width.scss +6 -0
  429. data/test/dummy/public/chat/bower/font-awesome/scss/_icons.scss +552 -0
  430. data/test/dummy/public/chat/bower/font-awesome/scss/_larger.scss +13 -0
  431. data/test/dummy/public/chat/bower/font-awesome/scss/_list.scss +19 -0
  432. data/test/dummy/public/chat/bower/font-awesome/scss/_mixins.scss +25 -0
  433. data/test/dummy/public/chat/bower/font-awesome/scss/_path.scss +14 -0
  434. data/test/dummy/public/chat/bower/font-awesome/scss/_rotated-flipped.scss +20 -0
  435. data/test/dummy/public/chat/bower/font-awesome/scss/_spinning.scss +29 -0
  436. data/test/dummy/public/chat/bower/font-awesome/scss/_stacked.scss +20 -0
  437. data/test/dummy/public/chat/bower/font-awesome/scss/_variables.scss +561 -0
  438. data/test/dummy/public/chat/bower/font-awesome/scss/font-awesome.scss +17 -0
  439. data/test/dummy/public/chat/bower/jScrollPane/.bower.json +33 -0
  440. data/test/dummy/public/chat/bower/jScrollPane/.gitignore +2 -0
  441. data/test/dummy/public/chat/bower/jScrollPane/.gitmodules +3 -0
  442. data/test/dummy/public/chat/bower/jScrollPane/GPL-LICENSE.txt +278 -0
  443. data/test/dummy/public/chat/bower/jScrollPane/MIT-LICENSE.txt +19 -0
  444. data/test/dummy/public/chat/bower/jScrollPane/README.md +23 -0
  445. data/test/dummy/public/chat/bower/jScrollPane/ajax.html +151 -0
  446. data/test/dummy/public/chat/bower/jScrollPane/ajax_content.html +73 -0
  447. data/test/dummy/public/chat/bower/jScrollPane/anchors.html +140 -0
  448. data/test/dummy/public/chat/bower/jScrollPane/api.html +190 -0
  449. data/test/dummy/public/chat/bower/jScrollPane/arrow_hover.html +208 -0
  450. data/test/dummy/public/chat/bower/jScrollPane/arrow_positions.html +634 -0
  451. data/test/dummy/public/chat/bower/jScrollPane/arrows.html +203 -0
  452. data/test/dummy/public/chat/bower/jScrollPane/auto_reinitialise.html +98 -0
  453. data/test/dummy/public/chat/bower/jScrollPane/basic.html +204 -0
  454. data/test/dummy/public/chat/bower/jScrollPane/bower.json +22 -0
  455. data/test/dummy/public/chat/bower/jScrollPane/build/.gitignore +1 -0
  456. data/test/dummy/public/chat/bower/jScrollPane/build/Gruntfile.js +49 -0
  457. data/test/dummy/public/chat/bower/jScrollPane/build/package.json +30 -0
  458. data/test/dummy/public/chat/bower/jScrollPane/caps.html +236 -0
  459. data/test/dummy/public/chat/bower/jScrollPane/changelog.html +66 -0
  460. data/test/dummy/public/chat/bower/jScrollPane/destroy.html +237 -0
  461. data/test/dummy/public/chat/bower/jScrollPane/drag_size.html +206 -0
  462. data/test/dummy/public/chat/bower/jScrollPane/dynamic_content.html +95 -0
  463. data/test/dummy/public/chat/bower/jScrollPane/dynamic_height.html +207 -0
  464. data/test/dummy/public/chat/bower/jScrollPane/dynamic_width.html +368 -0
  465. data/test/dummy/public/chat/bower/jScrollPane/events.html +264 -0
  466. data/test/dummy/public/chat/bower/jScrollPane/faqs.html +52 -0
  467. data/test/dummy/public/chat/bower/jScrollPane/fixed_width.html +230 -0
  468. data/test/dummy/public/chat/bower/jScrollPane/focus.html +207 -0
  469. data/test/dummy/public/chat/bower/jScrollPane/fullpage_scroll.html +259 -0
  470. data/test/dummy/public/chat/bower/jScrollPane/iframe.html +79 -0
  471. data/test/dummy/public/chat/bower/jScrollPane/iframe2.html +121 -0
  472. data/test/dummy/public/chat/bower/jScrollPane/iframe_content1.html +143 -0
  473. data/test/dummy/public/chat/bower/jScrollPane/iframe_content2.html +143 -0
  474. data/test/dummy/public/chat/bower/jScrollPane/iframe_content3.html +76 -0
  475. data/test/dummy/public/chat/bower/jScrollPane/iframe_content4.html +76 -0
  476. data/test/dummy/public/chat/bower/jScrollPane/image.html +96 -0
  477. data/test/dummy/public/chat/bower/jScrollPane/image/logo.png +0 -0
  478. data/test/dummy/public/chat/bower/jScrollPane/image2.html +98 -0
  479. data/test/dummy/public/chat/bower/jScrollPane/index.html +319 -0
  480. data/test/dummy/public/chat/bower/jScrollPane/invisibles.html +523 -0
  481. data/test/dummy/public/chat/bower/jScrollPane/issues/11/after.html +45 -0
  482. data/test/dummy/public/chat/bower/jScrollPane/issues/11/before.html +45 -0
  483. data/test/dummy/public/chat/bower/jScrollPane/issues/11/brs_main.css +301 -0
  484. data/test/dummy/public/chat/bower/jScrollPane/issues/11/index.html +53 -0
  485. data/test/dummy/public/chat/bower/jScrollPane/issues/11/jquery.mousewheel.js +79 -0
  486. data/test/dummy/public/chat/bower/jScrollPane/issues/11/jscrollpane-2b3.css +143 -0
  487. data/test/dummy/public/chat/bower/jScrollPane/issues/11/jscrollpane-2b3.js +1063 -0
  488. data/test/dummy/public/chat/bower/jScrollPane/issues/11/native.html +42 -0
  489. data/test/dummy/public/chat/bower/jScrollPane/issues/12/after.html +80 -0
  490. data/test/dummy/public/chat/bower/jScrollPane/issues/12/after_reinit.html +73 -0
  491. data/test/dummy/public/chat/bower/jScrollPane/issues/12/before.html +72 -0
  492. data/test/dummy/public/chat/bower/jScrollPane/issues/12/before_reinit.html +73 -0
  493. data/test/dummy/public/chat/bower/jScrollPane/issues/12/brs_main.css +301 -0
  494. data/test/dummy/public/chat/bower/jScrollPane/issues/12/index.html +53 -0
  495. data/test/dummy/public/chat/bower/jScrollPane/issues/12/jquery.mousewheel.js +79 -0
  496. data/test/dummy/public/chat/bower/jScrollPane/issues/12/jscrollpane-2b3.css +143 -0
  497. data/test/dummy/public/chat/bower/jScrollPane/issues/12/jscrollpane-2b3.js +1063 -0
  498. data/test/dummy/public/chat/bower/jScrollPane/issues/12/native.html +69 -0
  499. data/test/dummy/public/chat/bower/jScrollPane/issues/12/wrapped.html +87 -0
  500. data/test/dummy/public/chat/bower/jScrollPane/issues/7/after.html +190 -0
  501. data/test/dummy/public/chat/bower/jScrollPane/issues/7/before.html +190 -0
  502. data/test/dummy/public/chat/bower/jScrollPane/issues/7/index.html +53 -0
  503. data/test/dummy/public/chat/bower/jScrollPane/issues/7/jscrollpane-2b1.css +120 -0
  504. data/test/dummy/public/chat/bower/jScrollPane/issues/7/jscrollpane-2b2.js +947 -0
  505. data/test/dummy/public/chat/bower/jScrollPane/issues/7/native.html +171 -0
  506. data/test/dummy/public/chat/bower/jScrollPane/known_issues.html +62 -0
  507. data/test/dummy/public/chat/bower/jScrollPane/less_basic.html +164 -0
  508. data/test/dummy/public/chat/bower/jScrollPane/mwheel_intent.html +209 -0
  509. data/test/dummy/public/chat/bower/jScrollPane/override_animate.html +215 -0
  510. data/test/dummy/public/chat/bower/jScrollPane/runeimp.html +314 -0
  511. data/test/dummy/public/chat/bower/jScrollPane/runeimp2.html +320 -0
  512. data/test/dummy/public/chat/bower/jScrollPane/script/demo.js +49 -0
  513. data/test/dummy/public/chat/bower/jScrollPane/script/jquery.jscrollpane.js +1467 -0
  514. data/test/dummy/public/chat/bower/jScrollPane/script/jquery.jscrollpane.min.js +11 -0
  515. data/test/dummy/public/chat/bower/jScrollPane/script/jquery.mousewheel.js +202 -0
  516. data/test/dummy/public/chat/bower/jScrollPane/script/mwheelIntent.js +76 -0
  517. data/test/dummy/public/chat/bower/jScrollPane/scroll_on_left.html +132 -0
  518. data/test/dummy/public/chat/bower/jScrollPane/scroll_to.html +188 -0
  519. data/test/dummy/public/chat/bower/jScrollPane/scroll_to_animate.html +197 -0
  520. data/test/dummy/public/chat/bower/jScrollPane/settings.html +202 -0
  521. data/test/dummy/public/chat/bower/jScrollPane/short.html +82 -0
  522. data/test/dummy/public/chat/bower/jScrollPane/style/demo.css +227 -0
  523. data/test/dummy/public/chat/bower/jScrollPane/style/jquery.jscrollpane.css +115 -0
  524. data/test/dummy/public/chat/bower/jScrollPane/themes/lozenge/image/ui-icons_222222_256x240.png +0 -0
  525. data/test/dummy/public/chat/bower/jScrollPane/themes/lozenge/image/ui-icons_888888_256x240.png +0 -0
  526. data/test/dummy/public/chat/bower/jScrollPane/themes/lozenge/image/ui-icons_cd0a0a_256x240.png +0 -0
  527. data/test/dummy/public/chat/bower/jScrollPane/themes/lozenge/index.html +337 -0
  528. data/test/dummy/public/chat/bower/jScrollPane/themes/lozenge/style/jquery.jscrollpane.lozenge.css +78 -0
  529. data/test/dummy/public/chat/bower/jScrollPane/v1.html +49 -0
  530. data/test/dummy/public/chat/bower/jquery/.bower.json +37 -0
  531. data/test/dummy/public/chat/bower/jquery/MIT-LICENSE.txt +21 -0
  532. data/test/dummy/public/chat/bower/jquery/bower.json +27 -0
  533. data/test/dummy/public/chat/bower/jquery/dist/jquery.js +9205 -0
  534. data/test/dummy/public/chat/bower/jquery/dist/jquery.min.js +5 -0
  535. data/test/dummy/public/chat/bower/jquery/dist/jquery.min.map +1 -0
  536. data/test/dummy/public/chat/bower/jquery/src/ajax.js +786 -0
  537. data/test/dummy/public/chat/bower/jquery/src/ajax/jsonp.js +89 -0
  538. data/test/dummy/public/chat/bower/jquery/src/ajax/load.js +75 -0
  539. data/test/dummy/public/chat/bower/jquery/src/ajax/parseJSON.js +13 -0
  540. data/test/dummy/public/chat/bower/jquery/src/ajax/parseXML.js +28 -0
  541. data/test/dummy/public/chat/bower/jquery/src/ajax/script.js +64 -0
  542. data/test/dummy/public/chat/bower/jquery/src/ajax/var/nonce.js +5 -0
  543. data/test/dummy/public/chat/bower/jquery/src/ajax/var/rquery.js +3 -0
  544. data/test/dummy/public/chat/bower/jquery/src/ajax/xhr.js +136 -0
  545. data/test/dummy/public/chat/bower/jquery/src/attributes.js +11 -0
  546. data/test/dummy/public/chat/bower/jquery/src/attributes/attr.js +141 -0
  547. data/test/dummy/public/chat/bower/jquery/src/attributes/classes.js +158 -0
  548. data/test/dummy/public/chat/bower/jquery/src/attributes/prop.js +94 -0
  549. data/test/dummy/public/chat/bower/jquery/src/attributes/support.js +35 -0
  550. data/test/dummy/public/chat/bower/jquery/src/attributes/val.js +161 -0
  551. data/test/dummy/public/chat/bower/jquery/src/callbacks.js +205 -0
  552. data/test/dummy/public/chat/bower/jquery/src/core.js +497 -0
  553. data/test/dummy/public/chat/bower/jquery/src/core/access.js +60 -0
  554. data/test/dummy/public/chat/bower/jquery/src/core/init.js +123 -0
  555. data/test/dummy/public/chat/bower/jquery/src/core/parseHTML.js +39 -0
  556. data/test/dummy/public/chat/bower/jquery/src/core/ready.js +97 -0
  557. data/test/dummy/public/chat/bower/jquery/src/core/var/rsingleTag.js +4 -0
  558. data/test/dummy/public/chat/bower/jquery/src/css.js +450 -0
  559. data/test/dummy/public/chat/bower/jquery/src/css/addGetHookIf.js +22 -0
  560. data/test/dummy/public/chat/bower/jquery/src/css/curCSS.js +57 -0
  561. data/test/dummy/public/chat/bower/jquery/src/css/defaultDisplay.js +70 -0
  562. data/test/dummy/public/chat/bower/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  563. data/test/dummy/public/chat/bower/jquery/src/css/support.js +96 -0
  564. data/test/dummy/public/chat/bower/jquery/src/css/swap.js +28 -0
  565. data/test/dummy/public/chat/bower/jquery/src/css/var/cssExpand.js +3 -0
  566. data/test/dummy/public/chat/bower/jquery/src/css/var/getStyles.js +12 -0
  567. data/test/dummy/public/chat/bower/jquery/src/css/var/isHidden.js +13 -0
  568. data/test/dummy/public/chat/bower/jquery/src/css/var/rmargin.js +3 -0
  569. data/test/dummy/public/chat/bower/jquery/src/css/var/rnumnonpx.js +5 -0
  570. data/test/dummy/public/chat/bower/jquery/src/data.js +178 -0
  571. data/test/dummy/public/chat/bower/jquery/src/data/Data.js +181 -0
  572. data/test/dummy/public/chat/bower/jquery/src/data/accepts.js +20 -0
  573. data/test/dummy/public/chat/bower/jquery/src/data/var/data_priv.js +5 -0
  574. data/test/dummy/public/chat/bower/jquery/src/data/var/data_user.js +5 -0
  575. data/test/dummy/public/chat/bower/jquery/src/deferred.js +149 -0
  576. data/test/dummy/public/chat/bower/jquery/src/deprecated.js +13 -0
  577. data/test/dummy/public/chat/bower/jquery/src/dimensions.js +50 -0
  578. data/test/dummy/public/chat/bower/jquery/src/effects.js +648 -0
  579. data/test/dummy/public/chat/bower/jquery/src/effects/Tween.js +114 -0
  580. data/test/dummy/public/chat/bower/jquery/src/effects/animatedSelector.js +13 -0
  581. data/test/dummy/public/chat/bower/jquery/src/event.js +868 -0
  582. data/test/dummy/public/chat/bower/jquery/src/event/ajax.js +13 -0
  583. data/test/dummy/public/chat/bower/jquery/src/event/alias.js +39 -0
  584. data/test/dummy/public/chat/bower/jquery/src/event/support.js +9 -0
  585. data/test/dummy/public/chat/bower/jquery/src/exports/amd.js +24 -0
  586. data/test/dummy/public/chat/bower/jquery/src/exports/global.js +32 -0
  587. data/test/dummy/public/chat/bower/jquery/src/intro.js +44 -0
  588. data/test/dummy/public/chat/bower/jquery/src/jquery.js +37 -0
  589. data/test/dummy/public/chat/bower/jquery/src/manipulation.js +580 -0
  590. data/test/dummy/public/chat/bower/jquery/src/manipulation/_evalUrl.js +18 -0
  591. data/test/dummy/public/chat/bower/jquery/src/manipulation/support.js +32 -0
  592. data/test/dummy/public/chat/bower/jquery/src/manipulation/var/rcheckableType.js +3 -0
  593. data/test/dummy/public/chat/bower/jquery/src/offset.js +207 -0
  594. data/test/dummy/public/chat/bower/jquery/src/outro.js +1 -0
  595. data/test/dummy/public/chat/bower/jquery/src/queue.js +142 -0
  596. data/test/dummy/public/chat/bower/jquery/src/queue/delay.js +22 -0
  597. data/test/dummy/public/chat/bower/jquery/src/selector-native.js +172 -0
  598. data/test/dummy/public/chat/bower/jquery/src/selector-sizzle.js +14 -0
  599. data/test/dummy/public/chat/bower/jquery/src/selector.js +1 -0
  600. data/test/dummy/public/chat/bower/jquery/src/serialize.js +111 -0
  601. data/test/dummy/public/chat/bower/jquery/src/sizzle/dist/sizzle.js +2067 -0
  602. data/test/dummy/public/chat/bower/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  603. data/test/dummy/public/chat/bower/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  604. data/test/dummy/public/chat/bower/jquery/src/traversing.js +199 -0
  605. data/test/dummy/public/chat/bower/jquery/src/traversing/findFilter.js +100 -0
  606. data/test/dummy/public/chat/bower/jquery/src/traversing/var/rneedsContext.js +6 -0
  607. data/test/dummy/public/chat/bower/jquery/src/var/arr.js +3 -0
  608. data/test/dummy/public/chat/bower/jquery/src/var/class2type.js +4 -0
  609. data/test/dummy/public/chat/bower/jquery/src/var/concat.js +5 -0
  610. data/test/dummy/public/chat/bower/jquery/src/var/hasOwn.js +5 -0
  611. data/test/dummy/public/chat/bower/jquery/src/var/indexOf.js +5 -0
  612. data/test/dummy/public/chat/bower/jquery/src/var/pnum.js +3 -0
  613. data/test/dummy/public/chat/bower/jquery/src/var/push.js +5 -0
  614. data/test/dummy/public/chat/bower/jquery/src/var/rnotwhite.js +3 -0
  615. data/test/dummy/public/chat/bower/jquery/src/var/slice.js +5 -0
  616. data/test/dummy/public/chat/bower/jquery/src/var/strundefined.js +3 -0
  617. data/test/dummy/public/chat/bower/jquery/src/var/support.js +4 -0
  618. data/test/dummy/public/chat/bower/jquery/src/var/toString.js +5 -0
  619. data/test/dummy/public/chat/bower/jquery/src/wrap.js +79 -0
  620. data/test/dummy/public/chat/bower/open-sans-fontface/.bower.json +32 -0
  621. data/test/dummy/public/chat/bower/open-sans-fontface/README.md +17 -0
  622. data/test/dummy/public/chat/bower/open-sans-fontface/bower.json +22 -0
  623. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Bold/OpenSans-Bold.eot +0 -0
  624. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Bold/OpenSans-Bold.svg +958 -0
  625. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Bold/OpenSans-Bold.ttf +0 -0
  626. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Bold/OpenSans-Bold.woff +0 -0
  627. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/BoldItalic/OpenSans-BoldItalic.eot +0 -0
  628. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/BoldItalic/OpenSans-BoldItalic.svg +958 -0
  629. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/BoldItalic/OpenSans-BoldItalic.ttf +0 -0
  630. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/BoldItalic/OpenSans-BoldItalic.woff +0 -0
  631. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/ExtraBold/OpenSans-ExtraBold.eot +0 -0
  632. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/ExtraBold/OpenSans-ExtraBold.svg +958 -0
  633. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/ExtraBold/OpenSans-ExtraBold.ttf +0 -0
  634. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/ExtraBold/OpenSans-ExtraBold.woff +0 -0
  635. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot +0 -0
  636. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg +958 -0
  637. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.ttf +0 -0
  638. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff +0 -0
  639. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Italic/OpenSans-Italic.eot +0 -0
  640. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Italic/OpenSans-Italic.svg +958 -0
  641. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Italic/OpenSans-Italic.ttf +0 -0
  642. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Italic/OpenSans-Italic.woff +0 -0
  643. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Light/OpenSans-Light.eot +0 -0
  644. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Light/OpenSans-Light.svg +958 -0
  645. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Light/OpenSans-Light.ttf +0 -0
  646. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Light/OpenSans-Light.woff +0 -0
  647. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/LightItalic/OpenSans-LightItalic.eot +0 -0
  648. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/LightItalic/OpenSans-LightItalic.svg +958 -0
  649. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/LightItalic/OpenSans-LightItalic.ttf +0 -0
  650. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/LightItalic/OpenSans-LightItalic.woff +0 -0
  651. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Regular/OpenSans-Regular.eot +0 -0
  652. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Regular/OpenSans-Regular.svg +958 -0
  653. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Regular/OpenSans-Regular.ttf +0 -0
  654. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Regular/OpenSans-Regular.woff +0 -0
  655. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Semibold/OpenSans-Semibold.eot +0 -0
  656. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Semibold/OpenSans-Semibold.svg +958 -0
  657. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Semibold/OpenSans-Semibold.ttf +0 -0
  658. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/Semibold/OpenSans-Semibold.woff +0 -0
  659. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot +0 -0
  660. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg +958 -0
  661. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/SemiboldItalic/OpenSans-SemiboldItalic.ttf +0 -0
  662. data/test/dummy/public/chat/bower/open-sans-fontface/fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff +0 -0
  663. data/test/dummy/public/chat/bower/open-sans-fontface/index.html +85 -0
  664. data/test/dummy/public/chat/bower/open-sans-fontface/open-sans.css +90 -0
  665. data/test/dummy/public/chat/bower/open-sans-fontface/open-sans.less +133 -0
  666. data/test/dummy/public/chat/bower/open-sans-fontface/open-sans.scss +12 -0
  667. data/test/dummy/public/chat/bower/open-sans-fontface/package.json +22 -0
  668. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_Bold.scss +8 -0
  669. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_BoldItalic.scss +8 -0
  670. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_ExtraBold.scss +8 -0
  671. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_ExtraBoldItalic.scss +8 -0
  672. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_Italic.scss +8 -0
  673. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_Light.scss +8 -0
  674. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_LightItalic.scss +8 -0
  675. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_Regular.scss +8 -0
  676. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_Semibold.scss +8 -0
  677. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_SemiboldItalic.scss +8 -0
  678. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_mixins.scss +7 -0
  679. data/test/dummy/public/chat/bower/open-sans-fontface/sass/_variables.scss +2 -0
  680. data/test/dummy/public/chat/bower/open-sans-fontface/sass/open-sans.scss +12 -0
  681. data/test/dummy/public/chat/css/login.css +140 -0
  682. data/test/dummy/public/chat/css/login.scss +147 -0
  683. data/test/dummy/public/chat/css/style.css +397 -0
  684. data/test/dummy/public/chat/index.html +211 -0
  685. data/test/dummy/public/chat/js/index.js +6 -0
  686. data/test/dummy/public/chat/login.html +36 -0
  687. data/test/helper.rb +11 -53
  688. metadata +1501 -31
  689. data/lib/roda/component/models/channel.rb +0 -11
  690. data/lib/roda/component/models/user.rb +0 -12
  691. data/lib/roda/component/ohm.rb +0 -8
  692. data/test/dummy/public/index.html +0 -8
@@ -0,0 +1,53 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+ "http://www.w3.org/TR/html4/loose.dtd">
3
+ <html>
4
+ <head>
5
+
6
+ <title>jScrollPane - issue 12</title>
7
+
8
+ <!-- styles specific to demo site -->
9
+ <link type="text/css" href="../../style/demo.css" rel="stylesheet" media="all" />
10
+
11
+ <!-- latest jQuery direct from google's CDN -->
12
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
13
+ <!-- scripts specific to this demo site -->
14
+ <script type="text/javascript" src="../../script/demo.js"></script>
15
+ </head>
16
+ <body>
17
+ <div id="top-nav">
18
+ <img src="../../image/logo.png" width="196" height="69" alt="jScrollPane">
19
+ <ul>
20
+ <li><a href="../../index.html">Home</a></li>
21
+ <li><a href="../../index.html#examples">Examples</a></li>
22
+ <li><a href="../../index.html#themes">Themes</a></li>
23
+ <li><a href="../../index.html#usage">How to use</a></li>
24
+ <li><a href="../../faqs.html">FAQs</a></li>
25
+ <li><a href="../../known_issues.html">Known issues</a></li>
26
+ <li><a href="../../index.html#support">Support</a></li>
27
+ <li><a href="../../index.html#download">Download</a></li>
28
+ </ul>
29
+ </div>
30
+ <div id="container">
31
+ <h1>jScrollPane - issue 12</h1>
32
+ <p>
33
+ This page demonstrates the bug described in <a href="http://github.com/vitch/jScrollPane/issues#issue/12">
34
+ issue 12</a> as reported (with nice striped down test cases) by
35
+ <a href="http://groups.google.com/group/jscrollpane/browse_thread/thread/98efa9ded76d5729">TinyFish</a>.
36
+ </p>
37
+ <ul class="link-list">
38
+ <li>
39
+ <a href="before.html">Before</a> - showing the bug as it appears in the version of jScrollPane which
40
+ was current when it was reported.
41
+ </li>
42
+ <li>
43
+ <a href="native.html">Native</a> - showing how the page looks with native scrollbars (i.e. if
44
+ jScrollPane isn't initialised).
45
+ </li>
46
+ <li>
47
+ <a href="after.html">After</a> - showing the page which was displaying the bug with the latest
48
+ version of jScrollPane.
49
+ </li>
50
+ </ul>
51
+ </div>
52
+ </body>
53
+ </html>
@@ -0,0 +1,79 @@
1
+ /*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
2
+ * Licensed under the MIT License (LICENSE.txt).
3
+ *
4
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
5
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
6
+ * Thanks to: Seamus Leahy for adding deltaX and deltaY
7
+ *
8
+ * Version: 3.0.3
9
+ *
10
+ * Requires: 1.2.2+
11
+ */
12
+
13
+ (function($) {
14
+
15
+ var types = ['DOMMouseScroll', 'mousewheel'];
16
+
17
+ $.event.special.mousewheel = {
18
+ setup: function() {
19
+ if ( this.addEventListener ) {
20
+ for ( var i=types.length; i; ) {
21
+ this.addEventListener( types[--i], handler, false );
22
+ }
23
+ } else {
24
+ this.onmousewheel = handler;
25
+ }
26
+ },
27
+
28
+ teardown: function() {
29
+ if ( this.removeEventListener ) {
30
+ for ( var i=types.length; i; ) {
31
+ this.removeEventListener( types[--i], handler, false );
32
+ }
33
+ } else {
34
+ this.onmousewheel = null;
35
+ }
36
+ }
37
+ };
38
+
39
+ $.fn.extend({
40
+ mousewheel: function(fn) {
41
+ return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
42
+ },
43
+
44
+ unmousewheel: function(fn) {
45
+ return this.unbind("mousewheel", fn);
46
+ }
47
+ });
48
+
49
+
50
+ function handler(event) {
51
+ var orgEvent = event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;
52
+
53
+ event = $.event.fix(event || window.event);
54
+ event.type = "mousewheel";
55
+
56
+ // Old school scrollwheel delta
57
+ if ( event.wheelDelta ) { delta = event.wheelDelta/120; }
58
+ if ( event.detail ) { delta = -event.detail/3; }
59
+
60
+ // New school multidimensional scroll (touchpads) deltas
61
+ deltaY = delta;
62
+
63
+ // Gecko
64
+ if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
65
+ deltaY = 0;
66
+ deltaX = -1*delta;
67
+ }
68
+
69
+ // Webkit
70
+ if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
71
+ if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }
72
+
73
+ // Add event and delta to the front of the arguments
74
+ args.unshift(event, delta, deltaX, deltaY);
75
+
76
+ return $.event.handle.apply(this, args);
77
+ }
78
+
79
+ })(jQuery);
@@ -0,0 +1,143 @@
1
+ /*
2
+ * CSS Styles that are needed by jScrollPane for it to operate correctly.
3
+ *
4
+ * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane
5
+ * may not operate correctly without them.
6
+ */
7
+
8
+ .jspContainer
9
+ {
10
+ overflow: hidden;
11
+ position: relative;
12
+ }
13
+
14
+ .jspPane
15
+ {
16
+ position: absolute;
17
+ }
18
+
19
+ .jspVerticalBar
20
+ {
21
+ position: absolute;
22
+ top: 0;
23
+ right: 0;
24
+ width: 16px;
25
+ height: 100%;
26
+ background: red;
27
+ }
28
+
29
+ .jspHorizontalBar
30
+ {
31
+ position: absolute;
32
+ bottom: 0;
33
+ left: 0;
34
+ width: 100%;
35
+ height: 16px;
36
+ background: red;
37
+ }
38
+
39
+ .jspVerticalBar *,
40
+ .jspHorizontalBar *
41
+ {
42
+ margin: 0;
43
+ padding: 0;
44
+ }
45
+
46
+ .jspCap
47
+ {
48
+ display: none;
49
+ }
50
+
51
+ .jspHorizontalBar .jspCap
52
+ {
53
+ float: left;
54
+ }
55
+
56
+ .jspTrack
57
+ {
58
+ background: #000 url(../__imgs/furn/track.gif) repeat-y center;
59
+ position: relative;
60
+ }
61
+
62
+ .jspDrag
63
+ {
64
+ background: #666;
65
+ border: solid #aaa 2px;
66
+ position: relative;
67
+ top: 0;
68
+ left: 0;
69
+ cursor: pointer;
70
+ }
71
+
72
+ .jspHorizontalBar .jspTrack,
73
+ .jspHorizontalBar .jspDrag
74
+ {
75
+ float: left;
76
+ height: 100%;
77
+ }
78
+
79
+ .jspArrow
80
+ {
81
+ background-color: rgba(0,0,0,0.9);
82
+ text-indent: -20000px;
83
+ display: block;
84
+ cursor: pointer;
85
+ }
86
+
87
+ .jspArrowUp
88
+ {
89
+ background-image: url("../__imgs/furn/arrow_up.gif");
90
+ }
91
+
92
+ .jspArrowDown
93
+ {
94
+ background-image: url("../__imgs/furn/arrow_down.gif");
95
+ }
96
+
97
+ .jspArrow.jspDisabled
98
+ {
99
+ cursor: default;
100
+ background: #80808d;
101
+ }
102
+
103
+ .jspArrowUp.jspDisabled
104
+ {
105
+ cursor: default;
106
+ background-image: url("../__imgs/furn/arrow_up.gif");
107
+ }
108
+
109
+ .jspArrowDown.jspDisabled
110
+ {
111
+ cursor: default;
112
+ background-image: url("../__imgs/furn/arrow_down.gif");
113
+ }
114
+
115
+ .jspVerticalBar .jspArrow
116
+ {
117
+ height: 16px;
118
+ }
119
+
120
+ .jspHorizontalBar .jspArrow
121
+ {
122
+ width: 16px;
123
+ float: left;
124
+ height: 100%;
125
+ }
126
+
127
+ .jspVerticalBar .jspArrow:focus
128
+ {
129
+ outline: none;
130
+ }
131
+
132
+ .jspCorner
133
+ {
134
+ background: #eeeef4;
135
+ float: left;
136
+ height: 100%;
137
+ }
138
+
139
+ /* Yuk! CSS Hack for IE6 3 pixel bug :( */
140
+ * html .jspCorner
141
+ {
142
+ margin: 0 -3px 0 0;
143
+ }
@@ -0,0 +1,1063 @@
1
+ /*!
2
+ * jScrollPane - v2.0.0beta3 - 2010-08-27
3
+ * http://jscrollpane.kelvinluck.com/
4
+ *
5
+ * Copyright (c) 2010 Kelvin Luck
6
+ * Dual licensed under the MIT or GPL licenses.
7
+ */
8
+
9
+ // Script: jScrollPane - cross browser customisable scrollbars
10
+ //
11
+ // *Version: 2.0.0beta3, Last updated: 2010-08-27*
12
+ //
13
+ // Project Home - http://jscrollpane.kelvinluck.com/
14
+ // GitHub - http://github.com/vitch/jScrollPane
15
+ // Source - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.js
16
+ // (Minified) - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.min.js
17
+ //
18
+ // About: License
19
+ //
20
+ // Copyright (c) 2010 Kelvin Luck
21
+ // Dual licensed under the MIT or GPL Version 2 licenses.
22
+ // http://jscrollpane.kelvinluck.com/MIT-LICENSE.txt
23
+ // http://jscrollpane.kelvinluck.com/GPL-LICENSE.txt
24
+ //
25
+ // About: Examples
26
+ //
27
+ // All examples and demos are available through the jScrollPane example site at:
28
+ // http://jscrollpane.kelvinluck.com/
29
+ //
30
+ // About: Support and Testing
31
+ //
32
+ // This plugin is tested on the browsers below and has been found to work reliably on them. If you run
33
+ // into a problem on one of the supported browsers then please visit the support section on the jScrollPane
34
+ // website (http://jscrollpane.kelvinluck.com/) for more information on getting support. You are also
35
+ // welcome to fork the project on GitHub if you can contribute a fix for a given issue.
36
+ //
37
+ // jQuery Versions - 1.4.2
38
+ // Browsers Tested - Firefox 3.6.8, Safari 5, Opera 10.6, Chrome 5.0, IE 6, 7, 8
39
+ //
40
+ // About: Release History
41
+ //
42
+ // 2.0.0beta3 - (2010-08-27) Horizontal mousewheel, mwheelIntent, keyboard support, bug fixes
43
+ // 2.0.0beta2 - (2010-08-21) Bug fixes
44
+ // 2.0.0beta1 - (2010-08-17) Rewrite to follow modern best practices and enable horizontal scrolling, initially hidden
45
+ // elements and dynamically sized elements.
46
+ // 1.x - (2006-12-31 - 2010-07-31) Initial version, hosted at googlecode, deprecated
47
+
48
+ (function($,window,undefined){
49
+
50
+ $.fn.jScrollPane = function(settings)
51
+ {
52
+ // JScrollPane "class" - public methods are available through $('selector').data('jsp')
53
+ function JScrollPane(elem, s)
54
+ {
55
+
56
+ var settings, jsp = this, pane, paneWidth, paneHeight, container, contentWidth, contentHeight,
57
+ percentInViewH, percentInViewV, isScrollableV, isScrollableH, verticalDrag, dragMaxY,
58
+ verticalDragPosition, horizontalDrag, dragMaxX, horizontalDragPosition,
59
+ verticalBar, verticalTrack, scrollbarWidth, verticalTrackHeight, verticalDragHeight, arrowUp, arrowDown,
60
+ horizontalBar, horizontalTrack, horizontalTrackWidth, horizontalDragWidth, arrowLeft, arrowRight,
61
+ reinitialiseInterval, originalPadding, originalPaddingTotalWidth, previousPaneWidth,
62
+ wasAtTop = true, wasAtLeft = true, wasAtBottom = false, wasAtRight = false,
63
+ mwEvent = $.fn.mwheelIntent ? 'mwheelIntent.jsp' : 'mousewheel.jsp';
64
+
65
+ originalPadding = elem.css('paddingTop') + ' ' +
66
+ elem.css('paddingRight') + ' ' +
67
+ elem.css('paddingBottom') + ' ' +
68
+ elem.css('paddingLeft');
69
+ originalPaddingTotalWidth = (parseInt(elem.css('paddingLeft')) || 0) +
70
+ (parseInt(elem.css('paddingRight')) || 0);
71
+
72
+ initialise(s);
73
+
74
+ function initialise(s)
75
+ {
76
+
77
+ var clonedElem, tempWrapper, /*firstChild, lastChild, */isMaintainingPositon, lastContentX, lastContentY,
78
+ hasContainingSpaceChanged;
79
+
80
+ settings = s;
81
+
82
+ if (pane == undefined) {
83
+
84
+ elem.css(
85
+ {
86
+ 'overflow': 'hidden',
87
+ 'padding': 0
88
+ }
89
+ );
90
+ // TODO: Deal with where width/ height is 0 as it probably means the element is hidden and we should
91
+ // come back to it later and check once it is unhidden...
92
+ paneWidth = elem.innerWidth() + originalPaddingTotalWidth;
93
+ paneHeight = elem.innerHeight();
94
+
95
+ elem.width(paneWidth);
96
+
97
+ pane = $('<div class="jspPane" />').wrap(
98
+ $('<div class="jspContainer" />')
99
+ .css({
100
+ 'width': paneWidth + 'px',
101
+ 'height': paneHeight + 'px'
102
+ }
103
+ )
104
+ );
105
+
106
+ elem.wrapInner(pane.parent());
107
+ // Need to get the vars after being added to the document, otherwise they reference weird
108
+ // disconnected orphan elements...
109
+ container = elem.find('>.jspContainer');
110
+ pane = container.find('>.jspPane');
111
+ pane.css('padding', originalPadding);
112
+
113
+ /*
114
+ // Move any margins from the first and last children up to the container so they can still
115
+ // collapse with neighbouring elements as they would before jScrollPane
116
+ firstChild = pane.find(':first-child');
117
+ lastChild = pane.find(':last-child');
118
+ elem.css(
119
+ {
120
+ 'margin-top': firstChild.css('margin-top'),
121
+ 'margin-bottom': lastChild.css('margin-bottom')
122
+ }
123
+ );
124
+ firstChild.css('margin-top', 0);
125
+ lastChild.css('margin-bottom', 0);
126
+ */
127
+ } else {
128
+
129
+ elem.css('width', null);
130
+
131
+ hasContainingSpaceChanged = elem.outerWidth() + originalPaddingTotalWidth != paneWidth || elem.outerHeight() != paneHeight;
132
+
133
+ if (hasContainingSpaceChanged) {
134
+ paneWidth = elem.innerWidth() + originalPaddingTotalWidth;
135
+ paneHeight = elem.innerHeight();
136
+ container.css({
137
+ 'width': paneWidth + 'px',
138
+ 'height': paneHeight + 'px'
139
+ });
140
+ }
141
+
142
+ previousPaneWidth = pane.innerWidth();
143
+
144
+ if (!hasContainingSpaceChanged && pane.outerWidth() == contentWidth && pane.outerHeight() == contentHeight) {
145
+ // Nothing has changed since we last initialised
146
+ if (isScrollableH || isScrollableV) { // If we had already set a width then re-set it
147
+ pane.css('width', previousPaneWidth + 'px');
148
+ elem.css('width', (previousPaneWidth + originalPaddingTotalWidth) + 'px');
149
+ }
150
+ // Then abort...
151
+ return;
152
+ }
153
+
154
+ pane.css('width', null);
155
+ elem.css('width', (paneWidth + originalPaddingTotalWidth) + 'px');
156
+
157
+ container.find('>.jspVerticalBar,>.jspHorizontalBar').remove().end();
158
+ }
159
+
160
+ // Unfortunately it isn't that easy to find out the width of the element as it will always report the
161
+ // width as allowed by its container, regardless of overflow settings.
162
+ // A cunning workaround is to clone the element, set its position to absolute and place it in a narrow
163
+ // container. Now it will push outwards to its maxium real width...
164
+ clonedElem = pane.clone().css('position', 'absolute');
165
+ tempWrapper = $('<div style="width:1px; position: relative;" />').append(clonedElem);
166
+ $('body').append(tempWrapper);
167
+ contentWidth = Math.max(pane.outerWidth(), clonedElem.outerWidth());
168
+ tempWrapper.remove();
169
+
170
+ contentHeight = pane.outerHeight(true);
171
+ /*alert(contentHeight); */
172
+ percentInViewH = contentWidth / paneWidth;
173
+ percentInViewV = contentHeight / paneHeight;
174
+ isScrollableV = percentInViewV > 1;
175
+
176
+ isScrollableH = percentInViewH > 1;
177
+
178
+ //console.log(paneWidth, paneHeight, contentWidth, contentHeight, percentInViewH, percentInViewV, isScrollableH, isScrollableV);
179
+
180
+ if (!(isScrollableH || isScrollableV)) {
181
+ elem.removeClass('jspScrollable');
182
+ pane.css({
183
+ 'top': 0,
184
+ 'width': container.width() + 'px'
185
+ });
186
+ removeMousewheel();
187
+ removeFocusHandler();
188
+ removeKeyboardNav();
189
+ unhijackInternalLinks();
190
+ } else {
191
+ elem.addClass('jspScrollable');
192
+
193
+ isMaintainingPositon = settings.maintainPosition && (verticalDragPosition || horizontalDragPosition);
194
+ if (isMaintainingPositon) {
195
+ lastContentX = contentPositionX();
196
+ lastContentY = contentPositionY();
197
+ }
198
+
199
+ initialiseVerticalScroll();
200
+ initialiseHorizontalScroll();
201
+ resizeScrollbars();
202
+
203
+ if (isMaintainingPositon) {
204
+ scrollToX(lastContentX);
205
+ scrollToY(lastContentY);
206
+ }
207
+
208
+ initFocusHandler();
209
+ initMousewheel();
210
+ if (settings.enableKeyboardNavigation) {
211
+ initKeyboardNav();
212
+ }
213
+
214
+ observeHash();
215
+ if (settings.hijackInternalLinks) {
216
+ hijackInternalLinks();
217
+ }
218
+ }
219
+
220
+ if (settings.autoReinitialise && !reinitialiseInterval) {
221
+ reinitialiseInterval = setInterval(
222
+ function()
223
+ {
224
+ initialise(settings);
225
+ },
226
+ settings.autoReinitialiseDelay
227
+ );
228
+ } else if (!settings.autoReinitialise && reinitialiseInterval) {
229
+ clearInterval(reinitialiseInterval)
230
+ }
231
+
232
+ elem.trigger('jsp-initialised', [isScrollableH || isScrollableV]);
233
+ }
234
+
235
+ function initialiseVerticalScroll()
236
+ {
237
+ if (isScrollableV) {
238
+
239
+ container.append(
240
+ $('<div class="jspVerticalBar" />').append(
241
+ $('<div class="jspCap jspCapTop" />'),
242
+ $('<div class="jspTrack" />').append(
243
+ $('<div class="jspDrag" />').append(
244
+ $('<div class="jspDragTop" />'),
245
+ $('<div class="jspDragBottom" />')
246
+ )
247
+ ),
248
+ $('<div class="jspCap jspCapBottom" />')
249
+ )
250
+ );
251
+
252
+ verticalBar = container.find('>.jspVerticalBar');
253
+ verticalTrack = verticalBar.find('>.jspTrack');
254
+ verticalDrag = verticalTrack.find('>.jspDrag');
255
+
256
+ if (settings.showArrows) {
257
+ arrowUp = $('<a class="jspArrow jspArrowUp" />').bind(
258
+ 'mousedown.jsp', getArrowScroll(0, -1)
259
+ ).bind('click.jsp', nil);
260
+ arrowDown = $('<a class="jspArrow jspArrowDown" />').bind(
261
+ 'mousedown.jsp', getArrowScroll(0, 1)
262
+ ).bind('click.jsp', nil);
263
+ if (settings.arrowScrollOnHover) {
264
+ arrowUp.bind('mouseover.jsp', getArrowScroll(0, -1, arrowUp));
265
+ arrowDown.bind('mouseover.jsp', getArrowScroll(0, 1, arrowDown));
266
+ }
267
+
268
+ appendArrows(verticalTrack, settings.verticalArrowPositions, arrowUp, arrowDown);
269
+ }
270
+
271
+ verticalTrackHeight = paneHeight;
272
+ container.find('>.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow').each(
273
+ function()
274
+ {
275
+ verticalTrackHeight -= $(this).outerHeight();
276
+ }
277
+ );
278
+
279
+
280
+ verticalDrag.hover(
281
+ function()
282
+ {
283
+ verticalDrag.addClass('jspHover');
284
+ },
285
+ function()
286
+ {
287
+ verticalDrag.removeClass('jspHover');
288
+ }
289
+ ).bind(
290
+ 'mousedown.jsp',
291
+ function(e)
292
+ {
293
+ // Stop IE from allowing text selection
294
+ $('html').bind('dragstart.jsp selectstart.jsp', function() { return false; });
295
+
296
+ verticalDrag.addClass('jspActive');
297
+
298
+ var startY = e.pageY - verticalDrag.position().top;
299
+
300
+ $('html').bind(
301
+ 'mousemove.jsp',
302
+ function(e)
303
+ {
304
+ positionDragY(e.pageY - startY, false);
305
+ }
306
+ ).bind('mouseup.jsp mouseleave.jsp', cancelDrag);
307
+ return false;
308
+ }
309
+ );
310
+ sizeVerticalScrollbar();
311
+ updateVerticalArrows();
312
+ }
313
+ }
314
+
315
+ function sizeVerticalScrollbar()
316
+ {
317
+ verticalTrack.height(verticalTrackHeight + 'px');
318
+ verticalDragPosition = 0;
319
+ scrollbarWidth = settings.verticalGutter + verticalTrack.outerWidth();
320
+
321
+ // Make the pane thinner to allow for the vertical scrollbar
322
+ pane.width(paneWidth - scrollbarWidth - originalPaddingTotalWidth);
323
+
324
+ // Add margin to the left of the pane if scrollbars are on that side (to position
325
+ // the scrollbar on the left or right set it's left or right property in CSS)
326
+ if (verticalBar.position().left == 0) {
327
+ pane.css('margin-left', scrollbarWidth + 'px');
328
+ }
329
+ }
330
+
331
+ function initialiseHorizontalScroll()
332
+ {
333
+ if (isScrollableH) {
334
+
335
+ container.append(
336
+ $('<div class="jspHorizontalBar" />').append(
337
+ $('<div class="jspCap jspCapLeft" />'),
338
+ $('<div class="jspTrack" />').append(
339
+ $('<div class="jspDrag" />').append(
340
+ $('<div class="jspDragLeft" />'),
341
+ $('<div class="jspDragRight" />')
342
+ )
343
+ ),
344
+ $('<div class="jspCap jspCapRight" />')
345
+ )
346
+ );
347
+
348
+ horizontalBar = container.find('>.jspHorizontalBar');
349
+ horizontalTrack = horizontalBar.find('>.jspTrack');
350
+ horizontalDrag = horizontalTrack.find('>.jspDrag');
351
+
352
+ if (settings.showArrows) {
353
+ arrowLeft = $('<a class="jspArrow jspArrowLeft" />').bind(
354
+ 'mousedown.jsp', getArrowScroll(-1, 0)
355
+ ).bind('click.jsp', nil);
356
+ arrowRight = $('<a class="jspArrow jspArrowRight" />').bind(
357
+ 'mousedown.jsp', getArrowScroll(1, 0)
358
+ ).bind('click.jsp', nil);
359
+ if (settings.arrowScrollOnHover) {
360
+ arrowLeft.bind('mouseover.jsp', getArrowScroll(-1, 0, arrowLeft));
361
+ arrowRight.bind('mouseover.jsp', getArrowScroll(1, 0, arrowRight));
362
+ }
363
+ appendArrows(horizontalTrack, settings.horizontalArrowPositions, arrowLeft, arrowRight);
364
+ }
365
+
366
+ horizontalDrag.hover(
367
+ function()
368
+ {
369
+ horizontalDrag.addClass('jspHover');
370
+ },
371
+ function()
372
+ {
373
+ horizontalDrag.removeClass('jspHover');
374
+ }
375
+ ).bind(
376
+ 'mousedown.jsp',
377
+ function(e)
378
+ {
379
+ // Stop IE from allowing text selection
380
+ $('html').bind('dragstart.jsp selectstart.jsp', function() { return false; });
381
+
382
+ horizontalDrag.addClass('jspActive');
383
+
384
+ var startX = e.pageX - horizontalDrag.position().left;
385
+
386
+ $('html').bind(
387
+ 'mousemove.jsp',
388
+ function(e)
389
+ {
390
+ positionDragX(e.pageX - startX, false);
391
+ }
392
+ ).bind('mouseup.jsp mouseleave.jsp', cancelDrag);
393
+ return false;
394
+ }
395
+ );
396
+ horizontalTrackWidth = container.innerWidth();
397
+ sizeHorizontalScrollbar();
398
+ updateHorizontalArrows();
399
+ } else {
400
+ // no horizontal scroll
401
+ }
402
+ }
403
+
404
+ function sizeHorizontalScrollbar()
405
+ {
406
+
407
+ container.find('>.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow').each(
408
+ function()
409
+ {
410
+ horizontalTrackWidth -= $(this).outerWidth();
411
+ }
412
+ );
413
+
414
+ horizontalTrack.width(horizontalTrackWidth + 'px');
415
+ horizontalDragPosition = 0;
416
+ }
417
+
418
+ function resizeScrollbars()
419
+ {
420
+ if (isScrollableH && isScrollableV) {
421
+ var horizontalTrackHeight = horizontalTrack.outerHeight(),
422
+ verticalTrackWidth = verticalTrack.outerWidth();
423
+ verticalTrackHeight -= horizontalTrackHeight;
424
+ $(horizontalBar).find('>.jspCap:visible,>.jspArrow').each(
425
+ function()
426
+ {
427
+ horizontalTrackWidth += $(this).outerWidth();
428
+ }
429
+ );
430
+ horizontalTrackWidth -= verticalTrackWidth;
431
+ paneHeight -= verticalTrackWidth;
432
+ paneWidth -= horizontalTrackHeight;
433
+ horizontalTrack.parent().append(
434
+ $('<div class="jspCorner" />').css('width', horizontalTrackHeight + 'px')
435
+ );
436
+ sizeVerticalScrollbar();
437
+ sizeHorizontalScrollbar();
438
+ }
439
+ // reflow content
440
+ if (isScrollableH) {
441
+ pane.width((container.outerWidth() - originalPaddingTotalWidth) + 'px');
442
+ }
443
+ contentHeight = pane.outerHeight();
444
+ percentInViewV = contentHeight / paneHeight;
445
+
446
+ if (isScrollableH) {
447
+ horizontalDragWidth = 1 / percentInViewH * horizontalTrackWidth;
448
+ if (horizontalDragWidth > settings.horizontalDragMaxWidth) {
449
+ horizontalDragWidth = settings.horizontalDragMaxWidth;
450
+ } else if (horizontalDragWidth < settings.horizontalDragMinWidth) {
451
+ horizontalDragWidth = settings.horizontalDragMinWidth;
452
+ }
453
+ horizontalDrag.width(horizontalDragWidth + 'px');
454
+ dragMaxX = horizontalTrackWidth - horizontalDragWidth;
455
+ }
456
+ if (isScrollableV) {
457
+ verticalDragHeight = 1 / percentInViewV * verticalTrackHeight;
458
+ if (verticalDragHeight > settings.verticalDragMaxHeight) {
459
+ verticalDragHeight = settings.verticalDragMaxHeight;
460
+ } else if (verticalDragHeight < settings.verticalDragMinHeight) {
461
+ verticalDragHeight = settings.verticalDragMinHeight;
462
+ }
463
+ verticalDrag.height(verticalDragHeight + 'px');
464
+ dragMaxY = verticalTrackHeight - verticalDragHeight;
465
+ }
466
+ }
467
+
468
+ function appendArrows(ele, p, a1, a2)
469
+ {
470
+ var p1 = "before", p2 = "after", aTemp;
471
+
472
+ // Sniff for mac... Is there a better way to determine whether the arrows would naturally appear
473
+ // at the top or the bottom of the bar?
474
+ if (p == "os") {
475
+ p = /Mac/.test(navigator.platform) ? "after" : "split";
476
+ }
477
+ if (p == p1) {
478
+ p2 = p;
479
+ } else if (p == p2) {
480
+ p1 = p;
481
+ aTemp = a1;
482
+ a1 = a2;
483
+ a2 = aTemp;
484
+ }
485
+
486
+ ele[p1](a1)[p2](a2);
487
+ }
488
+
489
+ function getArrowScroll(dirX, dirY, ele) {
490
+ return function()
491
+ {
492
+ arrowScroll(dirX, dirY, this, ele);
493
+ this.blur();
494
+ return false;
495
+ }
496
+ }
497
+
498
+ function arrowScroll(dirX, dirY, arrow, ele)
499
+ {
500
+ arrow = $(arrow).addClass('jspActive');
501
+
502
+ var eve, doScroll = function()
503
+ {
504
+ if (dirX != 0) {
505
+ positionDragX(horizontalDragPosition + dirX * settings.arrowButtonSpeed, false);
506
+ }
507
+ if (dirY != 0) {
508
+ positionDragY(verticalDragPosition + dirY * settings.arrowButtonSpeed, false);
509
+ }
510
+ },
511
+ scrollInt = setInterval(doScroll, settings.arrowRepeatFreq);
512
+
513
+ doScroll();
514
+
515
+ eve = ele == undefined ? 'mouseup.jsp' : 'mouseout.jsp';
516
+ ele = ele || $('html');
517
+ ele.bind(
518
+ eve,
519
+ function()
520
+ {
521
+ arrow.removeClass('jspActive');
522
+ clearInterval(scrollInt);
523
+ ele.unbind(eve);
524
+ }
525
+ );
526
+ }
527
+
528
+ function cancelDrag()
529
+ {
530
+ $('html').unbind('dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp');
531
+
532
+ verticalDrag && verticalDrag.removeClass('jspActive');
533
+ horizontalDrag && horizontalDrag.removeClass('jspActive');
534
+ }
535
+
536
+ function positionDragY(destY, animate)
537
+ {
538
+ if (!isScrollableV) {
539
+ return;
540
+ }
541
+ if (destY < 0) {
542
+ destY = 0;
543
+ } else if (destY > dragMaxY) {
544
+ destY = dragMaxY;
545
+ }
546
+
547
+ // can't just check if(animate) because false is a valid value that could be passed in...
548
+ if (animate == undefined) {
549
+ animate = settings.animateScroll;
550
+ }
551
+ if (animate) {
552
+ jsp.animate(verticalDrag, 'top', destY, _positionDragY);
553
+ } else {
554
+ verticalDrag.css('top', destY);
555
+ _positionDragY(destY);
556
+ }
557
+
558
+ }
559
+
560
+ function _positionDragY(destY)
561
+ {
562
+ if (destY == undefined) {
563
+ destY = verticalDrag.position().top;
564
+ }
565
+
566
+ container.scrollTop(0);
567
+ verticalDragPosition = destY;
568
+
569
+ var isAtTop = verticalDragPosition == 0,
570
+ isAtBottom = verticalDragPosition == dragMaxY,
571
+ percentScrolled = destY/ dragMaxY,
572
+ destTop = -percentScrolled * (contentHeight - paneHeight);
573
+
574
+ if (wasAtTop != isAtTop || wasAtBottom != isAtBottom) {
575
+ wasAtTop = isAtTop;
576
+ wasAtBottom = isAtBottom;
577
+ elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]);
578
+ }
579
+
580
+ updateVerticalArrows(isAtTop, isAtBottom);
581
+ pane.css('top', destTop);
582
+ elem.trigger('jsp-scroll-y', [-destTop, isAtTop, isAtBottom]);
583
+ }
584
+
585
+ function positionDragX(destX, animate)
586
+ {
587
+ if (!isScrollableH) {
588
+ return;
589
+ }
590
+ if (destX < 0) {
591
+ destX = 0;
592
+ } else if (destX > dragMaxX) {
593
+ destX = dragMaxX;
594
+ }
595
+
596
+ if (animate == undefined) {
597
+ animate = settings.animateScroll;
598
+ }
599
+ if (animate) {
600
+ jsp.animate(horizontalDrag, 'left', destX, _positionDragX);
601
+ } else {
602
+ horizontalDrag.css('left', destX);
603
+ _positionDragX(destX);
604
+ }
605
+ }
606
+
607
+ function _positionDragX(destX)
608
+ {
609
+ if (destX == undefined) {
610
+ destX = horizontalDrag.position().left;
611
+ }
612
+
613
+ container.scrollTop(0);
614
+ horizontalDragPosition = destX;
615
+
616
+ var isAtLeft = horizontalDragPosition == 0,
617
+ isAtRight = horizontalDragPosition == dragMaxY,
618
+ percentScrolled = destX / dragMaxX,
619
+ destLeft = -percentScrolled * (contentWidth - paneWidth);
620
+
621
+ if (wasAtLeft != isAtLeft || wasAtRight != isAtRight) {
622
+ wasAtLeft = isAtLeft;
623
+ wasAtRight = isAtRight;
624
+ elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]);
625
+ }
626
+
627
+ updateHorizontalArrows(isAtLeft, isAtRight);
628
+ pane.css('left', destLeft);
629
+ elem.trigger('jsp-scroll-x', [-destLeft, isAtLeft, isAtRight]);
630
+ }
631
+
632
+ function updateVerticalArrows(isAtTop, isAtBottom)
633
+ {
634
+ if (settings.showArrows) {
635
+ arrowUp[isAtTop ? 'addClass' : 'removeClass']('jspDisabled');
636
+ arrowDown[isAtBottom ? 'addClass' : 'removeClass']('jspDisabled');
637
+ }
638
+ }
639
+
640
+ function updateHorizontalArrows(isAtLeft, isAtRight)
641
+ {
642
+ if (settings.showArrows) {
643
+ arrowLeft[isAtLeft ? 'addClass' : 'removeClass']('jspDisabled');
644
+ arrowRight[isAtRight ? 'addClass' : 'removeClass']('jspDisabled');
645
+ }
646
+ }
647
+
648
+ function scrollToY(destY, animate)
649
+ {
650
+ var percentScrolled = destY / (contentHeight - paneHeight);
651
+ positionDragY(percentScrolled * dragMaxY, animate);
652
+ }
653
+
654
+ function scrollToX(destX, animate)
655
+ {
656
+ var percentScrolled = destX / (contentWidth - paneWidth);
657
+ positionDragX(percentScrolled * dragMaxX, animate);
658
+ }
659
+
660
+ function scrollToElement(ele, stickToTop, animate)
661
+ {
662
+ var e, eleHeight, eleTop = 0, viewportTop, maxVisibleEleTop, destY;
663
+
664
+ // Legal hash values aren't necessarily legal jQuery selectors so we need to catch any
665
+ // errors from the lookup...
666
+ try {
667
+ e = $(ele);
668
+ } catch (err) {
669
+ return;
670
+ }
671
+ eleHeight = e.outerHeight();
672
+
673
+ container.scrollTop(0);
674
+
675
+ // loop through parents adding the offset top of any elements that are relatively positioned between
676
+ // the focused element and the jspPane so we can get the true distance from the top
677
+ // of the focused element to the top of the scrollpane...
678
+ while (!e.is('.jspPane')) {
679
+ eleTop += e.position().top;
680
+ e = e.offsetParent();
681
+ if (/^body|html$/i.test(e[0].nodeName)) {
682
+ // we ended up too high in the document structure. Quit!
683
+ return;
684
+ }
685
+ }
686
+
687
+
688
+ viewportTop = contentPositionY();
689
+ maxVisibleEleTop = viewportTop + paneHeight;
690
+ if (eleTop < viewportTop || stickToTop) { // element is above viewport
691
+ destY = eleTop - settings.verticalGutter;
692
+ } else if (eleTop + eleHeight > maxVisibleEleTop) { // element is below viewport
693
+ destY = eleTop - paneHeight + eleHeight + settings.verticalGutter;
694
+ }
695
+ if (destY) {
696
+ scrollToY(destY, animate);
697
+ }
698
+ // TODO: Implement automatic horizontal scrolling?
699
+ }
700
+
701
+ function contentPositionX()
702
+ {
703
+ return -pane.position().left;
704
+ }
705
+
706
+ function contentPositionY()
707
+ {
708
+ return -pane.position().top;
709
+ }
710
+
711
+ function initMousewheel()
712
+ {
713
+ container.unbind(mwEvent).bind(
714
+ mwEvent,
715
+ function (event, delta, deltaX, deltaY) {
716
+ var dX = horizontalDragPosition, dY = verticalDragPosition;
717
+ positionDragX(horizontalDragPosition + deltaX * settings.mouseWheelSpeed, false)
718
+ positionDragY(verticalDragPosition - deltaY * settings.mouseWheelSpeed, false);
719
+ // return true if there was no movement so rest of screen can scroll
720
+ return dX == horizontalDragPosition && dY == verticalDragPosition;
721
+ }
722
+ );
723
+ }
724
+
725
+ function removeMousewheel()
726
+ {
727
+ container.unbind(mwEvent);
728
+ }
729
+
730
+ function nil()
731
+ {
732
+ return false;
733
+ }
734
+
735
+ function initFocusHandler()
736
+ {
737
+ pane.unbind('focusin.jsp').bind(
738
+ 'focusin.jsp',
739
+ function(e)
740
+ {
741
+ if(e.target === pane[0]){return;}
742
+ scrollToElement(e.target, false);
743
+ }
744
+ );
745
+ }
746
+
747
+ function removeFocusHandler()
748
+ {
749
+
750
+ pane.unbind('focusin.jsp');
751
+ }
752
+
753
+ function initKeyboardNav()
754
+ {
755
+ var pressed, pressedTimer;
756
+ elem.attr('tabindex', 0)
757
+ .unbind('keydown.jsp')
758
+ .bind(
759
+ 'keydown.jsp',
760
+ function(e)
761
+ {
762
+ if(e.target !== elem[0]){
763
+ return;
764
+ }
765
+ var dX = horizontalDragPosition, dY = verticalDragPosition, step = pressed ? 2 : 16;
766
+ switch(e.keyCode) {
767
+ case 40: // down
768
+ positionDragY(verticalDragPosition + step, false);
769
+ break;
770
+ case 38: // up
771
+ positionDragY(verticalDragPosition - step, false);
772
+ break;
773
+ case 34: // page down
774
+ case 32: // space
775
+ scrollToY(contentPositionY() + Math.max(32, paneHeight) - 16);
776
+ break;
777
+ case 33: // page up
778
+ scrollToY(contentPositionY() - paneHeight + 16);
779
+ break;
780
+ case 35: // end
781
+ scrollToY(contentHeight - paneHeight);
782
+ break;
783
+ case 36: // home
784
+ scrollToY(0);
785
+ break;
786
+ case 39: // right
787
+ positionDragX(horizontalDragPosition + step, false);
788
+ break;
789
+ case 37: // left
790
+ positionDragX(horizontalDragPosition - step, false);
791
+ break;
792
+ }
793
+
794
+ if( !(dX == horizontalDragPosition && dY == verticalDragPosition) ){
795
+ pressed = true;
796
+ clearTimeout(pressedTimer);
797
+ pressedTimer = setTimeout(function(){
798
+ pressed = false;
799
+ }, 260);
800
+ return false;
801
+ }
802
+ }
803
+ );
804
+ if(settings.hideFocus) {
805
+ elem.css('outline', 'none');
806
+ if('hideFocus' in container[0]){
807
+ elem.attr('hideFocus', true);
808
+ }
809
+ } else {
810
+ elem.css('outline', '');
811
+ if('hideFocus' in container[0]){
812
+ elem.attr('hideFocus', false);
813
+ }
814
+ }
815
+ }
816
+
817
+ function removeKeyboardNav()
818
+ {
819
+ elem.attr('tabindex', '-1')
820
+ .removeAttr('tabindex')
821
+ .unbind('keydown.jsp');
822
+ }
823
+
824
+ function observeHash()
825
+ {
826
+ if (location.hash && location.hash.length > 1) {
827
+ var e, retryInt;
828
+ try {
829
+ e = $(location.hash);
830
+ } catch (err) {
831
+ return;
832
+ }
833
+
834
+ if (e.length && pane.find(e)) {
835
+ // nasty workaround but it appears to take a little while before the hash has done its thing
836
+ // to the rendered page so we just wait until the container's scrollTop has been messed up.
837
+ if (container.scrollTop() == 0) {
838
+ retryInt = setInterval(
839
+ function()
840
+ {
841
+ if (container.scrollTop() > 0) {
842
+ scrollToElement(location.hash, true);
843
+ $(document).scrollTop(container.position().top);
844
+ clearInterval(retryInt);
845
+ }
846
+ },
847
+ 50
848
+ )
849
+ } else {
850
+ scrollToElement(location.hash, true);
851
+ $(document).scrollTop(container.position().top);
852
+ }
853
+ }
854
+ }
855
+ }
856
+
857
+ function unhijackInternalLinks()
858
+ {
859
+ $('a.jspHijack').unbind('click.jsp-hijack').removeClass('jspHijack');
860
+ }
861
+
862
+ function hijackInternalLinks()
863
+ {
864
+ unhijackInternalLinks();
865
+ $('a[href^=#]').addClass('jspHijack').bind(
866
+ 'click.jsp-hijack',
867
+ function()
868
+ {
869
+ var uriParts = this.href.split('#'), hash;
870
+ if (uriParts.length > 1) {
871
+ hash = uriParts[1];
872
+ if (hash.length > 0 && pane.find('#' + hash).length > 0) {
873
+ scrollToElement('#' + hash, true);
874
+ // Need to return false otherwise things mess up... Would be nice to maybe also scroll
875
+ // the window to the top of the scrollpane?
876
+ return false;
877
+ }
878
+ }
879
+ }
880
+ )
881
+ }
882
+
883
+ // Public API
884
+ $.extend(
885
+ jsp,
886
+ {
887
+ // Reinitialises the scroll pane (if it's internal dimensions have changed since the last time it
888
+ // was initialised). The settings object which is passed in will override any settings from the
889
+ // previous time it was initialised - if you don't pass any settings then the ones from the previous
890
+ // initialisation will be used.
891
+ reinitialise: function(s)
892
+ {
893
+ s = $.extend({}, s, settings);
894
+ initialise(s);
895
+ },
896
+ // Scrolls the specified element (a jQuery object, DOM node or jQuery selector string) into view so
897
+ // that it can be seen within the viewport. If stickToTop is true then the element will appear at
898
+ // the top of the viewport, if it is false then the viewport will scroll as little as possible to
899
+ // show the element. You can also specify if you want animation to occur. If you don't provide this
900
+ // argument then the animateScroll value from the settings object is used instead.
901
+ scrollToElement: function(ele, stickToTop, animate)
902
+ {
903
+ scrollToElement(ele, stickToTop, animate);
904
+ },
905
+ // Scrolls the pane so that the specified co-ordinates within the content are at the top left
906
+ // of the viewport. animate is optional and if not passed then the value of animateScroll from
907
+ // the settings object this jScrollPane was initialised with is used.
908
+ scrollTo: function(destX, destY, animate)
909
+ {
910
+ scrollToX(destX, animate);
911
+ scrollToY(destY, animate);
912
+ },
913
+ // Scrolls the pane so that the specified co-ordinate within the content is at the left of the
914
+ // viewport. animate is optional and if not passed then the value of animateScroll from the settings
915
+ // object this jScrollPane was initialised with is used.
916
+ scrollToX: function(destX, animate)
917
+ {
918
+ scrollToX(destX, animate);
919
+ },
920
+ // Scrolls the pane so that the specified co-ordinate within the content is at the top of the
921
+ // viewport. animate is optional and if not passed then the value of animateScroll from the settings
922
+ // object this jScrollPane was initialised with is used.
923
+ scrollToY: function(destY, animate)
924
+ {
925
+ scrollToY(destY, animate);
926
+ },
927
+ // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then
928
+ // the value of animateScroll from the settings object this jScrollPane was initialised with is used.
929
+ scrollBy: function(deltaX, deltaY, animate)
930
+ {
931
+ jsp.scrollByX(deltaX, animate);
932
+ jsp.scrollByY(deltaY, animate);
933
+ },
934
+ // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then
935
+ // the value of animateScroll from the settings object this jScrollPane was initialised with is used.
936
+ scrollByX: function(deltaX, animate)
937
+ {
938
+ var destX = contentPositionX() + deltaX,
939
+ percentScrolled = destX / (contentWidth - paneWidth);
940
+ positionDragX(percentScrolled * dragMaxX, animate);
941
+ },
942
+ // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then
943
+ // the value of animateScroll from the settings object this jScrollPane was initialised with is used.
944
+ scrollByY: function(deltaY, animate)
945
+ {
946
+ var destY = contentPositionY() + deltaY,
947
+ percentScrolled = destY / (contentHeight - paneHeight);
948
+ positionDragY(percentScrolled * dragMaxY, animate);
949
+ },
950
+ // This method is called when jScrollPane is trying to animate to a new position. You can override
951
+ // it if you want to provide advanced animation functionality. It is passed the following arguments:
952
+ // * ele - the element whose position is being animated
953
+ // * prop - the property that is being animated
954
+ // * value - the value it's being animated to
955
+ // * stepCallback - a function that you must execute each time you update the value of the property
956
+ // You can use the default implementation (below) as a starting point for your own implementation.
957
+ animate: function(ele, prop, value, stepCallback)
958
+ {
959
+ var params = {};
960
+ params[prop] = value;
961
+ ele.animate(
962
+ params,
963
+ {
964
+ 'duration' : settings.animateDuration,
965
+ 'ease' : settings.animateEase,
966
+ 'queue' : false,
967
+ 'step' : stepCallback
968
+ }
969
+ );
970
+ },
971
+ // Returns the current x position of the viewport with regards to the content pane.
972
+ getContentPositionX: function()
973
+ {
974
+ return contentPositionX();
975
+ },
976
+ // Returns the current y position of the viewport with regards to the content pane.
977
+ getContentPositionY: function()
978
+ {
979
+ return contentPositionY();
980
+ },
981
+ // Returns whether or not this scrollpane has a horizontal scrollbar.
982
+ getIsScrollableH: function()
983
+ {
984
+ return isScrollableH;
985
+ },
986
+ // Returns whether or not this scrollpane has a vertical scrollbar.
987
+ getIsScrollableV: function()
988
+ {
989
+ return isScrollableV;
990
+ },
991
+ // Gets a reference to the content pane. It is important that you use this method if you want to
992
+ // edit the content of your jScrollPane as if you access the element directly then you may have some
993
+ // problems (as your original element has had additional elements for the scrollbars etc added into
994
+ // it).
995
+ getContentPane: function()
996
+ {
997
+ return pane;
998
+ },
999
+ // Scrolls this jScrollPane down as far as it can currently scroll. If animate isn't passed then the
1000
+ // animateScroll value from settings is used instead.
1001
+ scrollToBottom: function(animate)
1002
+ {
1003
+ positionDragY(dragMaxY, animate);
1004
+ },
1005
+ // Hijacks the links on the page which link to content inside the scrollpane. If you have changed
1006
+ // the content of your page (e.g. via AJAX) and want to make sure any new anchor links to the
1007
+ // contents of your scroll pane will work then call this function.
1008
+ hijackInternalLinks: function()
1009
+ {
1010
+ hijackInternalLinks();
1011
+ }
1012
+ }
1013
+ );
1014
+ }
1015
+
1016
+ // Pluginifying code...
1017
+
1018
+ settings = $.extend({}, $.fn.jScrollPane.defaults, settings);
1019
+
1020
+ var ret;
1021
+ this.each(
1022
+ function()
1023
+ {
1024
+ var elem = $(this), jspApi = elem.data('jsp');
1025
+ if (jspApi) {
1026
+ jspApi.reinitialise(settings);
1027
+ } else {
1028
+ jspApi = new JScrollPane(elem, settings);
1029
+ elem.data('jsp', jspApi);
1030
+ }
1031
+ ret = ret ? ret.add(elem) : elem;
1032
+ }
1033
+ )
1034
+ return ret;
1035
+ };
1036
+
1037
+ $.fn.jScrollPane.defaults = {
1038
+ 'showArrows' : false,
1039
+ 'maintainPosition' : true,
1040
+ 'autoReinitialise' : false,
1041
+ 'autoReinitialiseDelay' : 500,
1042
+ 'verticalDragMinHeight' : 0,
1043
+ 'verticalDragMaxHeight' : 99999,
1044
+ 'horizontalDragMinWidth' : 0,
1045
+ 'horizontalDragMaxWidth' : 99999,
1046
+ 'animateScroll' : false,
1047
+ 'animateDuration' : 300,
1048
+ 'animateEase' : 'linear',
1049
+ 'hijackInternalLinks' : false,
1050
+ 'verticalGutter' : 4,
1051
+ 'horizontalGutter' : 4,
1052
+ 'mouseWheelSpeed' : 10,
1053
+ 'arrowButtonSpeed' : 10,
1054
+ 'arrowRepeatFreq' : 100,
1055
+ 'arrowScrollOnHover' : false,
1056
+ 'verticalArrowPositions' : 'split',
1057
+ 'horizontalArrowPositions' : 'split',
1058
+ 'enableKeyboardNavigation' : true,
1059
+ 'hideFocus' : false
1060
+ };
1061
+
1062
+ })(jQuery,this);
1063
+