classiccms 0.5.5 → 0.5.6

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 (407) hide show
  1. data/classiccms.gemspec +1 -0
  2. data/lib/classiccms/application.rb +1 -0
  3. data/lib/classiccms/controllers/admin.rb +28 -0
  4. data/lib/classiccms/controllers/cms.rb +14 -11
  5. data/lib/classiccms/helpers.rb +8 -0
  6. data/lib/classiccms/public/admin/bootstrap/css/bootstrap-responsive.css +815 -0
  7. data/lib/classiccms/public/admin/bootstrap/css/bootstrap-responsive.min.css +9 -0
  8. data/lib/classiccms/public/admin/bootstrap/css/bootstrap.css +4983 -0
  9. data/lib/classiccms/public/admin/bootstrap/css/bootstrap.min.css +9 -0
  10. data/lib/classiccms/public/admin/bootstrap/img/glyphicons-halflings-white.png +0 -0
  11. data/lib/classiccms/public/admin/bootstrap/img/glyphicons-halflings.png +0 -0
  12. data/lib/classiccms/public/admin/bootstrap/index.js +14 -0
  13. data/lib/classiccms/public/admin/bootstrap/js/bootstrap.js +1825 -0
  14. data/lib/classiccms/public/admin/bootstrap/js/bootstrap.min.js +6 -0
  15. data/lib/classiccms/public/admin/datatables/css/demo_page.css +107 -0
  16. data/lib/classiccms/public/admin/datatables/css/demo_table.css +556 -0
  17. data/lib/classiccms/public/admin/datatables/css/demo_table_jui.css +526 -0
  18. data/lib/classiccms/public/admin/datatables/css/jquery.dataTables.css +220 -0
  19. data/lib/classiccms/public/admin/datatables/css/jquery.dataTables_themeroller.css +245 -0
  20. data/lib/classiccms/public/admin/datatables/images/Sorting icons.psd +0 -0
  21. data/lib/classiccms/public/admin/datatables/images/back_disabled.png +0 -0
  22. data/lib/classiccms/public/admin/datatables/images/back_enabled.png +0 -0
  23. data/lib/classiccms/public/admin/datatables/images/back_enabled_hover.png +0 -0
  24. data/lib/classiccms/public/admin/datatables/images/favicon.ico +0 -0
  25. data/lib/classiccms/public/admin/datatables/images/forward_disabled.png +0 -0
  26. data/lib/classiccms/public/admin/datatables/images/forward_enabled.png +0 -0
  27. data/lib/classiccms/public/admin/datatables/images/forward_enabled_hover.png +0 -0
  28. data/lib/classiccms/public/admin/datatables/images/sort_asc.png +0 -0
  29. data/lib/classiccms/public/admin/datatables/images/sort_asc_disabled.png +0 -0
  30. data/lib/classiccms/public/admin/datatables/images/sort_both.png +0 -0
  31. data/lib/classiccms/public/admin/datatables/images/sort_desc.png +0 -0
  32. data/lib/classiccms/public/admin/datatables/images/sort_desc_disabled.png +0 -0
  33. data/lib/classiccms/public/admin/datatables/js/jquery.dataTables.js +11863 -0
  34. data/lib/classiccms/public/admin/datatables/js/jquery.dataTables.min.js +154 -0
  35. data/lib/classiccms/public/admin/datatables/js/jquery.js +4 -0
  36. data/lib/classiccms/public/admin/datatables/src/DataTables.js +259 -0
  37. data/lib/classiccms/public/admin/datatables/src/api/api.internal.js +128 -0
  38. data/lib/classiccms/public/admin/datatables/src/api/api.methods.js +1276 -0
  39. data/lib/classiccms/public/admin/datatables/src/api/api.static.js +98 -0
  40. data/lib/classiccms/public/admin/datatables/src/core/core.ajax.js +185 -0
  41. data/lib/classiccms/public/admin/datatables/src/core/core.columns.js +365 -0
  42. data/lib/classiccms/public/admin/datatables/src/core/core.constructor.js +439 -0
  43. data/lib/classiccms/public/admin/datatables/src/core/core.data.js +546 -0
  44. data/lib/classiccms/public/admin/datatables/src/core/core.draw.js +788 -0
  45. data/lib/classiccms/public/admin/datatables/src/core/core.filter.js +405 -0
  46. data/lib/classiccms/public/admin/datatables/src/core/core.info.js +117 -0
  47. data/lib/classiccms/public/admin/datatables/src/core/core.init.js +153 -0
  48. data/lib/classiccms/public/admin/datatables/src/core/core.length.js +122 -0
  49. data/lib/classiccms/public/admin/datatables/src/core/core.page.js +119 -0
  50. data/lib/classiccms/public/admin/datatables/src/core/core.processing.js +44 -0
  51. data/lib/classiccms/public/admin/datatables/src/core/core.scrolling.js +495 -0
  52. data/lib/classiccms/public/admin/datatables/src/core/core.sizing.js +405 -0
  53. data/lib/classiccms/public/admin/datatables/src/core/core.sort.js +460 -0
  54. data/lib/classiccms/public/admin/datatables/src/core/core.state.js +201 -0
  55. data/lib/classiccms/public/admin/datatables/src/core/core.support.js +316 -0
  56. data/lib/classiccms/public/admin/datatables/src/ext/ext.classes.js +112 -0
  57. data/lib/classiccms/public/admin/datatables/src/ext/ext.paging.js +257 -0
  58. data/lib/classiccms/public/admin/datatables/src/ext/ext.sorting.js +86 -0
  59. data/lib/classiccms/public/admin/datatables/src/ext/ext.types.js +88 -0
  60. data/lib/classiccms/public/admin/datatables/src/model/model.column.js +248 -0
  61. data/lib/classiccms/public/admin/datatables/src/model/model.defaults.columns.js +737 -0
  62. data/lib/classiccms/public/admin/datatables/src/model/model.defaults.js +1944 -0
  63. data/lib/classiccms/public/admin/datatables/src/model/model.ext.js +528 -0
  64. data/lib/classiccms/public/admin/datatables/src/model/model.row.js +64 -0
  65. data/lib/classiccms/public/admin/datatables/src/model/model.search.js +40 -0
  66. data/lib/classiccms/public/admin/datatables/src/model/model.settings.js +868 -0
  67. data/lib/classiccms/public/admin/datatables/unit_testing/controller.js +94 -0
  68. data/lib/classiccms/public/admin/datatables/unit_testing/controller.php +100 -0
  69. data/lib/classiccms/public/admin/datatables/unit_testing/index.html +7 -0
  70. data/lib/classiccms/public/admin/datatables/unit_testing/performance/draw.html +482 -0
  71. data/lib/classiccms/public/admin/datatables/unit_testing/performance/large.php +108 -0
  72. data/lib/classiccms/public/admin/datatables/unit_testing/performance/page.html +477 -0
  73. data/lib/classiccms/public/admin/datatables/unit_testing/performance/sort.html +477 -0
  74. data/lib/classiccms/public/admin/datatables/unit_testing/templates/-complex_header.php +469 -0
  75. data/lib/classiccms/public/admin/datatables/unit_testing/templates/2512.php +464 -0
  76. data/lib/classiccms/public/admin/datatables/unit_testing/templates/6776.php +116 -0
  77. data/lib/classiccms/public/admin/datatables/unit_testing/templates/complex_header_2.php +485 -0
  78. data/lib/classiccms/public/admin/datatables/unit_testing/templates/deferred_table.php +132 -0
  79. data/lib/classiccms/public/admin/datatables/unit_testing/templates/dom_data.php +465 -0
  80. data/lib/classiccms/public/admin/datatables/unit_testing/templates/dom_data_th.php +465 -0
  81. data/lib/classiccms/public/admin/datatables/unit_testing/templates/dom_data_two_headers.php +472 -0
  82. data/lib/classiccms/public/admin/datatables/unit_testing/templates/dymanic_table.php +45 -0
  83. data/lib/classiccms/public/admin/datatables/unit_testing/templates/empty_table.php +55 -0
  84. data/lib/classiccms/public/admin/datatables/unit_testing/templates/html_table.php +66 -0
  85. data/lib/classiccms/public/admin/datatables/unit_testing/templates/js_data.php +124 -0
  86. data/lib/classiccms/public/admin/datatables/unit_testing/templates/js_data_mixed_types.php +124 -0
  87. data/lib/classiccms/public/admin/datatables/unit_testing/templates/two_tables.php +227 -0
  88. data/lib/classiccms/public/admin/datatables/unit_testing/tests/1_dom/_zero_config.js +437 -0
  89. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/-complex_header.js +52 -0
  90. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/-iDraw.js +41 -0
  91. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2512.js +17 -0
  92. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2530-2.js +15 -0
  93. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2530.js +29 -0
  94. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2569.js +36 -0
  95. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2600.js +44 -0
  96. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2608.js +54 -0
  97. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2635.js +40 -0
  98. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2746-stable-sort.js +199 -0
  99. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2799.js +14 -0
  100. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js +19 -0
  101. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js +39 -0
  102. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js +103 -0
  103. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js +23 -0
  104. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/6776-scrolling-table-grows.js +64 -0
  105. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/_zero_config.js +437 -0
  106. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aaSorting.js +183 -0
  107. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aaSortingFixed.js +60 -0
  108. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js +67 -0
  109. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js +105 -0
  110. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js +145 -0
  111. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js +132 -0
  112. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js +268 -0
  113. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js +176 -0
  114. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js +88 -0
  115. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js +111 -0
  116. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.sName.js +27 -0
  117. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js +78 -0
  118. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js +84 -0
  119. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/aoSearchCols.js +112 -0
  120. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/asStripClasses.js +106 -0
  121. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bAutoWidth.js +138 -0
  122. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bFilter.js +40 -0
  123. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js +130 -0
  124. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bInfo.js +40 -0
  125. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bJQueryUI.js +40 -0
  126. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bLengthChange.js +71 -0
  127. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bPaginate.js +55 -0
  128. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bProcessing.js +99 -0
  129. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bServerSide.js +18 -0
  130. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bSort.js +101 -0
  131. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bSortCellsTop.js +77 -0
  132. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/bSortClasses.js +128 -0
  133. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnCookieCallback.js +97 -0
  134. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnCreatedCell.js +151 -0
  135. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnCreatedRow.js +115 -0
  136. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnDeleteRow.js +30 -0
  137. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnDrawCallback.js +80 -0
  138. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnFilter.js +16 -0
  139. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnFooterCallback.js +227 -0
  140. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js +227 -0
  141. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnInfoCallback.js +115 -0
  142. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnInitComplete.js +94 -0
  143. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnRowCallback.js +105 -0
  144. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js +120 -0
  145. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js +236 -0
  146. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js +57 -0
  147. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/iDisplayLength.js +76 -0
  148. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js +80 -0
  149. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js +109 -0
  150. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js +75 -0
  151. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js +73 -0
  152. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js +106 -0
  153. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js +47 -0
  154. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js +66 -0
  155. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js +59 -0
  156. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js +45 -0
  157. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/oSearch.js +101 -0
  158. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/sAjaxSource.js +18 -0
  159. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/sDom.js +319 -0
  160. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/sPaginationType.js +122 -0
  161. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/sScrollXY.js +63 -0
  162. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/1_dom/th_in_body.js +437 -0
  163. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js +285 -0
  164. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/8549--string-sorting-nonstrings.js +47 -0
  165. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/_zero_config.js +440 -0
  166. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aaSorting.js +198 -0
  167. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aaSortingFixed.js +64 -0
  168. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js +71 -0
  169. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js +109 -0
  170. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js +148 -0
  171. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js +110 -0
  172. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js +156 -0
  173. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js +90 -0
  174. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.sClass.js +115 -0
  175. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.sName.js +28 -0
  176. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js +82 -0
  177. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js +87 -0
  178. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/aoSearchCols.js +119 -0
  179. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/asStripClasses.js +100 -0
  180. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bAutoWidth.js +142 -0
  181. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bFilter.js +44 -0
  182. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bInfo.js +44 -0
  183. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bLengthChange.js +75 -0
  184. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bPaginate.js +59 -0
  185. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bProcessing.js +103 -0
  186. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bServerSide.js +20 -0
  187. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bSort.js +99 -0
  188. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/bSortClasses.js +132 -0
  189. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/fnCreatedCell.js +158 -0
  190. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/fnCreatedRow.js +121 -0
  191. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/fnDrawCallback.js +85 -0
  192. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/fnFooterCallback.js +240 -0
  193. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/fnHeaderCallback.js +240 -0
  194. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/fnInitComplete.js +83 -0
  195. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/fnRowCallback.js +112 -0
  196. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/iDisplayLength.js +81 -0
  197. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/js_data_mixed_types.js +392 -0
  198. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js +84 -0
  199. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js +117 -0
  200. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js +79 -0
  201. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js +78 -0
  202. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js +111 -0
  203. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js +49 -0
  204. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js +70 -0
  205. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js +62 -0
  206. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js +48 -0
  207. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/oSearch.js +108 -0
  208. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/sAjaxSource.js +20 -0
  209. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/sDom.js +262 -0
  210. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/2_js/sPaginationType.js +125 -0
  211. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/_zero_config.js +440 -0
  212. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aaSorting.js +198 -0
  213. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js +67 -0
  214. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js +76 -0
  215. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js +109 -0
  216. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js +148 -0
  217. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js +124 -0
  218. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js +156 -0
  219. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js +90 -0
  220. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js +115 -0
  221. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js +28 -0
  222. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js +82 -0
  223. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js +87 -0
  224. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/aoSearchCols.js +119 -0
  225. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/asStripClasses.js +105 -0
  226. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bAutoWidth.js +142 -0
  227. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bFilter.js +44 -0
  228. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bInfo.js +44 -0
  229. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bLengthChange.js +75 -0
  230. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bPaginate.js +59 -0
  231. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bProcessing.js +103 -0
  232. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bServerSide.js +20 -0
  233. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bSort.js +99 -0
  234. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/bSortClasses.js +132 -0
  235. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js +183 -0
  236. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js +142 -0
  237. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js +98 -0
  238. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js +191 -0
  239. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/fnInitComplete.js +100 -0
  240. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/fnRowCallback.js +112 -0
  241. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/fnServerData.js +64 -0
  242. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/iDisplayLength.js +81 -0
  243. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js +84 -0
  244. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js +117 -0
  245. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js +79 -0
  246. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js +78 -0
  247. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js +111 -0
  248. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js +65 -0
  249. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js +49 -0
  250. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js +70 -0
  251. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js +62 -0
  252. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js +48 -0
  253. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/oSearch.js +108 -0
  254. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js +139 -0
  255. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js +139 -0
  256. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/sAjaxSource.js +22 -0
  257. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/sDom.js +262 -0
  258. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/3_ajax/sPaginationType.js +134 -0
  259. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/-iDraw.js +44 -0
  260. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/2440.js +32 -0
  261. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/2569.js +47 -0
  262. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/2600.js +47 -0
  263. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/_zero_config.js +424 -0
  264. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aaSorting.js +212 -0
  265. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js +67 -0
  266. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js +25 -0
  267. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js +112 -0
  268. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js +43 -0
  269. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js +123 -0
  270. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js +162 -0
  271. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js +118 -0
  272. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js +29 -0
  273. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js +85 -0
  274. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js +90 -0
  275. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/aoSearchCols.js +70 -0
  276. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/asStripClasses.js +109 -0
  277. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bAutoWidth.js +145 -0
  278. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bFilter.js +47 -0
  279. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js +168 -0
  280. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bInfo.js +47 -0
  281. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bLengthChange.js +78 -0
  282. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bPaginate.js +62 -0
  283. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bProcessing.js +106 -0
  284. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bServerSide.js +21 -0
  285. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bSort.js +102 -0
  286. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/bSortClasses.js +135 -0
  287. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js +190 -0
  288. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js +148 -0
  289. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js +89 -0
  290. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js +191 -0
  291. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/fnInitComplete.js +89 -0
  292. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/fnRowCallback.js +118 -0
  293. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/iDeferLoading.js +95 -0
  294. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/iDisplayLength.js +85 -0
  295. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js +86 -0
  296. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js +124 -0
  297. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js +82 -0
  298. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js +82 -0
  299. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js +115 -0
  300. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js +51 -0
  301. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js +73 -0
  302. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js +64 -0
  303. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js +58 -0
  304. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/oSearch.js +100 -0
  305. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js +146 -0
  306. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/sAjaxSource.js +23 -0
  307. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/sDom.js +269 -0
  308. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/4_server-side/sPaginationType.js +138 -0
  309. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js +847 -0
  310. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js +961 -0
  311. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js +1075 -0
  312. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js +458 -0
  313. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js +847 -0
  314. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js +961 -0
  315. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js +296 -0
  316. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js +88 -0
  317. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js +83 -0
  318. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js +116 -0
  319. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js +155 -0
  320. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js +131 -0
  321. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js +177 -0
  322. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js +90 -0
  323. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js +122 -0
  324. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js +28 -0
  325. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js +89 -0
  326. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js +87 -0
  327. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js +161 -0
  328. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js +133 -0
  329. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js +163 -0
  330. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bFilter.js +65 -0
  331. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bInfo.js +65 -0
  332. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js +96 -0
  333. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js +80 -0
  334. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js +124 -0
  335. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js +27 -0
  336. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bSort.js +120 -0
  337. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js +153 -0
  338. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js +126 -0
  339. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js +254 -0
  340. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js +135 -0
  341. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js +154 -0
  342. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js +92 -0
  343. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js +109 -0
  344. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js +98 -0
  345. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js +166 -0
  346. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js +100 -0
  347. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js +106 -0
  348. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js +139 -0
  349. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js +63 -0
  350. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js +91 -0
  351. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js +76 -0
  352. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js +62 -0
  353. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/oSearch.js +150 -0
  354. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js +29 -0
  355. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/sDom.js +311 -0
  356. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js +148 -0
  357. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js +403 -0
  358. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js +212 -0
  359. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js +70 -0
  360. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js +79 -0
  361. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js +112 -0
  362. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js +151 -0
  363. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js +127 -0
  364. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js +190 -0
  365. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js +92 -0
  366. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js +118 -0
  367. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js +29 -0
  368. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js +85 -0
  369. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js +90 -0
  370. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js +125 -0
  371. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js +109 -0
  372. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js +145 -0
  373. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js +47 -0
  374. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js +47 -0
  375. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js +78 -0
  376. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js +62 -0
  377. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js +106 -0
  378. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js +21 -0
  379. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bSort.js +102 -0
  380. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js +135 -0
  381. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js +102 -0
  382. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js +200 -0
  383. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js +105 -0
  384. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js +118 -0
  385. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js +68 -0
  386. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js +85 -0
  387. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js +86 -0
  388. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js +124 -0
  389. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js +82 -0
  390. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js +82 -0
  391. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js +115 -0
  392. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js +51 -0
  393. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js +73 -0
  394. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js +64 -0
  395. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js +50 -0
  396. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js +114 -0
  397. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js +140 -0
  398. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js +140 -0
  399. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js +23 -0
  400. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/sDom.js +269 -0
  401. data/lib/classiccms/public/admin/datatables/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js +136 -0
  402. data/lib/classiccms/public/admin/datatables/unit_testing/unit_test.js +409 -0
  403. data/lib/classiccms/public/admin/index.js +5 -0
  404. data/lib/classiccms/scaffold/config.ru +2 -1
  405. data/lib/classiccms/version.rb +1 -1
  406. data/lib/classiccms/views/admin/index.haml +51 -0
  407. metadata +418 -2
@@ -0,0 +1,1276 @@
1
+
2
+
3
+ /**
4
+ * Perform a jQuery selector action on the table's TR elements (from the tbody) and
5
+ * return the resulting jQuery object.
6
+ * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
7
+ * @param {object} [oOpts] Optional parameters for modifying the rows to be included
8
+ * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter
9
+ * criterion ("applied") or all TR elements (i.e. no filter).
10
+ * @param {string} [oOpts.order=current] Order of the TR elements in the processed array.
11
+ * Can be either 'current', whereby the current sorting of the table is used, or
12
+ * 'original' whereby the original order the data was read into the table is used.
13
+ * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
14
+ * ("current") or not ("all"). If 'current' is given, then order is assumed to be
15
+ * 'current' and filter is 'applied', regardless of what they might be given as.
16
+ * @returns {object} jQuery object, filtered by the given selector.
17
+ * @dtopt API
18
+ *
19
+ * @example
20
+ * $(document).ready(function() {
21
+ * var oTable = $('#example').dataTable();
22
+ *
23
+ * // Highlight every second row
24
+ * oTable.$('tr:odd').css('backgroundColor', 'blue');
25
+ * } );
26
+ *
27
+ * @example
28
+ * $(document).ready(function() {
29
+ * var oTable = $('#example').dataTable();
30
+ *
31
+ * // Filter to rows with 'Webkit' in them, add a background colour and then
32
+ * // remove the filter, thus highlighting the 'Webkit' rows only.
33
+ * oTable.fnFilter('Webkit');
34
+ * oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue');
35
+ * oTable.fnFilter('');
36
+ * } );
37
+ */
38
+ this.$ = function ( sSelector, oOpts )
39
+ {
40
+ var i, iLen, a = [], tr;
41
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
42
+ var aoData = oSettings.aoData;
43
+ var aiDisplay = oSettings.aiDisplay;
44
+ var aiDisplayMaster = oSettings.aiDisplayMaster;
45
+
46
+ if ( !oOpts )
47
+ {
48
+ oOpts = {};
49
+ }
50
+
51
+ oOpts = $.extend( {}, {
52
+ "filter": "none", // applied
53
+ "order": "current", // "original"
54
+ "page": "all" // current
55
+ }, oOpts );
56
+
57
+ // Current page implies that order=current and fitler=applied, since it is fairly
58
+ // senseless otherwise
59
+ if ( oOpts.page == 'current' )
60
+ {
61
+ for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ )
62
+ {
63
+ tr = aoData[ aiDisplay[i] ].nTr;
64
+ if ( tr )
65
+ {
66
+ a.push( tr );
67
+ }
68
+ }
69
+ }
70
+ else if ( oOpts.order == "current" && oOpts.filter == "none" )
71
+ {
72
+ for ( i=0, iLen=aiDisplayMaster.length ; i<iLen ; i++ )
73
+ {
74
+ tr = aoData[ aiDisplayMaster[i] ].nTr;
75
+ if ( tr )
76
+ {
77
+ a.push( tr );
78
+ }
79
+ }
80
+ }
81
+ else if ( oOpts.order == "current" && oOpts.filter == "applied" )
82
+ {
83
+ for ( i=0, iLen=aiDisplay.length ; i<iLen ; i++ )
84
+ {
85
+ tr = aoData[ aiDisplay[i] ].nTr;
86
+ if ( tr )
87
+ {
88
+ a.push( tr );
89
+ }
90
+ }
91
+ }
92
+ else if ( oOpts.order == "original" && oOpts.filter == "none" )
93
+ {
94
+ for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
95
+ {
96
+ tr = aoData[ i ].nTr ;
97
+ if ( tr )
98
+ {
99
+ a.push( tr );
100
+ }
101
+ }
102
+ }
103
+ else if ( oOpts.order == "original" && oOpts.filter == "applied" )
104
+ {
105
+ for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
106
+ {
107
+ tr = aoData[ i ].nTr;
108
+ if ( $.inArray( i, aiDisplay ) !== -1 && tr )
109
+ {
110
+ a.push( tr );
111
+ }
112
+ }
113
+ }
114
+ else
115
+ {
116
+ _fnLog( oSettings, 1, "Unknown selection options" );
117
+ }
118
+
119
+ /* We need to filter on the TR elements and also 'find' in their descendants
120
+ * to make the selector act like it would in a full table - so we need
121
+ * to build both results and then combine them together
122
+ */
123
+ var jqA = $(a);
124
+ var jqTRs = jqA.filter( sSelector );
125
+ var jqDescendants = jqA.find( sSelector );
126
+
127
+ return $( [].concat($.makeArray(jqTRs), $.makeArray(jqDescendants)) );
128
+ };
129
+
130
+
131
+ /**
132
+ * Almost identical to $ in operation, but in this case returns the data for the matched
133
+ * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
134
+ * rather than any decendents, so the data can be obtained for the row/cell. If matching
135
+ * rows are found, the data returned is the original data array/object that was used to
136
+ * create the row (or a generated array if from a DOM source).
137
+ *
138
+ * This method is often useful incombination with $ where both functions are given the
139
+ * same parameters and the array indexes will match identically.
140
+ * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
141
+ * @param {object} [oOpts] Optional parameters for modifying the rows to be included
142
+ * @param {string} [oOpts.filter=none] Select elements that meet the current filter
143
+ * criterion ("applied") or all elements (i.e. no filter).
144
+ * @param {string} [oOpts.order=current] Order of the data in the processed array.
145
+ * Can be either 'current', whereby the current sorting of the table is used, or
146
+ * 'original' whereby the original order the data was read into the table is used.
147
+ * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
148
+ * ("current") or not ("all"). If 'current' is given, then order is assumed to be
149
+ * 'current' and filter is 'applied', regardless of what they might be given as.
150
+ * @returns {array} Data for the matched elements. If any elements, as a result of the
151
+ * selector, were not TR, TD or TH elements in the DataTable, they will have a null
152
+ * entry in the array.
153
+ * @dtopt API
154
+ *
155
+ * @example
156
+ * $(document).ready(function() {
157
+ * var oTable = $('#example').dataTable();
158
+ *
159
+ * // Get the data from the first row in the table
160
+ * var data = oTable._('tr:first');
161
+ *
162
+ * // Do something useful with the data
163
+ * alert( "First cell is: "+data[0] );
164
+ * } );
165
+ *
166
+ * @example
167
+ * $(document).ready(function() {
168
+ * var oTable = $('#example').dataTable();
169
+ *
170
+ * // Filter to 'Webkit' and get all data for
171
+ * oTable.fnFilter('Webkit');
172
+ * var data = oTable._('tr', {"filter": "applied"});
173
+ *
174
+ * // Do something with the data
175
+ * alert( data.length+" rows matched the filter" );
176
+ * } );
177
+ */
178
+ this._ = function ( sSelector, oOpts )
179
+ {
180
+ var aOut = [];
181
+ var i, iLen, iIndex;
182
+ var aTrs = this.$( sSelector, oOpts );
183
+
184
+ for ( i=0, iLen=aTrs.length ; i<iLen ; i++ )
185
+ {
186
+ aOut.push( this.fnGetData(aTrs[i]) );
187
+ }
188
+
189
+ return aOut;
190
+ };
191
+
192
+
193
+ /**
194
+ * Add a single new row or multiple rows of data to the table. Please note
195
+ * that this is suitable for client-side processing only - if you are using
196
+ * server-side processing (i.e. "bServerSide": true), then to add data, you
197
+ * must add it to the data source, i.e. the server-side, through an Ajax call.
198
+ * @param {array|object} mData The data to be added to the table. This can be:
199
+ * <ul>
200
+ * <li>1D array of data - add a single row with the data provided</li>
201
+ * <li>2D array of arrays - add multiple rows in a single call</li>
202
+ * <li>object - data object when using <i>mDataProp</i></li>
203
+ * <li>array of objects - multiple data objects when using <i>mDataProp</i></li>
204
+ * </ul>
205
+ * @param {bool} [bRedraw=true] redraw the table or not
206
+ * @returns {array} An array of integers, representing the list of indexes in
207
+ * <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to
208
+ * the table.
209
+ * @dtopt API
210
+ *
211
+ * @example
212
+ * // Global var for counter
213
+ * var giCount = 2;
214
+ *
215
+ * $(document).ready(function() {
216
+ * $('#example').dataTable();
217
+ * } );
218
+ *
219
+ * function fnClickAddRow() {
220
+ * $('#example').dataTable().fnAddData( [
221
+ * giCount+".1",
222
+ * giCount+".2",
223
+ * giCount+".3",
224
+ * giCount+".4" ]
225
+ * );
226
+ *
227
+ * giCount++;
228
+ * }
229
+ */
230
+ this.fnAddData = function( mData, bRedraw )
231
+ {
232
+ if ( mData.length === 0 )
233
+ {
234
+ return [];
235
+ }
236
+
237
+ var aiReturn = [];
238
+ var iTest;
239
+
240
+ /* Find settings from table node */
241
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
242
+
243
+ /* Check if we want to add multiple rows or not */
244
+ if ( typeof mData[0] === "object" && mData[0] !== null )
245
+ {
246
+ for ( var i=0 ; i<mData.length ; i++ )
247
+ {
248
+ iTest = _fnAddData( oSettings, mData[i] );
249
+ if ( iTest == -1 )
250
+ {
251
+ return aiReturn;
252
+ }
253
+ aiReturn.push( iTest );
254
+ }
255
+ }
256
+ else
257
+ {
258
+ iTest = _fnAddData( oSettings, mData );
259
+ if ( iTest == -1 )
260
+ {
261
+ return aiReturn;
262
+ }
263
+ aiReturn.push( iTest );
264
+ }
265
+
266
+ oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
267
+
268
+ if ( bRedraw === undefined || bRedraw )
269
+ {
270
+ _fnReDraw( oSettings );
271
+ }
272
+ return aiReturn;
273
+ };
274
+
275
+
276
+ /**
277
+ * This function will make DataTables recalculate the column sizes, based on the data
278
+ * contained in the table and the sizes applied to the columns (in the DOM, CSS or
279
+ * through the sWidth parameter). This can be useful when the width of the table's
280
+ * parent element changes (for example a window resize).
281
+ * @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to
282
+ * @dtopt API
283
+ *
284
+ * @example
285
+ * $(document).ready(function() {
286
+ * var oTable = $('#example').dataTable( {
287
+ * "sScrollY": "200px",
288
+ * "bPaginate": false
289
+ * } );
290
+ *
291
+ * $(window).bind('resize', function () {
292
+ * oTable.fnAdjustColumnSizing();
293
+ * } );
294
+ * } );
295
+ */
296
+ this.fnAdjustColumnSizing = function ( bRedraw )
297
+ {
298
+ var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]);
299
+ _fnAdjustColumnSizing( oSettings );
300
+
301
+ if ( bRedraw === undefined || bRedraw )
302
+ {
303
+ this.fnDraw( false );
304
+ }
305
+ else if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" )
306
+ {
307
+ /* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
308
+ this.oApi._fnScrollDraw(oSettings);
309
+ }
310
+ };
311
+
312
+
313
+ /**
314
+ * Quickly and simply clear a table
315
+ * @param {bool} [bRedraw=true] redraw the table or not
316
+ * @dtopt API
317
+ *
318
+ * @example
319
+ * $(document).ready(function() {
320
+ * var oTable = $('#example').dataTable();
321
+ *
322
+ * // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
323
+ * oTable.fnClearTable();
324
+ * } );
325
+ */
326
+ this.fnClearTable = function( bRedraw )
327
+ {
328
+ /* Find settings from table node */
329
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
330
+ _fnClearTable( oSettings );
331
+
332
+ if ( bRedraw === undefined || bRedraw )
333
+ {
334
+ _fnDraw( oSettings );
335
+ }
336
+ };
337
+
338
+
339
+ /**
340
+ * The exact opposite of 'opening' a row, this function will close any rows which
341
+ * are currently 'open'.
342
+ * @param {node} nTr the table row to 'close'
343
+ * @returns {int} 0 on success, or 1 if failed (can't find the row)
344
+ * @dtopt API
345
+ *
346
+ * @example
347
+ * $(document).ready(function() {
348
+ * var oTable;
349
+ *
350
+ * // 'open' an information row when a row is clicked on
351
+ * $('#example tbody tr').click( function () {
352
+ * if ( oTable.fnIsOpen(this) ) {
353
+ * oTable.fnClose( this );
354
+ * } else {
355
+ * oTable.fnOpen( this, "Temporary row opened", "info_row" );
356
+ * }
357
+ * } );
358
+ *
359
+ * oTable = $('#example').dataTable();
360
+ * } );
361
+ */
362
+ this.fnClose = function( nTr )
363
+ {
364
+ /* Find settings from table node */
365
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
366
+
367
+ for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
368
+ {
369
+ if ( oSettings.aoOpenRows[i].nParent == nTr )
370
+ {
371
+ var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode;
372
+ if ( nTrParent )
373
+ {
374
+ /* Remove it if it is currently on display */
375
+ nTrParent.removeChild( oSettings.aoOpenRows[i].nTr );
376
+ }
377
+ oSettings.aoOpenRows.splice( i, 1 );
378
+ return 0;
379
+ }
380
+ }
381
+ return 1;
382
+ };
383
+
384
+
385
+ /**
386
+ * Remove a row for the table
387
+ * @param {mixed} mTarget The index of the row from aoData to be deleted, or
388
+ * the TR element you want to delete
389
+ * @param {function|null} [fnCallBack] Callback function
390
+ * @param {bool} [bRedraw=true] Redraw the table or not
391
+ * @returns {array} The row that was deleted
392
+ * @dtopt API
393
+ *
394
+ * @example
395
+ * $(document).ready(function() {
396
+ * var oTable = $('#example').dataTable();
397
+ *
398
+ * // Immediately remove the first row
399
+ * oTable.fnDeleteRow( 0 );
400
+ * } );
401
+ */
402
+ this.fnDeleteRow = function( mTarget, fnCallBack, bRedraw )
403
+ {
404
+ /* Find settings from table node */
405
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
406
+ var i, iLen, iAODataIndex;
407
+
408
+ iAODataIndex = (typeof mTarget === 'object') ?
409
+ _fnNodeToDataIndex(oSettings, mTarget) : mTarget;
410
+
411
+ /* Return the data array from this row */
412
+ var oData = oSettings.aoData.splice( iAODataIndex, 1 );
413
+
414
+ /* Update the _DT_RowIndex parameter */
415
+ for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
416
+ {
417
+ if ( oSettings.aoData[i].nTr !== null )
418
+ {
419
+ oSettings.aoData[i].nTr._DT_RowIndex = i;
420
+ }
421
+ }
422
+
423
+ /* Remove the target row from the search array */
424
+ var iDisplayIndex = $.inArray( iAODataIndex, oSettings.aiDisplay );
425
+ oSettings.asDataSearch.splice( iDisplayIndex, 1 );
426
+
427
+ /* Delete from the display arrays */
428
+ _fnDeleteIndex( oSettings.aiDisplayMaster, iAODataIndex );
429
+ _fnDeleteIndex( oSettings.aiDisplay, iAODataIndex );
430
+
431
+ /* If there is a user callback function - call it */
432
+ if ( typeof fnCallBack === "function" )
433
+ {
434
+ fnCallBack.call( this, oSettings, oData );
435
+ }
436
+
437
+ /* Check for an 'overflow' they case for displaying the table */
438
+ if ( oSettings._iDisplayStart >= oSettings.fnRecordsDisplay() )
439
+ {
440
+ oSettings._iDisplayStart -= oSettings._iDisplayLength;
441
+ if ( oSettings._iDisplayStart < 0 )
442
+ {
443
+ oSettings._iDisplayStart = 0;
444
+ }
445
+ }
446
+
447
+ if ( bRedraw === undefined || bRedraw )
448
+ {
449
+ _fnCalculateEnd( oSettings );
450
+ _fnDraw( oSettings );
451
+ }
452
+
453
+ return oData;
454
+ };
455
+
456
+
457
+ /**
458
+ * Restore the table to it's original state in the DOM by removing all of DataTables
459
+ * enhancements, alterations to the DOM structure of the table and event listeners.
460
+ * @param {boolean} [bRemove=false] Completely remove the table from the DOM
461
+ * @dtopt API
462
+ *
463
+ * @example
464
+ * $(document).ready(function() {
465
+ * // This example is fairly pointless in reality, but shows how fnDestroy can be used
466
+ * var oTable = $('#example').dataTable();
467
+ * oTable.fnDestroy();
468
+ * } );
469
+ */
470
+ this.fnDestroy = function ( bRemove )
471
+ {
472
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
473
+ var nOrig = oSettings.nTableWrapper.parentNode;
474
+ var nBody = oSettings.nTBody;
475
+ var i, iLen;
476
+
477
+ bRemove = (bRemove===undefined) ? false : true;
478
+
479
+ /* Flag to note that the table is currently being destroyed - no action should be taken */
480
+ oSettings.bDestroying = true;
481
+
482
+ /* Fire off the destroy callbacks for plug-ins etc */
483
+ _fnCallbackFire( oSettings, "aoDestroyCallback", "destroy", [oSettings] );
484
+
485
+ /* Restore hidden columns */
486
+ for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
487
+ {
488
+ if ( oSettings.aoColumns[i].bVisible === false )
489
+ {
490
+ this.fnSetColumnVis( i, true );
491
+ }
492
+ }
493
+
494
+ /* Blitz all DT events */
495
+ $(oSettings.nTableWrapper).find('*').andSelf().unbind('.DT');
496
+
497
+ /* If there is an 'empty' indicator row, remove it */
498
+ $('tbody>tr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove();
499
+
500
+ /* When scrolling we had to break the table up - restore it */
501
+ if ( oSettings.nTable != oSettings.nTHead.parentNode )
502
+ {
503
+ $(oSettings.nTable).children('thead').remove();
504
+ oSettings.nTable.appendChild( oSettings.nTHead );
505
+ }
506
+
507
+ if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode )
508
+ {
509
+ $(oSettings.nTable).children('tfoot').remove();
510
+ oSettings.nTable.appendChild( oSettings.nTFoot );
511
+ }
512
+
513
+ /* Remove the DataTables generated nodes, events and classes */
514
+ oSettings.nTable.parentNode.removeChild( oSettings.nTable );
515
+ $(oSettings.nTableWrapper).remove();
516
+
517
+ oSettings.aaSorting = [];
518
+ oSettings.aaSortingFixed = [];
519
+ _fnSortingClasses( oSettings );
520
+
521
+ $(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') );
522
+
523
+ $('th, td', oSettings.nTHead).removeClass( [
524
+ oSettings.oClasses.sSortable,
525
+ oSettings.oClasses.sSortableAsc,
526
+ oSettings.oClasses.sSortableDesc,
527
+ oSettings.oClasses.sSortableNone ].join(' ')
528
+ );
529
+ if ( oSettings.bJUI )
530
+ {
531
+ $('th span.'+oSettings.oClasses.sSortIcon
532
+ + ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove();
533
+
534
+ $('th, td', oSettings.nTHead).each( function () {
535
+ var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this);
536
+ var kids = jqWrapper.contents();
537
+ $(this).append( kids );
538
+ jqWrapper.remove();
539
+ } );
540
+ }
541
+
542
+ /* Add the TR elements back into the table in their original order */
543
+ if ( !bRemove && oSettings.nTableReinsertBefore )
544
+ {
545
+ nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore );
546
+ }
547
+ else if ( !bRemove )
548
+ {
549
+ nOrig.appendChild( oSettings.nTable );
550
+ }
551
+
552
+ for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
553
+ {
554
+ if ( oSettings.aoData[i].nTr !== null )
555
+ {
556
+ nBody.appendChild( oSettings.aoData[i].nTr );
557
+ }
558
+ }
559
+
560
+ /* Restore the width of the original table */
561
+ if ( oSettings.oFeatures.bAutoWidth === true )
562
+ {
563
+ oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth);
564
+ }
565
+
566
+ /* If the were originally odd/even type classes - then we add them back here. Note
567
+ * this is not fool proof (for example if not all rows as odd/even classes - but
568
+ * it's a good effort without getting carried away
569
+ */
570
+ $(nBody).children('tr:even').addClass( oSettings.asDestroyStripes[0] );
571
+ $(nBody).children('tr:odd').addClass( oSettings.asDestroyStripes[1] );
572
+
573
+ /* Remove the settings object from the settings array */
574
+ for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
575
+ {
576
+ if ( DataTable.settings[i] == oSettings )
577
+ {
578
+ DataTable.settings.splice( i, 1 );
579
+ }
580
+ }
581
+
582
+ /* End it all */
583
+ oSettings = null;
584
+ };
585
+
586
+
587
+ /**
588
+ * Redraw the table
589
+ * @param {bool} [bComplete=true] Re-filter and resort (if enabled) the table before the draw.
590
+ * @dtopt API
591
+ *
592
+ * @example
593
+ * $(document).ready(function() {
594
+ * var oTable = $('#example').dataTable();
595
+ *
596
+ * // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
597
+ * oTable.fnDraw();
598
+ * } );
599
+ */
600
+ this.fnDraw = function( bComplete )
601
+ {
602
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
603
+ if ( bComplete === false )
604
+ {
605
+ _fnCalculateEnd( oSettings );
606
+ _fnDraw( oSettings );
607
+ }
608
+ else
609
+ {
610
+ _fnReDraw( oSettings );
611
+ }
612
+ };
613
+
614
+
615
+ /**
616
+ * Filter the input based on data
617
+ * @param {string} sInput String to filter the table on
618
+ * @param {int|null} [iColumn] Column to limit filtering to
619
+ * @param {bool} [bRegex=false] Treat as regular expression or not
620
+ * @param {bool} [bSmart=true] Perform smart filtering or not
621
+ * @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)
622
+ * @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)
623
+ * @dtopt API
624
+ *
625
+ * @example
626
+ * $(document).ready(function() {
627
+ * var oTable = $('#example').dataTable();
628
+ *
629
+ * // Sometime later - filter...
630
+ * oTable.fnFilter( 'test string' );
631
+ * } );
632
+ */
633
+ this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )
634
+ {
635
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
636
+
637
+ if ( !oSettings.oFeatures.bFilter )
638
+ {
639
+ return;
640
+ }
641
+
642
+ if ( bRegex === undefined || bRegex === null )
643
+ {
644
+ bRegex = false;
645
+ }
646
+
647
+ if ( bSmart === undefined || bSmart === null )
648
+ {
649
+ bSmart = true;
650
+ }
651
+
652
+ if ( bShowGlobal === undefined || bShowGlobal === null )
653
+ {
654
+ bShowGlobal = true;
655
+ }
656
+
657
+ if ( bCaseInsensitive === undefined || bCaseInsensitive === null )
658
+ {
659
+ bCaseInsensitive = true;
660
+ }
661
+
662
+ if ( iColumn === undefined || iColumn === null )
663
+ {
664
+ /* Global filter */
665
+ _fnFilterComplete( oSettings, {
666
+ "sSearch":sInput+"",
667
+ "bRegex": bRegex,
668
+ "bSmart": bSmart,
669
+ "bCaseInsensitive": bCaseInsensitive
670
+ }, 1 );
671
+
672
+ if ( bShowGlobal && oSettings.aanFeatures.f )
673
+ {
674
+ var n = oSettings.aanFeatures.f;
675
+ for ( var i=0, iLen=n.length ; i<iLen ; i++ )
676
+ {
677
+ $(n[i]._DT_Input).val( sInput );
678
+ }
679
+ }
680
+ }
681
+ else
682
+ {
683
+ /* Single column filter */
684
+ $.extend( oSettings.aoPreSearchCols[ iColumn ], {
685
+ "sSearch": sInput+"",
686
+ "bRegex": bRegex,
687
+ "bSmart": bSmart,
688
+ "bCaseInsensitive": bCaseInsensitive
689
+ } );
690
+ _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
691
+ }
692
+ };
693
+
694
+
695
+ /**
696
+ * Get the data for the whole table, an individual row or an individual cell based on the
697
+ * provided parameters.
698
+ * @param {int|node} [mRow] A TR row node, TD/TH cell node or an integer. If given as
699
+ * a TR node then the data source for the whole row will be returned. If given as a
700
+ * TD/TH cell node then iCol will be automatically calculated and the data for the
701
+ * cell returned. If given as an integer, then this is treated as the aoData internal
702
+ * data index for the row (see fnGetPosition) and the data for that row used.
703
+ * @param {int} [iCol] Optional column index that you want the data of.
704
+ * @returns {array|object|string} If mRow is undefined, then the data for all rows is
705
+ * returned. If mRow is defined, just data for that row, and is iCol is
706
+ * defined, only data for the designated cell is returned.
707
+ * @dtopt API
708
+ *
709
+ * @example
710
+ * // Row data
711
+ * $(document).ready(function() {
712
+ * oTable = $('#example').dataTable();
713
+ *
714
+ * oTable.$('tr').click( function () {
715
+ * var data = oTable.fnGetData( this );
716
+ * // ... do something with the array / object of data for the row
717
+ * } );
718
+ * } );
719
+ *
720
+ * @example
721
+ * // Individual cell data
722
+ * $(document).ready(function() {
723
+ * oTable = $('#example').dataTable();
724
+ *
725
+ * oTable.$('td').click( function () {
726
+ * var sData = oTable.fnGetData( this );
727
+ * alert( 'The cell clicked on had the value of '+sData );
728
+ * } );
729
+ * } );
730
+ */
731
+ this.fnGetData = function( mRow, iCol )
732
+ {
733
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
734
+
735
+ if ( mRow !== undefined )
736
+ {
737
+ var iRow = mRow;
738
+ if ( typeof mRow === 'object' )
739
+ {
740
+ var sNode = mRow.nodeName.toLowerCase();
741
+ if (sNode === "tr" )
742
+ {
743
+ iRow = _fnNodeToDataIndex(oSettings, mRow);
744
+ }
745
+ else if ( sNode === "td" )
746
+ {
747
+ iRow = _fnNodeToDataIndex(oSettings, mRow.parentNode);
748
+ iCol = _fnNodeToColumnIndex( oSettings, iRow, mRow );
749
+ }
750
+ }
751
+
752
+ if ( iCol !== undefined )
753
+ {
754
+ return _fnGetCellData( oSettings, iRow, iCol, '' );
755
+ }
756
+ return (oSettings.aoData[iRow]!==undefined) ?
757
+ oSettings.aoData[iRow]._aData : null;
758
+ }
759
+ return _fnGetDataMaster( oSettings );
760
+ };
761
+
762
+
763
+ /**
764
+ * Get an array of the TR nodes that are used in the table's body. Note that you will
765
+ * typically want to use the '$' API method in preference to this as it is more
766
+ * flexible.
767
+ * @param {int} [iRow] Optional row index for the TR element you want
768
+ * @returns {array|node} If iRow is undefined, returns an array of all TR elements
769
+ * in the table's body, or iRow is defined, just the TR element requested.
770
+ * @dtopt API
771
+ *
772
+ * @example
773
+ * $(document).ready(function() {
774
+ * var oTable = $('#example').dataTable();
775
+ *
776
+ * // Get the nodes from the table
777
+ * var nNodes = oTable.fnGetNodes( );
778
+ * } );
779
+ */
780
+ this.fnGetNodes = function( iRow )
781
+ {
782
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
783
+
784
+ if ( iRow !== undefined ) {
785
+ return (oSettings.aoData[iRow]!==undefined) ?
786
+ oSettings.aoData[iRow].nTr : null;
787
+ }
788
+ return _fnGetTrNodes( oSettings );
789
+ };
790
+
791
+
792
+ /**
793
+ * Get the array indexes of a particular cell from it's DOM element
794
+ * and column index including hidden columns
795
+ * @param {node} nNode this can either be a TR, TD or TH in the table's body
796
+ * @returns {int} If nNode is given as a TR, then a single index is returned, or
797
+ * if given as a cell, an array of [row index, column index (visible)] is given.
798
+ * @dtopt API
799
+ *
800
+ * @example
801
+ * $(document).ready(function() {
802
+ * $('#example tbody td').click( function () {
803
+ * // Get the position of the current data from the node
804
+ * var aPos = oTable.fnGetPosition( this );
805
+ *
806
+ * // Get the data array for this row
807
+ * var aData = oTable.fnGetData( aPos[0] );
808
+ *
809
+ * // Update the data array and return the value
810
+ * aData[ aPos[1] ] = 'clicked';
811
+ * this.innerHTML = 'clicked';
812
+ * } );
813
+ *
814
+ * // Init DataTables
815
+ * oTable = $('#example').dataTable();
816
+ * } );
817
+ */
818
+ this.fnGetPosition = function( nNode )
819
+ {
820
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
821
+ var sNodeName = nNode.nodeName.toUpperCase();
822
+
823
+ if ( sNodeName == "TR" )
824
+ {
825
+ return _fnNodeToDataIndex(oSettings, nNode);
826
+ }
827
+ else if ( sNodeName == "TD" || sNodeName == "TH" )
828
+ {
829
+ var iDataIndex = _fnNodeToDataIndex( oSettings, nNode.parentNode );
830
+ var iColumnIndex = _fnNodeToColumnIndex( oSettings, iDataIndex, nNode );
831
+ return [ iDataIndex, _fnColumnIndexToVisible(oSettings, iColumnIndex ), iColumnIndex ];
832
+ }
833
+ return null;
834
+ };
835
+
836
+
837
+ /**
838
+ * Check to see if a row is 'open' or not.
839
+ * @param {node} nTr the table row to check
840
+ * @returns {boolean} true if the row is currently open, false otherwise
841
+ * @dtopt API
842
+ *
843
+ * @example
844
+ * $(document).ready(function() {
845
+ * var oTable;
846
+ *
847
+ * // 'open' an information row when a row is clicked on
848
+ * $('#example tbody tr').click( function () {
849
+ * if ( oTable.fnIsOpen(this) ) {
850
+ * oTable.fnClose( this );
851
+ * } else {
852
+ * oTable.fnOpen( this, "Temporary row opened", "info_row" );
853
+ * }
854
+ * } );
855
+ *
856
+ * oTable = $('#example').dataTable();
857
+ * } );
858
+ */
859
+ this.fnIsOpen = function( nTr )
860
+ {
861
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
862
+ var aoOpenRows = oSettings.aoOpenRows;
863
+
864
+ for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ )
865
+ {
866
+ if ( oSettings.aoOpenRows[i].nParent == nTr )
867
+ {
868
+ return true;
869
+ }
870
+ }
871
+ return false;
872
+ };
873
+
874
+
875
+ /**
876
+ * This function will place a new row directly after a row which is currently
877
+ * on display on the page, with the HTML contents that is passed into the
878
+ * function. This can be used, for example, to ask for confirmation that a
879
+ * particular record should be deleted.
880
+ * @param {node} nTr The table row to 'open'
881
+ * @param {string|node|jQuery} mHtml The HTML to put into the row
882
+ * @param {string} sClass Class to give the new TD cell
883
+ * @returns {node} The row opened. Note that if the table row passed in as the
884
+ * first parameter, is not found in the table, this method will silently
885
+ * return.
886
+ * @dtopt API
887
+ *
888
+ * @example
889
+ * $(document).ready(function() {
890
+ * var oTable;
891
+ *
892
+ * // 'open' an information row when a row is clicked on
893
+ * $('#example tbody tr').click( function () {
894
+ * if ( oTable.fnIsOpen(this) ) {
895
+ * oTable.fnClose( this );
896
+ * } else {
897
+ * oTable.fnOpen( this, "Temporary row opened", "info_row" );
898
+ * }
899
+ * } );
900
+ *
901
+ * oTable = $('#example').dataTable();
902
+ * } );
903
+ */
904
+ this.fnOpen = function( nTr, mHtml, sClass )
905
+ {
906
+ /* Find settings from table node */
907
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
908
+
909
+ /* Check that the row given is in the table */
910
+ var nTableRows = _fnGetTrNodes( oSettings );
911
+ if ( $.inArray(nTr, nTableRows) === -1 )
912
+ {
913
+ return;
914
+ }
915
+
916
+ /* the old open one if there is one */
917
+ this.fnClose( nTr );
918
+
919
+ var nNewRow = document.createElement("tr");
920
+ var nNewCell = document.createElement("td");
921
+ nNewRow.appendChild( nNewCell );
922
+ nNewCell.className = sClass;
923
+ nNewCell.colSpan = _fnVisbleColumns( oSettings );
924
+
925
+ if (typeof mHtml === "string")
926
+ {
927
+ nNewCell.innerHTML = mHtml;
928
+ }
929
+ else
930
+ {
931
+ $(nNewCell).html( mHtml );
932
+ }
933
+
934
+ /* If the nTr isn't on the page at the moment - then we don't insert at the moment */
935
+ var nTrs = $('tr', oSettings.nTBody);
936
+ if ( $.inArray(nTr, nTrs) != -1 )
937
+ {
938
+ $(nNewRow).insertAfter(nTr);
939
+ }
940
+
941
+ oSettings.aoOpenRows.push( {
942
+ "nTr": nNewRow,
943
+ "nParent": nTr
944
+ } );
945
+
946
+ return nNewRow;
947
+ };
948
+
949
+
950
+ /**
951
+ * Change the pagination - provides the internal logic for pagination in a simple API
952
+ * function. With this function you can have a DataTables table go to the next,
953
+ * previous, first or last pages.
954
+ * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
955
+ * or page number to jump to (integer), note that page 0 is the first page.
956
+ * @param {bool} [bRedraw=true] Redraw the table or not
957
+ * @dtopt API
958
+ *
959
+ * @example
960
+ * $(document).ready(function() {
961
+ * var oTable = $('#example').dataTable();
962
+ * oTable.fnPageChange( 'next' );
963
+ * } );
964
+ */
965
+ this.fnPageChange = function ( mAction, bRedraw )
966
+ {
967
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
968
+ _fnPageChange( oSettings, mAction );
969
+ _fnCalculateEnd( oSettings );
970
+
971
+ if ( bRedraw === undefined || bRedraw )
972
+ {
973
+ _fnDraw( oSettings );
974
+ }
975
+ };
976
+
977
+
978
+ /**
979
+ * Show a particular column
980
+ * @param {int} iCol The column whose display should be changed
981
+ * @param {bool} bShow Show (true) or hide (false) the column
982
+ * @param {bool} [bRedraw=true] Redraw the table or not
983
+ * @dtopt API
984
+ *
985
+ * @example
986
+ * $(document).ready(function() {
987
+ * var oTable = $('#example').dataTable();
988
+ *
989
+ * // Hide the second column after initialisation
990
+ * oTable.fnSetColumnVis( 1, false );
991
+ * } );
992
+ */
993
+ this.fnSetColumnVis = function ( iCol, bShow, bRedraw )
994
+ {
995
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
996
+ var i, iLen;
997
+ var aoColumns = oSettings.aoColumns;
998
+ var aoData = oSettings.aoData;
999
+ var nTd, bAppend, iBefore;
1000
+
1001
+ /* No point in doing anything if we are requesting what is already true */
1002
+ if ( aoColumns[iCol].bVisible == bShow )
1003
+ {
1004
+ return;
1005
+ }
1006
+
1007
+ /* Show the column */
1008
+ if ( bShow )
1009
+ {
1010
+ var iInsert = 0;
1011
+ for ( i=0 ; i<iCol ; i++ )
1012
+ {
1013
+ if ( aoColumns[i].bVisible )
1014
+ {
1015
+ iInsert++;
1016
+ }
1017
+ }
1018
+
1019
+ /* Need to decide if we should use appendChild or insertBefore */
1020
+ bAppend = (iInsert >= _fnVisbleColumns( oSettings ));
1021
+
1022
+ /* Which coloumn should we be inserting before? */
1023
+ if ( !bAppend )
1024
+ {
1025
+ for ( i=iCol ; i<aoColumns.length ; i++ )
1026
+ {
1027
+ if ( aoColumns[i].bVisible )
1028
+ {
1029
+ iBefore = i;
1030
+ break;
1031
+ }
1032
+ }
1033
+ }
1034
+
1035
+ for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
1036
+ {
1037
+ if ( aoData[i].nTr !== null )
1038
+ {
1039
+ if ( bAppend )
1040
+ {
1041
+ aoData[i].nTr.appendChild(
1042
+ aoData[i]._anHidden[iCol]
1043
+ );
1044
+ }
1045
+ else
1046
+ {
1047
+ aoData[i].nTr.insertBefore(
1048
+ aoData[i]._anHidden[iCol],
1049
+ _fnGetTdNodes( oSettings, i )[iBefore] );
1050
+ }
1051
+ }
1052
+ }
1053
+ }
1054
+ else
1055
+ {
1056
+ /* Remove a column from display */
1057
+ for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
1058
+ {
1059
+ if ( aoData[i].nTr !== null )
1060
+ {
1061
+ nTd = _fnGetTdNodes( oSettings, i )[iCol];
1062
+ aoData[i]._anHidden[iCol] = nTd;
1063
+ nTd.parentNode.removeChild( nTd );
1064
+ }
1065
+ }
1066
+ }
1067
+
1068
+ /* Clear to set the visible flag */
1069
+ aoColumns[iCol].bVisible = bShow;
1070
+
1071
+ /* Redraw the header and footer based on the new column visibility */
1072
+ _fnDrawHead( oSettings, oSettings.aoHeader );
1073
+ if ( oSettings.nTFoot )
1074
+ {
1075
+ _fnDrawHead( oSettings, oSettings.aoFooter );
1076
+ }
1077
+
1078
+ /* If there are any 'open' rows, then we need to alter the colspan for this col change */
1079
+ for ( i=0, iLen=oSettings.aoOpenRows.length ; i<iLen ; i++ )
1080
+ {
1081
+ oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns( oSettings );
1082
+ }
1083
+
1084
+ /* Do a redraw incase anything depending on the table columns needs it
1085
+ * (built-in: scrolling)
1086
+ */
1087
+ if ( bRedraw === undefined || bRedraw )
1088
+ {
1089
+ _fnAdjustColumnSizing( oSettings );
1090
+ _fnDraw( oSettings );
1091
+ }
1092
+
1093
+ _fnSaveState( oSettings );
1094
+ };
1095
+
1096
+
1097
+ /**
1098
+ * Get the settings for a particular table for external manipulation
1099
+ * @returns {object} DataTables settings object. See
1100
+ * {@link DataTable.models.oSettings}
1101
+ * @dtopt API
1102
+ *
1103
+ * @example
1104
+ * $(document).ready(function() {
1105
+ * var oTable = $('#example').dataTable();
1106
+ * var oSettings = oTable.fnSettings();
1107
+ *
1108
+ * // Show an example parameter from the settings
1109
+ * alert( oSettings._iDisplayStart );
1110
+ * } );
1111
+ */
1112
+ this.fnSettings = function()
1113
+ {
1114
+ return _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
1115
+ };
1116
+
1117
+
1118
+ /**
1119
+ * Sort the table by a particular column
1120
+ * @param {int} iCol the data index to sort on. Note that this will not match the
1121
+ * 'display index' if you have hidden data entries
1122
+ * @dtopt API
1123
+ *
1124
+ * @example
1125
+ * $(document).ready(function() {
1126
+ * var oTable = $('#example').dataTable();
1127
+ *
1128
+ * // Sort immediately with columns 0 and 1
1129
+ * oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
1130
+ * } );
1131
+ */
1132
+ this.fnSort = function( aaSort )
1133
+ {
1134
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
1135
+ oSettings.aaSorting = aaSort;
1136
+ _fnSort( oSettings );
1137
+ };
1138
+
1139
+
1140
+ /**
1141
+ * Attach a sort listener to an element for a given column
1142
+ * @param {node} nNode the element to attach the sort listener to
1143
+ * @param {int} iColumn the column that a click on this node will sort on
1144
+ * @param {function} [fnCallback] callback function when sort is run
1145
+ * @dtopt API
1146
+ *
1147
+ * @example
1148
+ * $(document).ready(function() {
1149
+ * var oTable = $('#example').dataTable();
1150
+ *
1151
+ * // Sort on column 1, when 'sorter' is clicked on
1152
+ * oTable.fnSortListener( document.getElementById('sorter'), 1 );
1153
+ * } );
1154
+ */
1155
+ this.fnSortListener = function( nNode, iColumn, fnCallback )
1156
+ {
1157
+ _fnSortAttachListener( _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ), nNode, iColumn,
1158
+ fnCallback );
1159
+ };
1160
+
1161
+
1162
+ /**
1163
+ * Update a table cell or row - this method will accept either a single value to
1164
+ * update the cell with, an array of values with one element for each column or
1165
+ * an object in the same format as the original data source. The function is
1166
+ * self-referencing in order to make the multi column updates easier.
1167
+ * @param {object|array|string} mData Data to update the cell/row with
1168
+ * @param {node|int} mRow TR element you want to update or the aoData index
1169
+ * @param {int} [iColumn] The column to update (not used of mData is an array or object)
1170
+ * @param {bool} [bRedraw=true] Redraw the table or not
1171
+ * @param {bool} [bAction=true] Perform predraw actions or not
1172
+ * @returns {int} 0 on success, 1 on error
1173
+ * @dtopt API
1174
+ *
1175
+ * @example
1176
+ * $(document).ready(function() {
1177
+ * var oTable = $('#example').dataTable();
1178
+ * oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
1179
+ * oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row
1180
+ * } );
1181
+ */
1182
+ this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
1183
+ {
1184
+ var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
1185
+ var i, iLen, sDisplay;
1186
+ var iRow = (typeof mRow === 'object') ?
1187
+ _fnNodeToDataIndex(oSettings, mRow) : mRow;
1188
+
1189
+ if ( oSettings.__fnUpdateDeep === undefined && $.isArray(mData) && typeof mData === 'object' )
1190
+ {
1191
+ /* Array update - update the whole row */
1192
+ oSettings.aoData[iRow]._aData = mData.slice();
1193
+
1194
+ /* Flag to the function that we are recursing */
1195
+ oSettings.__fnUpdateDeep = true;
1196
+ for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
1197
+ {
1198
+ this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
1199
+ }
1200
+ oSettings.__fnUpdateDeep = undefined;
1201
+ }
1202
+ else if ( oSettings.__fnUpdateDeep === undefined && mData !== null && typeof mData === 'object' )
1203
+ {
1204
+ /* Object update - update the whole row - assume the developer gets the object right */
1205
+ oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
1206
+
1207
+ oSettings.__fnUpdateDeep = true;
1208
+ for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
1209
+ {
1210
+ this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
1211
+ }
1212
+ oSettings.__fnUpdateDeep = undefined;
1213
+ }
1214
+ else
1215
+ {
1216
+ /* Individual cell update */
1217
+ _fnSetCellData( oSettings, iRow, iColumn, mData );
1218
+ sDisplay = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
1219
+
1220
+ var oCol = oSettings.aoColumns[iColumn];
1221
+ if ( oCol.fnRender !== null )
1222
+ {
1223
+ sDisplay = _fnRender( oSettings, iRow, iColumn );
1224
+ if ( oCol.bUseRendered )
1225
+ {
1226
+ _fnSetCellData( oSettings, iRow, iColumn, sDisplay );
1227
+ }
1228
+ }
1229
+
1230
+ if ( oSettings.aoData[iRow].nTr !== null )
1231
+ {
1232
+ /* Do the actual HTML update */
1233
+ _fnGetTdNodes( oSettings, iRow )[iColumn].innerHTML = sDisplay;
1234
+ }
1235
+ }
1236
+
1237
+ /* Modify the search index for this row (strictly this is likely not needed, since fnReDraw
1238
+ * will rebuild the search array - however, the redraw might be disabled by the user)
1239
+ */
1240
+ var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay );
1241
+ oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow( oSettings,
1242
+ _fnGetRowData( oSettings, iRow, 'filter' ) );
1243
+
1244
+ /* Perform pre-draw actions */
1245
+ if ( bAction === undefined || bAction )
1246
+ {
1247
+ _fnAdjustColumnSizing( oSettings );
1248
+ }
1249
+
1250
+ /* Redraw the table */
1251
+ if ( bRedraw === undefined || bRedraw )
1252
+ {
1253
+ _fnReDraw( oSettings );
1254
+ }
1255
+ return 0;
1256
+ };
1257
+
1258
+
1259
+ /**
1260
+ * Provide a common method for plug-ins to check the version of DataTables being used, in order
1261
+ * to ensure compatibility.
1262
+ * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
1263
+ * formats "X" and "X.Y" are also acceptable.
1264
+ * @returns {boolean} true if this version of DataTables is greater or equal to the required
1265
+ * version, or false if this version of DataTales is not suitable
1266
+ * @method
1267
+ * @dtopt API
1268
+ *
1269
+ * @example
1270
+ * $(document).ready(function() {
1271
+ * var oTable = $('#example').dataTable();
1272
+ * alert( oTable.fnVersionCheck( '1.9.0' ) );
1273
+ * } );
1274
+ */
1275
+ this.fnVersionCheck = DataTable.ext.fnVersionCheck;
1276
+