phcthemes_web_theme_pack 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 (250) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +0 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/config/phcthemes_web_theme_pack_manifest.js +3 -0
  6. data/app/assets/javascripts/common/backstretch/jquery.backstretch.js +1602 -0
  7. data/app/assets/javascripts/common/bootstrap-datepicker/bootstrap-datepicker.js +2039 -0
  8. data/app/assets/javascripts/common/bootstrap-markdown/bootstrap-markdown.js +1390 -0
  9. data/app/assets/javascripts/common/bootstrap-select/bootstrap-select.js +3139 -0
  10. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-am_ET.js +46 -0
  11. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-am_ET.js.map +1 -0
  12. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-am_ET.min.js +8 -0
  13. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ar_AR.js +51 -0
  14. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ar_AR.js.map +1 -0
  15. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ar_AR.min.js +8 -0
  16. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-bg_BG.js +46 -0
  17. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-bg_BG.js.map +1 -0
  18. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-bg_BG.min.js +8 -0
  19. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-cs_CZ.js +39 -0
  20. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-cs_CZ.js.map +1 -0
  21. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-cs_CZ.min.js +8 -0
  22. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-da_DK.js +46 -0
  23. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-da_DK.js.map +1 -0
  24. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-da_DK.min.js +8 -0
  25. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-de_DE.js +46 -0
  26. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-de_DE.js.map +1 -0
  27. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-de_DE.min.js +8 -0
  28. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-en_US.js +46 -0
  29. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-en_US.js.map +1 -0
  30. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-en_US.min.js +8 -0
  31. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-es_CL.js +39 -0
  32. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-es_CL.js.map +1 -0
  33. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-es_CL.min.js +8 -0
  34. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-es_ES.js +39 -0
  35. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-es_ES.js.map +1 -0
  36. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-es_ES.min.js +8 -0
  37. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-et_EE.js +46 -0
  38. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-et_EE.js.map +1 -0
  39. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-et_EE.min.js +8 -0
  40. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-eu.js +39 -0
  41. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-eu.js.map +1 -0
  42. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-eu.min.js +8 -0
  43. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fa_IR.js +39 -0
  44. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fa_IR.js.map +1 -0
  45. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fa_IR.min.js +8 -0
  46. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fi_FI.js +46 -0
  47. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fi_FI.js.map +1 -0
  48. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fi_FI.min.js +8 -0
  49. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fr_FR.js +46 -0
  50. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fr_FR.js.map +1 -0
  51. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-fr_FR.min.js +8 -0
  52. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-hr_HR.js +46 -0
  53. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-hr_HR.js.map +1 -0
  54. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-hr_HR.min.js +8 -0
  55. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-hu_HU.js +46 -0
  56. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-hu_HU.js.map +1 -0
  57. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-hu_HU.min.js +8 -0
  58. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-id_ID.js +39 -0
  59. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-id_ID.js.map +1 -0
  60. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-id_ID.min.js +8 -0
  61. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-it_IT.js +41 -0
  62. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-it_IT.js.map +1 -0
  63. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-it_IT.min.js +8 -0
  64. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ja_JP.js +39 -0
  65. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ja_JP.js.map +1 -0
  66. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ja_JP.min.js +8 -0
  67. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-kh_KM.js +46 -0
  68. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-kh_KM.js.map +1 -0
  69. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-kh_KM.min.js +8 -0
  70. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ko_KR.js +46 -0
  71. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ko_KR.js.map +1 -0
  72. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ko_KR.min.js +8 -0
  73. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-lt_LT.js +46 -0
  74. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-lt_LT.js.map +1 -0
  75. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-lt_LT.min.js +8 -0
  76. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-lv_LV.js +46 -0
  77. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-lv_LV.js.map +1 -0
  78. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-lv_LV.min.js +8 -0
  79. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-nb_NO.js +46 -0
  80. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-nb_NO.js.map +1 -0
  81. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-nb_NO.min.js +8 -0
  82. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-nl_NL.js +39 -0
  83. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-nl_NL.js.map +1 -0
  84. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-nl_NL.min.js +8 -0
  85. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pl_PL.js +39 -0
  86. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pl_PL.js.map +1 -0
  87. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pl_PL.min.js +8 -0
  88. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pt_BR.js +39 -0
  89. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pt_BR.js.map +1 -0
  90. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pt_BR.min.js +8 -0
  91. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pt_PT.js +39 -0
  92. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pt_PT.js.map +1 -0
  93. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-pt_PT.min.js +8 -0
  94. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ro_RO.js +40 -0
  95. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ro_RO.js.map +1 -0
  96. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ro_RO.min.js +8 -0
  97. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ru_RU.js +40 -0
  98. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ru_RU.js.map +1 -0
  99. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ru_RU.min.js +8 -0
  100. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sk_SK.js +39 -0
  101. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sk_SK.js.map +1 -0
  102. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sk_SK.min.js +8 -0
  103. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sl_SI.js +44 -0
  104. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sl_SI.js.map +1 -0
  105. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sl_SI.min.js +8 -0
  106. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sv_SE.js +46 -0
  107. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sv_SE.js.map +1 -0
  108. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-sv_SE.min.js +8 -0
  109. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-tr_TR.js +46 -0
  110. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-tr_TR.js.map +1 -0
  111. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-tr_TR.min.js +8 -0
  112. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ua_UA.js +39 -0
  113. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ua_UA.js.map +1 -0
  114. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-ua_UA.min.js +8 -0
  115. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-vi_VN.js +46 -0
  116. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-vi_VN.js.map +1 -0
  117. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-vi_VN.min.js +8 -0
  118. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-zh_CN.js +39 -0
  119. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-zh_CN.js.map +1 -0
  120. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-zh_CN.min.js +8 -0
  121. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-zh_TW.js +39 -0
  122. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-zh_TW.js.map +1 -0
  123. data/app/assets/javascripts/common/bootstrap-select/i18n/defaults-zh_TW.min.js +8 -0
  124. data/app/assets/javascripts/common/bootstrap/bootstrap.bundle.js +7013 -0
  125. data/app/assets/javascripts/common/custom/custom.js +0 -0
  126. data/app/assets/javascripts/common/daterangepicker/daterangepicker.js +1565 -0
  127. data/app/assets/javascripts/common/flexslider/jquery.flexslider.js +1252 -0
  128. data/app/assets/javascripts/common/greenstock/greensock.js +36 -0
  129. data/app/assets/javascripts/common/icheck/icheck.js +509 -0
  130. data/app/assets/javascripts/common/imagesloaded/imagesloaded.pkgd.js +497 -0
  131. data/app/assets/javascripts/common/isotope/isotope.pkgd.js +3563 -0
  132. data/app/assets/javascripts/common/jquery-countdown/jquery.countdown.js +246 -0
  133. data/app/assets/javascripts/common/jquery-filterizer/jquery.filterizr.min.js +1 -0
  134. data/app/assets/javascripts/common/jquery-placeholder/jquery.placeholder.js +281 -0
  135. data/app/assets/javascripts/common/jquery-validation/jquery.validate.js +1650 -0
  136. data/app/assets/javascripts/common/jqvmap/jquery.vmap.js +1281 -0
  137. data/app/assets/javascripts/common/jqvmap/jquery.vmap.min.js +10 -0
  138. data/app/assets/javascripts/common/jqvmap/maps/continents/jquery.vmap.africa.js +2 -0
  139. data/app/assets/javascripts/common/jqvmap/maps/continents/jquery.vmap.asia.js +2 -0
  140. data/app/assets/javascripts/common/jqvmap/maps/continents/jquery.vmap.australia.js +2 -0
  141. data/app/assets/javascripts/common/jqvmap/maps/continents/jquery.vmap.europe.js +2 -0
  142. data/app/assets/javascripts/common/jqvmap/maps/continents/jquery.vmap.north-america.js +2 -0
  143. data/app/assets/javascripts/common/jqvmap/maps/continents/jquery.vmap.south-america.js +2 -0
  144. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.algeria.js +2 -0
  145. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.argentina.js +1 -0
  146. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.brazil.js +2 -0
  147. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.canada.js +2 -0
  148. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.europe.js +2 -0
  149. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.france.js +1 -0
  150. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.germany.js +2 -0
  151. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.greece.js +1 -0
  152. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.iran.js +6 -0
  153. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.iraq.js +1 -0
  154. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.russia.js +2 -0
  155. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.tunisia.js +2 -0
  156. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.turkey.js +11 -0
  157. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.usa.js +2 -0
  158. data/app/assets/javascripts/common/jqvmap/maps/jquery.vmap.world.js +2 -0
  159. data/app/assets/javascripts/common/js-cookie/js.cookie.js +165 -0
  160. data/app/assets/javascripts/common/layerslider/layerslider.kreaturamedia.jquery.js +13 -0
  161. data/app/assets/javascripts/common/layerslider/layerslider.origami.js +13 -0
  162. data/app/assets/javascripts/common/layerslider/layerslider.timeline.js +13 -0
  163. data/app/assets/javascripts/common/layerslider/layerslider.transitions.js +13 -0
  164. data/app/assets/javascripts/common/leaflet/leaflet.js +5 -0
  165. data/app/assets/javascripts/common/magnific-popup/jquery.magnific-popup.js +1860 -0
  166. data/app/assets/javascripts/common/mapbox/mapbox.js +51 -0
  167. data/app/assets/javascripts/common/moderizer/modernizr.js +11 -0
  168. data/app/assets/javascripts/common/owl-carousel/owl.carousel.js +3448 -0
  169. data/app/assets/javascripts/common/pace/pace.js +935 -0
  170. data/app/assets/javascripts/common/paroller/jquery.paroller.js +228 -0
  171. data/app/assets/javascripts/common/particlejs/particles.js +1541 -0
  172. data/app/assets/javascripts/common/plyr/plyr.js +9137 -0
  173. data/app/assets/javascripts/common/rangeslider/rangeslider.js +498 -0
  174. data/app/assets/javascripts/common/retina/retina.js +100 -0
  175. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.actions.js +386 -0
  176. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.carousel.js +365 -0
  177. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.kenburn.js +199 -0
  178. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.layeranimation.js +2524 -0
  179. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.migration.js +260 -0
  180. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.navigation.js +1156 -0
  181. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.parallax.js +465 -0
  182. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.slideanims.js +1447 -0
  183. data/app/assets/javascripts/common/rev-slider/extensions/revolution.extension.video.js +1464 -0
  184. data/app/assets/javascripts/common/rev-slider/jquery.themepunch.revolution.js +3286 -0
  185. data/app/assets/javascripts/common/rev-slider/jquery.themepunch.tools.min.js +8710 -0
  186. data/app/assets/javascripts/common/scrollup/jquery.scrollUp.js +168 -0
  187. data/app/assets/javascripts/common/select2/select2.full.js +6597 -0
  188. data/app/assets/javascripts/common/selectbox/jquery.selectBox.js +1092 -0
  189. data/app/assets/javascripts/common/smooth-scroll/SmoothScroll.js +788 -0
  190. data/app/assets/javascripts/common/spectrum/spectrum.js +2323 -0
  191. data/app/assets/javascripts/common/stepper/jquery.fs.stepper.js +339 -0
  192. data/app/assets/javascripts/common/swiper/swiper.js +8124 -0
  193. data/app/assets/javascripts/common/typed/typed.js +1045 -0
  194. data/app/assets/javascripts/common/visable/jquery.visible.js +68 -0
  195. data/app/assets/javascripts/common/waypoints/jquery.waypoints.js +662 -0
  196. data/app/assets/javascripts/phcthemes_web_theme_pack_appstrap.js +11 -0
  197. data/app/assets/javascripts/phcthemes_web_theme_pack_basic.js +39 -0
  198. data/app/assets/javascripts/phcthemes_web_theme_pack_bold.js +34 -0
  199. data/app/assets/javascripts/phcthemes_web_theme_pack_coloradmin.js +12 -0
  200. data/app/assets/javascripts/phcthemes_web_theme_pack_devine_villas.js +20 -0
  201. data/app/assets/javascripts/phcthemes_web_theme_pack_smarty.js +57 -0
  202. data/app/assets/javascripts/phcthemes_web_theme_pack_xero.js +18 -0
  203. data/app/assets/javascripts/phcthemes_web_theme_pack_zoner.js +24 -0
  204. data/app/assets/javascripts/themes/appstrap/custom/custom.js +0 -0
  205. data/app/assets/javascripts/themes/appstrap/theme/custom-script.js +69 -0
  206. data/app/assets/javascripts/themes/appstrap/theme/script.js +3096 -0
  207. data/app/assets/javascripts/themes/basic/custom/custom.js +0 -0
  208. data/app/assets/javascripts/themes/bold/custom/custom.js +0 -0
  209. data/app/assets/javascripts/themes/coloradmin/custom/custom.js +0 -0
  210. data/app/assets/javascripts/themes/coloradmin/theme/apps.js +236 -0
  211. data/app/assets/javascripts/themes/devine_villas/custom/custom.js +0 -0
  212. data/app/assets/javascripts/themes/devine_villas/theme/dashboard.js +19 -0
  213. data/app/assets/javascripts/themes/devine_villas/theme/main.js +384 -0
  214. data/app/assets/javascripts/themes/devine_villas/theme/map.js +563 -0
  215. data/app/assets/javascripts/themes/devine_villas/theme/searchmap.js +69 -0
  216. data/app/assets/javascripts/themes/smarty/custom/custom.js +0 -0
  217. data/app/assets/javascripts/themes/smarty/theme/scripts.js +4271 -0
  218. data/app/assets/javascripts/themes/xero/custom/custom.js +0 -0
  219. data/app/assets/javascripts/themes/xero/theme/app.js +696 -0
  220. data/app/assets/javascripts/themes/zoner/custom-maps/custom-map.js +289 -0
  221. data/app/assets/javascripts/themes/zoner/custom/custom.js +0 -0
  222. data/app/assets/javascripts/themes/zoner/draggable/draggable.js +196 -0
  223. data/app/assets/javascripts/themes/zoner/jquery-dependclass/dependclass.js +56 -0
  224. data/app/assets/javascripts/themes/zoner/jquery-slider/jquery.slider.js +700 -0
  225. data/app/assets/javascripts/themes/zoner/jquery-vanillabox/jquery.vanillabox.min.js +24 -0
  226. data/app/assets/javascripts/themes/zoner/jshashtable/hashtable.js +402 -0
  227. data/app/assets/javascripts/themes/zoner/numberformatter/numberformatter.js +566 -0
  228. data/app/assets/javascripts/themes/zoner/simple-js-templating/tmpl.js +35 -0
  229. data/app/assets/javascripts/themes/zoner/theme/main.js +667 -0
  230. data/app/assets/stylesheets/common/custom/custom.scss +0 -0
  231. data/app/assets/stylesheets/phcthemes_web_theme_pack_appstrap.scss +28 -0
  232. data/app/assets/stylesheets/phcthemes_web_theme_pack_basic.scss +0 -0
  233. data/app/assets/stylesheets/phcthemes_web_theme_pack_bold.scss +21 -0
  234. data/app/assets/stylesheets/phcthemes_web_theme_pack_coloradmin.scss +22 -0
  235. data/app/assets/stylesheets/phcthemes_web_theme_pack_devine_villas.scss +28 -0
  236. data/app/assets/stylesheets/phcthemes_web_theme_pack_smarty.scss +47 -0
  237. data/app/assets/stylesheets/phcthemes_web_theme_pack_xero.scss +28 -0
  238. data/app/assets/stylesheets/phcthemes_web_theme_pack_zoner.scss +22 -0
  239. data/app/assets/stylesheets/themes/appstrap/custom/custom.scss +0 -0
  240. data/app/assets/stylesheets/themes/bold/custom/custom.scss +0 -0
  241. data/app/assets/stylesheets/themes/coloradmin/custom/custom.scss +0 -0
  242. data/app/assets/stylesheets/themes/devine_villas/custom/custom.scss +0 -0
  243. data/app/assets/stylesheets/themes/smarty/custom/custom.scss +0 -0
  244. data/app/assets/stylesheets/themes/xero/custom/custom.scss +0 -0
  245. data/app/assets/stylesheets/themes/zoner/custom/custom.scss +0 -0
  246. data/lib/phcthemes_web_theme_pack.rb +5 -0
  247. data/lib/phcthemes_web_theme_pack/engine.rb +13 -0
  248. data/lib/phcthemes_web_theme_pack/version.rb +3 -0
  249. data/lib/tasks/phcthemes_web_theme_pack_tasks.rake +4 -0
  250. metadata +375 -0
@@ -0,0 +1,24 @@
1
+ (function($){/*
2
+ Vanillabox
3
+ (C) 2013 cocopon.
4
+
5
+ Licensed under the MIT license:
6
+ http://www.opensource.org/licenses/mit-license.php
7
+ */
8
+ var d;function h(){}function k(a,b){return void 0!==a?a:b}function l(a){function b(){}b.prototype=m.prototype;a.prototype=new b}function n(a,b){var c=a.length,e;for(e=0;e<c;e++)b.call(this,a[e],e)}function q(a,b){var c=[],e=a.length,f;for(f=0;f<e;f++)c.push(b.call(this,a[f],f));return c}function r(){var a=new $.Deferred;setTimeout(function(){a.resolve()},0);return a.promise()}function s(){return!!navigator.userAgent.match(/(ipod|iphone|ipad)/ig)};function t(){};var u={ra:function(a){return a.a.show()},ba:function(a){return a.a.hide()},qa:function(a){u.Q(a);return a.a.show()},aa:function(a){return a.a.hide()},Q:function(a){var b=a.f,c=b.p(),e=v(a,c);b.a.css({width:c.width,height:c.height});a.a.css({left:e.left,top:e.top});return r()},pa:function(a){return a.a.show()},$:function(a){return a.a.hide()}},w={ra:function(a){return a.a.fadeIn(200)},ba:function(a){return a.a.fadeOut(300)},ta:function(a,b,c,e){var f=a.f.a;f.stop();b=f.animate({width:b.width,height:b.height},
9
+ e);a=a.a;a.stop();c=a.animate({left:c.left,top:c.top},e);return $.when(b,c)},qa:function(a){var b=a.f,c=b.p(),e=v(a,c);b.a.css({width:c.width,height:c.height});a.a.css({left:e.left,top:e.top});return r()},aa:function(){return r()},Q:function(a){var b=a.f.p(),c=v(a,b);return w.ta(a,b,c,300)},pa:function(a){return a.a.fadeIn(200)},$:function(a){return a.a.fadeOut(300)}};var x={none:u,"default":w};function z(){this.c()}d=z.prototype;d.c=function(){var a=$("<div>");a.addClass("vnbx-mask");this.a=a;this.e()};d.b=function(){this.g();this.a=null};d.e=function(){$(window).on("resize",$.proxy(this.H,this));this.a.on("click",$.proxy(this.o,this))};d.g=function(){$(window).off("resize",this.H);this.a.off("click",this.o)};d.B=function(){var a=this.a;a.width("");a.height("");var b=$(window),c=$(document),e=Math.max(c.width(),b.width()),b=Math.max(c.height(),b.height());a.width(e);a.height(b)};d.H=function(){this.B()};
10
+ d.o=function(){$(this).trigger("vnbx_click")};function A(a){a=a||{};this.l=k(a.u,w);this.k=k(a.s,"both");this.c()}d=A.prototype;d.c=function(){var a=$("<div>");a.addClass("vnbx-container");this.a=a;this.e()};d.b=function(){this.g();this.a=null};d.e=function(){};d.g=function(){this.w()};d.S=function(){$(this.d).on("vnbx_complete",$.proxy(this.D,this))};d.w=function(){$(this.d).off("vnbx_complete",this.D)};d.p=function(){var a=this.d,b={width:0,height:0};a&&(b=a.p());return{width:Math.max(b.width,200),height:Math.max(b.height,150)}};
11
+ function B(a){a.ea={width:!0===a.k||"both"===a.k||"horizontal"===a.k?(window.innerWidth||document.documentElement.clientWidth)-100:Number.MAX_VALUE,height:!0===a.k||"both"===a.k||"vertical"===a.k?(window.innerHeight||document.documentElement.clientHeight)-100:Number.MAX_VALUE};a.d&&C(a)}function C(a){var b=a.ea;a.d.W(Math.max(b.width,200),Math.max(b.height,150))}d.B=function(){var a=this.d,b=a.p();a.a.css({marginLeft:-Math.round(b.width/2),marginTop:-Math.round(b.height/2)})};d.D=function(){this.B()};function D(a){a=a||{};this.f=new A({u:a.u,s:a.s});this.c();this.e()}d=D.prototype;d.c=function(){var a=$("<div>");a.addClass("vnbx-frame");this.a=a;this.a.append(this.f.a)};d.b=function(){this.f.b();this.f=null;this.g();this.a=null};d.e=function(){this.a.on("click",$.proxy(this.o,this))};d.g=function(){this.a.off("click",this.o)};
12
+ function v(a,b){var c=a.f.a,e=c.width(),f=c.height();c.width(b.width);c.height(b.height);var g=$(window),p=a.a,y=window.innerWidth||document.documentElement.clientWidth,S=window.innerHeight||document.documentElement.clientHeight,y=Math.round(g.scrollLeft()+(y-p.outerWidth())/2),g=Math.max(Math.round(g.scrollTop()+(S-p.outerHeight())/2),0);c.width(e);c.height(f);return{left:y,top:g}}d.o=function(a){a.stopPropagation()};function m(a){a=a||{};this.sa=this.da=!1;this.oa=a.path;this.Ca=k(a.title,"");this.c()}d=m.prototype;d.c=function(){var a=$("<div>");a.addClass("vnbx-content");this.a=a;this.X();this.e()};d.X=h;d.e=h;d.g=h;d.b=function(){this.g();this.a=null};d.p=function(){var a=this.a;return{width:a.width(),height:a.height()}};d.W=function(a,b){this.a.css({maxWidth:a,maxHeight:b})};d.load=function(){this.a.addClass("vnbx-loading");this.da?E(this,this.sa):this.U()};d.U=h;
13
+ function E(a,b){var c=a.a;a.da=!0;a.sa=b;c.removeClass("vnbx-loading");b||c.addClass("vnbx-error");$(a).trigger("vnbx_complete",b)}function F(a){m.call(this,a)}l(F);F.prototype.c=function(){m.prototype.c.call(this);this.a.addClass("vnbx-empty")};F.prototype.load=function(){var a=this;setTimeout(function(){$(a).trigger("vnbx_complete",!0)},0)};function G(a){m.call(this,a)}l(G);d=G.prototype;d.X=function(){var a=$("<img>");this.a.append(a);this.A=a};d.b=function(){m.prototype.b.call(this);this.A=null};
14
+ d.e=function(){var a=this.A;a.on("load",$.proxy(this.G,this));a.on("error",$.proxy(this.F,this))};d.g=function(){var a=this.A;a.off("load",this.G);a.off("error",this.F)};d.W=function(a,b){this.A.css({maxWidth:a,maxHeight:b})};d.U=function(){this.A.attr("src",this.oa)};d.G=function(){E(this,!0)};d.F=function(){E(this,!1)};function H(a){a=a||{};this.ya=a.J;this.xa=a.I;m.call(this,a)}l(H);d=H.prototype;d.X=function(){var a=$("<iframe>");a.attr("frameborder",0);this.a.append(a);this.m=a};
15
+ d.b=function(){m.prototype.b.call(this);this.m=null};d.e=function(){var a=this.m;a.on("load",$.proxy(this.G,this));a.on("error",$.proxy(this.F,this))};d.g=function(){var a=this.m;a.off("load",this.G);a.off("error",this.F)};d.p=function(){var a=s()?this.a:this.m;return{width:a.width(),height:a.height()}};d.W=function(a,b){(s()?this.a:this.m).css({maxWidth:a,maxHeight:b})};d.U=function(){this.m.attr("src",this.oa)};
16
+ d.G=function(){if(this.m.attr("src")){var a=s()?this.a:this.m;a.width(this.ya);a.height(this.xa);E(this,!0)}};d.F=function(){E(this,!1)};var I={image:function(a){return new G({path:a.attr("href"),title:a.attr("title")})},iframe:function(a,b){return new H({path:a.attr("href"),J:b.J,I:b.I,title:a.attr("title")})}};function J(a){a=a||{};this.q=k(a.Da,1);this.t=k(a.loop,!1);K(this,k(a.page,0))}function K(a,b){var c=a.h,e=a.q,e=Math.min(Math.max(b,0),e-1);a.h=e;c!==e&&$(a).trigger("vnbx_change")}J.prototype.next=function(){var a=this.q,b=this.h,c=b+1;c>a-1&&(c=this.t?0:a-1);this.h=c;b!==c&&$(this).trigger("vnbx_change")};J.prototype.L=function(){var a=this.q,b=this.h,c=b-1;0>c&&(c=this.t?a-1:0);this.h=c;b!==c&&$(this).trigger("vnbx_change")};function L(a){this.v=a.r;this.T=k(a.disabled,!1);this.c()}d=L.prototype;d.c=function(){var a=$("<div>");a.addClass("vnbx-button");this.v&&a.addClass(this.v);a.attr("ontouchstart","void(0)");this.a=a;this.e()};d.b=function(){this.a=null};d.e=function(){this.a.on("click",$.proxy(this.o,this))};d.g=function(){this.a.off("click",this.o)};function M(a,b){var c=a.a;a.T=b;a.T?c.addClass("vnbx-disabled"):c.removeClass("vnbx-disabled")}d.o=function(a){a.stopPropagation();this.T||$(this).trigger("vnbx_click")};function N(a){this.v=a.r;this.c()}N.prototype.c=function(){var a=$("<div>");a.addClass("vnbx-label");this.v&&a.addClass(this.v);this.a=a};N.prototype.b=function(){this.a=null};function O(a){if(!a.Y||0===a.Y.length)throw new t;this.R=!1;this.M=a.Y;this.l=k(a.u,w);this.Aa=a.za;this.Ba=a.wa;this.N=a.ua;this.k=a.s;this.va={J:a.J,I:a.I,type:a.type};this.j=new J({loop:a.loop,Da:this.M.length});this.c()}d=O.prototype;
17
+ d.c=function(){var a=this,b=new z,c=b.a;c.addClass("vnbx");c.hide();$("body").append(c);a.n=b;P(a);var e=new D({u:a.l,s:a.k}),b=e.a;a.i=e;c.append(b);c=new N({r:"vnbx-title"});a.Z=c;b.append(c.a);c=new N({r:"vnbx-pager"});a.V=c;b.append(c.a);c=new L({r:"vnbx-prev"});a.K=c;b.append(c.a);c=new L({r:"vnbx-next"});a.C=c;b.append(c.a);c=new L({r:"vnbx-close"});a.N||c.a.hide();a.O=c;b.append(c.a);a.e();b=q(a.M,function(b){b=$(b);var c=a.va,e=I[c.type];if(!e)throw new t;return e(b,c)});a.P=b;b=new F;Q(a,
18
+ b)};function P(a){var b=a.n.a;s()&&b.addClass("vnbx-ios");a.N&&b.addClass("vnbx-close-button-enabled");1<a.j.q&&b.addClass("vnbx-group")}d.b=function(){R(this);this.g();n(this.P,function(a){a.b()});this.P=null;this.Z.b();this.Z=null;this.V.b();this.V=null;this.O.b();this.O=null;this.K.b();this.K=null;this.C.b();this.C=null;this.i.b();this.i=null;this.n.a.remove();this.n.b();this.n=null};
19
+ d.e=function(){this.M.on("click",$.proxy(this.ma,this));$(this.n).on("vnbx_click",$.proxy(this.ia,this));$(this.j).on("vnbx_change",$.proxy(this.ka,this));$(this.O).on("vnbx_click",$.proxy(this.fa,this));$(this.K).on("vnbx_click",$.proxy(this.la,this));$(this.C).on("vnbx_click",$.proxy(this.ja,this))};
20
+ d.g=function(){this.M.off("click",this.ma);$(this.n).off("vnbx_click",this.ia);$(this.j).off("vnbx_change",this.ka);$(this.O).off("vnbx_click",this.fa);$(this.K).off("vnbx_click",this.la);$(this.C).off("vnbx_click",this.ja);this.w();this.d=null};function T(a){var b=$(window),c=$(document);b.on("resize",$.proxy(a.H,a));b.on("scroll",$.proxy(a.na,a));c.on("keyup",$.proxy(a.ha,a))}function R(a){var b=$(window),c=$(document);b.off("resize",a.H,a);b.off("scroll",a.na,a);c.off("keyup",a.ha,a)}
21
+ d.S=function(){var a=this.i.f.d,b=a.a;$(a).on("vnbx_complete",$.proxy(this.D,this));b.on("click",$.proxy(this.ga,this))};d.w=function(){var a=this.i.f.d,b=a.a;$(a).off("complete",this.D);b.off("click",this.ga)};d.show=function(a){var b=this,c=b.l;if(b.R)return r();b.R=!0;T(b);B(b.i.f);var e=b.n;e.B();var e=c.ra(e),c=c.qa(b.i),f=b.j;a=k(a,0);var g=a!==f.h;K(f,a);g||U(b);return $.when(e,c).then(function(){$(b).trigger("vnbx_show")})};
22
+ d.hide=function(){var a=this;return a.R?$.when(a.l.aa(a.i),a.l.ba(a.n)).then(function(){R(a);a.R=!1;$(a).trigger("vnbx_hide")}):r()};d.L=function(){this.j.L()};d.next=function(){this.j.next()};function Q(a,b){var c=a.i.f,e=a.i.f.d;if(e!==b){e&&a.w();e=c.l;c.d&&(c.w(),e.$(c.d));c.d=b;c.S();c.ea&&C(c);var f=c.a,g=c.d.a,p=f.find("> *");0===p.length?f.append(g):g.insertBefore(p.first());e.pa(c.d);a.S();a.Z.a.text(b.Ca);b.load()}c.B()}
23
+ function U(a){var b=a.j;a.V.a.text(String(b.h+1)+" of "+String(b.q));M(a.K,!(b.t||0<b.h));M(a.C,!(b.t||b.h<b.q-1));Q(a,a.P[a.j.h])}function V(a){a.ca&&clearTimeout(a.ca);a.ca=setTimeout(function(){a.Aa&&a.l.Q(a.i)},300)}d.H=function(){V(this)};d.na=function(){V(this)};d.ha=function(a){if(this.Ba)switch(a.keyCode){case 27:this.hide();break;case 37:this.L();break;case 39:this.next()}};d.ma=function(a){var b=this.M.index(a.delegateTarget);0>b||(a.preventDefault(),this.show(b))};d.ka=function(){U(this)};
24
+ d.ia=function(){this.N||this.hide()};d.fa=function(){this.N&&this.hide()};d.la=function(){this.L()};d.ja=function(){this.next()};d.D=function(a,b){this.l.Q(this.i);var c=a.target,e;a:{e=this.P;var f=e.length,g;for(g=0;g<f;g++)if(e[g]===c){e=g;break a}e=-1}0<=e&&$(this).trigger("vnbx_load",[b,c,e])};d.ga=function(a){var b=this.j;a.stopPropagation();b.t||b.h<b.q-1?this.next():this.hide()};var W={animation:"default",closeButton:!1,adjustToWindow:"both",keyboard:!0,loop:!1,preferredHeight:600,preferredWidth:800,repositionOnScroll:!1,type:"image"};$.fn.Ea=function(a){var b={};$.extend(b,W);$.extend(b,a);a=$(this);return new O({u:x[b.animation]||w,ua:b.closeButton,s:b.adjustToWindow,wa:b.keyboard,loop:b.loop,I:b.preferredHeight,J:b.preferredWidth,za:b.repositionOnScroll,Y:a,type:b.type})};$.fn.vanillabox=$.fn.Ea;O.prototype.dispose=O.prototype.b;O.prototype.hide=O.prototype.hide;O.prototype.next=O.prototype.next;O.prototype.previous=O.prototype.L;O.prototype.show=O.prototype.show;})(jQuery);
@@ -0,0 +1,402 @@
1
+ /**
2
+ * @license jahashtable, a JavaScript implementation of a hash table. It creates a single constructor function called
3
+ * Hashtable in the global scope.
4
+ *
5
+ * http://www.timdown.co.uk/jshashtable/
6
+ * Copyright 2013 Tim Down.
7
+ * Version: 3.0
8
+ * Build date: 17 July 2013
9
+ *
10
+ * Licensed under the Apache License, Version 2.0 (the "License");
11
+ * you may not use this file except in compliance with the License.
12
+ * You may obtain a copy of the License at
13
+ *
14
+ * http://www.apache.org/licenses/LICENSE-2.0
15
+ *
16
+ * Unless required by applicable law or agreed to in writing, software
17
+ * distributed under the License is distributed on an "AS IS" BASIS,
18
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ * See the License for the specific language governing permissions and
20
+ * limitations under the License.
21
+ */
22
+ var Hashtable = (function(UNDEFINED) {
23
+ var FUNCTION = "function", STRING = "string", UNDEF = "undefined";
24
+
25
+ // Require Array.prototype.splice, Object.prototype.hasOwnProperty and encodeURIComponent. In environments not
26
+ // having these (e.g. IE <= 5), we bail out now and leave Hashtable null.
27
+ if (typeof encodeURIComponent == UNDEF ||
28
+ Array.prototype.splice === UNDEFINED ||
29
+ Object.prototype.hasOwnProperty === UNDEFINED) {
30
+ return null;
31
+ }
32
+
33
+ function toStr(obj) {
34
+ return (typeof obj == STRING) ? obj : "" + obj;
35
+ }
36
+
37
+ function hashObject(obj) {
38
+ var hashCode;
39
+ if (typeof obj == STRING) {
40
+ return obj;
41
+ } else if (typeof obj.hashCode == FUNCTION) {
42
+ // Check the hashCode method really has returned a string
43
+ hashCode = obj.hashCode();
44
+ return (typeof hashCode == STRING) ? hashCode : hashObject(hashCode);
45
+ } else {
46
+ return toStr(obj);
47
+ }
48
+ }
49
+
50
+ function merge(o1, o2) {
51
+ for (var i in o2) {
52
+ if (o2.hasOwnProperty(i)) {
53
+ o1[i] = o2[i];
54
+ }
55
+ }
56
+ }
57
+
58
+ function equals_fixedValueHasEquals(fixedValue, variableValue) {
59
+ return fixedValue.equals(variableValue);
60
+ }
61
+
62
+ function equals_fixedValueNoEquals(fixedValue, variableValue) {
63
+ return (typeof variableValue.equals == FUNCTION) ?
64
+ variableValue.equals(fixedValue) : (fixedValue === variableValue);
65
+ }
66
+
67
+ function createKeyValCheck(kvStr) {
68
+ return function(kv) {
69
+ if (kv === null) {
70
+ throw new Error("null is not a valid " + kvStr);
71
+ } else if (kv === UNDEFINED) {
72
+ throw new Error(kvStr + " must not be undefined");
73
+ }
74
+ };
75
+ }
76
+
77
+ var checkKey = createKeyValCheck("key"), checkValue = createKeyValCheck("value");
78
+
79
+ /*----------------------------------------------------------------------------------------------------------------*/
80
+
81
+ function Bucket(hash, firstKey, firstValue, equalityFunction) {
82
+ this[0] = hash;
83
+ this.entries = [];
84
+ this.addEntry(firstKey, firstValue);
85
+
86
+ if (equalityFunction !== null) {
87
+ this.getEqualityFunction = function() {
88
+ return equalityFunction;
89
+ };
90
+ }
91
+ }
92
+
93
+ var EXISTENCE = 0, ENTRY = 1, ENTRY_INDEX_AND_VALUE = 2;
94
+
95
+ function createBucketSearcher(mode) {
96
+ return function(key) {
97
+ var i = this.entries.length, entry, equals = this.getEqualityFunction(key);
98
+ while (i--) {
99
+ entry = this.entries[i];
100
+ if ( equals(key, entry[0]) ) {
101
+ switch (mode) {
102
+ case EXISTENCE:
103
+ return true;
104
+ case ENTRY:
105
+ return entry;
106
+ case ENTRY_INDEX_AND_VALUE:
107
+ return [ i, entry[1] ];
108
+ }
109
+ }
110
+ }
111
+ return false;
112
+ };
113
+ }
114
+
115
+ function createBucketLister(entryProperty) {
116
+ return function(aggregatedArr) {
117
+ var startIndex = aggregatedArr.length;
118
+ for (var i = 0, entries = this.entries, len = entries.length; i < len; ++i) {
119
+ aggregatedArr[startIndex + i] = entries[i][entryProperty];
120
+ }
121
+ };
122
+ }
123
+
124
+ Bucket.prototype = {
125
+ getEqualityFunction: function(searchValue) {
126
+ return (typeof searchValue.equals == FUNCTION) ? equals_fixedValueHasEquals : equals_fixedValueNoEquals;
127
+ },
128
+
129
+ getEntryForKey: createBucketSearcher(ENTRY),
130
+
131
+ getEntryAndIndexForKey: createBucketSearcher(ENTRY_INDEX_AND_VALUE),
132
+
133
+ removeEntryForKey: function(key) {
134
+ var result = this.getEntryAndIndexForKey(key);
135
+ if (result) {
136
+ this.entries.splice(result[0], 1);
137
+ return result[1];
138
+ }
139
+ return null;
140
+ },
141
+
142
+ addEntry: function(key, value) {
143
+ this.entries.push( [key, value] );
144
+ },
145
+
146
+ keys: createBucketLister(0),
147
+
148
+ values: createBucketLister(1),
149
+
150
+ getEntries: function(destEntries) {
151
+ var startIndex = destEntries.length;
152
+ for (var i = 0, entries = this.entries, len = entries.length; i < len; ++i) {
153
+ // Clone the entry stored in the bucket before adding to array
154
+ destEntries[startIndex + i] = entries[i].slice(0);
155
+ }
156
+ },
157
+
158
+ containsKey: createBucketSearcher(EXISTENCE),
159
+
160
+ containsValue: function(value) {
161
+ var entries = this.entries, i = entries.length;
162
+ while (i--) {
163
+ if ( value === entries[i][1] ) {
164
+ return true;
165
+ }
166
+ }
167
+ return false;
168
+ }
169
+ };
170
+
171
+ /*----------------------------------------------------------------------------------------------------------------*/
172
+
173
+ // Supporting functions for searching hashtable buckets
174
+
175
+ function searchBuckets(buckets, hash) {
176
+ var i = buckets.length, bucket;
177
+ while (i--) {
178
+ bucket = buckets[i];
179
+ if (hash === bucket[0]) {
180
+ return i;
181
+ }
182
+ }
183
+ return null;
184
+ }
185
+
186
+ function getBucketForHash(bucketsByHash, hash) {
187
+ var bucket = bucketsByHash[hash];
188
+
189
+ // Check that this is a genuine bucket and not something inherited from the bucketsByHash's prototype
190
+ return ( bucket && (bucket instanceof Bucket) ) ? bucket : null;
191
+ }
192
+
193
+ /*----------------------------------------------------------------------------------------------------------------*/
194
+
195
+ function Hashtable() {
196
+ var buckets = [];
197
+ var bucketsByHash = {};
198
+ var properties = {
199
+ replaceDuplicateKey: true,
200
+ hashCode: hashObject,
201
+ equals: null
202
+ };
203
+
204
+ var arg0 = arguments[0], arg1 = arguments[1];
205
+ if (arg1 !== UNDEFINED) {
206
+ properties.hashCode = arg0;
207
+ properties.equals = arg1;
208
+ } else if (arg0 !== UNDEFINED) {
209
+ merge(properties, arg0);
210
+ }
211
+
212
+ var hashCode = properties.hashCode, equals = properties.equals;
213
+
214
+ this.properties = properties;
215
+
216
+ this.put = function(key, value) {
217
+ checkKey(key);
218
+ checkValue(value);
219
+ var hash = hashCode(key), bucket, bucketEntry, oldValue = null;
220
+
221
+ // Check if a bucket exists for the bucket key
222
+ bucket = getBucketForHash(bucketsByHash, hash);
223
+ if (bucket) {
224
+ // Check this bucket to see if it already contains this key
225
+ bucketEntry = bucket.getEntryForKey(key);
226
+ if (bucketEntry) {
227
+ // This bucket entry is the current mapping of key to value, so replace the old value.
228
+ // Also, we optionally replace the key so that the latest key is stored.
229
+ if (properties.replaceDuplicateKey) {
230
+ bucketEntry[0] = key;
231
+ }
232
+ oldValue = bucketEntry[1];
233
+ bucketEntry[1] = value;
234
+ } else {
235
+ // The bucket does not contain an entry for this key, so add one
236
+ bucket.addEntry(key, value);
237
+ }
238
+ } else {
239
+ // No bucket exists for the key, so create one and put our key/value mapping in
240
+ bucket = new Bucket(hash, key, value, equals);
241
+ buckets.push(bucket);
242
+ bucketsByHash[hash] = bucket;
243
+ }
244
+ return oldValue;
245
+ };
246
+
247
+ this.get = function(key) {
248
+ checkKey(key);
249
+
250
+ var hash = hashCode(key);
251
+
252
+ // Check if a bucket exists for the bucket key
253
+ var bucket = getBucketForHash(bucketsByHash, hash);
254
+ if (bucket) {
255
+ // Check this bucket to see if it contains this key
256
+ var bucketEntry = bucket.getEntryForKey(key);
257
+ if (bucketEntry) {
258
+ // This bucket entry is the current mapping of key to value, so return the value.
259
+ return bucketEntry[1];
260
+ }
261
+ }
262
+ return null;
263
+ };
264
+
265
+ this.containsKey = function(key) {
266
+ checkKey(key);
267
+ var bucketKey = hashCode(key);
268
+
269
+ // Check if a bucket exists for the bucket key
270
+ var bucket = getBucketForHash(bucketsByHash, bucketKey);
271
+
272
+ return bucket ? bucket.containsKey(key) : false;
273
+ };
274
+
275
+ this.containsValue = function(value) {
276
+ checkValue(value);
277
+ var i = buckets.length;
278
+ while (i--) {
279
+ if (buckets[i].containsValue(value)) {
280
+ return true;
281
+ }
282
+ }
283
+ return false;
284
+ };
285
+
286
+ this.clear = function() {
287
+ buckets.length = 0;
288
+ bucketsByHash = {};
289
+ };
290
+
291
+ this.isEmpty = function() {
292
+ return !buckets.length;
293
+ };
294
+
295
+ var createBucketAggregator = function(bucketFuncName) {
296
+ return function() {
297
+ var aggregated = [], i = buckets.length;
298
+ while (i--) {
299
+ buckets[i][bucketFuncName](aggregated);
300
+ }
301
+ return aggregated;
302
+ };
303
+ };
304
+
305
+ this.keys = createBucketAggregator("keys");
306
+ this.values = createBucketAggregator("values");
307
+ this.entries = createBucketAggregator("getEntries");
308
+
309
+ this.remove = function(key) {
310
+ checkKey(key);
311
+
312
+ var hash = hashCode(key), bucketIndex, oldValue = null;
313
+
314
+ // Check if a bucket exists for the bucket key
315
+ var bucket = getBucketForHash(bucketsByHash, hash);
316
+
317
+ if (bucket) {
318
+ // Remove entry from this bucket for this key
319
+ oldValue = bucket.removeEntryForKey(key);
320
+ if (oldValue !== null) {
321
+ // Entry was removed, so check if bucket is empty
322
+ if (bucket.entries.length == 0) {
323
+ // Bucket is empty, so remove it from the bucket collections
324
+ bucketIndex = searchBuckets(buckets, hash);
325
+ buckets.splice(bucketIndex, 1);
326
+ delete bucketsByHash[hash];
327
+ }
328
+ }
329
+ }
330
+ return oldValue;
331
+ };
332
+
333
+ this.size = function() {
334
+ var total = 0, i = buckets.length;
335
+ while (i--) {
336
+ total += buckets[i].entries.length;
337
+ }
338
+ return total;
339
+ };
340
+ }
341
+
342
+ Hashtable.prototype = {
343
+ each: function(callback) {
344
+ var entries = this.entries(), i = entries.length, entry;
345
+ while (i--) {
346
+ entry = entries[i];
347
+ callback(entry[0], entry[1]);
348
+ }
349
+ },
350
+
351
+ equals: function(hashtable) {
352
+ var keys, key, val, count = this.size();
353
+ if (count == hashtable.size()) {
354
+ keys = this.keys();
355
+ while (count--) {
356
+ key = keys[count];
357
+ val = hashtable.get(key);
358
+ if (val === null || val !== this.get(key)) {
359
+ return false;
360
+ }
361
+ }
362
+ return true;
363
+ }
364
+ return false;
365
+ },
366
+
367
+ putAll: function(hashtable, conflictCallback) {
368
+ var entries = hashtable.entries();
369
+ var entry, key, value, thisValue, i = entries.length;
370
+ var hasConflictCallback = (typeof conflictCallback == FUNCTION);
371
+ while (i--) {
372
+ entry = entries[i];
373
+ key = entry[0];
374
+ value = entry[1];
375
+
376
+ // Check for a conflict. The default behaviour is to overwrite the value for an existing key
377
+ if ( hasConflictCallback && (thisValue = this.get(key)) ) {
378
+ value = conflictCallback(key, thisValue, value);
379
+ }
380
+ this.put(key, value);
381
+ }
382
+ },
383
+
384
+ clone: function() {
385
+ var clone = new Hashtable(this.properties);
386
+ clone.putAll(this);
387
+ return clone;
388
+ }
389
+ };
390
+
391
+ Hashtable.prototype.toQueryString = function() {
392
+ var entries = this.entries(), i = entries.length, entry;
393
+ var parts = [];
394
+ while (i--) {
395
+ entry = entries[i];
396
+ parts[i] = encodeURIComponent( toStr(entry[0]) ) + "=" + encodeURIComponent( toStr(entry[1]) );
397
+ }
398
+ return parts.join("&");
399
+ };
400
+
401
+ return Hashtable;
402
+ })();
@@ -0,0 +1,566 @@
1
+ /**
2
+ * jquery.numberformatter - Formatting/Parsing Numbers in jQuery
3
+ *
4
+ * Written by
5
+ * Michael Abernethy (mike@abernethysoft.com),
6
+ * Andrew Parry (aparry0@gmail.com)
7
+ *
8
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
9
+ * and GPL (GPL-LICENSE.txt) licenses.
10
+ *
11
+ * @author Michael Abernethy, Andrew Parry
12
+ * @version 1.2.4-RELEASE ($Id$)
13
+ *
14
+ * Dependencies
15
+ *
16
+ * jQuery (http://jquery.com)
17
+ * jshashtable (http://www.timdown.co.uk/jshashtable)
18
+ *
19
+ * Notes & Thanks
20
+ *
21
+ * many thanks to advweb.nanasi.jp for his bug fixes
22
+ * jsHashtable is now used also, so thanks to the author for that excellent little class.
23
+ *
24
+ * This plugin can be used to format numbers as text and parse text as Numbers
25
+ * Because we live in an international world, we cannot assume that everyone
26
+ * uses "," to divide thousands, and "." as a decimal point.
27
+ *
28
+ * As of 1.2 the way this plugin works has changed slightly, parsing text to a number
29
+ * has 1 set of functions, formatting a number to text has it's own. Before things
30
+ * were a little confusing, so I wanted to separate the 2 out more.
31
+ *
32
+ *
33
+ * jQuery extension functions:
34
+ *
35
+ * formatNumber(options, writeBack, giveReturnValue) - Reads the value from the subject, parses to
36
+ * a Javascript Number object, then formats back to text using the passed options and write back to
37
+ * the subject.
38
+ *
39
+ * parseNumber(options) - Parses the value in the subject to a Number object using the passed options
40
+ * to decipher the actual number from the text, then writes the value as text back to the subject.
41
+ *
42
+ *
43
+ * Generic functions:
44
+ *
45
+ * formatNumber(numberString, options) - Takes a plain number as a string (e.g. '1002.0123') and returns
46
+ * a string of the given format options.
47
+ *
48
+ * parseNumber(numberString, options) - Takes a number as text that is formatted the same as the given
49
+ * options then and returns it as a plain Number object.
50
+ *
51
+ * To achieve the old way of combining parsing and formatting to keep say a input field always formatted
52
+ * to a given format after it has lost focus you'd simply use a combination of the functions.
53
+ *
54
+ * e.g.
55
+ * $("#salary").blur(function(){
56
+ * $(this).parseNumber({format:"#,###.00", locale:"us"});
57
+ * $(this).formatNumber({format:"#,###.00", locale:"us"});
58
+ * });
59
+ *
60
+ * The syntax for the formatting is:
61
+ * 0 = Digit
62
+ * # = Digit, zero shows as absent
63
+ * . = Decimal separator
64
+ * - = Negative sign
65
+ * , = Grouping Separator
66
+ * % = Percent (multiplies the number by 100)
67
+ *
68
+ * For example, a format of "#,###.00" and text of 4500.20 will
69
+ * display as "4.500,20" with a locale of "de", and "4,500.20" with a locale of "us"
70
+ *
71
+ *
72
+ * As of now, the only acceptable locales are
73
+ * Arab Emirates -> "ae"
74
+ * Australia -> "au"
75
+ * Austria -> "at"
76
+ * Brazil -> "br"
77
+ * Canada -> "ca"
78
+ * China -> "cn"
79
+ * Czech -> "cz"
80
+ * Denmark -> "dk"
81
+ * Egypt -> "eg"
82
+ * Finland -> "fi"
83
+ * France -> "fr"
84
+ * Germany -> "de"
85
+ * Greece -> "gr"
86
+ * Great Britain -> "gb"
87
+ * Hong Kong -> "hk"
88
+ * India -> "in"
89
+ * Israel -> "il"
90
+ * Japan -> "jp"
91
+ * Russia -> "ru"
92
+ * South Korea -> "kr"
93
+ * Spain -> "es"
94
+ * Sweden -> "se"
95
+ * Switzerland -> "ch"
96
+ * Taiwan -> "tw"
97
+ * Thailand -> "th"
98
+ * United States -> "us"
99
+ * Vietnam -> "vn"
100
+ **/
101
+
102
+ (function(jQuery) {
103
+
104
+ var nfLocales = new Hashtable();
105
+
106
+ var nfLocalesLikeUS = [ 'ae','au','ca','cn','eg','gb','hk','il','in','jp','sk','th','tw','us' ];
107
+ var nfLocalesLikeDE = [ 'at','br','de','dk','es','gr','it','nl','pt','tr','vn' ];
108
+ var nfLocalesLikeFR = [ 'bg','cz','fi','fr','no','pl','ru','se' ];
109
+ var nfLocalesLikeCH = [ 'ch' ];
110
+
111
+ var nfLocaleFormatting = [ [".", ","], [",", "."], [",", " "], [".", "'"] ];
112
+ var nfAllLocales = [ nfLocalesLikeUS, nfLocalesLikeDE, nfLocalesLikeFR, nfLocalesLikeCH ]
113
+
114
+ function FormatData(dec, group, neg) {
115
+ this.dec = dec;
116
+ this.group = group;
117
+ this.neg = neg;
118
+ };
119
+
120
+ function init() {
121
+ // write the arrays into the hashtable
122
+ for (var localeGroupIdx = 0; localeGroupIdx < nfAllLocales.length; localeGroupIdx++) {
123
+ var localeGroup = nfAllLocales[localeGroupIdx];
124
+ for (var i = 0; i < localeGroup.length; i++) {
125
+ nfLocales.put(localeGroup[i], localeGroupIdx);
126
+ }
127
+ }
128
+ };
129
+
130
+ function formatCodes(locale, isFullLocale) {
131
+ if (nfLocales.size() == 0)
132
+ init();
133
+
134
+ // default values
135
+ var dec = ".";
136
+ var group = ",";
137
+ var neg = "-";
138
+
139
+ if (isFullLocale == false) {
140
+ // Extract and convert to lower-case any language code from a real 'locale' formatted string, if not use as-is
141
+ // (To prevent locale format like : "fr_FR", "en_US", "de_DE", "fr_FR", "en-US", "de-DE")
142
+ if (locale.indexOf('_') != -1)
143
+ locale = locale.split('_')[1].toLowerCase();
144
+ else if (locale.indexOf('-') != -1)
145
+ locale = locale.split('-')[1].toLowerCase();
146
+ }
147
+
148
+ // hashtable lookup to match locale with codes
149
+ var codesIndex = nfLocales.get(locale);
150
+ if (codesIndex) {
151
+ var codes = nfLocaleFormatting[codesIndex];
152
+ if (codes) {
153
+ dec = codes[0];
154
+ group = codes[1];
155
+ }
156
+ }
157
+ return new FormatData(dec, group, neg);
158
+ };
159
+
160
+
161
+ /* Formatting Methods */
162
+
163
+
164
+ /**
165
+ * Formats anything containing a number in standard js number notation.
166
+ *
167
+ * @param {Object} options The formatting options to use
168
+ * @param {Boolean} writeBack (true) If the output value should be written back to the subject
169
+ * @param {Boolean} giveReturnValue (true) If the function should return the output string
170
+ */
171
+ jQuery.fn.formatNumber = function(options, writeBack, giveReturnValue) {
172
+
173
+ return this.each(function() {
174
+ // enforce defaults
175
+ if (writeBack == null)
176
+ writeBack = true;
177
+ if (giveReturnValue == null)
178
+ giveReturnValue = true;
179
+
180
+ // get text
181
+ var text;
182
+ if (jQuery(this).is(":input"))
183
+ text = new String(jQuery(this).val());
184
+ else
185
+ text = new String(jQuery(this).text());
186
+
187
+ // format
188
+ var returnString = jQuery.formatNumber(text, options);
189
+
190
+ // set formatted string back, only if a success
191
+ // if (returnString) {
192
+ if (writeBack) {
193
+ if (jQuery(this).is(":input"))
194
+ jQuery(this).val(returnString);
195
+ else
196
+ jQuery(this).text(returnString);
197
+ }
198
+ if (giveReturnValue)
199
+ return returnString;
200
+ // }
201
+ // return '';
202
+ });
203
+ };
204
+
205
+ /**
206
+ * First parses a string and reformats it with the given options.
207
+ *
208
+ * @param {Object} numberString
209
+ * @param {Object} options
210
+ */
211
+ jQuery.formatNumber = function(numberString, options){
212
+ var options = jQuery.extend({}, jQuery.fn.formatNumber.defaults, options);
213
+ var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
214
+
215
+ var dec = formatData.dec;
216
+ var group = formatData.group;
217
+ var neg = formatData.neg;
218
+
219
+ var validFormat = "0#-,.";
220
+
221
+ // strip all the invalid characters at the beginning and the end
222
+ // of the format, and we'll stick them back on at the end
223
+ // make a special case for the negative sign "-" though, so
224
+ // we can have formats like -$23.32
225
+ var prefix = "";
226
+ var negativeInFront = false;
227
+ for (var i = 0; i < options.format.length; i++) {
228
+ if (validFormat.indexOf(options.format.charAt(i)) == -1)
229
+ prefix = prefix + options.format.charAt(i);
230
+ else
231
+ if (i == 0 && options.format.charAt(i) == '-') {
232
+ negativeInFront = true;
233
+ continue;
234
+ }
235
+ else
236
+ break;
237
+ }
238
+ var suffix = "";
239
+ for (var i = options.format.length - 1; i >= 0; i--) {
240
+ if (validFormat.indexOf(options.format.charAt(i)) == -1)
241
+ suffix = options.format.charAt(i) + suffix;
242
+ else
243
+ break;
244
+ }
245
+
246
+ options.format = options.format.substring(prefix.length);
247
+ options.format = options.format.substring(0, options.format.length - suffix.length);
248
+
249
+ // now we need to convert it into a number
250
+ //while (numberString.indexOf(group) > -1)
251
+ // numberString = numberString.replace(group, '');
252
+ //var number = new Number(numberString.replace(dec, ".").replace(neg, "-"));
253
+ var number = new Number(numberString);
254
+
255
+ return jQuery._formatNumber(number, options, suffix, prefix, negativeInFront);
256
+ };
257
+
258
+ /**
259
+ * Formats a Number object into a string, using the given formatting options
260
+ *
261
+ * @param {Object} numberString
262
+ * @param {Object} options
263
+ */
264
+ jQuery._formatNumber = function(number, options, suffix, prefix, negativeInFront) {
265
+ var options = jQuery.extend({}, jQuery.fn.formatNumber.defaults, options);
266
+ var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
267
+
268
+ var dec = formatData.dec;
269
+ var group = formatData.group;
270
+ var neg = formatData.neg;
271
+
272
+ // check overrides
273
+ if (options.overrideGroupSep != null) {
274
+ group = options.overrideGroupSep;
275
+ }
276
+ if (options.overrideDecSep != null) {
277
+ dec = options.overrideDecSep;
278
+ }
279
+ if (options.overrideNegSign != null) {
280
+ neg = options.overrideNegSign;
281
+ }
282
+
283
+ // Check NAN handling
284
+ var forcedToZero = false;
285
+ if (isNaN(number)) {
286
+ if (options.nanForceZero == true) {
287
+ number = 0;
288
+ forcedToZero = true;
289
+ } else {
290
+ return '';
291
+ }
292
+ }
293
+
294
+ // special case for percentages
295
+ if (options.isPercentage == true || (options.autoDetectPercentage && suffix.charAt(suffix.length - 1) == '%')) {
296
+ number = number * 100;
297
+ }
298
+
299
+ var returnString = "";
300
+ if (options.format.indexOf(".") > -1) {
301
+ var decimalPortion = dec;
302
+ var decimalFormat = options.format.substring(options.format.lastIndexOf(".") + 1);
303
+
304
+ // round or truncate number as needed
305
+ if (options.round == true)
306
+ number = new Number(number.toFixed(decimalFormat.length));
307
+ else {
308
+ var numStr = number.toString();
309
+ if (numStr.lastIndexOf('.') > 0) {
310
+ numStr = numStr.substring(0, numStr.lastIndexOf('.') + decimalFormat.length + 1);
311
+ }
312
+ number = new Number(numStr);
313
+ }
314
+
315
+ var decimalValue = new Number(number.toString().substring(number.toString().indexOf('.')));
316
+ decimalString = new String(decimalValue.toFixed(decimalFormat.length));
317
+ decimalString = decimalString.substring(decimalString.lastIndexOf('.') + 1);
318
+ for (var i = 0; i < decimalFormat.length; i++) {
319
+ if (decimalFormat.charAt(i) == '#' && decimalString.charAt(i) != '0') {
320
+ decimalPortion += decimalString.charAt(i);
321
+ continue;
322
+ } else if (decimalFormat.charAt(i) == '#' && decimalString.charAt(i) == '0') {
323
+ var notParsed = decimalString.substring(i);
324
+ if (notParsed.match('[1-9]')) {
325
+ decimalPortion += decimalString.charAt(i);
326
+ continue;
327
+ } else
328
+ break;
329
+ } else if (decimalFormat.charAt(i) == "0")
330
+ decimalPortion += decimalString.charAt(i);
331
+ }
332
+ returnString += decimalPortion
333
+ } else
334
+ number = Math.round(number);
335
+
336
+ var ones = Math.floor(number);
337
+ if (number < 0)
338
+ ones = Math.ceil(number);
339
+
340
+ var onesFormat = "";
341
+ if (options.format.indexOf(".") == -1)
342
+ onesFormat = options.format;
343
+ else
344
+ onesFormat = options.format.substring(0, options.format.indexOf("."));
345
+
346
+ var onePortion = "";
347
+ if (!(ones == 0 && onesFormat.substr(onesFormat.length - 1) == '#') || forcedToZero) {
348
+ // find how many digits are in the group
349
+ var oneText = new String(Math.abs(ones));
350
+ var groupLength = 9999;
351
+ if (onesFormat.lastIndexOf(",") != -1)
352
+ groupLength = onesFormat.length - onesFormat.lastIndexOf(",") - 1;
353
+ var groupCount = 0;
354
+ for (var i = oneText.length - 1; i > -1; i--) {
355
+ onePortion = oneText.charAt(i) + onePortion;
356
+ groupCount++;
357
+ if (groupCount == groupLength && i != 0) {
358
+ onePortion = group + onePortion;
359
+ groupCount = 0;
360
+ }
361
+ }
362
+
363
+ // account for any pre-data padding
364
+ if (onesFormat.length > onePortion.length) {
365
+ var padStart = onesFormat.indexOf('0');
366
+ if (padStart != -1) {
367
+ var padLen = onesFormat.length - padStart;
368
+
369
+ // pad to left with 0's or group char
370
+ var pos = onesFormat.length - onePortion.length - 1;
371
+ while (onePortion.length < padLen) {
372
+ var padChar = onesFormat.charAt(pos);
373
+ // replace with real group char if needed
374
+ if (padChar == ',')
375
+ padChar = group;
376
+ onePortion = padChar + onePortion;
377
+ pos--;
378
+ }
379
+ }
380
+ }
381
+ }
382
+
383
+ if (!onePortion && onesFormat.indexOf('0', onesFormat.length - 1) !== -1)
384
+ onePortion = '0';
385
+
386
+ returnString = onePortion + returnString;
387
+
388
+ // handle special case where negative is in front of the invalid characters
389
+ if (number < 0 && negativeInFront && prefix.length > 0)
390
+ prefix = neg + prefix;
391
+ else if (number < 0)
392
+ returnString = neg + returnString;
393
+
394
+ if (!options.decimalSeparatorAlwaysShown) {
395
+ if (returnString.lastIndexOf(dec) == returnString.length - 1) {
396
+ returnString = returnString.substring(0, returnString.length - 1);
397
+ }
398
+ }
399
+ returnString = prefix + returnString + suffix;
400
+ return returnString;
401
+ };
402
+
403
+
404
+ /* Parsing Methods */
405
+
406
+
407
+ /**
408
+ * Parses a number of given format from the element and returns a Number object.
409
+ * @param {Object} options
410
+ */
411
+ jQuery.fn.parseNumber = function(options, writeBack, giveReturnValue) {
412
+ // enforce defaults
413
+ if (writeBack == null)
414
+ writeBack = true;
415
+ if (giveReturnValue == null)
416
+ giveReturnValue = true;
417
+
418
+ // get text
419
+ var text;
420
+ if (jQuery(this).is(":input"))
421
+ text = new String(jQuery(this).val());
422
+ else
423
+ text = new String(jQuery(this).text());
424
+
425
+ // parse text
426
+ var number = jQuery.parseNumber(text, options);
427
+
428
+ if (number) {
429
+ if (writeBack) {
430
+ if (jQuery(this).is(":input"))
431
+ jQuery(this).val(number.toString());
432
+ else
433
+ jQuery(this).text(number.toString());
434
+ }
435
+ if (giveReturnValue)
436
+ return number;
437
+ }
438
+ };
439
+
440
+ /**
441
+ * Parses a string of given format into a Number object.
442
+ *
443
+ * @param {Object} string
444
+ * @param {Object} options
445
+ */
446
+ jQuery.parseNumber = function(numberString, options) {
447
+ var options = jQuery.extend({}, jQuery.fn.parseNumber.defaults, options);
448
+ var formatData = formatCodes(options.locale.toLowerCase(), options.isFullLocale);
449
+
450
+ var dec = formatData.dec;
451
+ var group = formatData.group;
452
+ var neg = formatData.neg;
453
+
454
+ // check overrides
455
+ if (options.overrideGroupSep != null) {
456
+ group = options.overrideGroupSep;
457
+ }
458
+ if (options.overrideDecSep != null) {
459
+ dec = options.overrideDecSep;
460
+ }
461
+ if (options.overrideNegSign != null) {
462
+ neg = options.overrideNegSign;
463
+ }
464
+
465
+ var valid = "1234567890";
466
+ var validOnce = '.-';
467
+ var strictMode = options.strict;
468
+
469
+ // now we need to convert it into a number
470
+ while (numberString.indexOf(group)>-1) {
471
+ numberString = numberString.replace(group, '');
472
+ }
473
+ numberString = numberString.replace(dec, '.').replace(neg, '-');
474
+ var validText = '';
475
+ var hasPercent = false;
476
+
477
+ if (options.isPercentage == true || (options.autoDetectPercentage && numberString.charAt(numberString.length - 1) == '%')) {
478
+ hasPercent = true;
479
+ }
480
+
481
+ for (var i = 0; i < numberString.length; i++) {
482
+ if (valid.indexOf(numberString.charAt(i)) > -1) {
483
+ validText = validText + numberString.charAt(i);
484
+ } else if (validOnce.indexOf(numberString.charAt(i)) > -1) {
485
+ validText = validText + numberString.charAt(i);
486
+ validOnce = validOnce.replace(numberString.charAt(i), '');
487
+ } else {
488
+ if (options.allowPostfix) {
489
+ // treat anything after this point (inclusive) as a postfix
490
+ break;
491
+ } else if (strictMode) {
492
+ // abort and force the text to NaN as it's not strictly valid
493
+ validText = 'NaN';
494
+ break;
495
+ }
496
+ }
497
+ }
498
+ var number = new Number(validText);
499
+ if (hasPercent) {
500
+ number = number / 100;
501
+ var decimalPos = validText.indexOf('.');
502
+ if (decimalPos != -1) {
503
+ var decimalPoints = validText.length - decimalPos - 1;
504
+ number = number.toFixed(decimalPoints + 2);
505
+ } else {
506
+ number = number.toFixed(2);
507
+ }
508
+ }
509
+
510
+ return number;
511
+ };
512
+
513
+ jQuery.fn.parseNumber.defaults = {
514
+ locale: "us",
515
+ decimalSeparatorAlwaysShown: false,
516
+ isPercentage: false, // treats the input as a percentage (i.e. input divided by 100)
517
+ autoDetectPercentage: true, // will search if the input string ends with '%', if it does then the above option is implicitly set
518
+ isFullLocale: false,
519
+ strict: false, // will abort the parse if it hits any unknown char
520
+ overrideGroupSep: null, // override for group separator
521
+ overrideDecSep: null, // override for decimal point separator
522
+ overrideNegSign: null, // override for negative sign
523
+ allowPostfix: false // will truncate the input string as soon as it hits an unknown char
524
+ };
525
+
526
+ jQuery.fn.formatNumber.defaults = {
527
+ format: "#,###.00",
528
+ locale: "us",
529
+ decimalSeparatorAlwaysShown: false,
530
+ nanForceZero: true,
531
+ round: true,
532
+ isFullLocale: false,
533
+ overrideGroupSep: null,
534
+ overrideDecSep: null,
535
+ overrideNegSign: null,
536
+ isPercentage: false, // treats the input as a percentage (i.e. input multiplied by 100)
537
+ autoDetectPercentage: true // will search if the format string ends with '%', if it does then the above option is implicitly set
538
+ };
539
+
540
+ Number.prototype.toFixed = function(precision) {
541
+ return jQuery._roundNumber(this, precision);
542
+ };
543
+
544
+ jQuery._roundNumber = function(number, decimalPlaces) {
545
+ var power = Math.pow(10, decimalPlaces || 0);
546
+ var value = String(Math.round(number * power) / power);
547
+
548
+ // ensure the decimal places are there
549
+ if (decimalPlaces > 0) {
550
+ var dp = value.indexOf(".");
551
+ if (dp == -1) {
552
+ value += '.';
553
+ dp = 0;
554
+ } else {
555
+ dp = value.length - (dp + 1);
556
+ }
557
+
558
+ while (dp < decimalPlaces) {
559
+ value += '0';
560
+ dp++;
561
+ }
562
+ }
563
+ return value;
564
+ };
565
+
566
+ })(jQuery);