wbase 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (875) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/fonts/FontAwesome.otf +0 -0
  3. data/app/assets/fonts/Material-Design-Iconic-Font.eot +0 -0
  4. data/app/assets/fonts/Material-Design-Iconic-Font.svg +773 -0
  5. data/app/assets/fonts/Material-Design-Iconic-Font.ttf +0 -0
  6. data/app/assets/fonts/Material-Design-Iconic-Font.woff +0 -0
  7. data/app/assets/fonts/Simple-Line-Icons.eot +0 -0
  8. data/app/assets/fonts/Simple-Line-Icons.svg +211 -0
  9. data/app/assets/fonts/Simple-Line-Icons.ttf +0 -0
  10. data/app/assets/fonts/Simple-Line-Icons.woff +0 -0
  11. data/app/assets/fonts/Simple-Line-Icons.woff2 +0 -0
  12. data/app/assets/fonts/et-line.eot +0 -0
  13. data/app/assets/fonts/et-line.svg +1 -1
  14. data/app/assets/fonts/et-line.ttf +0 -0
  15. data/app/assets/fonts/et-line.woff +0 -0
  16. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  17. data/app/assets/fonts/fontawesome-webfont.svg +685 -0
  18. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  19. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  20. data/app/assets/fonts/fontawesome-webfont.woff2 +0 -0
  21. data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  22. data/app/assets/fonts/glyphicons-halflings-regular.svg +1 -1
  23. data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  24. data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  25. data/app/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
  26. data/app/assets/fonts/ionicons.eot +0 -0
  27. data/app/assets/fonts/ionicons.svg +1899 -0
  28. data/app/assets/fonts/ionicons.ttf +0 -0
  29. data/app/assets/fonts/ionicons.woff +0 -0
  30. data/app/assets/fonts/themify.eot +0 -0
  31. data/app/assets/fonts/themify.svg +362 -0
  32. data/app/assets/fonts/themify.ttf +0 -0
  33. data/app/assets/fonts/themify.woff +0 -0
  34. data/app/assets/fonts/typicons.eot +0 -0
  35. data/app/assets/fonts/typicons.less +1040 -0
  36. data/app/assets/fonts/typicons.svg +1180 -0
  37. data/app/assets/fonts/typicons.ttf +0 -0
  38. data/app/assets/fonts/typicons.woff +0 -0
  39. data/app/assets/fonts/weathericons-regular-webfont.eot +0 -0
  40. data/app/assets/fonts/weathericons-regular-webfont.svg +257 -0
  41. data/app/assets/fonts/weathericons-regular-webfont.ttf +0 -0
  42. data/app/assets/fonts/weathericons-regular-webfont.woff +0 -0
  43. data/app/assets/fonts/weathericons-regular-webfont.woff2 +0 -0
  44. data/app/assets/javascripts/wbase/admin/animate/animate.min.css +11 -0
  45. data/app/assets/javascripts/wbase/admin/autoNumeric/autoNumeric.js +1465 -0
  46. data/app/assets/javascripts/wbase/admin/autocomplete/autocomplete.zip +0 -0
  47. data/app/assets/javascripts/wbase/admin/autocomplete/countries.js +267 -0
  48. data/app/assets/javascripts/wbase/admin/autocomplete/demo.js +77 -0
  49. data/app/assets/javascripts/wbase/admin/autocomplete/jquery.autocomplete.min.js +8 -0
  50. data/app/assets/javascripts/wbase/admin/autocomplete/jquery.mockjax.js +601 -0
  51. data/app/assets/javascripts/wbase/admin/autocomplete.js +77 -0
  52. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/css/bootstrap-colorpicker.css +222 -0
  53. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/css/bootstrap-colorpicker.css.map +1 -0
  54. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css +10 -0
  55. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css.map +1 -0
  56. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png +0 -0
  57. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png +0 -0
  58. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png +0 -0
  59. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png +0 -0
  60. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png +0 -0
  61. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/js/bootstrap-colorpicker.js +1106 -0
  62. data/app/assets/javascripts/wbase/admin/bootstrap-colorpicker/js/bootstrap-colorpicker.min.js +5 -0
  63. data/app/assets/javascripts/wbase/admin/bootstrap-datepicker/css/bootstrap-datepicker.min.css +9 -0
  64. data/app/assets/javascripts/wbase/admin/bootstrap-datepicker/js/bootstrap-datepicker.min.js +10 -0
  65. data/app/assets/javascripts/wbase/admin/bootstrap-daterangepicker/daterangepicker.css +269 -0
  66. data/app/assets/javascripts/wbase/admin/bootstrap-daterangepicker/daterangepicker.js +1618 -0
  67. data/app/assets/javascripts/wbase/admin/bootstrap-daterangepicker/drp.png +0 -0
  68. data/app/assets/javascripts/wbase/admin/bootstrap-filestyle/js/bootstrap-filestyle.js +351 -0
  69. data/app/assets/javascripts/wbase/admin/bootstrap-filestyle/js/bootstrap-filestyle.min.js +1 -0
  70. data/app/assets/javascripts/wbase/admin/bootstrap-inputmask/bootstrap-inputmask.min.js +7 -0
  71. data/app/assets/javascripts/wbase/admin/bootstrap-markdown/css/bootstrap-markdown.min.css +1 -0
  72. data/app/assets/javascripts/wbase/admin/bootstrap-markdown/js/bootstrap-markdown.js +1362 -0
  73. data/app/assets/javascripts/wbase/admin/bootstrap-maxlength/bootstrap-maxlength.js +501 -0
  74. data/app/assets/javascripts/wbase/admin/bootstrap-maxlength/bootstrap-maxlength.min.js +10 -0
  75. data/app/assets/javascripts/wbase/admin/bootstrap-maxlength/src/bootstrap-maxlength.js +501 -0
  76. data/app/assets/javascripts/wbase/admin/bootstrap-select/css/bootstrap-select.min.css +6 -0
  77. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/bootstrap-select.js +1735 -0
  78. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/bootstrap-select.js.map +1 -0
  79. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/bootstrap-select.min.js +8 -0
  80. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ar_AR.js +49 -0
  81. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ar_AR.min.js +12 -0
  82. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-bg_BG.js +44 -0
  83. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-bg_BG.min.js +7 -0
  84. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-cro_CRO.js +44 -0
  85. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-cro_CRO.min.js +7 -0
  86. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-cs_CZ.js +35 -0
  87. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-cs_CZ.min.js +7 -0
  88. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-da_DK.js +44 -0
  89. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-da_DK.min.js +7 -0
  90. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-de_DE.js +35 -0
  91. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-de_DE.min.js +7 -0
  92. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-en_US.js +44 -0
  93. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-en_US.min.js +7 -0
  94. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-es_CL.js +35 -0
  95. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-es_CL.min.js +7 -0
  96. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-eu.js +35 -0
  97. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-eu.min.js +7 -0
  98. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-fa_IR.js +37 -0
  99. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-fa_IR.min.js +7 -0
  100. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-fi_FI.js +44 -0
  101. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-fi_FI.min.js +7 -0
  102. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-fr_FR.js +44 -0
  103. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-fr_FR.min.js +7 -0
  104. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-hu_HU.js +44 -0
  105. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-hu_HU.min.js +7 -0
  106. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-id_ID.js +37 -0
  107. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-id_ID.min.js +7 -0
  108. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-it_IT.js +35 -0
  109. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-it_IT.min.js +7 -0
  110. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ko_KR.js +44 -0
  111. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ko_KR.min.js +7 -0
  112. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-lt_LT.js +44 -0
  113. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-lt_LT.min.js +7 -0
  114. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-nb_NO.js +70 -0
  115. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-nb_NO.min.js +13 -0
  116. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-nl_NL.js +35 -0
  117. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-nl_NL.min.js +7 -0
  118. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-pl_PL.js +37 -0
  119. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-pl_PL.min.js +7 -0
  120. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-pt_BR.js +35 -0
  121. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-pt_BR.min.js +7 -0
  122. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-pt_PT.js +35 -0
  123. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-pt_PT.min.js +7 -0
  124. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ro_RO.js +35 -0
  125. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ro_RO.min.js +7 -0
  126. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ru_RU.js +36 -0
  127. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ru_RU.min.js +7 -0
  128. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-sk_SK.js +37 -0
  129. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-sk_SK.min.js +7 -0
  130. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-sl_SI.js +44 -0
  131. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-sl_SI.min.js +7 -0
  132. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-sv_SE.js +44 -0
  133. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-sv_SE.min.js +7 -0
  134. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-tr_TR.js +44 -0
  135. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-tr_TR.min.js +7 -0
  136. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ua_UA.js +35 -0
  137. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-ua_UA.min.js +7 -0
  138. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-zh_CN.js +35 -0
  139. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-zh_CN.min.js +7 -0
  140. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-zh_TW.js +37 -0
  141. data/app/assets/javascripts/wbase/admin/bootstrap-select/js/i18n/defaults-zh_TW.min.js +7 -0
  142. data/app/assets/javascripts/wbase/admin/bootstrap-slider/css/bootstrap-slider.min.css +28 -0
  143. data/app/assets/javascripts/wbase/admin/bootstrap-slider/js/bootstrap-slider.min.js +29 -0
  144. data/app/assets/javascripts/wbase/admin/bootstrap-sweetalert/sweet-alert.css +564 -0
  145. data/app/assets/javascripts/wbase/admin/bootstrap-sweetalert/sweet-alert.js +745 -0
  146. data/app/assets/javascripts/wbase/admin/bootstrap-sweetalert/sweet-alert.min.js +1 -0
  147. data/app/assets/javascripts/wbase/admin/bootstrap-sweetalert/thumbs-up.jpg +0 -0
  148. data/app/assets/javascripts/wbase/admin/bootstrap-table/css/bootstrap-table.min.css +1 -0
  149. data/app/assets/javascripts/wbase/admin/bootstrap-table/js/bootstrap-table.min.js +8 -0
  150. data/app/assets/javascripts/wbase/admin/bootstrap-tagsinput/css/bootstrap-tagsinput.css +60 -0
  151. data/app/assets/javascripts/wbase/admin/bootstrap-tagsinput/js/bootstrap-tagsinput.min.js +7 -0
  152. data/app/assets/javascripts/wbase/admin/bootstrap-touchspin/css/jquery.bootstrap-touchspin.min.css +10 -0
  153. data/app/assets/javascripts/wbase/admin/bootstrap-touchspin/js/jquery.bootstrap-touchspin.min.js +9 -0
  154. data/app/assets/javascripts/wbase/admin/bootstrap.min.js +7 -0
  155. data/app/assets/javascripts/wbase/admin/c3/c3.css +158 -0
  156. data/app/assets/javascripts/wbase/admin/c3/c3.js +7049 -0
  157. data/app/assets/javascripts/wbase/admin/c3/c3.min.css +1 -0
  158. data/app/assets/javascripts/wbase/admin/c3/c3.min.js +5 -0
  159. data/app/assets/javascripts/wbase/admin/chart.js/chart.min.js +14 -0
  160. data/app/assets/javascripts/wbase/admin/chartist/css/chartist.min.css +1 -0
  161. data/app/assets/javascripts/wbase/admin/chartist/js/chartist-plugin-tooltip.min.js +8 -0
  162. data/app/assets/javascripts/wbase/admin/chartist/js/chartist.min.js +10 -0
  163. data/app/assets/javascripts/wbase/admin/clockpicker/css/bootstrap-clockpicker.min.css +5 -0
  164. data/app/assets/javascripts/wbase/admin/clockpicker/js/bootstrap-clockpicker.min.js +6 -0
  165. data/app/assets/javascripts/wbase/admin/codemirror/css/ambiance.css +74 -0
  166. data/app/assets/javascripts/wbase/admin/codemirror/css/codemirror.css +347 -0
  167. data/app/assets/javascripts/wbase/admin/codemirror/js/codemirror.js +8935 -0
  168. data/app/assets/javascripts/wbase/admin/codemirror/js/formatting.js +108 -0
  169. data/app/assets/javascripts/wbase/admin/codemirror/js/javascript.js +638 -0
  170. data/app/assets/javascripts/wbase/admin/codemirror/js/xml.js +333 -0
  171. data/app/assets/javascripts/wbase/admin/countdown/dest/countdown.js +195 -0
  172. data/app/assets/javascripts/wbase/admin/countdown/dest/countdown.min.js +1 -0
  173. data/app/assets/javascripts/wbase/admin/countdown/dest/jquery.countdown.js +215 -0
  174. data/app/assets/javascripts/wbase/admin/countdown/dest/jquery.countdown.min.js +1 -0
  175. data/app/assets/javascripts/wbase/admin/countdown/src/countdown.js +191 -0
  176. data/app/assets/javascripts/wbase/admin/countdown/src/jquery-wrapper.js +18 -0
  177. data/app/assets/javascripts/wbase/admin/counterup/jquery.counterup.min.js +8 -0
  178. data/app/assets/javascripts/wbase/admin/cropper/cropper.css +315 -0
  179. data/app/assets/javascripts/wbase/admin/cropper/cropper.js +2457 -0
  180. data/app/assets/javascripts/wbase/admin/cropper/cropper.min.css +9 -0
  181. data/app/assets/javascripts/wbase/admin/cropper/cropper.min.js +9 -0
  182. data/app/assets/javascripts/wbase/admin/custombox/css/custombox.css +872 -0
  183. data/app/assets/javascripts/wbase/admin/custombox/js/custombox.min.js +10 -0
  184. data/app/assets/javascripts/wbase/admin/custombox/js/legacy.min.js +18 -0
  185. data/app/assets/javascripts/wbase/admin/d3/d3.js +9426 -0
  186. data/app/assets/javascripts/wbase/admin/d3/d3.min.js +5 -0
  187. data/app/assets/javascripts/wbase/admin/datatables/buttons.bootstrap.min.js +6 -0
  188. data/app/assets/javascripts/wbase/admin/datatables/buttons.html5.min.js +20 -0
  189. data/app/assets/javascripts/wbase/admin/datatables/buttons.print.min.js +4 -0
  190. data/app/assets/javascripts/wbase/admin/datatables/dataTables.bootstrap.js +186 -0
  191. data/app/assets/javascripts/wbase/admin/datatables/dataTables.buttons.min.js +35 -0
  192. data/app/assets/javascripts/wbase/admin/datatables/dataTables.colVis.js +1107 -0
  193. data/app/assets/javascripts/wbase/admin/datatables/dataTables.fixedColumns.min.js +35 -0
  194. data/app/assets/javascripts/wbase/admin/datatables/dataTables.fixedHeader.min.js +16 -0
  195. data/app/assets/javascripts/wbase/admin/datatables/dataTables.keyTable.min.js +18 -0
  196. data/app/assets/javascripts/wbase/admin/datatables/dataTables.responsive.min.js +23 -0
  197. data/app/assets/javascripts/wbase/admin/datatables/dataTables.scroller.min.js +25 -0
  198. data/app/assets/javascripts/wbase/admin/datatables/jquery.dataTables.min.js +163 -0
  199. data/app/assets/javascripts/wbase/admin/datatables/json/scroller-demo.json +2502 -0
  200. data/app/assets/javascripts/wbase/admin/datatables/jszip.min.js +14 -0
  201. data/app/assets/javascripts/wbase/admin/datatables/pdfmake.min.js +22 -0
  202. data/app/assets/javascripts/wbase/admin/datatables/responsive.bootstrap.min.js +7 -0
  203. data/app/assets/javascripts/wbase/admin/datatables/vfs_fonts.js +1 -0
  204. data/app/assets/javascripts/wbase/admin/datatables.editable.init.js +244 -0
  205. data/app/assets/javascripts/wbase/admin/datatables.init.js +37 -0
  206. data/app/assets/javascripts/wbase/admin/detect.js +7 -0
  207. data/app/assets/javascripts/wbase/admin/doc-ready/README.md +23 -0
  208. data/app/assets/javascripts/wbase/admin/doc-ready/bower.json +35 -0
  209. data/app/assets/javascripts/wbase/admin/doc-ready/doc-ready.js +80 -0
  210. data/app/assets/javascripts/wbase/admin/dropzone/basic.css +39 -0
  211. data/app/assets/javascripts/wbase/admin/dropzone/dropzone-amd-module.js +1743 -0
  212. data/app/assets/javascripts/wbase/admin/dropzone/dropzone.css +388 -0
  213. data/app/assets/javascripts/wbase/admin/dropzone/dropzone.js +1728 -0
  214. data/app/assets/javascripts/wbase/admin/dropzone/readme.md +10 -0
  215. data/app/assets/javascripts/wbase/admin/easy-pie-chart.init.js +63 -0
  216. data/app/assets/javascripts/wbase/admin/eventEmitter/EventEmitter.js +472 -0
  217. data/app/assets/javascripts/wbase/admin/eventEmitter/EventEmitter.min.js +7 -0
  218. data/app/assets/javascripts/wbase/admin/eventie/eventie.js +82 -0
  219. data/app/assets/javascripts/wbase/admin/fastclick.js +841 -0
  220. data/app/assets/javascripts/wbase/admin/fizzy-ui-utils/utils.js +270 -0
  221. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.crosshair.js +176 -0
  222. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.min.js +8 -0
  223. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.orderBars.min.js +186 -0
  224. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.pie.js +820 -0
  225. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.resize.js +59 -0
  226. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.selection.js +360 -0
  227. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.stack.js +188 -0
  228. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.time.js +432 -0
  229. data/app/assets/javascripts/wbase/admin/flot-chart/jquery.flot.tooltip.min.js +12 -0
  230. data/app/assets/javascripts/wbase/admin/footable/css/fonts/footable.eot +0 -0
  231. data/app/assets/javascripts/wbase/admin/footable/css/fonts/footable.svg +78 -0
  232. data/app/assets/javascripts/wbase/admin/footable/css/fonts/footable.ttf +0 -0
  233. data/app/assets/javascripts/wbase/admin/footable/css/fonts/footable.woff +0 -0
  234. data/app/assets/javascripts/wbase/admin/footable/css/footable.core.css +181 -0
  235. data/app/assets/javascripts/wbase/admin/footable/js/footable.all.min.js +14 -0
  236. data/app/assets/javascripts/wbase/admin/form-validation-init.js +106 -0
  237. data/app/assets/javascripts/wbase/admin/fullcalendar/css/fullcalendar.min.css +5 -0
  238. data/app/assets/javascripts/wbase/admin/fullcalendar/js/fullcalendar.min.js +9 -0
  239. data/app/assets/javascripts/wbase/admin/get-size/get-size.js +250 -0
  240. data/app/assets/javascripts/wbase/admin/get-style-property/get-style-property.js +55 -0
  241. data/app/assets/javascripts/wbase/admin/gmaps/gmaps.js +2204 -0
  242. data/app/assets/javascripts/wbase/admin/gmaps/gmaps.min.js +2 -0
  243. data/app/assets/javascripts/wbase/admin/gmaps/gmaps.min.js.map +1 -0
  244. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.controls.js +83 -0
  245. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.core.js +488 -0
  246. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.events.js +54 -0
  247. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.geofences.js +14 -0
  248. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.geometry.js +205 -0
  249. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.layers.js +158 -0
  250. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.map_types.js +29 -0
  251. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.markers.js +210 -0
  252. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.native_extensions.js +121 -0
  253. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.overlays.js +134 -0
  254. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.routes.js +330 -0
  255. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.static.js +245 -0
  256. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.streetview.js +44 -0
  257. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.styles.js +9 -0
  258. data/app/assets/javascripts/wbase/admin/gmaps/lib/gmaps.utils.js +42 -0
  259. data/app/assets/javascripts/wbase/admin/hopscotch/css/hopscotch.css +519 -0
  260. data/app/assets/javascripts/wbase/admin/hopscotch/css/hopscotch.min.css +17 -0
  261. data/app/assets/javascripts/wbase/admin/hopscotch/img/sprite-green.png +0 -0
  262. data/app/assets/javascripts/wbase/admin/hopscotch/img/sprite-orange.png +0 -0
  263. data/app/assets/javascripts/wbase/admin/hopscotch/js/hopscotch.js +2536 -0
  264. data/app/assets/javascripts/wbase/admin/hopscotch/js/hopscotch.min.js +17 -0
  265. data/app/assets/javascripts/wbase/admin/ion-rangeslider/ion.rangeSlider.css +150 -0
  266. data/app/assets/javascripts/wbase/admin/ion-rangeslider/ion.rangeSlider.min.js +76 -0
  267. data/app/assets/javascripts/wbase/admin/ion-rangeslider/ion.rangeSlider.skinFlat.css +106 -0
  268. data/app/assets/javascripts/wbase/admin/ion-rangeslider/sprite-skin-flat.png +0 -0
  269. data/app/assets/javascripts/wbase/admin/isotope/js/isotope.pkgd.min.js +12 -0
  270. data/app/assets/javascripts/wbase/admin/jquery-circliful/css/jquery.circliful.css +20 -0
  271. data/app/assets/javascripts/wbase/admin/jquery-circliful/js/jquery.circliful.js +262 -0
  272. data/app/assets/javascripts/wbase/admin/jquery-circliful/js/jquery.circliful.min.js +1 -0
  273. data/app/assets/javascripts/wbase/admin/jquery-datatables-editable/dataTables.bootstrap.js +186 -0
  274. data/app/assets/javascripts/wbase/admin/jquery-datatables-editable/datatables.css +333 -0
  275. data/app/assets/javascripts/wbase/admin/jquery-datatables-editable/jquery.dataTables.js +14951 -0
  276. data/app/assets/javascripts/wbase/admin/jquery-knob/excanvas.js +924 -0
  277. data/app/assets/javascripts/wbase/admin/jquery-knob/jquery.knob.js +805 -0
  278. data/app/assets/javascripts/wbase/admin/jquery-quicksearch/jquery.quicksearch.js +181 -0
  279. data/app/assets/javascripts/wbase/admin/jquery-sparkline/jquery.sparkline.min.js +5 -0
  280. data/app/assets/javascripts/wbase/admin/jquery-ui/external/jquery/jquery.js +9789 -0
  281. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  282. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  283. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
  284. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  285. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  286. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  287. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  288. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  289. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  290. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  291. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-icons_228ef1_256x240.png +0 -0
  292. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-icons_ef8c08_256x240.png +0 -0
  293. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-icons_ffd27a_256x240.png +0 -0
  294. data/app/assets/javascripts/wbase/admin/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  295. data/app/assets/javascripts/wbase/admin/jquery-ui/index.html +513 -0
  296. data/app/assets/javascripts/wbase/admin/jquery-ui/jquery-ui.css +1225 -0
  297. data/app/assets/javascripts/wbase/admin/jquery-ui/jquery-ui.js +16617 -0
  298. data/app/assets/javascripts/wbase/admin/jquery-ui/jquery-ui.min.css +7 -0
  299. data/app/assets/javascripts/wbase/admin/jquery-ui/jquery-ui.min.js +13 -0
  300. data/app/assets/javascripts/wbase/admin/jquery-ui/jquery-ui.structure.css +833 -0
  301. data/app/assets/javascripts/wbase/admin/jquery-ui/jquery-ui.structure.min.css +5 -0
  302. data/app/assets/javascripts/wbase/admin/jquery-ui/jquery-ui.theme.css +410 -0
  303. data/app/assets/javascripts/wbase/admin/jquery-ui/jquery-ui.theme.min.css +5 -0
  304. data/app/assets/javascripts/wbase/admin/jquery-validation/js/jquery.validate.min.js +4 -0
  305. data/app/assets/javascripts/wbase/admin/jquery.app.js +318 -0
  306. data/app/assets/javascripts/wbase/admin/jquery.blockUI.js +620 -0
  307. data/app/assets/javascripts/wbase/admin/jquery.bs-table.js +93 -0
  308. data/app/assets/javascripts/wbase/admin/jquery.c3-chart.init.js +225 -0
  309. data/app/assets/javascripts/wbase/admin/jquery.chartist.init.js +860 -0
  310. data/app/assets/javascripts/wbase/admin/jquery.chartjs.init.js +231 -0
  311. data/app/assets/javascripts/wbase/admin/jquery.charts-sparkline.js +149 -0
  312. data/app/assets/javascripts/wbase/admin/jquery.chat.js +60 -0
  313. data/app/assets/javascripts/wbase/admin/jquery.codemirror.init.js +66 -0
  314. data/app/assets/javascripts/wbase/admin/jquery.core.js +323 -0
  315. data/app/assets/javascripts/wbase/admin/jquery.dashboard.js +91 -0
  316. data/app/assets/javascripts/wbase/admin/jquery.dashboard_2.js +57 -0
  317. data/app/assets/javascripts/wbase/admin/jquery.dashboard_3.js +64 -0
  318. data/app/assets/javascripts/wbase/admin/jquery.dashboard_4.js +81 -0
  319. data/app/assets/javascripts/wbase/admin/jquery.dashboard_crm.js +104 -0
  320. data/app/assets/javascripts/wbase/admin/jquery.dashboard_ecommerce.js +57 -0
  321. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/dist/angular.easypiechart.js +397 -0
  322. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/dist/angular.easypiechart.min.js +9 -0
  323. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/dist/easypiechart.js +351 -0
  324. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/dist/easypiechart.min.js +9 -0
  325. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/dist/jquery.easypiechart.js +360 -0
  326. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/dist/jquery.easypiechart.min.js +9 -0
  327. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/src/angular.directive.js +48 -0
  328. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/src/easypiechart.js +134 -0
  329. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/src/jquery.plugin.js +10 -0
  330. data/app/assets/javascripts/wbase/admin/jquery.easy-pie-chart/src/renderer/canvas.js +190 -0
  331. data/app/assets/javascripts/wbase/admin/jquery.flot.init.js +500 -0
  332. data/app/assets/javascripts/wbase/admin/jquery.footable.js +86 -0
  333. data/app/assets/javascripts/wbase/admin/jquery.form-advanced.init.js +126 -0
  334. data/app/assets/javascripts/wbase/admin/jquery.form-pickers.init.js +130 -0
  335. data/app/assets/javascripts/wbase/admin/jquery.fullcalendar.js +202 -0
  336. data/app/assets/javascripts/wbase/admin/jquery.gmaps.js +226 -0
  337. data/app/assets/javascripts/wbase/admin/jquery.jsgrid.init.js +123 -0
  338. data/app/assets/javascripts/wbase/admin/jquery.leads.init.js +53 -0
  339. data/app/assets/javascripts/wbase/admin/jquery.min.js +5 -0
  340. data/app/assets/javascripts/wbase/admin/jquery.nicescroll.js +113 -0
  341. data/app/assets/javascripts/wbase/admin/jquery.nvd3.init.js +297 -0
  342. data/app/assets/javascripts/wbase/admin/jquery.opportunities.init.js +49 -0
  343. data/app/assets/javascripts/wbase/admin/jquery.peity.init.js +49 -0
  344. data/app/assets/javascripts/wbase/admin/jquery.rickshaw.chart.init.js +288 -0
  345. data/app/assets/javascripts/wbase/admin/jquery.scrollTo.min.js +7 -0
  346. data/app/assets/javascripts/wbase/admin/jquery.slimscroll.js +474 -0
  347. data/app/assets/javascripts/wbase/admin/jquery.steps/css/jquery.steps.css +382 -0
  348. data/app/assets/javascripts/wbase/admin/jquery.steps/js/jquery.steps.min.js +6 -0
  349. data/app/assets/javascripts/wbase/admin/jquery.sweet-alert.init.js +162 -0
  350. data/app/assets/javascripts/wbase/admin/jquery.todo.js +153 -0
  351. data/app/assets/javascripts/wbase/admin/jquery.tree.js +89 -0
  352. data/app/assets/javascripts/wbase/admin/jquery.ui-sliders.js +66 -0
  353. data/app/assets/javascripts/wbase/admin/jquery.widgets.js +149 -0
  354. data/app/assets/javascripts/wbase/admin/jquery.wizard-init.js +87 -0
  355. data/app/assets/javascripts/wbase/admin/jquery.xeditable.js +117 -0
  356. data/app/assets/javascripts/wbase/admin/jsgrid/css/jsgrid-theme.css +258 -0
  357. data/app/assets/javascripts/wbase/admin/jsgrid/css/jsgrid-theme.min.css +7 -0
  358. data/app/assets/javascripts/wbase/admin/jsgrid/css/jsgrid.css +126 -0
  359. data/app/assets/javascripts/wbase/admin/jsgrid/css/jsgrid.min.css +7 -0
  360. data/app/assets/javascripts/wbase/admin/jsgrid/js/jsgrid.js +2508 -0
  361. data/app/assets/javascripts/wbase/admin/jsgrid/js/jsgrid.min.js +8 -0
  362. data/app/assets/javascripts/wbase/admin/jstree/32px.png +0 -0
  363. data/app/assets/javascripts/wbase/admin/jstree/40px.png +0 -0
  364. data/app/assets/javascripts/wbase/admin/jstree/ajax_children.json +1 -0
  365. data/app/assets/javascripts/wbase/admin/jstree/ajax_roots.json +8 -0
  366. data/app/assets/javascripts/wbase/admin/jstree/jstree.js +7988 -0
  367. data/app/assets/javascripts/wbase/admin/jstree/jstree.min.js +6 -0
  368. data/app/assets/javascripts/wbase/admin/jstree/style.css +1066 -0
  369. data/app/assets/javascripts/wbase/admin/jstree/style.min.css +1 -0
  370. data/app/assets/javascripts/wbase/admin/jstree/themes/dark/32px.png +0 -0
  371. data/app/assets/javascripts/wbase/admin/jstree/themes/dark/40px.png +0 -0
  372. data/app/assets/javascripts/wbase/admin/jstree/themes/dark/style.css +1110 -0
  373. data/app/assets/javascripts/wbase/admin/jstree/themes/dark/style.min.css +1 -0
  374. data/app/assets/javascripts/wbase/admin/jstree/themes/dark/throbber.gif +0 -0
  375. data/app/assets/javascripts/wbase/admin/jstree/throbber.gif +0 -0
  376. data/app/assets/javascripts/wbase/admin/justgage-toorshia/justgage.js +1051 -0
  377. data/app/assets/javascripts/wbase/admin/jvectormap/gdp-data.js +185 -0
  378. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-2.0.2.css +130 -0
  379. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-2.0.2.min.js +3328 -0
  380. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-asia-mill.js +1 -0
  381. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-au-mill.js +1 -0
  382. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-ca-lcc.js +1 -0
  383. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-de-mill.js +1 -0
  384. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-europe-mill-en.js +1 -0
  385. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-in-mill.js +1 -0
  386. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-uk-mill-en.js +1 -0
  387. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-us-aea-en.js +1 -0
  388. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-us-il-chicago-mill-en.js +1 -0
  389. data/app/assets/javascripts/wbase/admin/jvectormap/jquery-jvectormap-world-mill-en.js +1 -0
  390. data/app/assets/javascripts/wbase/admin/jvectormap.init.js +215 -0
  391. data/app/assets/javascripts/wbase/admin/ladda-buttons/css/ladda-themeless.min.css +7 -0
  392. data/app/assets/javascripts/wbase/admin/ladda-buttons/js/ladda.jquery.min.js +8 -0
  393. data/app/assets/javascripts/wbase/admin/ladda-buttons/js/ladda.min.js +8 -0
  394. data/app/assets/javascripts/wbase/admin/ladda-buttons/js/spin.min.js +1 -0
  395. data/app/assets/javascripts/wbase/admin/magnific-popup/css/magnific-popup.css +369 -0
  396. data/app/assets/javascripts/wbase/admin/magnific-popup/js/jquery.magnific-popup.min.js +4 -0
  397. data/app/assets/javascripts/wbase/admin/masonry/dist/masonry.pkgd.js +3189 -0
  398. data/app/assets/javascripts/wbase/admin/masonry/dist/masonry.pkgd.min.js +9 -0
  399. data/app/assets/javascripts/wbase/admin/masonry/masonry.js +203 -0
  400. data/app/assets/javascripts/wbase/admin/masonry/sandbox/basic.html +62 -0
  401. data/app/assets/javascripts/wbase/admin/masonry/sandbox/bottom-up.html +119 -0
  402. data/app/assets/javascripts/wbase/admin/masonry/sandbox/browserify/index.html +42 -0
  403. data/app/assets/javascripts/wbase/admin/masonry/sandbox/browserify/main.js +19 -0
  404. data/app/assets/javascripts/wbase/admin/masonry/sandbox/element-sizing.html +69 -0
  405. data/app/assets/javascripts/wbase/admin/masonry/sandbox/fit-width.html +68 -0
  406. data/app/assets/javascripts/wbase/admin/masonry/sandbox/fluid.html +89 -0
  407. data/app/assets/javascripts/wbase/admin/masonry/sandbox/jquery.html +64 -0
  408. data/app/assets/javascripts/wbase/admin/masonry/sandbox/require-js/index.html +41 -0
  409. data/app/assets/javascripts/wbase/admin/masonry/sandbox/require-js/main.js +69 -0
  410. data/app/assets/javascripts/wbase/admin/masonry/sandbox/right-to-left.html +120 -0
  411. data/app/assets/javascripts/wbase/admin/masonry/sandbox/sandbox.css +33 -0
  412. data/app/assets/javascripts/wbase/admin/masonry/sandbox/stamps.html +124 -0
  413. data/app/assets/javascripts/wbase/admin/matches-selector/matches-selector.js +107 -0
  414. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/css/bootstrap-colorpicker.css +251 -0
  415. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css +9 -0
  416. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/img/bootstrap-colorpicker/alpha-horizontal.png +0 -0
  417. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/img/bootstrap-colorpicker/alpha.png +0 -0
  418. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/img/bootstrap-colorpicker/hue-horizontal.png +0 -0
  419. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/img/bootstrap-colorpicker/hue.png +0 -0
  420. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/img/bootstrap-colorpicker/saturation.png +0 -0
  421. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js +1079 -0
  422. data/app/assets/javascripts/wbase/admin/mjolnic-bootstrap-colorpicker/dist/js/bootstrap-colorpicker.min.js +1 -0
  423. data/app/assets/javascripts/wbase/admin/mocha/media/logo.svg +8 -0
  424. data/app/assets/javascripts/wbase/admin/mocha/mocha.css +270 -0
  425. data/app/assets/javascripts/wbase/admin/mocha/mocha.js +5812 -0
  426. data/app/assets/javascripts/wbase/admin/modal-effect/css/component.css +743 -0
  427. data/app/assets/javascripts/wbase/admin/modal-effect/js/classie.js +80 -0
  428. data/app/assets/javascripts/wbase/admin/modal-effect/js/modalEffects.js +57 -0
  429. data/app/assets/javascripts/wbase/admin/modernizr.min.js +1 -0
  430. data/app/assets/javascripts/wbase/admin/moment/moment.js +4195 -0
  431. data/app/assets/javascripts/wbase/admin/morris/morris.css +2 -0
  432. data/app/assets/javascripts/wbase/admin/morris/morris.min.js +7 -0
  433. data/app/assets/javascripts/wbase/admin/morris.init.js +184 -0
  434. data/app/assets/javascripts/wbase/admin/morris.min.js +7 -0
  435. data/app/assets/javascripts/wbase/admin/multiselect/css/multi-select.css +93 -0
  436. data/app/assets/javascripts/wbase/admin/multiselect/img/switch.png +0 -0
  437. data/app/assets/javascripts/wbase/admin/multiselect/js/jquery.multi-select.js +528 -0
  438. data/app/assets/javascripts/wbase/admin/nestable/jquery.nestable.css +74 -0
  439. data/app/assets/javascripts/wbase/admin/nestable/jquery.nestable.js +485 -0
  440. data/app/assets/javascripts/wbase/admin/nestable.js +59 -0
  441. data/app/assets/javascripts/wbase/admin/notifications/notification.css +56 -0
  442. data/app/assets/javascripts/wbase/admin/notifications/notify-metro.js +51 -0
  443. data/app/assets/javascripts/wbase/admin/notifications/notify.min.js +5 -0
  444. data/app/assets/javascripts/wbase/admin/notifyjs/js/notify.js +625 -0
  445. data/app/assets/javascripts/wbase/admin/nvd3/nv.d3.min.css +1 -0
  446. data/app/assets/javascripts/wbase/admin/nvd3/nv.d3.min.js +8 -0
  447. data/app/assets/javascripts/wbase/admin/outlayer/item.js +586 -0
  448. data/app/assets/javascripts/wbase/admin/outlayer/outlayer.js +926 -0
  449. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/LICENSE +22 -0
  450. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/README.md +158 -0
  451. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/assets/ajax-loader.gif +0 -0
  452. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/assets/owl.carousel.css +179 -0
  453. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/assets/owl.carousel.min.css +1 -0
  454. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/assets/owl.theme.default.css +51 -0
  455. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/assets/owl.theme.default.min.css +1 -0
  456. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/assets/owl.theme.green.css +51 -0
  457. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/assets/owl.theme.green.min.css +1 -0
  458. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/assets/owl.video.play.png +0 -0
  459. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/owl.carousel.js +3148 -0
  460. data/app/assets/javascripts/wbase/admin/owl.carousel/dist/owl.carousel.min.js +2 -0
  461. data/app/assets/javascripts/wbase/admin/owl.carousel/src/css/owl.animate.css +29 -0
  462. data/app/assets/javascripts/wbase/admin/owl.carousel/src/css/owl.autoheight.css +9 -0
  463. data/app/assets/javascripts/wbase/admin/owl.carousel/src/css/owl.carousel.css +74 -0
  464. data/app/assets/javascripts/wbase/admin/owl.carousel/src/css/owl.lazyload.css +12 -0
  465. data/app/assets/javascripts/wbase/admin/owl.carousel/src/css/owl.theme.default.css +51 -0
  466. data/app/assets/javascripts/wbase/admin/owl.carousel/src/css/owl.theme.green.css +51 -0
  467. data/app/assets/javascripts/wbase/admin/owl.carousel/src/css/owl.video.css +51 -0
  468. data/app/assets/javascripts/wbase/admin/owl.carousel/src/img/ajax-loader.gif +0 -0
  469. data/app/assets/javascripts/wbase/admin/owl.carousel/src/img/owl.video.play.png +0 -0
  470. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.animate.js +120 -0
  471. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.autoheight.js +96 -0
  472. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.autoplay.js +161 -0
  473. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.autorefresh.js +110 -0
  474. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.carousel.js +1654 -0
  475. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.hash.js +121 -0
  476. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.lazyload.js +134 -0
  477. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.navigation.js +381 -0
  478. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.support.js +82 -0
  479. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.support.modernizr.js +57 -0
  480. data/app/assets/javascripts/wbase/admin/owl.carousel/src/js/owl.video.js +280 -0
  481. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/_mixins.scss +21 -0
  482. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/_theme.scss +63 -0
  483. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/owl.animate.scss +40 -0
  484. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/owl.autoheight.scss +9 -0
  485. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/owl.carousel.scss +108 -0
  486. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/owl.lazyload.scss +18 -0
  487. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/owl.theme.default.scss +31 -0
  488. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/owl.theme.green.scss +31 -0
  489. data/app/assets/javascripts/wbase/admin/owl.carousel/src/scss/owl.video.scss +51 -0
  490. data/app/assets/javascripts/wbase/admin/pace.min.js +2 -0
  491. data/app/assets/javascripts/wbase/admin/parsleyjs/parsley.min.js +18 -0
  492. data/app/assets/javascripts/wbase/admin/peity/jquery.peity.js +383 -0
  493. data/app/assets/javascripts/wbase/admin/peity/jquery.peity.min.js +13 -0
  494. data/app/assets/javascripts/wbase/admin/radial/radial.css +736 -0
  495. data/app/assets/javascripts/wbase/admin/raphael/raphael-min.js +11 -0
  496. data/app/assets/javascripts/wbase/admin/requirejs/require.js +2103 -0
  497. data/app/assets/javascripts/wbase/admin/responsive-table/css/rwd-table.min.css +7 -0
  498. data/app/assets/javascripts/wbase/admin/responsive-table/js/rwd-table.min.js +7 -0
  499. data/app/assets/javascripts/wbase/admin/rickshaw-chart/data/data.json +14 -0
  500. data/app/assets/javascripts/wbase/admin/rickshaw-chart/data/data.jsonp +14 -0
  501. data/app/assets/javascripts/wbase/admin/rickshaw-chart/data/data2.json +14 -0
  502. data/app/assets/javascripts/wbase/admin/rickshaw-chart/data/status.json +1 -0
  503. data/app/assets/javascripts/wbase/admin/rickshaw-chart/rickshaw.min.css +1 -0
  504. data/app/assets/javascripts/wbase/admin/rickshaw-chart/rickshaw.min.js +3 -0
  505. data/app/assets/javascripts/wbase/admin/rickshaw-chart/vendor/d3.layout.min.js +1 -0
  506. data/app/assets/javascripts/wbase/admin/rickshaw-chart/vendor/d3.min.js +2 -0
  507. data/app/assets/javascripts/wbase/admin/select2/css/select2.css +484 -0
  508. data/app/assets/javascripts/wbase/admin/select2/css/select2.min.css +1 -0
  509. data/app/assets/javascripts/wbase/admin/select2/js/i18n/ar.js +3 -0
  510. data/app/assets/javascripts/wbase/admin/select2/js/i18n/az.js +3 -0
  511. data/app/assets/javascripts/wbase/admin/select2/js/i18n/bg.js +3 -0
  512. data/app/assets/javascripts/wbase/admin/select2/js/i18n/ca.js +3 -0
  513. data/app/assets/javascripts/wbase/admin/select2/js/i18n/cs.js +3 -0
  514. data/app/assets/javascripts/wbase/admin/select2/js/i18n/da.js +3 -0
  515. data/app/assets/javascripts/wbase/admin/select2/js/i18n/de.js +3 -0
  516. data/app/assets/javascripts/wbase/admin/select2/js/i18n/el.js +3 -0
  517. data/app/assets/javascripts/wbase/admin/select2/js/i18n/en.js +3 -0
  518. data/app/assets/javascripts/wbase/admin/select2/js/i18n/es.js +3 -0
  519. data/app/assets/javascripts/wbase/admin/select2/js/i18n/et.js +3 -0
  520. data/app/assets/javascripts/wbase/admin/select2/js/i18n/eu.js +3 -0
  521. data/app/assets/javascripts/wbase/admin/select2/js/i18n/fa.js +3 -0
  522. data/app/assets/javascripts/wbase/admin/select2/js/i18n/fi.js +3 -0
  523. data/app/assets/javascripts/wbase/admin/select2/js/i18n/fr.js +3 -0
  524. data/app/assets/javascripts/wbase/admin/select2/js/i18n/gl.js +3 -0
  525. data/app/assets/javascripts/wbase/admin/select2/js/i18n/he.js +3 -0
  526. data/app/assets/javascripts/wbase/admin/select2/js/i18n/hi.js +3 -0
  527. data/app/assets/javascripts/wbase/admin/select2/js/i18n/hr.js +3 -0
  528. data/app/assets/javascripts/wbase/admin/select2/js/i18n/hu.js +3 -0
  529. data/app/assets/javascripts/wbase/admin/select2/js/i18n/id.js +3 -0
  530. data/app/assets/javascripts/wbase/admin/select2/js/i18n/is.js +3 -0
  531. data/app/assets/javascripts/wbase/admin/select2/js/i18n/it.js +3 -0
  532. data/app/assets/javascripts/wbase/admin/select2/js/i18n/ja.js +3 -0
  533. data/app/assets/javascripts/wbase/admin/select2/js/i18n/km.js +3 -0
  534. data/app/assets/javascripts/wbase/admin/select2/js/i18n/ko.js +3 -0
  535. data/app/assets/javascripts/wbase/admin/select2/js/i18n/lt.js +3 -0
  536. data/app/assets/javascripts/wbase/admin/select2/js/i18n/lv.js +3 -0
  537. data/app/assets/javascripts/wbase/admin/select2/js/i18n/mk.js +3 -0
  538. data/app/assets/javascripts/wbase/admin/select2/js/i18n/ms.js +3 -0
  539. data/app/assets/javascripts/wbase/admin/select2/js/i18n/nb.js +3 -0
  540. data/app/assets/javascripts/wbase/admin/select2/js/i18n/nl.js +3 -0
  541. data/app/assets/javascripts/wbase/admin/select2/js/i18n/pl.js +3 -0
  542. data/app/assets/javascripts/wbase/admin/select2/js/i18n/pt-BR.js +3 -0
  543. data/app/assets/javascripts/wbase/admin/select2/js/i18n/pt.js +3 -0
  544. data/app/assets/javascripts/wbase/admin/select2/js/i18n/ro.js +3 -0
  545. data/app/assets/javascripts/wbase/admin/select2/js/i18n/ru.js +3 -0
  546. data/app/assets/javascripts/wbase/admin/select2/js/i18n/sk.js +3 -0
  547. data/app/assets/javascripts/wbase/admin/select2/js/i18n/sr-Cyrl.js +3 -0
  548. data/app/assets/javascripts/wbase/admin/select2/js/i18n/sr.js +3 -0
  549. data/app/assets/javascripts/wbase/admin/select2/js/i18n/sv.js +3 -0
  550. data/app/assets/javascripts/wbase/admin/select2/js/i18n/th.js +3 -0
  551. data/app/assets/javascripts/wbase/admin/select2/js/i18n/tr.js +3 -0
  552. data/app/assets/javascripts/wbase/admin/select2/js/i18n/uk.js +3 -0
  553. data/app/assets/javascripts/wbase/admin/select2/js/i18n/vi.js +3 -0
  554. data/app/assets/javascripts/wbase/admin/select2/js/i18n/zh-CN.js +3 -0
  555. data/app/assets/javascripts/wbase/admin/select2/js/i18n/zh-TW.js +3 -0
  556. data/app/assets/javascripts/wbase/admin/select2/js/select2.full.js +6436 -0
  557. data/app/assets/javascripts/wbase/admin/select2/js/select2.full.min.js +3 -0
  558. data/app/assets/javascripts/wbase/admin/select2/js/select2.js +5725 -0
  559. data/app/assets/javascripts/wbase/admin/select2/js/select2.min.js +3 -0
  560. data/app/assets/javascripts/wbase/admin/simple-text-rotator/jquery.simple-text-rotator.min.js +1 -0
  561. data/app/assets/javascripts/wbase/admin/skyicons/skycons.min.js +1 -0
  562. data/app/assets/javascripts/wbase/admin/smoothproducts/css/smoothproducts.css +174 -0
  563. data/app/assets/javascripts/wbase/admin/smoothproducts/js/jquery-2.1.3.min.js +4 -0
  564. data/app/assets/javascripts/wbase/admin/smoothproducts/js/smoothproducts.js +265 -0
  565. data/app/assets/javascripts/wbase/admin/smoothproducts/js/smoothproducts.min.js +1 -0
  566. data/app/assets/javascripts/wbase/admin/summernote/font/summernote.eot +0 -0
  567. data/app/assets/javascripts/wbase/admin/summernote/font/summernote.ttf +0 -0
  568. data/app/assets/javascripts/wbase/admin/summernote/font/summernote.woff +0 -0
  569. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ar-AR.js +104 -0
  570. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ar-AR.min.js +2 -0
  571. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-bg-BG.js +99 -0
  572. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-bg-BG.min.js +2 -0
  573. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ca-ES.js +147 -0
  574. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ca-ES.min.js +2 -0
  575. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-cs-CZ.js +103 -0
  576. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-cs-CZ.min.js +2 -0
  577. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-da-DK.js +114 -0
  578. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-da-DK.min.js +2 -0
  579. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-de-DE.js +110 -0
  580. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-de-DE.min.js +2 -0
  581. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-es-ES.js +147 -0
  582. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-es-ES.min.js +2 -0
  583. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-es-EU.js +103 -0
  584. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-es-EU.min.js +2 -0
  585. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-fa-IR.js +105 -0
  586. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-fa-IR.min.js +2 -0
  587. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-fi-FI.js +104 -0
  588. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-fi-FI.min.js +2 -0
  589. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-fr-FR.js +115 -0
  590. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-fr-FR.min.js +2 -0
  591. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-gl-ES.js +147 -0
  592. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-gl-ES.min.js +2 -0
  593. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-he-IL.js +107 -0
  594. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-he-IL.min.js +2 -0
  595. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-hr-HR.js +104 -0
  596. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-hr-HR.min.js +2 -0
  597. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-hu-HU.js +135 -0
  598. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-hu-HU.min.js +2 -0
  599. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-id-ID.js +103 -0
  600. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-id-ID.min.js +2 -0
  601. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-it-IT.js +104 -0
  602. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-it-IT.min.js +2 -0
  603. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ja-JP.js +133 -0
  604. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ja-JP.min.js +2 -0
  605. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ko-KR.js +115 -0
  606. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ko-KR.min.js +2 -0
  607. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-lt-LT.js +107 -0
  608. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-lt-LT.min.js +2 -0
  609. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-lt-LV.js +135 -0
  610. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-lt-LV.min.js +2 -0
  611. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-nb-NO.js +104 -0
  612. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-nb-NO.min.js +2 -0
  613. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-nl-NL.js +104 -0
  614. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-nl-NL.min.js +2 -0
  615. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-pl-PL.js +112 -0
  616. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-pl-PL.min.js +2 -0
  617. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-pt-BR.js +132 -0
  618. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-pt-BR.min.js +2 -0
  619. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-pt-PT.js +103 -0
  620. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-pt-PT.min.js +2 -0
  621. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ro-RO.js +102 -0
  622. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ro-RO.min.js +2 -0
  623. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ru-RU.js +112 -0
  624. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-ru-RU.min.js +2 -0
  625. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sk-SK.js +102 -0
  626. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sk-SK.min.js +2 -0
  627. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sl-SI.js +106 -0
  628. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sl-SI.min.js +2 -0
  629. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sr-RS-Latin.js +104 -0
  630. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sr-RS-Latin.min.js +2 -0
  631. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sr-RS.js +104 -0
  632. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sr-RS.min.js +2 -0
  633. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sv-SE.js +104 -0
  634. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-sv-SE.min.js +2 -0
  635. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-th-TH.js +106 -0
  636. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-th-TH.min.js +2 -0
  637. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-tr-TR.js +147 -0
  638. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-tr-TR.min.js +2 -0
  639. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-uk-UA.js +111 -0
  640. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-uk-UA.min.js +2 -0
  641. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-vi-VN.js +104 -0
  642. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-vi-VN.min.js +2 -0
  643. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-zh-CN.js +113 -0
  644. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-zh-CN.min.js +2 -0
  645. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-zh-TW.js +113 -0
  646. data/app/assets/javascripts/wbase/admin/summernote/lang/summernote-zh-TW.min.js +2 -0
  647. data/app/assets/javascripts/wbase/admin/summernote/plugin/databasic/summernote-ext-databasic.css +16 -0
  648. data/app/assets/javascripts/wbase/admin/summernote/plugin/databasic/summernote-ext-databasic.js +303 -0
  649. data/app/assets/javascripts/wbase/admin/summernote/plugin/databasic/summernote-ext-databasic.min.css +1 -0
  650. data/app/assets/javascripts/wbase/admin/summernote/plugin/databasic/summernote-ext-databasic.min.js +2 -0
  651. data/app/assets/javascripts/wbase/admin/summernote/plugin/hello/summernote-ext-hello.js +82 -0
  652. data/app/assets/javascripts/wbase/admin/summernote/plugin/hello/summernote-ext-hello.min.js +2 -0
  653. data/app/assets/javascripts/wbase/admin/summernote/plugin/specialchars/summernote-ext-specialchars.js +315 -0
  654. data/app/assets/javascripts/wbase/admin/summernote/plugin/specialchars/summernote-ext-specialchars.min.js +2 -0
  655. data/app/assets/javascripts/wbase/admin/summernote/summernote.css +1 -0
  656. data/app/assets/javascripts/wbase/admin/summernote/summernote.js +7016 -0
  657. data/app/assets/javascripts/wbase/admin/summernote/summernote.min.js +4 -0
  658. data/app/assets/javascripts/wbase/admin/switchery/css/switchery.min.css +1 -0
  659. data/app/assets/javascripts/wbase/admin/switchery/js/switchery.min.js +1 -0
  660. data/app/assets/javascripts/wbase/admin/tablesaw/css/tablesaw.css +833 -0
  661. data/app/assets/javascripts/wbase/admin/tablesaw/js/tablesaw-init.js +12 -0
  662. data/app/assets/javascripts/wbase/admin/tablesaw/js/tablesaw.js +1266 -0
  663. data/app/assets/javascripts/wbase/admin/timepicker/bootstrap-timepicker.js +1177 -0
  664. data/app/assets/javascripts/wbase/admin/timepicker/bootstrap-timepicker.min.css +148 -0
  665. data/app/assets/javascripts/wbase/admin/tiny-editable/mindmup-editabletable.js +131 -0
  666. data/app/assets/javascripts/wbase/admin/tiny-editable/numeric-input-example.js +48 -0
  667. data/app/assets/javascripts/wbase/admin/tinymce/jquery.tinymce.min.js +1 -0
  668. data/app/assets/javascripts/wbase/admin/tinymce/langs/readme.md +3 -0
  669. data/app/assets/javascripts/wbase/admin/tinymce/license.txt +504 -0
  670. data/app/assets/javascripts/wbase/admin/tinymce/plugins/advlist/plugin.min.js +1 -0
  671. data/app/assets/javascripts/wbase/admin/tinymce/plugins/anchor/plugin.min.js +1 -0
  672. data/app/assets/javascripts/wbase/admin/tinymce/plugins/autolink/plugin.min.js +1 -0
  673. data/app/assets/javascripts/wbase/admin/tinymce/plugins/autoresize/plugin.min.js +1 -0
  674. data/app/assets/javascripts/wbase/admin/tinymce/plugins/autosave/plugin.min.js +1 -0
  675. data/app/assets/javascripts/wbase/admin/tinymce/plugins/bbcode/plugin.min.js +1 -0
  676. data/app/assets/javascripts/wbase/admin/tinymce/plugins/charmap/plugin.min.js +1 -0
  677. data/app/assets/javascripts/wbase/admin/tinymce/plugins/code/plugin.min.js +1 -0
  678. data/app/assets/javascripts/wbase/admin/tinymce/plugins/codesample/css/prism.css +138 -0
  679. data/app/assets/javascripts/wbase/admin/tinymce/plugins/codesample/plugin.min.js +1 -0
  680. data/app/assets/javascripts/wbase/admin/tinymce/plugins/colorpicker/plugin.min.js +1 -0
  681. data/app/assets/javascripts/wbase/admin/tinymce/plugins/contextmenu/plugin.min.js +1 -0
  682. data/app/assets/javascripts/wbase/admin/tinymce/plugins/directionality/plugin.min.js +1 -0
  683. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-cool.gif +0 -0
  684. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-cry.gif +0 -0
  685. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-embarassed.gif +0 -0
  686. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif +0 -0
  687. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-frown.gif +0 -0
  688. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-innocent.gif +0 -0
  689. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-kiss.gif +0 -0
  690. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-laughing.gif +0 -0
  691. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-money-mouth.gif +0 -0
  692. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-sealed.gif +0 -0
  693. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-smile.gif +0 -0
  694. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-surprised.gif +0 -0
  695. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-tongue-out.gif +0 -0
  696. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-undecided.gif +0 -0
  697. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-wink.gif +0 -0
  698. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/img/smiley-yell.gif +0 -0
  699. data/app/assets/javascripts/wbase/admin/tinymce/plugins/emoticons/plugin.min.js +1 -0
  700. data/app/assets/javascripts/wbase/admin/tinymce/plugins/example/dialog.html +8 -0
  701. data/app/assets/javascripts/wbase/admin/tinymce/plugins/example/plugin.min.js +1 -0
  702. data/app/assets/javascripts/wbase/admin/tinymce/plugins/example_dependency/plugin.min.js +1 -0
  703. data/app/assets/javascripts/wbase/admin/tinymce/plugins/fullpage/plugin.min.js +1 -0
  704. data/app/assets/javascripts/wbase/admin/tinymce/plugins/fullscreen/plugin.min.js +1 -0
  705. data/app/assets/javascripts/wbase/admin/tinymce/plugins/hr/plugin.min.js +1 -0
  706. data/app/assets/javascripts/wbase/admin/tinymce/plugins/image/plugin.min.js +1 -0
  707. data/app/assets/javascripts/wbase/admin/tinymce/plugins/imagetools/plugin.min.js +1 -0
  708. data/app/assets/javascripts/wbase/admin/tinymce/plugins/importcss/plugin.min.js +1 -0
  709. data/app/assets/javascripts/wbase/admin/tinymce/plugins/insertdatetime/plugin.min.js +1 -0
  710. data/app/assets/javascripts/wbase/admin/tinymce/plugins/layer/plugin.min.js +1 -0
  711. data/app/assets/javascripts/wbase/admin/tinymce/plugins/legacyoutput/plugin.min.js +1 -0
  712. data/app/assets/javascripts/wbase/admin/tinymce/plugins/link/plugin.min.js +1 -0
  713. data/app/assets/javascripts/wbase/admin/tinymce/plugins/lists/plugin.min.js +1 -0
  714. data/app/assets/javascripts/wbase/admin/tinymce/plugins/media/moxieplayer.swf +0 -0
  715. data/app/assets/javascripts/wbase/admin/tinymce/plugins/media/plugin.min.js +1 -0
  716. data/app/assets/javascripts/wbase/admin/tinymce/plugins/nonbreaking/plugin.min.js +1 -0
  717. data/app/assets/javascripts/wbase/admin/tinymce/plugins/noneditable/plugin.min.js +1 -0
  718. data/app/assets/javascripts/wbase/admin/tinymce/plugins/pagebreak/plugin.min.js +1 -0
  719. data/app/assets/javascripts/wbase/admin/tinymce/plugins/paste/plugin.min.js +1 -0
  720. data/app/assets/javascripts/wbase/admin/tinymce/plugins/preview/plugin.min.js +1 -0
  721. data/app/assets/javascripts/wbase/admin/tinymce/plugins/print/plugin.min.js +1 -0
  722. data/app/assets/javascripts/wbase/admin/tinymce/plugins/save/plugin.min.js +1 -0
  723. data/app/assets/javascripts/wbase/admin/tinymce/plugins/searchreplace/plugin.min.js +1 -0
  724. data/app/assets/javascripts/wbase/admin/tinymce/plugins/spellchecker/plugin.min.js +1 -0
  725. data/app/assets/javascripts/wbase/admin/tinymce/plugins/tabfocus/plugin.min.js +1 -0
  726. data/app/assets/javascripts/wbase/admin/tinymce/plugins/table/plugin.min.js +2 -0
  727. data/app/assets/javascripts/wbase/admin/tinymce/plugins/template/plugin.min.js +1 -0
  728. data/app/assets/javascripts/wbase/admin/tinymce/plugins/textcolor/plugin.min.js +1 -0
  729. data/app/assets/javascripts/wbase/admin/tinymce/plugins/textpattern/plugin.min.js +1 -0
  730. data/app/assets/javascripts/wbase/admin/tinymce/plugins/visualblocks/css/visualblocks.css +135 -0
  731. data/app/assets/javascripts/wbase/admin/tinymce/plugins/visualblocks/plugin.min.js +1 -0
  732. data/app/assets/javascripts/wbase/admin/tinymce/plugins/visualchars/plugin.min.js +1 -0
  733. data/app/assets/javascripts/wbase/admin/tinymce/plugins/wordcount/plugin.min.js +1 -0
  734. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/content.inline.min.css +1 -0
  735. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/content.min.css +1 -0
  736. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/fonts/tinymce-small.eot +0 -0
  737. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/fonts/tinymce-small.svg +63 -0
  738. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/fonts/tinymce-small.ttf +0 -0
  739. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/fonts/tinymce-small.woff +0 -0
  740. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/fonts/tinymce.eot +0 -0
  741. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/fonts/tinymce.svg +129 -0
  742. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/fonts/tinymce.ttf +0 -0
  743. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/fonts/tinymce.woff +0 -0
  744. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/img/anchor.gif +0 -0
  745. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/img/loader.gif +0 -0
  746. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/img/object.gif +0 -0
  747. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/img/trans.gif +0 -0
  748. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/skin.ie7.min.css +1 -0
  749. data/app/assets/javascripts/wbase/admin/tinymce/skins/lightgray/skin.min.css +1 -0
  750. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/bolt/atomic.js +5 -0
  751. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/bolt/bootstrap-atomic.js +1491 -0
  752. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/bolt/bootstrap-browser.js +1491 -0
  753. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/bolt/bootstrap-demo.js +1491 -0
  754. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/bolt/bootstrap-prod.js +1491 -0
  755. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/bolt/browser.js +10 -0
  756. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/bolt/demo.js +8 -0
  757. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/bolt/prod.js +5 -0
  758. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/config/dent/depend.js +21 -0
  759. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/scratch/compile/bootstrap.js +1526 -0
  760. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/scratch/compile/theme.js +1594 -0
  761. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/scratch/inline/theme.js +1679 -0
  762. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/scratch/inline/theme.raw.js +1679 -0
  763. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/demo/css/demo.css +25 -0
  764. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/demo/html/demo.html +69 -0
  765. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/demo/js/tinymce/inlite/Demo.js +28 -0
  766. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/Theme.js +150 -0
  767. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Arr.js +22 -0
  768. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Bookmark.js +130 -0
  769. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Unlink.js +84 -0
  770. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Uuid.js +34 -0
  771. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Actions.js +106 -0
  772. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Convert.js +37 -0
  773. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/ElementMatcher.js +47 -0
  774. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Layout.js +95 -0
  775. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Matcher.js +39 -0
  776. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Measure.js +61 -0
  777. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/PredicateId.js +32 -0
  778. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/SelectionMatcher.js +55 -0
  779. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/SkinLoader.js +45 -0
  780. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/UrlType.js +27 -0
  781. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/file/Conversions.js +31 -0
  782. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/file/Picker.js +40 -0
  783. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Buttons.js +80 -0
  784. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Forms.js +102 -0
  785. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Panel.js +218 -0
  786. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Toolbar.js +126 -0
  787. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/atomic/alien/ArrTest.js +9 -0
  788. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/atomic/alien/UuidTest.js +10 -0
  789. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/atomic/core/ConvertTest.js +12 -0
  790. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/atomic/core/MatcherTest.js +51 -0
  791. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/atomic/core/UrlTypeTest.js +33 -0
  792. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/ThemeTest.js +202 -0
  793. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/alien/BookmarkTest.js +65 -0
  794. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/alien/UnlinkTest.js +38 -0
  795. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/core/ActionsTest.js +177 -0
  796. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/core/ElementMatcher.js +69 -0
  797. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/core/LayoutTest.js +118 -0
  798. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/core/MeasureTest.js +62 -0
  799. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/core/PredicateIdTest.js +26 -0
  800. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/core/SelectionMatcherTest.js +76 -0
  801. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/file/ConversionsTest.js +41 -0
  802. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/src/test/js/browser/file/SelectionMatcher.js +55 -0
  803. data/app/assets/javascripts/wbase/admin/tinymce/themes/inlite/theme.min.js +1 -0
  804. data/app/assets/javascripts/wbase/admin/tinymce/themes/modern/theme.min.js +1 -0
  805. data/app/assets/javascripts/wbase/admin/tinymce/tinymce.min.js +13 -0
  806. data/app/assets/javascripts/wbase/admin/transitionize/dist/transitionize.js +275 -0
  807. data/app/assets/javascripts/wbase/admin/transitionize/dist/transitionize.min.js +1 -0
  808. data/app/assets/javascripts/wbase/admin/transitionize/examples/browserify.js +46 -0
  809. data/app/assets/javascripts/wbase/admin/transitionize/examples/example.html +31 -0
  810. data/app/assets/javascripts/wbase/admin/transitionize/transitionize.js +64 -0
  811. data/app/assets/javascripts/wbase/admin/waves.js +498 -0
  812. data/app/assets/javascripts/wbase/admin/waypoints/lib/jquery.waypoints.js +647 -0
  813. data/app/assets/javascripts/wbase/admin/waypoints/lib/jquery.waypoints.min.js +7 -0
  814. data/app/assets/javascripts/wbase/admin/waypoints/lib/noframework.waypoints.js +743 -0
  815. data/app/assets/javascripts/wbase/admin/waypoints/lib/noframework.waypoints.min.js +7 -0
  816. data/app/assets/javascripts/wbase/admin/waypoints/lib/shortcuts/infinite.js +84 -0
  817. data/app/assets/javascripts/wbase/admin/waypoints/lib/shortcuts/infinite.min.js +7 -0
  818. data/app/assets/javascripts/wbase/admin/waypoints/lib/shortcuts/inview.js +103 -0
  819. data/app/assets/javascripts/wbase/admin/waypoints/lib/shortcuts/inview.min.js +7 -0
  820. data/app/assets/javascripts/wbase/admin/waypoints/lib/shortcuts/sticky.js +65 -0
  821. data/app/assets/javascripts/wbase/admin/waypoints/lib/shortcuts/sticky.min.js +7 -0
  822. data/app/assets/javascripts/wbase/admin/waypoints/lib/waypoints.debug.js +46 -0
  823. data/app/assets/javascripts/wbase/admin/waypoints/lib/zepto.waypoints.js +690 -0
  824. data/app/assets/javascripts/wbase/admin/waypoints/lib/zepto.waypoints.min.js +7 -0
  825. data/app/assets/javascripts/wbase/admin/wow.min.js +2 -0
  826. data/app/assets/javascripts/wbase/admin/x-editable/css/bootstrap-editable.css +663 -0
  827. data/app/assets/javascripts/wbase/admin/x-editable/img/clear.png +0 -0
  828. data/app/assets/javascripts/wbase/admin/x-editable/img/loading.gif +0 -0
  829. data/app/assets/javascripts/wbase/admin/x-editable/js/bootstrap-editable.js +6807 -0
  830. data/app/assets/javascripts/wbase/admin/x-editable/js/bootstrap-editable.min.js +7 -0
  831. data/app/assets/javascripts/wbase/admin.js +50 -0
  832. data/app/assets/javascripts/wbase/auth/bootstrap.min.js +1 -1
  833. data/app/assets/javascripts/wbase/auth/detect.js +1 -1
  834. data/app/assets/javascripts/wbase/auth/jquery.min.js +1 -1
  835. data/app/assets/javascripts/wbase/auth/jquery.scrollTo.min.js +1 -1
  836. data/app/assets/javascripts/wbase/auth/modernizr.min.js +1 -1
  837. data/app/assets/javascripts/wbase/auth/pace.min.js +1 -1
  838. data/app/assets/javascripts/wbase/auth/wow.min.js +1 -1
  839. data/app/assets/javascripts/wbase/landing/bootstrap.min.js +1 -1
  840. data/app/assets/javascripts/wbase/landing/validator.min.js +1 -1
  841. data/app/assets/stylesheets/wbase/admin/components.scss +2362 -0
  842. data/app/assets/stylesheets/wbase/admin/core.scss +2190 -0
  843. data/app/assets/stylesheets/wbase/admin/datatables/buttons.bootstrap.min.css +1 -0
  844. data/app/assets/stylesheets/wbase/admin/datatables/dataTables.bootstrap.min.css +1 -0
  845. data/app/assets/stylesheets/wbase/admin/datatables/dataTables.colVis.css +185 -0
  846. data/app/assets/stylesheets/wbase/admin/datatables/fixedColumns.dataTables.min.css +1 -0
  847. data/app/assets/stylesheets/wbase/admin/datatables/fixedHeader.bootstrap.min.css +1 -0
  848. data/app/assets/stylesheets/wbase/admin/datatables/jquery.dataTables.min.css +333 -0
  849. data/app/assets/stylesheets/wbase/admin/datatables/responsive.bootstrap.min.css +1 -0
  850. data/app/assets/stylesheets/wbase/admin/datatables/scroller.bootstrap.min.css +1 -0
  851. data/app/assets/stylesheets/wbase/admin/icons.scss +9884 -0
  852. data/app/assets/stylesheets/wbase/admin/morris.scss +25 -0
  853. data/app/assets/stylesheets/wbase/admin/pages.scss +2039 -0
  854. data/app/assets/stylesheets/wbase/admin/responsive.scss +162 -0
  855. data/app/assets/stylesheets/wbase/admin/typicons.scss +1370 -0
  856. data/app/assets/stylesheets/wbase/admin.scss +20 -0
  857. data/app/assets/stylesheets/wbase/auth/components.css +77 -77
  858. data/app/assets/stylesheets/wbase/auth/core.css +41 -41
  859. data/app/assets/stylesheets/wbase/auth/pages.css +43 -43
  860. data/app/views/layouts/wbase/_common_foot.html.erb +42 -0
  861. data/app/views/layouts/wbase/_common_head.html.erb +2 -1
  862. data/app/views/layouts/wbase/_olark.html.erb +34 -0
  863. data/app/views/layouts/wbase/_sidebar.html.erb +22 -0
  864. data/app/views/layouts/wbase/_topbar.html.erb +48 -0
  865. data/app/views/layouts/wbase/admin.html.erb +42 -0
  866. data/app/views/layouts/wbase/auth.html.erb +2 -1
  867. data/app/views/layouts/wbase/landing.html.erb +1 -0
  868. data/app/views/shared/{_errors.html.erb → wbase/_errors.html.erb} +0 -0
  869. data/app/views/shared/wbase/_page_title.html.erb +26 -0
  870. data/config/initializers/assets.rb +1 -1
  871. data/lib/wbase/engine.rb +6 -1
  872. data/lib/wbase/version.rb +1 -1
  873. data/test/dummy/db/development.sqlite3 +0 -0
  874. metadata +846 -4
  875. data/app/views/layouts/wbase/application.html.erb +0 -14
@@ -0,0 +1,2508 @@
1
+ /*
2
+ * jsGrid v1.5.1 (http://js-grid.com)
3
+ * (c) 2016 Artem Tabalin
4
+ * Licensed under MIT (https://github.com/tabalinas/jsgrid/blob/master/LICENSE)
5
+ */
6
+
7
+ (function(window, $, undefined) {
8
+
9
+ var JSGRID = "JSGrid",
10
+ JSGRID_DATA_KEY = JSGRID,
11
+ JSGRID_ROW_DATA_KEY = "JSGridItem",
12
+ JSGRID_EDIT_ROW_DATA_KEY = "JSGridEditRow",
13
+
14
+ SORT_ORDER_ASC = "asc",
15
+ SORT_ORDER_DESC = "desc",
16
+
17
+ FIRST_PAGE_PLACEHOLDER = "{first}",
18
+ PAGES_PLACEHOLDER = "{pages}",
19
+ PREV_PAGE_PLACEHOLDER = "{prev}",
20
+ NEXT_PAGE_PLACEHOLDER = "{next}",
21
+ LAST_PAGE_PLACEHOLDER = "{last}",
22
+ PAGE_INDEX_PLACEHOLDER = "{pageIndex}",
23
+ PAGE_COUNT_PLACEHOLDER = "{pageCount}",
24
+ ITEM_COUNT_PLACEHOLDER = "{itemCount}",
25
+
26
+ EMPTY_HREF = "javascript:void(0);";
27
+
28
+ var getOrApply = function(value, context) {
29
+ if($.isFunction(value)) {
30
+ return value.apply(context, $.makeArray(arguments).slice(2));
31
+ }
32
+ return value;
33
+ };
34
+
35
+ var normalizePromise = function(promise) {
36
+ var d = $.Deferred();
37
+
38
+ if(promise && promise.then) {
39
+ promise.then(function() {
40
+ d.resolve.apply(d, arguments);
41
+ }, function() {
42
+ d.reject.apply(d, arguments);
43
+ });
44
+ } else {
45
+ d.resolve(promise);
46
+ }
47
+
48
+ return d.promise();
49
+ };
50
+
51
+ var defaultController = {
52
+ loadData: $.noop,
53
+ insertItem: $.noop,
54
+ updateItem: $.noop,
55
+ deleteItem: $.noop
56
+ };
57
+
58
+
59
+ function Grid(element, config) {
60
+ var $element = $(element);
61
+
62
+ $element.data(JSGRID_DATA_KEY, this);
63
+
64
+ this._container = $element;
65
+
66
+ this.data = [];
67
+ this.fields = [];
68
+
69
+ this._editingRow = null;
70
+ this._sortField = null;
71
+ this._sortOrder = SORT_ORDER_ASC;
72
+ this._firstDisplayingPage = 1;
73
+
74
+ this._init(config);
75
+ this.render();
76
+ }
77
+
78
+ Grid.prototype = {
79
+ width: "auto",
80
+ height: "auto",
81
+ updateOnResize: true,
82
+
83
+ rowClass: $.noop,
84
+ rowRenderer: null,
85
+
86
+ rowClick: function(args) {
87
+ if(this.editing) {
88
+ this.editItem($(args.event.target).closest("tr"));
89
+ }
90
+ },
91
+ rowDoubleClick: $.noop,
92
+
93
+ noDataContent: "Not found",
94
+ noDataRowClass: "jsgrid-nodata-row",
95
+
96
+ heading: true,
97
+ headerRowRenderer: null,
98
+ headerRowClass: "jsgrid-header-row",
99
+ headerCellClass: "jsgrid-header-cell",
100
+
101
+ filtering: false,
102
+ filterRowRenderer: null,
103
+ filterRowClass: "jsgrid-filter-row",
104
+
105
+ inserting: false,
106
+ insertRowRenderer: null,
107
+ insertRowClass: "jsgrid-insert-row",
108
+
109
+ editing: false,
110
+ editRowRenderer: null,
111
+ editRowClass: "jsgrid-edit-row",
112
+
113
+ confirmDeleting: true,
114
+ deleteConfirm: "Are you sure?",
115
+
116
+ selecting: true,
117
+ selectedRowClass: "jsgrid-selected-row",
118
+ oddRowClass: "jsgrid-row",
119
+ evenRowClass: "jsgrid-alt-row",
120
+ cellClass: "jsgrid-cell",
121
+
122
+ sorting: false,
123
+ sortableClass: "jsgrid-header-sortable",
124
+ sortAscClass: "jsgrid-header-sort jsgrid-header-sort-asc",
125
+ sortDescClass: "jsgrid-header-sort jsgrid-header-sort-desc",
126
+
127
+ paging: false,
128
+ pagerContainer: null,
129
+ pageIndex: 1,
130
+ pageSize: 20,
131
+ pageButtonCount: 15,
132
+ pagerFormat: "Pages: {first} {prev} {pages} {next} {last}    {pageIndex} of {pageCount}",
133
+ pagePrevText: "Prev",
134
+ pageNextText: "Next",
135
+ pageFirstText: "First",
136
+ pageLastText: "Last",
137
+ pageNavigatorNextText: "...",
138
+ pageNavigatorPrevText: "...",
139
+ pagerContainerClass: "jsgrid-pager-container",
140
+ pagerClass: "jsgrid-pager",
141
+ pagerNavButtonClass: "jsgrid-pager-nav-button",
142
+ pagerNavButtonInactiveClass: "jsgrid-pager-nav-inactive-button",
143
+ pageClass: "jsgrid-pager-page",
144
+ currentPageClass: "jsgrid-pager-current-page",
145
+
146
+ customLoading: false,
147
+ pageLoading: false,
148
+
149
+ autoload: false,
150
+ controller: defaultController,
151
+
152
+ loadIndication: true,
153
+ loadIndicationDelay: 500,
154
+ loadMessage: "Please, wait...",
155
+ loadShading: true,
156
+
157
+ invalidMessage: "Invalid data entered!",
158
+
159
+ invalidNotify: function(args) {
160
+ var messages = $.map(args.errors, function(error) {
161
+ return error.message || null;
162
+ });
163
+
164
+ window.alert([this.invalidMessage].concat(messages).join("\n"));
165
+ },
166
+
167
+ onInit: $.noop,
168
+ onRefreshing: $.noop,
169
+ onRefreshed: $.noop,
170
+ onPageChanged: $.noop,
171
+ onItemDeleting: $.noop,
172
+ onItemDeleted: $.noop,
173
+ onItemInserting: $.noop,
174
+ onItemInserted: $.noop,
175
+ onItemEditing: $.noop,
176
+ onItemUpdating: $.noop,
177
+ onItemUpdated: $.noop,
178
+ onItemInvalid: $.noop,
179
+ onDataLoading: $.noop,
180
+ onDataLoaded: $.noop,
181
+ onOptionChanging: $.noop,
182
+ onOptionChanged: $.noop,
183
+ onError: $.noop,
184
+
185
+ invalidClass: "jsgrid-invalid",
186
+
187
+ containerClass: "jsgrid",
188
+ tableClass: "jsgrid-table",
189
+ gridHeaderClass: "jsgrid-grid-header",
190
+ gridBodyClass: "jsgrid-grid-body",
191
+
192
+ _init: function(config) {
193
+ $.extend(this, config);
194
+ this._initLoadStrategy();
195
+ this._initController();
196
+ this._initFields();
197
+ this._attachWindowLoadResize();
198
+ this._attachWindowResizeCallback();
199
+ this._callEventHandler(this.onInit)
200
+ },
201
+
202
+ loadStrategy: function() {
203
+ return this.pageLoading
204
+ ? new jsGrid.loadStrategies.PageLoadingStrategy(this)
205
+ : new jsGrid.loadStrategies.DirectLoadingStrategy(this);
206
+ },
207
+
208
+ _initLoadStrategy: function() {
209
+ this._loadStrategy = getOrApply(this.loadStrategy, this);
210
+ },
211
+
212
+ _initController: function() {
213
+ this._controller = $.extend({}, defaultController, getOrApply(this.controller, this));
214
+ },
215
+
216
+ renderTemplate: function(source, context, config) {
217
+ args = [];
218
+ for(var key in config) {
219
+ args.push(config[key]);
220
+ }
221
+
222
+ args.unshift(source, context);
223
+
224
+ source = getOrApply.apply(null, args);
225
+ return (source === undefined || source === null) ? "" : source;
226
+ },
227
+
228
+ loadIndicator: function(config) {
229
+ return new jsGrid.LoadIndicator(config);
230
+ },
231
+
232
+ validation: function(config) {
233
+ return jsGrid.Validation && new jsGrid.Validation(config);
234
+ },
235
+
236
+ _initFields: function() {
237
+ var self = this;
238
+ self.fields = $.map(self.fields, function(field) {
239
+ if($.isPlainObject(field)) {
240
+ var fieldConstructor = (field.type && jsGrid.fields[field.type]) || jsGrid.Field;
241
+ field = new fieldConstructor(field);
242
+ }
243
+ field._grid = self;
244
+ return field;
245
+ });
246
+ },
247
+
248
+ _attachWindowLoadResize: function() {
249
+ $(window).on("load", $.proxy(this._refreshSize, this));
250
+ },
251
+
252
+ _attachWindowResizeCallback: function() {
253
+ if(this.updateOnResize) {
254
+ $(window).on("resize", $.proxy(this._refreshSize, this));
255
+ }
256
+ },
257
+
258
+ _detachWindowResizeCallback: function() {
259
+ $(window).off("resize", this._refreshSize);
260
+ },
261
+
262
+ option: function(key, value) {
263
+ var optionChangingEventArgs,
264
+ optionChangedEventArgs;
265
+
266
+ if(arguments.length === 1)
267
+ return this[key];
268
+
269
+ optionChangingEventArgs = {
270
+ option: key,
271
+ oldValue: this[key],
272
+ newValue: value
273
+ };
274
+ this._callEventHandler(this.onOptionChanging, optionChangingEventArgs);
275
+
276
+ this._handleOptionChange(optionChangingEventArgs.option, optionChangingEventArgs.newValue);
277
+
278
+ optionChangedEventArgs = {
279
+ option: optionChangingEventArgs.option,
280
+ value: optionChangingEventArgs.newValue
281
+ };
282
+ this._callEventHandler(this.onOptionChanged, optionChangedEventArgs);
283
+ },
284
+
285
+ fieldOption: function(field, key, value) {
286
+ field = this._normalizeField(field);
287
+
288
+ if(arguments.length === 2)
289
+ return field[key];
290
+
291
+ field[key] = value;
292
+ this._renderGrid();
293
+ },
294
+
295
+ _handleOptionChange: function(name, value) {
296
+ this[name] = value;
297
+
298
+ switch(name) {
299
+ case "width":
300
+ case "height":
301
+ this._refreshSize();
302
+ break;
303
+ case "rowClass":
304
+ case "rowRenderer":
305
+ case "rowClick":
306
+ case "rowDoubleClick":
307
+ case "noDataRowClass":
308
+ case "noDataContent":
309
+ case "selecting":
310
+ case "selectedRowClass":
311
+ case "oddRowClass":
312
+ case "evenRowClass":
313
+ this._refreshContent();
314
+ break;
315
+ case "pageButtonCount":
316
+ case "pagerFormat":
317
+ case "pagePrevText":
318
+ case "pageNextText":
319
+ case "pageFirstText":
320
+ case "pageLastText":
321
+ case "pageNavigatorNextText":
322
+ case "pageNavigatorPrevText":
323
+ case "pagerClass":
324
+ case "pagerNavButtonClass":
325
+ case "pageClass":
326
+ case "currentPageClass":
327
+ case "pagerRenderer":
328
+ this._refreshPager();
329
+ break;
330
+ case "fields":
331
+ this._initFields();
332
+ this.render();
333
+ break;
334
+ case "data":
335
+ case "editing":
336
+ case "heading":
337
+ case "filtering":
338
+ case "inserting":
339
+ case "paging":
340
+ this.refresh();
341
+ break;
342
+ case "loadStrategy":
343
+ case "pageLoading":
344
+ this._initLoadStrategy();
345
+ this.search();
346
+ break;
347
+ case "pageIndex":
348
+ this.openPage(value);
349
+ break;
350
+ case "pageSize":
351
+ this.refresh();
352
+ this.search();
353
+ break;
354
+ case "editRowRenderer":
355
+ case "editRowClass":
356
+ this.cancelEdit();
357
+ break;
358
+ case "updateOnResize":
359
+ this._detachWindowResizeCallback();
360
+ this._attachWindowResizeCallback();
361
+ break;
362
+ case "invalidNotify":
363
+ case "invalidMessage":
364
+ break;
365
+ default:
366
+ this.render();
367
+ break;
368
+ }
369
+ },
370
+
371
+ destroy: function() {
372
+ this._detachWindowResizeCallback();
373
+ this._clear();
374
+ this._container.removeData(JSGRID_DATA_KEY);
375
+ },
376
+
377
+ render: function() {
378
+ this._renderGrid();
379
+ return this.autoload ? this.loadData() : $.Deferred().resolve().promise();
380
+ },
381
+
382
+ _renderGrid: function() {
383
+ this._clear();
384
+
385
+ this._container.addClass(this.containerClass)
386
+ .css("position", "relative")
387
+ .append(this._createHeader())
388
+ .append(this._createBody());
389
+
390
+ this._pagerContainer = this._createPagerContainer();
391
+ this._loadIndicator = this._createLoadIndicator();
392
+ this._validation = this._createValidation();
393
+
394
+ this.refresh();
395
+ },
396
+
397
+ _createLoadIndicator: function() {
398
+ return getOrApply(this.loadIndicator, this, {
399
+ message: this.loadMessage,
400
+ shading: this.loadShading,
401
+ container: this._container
402
+ });
403
+ },
404
+
405
+ _createValidation: function() {
406
+ return getOrApply(this.validation, this);
407
+ },
408
+
409
+ _clear: function() {
410
+ this.cancelEdit();
411
+
412
+ clearTimeout(this._loadingTimer);
413
+
414
+ this._pagerContainer && this._pagerContainer.empty();
415
+
416
+ this._container.empty()
417
+ .css({ position: "", width: "", height: "" });
418
+ },
419
+
420
+ _createHeader: function() {
421
+ var $headerRow = this._headerRow = this._createHeaderRow(),
422
+ $filterRow = this._filterRow = this._createFilterRow(),
423
+ $insertRow = this._insertRow = this._createInsertRow();
424
+
425
+ var $headerGrid = this._headerGrid = $("<table>").addClass(this.tableClass)
426
+ .append($headerRow)
427
+ .append($filterRow)
428
+ .append($insertRow);
429
+
430
+ var $header = this._header = $("<div>").addClass(this.gridHeaderClass)
431
+ .addClass(this._scrollBarWidth() ? "jsgrid-header-scrollbar" : "")
432
+ .append($headerGrid);
433
+
434
+ return $header;
435
+ },
436
+
437
+ _createBody: function() {
438
+ var $content = this._content = $("<tbody>");
439
+
440
+ var $bodyGrid = this._bodyGrid = $("<table>").addClass(this.tableClass)
441
+ .append($content);
442
+
443
+ var $body = this._body = $("<div>").addClass(this.gridBodyClass)
444
+ .append($bodyGrid)
445
+ .on("scroll", $.proxy(function(e) {
446
+ this._header.scrollLeft(e.target.scrollLeft);
447
+ }, this));
448
+
449
+ return $body;
450
+ },
451
+
452
+ _createPagerContainer: function() {
453
+ var pagerContainer = this.pagerContainer || $("<div>").appendTo(this._container);
454
+ return $(pagerContainer).addClass(this.pagerContainerClass);
455
+ },
456
+
457
+ _eachField: function(callBack) {
458
+ var self = this;
459
+ $.each(this.fields, function(index, field) {
460
+ if(field.visible) {
461
+ callBack.call(self, field, index);
462
+ }
463
+ });
464
+ },
465
+
466
+ _createHeaderRow: function() {
467
+ if($.isFunction(this.headerRowRenderer))
468
+ return $(this.renderTemplate(this.headerRowRenderer, this));
469
+
470
+ var $result = $("<tr>").addClass(this.headerRowClass);
471
+
472
+ this._eachField(function(field, index) {
473
+ var $th = this._prepareCell("<th>", field, "headercss", this.headerCellClass)
474
+ .append(this.renderTemplate(field.headerTemplate, field))
475
+ .appendTo($result);
476
+
477
+ if(this.sorting && field.sorting) {
478
+ $th.addClass(this.sortableClass)
479
+ .on("click", $.proxy(function() {
480
+ this.sort(index);
481
+ }, this));
482
+ }
483
+ });
484
+
485
+ return $result;
486
+ },
487
+
488
+ _prepareCell: function(cell, field, cssprop, cellClass) {
489
+ return $(cell).css("width", field.width)
490
+ .addClass(cellClass || this.cellClass)
491
+ .addClass((cssprop && field[cssprop]) || field.css)
492
+ .addClass(field.align ? ("jsgrid-align-" + field.align) : "");
493
+ },
494
+
495
+ _createFilterRow: function() {
496
+ if($.isFunction(this.filterRowRenderer))
497
+ return $(this.renderTemplate(this.filterRowRenderer, this));
498
+
499
+ var $result = $("<tr>").addClass(this.filterRowClass);
500
+
501
+ this._eachField(function(field) {
502
+ this._prepareCell("<td>", field, "filtercss")
503
+ .append(this.renderTemplate(field.filterTemplate, field))
504
+ .appendTo($result);
505
+ });
506
+
507
+ return $result;
508
+ },
509
+
510
+ _createInsertRow: function() {
511
+ if($.isFunction(this.insertRowRenderer))
512
+ return $(this.renderTemplate(this.insertRowRenderer, this));
513
+
514
+ var $result = $("<tr>").addClass(this.insertRowClass);
515
+
516
+ this._eachField(function(field) {
517
+ this._prepareCell("<td>", field, "insertcss")
518
+ .append(this.renderTemplate(field.insertTemplate, field))
519
+ .appendTo($result);
520
+ });
521
+
522
+ return $result;
523
+ },
524
+
525
+ _callEventHandler: function(handler, eventParams) {
526
+ handler.call(this, $.extend(eventParams, {
527
+ grid: this
528
+ }));
529
+
530
+ return eventParams;
531
+ },
532
+
533
+ reset: function() {
534
+ this._resetSorting();
535
+ this._resetPager();
536
+ return this._loadStrategy.reset();
537
+ },
538
+
539
+ _resetPager: function() {
540
+ this._firstDisplayingPage = 1;
541
+ this._setPage(1);
542
+ },
543
+
544
+ _resetSorting: function() {
545
+ this._sortField = null;
546
+ this._sortOrder = SORT_ORDER_ASC;
547
+ this._clearSortingCss();
548
+ },
549
+
550
+ refresh: function() {
551
+ this._callEventHandler(this.onRefreshing);
552
+
553
+ this.cancelEdit();
554
+
555
+ this._refreshHeading();
556
+ this._refreshFiltering();
557
+ this._refreshInserting();
558
+ this._refreshContent();
559
+ this._refreshPager();
560
+ this._refreshSize();
561
+
562
+ this._callEventHandler(this.onRefreshed);
563
+ },
564
+
565
+ _refreshHeading: function() {
566
+ this._headerRow.toggle(this.heading);
567
+ },
568
+
569
+ _refreshFiltering: function() {
570
+ this._filterRow.toggle(this.filtering);
571
+ },
572
+
573
+ _refreshInserting: function() {
574
+ this._insertRow.toggle(this.inserting);
575
+ },
576
+
577
+ _refreshContent: function() {
578
+ var $content = this._content;
579
+ $content.empty();
580
+
581
+ if(!this.data.length) {
582
+ $content.append(this._createNoDataRow());
583
+ return this;
584
+ }
585
+
586
+ var indexFrom = this._loadStrategy.firstDisplayIndex();
587
+ var indexTo = this._loadStrategy.lastDisplayIndex();
588
+
589
+ for(var itemIndex = indexFrom; itemIndex < indexTo; itemIndex++) {
590
+ var item = this.data[itemIndex];
591
+ $content.append(this._createRow(item, itemIndex));
592
+ }
593
+ },
594
+
595
+ _createNoDataRow: function() {
596
+ var amountOfFields = 0;
597
+ this._eachField(function() {
598
+ amountOfFields++;
599
+ });
600
+
601
+ return $("<tr>").addClass(this.noDataRowClass)
602
+ .append($("<td>").attr("colspan", amountOfFields)
603
+ .append(this.renderTemplate(this.noDataContent, this)));
604
+ },
605
+
606
+ _createRow: function(item, itemIndex) {
607
+ var $result;
608
+
609
+ if($.isFunction(this.rowRenderer)) {
610
+ $result = this.renderTemplate(this.rowRenderer, this, { item: item, itemIndex: itemIndex });
611
+ } else {
612
+ $result = $("<tr>");
613
+ this._renderCells($result, item);
614
+ }
615
+
616
+ $result.addClass(this._getRowClasses(item, itemIndex))
617
+ .data(JSGRID_ROW_DATA_KEY, item)
618
+ .on("click", $.proxy(function(e) {
619
+ this.rowClick({
620
+ item: item,
621
+ itemIndex: itemIndex,
622
+ event: e
623
+ });
624
+ }, this))
625
+ .on("dblclick", $.proxy(function(e) {
626
+ this.rowDoubleClick({
627
+ item: item,
628
+ itemIndex: itemIndex,
629
+ event: e
630
+ });
631
+ }, this));
632
+
633
+ if(this.selecting) {
634
+ this._attachRowHover($result);
635
+ }
636
+
637
+ return $result;
638
+ },
639
+
640
+ _getRowClasses: function(item, itemIndex) {
641
+ var classes = [];
642
+ classes.push(((itemIndex + 1) % 2) ? this.oddRowClass : this.evenRowClass);
643
+ classes.push(getOrApply(this.rowClass, this, item, itemIndex));
644
+ return classes.join(" ");
645
+ },
646
+
647
+ _attachRowHover: function($row) {
648
+ var selectedRowClass = this.selectedRowClass;
649
+ $row.hover(function() {
650
+ $(this).addClass(selectedRowClass);
651
+ },
652
+ function() {
653
+ $(this).removeClass(selectedRowClass);
654
+ }
655
+ );
656
+ },
657
+
658
+ _renderCells: function($row, item) {
659
+ this._eachField(function(field) {
660
+ $row.append(this._createCell(item, field));
661
+ });
662
+ return this;
663
+ },
664
+
665
+ _createCell: function(item, field) {
666
+ var $result;
667
+ var fieldValue = this._getItemFieldValue(item, field);
668
+
669
+ var args = { value: fieldValue, item : item };
670
+ if($.isFunction(field.cellRenderer)) {
671
+ $result = this.renderTemplate(field.cellRenderer, field, args);
672
+ } else {
673
+ $result = $("<td>").append(this.renderTemplate(field.itemTemplate || fieldValue, field, args));
674
+ }
675
+
676
+ return this._prepareCell($result, field);
677
+ },
678
+
679
+ _getItemFieldValue: function(item, field) {
680
+ var props = field.name.split('.');
681
+ var result = item[props.shift()];
682
+
683
+ while(result && props.length) {
684
+ result = result[props.shift()];
685
+ }
686
+
687
+ return result;
688
+ },
689
+
690
+ _setItemFieldValue: function(item, field, value) {
691
+ var props = field.name.split('.');
692
+ var current = item;
693
+ var prop = props[0];
694
+
695
+ while(current && props.length) {
696
+ item = current;
697
+ prop = props.shift();
698
+ current = item[prop];
699
+ }
700
+
701
+ if(!current) {
702
+ while(props.length) {
703
+ item = item[prop] = {};
704
+ prop = props.shift();
705
+ }
706
+ }
707
+
708
+ item[prop] = value;
709
+ },
710
+
711
+ sort: function(field, order) {
712
+ if($.isPlainObject(field)) {
713
+ order = field.order;
714
+ field = field.field;
715
+ }
716
+
717
+ this._clearSortingCss();
718
+ this._setSortingParams(field, order);
719
+ this._setSortingCss();
720
+ return this._loadStrategy.sort();
721
+ },
722
+
723
+ _clearSortingCss: function() {
724
+ this._headerRow.find("th")
725
+ .removeClass(this.sortAscClass)
726
+ .removeClass(this.sortDescClass);
727
+ },
728
+
729
+ _setSortingParams: function(field, order) {
730
+ field = this._normalizeField(field);
731
+ order = order || ((this._sortField === field) ? this._reversedSortOrder(this._sortOrder) : SORT_ORDER_ASC);
732
+
733
+ this._sortField = field;
734
+ this._sortOrder = order;
735
+ },
736
+
737
+ _normalizeField: function(field) {
738
+ if($.isNumeric(field)) {
739
+ return this.fields[field];
740
+ }
741
+
742
+ if(typeof field === "string") {
743
+ return $.grep(this.fields, function(f) {
744
+ return f.name === field;
745
+ })[0];
746
+ }
747
+
748
+ return field;
749
+ },
750
+
751
+ _reversedSortOrder: function(order) {
752
+ return (order === SORT_ORDER_ASC ? SORT_ORDER_DESC : SORT_ORDER_ASC);
753
+ },
754
+
755
+ _setSortingCss: function() {
756
+ var fieldIndex = this._visibleFieldIndex(this._sortField);
757
+
758
+ this._headerRow.find("th").eq(fieldIndex)
759
+ .addClass(this._sortOrder === SORT_ORDER_ASC ? this.sortAscClass : this.sortDescClass);
760
+ },
761
+
762
+ _visibleFieldIndex: function(field) {
763
+ return $.inArray(field, $.grep(this.fields, function(f) { return f.visible; }));
764
+ },
765
+
766
+ _sortData: function() {
767
+ var sortFactor = this._sortFactor(),
768
+ sortField = this._sortField;
769
+
770
+ if(sortField) {
771
+ this.data.sort(function(item1, item2) {
772
+ return sortFactor * sortField.sortingFunc(item1[sortField.name], item2[sortField.name]);
773
+ });
774
+ }
775
+ },
776
+
777
+ _sortFactor: function() {
778
+ return this._sortOrder === SORT_ORDER_ASC ? 1 : -1;
779
+ },
780
+
781
+ _itemsCount: function() {
782
+ return this._loadStrategy.itemsCount();
783
+ },
784
+
785
+ _pagesCount: function() {
786
+ var itemsCount = this._itemsCount(),
787
+ pageSize = this.pageSize;
788
+ return Math.floor(itemsCount / pageSize) + (itemsCount % pageSize ? 1 : 0);
789
+ },
790
+
791
+ _refreshPager: function() {
792
+ var $pagerContainer = this._pagerContainer;
793
+ $pagerContainer.empty();
794
+
795
+ if(this.paging) {
796
+ $pagerContainer.append(this._createPager());
797
+ }
798
+
799
+ var showPager = this.paging && this._pagesCount() > 1;
800
+ $pagerContainer.toggle(showPager);
801
+ },
802
+
803
+ _createPager: function() {
804
+ var $result;
805
+
806
+ if($.isFunction(this.pagerRenderer)) {
807
+ $result = $(this.pagerRenderer({
808
+ pageIndex: this.pageIndex,
809
+ pageCount: this._pagesCount()
810
+ }));
811
+ } else {
812
+ $result = $("<div>").append(this._createPagerByFormat());
813
+ }
814
+
815
+ $result.addClass(this.pagerClass);
816
+
817
+ return $result;
818
+ },
819
+
820
+ _createPagerByFormat: function() {
821
+ var pageIndex = this.pageIndex,
822
+ pageCount = this._pagesCount(),
823
+ itemCount = this._itemsCount(),
824
+ pagerParts = this.pagerFormat.split(" ");
825
+
826
+ return $.map(pagerParts, $.proxy(function(pagerPart) {
827
+ var result = pagerPart;
828
+
829
+ if(pagerPart === PAGES_PLACEHOLDER) {
830
+ result = this._createPages();
831
+ } else if(pagerPart === FIRST_PAGE_PLACEHOLDER) {
832
+ result = this._createPagerNavButton(this.pageFirstText, 1, pageIndex > 1);
833
+ } else if(pagerPart === PREV_PAGE_PLACEHOLDER) {
834
+ result = this._createPagerNavButton(this.pagePrevText, pageIndex - 1, pageIndex > 1);
835
+ } else if(pagerPart === NEXT_PAGE_PLACEHOLDER) {
836
+ result = this._createPagerNavButton(this.pageNextText, pageIndex + 1, pageIndex < pageCount);
837
+ } else if(pagerPart === LAST_PAGE_PLACEHOLDER) {
838
+ result = this._createPagerNavButton(this.pageLastText, pageCount, pageIndex < pageCount);
839
+ } else if(pagerPart === PAGE_INDEX_PLACEHOLDER) {
840
+ result = pageIndex;
841
+ } else if(pagerPart === PAGE_COUNT_PLACEHOLDER) {
842
+ result = pageCount;
843
+ } else if(pagerPart === ITEM_COUNT_PLACEHOLDER) {
844
+ result = itemCount;
845
+ }
846
+
847
+ return $.isArray(result) ? result.concat([" "]) : [result, " "];
848
+ }, this));
849
+ },
850
+
851
+ _createPages: function() {
852
+ var pageCount = this._pagesCount(),
853
+ pageButtonCount = this.pageButtonCount,
854
+ firstDisplayingPage = this._firstDisplayingPage,
855
+ pages = [];
856
+
857
+ if(firstDisplayingPage > 1) {
858
+ pages.push(this._createPagerPageNavButton(this.pageNavigatorPrevText, this.showPrevPages));
859
+ }
860
+
861
+ for(var i = 0, pageNumber = firstDisplayingPage; i < pageButtonCount && pageNumber <= pageCount; i++, pageNumber++) {
862
+ pages.push(pageNumber === this.pageIndex
863
+ ? this._createPagerCurrentPage()
864
+ : this._createPagerPage(pageNumber));
865
+ }
866
+
867
+ if((firstDisplayingPage + pageButtonCount - 1) < pageCount) {
868
+ pages.push(this._createPagerPageNavButton(this.pageNavigatorNextText, this.showNextPages));
869
+ }
870
+
871
+ return pages;
872
+ },
873
+
874
+ _createPagerNavButton: function(text, pageIndex, isActive) {
875
+ return this._createPagerButton(text, this.pagerNavButtonClass + (isActive ? "" : " " + this.pagerNavButtonInactiveClass),
876
+ isActive ? function() { this.openPage(pageIndex); } : $.noop);
877
+ },
878
+
879
+ _createPagerPageNavButton: function(text, handler) {
880
+ return this._createPagerButton(text, this.pagerNavButtonClass, handler);
881
+ },
882
+
883
+ _createPagerPage: function(pageIndex) {
884
+ return this._createPagerButton(pageIndex, this.pageClass, function() {
885
+ this.openPage(pageIndex);
886
+ });
887
+ },
888
+
889
+ _createPagerButton: function(text, css, handler) {
890
+ var $link = $("<a>").attr("href", EMPTY_HREF)
891
+ .html(text)
892
+ .on("click", $.proxy(handler, this));
893
+
894
+ return $("<span>").addClass(css).append($link);
895
+ },
896
+
897
+ _createPagerCurrentPage: function() {
898
+ return $("<span>")
899
+ .addClass(this.pageClass)
900
+ .addClass(this.currentPageClass)
901
+ .text(this.pageIndex);
902
+ },
903
+
904
+ _refreshSize: function() {
905
+ this._refreshHeight();
906
+ this._refreshWidth();
907
+ },
908
+
909
+ _refreshWidth: function() {
910
+ var $headerGrid = this._headerGrid,
911
+ $bodyGrid = this._bodyGrid,
912
+ width = this.width;
913
+
914
+ if(width === "auto") {
915
+ $headerGrid.width("auto");
916
+ width = $headerGrid.outerWidth();
917
+ }
918
+
919
+ $headerGrid.width("");
920
+ $bodyGrid.width("");
921
+ this._container.width(width);
922
+ width = $headerGrid.outerWidth();
923
+ $bodyGrid.width(width);
924
+ },
925
+
926
+ _scrollBarWidth: (function() {
927
+ var result;
928
+
929
+ return function() {
930
+ if(result === undefined) {
931
+ var $ghostContainer = $("<div style='width:50px;height:50px;overflow:hidden;position:absolute;top:-10000px;left:-10000px;'></div>");
932
+ var $ghostContent = $("<div style='height:100px;'></div>");
933
+ $ghostContainer.append($ghostContent).appendTo("body");
934
+ var width = $ghostContent.innerWidth();
935
+ $ghostContainer.css("overflow-y", "auto");
936
+ var widthExcludingScrollBar = $ghostContent.innerWidth();
937
+ $ghostContainer.remove();
938
+ result = width - widthExcludingScrollBar;
939
+ }
940
+ return result;
941
+ };
942
+ })(),
943
+
944
+ _refreshHeight: function() {
945
+ var container = this._container,
946
+ pagerContainer = this._pagerContainer,
947
+ height = this.height,
948
+ nonBodyHeight;
949
+
950
+ container.height(height);
951
+
952
+ if(height !== "auto") {
953
+ height = container.height();
954
+
955
+ nonBodyHeight = this._header.outerHeight(true);
956
+ if(pagerContainer.parents(container).length) {
957
+ nonBodyHeight += pagerContainer.outerHeight(true);
958
+ }
959
+
960
+ this._body.outerHeight(height - nonBodyHeight);
961
+ }
962
+ },
963
+
964
+ showPrevPages: function() {
965
+ var firstDisplayingPage = this._firstDisplayingPage,
966
+ pageButtonCount = this.pageButtonCount;
967
+
968
+ this._firstDisplayingPage = (firstDisplayingPage > pageButtonCount) ? firstDisplayingPage - pageButtonCount : 1;
969
+
970
+ this._refreshPager();
971
+ },
972
+
973
+ showNextPages: function() {
974
+ var firstDisplayingPage = this._firstDisplayingPage,
975
+ pageButtonCount = this.pageButtonCount,
976
+ pageCount = this._pagesCount();
977
+
978
+ this._firstDisplayingPage = (firstDisplayingPage + 2 * pageButtonCount > pageCount)
979
+ ? pageCount - pageButtonCount + 1
980
+ : firstDisplayingPage + pageButtonCount;
981
+
982
+ this._refreshPager();
983
+ },
984
+
985
+ openPage: function(pageIndex) {
986
+ if(pageIndex < 1 || pageIndex > this._pagesCount())
987
+ return;
988
+
989
+ this._setPage(pageIndex);
990
+ this._loadStrategy.openPage(pageIndex);
991
+ },
992
+
993
+ _setPage: function(pageIndex) {
994
+ var firstDisplayingPage = this._firstDisplayingPage,
995
+ pageButtonCount = this.pageButtonCount;
996
+
997
+ this.pageIndex = pageIndex;
998
+
999
+ if(pageIndex < firstDisplayingPage) {
1000
+ this._firstDisplayingPage = pageIndex;
1001
+ }
1002
+
1003
+ if(pageIndex > firstDisplayingPage + pageButtonCount - 1) {
1004
+ this._firstDisplayingPage = pageIndex - pageButtonCount + 1;
1005
+ }
1006
+
1007
+ this._callEventHandler(this.onPageChanged, {
1008
+ pageIndex: pageIndex
1009
+ });
1010
+ },
1011
+
1012
+ _controllerCall: function(method, param, isCanceled, doneCallback) {
1013
+ if(isCanceled)
1014
+ return $.Deferred().reject().promise();
1015
+
1016
+ this._showLoading();
1017
+
1018
+ var controller = this._controller;
1019
+ if(!controller || !controller[method]) {
1020
+ throw Error("controller has no method '" + method + "'");
1021
+ }
1022
+
1023
+ return normalizePromise(controller[method](param))
1024
+ .done($.proxy(doneCallback, this))
1025
+ .fail($.proxy(this._errorHandler, this))
1026
+ .always($.proxy(this._hideLoading, this));
1027
+ },
1028
+
1029
+ _errorHandler: function() {
1030
+ this._callEventHandler(this.onError, {
1031
+ args: $.makeArray(arguments)
1032
+ });
1033
+ },
1034
+
1035
+ _showLoading: function() {
1036
+ if(!this.loadIndication)
1037
+ return;
1038
+
1039
+ clearTimeout(this._loadingTimer);
1040
+
1041
+ this._loadingTimer = setTimeout($.proxy(function() {
1042
+ this._loadIndicator.show();
1043
+ }, this), this.loadIndicationDelay);
1044
+ },
1045
+
1046
+ _hideLoading: function() {
1047
+ if(!this.loadIndication)
1048
+ return;
1049
+
1050
+ clearTimeout(this._loadingTimer);
1051
+ this._loadIndicator.hide();
1052
+ },
1053
+
1054
+ search: function(filter) {
1055
+ this._resetSorting();
1056
+ this._resetPager();
1057
+ return this.loadData(filter);
1058
+ },
1059
+
1060
+ loadData: function(filter) {
1061
+ filter = filter || (this.filtering ? this.getFilter() : {});
1062
+
1063
+ $.extend(filter, this._loadStrategy.loadParams(), this._sortingParams());
1064
+
1065
+ var args = this._callEventHandler(this.onDataLoading, {
1066
+ filter: filter
1067
+ });
1068
+
1069
+ return this._controllerCall("loadData", filter, args.cancel, function(loadedData) {
1070
+ if(!loadedData)
1071
+ return;
1072
+
1073
+ this._loadStrategy.finishLoad(loadedData);
1074
+
1075
+ this._callEventHandler(this.onDataLoaded, {
1076
+ data: loadedData
1077
+ });
1078
+ });
1079
+ },
1080
+
1081
+ getFilter: function() {
1082
+ var result = {};
1083
+ this._eachField(function(field) {
1084
+ if(field.filtering) {
1085
+ this._setItemFieldValue(result, field, field.filterValue());
1086
+ }
1087
+ });
1088
+ return result;
1089
+ },
1090
+
1091
+ _sortingParams: function() {
1092
+ if(this.sorting && this._sortField) {
1093
+ return {
1094
+ sortField: this._sortField.name,
1095
+ sortOrder: this._sortOrder
1096
+ };
1097
+ }
1098
+ return {};
1099
+ },
1100
+
1101
+ getSorting: function() {
1102
+ var sortingParams = this._sortingParams();
1103
+ return {
1104
+ field: sortingParams.sortField,
1105
+ order: sortingParams.sortOrder
1106
+ };
1107
+ },
1108
+
1109
+ clearFilter: function() {
1110
+ var $filterRow = this._createFilterRow();
1111
+ this._filterRow.replaceWith($filterRow);
1112
+ this._filterRow = $filterRow;
1113
+ return this.search();
1114
+ },
1115
+
1116
+ insertItem: function(item) {
1117
+ var insertingItem = item || this._getValidatedInsertItem();
1118
+
1119
+ if(!insertingItem)
1120
+ return $.Deferred().reject().promise();
1121
+
1122
+ var args = this._callEventHandler(this.onItemInserting, {
1123
+ item: insertingItem
1124
+ });
1125
+
1126
+ return this._controllerCall("insertItem", insertingItem, args.cancel, function(insertedItem) {
1127
+ insertedItem = insertedItem || insertingItem;
1128
+ this._loadStrategy.finishInsert(insertedItem);
1129
+
1130
+ this._callEventHandler(this.onItemInserted, {
1131
+ item: insertedItem
1132
+ });
1133
+ });
1134
+ },
1135
+
1136
+ _getValidatedInsertItem: function() {
1137
+ var item = this._getInsertItem();
1138
+ return this._validateItem(item, this._insertRow) ? item : null;
1139
+ },
1140
+
1141
+ _getInsertItem: function() {
1142
+ var result = {};
1143
+ this._eachField(function(field) {
1144
+ if(field.inserting) {
1145
+ this._setItemFieldValue(result, field, field.insertValue());
1146
+ }
1147
+ });
1148
+ return result;
1149
+ },
1150
+
1151
+ _validateItem: function(item, $row) {
1152
+ var validationErrors = [];
1153
+
1154
+ var args = {
1155
+ item: item,
1156
+ itemIndex: this._rowIndex($row),
1157
+ row: $row
1158
+ };
1159
+
1160
+ this._eachField(function(field) {
1161
+ if(!field.validate)
1162
+ return;
1163
+
1164
+ var fieldValue = this._getItemFieldValue(item, field);
1165
+
1166
+ if(fieldValue === undefined)
1167
+ return;
1168
+
1169
+ var errors = this._validation.validate($.extend({
1170
+ value: fieldValue,
1171
+ rules: field.validate
1172
+ }, args));
1173
+
1174
+ this._setCellValidity($row.children().eq(this._visibleFieldIndex(field)), errors);
1175
+
1176
+ if(!errors.length)
1177
+ return;
1178
+
1179
+ validationErrors.push.apply(validationErrors,
1180
+ $.map(errors, function(message) {
1181
+ return { field: field, message: message };
1182
+ }));
1183
+ });
1184
+
1185
+ if(!validationErrors.length)
1186
+ return true;
1187
+
1188
+ var invalidArgs = $.extend({
1189
+ errors: validationErrors
1190
+ }, args);
1191
+ this._callEventHandler(this.onItemInvalid, invalidArgs);
1192
+ this.invalidNotify(invalidArgs);
1193
+
1194
+ return false;
1195
+ },
1196
+
1197
+ _setCellValidity: function($cell, errors) {
1198
+ $cell
1199
+ .toggleClass(this.invalidClass, !!errors.length)
1200
+ .attr("title", errors.join("\n"));
1201
+ },
1202
+
1203
+ clearInsert: function() {
1204
+ var insertRow = this._createInsertRow();
1205
+ this._insertRow.replaceWith(insertRow);
1206
+ this._insertRow = insertRow;
1207
+ this.refresh();
1208
+ },
1209
+
1210
+ editItem: function(item) {
1211
+ var $row = this.rowByItem(item);
1212
+ if($row.length) {
1213
+ this._editRow($row);
1214
+ }
1215
+ },
1216
+
1217
+ rowByItem: function(item) {
1218
+ if(item.jquery || item.nodeType)
1219
+ return $(item);
1220
+
1221
+ return this._content.find("tr").filter(function() {
1222
+ return $.data(this, JSGRID_ROW_DATA_KEY) === item;
1223
+ });
1224
+ },
1225
+
1226
+ _editRow: function($row) {
1227
+ if(!this.editing)
1228
+ return;
1229
+
1230
+ var item = $row.data(JSGRID_ROW_DATA_KEY);
1231
+
1232
+ var args = this._callEventHandler(this.onItemEditing, {
1233
+ row: $row,
1234
+ item: item,
1235
+ itemIndex: this._itemIndex(item)
1236
+ });
1237
+
1238
+ if(args.cancel)
1239
+ return;
1240
+
1241
+ if(this._editingRow) {
1242
+ this.cancelEdit();
1243
+ }
1244
+
1245
+ var $editRow = this._createEditRow(item);
1246
+
1247
+ this._editingRow = $row;
1248
+ $row.hide();
1249
+ $editRow.insertBefore($row);
1250
+ $row.data(JSGRID_EDIT_ROW_DATA_KEY, $editRow);
1251
+ },
1252
+
1253
+ _createEditRow: function(item) {
1254
+ if($.isFunction(this.editRowRenderer)) {
1255
+ return $(this.renderTemplate(field.editRowRenderer, field, { item: item, itemIndex: this._itemIndex(item) }));
1256
+ }
1257
+
1258
+ var $result = $("<tr>").addClass(this.editRowClass);
1259
+
1260
+ this._eachField(function(field) {
1261
+ var fieldValue = this._getItemFieldValue(item, field);
1262
+
1263
+ this._prepareCell("<td>", field, "editcss")
1264
+ .append(this.renderTemplate(field.editTemplate || "", field, { value: fieldValue, item: item }))
1265
+ .appendTo($result);
1266
+ });
1267
+
1268
+ return $result;
1269
+ },
1270
+
1271
+ updateItem: function(item, editedItem) {
1272
+ if(arguments.length === 1) {
1273
+ editedItem = item;
1274
+ }
1275
+
1276
+ var $row = item ? this.rowByItem(item) : this._editingRow;
1277
+ editedItem = editedItem || this._getValidatedEditedItem();
1278
+
1279
+ if(!editedItem)
1280
+ return;
1281
+
1282
+ return this._updateRow($row, editedItem);
1283
+ },
1284
+
1285
+ _getValidatedEditedItem: function() {
1286
+ var item = this._getEditedItem();
1287
+ return this._validateItem(item, this._getEditRow()) ? item : null;
1288
+ },
1289
+
1290
+ _updateRow: function($updatingRow, editedItem) {
1291
+ var updatingItem = $updatingRow.data(JSGRID_ROW_DATA_KEY),
1292
+ updatingItemIndex = this._itemIndex(updatingItem),
1293
+ previousItem = $.extend(true, {}, updatingItem);
1294
+
1295
+ $.extend(true, updatingItem, editedItem);
1296
+
1297
+ var args = this._callEventHandler(this.onItemUpdating, {
1298
+ row: $updatingRow,
1299
+ item: updatingItem,
1300
+ itemIndex: updatingItemIndex,
1301
+ previousItem: previousItem
1302
+ });
1303
+
1304
+ return this._controllerCall("updateItem", updatingItem, args.cancel, function(updatedItem) {
1305
+ updatedItem = updatedItem || updatingItem;
1306
+ var $updatedRow = this._finishUpdate($updatingRow, updatedItem, updatingItemIndex);
1307
+
1308
+ this._callEventHandler(this.onItemUpdated, {
1309
+ row: $updatedRow,
1310
+ item: updatedItem,
1311
+ itemIndex: updatingItemIndex,
1312
+ previousItem: previousItem
1313
+ });
1314
+ });
1315
+ },
1316
+
1317
+ _rowIndex: function(row) {
1318
+ return this._content.children().index($(row));
1319
+ },
1320
+
1321
+ _itemIndex: function(item) {
1322
+ return $.inArray(item, this.data);
1323
+ },
1324
+
1325
+ _finishUpdate: function($updatingRow, updatedItem, updatedItemIndex) {
1326
+ this.cancelEdit();
1327
+ this.data[updatedItemIndex] = updatedItem;
1328
+
1329
+ var $updatedRow = this._createRow(updatedItem, updatedItemIndex);
1330
+ $updatingRow.replaceWith($updatedRow);
1331
+ return $updatedRow;
1332
+ },
1333
+
1334
+ _getEditedItem: function() {
1335
+ var result = {};
1336
+ this._eachField(function(field) {
1337
+ if(field.editing) {
1338
+ this._setItemFieldValue(result, field, field.editValue());
1339
+ }
1340
+ });
1341
+ return result;
1342
+ },
1343
+
1344
+ cancelEdit: function() {
1345
+ if(!this._editingRow)
1346
+ return;
1347
+
1348
+ this._getEditRow().remove();
1349
+ this._editingRow.show();
1350
+ this._editingRow = null;
1351
+ },
1352
+
1353
+ _getEditRow: function() {
1354
+ return this._editingRow.data(JSGRID_EDIT_ROW_DATA_KEY);
1355
+ },
1356
+
1357
+ deleteItem: function(item) {
1358
+ var $row = this.rowByItem(item);
1359
+
1360
+ if(!$row.length)
1361
+ return;
1362
+
1363
+ if(this.confirmDeleting && !window.confirm(getOrApply(this.deleteConfirm, this, $row.data(JSGRID_ROW_DATA_KEY))))
1364
+ return;
1365
+
1366
+ return this._deleteRow($row);
1367
+ },
1368
+
1369
+ _deleteRow: function($row) {
1370
+ var deletingItem = $row.data(JSGRID_ROW_DATA_KEY),
1371
+ deletingItemIndex = this._itemIndex(deletingItem);
1372
+
1373
+ var args = this._callEventHandler(this.onItemDeleting, {
1374
+ row: $row,
1375
+ item: deletingItem,
1376
+ itemIndex: deletingItemIndex
1377
+ });
1378
+
1379
+ return this._controllerCall("deleteItem", deletingItem, args.cancel, function() {
1380
+ this._loadStrategy.finishDelete(deletingItem, deletingItemIndex);
1381
+
1382
+ this._callEventHandler(this.onItemDeleted, {
1383
+ row: $row,
1384
+ item: deletingItem,
1385
+ itemIndex: deletingItemIndex
1386
+ });
1387
+ });
1388
+ }
1389
+ };
1390
+
1391
+ $.fn.jsGrid = function(config) {
1392
+ var args = $.makeArray(arguments),
1393
+ methodArgs = args.slice(1),
1394
+ result = this;
1395
+
1396
+ this.each(function() {
1397
+ var $element = $(this),
1398
+ instance = $element.data(JSGRID_DATA_KEY),
1399
+ methodResult;
1400
+
1401
+ if(instance) {
1402
+ if(typeof config === "string") {
1403
+ methodResult = instance[config].apply(instance, methodArgs);
1404
+ if(methodResult !== undefined && methodResult !== instance) {
1405
+ result = methodResult;
1406
+ return false;
1407
+ }
1408
+ } else {
1409
+ instance._detachWindowResizeCallback();
1410
+ instance._init(config);
1411
+ instance.render();
1412
+ }
1413
+ } else {
1414
+ new Grid($element, config);
1415
+ }
1416
+ });
1417
+
1418
+ return result;
1419
+ };
1420
+
1421
+ var fields = {};
1422
+
1423
+ var setDefaults = function(config) {
1424
+ var componentPrototype;
1425
+
1426
+ if($.isPlainObject(config)) {
1427
+ componentPrototype = Grid.prototype;
1428
+ } else {
1429
+ componentPrototype = fields[config].prototype;
1430
+ config = arguments[1] || {};
1431
+ }
1432
+
1433
+ $.extend(componentPrototype, config);
1434
+ };
1435
+
1436
+ var locales = {};
1437
+
1438
+ var locale = function(lang) {
1439
+ var localeConfig = $.isPlainObject(lang) ? lang : locales[lang];
1440
+
1441
+ if(!localeConfig)
1442
+ throw Error("unknown locale " + lang);
1443
+
1444
+ setLocale(jsGrid, localeConfig);
1445
+ };
1446
+
1447
+ var setLocale = function(obj, localeConfig) {
1448
+ $.each(localeConfig, function(field, value) {
1449
+ if($.isPlainObject(value)) {
1450
+ setLocale(obj[field] || obj[field[0].toUpperCase() + field.slice(1)], value);
1451
+ return;
1452
+ }
1453
+
1454
+ if(obj.hasOwnProperty(field)) {
1455
+ obj[field] = value;
1456
+ } else {
1457
+ obj.prototype[field] = value;
1458
+ }
1459
+ });
1460
+ };
1461
+
1462
+ window.jsGrid = {
1463
+ Grid: Grid,
1464
+ fields: fields,
1465
+ setDefaults: setDefaults,
1466
+ locales: locales,
1467
+ locale: locale,
1468
+ version: '1.5.1'
1469
+ };
1470
+
1471
+ }(window, jQuery));
1472
+
1473
+ (function(jsGrid, $, undefined) {
1474
+
1475
+ function LoadIndicator(config) {
1476
+ this._init(config);
1477
+ }
1478
+
1479
+ LoadIndicator.prototype = {
1480
+
1481
+ container: "body",
1482
+ message: "Loading...",
1483
+ shading: true,
1484
+
1485
+ zIndex: 1000,
1486
+ shaderClass: "jsgrid-load-shader",
1487
+ loadPanelClass: "jsgrid-load-panel",
1488
+
1489
+ _init: function(config) {
1490
+ $.extend(true, this, config);
1491
+
1492
+ this._initContainer();
1493
+ this._initShader();
1494
+ this._initLoadPanel();
1495
+ },
1496
+
1497
+ _initContainer: function() {
1498
+ this._container = $(this.container);
1499
+ },
1500
+
1501
+ _initShader: function() {
1502
+ if(!this.shading)
1503
+ return;
1504
+
1505
+ this._shader = $("<div>").addClass(this.shaderClass)
1506
+ .hide()
1507
+ .css({
1508
+ position: "absolute",
1509
+ top: 0,
1510
+ right: 0,
1511
+ bottom: 0,
1512
+ left: 0,
1513
+ zIndex: this.zIndex
1514
+ })
1515
+ .appendTo(this._container);
1516
+ },
1517
+
1518
+ _initLoadPanel: function() {
1519
+ this._loadPanel = $("<div>").addClass(this.loadPanelClass)
1520
+ .text(this.message)
1521
+ .hide()
1522
+ .css({
1523
+ position: "absolute",
1524
+ top: "50%",
1525
+ left: "50%",
1526
+ zIndex: this.zIndex
1527
+ })
1528
+ .appendTo(this._container);
1529
+ },
1530
+
1531
+ show: function() {
1532
+ var $loadPanel = this._loadPanel.show();
1533
+
1534
+ var actualWidth = $loadPanel.outerWidth();
1535
+ var actualHeight = $loadPanel.outerHeight();
1536
+
1537
+ $loadPanel.css({
1538
+ marginTop: -actualHeight / 2,
1539
+ marginLeft: -actualWidth / 2
1540
+ });
1541
+
1542
+ this._shader.show();
1543
+ },
1544
+
1545
+ hide: function() {
1546
+ this._loadPanel.hide();
1547
+ this._shader.hide();
1548
+ }
1549
+
1550
+ };
1551
+
1552
+ jsGrid.LoadIndicator = LoadIndicator;
1553
+
1554
+ }(jsGrid, jQuery));
1555
+
1556
+ (function(jsGrid, $, undefined) {
1557
+
1558
+ function DirectLoadingStrategy(grid) {
1559
+ this._grid = grid;
1560
+ }
1561
+
1562
+ DirectLoadingStrategy.prototype = {
1563
+
1564
+ firstDisplayIndex: function() {
1565
+ var grid = this._grid;
1566
+ return grid.option("paging") ? (grid.option("pageIndex") - 1) * grid.option("pageSize") : 0;
1567
+ },
1568
+
1569
+ lastDisplayIndex: function() {
1570
+ var grid = this._grid;
1571
+ var itemsCount = grid.option("data").length;
1572
+
1573
+ return grid.option("paging")
1574
+ ? Math.min(grid.option("pageIndex") * grid.option("pageSize"), itemsCount)
1575
+ : itemsCount;
1576
+ },
1577
+
1578
+ itemsCount: function() {
1579
+ return this._grid.option("data").length;
1580
+ },
1581
+
1582
+ openPage: function(index) {
1583
+ this._grid.refresh();
1584
+ },
1585
+
1586
+ loadParams: function() {
1587
+ return {};
1588
+ },
1589
+
1590
+ sort: function() {
1591
+ this._grid._sortData();
1592
+ this._grid.refresh();
1593
+ return $.Deferred().resolve().promise();
1594
+ },
1595
+
1596
+ reset: function() {
1597
+ this._grid.refresh();
1598
+ return $.Deferred().resolve().promise();
1599
+ },
1600
+
1601
+ finishLoad: function(loadedData) {
1602
+ this._grid.option("data", loadedData);
1603
+ },
1604
+
1605
+ finishInsert: function(insertedItem) {
1606
+ var grid = this._grid;
1607
+ grid.option("data").push(insertedItem);
1608
+ grid.refresh();
1609
+ },
1610
+
1611
+ finishDelete: function(deletedItem, deletedItemIndex) {
1612
+ var grid = this._grid;
1613
+ grid.option("data").splice(deletedItemIndex, 1);
1614
+ grid.reset();
1615
+ }
1616
+ };
1617
+
1618
+
1619
+ function PageLoadingStrategy(grid) {
1620
+ this._grid = grid;
1621
+ this._itemsCount = 0;
1622
+ }
1623
+
1624
+ PageLoadingStrategy.prototype = {
1625
+
1626
+ firstDisplayIndex: function() {
1627
+ return 0;
1628
+ },
1629
+
1630
+ lastDisplayIndex: function() {
1631
+ return this._grid.option("data").length;
1632
+ },
1633
+
1634
+ itemsCount: function() {
1635
+ return this._itemsCount;
1636
+ },
1637
+
1638
+ openPage: function(index) {
1639
+ this._grid.loadData();
1640
+ },
1641
+
1642
+ loadParams: function() {
1643
+ var grid = this._grid;
1644
+ return {
1645
+ pageIndex: grid.option("pageIndex"),
1646
+ pageSize: grid.option("pageSize")
1647
+ };
1648
+ },
1649
+
1650
+ reset: function() {
1651
+ return this._grid.loadData();
1652
+ },
1653
+
1654
+ sort: function() {
1655
+ return this._grid.loadData();
1656
+ },
1657
+
1658
+ finishLoad: function(loadedData) {
1659
+ this._itemsCount = loadedData.itemsCount;
1660
+ this._grid.option("data", loadedData.data);
1661
+ },
1662
+
1663
+ finishInsert: function(insertedItem) {
1664
+ this._grid.search();
1665
+ },
1666
+
1667
+ finishDelete: function(deletedItem, deletedItemIndex) {
1668
+ this._grid.search();
1669
+ }
1670
+ };
1671
+
1672
+ jsGrid.loadStrategies = {
1673
+ DirectLoadingStrategy: DirectLoadingStrategy,
1674
+ PageLoadingStrategy: PageLoadingStrategy
1675
+ };
1676
+
1677
+ }(jsGrid, jQuery));
1678
+
1679
+ (function(jsGrid, $, undefined) {
1680
+
1681
+ var isDefined = function(val) {
1682
+ return typeof(val) !== "undefined" && val !== null;
1683
+ };
1684
+
1685
+ var sortStrategies = {
1686
+ string: function(str1, str2) {
1687
+ if(!isDefined(str1) && !isDefined(str2))
1688
+ return 0;
1689
+
1690
+ if(!isDefined(str1))
1691
+ return -1;
1692
+
1693
+ if(!isDefined(str2))
1694
+ return 1;
1695
+
1696
+ return ("" + str1).localeCompare("" + str2);
1697
+ },
1698
+
1699
+ number: function(n1, n2) {
1700
+ return n1 - n2;
1701
+ },
1702
+
1703
+ date: function(dt1, dt2) {
1704
+ return dt1 - dt2;
1705
+ },
1706
+
1707
+ numberAsString: function(n1, n2) {
1708
+ return parseFloat(n1) - parseFloat(n2);
1709
+ }
1710
+ };
1711
+
1712
+ jsGrid.sortStrategies = sortStrategies;
1713
+
1714
+ }(jsGrid, jQuery));
1715
+
1716
+ (function(jsGrid, $, undefined) {
1717
+
1718
+ function Validation(config) {
1719
+ this._init(config);
1720
+ }
1721
+
1722
+ Validation.prototype = {
1723
+
1724
+ _init: function(config) {
1725
+ $.extend(true, this, config);
1726
+ },
1727
+
1728
+ validate: function(args) {
1729
+ var errors = [];
1730
+
1731
+ $.each(this._normalizeRules(args.rules), function(_, rule) {
1732
+ if(rule.validator(args.value, args.item, rule.param))
1733
+ return;
1734
+
1735
+ var errorMessage = $.isFunction(rule.message) ? rule.message(args.value, args.item) : rule.message;
1736
+ errors.push(errorMessage);
1737
+ });
1738
+
1739
+ return errors;
1740
+ },
1741
+
1742
+ _normalizeRules: function(rules) {
1743
+ if(!$.isArray(rules))
1744
+ rules = [rules];
1745
+
1746
+ return $.map(rules, $.proxy(function(rule) {
1747
+ return this._normalizeRule(rule);
1748
+ }, this));
1749
+ },
1750
+
1751
+ _normalizeRule: function(rule) {
1752
+ if(typeof rule === "string")
1753
+ rule = { validator: rule };
1754
+
1755
+ if($.isFunction(rule))
1756
+ rule = { validator: rule };
1757
+
1758
+ if($.isPlainObject(rule))
1759
+ rule = $.extend({}, rule);
1760
+ else
1761
+ throw Error("wrong validation config specified");
1762
+
1763
+ if($.isFunction(rule.validator))
1764
+ return rule;
1765
+
1766
+ return this._applyNamedValidator(rule, rule.validator);
1767
+ },
1768
+
1769
+ _applyNamedValidator: function(rule, validatorName) {
1770
+ delete rule.validator;
1771
+
1772
+ var validator = validators[validatorName];
1773
+ if(!validator)
1774
+ throw Error("unknown validator \"" + validatorName + "\"");
1775
+
1776
+ if($.isFunction(validator)) {
1777
+ validator = { validator: validator };
1778
+ }
1779
+
1780
+ return $.extend({}, validator, rule);
1781
+ }
1782
+ };
1783
+
1784
+ jsGrid.Validation = Validation;
1785
+
1786
+
1787
+ var validators = {
1788
+ required: {
1789
+ message: "Field is required",
1790
+ validator: function(value) {
1791
+ return value !== undefined && value !== null && value !== "";
1792
+ }
1793
+ },
1794
+
1795
+ rangeLength: {
1796
+ message: "Field value length is out of the defined range",
1797
+ validator: function(value, _, param) {
1798
+ return value.length >= param[0] && value.length <= param[1];
1799
+ }
1800
+ },
1801
+
1802
+ minLength: {
1803
+ message: "Field value is too short",
1804
+ validator: function(value, _, param) {
1805
+ return value.length >= param;
1806
+ }
1807
+ },
1808
+
1809
+ maxLength: {
1810
+ message: "Field value is too long",
1811
+ validator: function(value, _, param) {
1812
+ return value.length <= param;
1813
+ }
1814
+ },
1815
+
1816
+ pattern: {
1817
+ message: "Field value is not matching the defined pattern",
1818
+ validator: function(value, _, param) {
1819
+ if(typeof param === "string") {
1820
+ param = new RegExp("^(?:" + param + ")$");
1821
+ }
1822
+ return param.test(value);
1823
+ }
1824
+ },
1825
+
1826
+ range: {
1827
+ message: "Field value is out of the defined range",
1828
+ validator: function(value, _, param) {
1829
+ return value >= param[0] && value <= param[1];
1830
+ }
1831
+ },
1832
+
1833
+ min: {
1834
+ message: "Field value is too small",
1835
+ validator: function(value, _, param) {
1836
+ return value >= param;
1837
+ }
1838
+ },
1839
+
1840
+ max: {
1841
+ message: "Field value is too large",
1842
+ validator: function(value, _, param) {
1843
+ return value <= param;
1844
+ }
1845
+ }
1846
+ };
1847
+
1848
+ jsGrid.validators = validators;
1849
+
1850
+ }(jsGrid, jQuery));
1851
+
1852
+ (function(jsGrid, $, undefined) {
1853
+
1854
+ function Field(config) {
1855
+ $.extend(true, this, config);
1856
+ this.sortingFunc = this._getSortingFunc();
1857
+ }
1858
+
1859
+ Field.prototype = {
1860
+ name: "",
1861
+ title: null,
1862
+ css: "",
1863
+ align: "",
1864
+ width: 100,
1865
+
1866
+ visible: true,
1867
+ filtering: true,
1868
+ inserting: true,
1869
+ editing: true,
1870
+ sorting: true,
1871
+ sorter: "string", // name of SortStrategy or function to compare elements
1872
+
1873
+ headerTemplate: function() {
1874
+ return (this.title === undefined || this.title === null) ? this.name : this.title;
1875
+ },
1876
+
1877
+ itemTemplate: function(value, item) {
1878
+ return value;
1879
+ },
1880
+
1881
+ filterTemplate: function() {
1882
+ return "";
1883
+ },
1884
+
1885
+ insertTemplate: function() {
1886
+ return "";
1887
+ },
1888
+
1889
+ editTemplate: function(value, item) {
1890
+ this._value = value;
1891
+ return this.itemTemplate(value, item);
1892
+ },
1893
+
1894
+ filterValue: function() {
1895
+ return "";
1896
+ },
1897
+
1898
+ insertValue: function() {
1899
+ return "";
1900
+ },
1901
+
1902
+ editValue: function() {
1903
+ return this._value;
1904
+ },
1905
+
1906
+ _getSortingFunc: function() {
1907
+ var sorter = this.sorter;
1908
+
1909
+ if($.isFunction(sorter)) {
1910
+ return sorter;
1911
+ }
1912
+
1913
+ if(typeof sorter === "string") {
1914
+ return jsGrid.sortStrategies[sorter];
1915
+ }
1916
+
1917
+ throw Error("wrong sorter for the field \"" + this.name + "\"!");
1918
+ }
1919
+ };
1920
+
1921
+ jsGrid.Field = Field;
1922
+
1923
+ }(jsGrid, jQuery));
1924
+
1925
+ (function(jsGrid, $, undefined) {
1926
+
1927
+ var Field = jsGrid.Field;
1928
+
1929
+ function TextField(config) {
1930
+ Field.call(this, config);
1931
+ }
1932
+
1933
+ TextField.prototype = new Field({
1934
+
1935
+ autosearch: true,
1936
+ readOnly: false,
1937
+
1938
+ filterTemplate: function() {
1939
+ if(!this.filtering)
1940
+ return "";
1941
+
1942
+ var grid = this._grid,
1943
+ $result = this.filterControl = this._createTextBox();
1944
+
1945
+ if(this.autosearch) {
1946
+ $result.on("keypress", function(e) {
1947
+ if(e.which === 13) {
1948
+ grid.search();
1949
+ e.preventDefault();
1950
+ }
1951
+ });
1952
+ }
1953
+
1954
+ return $result;
1955
+ },
1956
+
1957
+ insertTemplate: function() {
1958
+ if(!this.inserting)
1959
+ return "";
1960
+
1961
+ return this.insertControl = this._createTextBox();
1962
+ },
1963
+
1964
+ editTemplate: function(value) {
1965
+ if(!this.editing)
1966
+ return this.itemTemplate(value);
1967
+
1968
+ var $result = this.editControl = this._createTextBox();
1969
+ $result.val(value);
1970
+ return $result;
1971
+ },
1972
+
1973
+ filterValue: function() {
1974
+ return this.filterControl.val();
1975
+ },
1976
+
1977
+ insertValue: function() {
1978
+ return this.insertControl.val();
1979
+ },
1980
+
1981
+ editValue: function() {
1982
+ return this.editControl.val();
1983
+ },
1984
+
1985
+ _createTextBox: function() {
1986
+ return $("<input>").attr("type", "text")
1987
+ .prop("readonly", !!this.readOnly);
1988
+ }
1989
+ });
1990
+
1991
+ jsGrid.fields.text = jsGrid.TextField = TextField;
1992
+
1993
+ }(jsGrid, jQuery));
1994
+
1995
+ (function(jsGrid, $, undefined) {
1996
+
1997
+ var TextField = jsGrid.TextField;
1998
+
1999
+ function NumberField(config) {
2000
+ TextField.call(this, config);
2001
+ }
2002
+
2003
+ NumberField.prototype = new TextField({
2004
+
2005
+ sorter: "number",
2006
+ align: "right",
2007
+ readOnly: false,
2008
+
2009
+ filterValue: function() {
2010
+ return parseInt(this.filterControl.val() || 0, 10);
2011
+ },
2012
+
2013
+ insertValue: function() {
2014
+ return parseInt(this.insertControl.val() || 0, 10);
2015
+ },
2016
+
2017
+ editValue: function() {
2018
+ return parseInt(this.editControl.val() || 0, 10);
2019
+ },
2020
+
2021
+ _createTextBox: function() {
2022
+ return $("<input>").attr("type", "number")
2023
+ .prop("readonly", !!this.readOnly);
2024
+ }
2025
+ });
2026
+
2027
+ jsGrid.fields.number = jsGrid.NumberField = NumberField;
2028
+
2029
+ }(jsGrid, jQuery));
2030
+
2031
+ (function(jsGrid, $, undefined) {
2032
+
2033
+ var TextField = jsGrid.TextField;
2034
+
2035
+ function TextAreaField(config) {
2036
+ TextField.call(this, config);
2037
+ }
2038
+
2039
+ TextAreaField.prototype = new TextField({
2040
+
2041
+ insertTemplate: function() {
2042
+ if(!this.inserting)
2043
+ return "";
2044
+
2045
+ return this.insertControl = this._createTextArea();
2046
+ },
2047
+
2048
+ editTemplate: function(value) {
2049
+ if(!this.editing)
2050
+ return this.itemTemplate(value);
2051
+
2052
+ var $result = this.editControl = this._createTextArea();
2053
+ $result.val(value);
2054
+ return $result;
2055
+ },
2056
+
2057
+ _createTextArea: function() {
2058
+ return $("<textarea>").prop("readonly", !!this.readOnly);
2059
+ }
2060
+ });
2061
+
2062
+ jsGrid.fields.textarea = jsGrid.TextAreaField = TextAreaField;
2063
+
2064
+ }(jsGrid, jQuery));
2065
+
2066
+ (function(jsGrid, $, undefined) {
2067
+
2068
+ var NumberField = jsGrid.NumberField;
2069
+ var numberValueType = "number";
2070
+ var stringValueType = "string";
2071
+
2072
+ function SelectField(config) {
2073
+ this.items = [];
2074
+ this.selectedIndex = -1;
2075
+ this.valueField = "";
2076
+ this.textField = "";
2077
+
2078
+ if(config.valueField && config.items.length) {
2079
+ var firstItemValue = config.items[0][config.valueField];
2080
+ this.valueType = (typeof firstItemValue) === numberValueType ? numberValueType : stringValueType;
2081
+ }
2082
+
2083
+ this.sorter = this.valueType;
2084
+
2085
+ NumberField.call(this, config);
2086
+ }
2087
+
2088
+ SelectField.prototype = new NumberField({
2089
+
2090
+ align: "center",
2091
+ valueType: numberValueType,
2092
+
2093
+ itemTemplate: function(value) {
2094
+ var items = this.items,
2095
+ valueField = this.valueField,
2096
+ textField = this.textField,
2097
+ resultItem;
2098
+
2099
+ if(valueField) {
2100
+ resultItem = $.grep(items, function(item, index) {
2101
+ return item[valueField] === value;
2102
+ })[0] || {};
2103
+ }
2104
+ else {
2105
+ resultItem = items[value];
2106
+ }
2107
+
2108
+ var result = (textField ? resultItem[textField] : resultItem);
2109
+
2110
+ return (result === undefined || result === null) ? "" : result;
2111
+ },
2112
+
2113
+ filterTemplate: function() {
2114
+ if(!this.filtering)
2115
+ return "";
2116
+
2117
+ var grid = this._grid,
2118
+ $result = this.filterControl = this._createSelect();
2119
+
2120
+ if(this.autosearch) {
2121
+ $result.on("change", function(e) {
2122
+ grid.search();
2123
+ });
2124
+ }
2125
+
2126
+ return $result;
2127
+ },
2128
+
2129
+ insertTemplate: function() {
2130
+ if(!this.inserting)
2131
+ return "";
2132
+
2133
+ return this.insertControl = this._createSelect();
2134
+ },
2135
+
2136
+ editTemplate: function(value) {
2137
+ if(!this.editing)
2138
+ return this.itemTemplate(value);
2139
+
2140
+ var $result = this.editControl = this._createSelect();
2141
+ (value !== undefined) && $result.val(value);
2142
+ return $result;
2143
+ },
2144
+
2145
+ filterValue: function() {
2146
+ var val = this.filterControl.val();
2147
+ return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
2148
+ },
2149
+
2150
+ insertValue: function() {
2151
+ var val = this.insertControl.val();
2152
+ return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
2153
+ },
2154
+
2155
+ editValue: function() {
2156
+ var val = this.editControl.val();
2157
+ return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
2158
+ },
2159
+
2160
+ _createSelect: function() {
2161
+ var $result = $("<select>"),
2162
+ valueField = this.valueField,
2163
+ textField = this.textField,
2164
+ selectedIndex = this.selectedIndex;
2165
+
2166
+ $.each(this.items, function(index, item) {
2167
+ var value = valueField ? item[valueField] : index,
2168
+ text = textField ? item[textField] : item;
2169
+
2170
+ var $option = $("<option>")
2171
+ .attr("value", value)
2172
+ .text(text)
2173
+ .appendTo($result);
2174
+
2175
+ $option.prop("selected", (selectedIndex === index));
2176
+ });
2177
+
2178
+ $result.prop("disabled", !!this.readOnly);
2179
+
2180
+ return $result;
2181
+ }
2182
+ });
2183
+
2184
+ jsGrid.fields.select = jsGrid.SelectField = SelectField;
2185
+
2186
+ }(jsGrid, jQuery));
2187
+
2188
+ (function(jsGrid, $, undefined) {
2189
+
2190
+ var Field = jsGrid.Field;
2191
+
2192
+ function CheckboxField(config) {
2193
+ Field.call(this, config);
2194
+ }
2195
+
2196
+ CheckboxField.prototype = new Field({
2197
+
2198
+ sorter: "number",
2199
+ align: "center",
2200
+ autosearch: true,
2201
+
2202
+ itemTemplate: function(value) {
2203
+ return this._createCheckbox().prop({
2204
+ checked: value,
2205
+ disabled: true
2206
+ });
2207
+ },
2208
+
2209
+ filterTemplate: function() {
2210
+ if(!this.filtering)
2211
+ return "";
2212
+
2213
+ var grid = this._grid,
2214
+ $result = this.filterControl = this._createCheckbox();
2215
+
2216
+ $result.prop({
2217
+ readOnly: true,
2218
+ indeterminate: true
2219
+ });
2220
+
2221
+ $result.on("click", function() {
2222
+ var $cb = $(this);
2223
+
2224
+ if($cb.prop("readOnly")) {
2225
+ $cb.prop({
2226
+ checked: false,
2227
+ readOnly: false
2228
+ });
2229
+ }
2230
+ else if(!$cb.prop("checked")) {
2231
+ $cb.prop({
2232
+ readOnly: true,
2233
+ indeterminate: true
2234
+ });
2235
+ }
2236
+ });
2237
+
2238
+ if(this.autosearch) {
2239
+ $result.on("click", function() {
2240
+ grid.search();
2241
+ });
2242
+ }
2243
+
2244
+ return $result;
2245
+ },
2246
+
2247
+ insertTemplate: function() {
2248
+ if(!this.inserting)
2249
+ return "";
2250
+
2251
+ return this.insertControl = this._createCheckbox();
2252
+ },
2253
+
2254
+ editTemplate: function(value) {
2255
+ if(!this.editing)
2256
+ return this.itemTemplate(value);
2257
+
2258
+ var $result = this.editControl = this._createCheckbox();
2259
+ $result.prop("checked", value);
2260
+ return $result;
2261
+ },
2262
+
2263
+ filterValue: function() {
2264
+ return this.filterControl.get(0).indeterminate
2265
+ ? undefined
2266
+ : this.filterControl.is(":checked");
2267
+ },
2268
+
2269
+ insertValue: function() {
2270
+ return this.insertControl.is(":checked");
2271
+ },
2272
+
2273
+ editValue: function() {
2274
+ return this.editControl.is(":checked");
2275
+ },
2276
+
2277
+ _createCheckbox: function() {
2278
+ return $("<input>").attr("type", "checkbox");
2279
+ }
2280
+ });
2281
+
2282
+ jsGrid.fields.checkbox = jsGrid.CheckboxField = CheckboxField;
2283
+
2284
+ }(jsGrid, jQuery));
2285
+
2286
+ (function(jsGrid, $, undefined) {
2287
+
2288
+ var Field = jsGrid.Field;
2289
+
2290
+ function ControlField(config) {
2291
+ Field.call(this, config);
2292
+ this._configInitialized = false;
2293
+ }
2294
+
2295
+ ControlField.prototype = new Field({
2296
+ css: "jsgrid-control-field",
2297
+ align: "center",
2298
+ width: 50,
2299
+ filtering: false,
2300
+ inserting: false,
2301
+ editing: false,
2302
+ sorting: false,
2303
+
2304
+ buttonClass: "jsgrid-button",
2305
+ modeButtonClass: "jsgrid-mode-button",
2306
+
2307
+ modeOnButtonClass: "jsgrid-mode-on-button",
2308
+ searchModeButtonClass: "jsgrid-search-mode-button",
2309
+ insertModeButtonClass: "jsgrid-insert-mode-button",
2310
+ editButtonClass: "jsgrid-edit-button",
2311
+ deleteButtonClass: "jsgrid-delete-button",
2312
+ searchButtonClass: "jsgrid-search-button",
2313
+ clearFilterButtonClass: "jsgrid-clear-filter-button",
2314
+ insertButtonClass: "jsgrid-insert-button",
2315
+ updateButtonClass: "jsgrid-update-button",
2316
+ cancelEditButtonClass: "jsgrid-cancel-edit-button",
2317
+
2318
+ searchModeButtonTooltip: "Switch to searching",
2319
+ insertModeButtonTooltip: "Switch to inserting",
2320
+ editButtonTooltip: "Edit",
2321
+ deleteButtonTooltip: "Delete",
2322
+ searchButtonTooltip: "Search",
2323
+ clearFilterButtonTooltip: "Clear filter",
2324
+ insertButtonTooltip: "Insert",
2325
+ updateButtonTooltip: "Update",
2326
+ cancelEditButtonTooltip: "Cancel edit",
2327
+
2328
+ editButton: true,
2329
+ deleteButton: true,
2330
+ clearFilterButton: true,
2331
+ modeSwitchButton: true,
2332
+
2333
+ _initConfig: function() {
2334
+ this._hasFiltering = this._grid.filtering;
2335
+ this._hasInserting = this._grid.inserting;
2336
+
2337
+ if(this._hasInserting && this.modeSwitchButton) {
2338
+ this._grid.inserting = false;
2339
+ }
2340
+
2341
+ this._configInitialized = true;
2342
+ },
2343
+
2344
+ headerTemplate: function() {
2345
+ if(!this._configInitialized) {
2346
+ this._initConfig();
2347
+ }
2348
+
2349
+ var hasFiltering = this._hasFiltering;
2350
+ var hasInserting = this._hasInserting;
2351
+
2352
+ if(!this.modeSwitchButton || (!hasFiltering && !hasInserting))
2353
+ return "";
2354
+
2355
+ if(hasFiltering && !hasInserting)
2356
+ return this._createFilterSwitchButton();
2357
+
2358
+ if(hasInserting && !hasFiltering)
2359
+ return this._createInsertSwitchButton();
2360
+
2361
+ return this._createModeSwitchButton();
2362
+ },
2363
+
2364
+ itemTemplate: function(value, item) {
2365
+ var $result = $([]);
2366
+
2367
+ if(this.editButton) {
2368
+ $result = $result.add(this._createEditButton(item));
2369
+ }
2370
+
2371
+ if(this.deleteButton) {
2372
+ $result = $result.add(this._createDeleteButton(item));
2373
+ }
2374
+
2375
+ return $result;
2376
+ },
2377
+
2378
+ filterTemplate: function() {
2379
+ var $result = this._createSearchButton();
2380
+ return this.clearFilterButton ? $result.add(this._createClearFilterButton()) : $result;
2381
+ },
2382
+
2383
+ insertTemplate: function() {
2384
+ return this._createInsertButton();
2385
+ },
2386
+
2387
+ editTemplate: function() {
2388
+ return this._createUpdateButton().add(this._createCancelEditButton());
2389
+ },
2390
+
2391
+ _createFilterSwitchButton: function() {
2392
+ return this._createOnOffSwitchButton("filtering", this.searchModeButtonClass, true);
2393
+ },
2394
+
2395
+ _createInsertSwitchButton: function() {
2396
+ return this._createOnOffSwitchButton("inserting", this.insertModeButtonClass, false);
2397
+ },
2398
+
2399
+ _createOnOffSwitchButton: function(option, cssClass, isOnInitially) {
2400
+ var isOn = isOnInitially;
2401
+
2402
+ var updateButtonState = $.proxy(function() {
2403
+ $button.toggleClass(this.modeOnButtonClass, isOn);
2404
+ }, this);
2405
+
2406
+ var $button = this._createGridButton(this.modeButtonClass + " " + cssClass, "", function(grid) {
2407
+ isOn = !isOn;
2408
+ grid.option(option, isOn);
2409
+ updateButtonState();
2410
+ });
2411
+
2412
+ updateButtonState();
2413
+
2414
+ return $button;
2415
+ },
2416
+
2417
+ _createModeSwitchButton: function() {
2418
+ var isInserting = false;
2419
+
2420
+ var updateButtonState = $.proxy(function() {
2421
+ $button.attr("title", isInserting ? this.searchModeButtonTooltip : this.insertModeButtonTooltip)
2422
+ .toggleClass(this.insertModeButtonClass, !isInserting)
2423
+ .toggleClass(this.searchModeButtonClass, isInserting);
2424
+ }, this);
2425
+
2426
+ var $button = this._createGridButton(this.modeButtonClass, "", function(grid) {
2427
+ isInserting = !isInserting;
2428
+ grid.option("inserting", isInserting);
2429
+ grid.option("filtering", !isInserting);
2430
+ updateButtonState();
2431
+ });
2432
+
2433
+ updateButtonState();
2434
+
2435
+ return $button;
2436
+ },
2437
+
2438
+ _createEditButton: function(item) {
2439
+ return this._createGridButton(this.editButtonClass, this.editButtonTooltip, function(grid, e) {
2440
+ grid.editItem(item);
2441
+ e.stopPropagation();
2442
+ });
2443
+ },
2444
+
2445
+ _createDeleteButton: function(item) {
2446
+ return this._createGridButton(this.deleteButtonClass, this.deleteButtonTooltip, function(grid, e) {
2447
+ grid.deleteItem(item);
2448
+ e.stopPropagation();
2449
+ });
2450
+ },
2451
+
2452
+ _createSearchButton: function() {
2453
+ return this._createGridButton(this.searchButtonClass, this.searchButtonTooltip, function(grid) {
2454
+ grid.search();
2455
+ });
2456
+ },
2457
+
2458
+ _createClearFilterButton: function() {
2459
+ return this._createGridButton(this.clearFilterButtonClass, this.clearFilterButtonTooltip, function(grid) {
2460
+ grid.clearFilter();
2461
+ });
2462
+ },
2463
+
2464
+ _createInsertButton: function() {
2465
+ return this._createGridButton(this.insertButtonClass, this.insertButtonTooltip, function(grid) {
2466
+ grid.insertItem().done(function() {
2467
+ grid.clearInsert();
2468
+ });
2469
+ });
2470
+ },
2471
+
2472
+ _createUpdateButton: function() {
2473
+ return this._createGridButton(this.updateButtonClass, this.updateButtonTooltip, function(grid, e) {
2474
+ grid.updateItem();
2475
+ e.stopPropagation();
2476
+ });
2477
+ },
2478
+
2479
+ _createCancelEditButton: function() {
2480
+ return this._createGridButton(this.cancelEditButtonClass, this.cancelEditButtonTooltip, function(grid, e) {
2481
+ grid.cancelEdit();
2482
+ e.stopPropagation();
2483
+ });
2484
+ },
2485
+
2486
+ _createGridButton: function(cls, tooltip, clickHandler) {
2487
+ var grid = this._grid;
2488
+
2489
+ return $("<input>").addClass(this.buttonClass)
2490
+ .addClass(cls)
2491
+ .attr({
2492
+ type: "button",
2493
+ title: tooltip
2494
+ })
2495
+ .on("click", function(e) {
2496
+ clickHandler(grid, e);
2497
+ });
2498
+ },
2499
+
2500
+ editValue: function() {
2501
+ return "";
2502
+ }
2503
+
2504
+ });
2505
+
2506
+ jsGrid.fields.control = jsGrid.ControlField = ControlField;
2507
+
2508
+ }(jsGrid, jQuery));