gridx-rails 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE +2 -0
  3. data/README.md +18 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/images/gridx/mobile/themes/iphone/images/ajax-loader.gif +0 -0
  6. data/app/assets/images/gridx/mobile/themes/iphone/images/arrow.png +0 -0
  7. data/app/assets/images/gridx/resources/images/checkboxpartial.png +0 -0
  8. data/app/assets/images/gridx/resources/images/checkboxpartialdisabled.png +0 -0
  9. data/app/assets/images/gridx/resources/images/claro-grid-header-onepixel.bmp +0 -0
  10. data/app/assets/images/gridx/resources/images/dndCopy.png +0 -0
  11. data/app/assets/images/gridx/resources/images/dndMove.png +0 -0
  12. data/app/assets/images/gridx/resources/images/dndNoCopy.png +0 -0
  13. data/app/assets/images/gridx/resources/images/dndNoMove.png +0 -0
  14. data/app/assets/images/gridx/resources/images/gridxCellChanged.png +0 -0
  15. data/app/assets/images/gridx/resources/images/header.png +0 -0
  16. data/app/assets/images/gridx/resources/images/header_shadow.png +0 -0
  17. data/app/assets/images/gridx/resources/images/loadingAnimation.gif +0 -0
  18. data/app/assets/images/gridx/resources/images/row_back.png +0 -0
  19. data/app/assets/images/gridx/resources/images/row_back_changed.png +0 -0
  20. data/app/assets/images/gridx/resources/images/sprite_icons.png +0 -0
  21. data/app/assets/images/gridx/resources/images/treeExpandImages.png +0 -0
  22. data/app/assets/images/gridx/resources/images/treeExpand_loading.gif +0 -0
  23. data/app/assets/javascripts/gridx/Grid.js +224 -0
  24. data/app/assets/javascripts/gridx/GridCommon.js +52 -0
  25. data/app/assets/javascripts/gridx/allModules.js +105 -0
  26. data/app/assets/javascripts/gridx/core/Cell.js +86 -0
  27. data/app/assets/javascripts/gridx/core/Column.js +183 -0
  28. data/app/assets/javascripts/gridx/core/Core.js +447 -0
  29. data/app/assets/javascripts/gridx/core/Row.js +174 -0
  30. data/app/assets/javascripts/gridx/core/_Module.js +285 -0
  31. data/app/assets/javascripts/gridx/core/model/Model.js +495 -0
  32. data/app/assets/javascripts/gridx/core/model/_Extension.js +84 -0
  33. data/app/assets/javascripts/gridx/core/model/cache/Async.js +469 -0
  34. data/app/assets/javascripts/gridx/core/model/cache/Sync.js +59 -0
  35. data/app/assets/javascripts/gridx/core/model/cache/_Cache.js +386 -0
  36. data/app/assets/javascripts/gridx/core/model/extensions/ClientFilter.js +303 -0
  37. data/app/assets/javascripts/gridx/core/model/extensions/FormatSort.js +103 -0
  38. data/app/assets/javascripts/gridx/core/model/extensions/Mark.js +370 -0
  39. data/app/assets/javascripts/gridx/core/model/extensions/Modify.js +418 -0
  40. data/app/assets/javascripts/gridx/core/model/extensions/Move.js +429 -0
  41. data/app/assets/javascripts/gridx/core/model/extensions/Query.js +50 -0
  42. data/app/assets/javascripts/gridx/core/model/extensions/Sort.js +81 -0
  43. data/app/assets/javascripts/gridx/core/util.js +13 -0
  44. data/app/assets/javascripts/gridx/mobile/Grid.js +300 -0
  45. data/app/assets/javascripts/gridx/mobile/LazyLoad.js +88 -0
  46. data/app/assets/javascripts/gridx/mobile/PullRefresh.js +117 -0
  47. data/app/assets/javascripts/gridx/mobile/Sort.js +66 -0
  48. data/app/assets/javascripts/gridx/mobile/nls/LazyLoad.js +38 -0
  49. data/app/assets/javascripts/gridx/mobile/nls/PullRefresh.js +39 -0
  50. data/app/assets/javascripts/gridx/mobile/nls/ar/LazyLoad.js +6 -0
  51. data/app/assets/javascripts/gridx/mobile/nls/ar/PullRefresh.js +7 -0
  52. data/app/assets/javascripts/gridx/mobile/nls/ar/common.js +5 -0
  53. data/app/assets/javascripts/gridx/mobile/nls/bg/LazyLoad.js +6 -0
  54. data/app/assets/javascripts/gridx/mobile/nls/bg/PullRefresh.js +7 -0
  55. data/app/assets/javascripts/gridx/mobile/nls/bg/common.js +5 -0
  56. data/app/assets/javascripts/gridx/mobile/nls/ca/LazyLoad.js +6 -0
  57. data/app/assets/javascripts/gridx/mobile/nls/ca/PullRefresh.js +7 -0
  58. data/app/assets/javascripts/gridx/mobile/nls/ca/common.js +5 -0
  59. data/app/assets/javascripts/gridx/mobile/nls/common.js +37 -0
  60. data/app/assets/javascripts/gridx/mobile/nls/cs/LazyLoad.js +6 -0
  61. data/app/assets/javascripts/gridx/mobile/nls/cs/PullRefresh.js +7 -0
  62. data/app/assets/javascripts/gridx/mobile/nls/cs/common.js +5 -0
  63. data/app/assets/javascripts/gridx/mobile/nls/da/LazyLoad.js +6 -0
  64. data/app/assets/javascripts/gridx/mobile/nls/da/PullRefresh.js +7 -0
  65. data/app/assets/javascripts/gridx/mobile/nls/da/common.js +5 -0
  66. data/app/assets/javascripts/gridx/mobile/nls/de/LazyLoad.js +6 -0
  67. data/app/assets/javascripts/gridx/mobile/nls/de/PullRefresh.js +7 -0
  68. data/app/assets/javascripts/gridx/mobile/nls/de/common.js +5 -0
  69. data/app/assets/javascripts/gridx/mobile/nls/el/LazyLoad.js +6 -0
  70. data/app/assets/javascripts/gridx/mobile/nls/el/PullRefresh.js +7 -0
  71. data/app/assets/javascripts/gridx/mobile/nls/el/common.js +5 -0
  72. data/app/assets/javascripts/gridx/mobile/nls/es/LazyLoad.js +6 -0
  73. data/app/assets/javascripts/gridx/mobile/nls/es/PullRefresh.js +7 -0
  74. data/app/assets/javascripts/gridx/mobile/nls/es/common.js +5 -0
  75. data/app/assets/javascripts/gridx/mobile/nls/fi/LazyLoad.js +6 -0
  76. data/app/assets/javascripts/gridx/mobile/nls/fi/PullRefresh.js +7 -0
  77. data/app/assets/javascripts/gridx/mobile/nls/fi/common.js +5 -0
  78. data/app/assets/javascripts/gridx/mobile/nls/fr/LazyLoad.js +6 -0
  79. data/app/assets/javascripts/gridx/mobile/nls/fr/PullRefresh.js +7 -0
  80. data/app/assets/javascripts/gridx/mobile/nls/fr/common.js +5 -0
  81. data/app/assets/javascripts/gridx/mobile/nls/he/LazyLoad.js +6 -0
  82. data/app/assets/javascripts/gridx/mobile/nls/he/PullRefresh.js +7 -0
  83. data/app/assets/javascripts/gridx/mobile/nls/he/common.js +5 -0
  84. data/app/assets/javascripts/gridx/mobile/nls/hr/LazyLoad.js +6 -0
  85. data/app/assets/javascripts/gridx/mobile/nls/hr/PullRefresh.js +7 -0
  86. data/app/assets/javascripts/gridx/mobile/nls/hr/common.js +5 -0
  87. data/app/assets/javascripts/gridx/mobile/nls/hu/LazyLoad.js +6 -0
  88. data/app/assets/javascripts/gridx/mobile/nls/hu/PullRefresh.js +7 -0
  89. data/app/assets/javascripts/gridx/mobile/nls/hu/common.js +5 -0
  90. data/app/assets/javascripts/gridx/mobile/nls/it/LazyLoad.js +6 -0
  91. data/app/assets/javascripts/gridx/mobile/nls/it/PullRefresh.js +7 -0
  92. data/app/assets/javascripts/gridx/mobile/nls/it/common.js +5 -0
  93. data/app/assets/javascripts/gridx/mobile/nls/ja/LazyLoad.js +6 -0
  94. data/app/assets/javascripts/gridx/mobile/nls/ja/PullRefresh.js +7 -0
  95. data/app/assets/javascripts/gridx/mobile/nls/ja/common.js +5 -0
  96. data/app/assets/javascripts/gridx/mobile/nls/kk/LazyLoad.js +6 -0
  97. data/app/assets/javascripts/gridx/mobile/nls/kk/PullRefresh.js +7 -0
  98. data/app/assets/javascripts/gridx/mobile/nls/kk/common.js +5 -0
  99. data/app/assets/javascripts/gridx/mobile/nls/ko/LazyLoad.js +6 -0
  100. data/app/assets/javascripts/gridx/mobile/nls/ko/PullRefresh.js +7 -0
  101. data/app/assets/javascripts/gridx/mobile/nls/ko/common.js +5 -0
  102. data/app/assets/javascripts/gridx/mobile/nls/nb/LazyLoad.js +6 -0
  103. data/app/assets/javascripts/gridx/mobile/nls/nb/PullRefresh.js +7 -0
  104. data/app/assets/javascripts/gridx/mobile/nls/nb/common.js +5 -0
  105. data/app/assets/javascripts/gridx/mobile/nls/nl/LazyLoad.js +6 -0
  106. data/app/assets/javascripts/gridx/mobile/nls/nl/PullRefresh.js +7 -0
  107. data/app/assets/javascripts/gridx/mobile/nls/nl/common.js +5 -0
  108. data/app/assets/javascripts/gridx/mobile/nls/pl/LazyLoad.js +6 -0
  109. data/app/assets/javascripts/gridx/mobile/nls/pl/PullRefresh.js +7 -0
  110. data/app/assets/javascripts/gridx/mobile/nls/pl/common.js +5 -0
  111. data/app/assets/javascripts/gridx/mobile/nls/pt/LazyLoad.js +6 -0
  112. data/app/assets/javascripts/gridx/mobile/nls/pt/PullRefresh.js +7 -0
  113. data/app/assets/javascripts/gridx/mobile/nls/pt/common.js +5 -0
  114. data/app/assets/javascripts/gridx/mobile/nls/pt-pt/LazyLoad.js +6 -0
  115. data/app/assets/javascripts/gridx/mobile/nls/pt-pt/PullRefresh.js +7 -0
  116. data/app/assets/javascripts/gridx/mobile/nls/pt-pt/common.js +5 -0
  117. data/app/assets/javascripts/gridx/mobile/nls/ro/LazyLoad.js +6 -0
  118. data/app/assets/javascripts/gridx/mobile/nls/ro/PullRefresh.js +7 -0
  119. data/app/assets/javascripts/gridx/mobile/nls/ro/common.js +5 -0
  120. data/app/assets/javascripts/gridx/mobile/nls/ru/LazyLoad.js +6 -0
  121. data/app/assets/javascripts/gridx/mobile/nls/ru/PullRefresh.js +7 -0
  122. data/app/assets/javascripts/gridx/mobile/nls/ru/common.js +5 -0
  123. data/app/assets/javascripts/gridx/mobile/nls/sk/LazyLoad.js +6 -0
  124. data/app/assets/javascripts/gridx/mobile/nls/sk/PullRefresh.js +7 -0
  125. data/app/assets/javascripts/gridx/mobile/nls/sk/common.js +5 -0
  126. data/app/assets/javascripts/gridx/mobile/nls/sl/LazyLoad.js +6 -0
  127. data/app/assets/javascripts/gridx/mobile/nls/sl/PullRefresh.js +7 -0
  128. data/app/assets/javascripts/gridx/mobile/nls/sl/common.js +5 -0
  129. data/app/assets/javascripts/gridx/mobile/nls/sv/LazyLoad.js +6 -0
  130. data/app/assets/javascripts/gridx/mobile/nls/sv/PullRefresh.js +7 -0
  131. data/app/assets/javascripts/gridx/mobile/nls/sv/common.js +5 -0
  132. data/app/assets/javascripts/gridx/mobile/nls/th/LazyLoad.js +6 -0
  133. data/app/assets/javascripts/gridx/mobile/nls/th/PullRefresh.js +7 -0
  134. data/app/assets/javascripts/gridx/mobile/nls/th/common.js +5 -0
  135. data/app/assets/javascripts/gridx/mobile/nls/tr/LazyLoad.js +6 -0
  136. data/app/assets/javascripts/gridx/mobile/nls/tr/PullRefresh.js +7 -0
  137. data/app/assets/javascripts/gridx/mobile/nls/tr/common.js +5 -0
  138. data/app/assets/javascripts/gridx/mobile/nls/uk/LazyLoad.js +6 -0
  139. data/app/assets/javascripts/gridx/mobile/nls/uk/PullRefresh.js +7 -0
  140. data/app/assets/javascripts/gridx/mobile/nls/uk/common.js +5 -0
  141. data/app/assets/javascripts/gridx/mobile/nls/zh/LazyLoad.js +6 -0
  142. data/app/assets/javascripts/gridx/mobile/nls/zh/PullRefresh.js +7 -0
  143. data/app/assets/javascripts/gridx/mobile/nls/zh/common.js +5 -0
  144. data/app/assets/javascripts/gridx/mobile/nls/zh-tw/LazyLoad.js +6 -0
  145. data/app/assets/javascripts/gridx/mobile/nls/zh-tw/PullRefresh.js +7 -0
  146. data/app/assets/javascripts/gridx/mobile/nls/zh-tw/common.js +5 -0
  147. data/app/assets/javascripts/gridx/modules/AutoScroll.js +100 -0
  148. data/app/assets/javascripts/gridx/modules/Bar.js +322 -0
  149. data/app/assets/javascripts/gridx/modules/Body.js +1059 -0
  150. data/app/assets/javascripts/gridx/modules/CellWidget.js +538 -0
  151. data/app/assets/javascripts/gridx/modules/ColumnLock.js +254 -0
  152. data/app/assets/javascripts/gridx/modules/ColumnResizer.js +278 -0
  153. data/app/assets/javascripts/gridx/modules/ColumnWidth.js +320 -0
  154. data/app/assets/javascripts/gridx/modules/Dod.js +368 -0
  155. data/app/assets/javascripts/gridx/modules/Edit.js +1024 -0
  156. data/app/assets/javascripts/gridx/modules/Filter.js +482 -0
  157. data/app/assets/javascripts/gridx/modules/Focus.js +439 -0
  158. data/app/assets/javascripts/gridx/modules/GroupHeader.js +437 -0
  159. data/app/assets/javascripts/gridx/modules/HLayout.js +139 -0
  160. data/app/assets/javascripts/gridx/modules/HScroller.js +172 -0
  161. data/app/assets/javascripts/gridx/modules/Header.js +289 -0
  162. data/app/assets/javascripts/gridx/modules/HeaderMenu.js +63 -0
  163. data/app/assets/javascripts/gridx/modules/HeaderRegions.js +201 -0
  164. data/app/assets/javascripts/gridx/modules/HiddenColumns.js +274 -0
  165. data/app/assets/javascripts/gridx/modules/IndirectSelect.js +287 -0
  166. data/app/assets/javascripts/gridx/modules/IndirectSelectColumn.js +277 -0
  167. data/app/assets/javascripts/gridx/modules/Menu.js +167 -0
  168. data/app/assets/javascripts/gridx/modules/NavigableCell.js +170 -0
  169. data/app/assets/javascripts/gridx/modules/NestedSort.js +280 -0
  170. data/app/assets/javascripts/gridx/modules/PagedBody.js +409 -0
  171. data/app/assets/javascripts/gridx/modules/Pagination.js +293 -0
  172. data/app/assets/javascripts/gridx/modules/Persist.js +266 -0
  173. data/app/assets/javascripts/gridx/modules/Printer.js +49 -0
  174. data/app/assets/javascripts/gridx/modules/RowHeader.js +412 -0
  175. data/app/assets/javascripts/gridx/modules/RowLock.js +143 -0
  176. data/app/assets/javascripts/gridx/modules/SingleSort.js +276 -0
  177. data/app/assets/javascripts/gridx/modules/SummaryBar.js +33 -0
  178. data/app/assets/javascripts/gridx/modules/TitleBar.js +51 -0
  179. data/app/assets/javascripts/gridx/modules/ToolBar.js +55 -0
  180. data/app/assets/javascripts/gridx/modules/TouchScroll.js +103 -0
  181. data/app/assets/javascripts/gridx/modules/TouchVScroller.js +89 -0
  182. data/app/assets/javascripts/gridx/modules/Traverse.js +159 -0
  183. data/app/assets/javascripts/gridx/modules/Tree.js +646 -0
  184. data/app/assets/javascripts/gridx/modules/VLayout.js +152 -0
  185. data/app/assets/javascripts/gridx/modules/VScroller.js +342 -0
  186. data/app/assets/javascripts/gridx/modules/View.js +540 -0
  187. data/app/assets/javascripts/gridx/modules/VirtualVScroller.js +445 -0
  188. data/app/assets/javascripts/gridx/modules/barPlugins/DropDownPager.js +16 -0
  189. data/app/assets/javascripts/gridx/modules/barPlugins/DropDownSizer.js +16 -0
  190. data/app/assets/javascripts/gridx/modules/barPlugins/GotoPageButton.js +16 -0
  191. data/app/assets/javascripts/gridx/modules/barPlugins/LinkPager.js +16 -0
  192. data/app/assets/javascripts/gridx/modules/barPlugins/LinkSizer.js +16 -0
  193. data/app/assets/javascripts/gridx/modules/barPlugins/Summary.js +16 -0
  194. data/app/assets/javascripts/gridx/modules/dnd/Avatar.js +45 -0
  195. data/app/assets/javascripts/gridx/modules/dnd/Column.js +210 -0
  196. data/app/assets/javascripts/gridx/modules/dnd/Row.js +286 -0
  197. data/app/assets/javascripts/gridx/modules/dnd/_Base.js +60 -0
  198. data/app/assets/javascripts/gridx/modules/dnd/_Dnd.js +371 -0
  199. data/app/assets/javascripts/gridx/modules/exporter/CSV.js +43 -0
  200. data/app/assets/javascripts/gridx/modules/exporter/Exporter.js +34 -0
  201. data/app/assets/javascripts/gridx/modules/exporter/Table.js +42 -0
  202. data/app/assets/javascripts/gridx/modules/extendedSelect/Cell.js +491 -0
  203. data/app/assets/javascripts/gridx/modules/extendedSelect/Column.js +290 -0
  204. data/app/assets/javascripts/gridx/modules/extendedSelect/Row.js +458 -0
  205. data/app/assets/javascripts/gridx/modules/extendedSelect/_Base.js +244 -0
  206. data/app/assets/javascripts/gridx/modules/extendedSelect/_RowCellBase.js +35 -0
  207. data/app/assets/javascripts/gridx/modules/filter/DistinctComboBoxMenu.js +22 -0
  208. data/app/assets/javascripts/gridx/modules/filter/Filter.js +16 -0
  209. data/app/assets/javascripts/gridx/modules/filter/FilterBar.js +649 -0
  210. data/app/assets/javascripts/gridx/modules/filter/FilterConfirmDialog.js +33 -0
  211. data/app/assets/javascripts/gridx/modules/filter/FilterDialog.js +179 -0
  212. data/app/assets/javascripts/gridx/modules/filter/FilterPane.js +340 -0
  213. data/app/assets/javascripts/gridx/modules/filter/FilterTooltip.js +103 -0
  214. data/app/assets/javascripts/gridx/modules/filter/QuickFilter.js +33 -0
  215. data/app/assets/javascripts/gridx/modules/move/Column.js +223 -0
  216. data/app/assets/javascripts/gridx/modules/move/Row.js +154 -0
  217. data/app/assets/javascripts/gridx/modules/pagination/Pagination.js +16 -0
  218. data/app/assets/javascripts/gridx/modules/pagination/PaginationBar.js +68 -0
  219. data/app/assets/javascripts/gridx/modules/pagination/PaginationBarDD.js +40 -0
  220. data/app/assets/javascripts/gridx/modules/pagination/_PaginationBarBase.js +105 -0
  221. data/app/assets/javascripts/gridx/modules/select/Cell.js +229 -0
  222. data/app/assets/javascripts/gridx/modules/select/Column.js +209 -0
  223. data/app/assets/javascripts/gridx/modules/select/Row.js +302 -0
  224. data/app/assets/javascripts/gridx/modules/select/_Base.js +99 -0
  225. data/app/assets/javascripts/gridx/modules/select/_RowCellBase.js +51 -0
  226. data/app/assets/javascripts/gridx/nls/Body.js +47 -0
  227. data/app/assets/javascripts/gridx/nls/FilterBar.js +133 -0
  228. data/app/assets/javascripts/gridx/nls/NestedSort.js +45 -0
  229. data/app/assets/javascripts/gridx/nls/PaginationBar.js +68 -0
  230. data/app/assets/javascripts/gridx/nls/QuickFilter.js +40 -0
  231. data/app/assets/javascripts/gridx/nls/SummaryBar.js +38 -0
  232. data/app/assets/javascripts/gridx/nls/ar/Body.js +11 -0
  233. data/app/assets/javascripts/gridx/nls/ar/FilterBar.js +89 -0
  234. data/app/assets/javascripts/gridx/nls/ar/NestedSort.js +11 -0
  235. data/app/assets/javascripts/gridx/nls/ar/PaginationBar.js +34 -0
  236. data/app/assets/javascripts/gridx/nls/ar/QuickFilter.js +7 -0
  237. data/app/assets/javascripts/gridx/nls/ar/SummaryBar.js +5 -0
  238. data/app/assets/javascripts/gridx/nls/bg/Body.js +11 -0
  239. data/app/assets/javascripts/gridx/nls/bg/FilterBar.js +88 -0
  240. data/app/assets/javascripts/gridx/nls/bg/NestedSort.js +12 -0
  241. data/app/assets/javascripts/gridx/nls/bg/PaginationBar.js +28 -0
  242. data/app/assets/javascripts/gridx/nls/bg/QuickFilter.js +8 -0
  243. data/app/assets/javascripts/gridx/nls/bg/SummaryBar.js +6 -0
  244. data/app/assets/javascripts/gridx/nls/ca/Body.js +11 -0
  245. data/app/assets/javascripts/gridx/nls/ca/FilterBar.js +89 -0
  246. data/app/assets/javascripts/gridx/nls/ca/NestedSort.js +13 -0
  247. data/app/assets/javascripts/gridx/nls/ca/PaginationBar.js +30 -0
  248. data/app/assets/javascripts/gridx/nls/ca/QuickFilter.js +9 -0
  249. data/app/assets/javascripts/gridx/nls/ca/SummaryBar.js +7 -0
  250. data/app/assets/javascripts/gridx/nls/cs/Body.js +11 -0
  251. data/app/assets/javascripts/gridx/nls/cs/FilterBar.js +89 -0
  252. data/app/assets/javascripts/gridx/nls/cs/NestedSort.js +11 -0
  253. data/app/assets/javascripts/gridx/nls/cs/PaginationBar.js +34 -0
  254. data/app/assets/javascripts/gridx/nls/cs/QuickFilter.js +7 -0
  255. data/app/assets/javascripts/gridx/nls/cs/SummaryBar.js +5 -0
  256. data/app/assets/javascripts/gridx/nls/da/Body.js +11 -0
  257. data/app/assets/javascripts/gridx/nls/da/FilterBar.js +89 -0
  258. data/app/assets/javascripts/gridx/nls/da/NestedSort.js +11 -0
  259. data/app/assets/javascripts/gridx/nls/da/PaginationBar.js +34 -0
  260. data/app/assets/javascripts/gridx/nls/da/QuickFilter.js +7 -0
  261. data/app/assets/javascripts/gridx/nls/da/SummaryBar.js +5 -0
  262. data/app/assets/javascripts/gridx/nls/de/Body.js +11 -0
  263. data/app/assets/javascripts/gridx/nls/de/FilterBar.js +89 -0
  264. data/app/assets/javascripts/gridx/nls/de/NestedSort.js +11 -0
  265. data/app/assets/javascripts/gridx/nls/de/PaginationBar.js +34 -0
  266. data/app/assets/javascripts/gridx/nls/de/QuickFilter.js +7 -0
  267. data/app/assets/javascripts/gridx/nls/de/SummaryBar.js +5 -0
  268. data/app/assets/javascripts/gridx/nls/el/Body.js +11 -0
  269. data/app/assets/javascripts/gridx/nls/el/FilterBar.js +89 -0
  270. data/app/assets/javascripts/gridx/nls/el/NestedSort.js +11 -0
  271. data/app/assets/javascripts/gridx/nls/el/PaginationBar.js +34 -0
  272. data/app/assets/javascripts/gridx/nls/el/QuickFilter.js +7 -0
  273. data/app/assets/javascripts/gridx/nls/el/SummaryBar.js +5 -0
  274. data/app/assets/javascripts/gridx/nls/es/Body.js +11 -0
  275. data/app/assets/javascripts/gridx/nls/es/FilterBar.js +89 -0
  276. data/app/assets/javascripts/gridx/nls/es/NestedSort.js +13 -0
  277. data/app/assets/javascripts/gridx/nls/es/PaginationBar.js +30 -0
  278. data/app/assets/javascripts/gridx/nls/es/QuickFilter.js +9 -0
  279. data/app/assets/javascripts/gridx/nls/es/SummaryBar.js +7 -0
  280. data/app/assets/javascripts/gridx/nls/fi/Body.js +11 -0
  281. data/app/assets/javascripts/gridx/nls/fi/FilterBar.js +89 -0
  282. data/app/assets/javascripts/gridx/nls/fi/NestedSort.js +11 -0
  283. data/app/assets/javascripts/gridx/nls/fi/PaginationBar.js +34 -0
  284. data/app/assets/javascripts/gridx/nls/fi/QuickFilter.js +7 -0
  285. data/app/assets/javascripts/gridx/nls/fi/SummaryBar.js +5 -0
  286. data/app/assets/javascripts/gridx/nls/fr/Body.js +11 -0
  287. data/app/assets/javascripts/gridx/nls/fr/FilterBar.js +89 -0
  288. data/app/assets/javascripts/gridx/nls/fr/NestedSort.js +11 -0
  289. data/app/assets/javascripts/gridx/nls/fr/PaginationBar.js +34 -0
  290. data/app/assets/javascripts/gridx/nls/fr/QuickFilter.js +7 -0
  291. data/app/assets/javascripts/gridx/nls/fr/SummaryBar.js +5 -0
  292. data/app/assets/javascripts/gridx/nls/he/Body.js +11 -0
  293. data/app/assets/javascripts/gridx/nls/he/FilterBar.js +89 -0
  294. data/app/assets/javascripts/gridx/nls/he/NestedSort.js +11 -0
  295. data/app/assets/javascripts/gridx/nls/he/PaginationBar.js +34 -0
  296. data/app/assets/javascripts/gridx/nls/he/QuickFilter.js +6 -0
  297. data/app/assets/javascripts/gridx/nls/he/SummaryBar.js +5 -0
  298. data/app/assets/javascripts/gridx/nls/hr/Body.js +11 -0
  299. data/app/assets/javascripts/gridx/nls/hr/FilterBar.js +89 -0
  300. data/app/assets/javascripts/gridx/nls/hr/NestedSort.js +11 -0
  301. data/app/assets/javascripts/gridx/nls/hr/PaginationBar.js +34 -0
  302. data/app/assets/javascripts/gridx/nls/hr/QuickFilter.js +7 -0
  303. data/app/assets/javascripts/gridx/nls/hr/SummaryBar.js +5 -0
  304. data/app/assets/javascripts/gridx/nls/hu/Body.js +11 -0
  305. data/app/assets/javascripts/gridx/nls/hu/FilterBar.js +89 -0
  306. data/app/assets/javascripts/gridx/nls/hu/NestedSort.js +11 -0
  307. data/app/assets/javascripts/gridx/nls/hu/PaginationBar.js +33 -0
  308. data/app/assets/javascripts/gridx/nls/hu/QuickFilter.js +7 -0
  309. data/app/assets/javascripts/gridx/nls/hu/SummaryBar.js +5 -0
  310. data/app/assets/javascripts/gridx/nls/it/Body.js +11 -0
  311. data/app/assets/javascripts/gridx/nls/it/FilterBar.js +89 -0
  312. data/app/assets/javascripts/gridx/nls/it/NestedSort.js +11 -0
  313. data/app/assets/javascripts/gridx/nls/it/PaginationBar.js +34 -0
  314. data/app/assets/javascripts/gridx/nls/it/QuickFilter.js +7 -0
  315. data/app/assets/javascripts/gridx/nls/it/SummaryBar.js +5 -0
  316. data/app/assets/javascripts/gridx/nls/ja/Body.js +11 -0
  317. data/app/assets/javascripts/gridx/nls/ja/FilterBar.js +89 -0
  318. data/app/assets/javascripts/gridx/nls/ja/NestedSort.js +11 -0
  319. data/app/assets/javascripts/gridx/nls/ja/PaginationBar.js +34 -0
  320. data/app/assets/javascripts/gridx/nls/ja/QuickFilter.js +7 -0
  321. data/app/assets/javascripts/gridx/nls/ja/SummaryBar.js +5 -0
  322. data/app/assets/javascripts/gridx/nls/kk/Body.js +11 -0
  323. data/app/assets/javascripts/gridx/nls/kk/FilterBar.js +89 -0
  324. data/app/assets/javascripts/gridx/nls/kk/NestedSort.js +13 -0
  325. data/app/assets/javascripts/gridx/nls/kk/PaginationBar.js +30 -0
  326. data/app/assets/javascripts/gridx/nls/kk/QuickFilter.js +9 -0
  327. data/app/assets/javascripts/gridx/nls/kk/SummaryBar.js +7 -0
  328. data/app/assets/javascripts/gridx/nls/ko/Body.js +11 -0
  329. data/app/assets/javascripts/gridx/nls/ko/FilterBar.js +89 -0
  330. data/app/assets/javascripts/gridx/nls/ko/NestedSort.js +11 -0
  331. data/app/assets/javascripts/gridx/nls/ko/PaginationBar.js +34 -0
  332. data/app/assets/javascripts/gridx/nls/ko/QuickFilter.js +7 -0
  333. data/app/assets/javascripts/gridx/nls/ko/SummaryBar.js +5 -0
  334. data/app/assets/javascripts/gridx/nls/nb/Body.js +11 -0
  335. data/app/assets/javascripts/gridx/nls/nb/FilterBar.js +89 -0
  336. data/app/assets/javascripts/gridx/nls/nb/NestedSort.js +11 -0
  337. data/app/assets/javascripts/gridx/nls/nb/PaginationBar.js +34 -0
  338. data/app/assets/javascripts/gridx/nls/nb/QuickFilter.js +7 -0
  339. data/app/assets/javascripts/gridx/nls/nb/SummaryBar.js +5 -0
  340. data/app/assets/javascripts/gridx/nls/nl/Body.js +11 -0
  341. data/app/assets/javascripts/gridx/nls/nl/FilterBar.js +89 -0
  342. data/app/assets/javascripts/gridx/nls/nl/NestedSort.js +11 -0
  343. data/app/assets/javascripts/gridx/nls/nl/PaginationBar.js +34 -0
  344. data/app/assets/javascripts/gridx/nls/nl/QuickFilter.js +7 -0
  345. data/app/assets/javascripts/gridx/nls/nl/SummaryBar.js +5 -0
  346. data/app/assets/javascripts/gridx/nls/pl/Body.js +11 -0
  347. data/app/assets/javascripts/gridx/nls/pl/FilterBar.js +89 -0
  348. data/app/assets/javascripts/gridx/nls/pl/NestedSort.js +11 -0
  349. data/app/assets/javascripts/gridx/nls/pl/PaginationBar.js +34 -0
  350. data/app/assets/javascripts/gridx/nls/pl/QuickFilter.js +7 -0
  351. data/app/assets/javascripts/gridx/nls/pl/SummaryBar.js +5 -0
  352. data/app/assets/javascripts/gridx/nls/pt/Body.js +11 -0
  353. data/app/assets/javascripts/gridx/nls/pt/FilterBar.js +89 -0
  354. data/app/assets/javascripts/gridx/nls/pt/NestedSort.js +13 -0
  355. data/app/assets/javascripts/gridx/nls/pt/PaginationBar.js +30 -0
  356. data/app/assets/javascripts/gridx/nls/pt/QuickFilter.js +9 -0
  357. data/app/assets/javascripts/gridx/nls/pt/SummaryBar.js +7 -0
  358. data/app/assets/javascripts/gridx/nls/pt-br/Body.js +6 -0
  359. data/app/assets/javascripts/gridx/nls/pt-br/FilterBar.js +89 -0
  360. data/app/assets/javascripts/gridx/nls/pt-br/NestedSort.js +11 -0
  361. data/app/assets/javascripts/gridx/nls/pt-br/PaginationBar.js +34 -0
  362. data/app/assets/javascripts/gridx/nls/pt-br/QuickFilter.js +7 -0
  363. data/app/assets/javascripts/gridx/nls/pt-br/SummaryBar.js +5 -0
  364. data/app/assets/javascripts/gridx/nls/pt-pt/Body.js +11 -0
  365. data/app/assets/javascripts/gridx/nls/pt-pt/FilterBar.js +89 -0
  366. data/app/assets/javascripts/gridx/nls/pt-pt/NestedSort.js +13 -0
  367. data/app/assets/javascripts/gridx/nls/pt-pt/PaginationBar.js +30 -0
  368. data/app/assets/javascripts/gridx/nls/pt-pt/QuickFilter.js +9 -0
  369. data/app/assets/javascripts/gridx/nls/pt-pt/SummaryBar.js +7 -0
  370. data/app/assets/javascripts/gridx/nls/ro/Body.js +11 -0
  371. data/app/assets/javascripts/gridx/nls/ro/FilterBar.js +89 -0
  372. data/app/assets/javascripts/gridx/nls/ro/NestedSort.js +13 -0
  373. data/app/assets/javascripts/gridx/nls/ro/PaginationBar.js +30 -0
  374. data/app/assets/javascripts/gridx/nls/ro/QuickFilter.js +9 -0
  375. data/app/assets/javascripts/gridx/nls/ro/SummaryBar.js +7 -0
  376. data/app/assets/javascripts/gridx/nls/ru/Body.js +11 -0
  377. data/app/assets/javascripts/gridx/nls/ru/FilterBar.js +89 -0
  378. data/app/assets/javascripts/gridx/nls/ru/NestedSort.js +11 -0
  379. data/app/assets/javascripts/gridx/nls/ru/PaginationBar.js +34 -0
  380. data/app/assets/javascripts/gridx/nls/ru/QuickFilter.js +7 -0
  381. data/app/assets/javascripts/gridx/nls/ru/SummaryBar.js +5 -0
  382. data/app/assets/javascripts/gridx/nls/sk/Body.js +11 -0
  383. data/app/assets/javascripts/gridx/nls/sk/FilterBar.js +89 -0
  384. data/app/assets/javascripts/gridx/nls/sk/NestedSort.js +13 -0
  385. data/app/assets/javascripts/gridx/nls/sk/PaginationBar.js +30 -0
  386. data/app/assets/javascripts/gridx/nls/sk/QuickFilter.js +9 -0
  387. data/app/assets/javascripts/gridx/nls/sk/SummaryBar.js +7 -0
  388. data/app/assets/javascripts/gridx/nls/sl/Body.js +11 -0
  389. data/app/assets/javascripts/gridx/nls/sl/FilterBar.js +89 -0
  390. data/app/assets/javascripts/gridx/nls/sl/NestedSort.js +11 -0
  391. data/app/assets/javascripts/gridx/nls/sl/PaginationBar.js +34 -0
  392. data/app/assets/javascripts/gridx/nls/sl/QuickFilter.js +7 -0
  393. data/app/assets/javascripts/gridx/nls/sl/SummaryBar.js +5 -0
  394. data/app/assets/javascripts/gridx/nls/sv/Body.js +11 -0
  395. data/app/assets/javascripts/gridx/nls/sv/FilterBar.js +89 -0
  396. data/app/assets/javascripts/gridx/nls/sv/NestedSort.js +11 -0
  397. data/app/assets/javascripts/gridx/nls/sv/PaginationBar.js +34 -0
  398. data/app/assets/javascripts/gridx/nls/sv/QuickFilter.js +7 -0
  399. data/app/assets/javascripts/gridx/nls/sv/SummaryBar.js +5 -0
  400. data/app/assets/javascripts/gridx/nls/th/Body.js +11 -0
  401. data/app/assets/javascripts/gridx/nls/th/FilterBar.js +89 -0
  402. data/app/assets/javascripts/gridx/nls/th/NestedSort.js +11 -0
  403. data/app/assets/javascripts/gridx/nls/th/PaginationBar.js +34 -0
  404. data/app/assets/javascripts/gridx/nls/th/QuickFilter.js +7 -0
  405. data/app/assets/javascripts/gridx/nls/th/SummaryBar.js +5 -0
  406. data/app/assets/javascripts/gridx/nls/tr/Body.js +11 -0
  407. data/app/assets/javascripts/gridx/nls/tr/FilterBar.js +89 -0
  408. data/app/assets/javascripts/gridx/nls/tr/NestedSort.js +11 -0
  409. data/app/assets/javascripts/gridx/nls/tr/PaginationBar.js +34 -0
  410. data/app/assets/javascripts/gridx/nls/tr/QuickFilter.js +7 -0
  411. data/app/assets/javascripts/gridx/nls/tr/SummaryBar.js +5 -0
  412. data/app/assets/javascripts/gridx/nls/uk/Body.js +11 -0
  413. data/app/assets/javascripts/gridx/nls/uk/FilterBar.js +88 -0
  414. data/app/assets/javascripts/gridx/nls/uk/NestedSort.js +12 -0
  415. data/app/assets/javascripts/gridx/nls/uk/PaginationBar.js +28 -0
  416. data/app/assets/javascripts/gridx/nls/uk/QuickFilter.js +8 -0
  417. data/app/assets/javascripts/gridx/nls/uk/SummaryBar.js +6 -0
  418. data/app/assets/javascripts/gridx/nls/zh/Body.js +11 -0
  419. data/app/assets/javascripts/gridx/nls/zh/FilterBar.js +89 -0
  420. data/app/assets/javascripts/gridx/nls/zh/NestedSort.js +11 -0
  421. data/app/assets/javascripts/gridx/nls/zh/PaginationBar.js +34 -0
  422. data/app/assets/javascripts/gridx/nls/zh/QuickFilter.js +7 -0
  423. data/app/assets/javascripts/gridx/nls/zh/SummaryBar.js +5 -0
  424. data/app/assets/javascripts/gridx/nls/zh-tw/Body.js +11 -0
  425. data/app/assets/javascripts/gridx/nls/zh-tw/FilterBar.js +89 -0
  426. data/app/assets/javascripts/gridx/nls/zh-tw/NestedSort.js +11 -0
  427. data/app/assets/javascripts/gridx/nls/zh-tw/PaginationBar.js +34 -0
  428. data/app/assets/javascripts/gridx/nls/zh-tw/QuickFilter.js +7 -0
  429. data/app/assets/javascripts/gridx/nls/zh-tw/SummaryBar.js +5 -0
  430. data/app/assets/javascripts/gridx/support/DropDownPager.js +111 -0
  431. data/app/assets/javascripts/gridx/support/DropDownSizer.js +112 -0
  432. data/app/assets/javascripts/gridx/support/GotoPageButton.js +92 -0
  433. data/app/assets/javascripts/gridx/support/GotoPagePane.js +61 -0
  434. data/app/assets/javascripts/gridx/support/LinkPager.js +180 -0
  435. data/app/assets/javascripts/gridx/support/LinkSizer.js +138 -0
  436. data/app/assets/javascripts/gridx/support/QuickFilter.js +138 -0
  437. data/app/assets/javascripts/gridx/support/Summary.js +49 -0
  438. data/app/assets/javascripts/gridx/support/_LinkPageBase.js +92 -0
  439. data/app/assets/javascripts/gridx/support/exporter/exporter.js +350 -0
  440. data/app/assets/javascripts/gridx/support/exporter/toCSV.js +75 -0
  441. data/app/assets/javascripts/gridx/support/exporter/toTable.js +92 -0
  442. data/app/assets/javascripts/gridx/support/menu/AZFilterMenu.js +57 -0
  443. data/app/assets/javascripts/gridx/support/menu/NumberFilterMenu.js +87 -0
  444. data/app/assets/javascripts/gridx/support/menu/_FilterMenuBase.js +83 -0
  445. data/app/assets/javascripts/gridx/support/printer.js +157 -0
  446. data/app/assets/javascripts/gridx/templates/FilterBar.html +8 -0
  447. data/app/assets/javascripts/gridx/templates/FilterConfirmDialog.html +5 -0
  448. data/app/assets/javascripts/gridx/templates/FilterDialog.html +19 -0
  449. data/app/assets/javascripts/gridx/templates/FilterPane.html +64 -0
  450. data/app/assets/javascripts/gridx/templates/GotoPagePane.html +28 -0
  451. data/app/assets/javascripts/gridx/templates/Grid.html +19 -0
  452. data/app/assets/javascripts/gridx/templates/LinkPager.html +24 -0
  453. data/app/assets/javascripts/gridx/templates/PaginationBar.html +60 -0
  454. data/app/assets/javascripts/gridx/templates/PaginationBarDD.html +23 -0
  455. data/app/assets/javascripts/gridx/templates/QuickFilter.html +38 -0
  456. data/app/assets/stylesheets/gridx/mobile/themes/iphone/Grid.css +107 -0
  457. data/app/assets/stylesheets/gridx/resources/Dod.css +39 -0
  458. data/app/assets/stylesheets/gridx/resources/Gridx.css +10 -0
  459. data/app/assets/stylesheets/gridx/resources/Gridx_rtl.css +5 -0
  460. data/app/assets/stylesheets/gridx/resources/Tree.css +46 -0
  461. data/app/assets/stylesheets/gridx/resources/Tree_rtl.css +4 -0
  462. data/app/assets/stylesheets/gridx/resources/bar.css +24 -0
  463. data/app/assets/stylesheets/gridx/resources/basic.css +482 -0
  464. data/app/assets/stylesheets/gridx/resources/basic_rtl.css +37 -0
  465. data/app/assets/stylesheets/gridx/resources/claro/Gridx.css +16 -0
  466. data/app/assets/stylesheets/gridx/resources/claro/Gridx_rtl.css +7 -0
  467. data/app/assets/stylesheets/gridx/resources/claro/basic.css +109 -0
  468. data/app/assets/stylesheets/gridx/resources/claro/basic_rtl.css +21 -0
  469. data/app/assets/stylesheets/gridx/resources/claro/filter.css +47 -0
  470. data/app/assets/stylesheets/gridx/resources/claro/lock.css +19 -0
  471. data/app/assets/stylesheets/gridx/resources/claro/pagination.css +33 -0
  472. data/app/assets/stylesheets/gridx/resources/claro/select.css +20 -0
  473. data/app/assets/stylesheets/gridx/resources/dnd.css +108 -0
  474. data/app/assets/stylesheets/gridx/resources/filter.css +321 -0
  475. data/app/assets/stylesheets/gridx/resources/filter_rtl.css +38 -0
  476. data/app/assets/stylesheets/gridx/resources/lock.css +20 -0
  477. data/app/assets/stylesheets/gridx/resources/pagination.css +142 -0
  478. data/app/assets/stylesheets/gridx/resources/pagination_rtl.css +54 -0
  479. data/app/assets/stylesheets/gridx/resources/select.css +39 -0
  480. data/app/assets/stylesheets/gridx/resources/sort.css +154 -0
  481. data/app/assets/stylesheets/gridx/resources/sort_rtl.css +51 -0
  482. data/lib/gridx-rails/engine.rb +8 -0
  483. data/lib/gridx-rails/version.rb +3 -0
  484. data/lib/gridx-rails.rb +4 -0
  485. data/lib/tasks/gridx-rails_tasks.rake +52 -0
  486. data/test/dummy/README.rdoc +261 -0
  487. data/test/dummy/Rakefile +7 -0
  488. data/test/dummy/app/assets/javascripts/application.js +15 -0
  489. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  490. data/test/dummy/app/controllers/application_controller.rb +3 -0
  491. data/test/dummy/app/helpers/application_helper.rb +2 -0
  492. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  493. data/test/dummy/config/application.rb +59 -0
  494. data/test/dummy/config/boot.rb +10 -0
  495. data/test/dummy/config/database.yml +25 -0
  496. data/test/dummy/config/environment.rb +5 -0
  497. data/test/dummy/config/environments/development.rb +37 -0
  498. data/test/dummy/config/environments/production.rb +67 -0
  499. data/test/dummy/config/environments/test.rb +37 -0
  500. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  501. data/test/dummy/config/initializers/inflections.rb +15 -0
  502. data/test/dummy/config/initializers/mime_types.rb +5 -0
  503. data/test/dummy/config/initializers/secret_token.rb +7 -0
  504. data/test/dummy/config/initializers/session_store.rb +8 -0
  505. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  506. data/test/dummy/config/locales/en.yml +5 -0
  507. data/test/dummy/config/routes.rb +58 -0
  508. data/test/dummy/config.ru +4 -0
  509. data/test/dummy/db/test.sqlite3 +0 -0
  510. data/test/dummy/log/test.log +78 -0
  511. data/test/dummy/public/404.html +26 -0
  512. data/test/dummy/public/422.html +26 -0
  513. data/test/dummy/public/500.html +25 -0
  514. data/test/dummy/public/favicon.ico +0 -0
  515. data/test/dummy/script/rails +6 -0
  516. data/test/gridx-rails_test.rb +7 -0
  517. data/test/test_helper.rb +15 -0
  518. metadata +621 -0
@@ -0,0 +1,646 @@
1
+ define([
2
+ "dojo/_base/kernel",
3
+ "dojo/_base/declare",
4
+ "dojo/_base/array",
5
+ "dojo/dom-class",
6
+ "dojo/dom-geometry",
7
+ "dojo/_base/lang",
8
+ "dojo/_base/Deferred",
9
+ "dojo/DeferredList",
10
+ "dojo/query",
11
+ "dojo/keys",
12
+ "../core/_Module"
13
+ // "dojo/NodeList-dom",
14
+ // "dojo/NodeList-traverse"
15
+ ], function(kernel, declare, array, domClass, domGeometry, lang, Deferred, DeferredList, query, keys, _Module){
16
+ kernel.experimental('gridx/modules/Tree');
17
+
18
+ /*=====
19
+ Row.canExpand = function(){
20
+ // summary:
21
+ // Whether this row can be expanded.
22
+ // returns:
23
+ // True if can, false if can not.
24
+ };
25
+ Row.isExpanded = function(){
26
+ // summary:
27
+ // Whether this row is expanded.
28
+ // returns:
29
+ // True if expanded. False if not.
30
+ };
31
+ Row.expand = function(){
32
+ // summary:
33
+ // Expand this row.
34
+ // returns:
35
+ // A Deferred object
36
+ };
37
+ Row.collapse = function(){
38
+ // summary:
39
+ // Collapse this row.
40
+ // returns:
41
+ // A Deferred object
42
+ };
43
+ Row.expandRecursive = function(){
44
+ // summary:
45
+ // Recursively expand this row.
46
+ // returns:
47
+ // A Deferred object
48
+ };
49
+ Row.collapseRecursive = function(){
50
+ // summary:
51
+ // Recursively collapse this row.
52
+ // returns:
53
+ // A Deferred object
54
+ };
55
+
56
+ var Tree = declare(_Module, {
57
+ // summary:
58
+ // This module manages row expansion/collapsing in tree grid.
59
+ // description:
60
+ // To use tree grid, the store must have 2 extra methods: hasChildren and getChildren.
61
+ // Please refer to Tree.__TreeStoreMixin for more details on these 2 methods.
62
+ //
63
+ // In tree grid, an expando appears on a row that has child rows. By clicking the expando,
64
+ // the row is expanded to show its child rows below it, and the expando becomes expanded status.
65
+ // By clicking the expanded expando, the expanded row is then collapsed and all its child rows
66
+ // are hidden. If a descentant row of a collapsed row is expanded, it will appear expanded when that
67
+ // collapsed row is expanded (that means the child row expansion status is maintained).
68
+ //
69
+ // Different levels of expandos can either appear in one column or in several different columns.
70
+ // If different expandos appear in different columns, it is called "nested". This can be set using
71
+ // the "nested" Boolean parameter.
72
+ //
73
+ // The default position of the expando is in the first column, but this position can also be changed
74
+ // by setting the "expandLevel" parameter in column definition. If "nested" is false, the expandos will
75
+ // appear in the first column with truthy "expandLevel" parameter. If "nested" is true, the expando
76
+ // of any 1st level row will be shown in the column with "expandLevel" equal to 1, and the expando of
77
+ // any 2nd level row will be shown in the column width "expandLevel" equal to 2, and so on.
78
+ //
79
+ // The expansion/collapsing of a row can also be controlled by keyboard when the focus is on the cell
80
+ // with the expando. CTRL+RIGHT_ARROW to expand and CTRL+LEFT_ARROW to collapse. If in RTL mode, the ARROW
81
+ // keys are reversed.
82
+ // example:
83
+ // Define the hasChildren and getChildren methods for store (suppose the "children" field contains the child rows):
84
+ // If the store is ItemFileReadStore:
85
+ // | store.hasChildren = function(id, item){
86
+ // | return item && store.getValues(item, 'children').length;
87
+ // | };
88
+ // | store.getChildren = function(item){
89
+ // | return store.getValues(item, 'children');
90
+ // | };
91
+ // If the store is Memory store:
92
+ // | store.hasChildren = function(id, item){
93
+ // | return item && item.children && item.children.length;
94
+ // | };
95
+ // | store.getChildren = function(item){
96
+ // | return item.children;
97
+ // | };
98
+ // If the child rows need to be fetched from server side:
99
+ // | store.hasChildren = function(id, item){
100
+ // | return item&& item.children; //This children field only indicates whether the row has children.
101
+ // | };
102
+ // | store.getChildren = function(item){
103
+ // | var d = new Deferred();
104
+ // | var children = [];
105
+ // | dojo.request(...).then(function(){
106
+ // | //get the child rows here and populate them into an array.
107
+ // | d.callback(children);
108
+ // | });
109
+ // | return d;
110
+ // | };
111
+
112
+ // nested: Boolean
113
+ // If set to true, the tree nodes can be shown in nested mode.
114
+ nested: false,
115
+
116
+ // expandoPadding: Integer
117
+ // The padding added for each level of expando. Unit is pixel. Default to 18.
118
+ expandoPadding: 18,
119
+
120
+ // expandLevel: Integer
121
+ // The maximum allowed expand level of this tree grid.
122
+ // If less than 1, then this is not a tree grid at all.
123
+ expandLevel: 1 / 0,
124
+
125
+ // clearOnSetStore: Boolean
126
+ // Whether to clear all the recorded expansion info after setStore.
127
+ clearOnSetStore: true,
128
+
129
+ onExpand: function(id){
130
+ // summary:
131
+ // Fired when a row is expanded.
132
+ // tags:
133
+ // callback
134
+ // id: String
135
+ // The ID of the expanded row
136
+ },
137
+
138
+ onCollapse: function(id){
139
+ // summary:
140
+ // Fired when a row is collapsed.
141
+ // tags:
142
+ // callback
143
+ // id: String
144
+ // The ID of the collapsed row.
145
+ },
146
+
147
+ canExpand: function(id){
148
+ // summary:
149
+ // Check whether a row can be expanded.
150
+ // id: String
151
+ // The row ID
152
+ // returns:
153
+ // Whether the row can be expanded.
154
+ },
155
+
156
+ isExpanded: function(id){
157
+ // summary:
158
+ // Check whether a row is already expanded.
159
+ // id: String
160
+ // The row ID
161
+ // returns:
162
+ // Whether the row is expanded.
163
+ },
164
+
165
+ isPaddingCell: function(rowId, columnId){
166
+ // summary:
167
+ // Check wheter a cell is padding cell. Only meaningful in "nested" tree grid.
168
+ // By default, in "nested" tree grid, the cells before the current expando cell are all padding cells.
169
+ // A padding cell is an empty cell, nothing is shown in the cell, decorator and formatter functions
170
+ // are not called on it either.
171
+ // rowId: String|Number
172
+ // The row ID of the cell
173
+ // columnId: String|Number
174
+ // The column ID of the cell
175
+ },
176
+
177
+ expand: function(id, skipUpdateBody){
178
+ // summary:
179
+ // Expand the row.
180
+ // id: String
181
+ // The row ID
182
+ // skipUpdateBody: Boolean
183
+ // If set to true the grid will not automatically refresh itself after this method,
184
+ // so that several grid operations can be executed altogether.
185
+ // returns:
186
+ // A deferred object indicating whether this expanding process has completed.
187
+ },
188
+
189
+ collapse: function(id, skipUpdateBody){
190
+ // summary:
191
+ // Collapse a row.
192
+ // id: String
193
+ // The row ID
194
+ // skipUpdateBody: Boolean
195
+ // If set to true the grid will not automatically refresh itself after this method,
196
+ // so that several grid operations can be executed altogether.
197
+ // returns:
198
+ // A deferred object indicating whether this collapsing process has completed.
199
+ },
200
+
201
+ expandRecursive: function(id, skipUpdateBody){
202
+ // summary:
203
+ // Recursively expand a row and all its descendants.
204
+ // id: String
205
+ // The row ID
206
+ // skipUpdateBody: Boolean
207
+ // If set to true the grid will not automatically refresh itself after this method,
208
+ // so that several grid operations can be executed altogether.
209
+ // returns:
210
+ // A deferred object indicating whether this expanding process has completed.
211
+ },
212
+
213
+ collapseRecursive: function(id, skipUpdateBody){
214
+ // summary:
215
+ // Recursively collapse a row recursively and all its descendants.
216
+ // id: String
217
+ // The row ID
218
+ // skipUpdateBody: Boolean
219
+ // If set to true the grid will not automatically refresh itself after this method,
220
+ // so that several grid operations can be executed altogether.
221
+ // returns:
222
+ // A deferred object indicating whether this collapsing process has completed.
223
+ }
224
+ });
225
+
226
+ Tree.__ColumnDefinition = declare(Column.__ColumnDefinition, {
227
+ // expandLevel: Number
228
+ // If tree grid is "nested", the expando will be shown in the column whose "expandLevel" equals the
229
+ // level of the row. For example, the expando of a root row will be shown in the column whose "expandLevel"
230
+ // equals 1. And the child rows of the root row will show their expando in the column with "expandLevel" equals 2,
231
+ // and so on.
232
+ // If no "expandLevel" is provided for a "nested" tree grid, the first column has "expandLevel" 1, second 2, and so on.
233
+ // If tree grid is not "nested", all the expandos will be shown in the first column with truthy "expandLevel".
234
+ // If no "expandLevel" is provided for a non-nested tree grid, the first column has all the expandos by default.
235
+ expandLevel: 0,
236
+
237
+ // padding: Boolean
238
+ // By default, in "nested" tree grid, the cells before the current expando cell are all padding cells.
239
+ // But if some cell matching this condition should not be padding, then this parameter should be
240
+ // explicitly set to false for the column of this cell.
241
+ padding: undefined
242
+ });
243
+
244
+ Tree.__TreeStoreMixin = declare([], {
245
+ // summary:
246
+ // The extra methods for tree store.
247
+ // description:
248
+ // Since the dojo store does not support tree structure by default, some extra methods should be defined to
249
+ // help grid retrieve the child level items.
250
+
251
+ hasChildren: function(id, item){
252
+ // summary:
253
+ // Check whether a row has child rows. This function should not throw any error.
254
+ // id: String|Number
255
+ // The row ID
256
+ // item: Object
257
+ // The store item
258
+ // returns:
259
+ // True if the given row has children, false otherwise.
260
+ },
261
+
262
+ getChildren: function(item){
263
+ // summary:
264
+ // Get an array of the child items of the given row item.
265
+ // item: Object
266
+ // The store item
267
+ // returns:
268
+ // An array of the child items of the given row item.
269
+ }
270
+ });
271
+
272
+ return Tree;
273
+ =====*/
274
+
275
+ function isExpando(cellNode){
276
+ var n = cellNode.firstChild;
277
+ return n && n.className && domClass.contains(n, 'gridxTreeExpandoCell') &&
278
+ !domClass.contains(n, 'gridxTreeExpandoLoading');
279
+ }
280
+
281
+ return declare(_Module, {
282
+ name: "tree",
283
+
284
+ forced: ['view'],
285
+
286
+ preload: function(){
287
+ var t = this,
288
+ g = t.grid;
289
+ g.domNode.setAttribute('role', 'treegrid');
290
+ t.aspect(g.body, 'collectCellWrapper', '_createCellWrapper');
291
+ t.aspect(g.body, 'onAfterRow', '_onAfterRow');
292
+ t.aspect(g.body, 'onCheckCustomRow', function(row, output){
293
+ if(!t.nested && t.mergedParentRow){
294
+ output[row.id] = row.canExpand();
295
+ }
296
+ });
297
+ t.aspect(g.body, 'onBuildCustomRow', function(row, output){
298
+ output[row.id] = row.id;
299
+ });
300
+ t.aspect(g, 'onCellClick', '_onCellClick');
301
+ t.aspect(g, 'onRowClick', function(e){
302
+ if(!t.nested && t.mergedParentRow){
303
+ if(t.canExpand(e.rowId)){
304
+ if(t.isExpanded(e.rowId)){
305
+ t.collapse(e.rowId);
306
+ }else{
307
+ t.expand(e.rowId);
308
+ }
309
+ }
310
+ }
311
+ });
312
+ t._initExpandLevel();
313
+ t._initFocus();
314
+ },
315
+
316
+ rowMixin: {
317
+ canExpand: function(){
318
+ return this.grid.tree.canExpand(this.id);
319
+ },
320
+ isExpanded: function(){
321
+ return this.grid.tree.isExpanded(this.id);
322
+ },
323
+ expand: function(){
324
+ return this.grid.tree.expand(this.id);
325
+ },
326
+ collapse: function(){
327
+ return this.grid.tree.collapse(this.id);
328
+ },
329
+ expandRecursive: function(){
330
+ return this.grid.tree.expandRecursive(this.id);
331
+ },
332
+ collapseRecursive: function(){
333
+ return this.grid.tree.collapseRecursive(this.id);
334
+ }
335
+ },
336
+
337
+ nested: false,
338
+
339
+ expandoWidth: 16,
340
+
341
+ expandoPadding: 18,
342
+
343
+ expandLevel: 1 / 0,
344
+
345
+ clearOnSetStore: true,
346
+
347
+ mergedParentRow: false,
348
+
349
+ onExpand: function(id){},
350
+
351
+ onCollapse: function(id){},
352
+
353
+ canExpand: function(id){
354
+ var t = this,
355
+ m = t.model,
356
+ level = m.treePath(id).length,
357
+ expandLevel = t.arg('expandLevel');
358
+ return m.hasChildren(id) && (!(expandLevel > 0) || level <= expandLevel);
359
+ },
360
+
361
+ isExpanded: function(id){
362
+ return !!this.grid.view._openInfo[id];
363
+ },
364
+
365
+ isPaddingCell: function(rowId, colId){
366
+ var t = this,
367
+ level = t.model.treePath(rowId).length,
368
+ c = t.grid._columnsById[colId];
369
+ if(t.arg('nested') && level > 1 && c.padding !== false){
370
+ for(var i = 0; i < t.grid._columns.length; ++i){
371
+ var col = t.grid._columns[i];
372
+ if(col.expandLevel == level){
373
+ return c.index < col.index;
374
+ }
375
+ }
376
+ }
377
+ return false;
378
+ },
379
+
380
+ expand: function(id, skipUpdateBody){
381
+ var d = new Deferred(),
382
+ t = this;
383
+ if(id && !t.isExpanded(id) && t.canExpand(id)){
384
+ t._beginLoading(id);
385
+ t.grid.view.logicExpand(id).then(function(){
386
+ Deferred.when(t._updateBody(id, skipUpdateBody, true), function(){
387
+ t._endLoading(id);
388
+ d.callback();
389
+ t.onExpand(id);
390
+ });
391
+ });
392
+ }else{
393
+ d.callback();
394
+ }
395
+ return d;
396
+ },
397
+
398
+ collapse: function(id, skipUpdateBody){
399
+ var d = new Deferred(),
400
+ t = this;
401
+ if(id && t.isExpanded(id)){
402
+ t.grid.view.logicCollapse(id);
403
+ Deferred.when(t._updateBody(id, skipUpdateBody), function(){
404
+ d.callback();
405
+ t.onCollapse(id);
406
+ });
407
+ }else{
408
+ d.callback();
409
+ }
410
+ return d;
411
+ },
412
+
413
+ expandRecursive: function(id, skipUpdateBody){
414
+ var t = this,
415
+ m = t.model,
416
+ d = new Deferred();
417
+ t._beginLoading(id);
418
+ t.expand(id, 1).then(function(){
419
+ var i, dl = [], size = m.size(id);
420
+ m.when({start: 0, parentId: id}, function(){
421
+ for(i = 0; i < size; ++i){
422
+ var childId = m.indexToId(i, id);
423
+ dl.push(t.expandRecursive(childId, 1));
424
+ }
425
+ }).then(function(){
426
+ new DeferredList(dl).then(function(){
427
+ Deferred.when(t._updateBody(id, skipUpdateBody), function(){
428
+ t._endLoading(id);
429
+ d.callback();
430
+ });
431
+ });
432
+ });
433
+ });
434
+ return d;
435
+ },
436
+
437
+ collapseRecursive: function(id, skipUpdateBody){
438
+ var d = new Deferred(),
439
+ success = lang.hitch(d, d.callback),
440
+ fail = lang.hitch(d, d.errback),
441
+ t = this,
442
+ view = t.grid.view,
443
+ info = view._openInfo[id || ''],
444
+ i, dl = [];
445
+ if(info){
446
+ for(i = info.openned.length - 1; i >= 0; --i){
447
+ dl.push(t.collapseRecursive(info.openned[i], 1));
448
+ }
449
+ new DeferredList(dl).then(function(){
450
+ if(id){
451
+ t.collapse(id, skipUpdateBody).then(success, fail);
452
+ }else{
453
+ Deferred.when(t._updateBody('', skipUpdateBody), success, fail);
454
+ }
455
+ });
456
+ }else{
457
+ success();
458
+ }
459
+ return d;
460
+ },
461
+
462
+ //Private-------------------------------------------------------------------------------
463
+ _initExpandLevel: function(){
464
+ var cols = array.filter(this.grid._columns, function(col){
465
+ return !col.ignore;
466
+ });
467
+ if(!array.some(cols, function(col){
468
+ return col.expandLevel;
469
+ })){
470
+ if(this.arg('nested')){
471
+ array.forEach(cols, function(col, i){
472
+ col.expandLevel = i + 1;
473
+ });
474
+ }else if(cols.length){
475
+ cols[0].expandLevel = 1;
476
+ }
477
+ }
478
+ },
479
+
480
+ _createCellWrapper: function(wrappers, rowId, colId){
481
+ var t = this,
482
+ col = t.grid._columnsById[colId];
483
+ if(!col || col.expandLevel){
484
+ var isNested = t.arg('nested'),
485
+ level = t.model.treePath(rowId).length,
486
+ expandLevel = t.arg('expandLevel');
487
+ if((!isNested || (col && col.expandLevel == level)) &&
488
+ (!(expandLevel > 0) || level <= expandLevel + 1)){
489
+ var hasChildren = t.model.hasChildren(rowId),
490
+ isOpen = t.isExpanded(rowId),
491
+ pad = 0,
492
+ expandoWidth = t.arg('expandoWidth'),
493
+ singlePad = t.arg('expandoPadding'),
494
+ ltr = t.grid.isLeftToRight();
495
+ if(!isNested){
496
+ pad = (level - 1) * singlePad;
497
+ }
498
+ if(level == expandLevel + 1){
499
+ //This is one level beyond the last level, there should not be expando
500
+ if(isNested){
501
+ //If nested, no indent needed
502
+ return;
503
+ }
504
+ //If not nested, this level still needs indent
505
+ hasChildren = false;
506
+ }
507
+ wrappers.push({
508
+ priority: 0,
509
+ wrap: function(cellData){
510
+ return ["<div class='gridxTreeExpandoCell ",
511
+ isOpen ? "gridxTreeExpandoCellOpen" : "",
512
+ "' style='padding-", ltr ? 'left' : 'right', ": ", pad + expandoWidth, "px;'>",
513
+ "<div class='gridxTreeExpandoIcon ",
514
+ hasChildren ? '' : 'gridxTreeExpandoIconNoChildren',
515
+ "' ",
516
+ "style='margin-", ltr ? 'left' : 'right', ": ", pad, "px;'>",
517
+ "<div class='gridxTreeExpandoInner'>",
518
+ isOpen ? "-" : "+",
519
+ "</div></div><div class='gridxTreeExpandoContent gridxCellContent'>",
520
+ cellData,
521
+ "</div></div>"
522
+ ].join('');
523
+ }
524
+ });
525
+ }
526
+ }
527
+ },
528
+
529
+ _onCellClick: function(e){
530
+ if(isExpando(e.cellNode)){
531
+ var t = this,
532
+ pos = domGeometry.position(query('.gridxTreeExpandoIcon', e.cellNode)[0]);
533
+ if(e.clientX >= pos.x && e.clientX <= pos.x + pos.w && e.clientY >= pos.y && e.clientY <= pos.y + pos.h){
534
+ if(t.isExpanded(e.rowId)){
535
+ t.collapse(e.rowId);
536
+ }else{
537
+ t.expand(e.rowId);
538
+ }
539
+ }
540
+ }
541
+ },
542
+
543
+ _beginLoading: function(id){
544
+ var rowNode = this.grid.body.getRowNode({rowId: id});
545
+ if(rowNode){
546
+ query('.gridxTreeExpandoCell', rowNode).addClass('gridxTreeExpandoLoading');
547
+ query('.gridxTreeExpandoIcon', rowNode).forEach(function(node){
548
+ node.firstChild.innerHTML = 'o';
549
+ });
550
+ }
551
+ },
552
+
553
+ _endLoading: function(id){
554
+ var rowNode = this.grid.body.getRowNode({rowId: id}),
555
+ isOpen = this.isExpanded(id);
556
+ if(rowNode){
557
+ var nls = this.grid.body._nls;
558
+ query('.gridxTreeExpandoCell', rowNode).
559
+ removeClass('gridxTreeExpandoLoading').
560
+ toggleClass('gridxTreeExpandoCellOpen', isOpen).
561
+ closest('.gridxCell').
562
+ attr('aria-expanded', String(isOpen)).
563
+ attr('aria-label', isOpen ? nls.treeExpanded : nls.treeCollapsed);
564
+ query('.gridxTreeExpandoIcon', rowNode).forEach(function(node){
565
+ node.firstChild.innerHTML = isOpen ? '-' : '+';
566
+ });
567
+ rowNode.setAttribute('aria-expanded', String(isOpen));
568
+ }
569
+ },
570
+
571
+ _updateBody: function(id, skip, refreshPartial){
572
+ var t = this,
573
+ view = t.grid.view,
574
+ body = t.grid.body;
575
+ if(!skip){
576
+ var visualIndex = refreshPartial && id ?
577
+ view.getRowInfo({
578
+ rowIndex: t.model.idToIndex(id),
579
+ parentId: t.model.parentId(id)
580
+ }).visualIndex : -1;
581
+ //When collapsing, the row count in current view decrease, if only render partially,
582
+ //it is possible that the vertical scroll bar disappear, then the upper unrendered rows will be lost.
583
+ //So refresh the whole body here to make the upper row also visible.
584
+ //FIXME: need better solution here.
585
+ return body.refresh(refreshPartial && visualIndex + 1);
586
+ }
587
+ return null;
588
+ },
589
+
590
+ _onAfterRow: function(row){
591
+ var hasChildren = this.model.hasChildren(row.id);
592
+ if(hasChildren){
593
+ var rowNode = row.node(),
594
+ expanded = this.isExpanded();
595
+ rowNode.setAttribute('aria-expanded', expanded);
596
+ //This is only to make JAWS readk
597
+ var nls = this.grid.body._nls;
598
+ query('.gridxTreeExpandoCell', rowNode).closest('.gridxCell').
599
+ attr('aria-expanded', String(expanded)).
600
+ attr('aria-label', expanded ? nls.treeExpanded : nls.treeCollapsed);
601
+ }
602
+ },
603
+
604
+ //Focus------------------------------------------------------------------
605
+ _initFocus: function(){
606
+ this.connect(this.grid, 'onCellKeyDown', '_onKey');
607
+ },
608
+
609
+ _onKey: function(e){
610
+ var t = this;
611
+ if(e.keyCode == keys.ESCAPE){
612
+ var m = t.model,
613
+ treePath = m.treePath(e.rowId),
614
+ parentId = treePath.pop(),
615
+ parentLevel = treePath.length,
616
+ grid = t.grid;
617
+ if(parentId){
618
+ var i, col, visualIndex;
619
+ for(i = grid._columns.length - 1; i >= 0; --i){
620
+ col = grid._columns[i];
621
+ if(col.expandLevel && (!t.arg('nested') || col.expandLevel == parentLevel)){
622
+ break;
623
+ }
624
+ }
625
+ m.when({id: parentId}, function(){
626
+ visualIndex = grid.view.getRowInfo({
627
+ parentId: treePath.pop(),
628
+ rowIndex: m.idToIndex(parentId)
629
+ }).visualIndex;
630
+ }).then(function(){
631
+ grid.vScroller.scrollToRow(visualIndex).then(function(){
632
+ grid.body._focusCell(null, visualIndex, col.index);
633
+ });
634
+ });
635
+ }
636
+ }else if(e.ctrlKey && isExpando(e.cellNode)){
637
+ var ltr = t.grid.isLeftToRight();
638
+ if(e.keyCode == (ltr ? keys.LEFT_ARROW : keys.RIGHT_ARROW) && t.isExpanded(e.rowId)){
639
+ t.collapse(e.rowId);
640
+ }else if(e.keyCode == (ltr ? keys.RIGHT_ARROW : keys.LEFT_ARROW) && !t.isExpanded(e.rowId)){
641
+ t.expand(e.rowId);
642
+ }
643
+ }
644
+ }
645
+ });
646
+ });