the_sortable_tree 2.3.3 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. data/README.md +10 -4
  2. data/app/assets/javascripts/expandable_tree/hashchange.js.coffee +33 -0
  3. data/app/assets/javascripts/expandable_tree/initializer.js.coffee +76 -22
  4. data/app/assets/javascripts/expandable_tree/jquery.cookie.coffee +68 -0
  5. data/app/assets/javascripts/expandable_tree/restorable.js.coffee +125 -0
  6. data/app/assets/javascripts/jquery.ui.nestedSortable.js +2 -0
  7. data/app/assets/javascripts/sortable_tree/initializer.js.coffee +40 -34
  8. data/app/assets/stylesheets/expandable_tree.css.scss +8 -2
  9. data/app/assets/stylesheets/sortable_tree.css.scss +11 -9
  10. data/app/controllers/the_sortable_tree_controller.rb +12 -11
  11. data/app/helpers/render_expandable_tree_helper.rb +1 -3
  12. data/app/helpers/render_sortable_tree_helper.rb +1 -2
  13. data/lib/the_sortable_tree/version.rb +1 -1
  14. data/spec/{the_sortable_tree_app → dummy_app}/Gemfile +1 -1
  15. data/spec/dummy_app/Gemfile.lock +134 -0
  16. data/spec/dummy_app/README.md +33 -0
  17. data/spec/{the_sortable_tree_app → dummy_app}/Rakefile +0 -0
  18. data/spec/{the_sortable_tree_app → dummy_app}/app/assets/images/rails.png +0 -0
  19. data/spec/{the_sortable_tree_app → dummy_app}/app/assets/javascripts/application.js +5 -1
  20. data/spec/{the_sortable_tree_app → dummy_app}/app/assets/stylesheets/application.css +1 -1
  21. data/spec/{the_sortable_tree_app → dummy_app}/app/controllers/admin/pages_controller.rb +0 -0
  22. data/spec/{the_sortable_tree_app → dummy_app}/app/controllers/application_controller.rb +0 -0
  23. data/spec/{the_sortable_tree_app → dummy_app}/app/controllers/article_categories_controller.rb +0 -0
  24. data/spec/{the_sortable_tree_app → dummy_app}/app/controllers/inventory/categories_controller.rb +0 -0
  25. data/spec/{the_sortable_tree_app → dummy_app}/app/controllers/pages_controller.rb +1 -1
  26. data/spec/{the_sortable_tree_app → dummy_app}/app/controllers/welcome_controller.rb +0 -0
  27. data/spec/{the_sortable_tree_app → dummy_app}/app/models/admin/page.rb +0 -0
  28. data/spec/{the_sortable_tree_app → dummy_app}/app/models/admin.rb +0 -0
  29. data/spec/{the_sortable_tree_app → dummy_app}/app/models/article_category.rb +0 -0
  30. data/spec/{the_sortable_tree_app → dummy_app}/app/models/inventory/category.rb +0 -0
  31. data/spec/{the_sortable_tree_app → dummy_app}/app/models/inventory.rb +0 -0
  32. data/spec/{the_sortable_tree_app → dummy_app}/app/models/page.rb +0 -0
  33. data/spec/{the_sortable_tree_app → dummy_app}/app/views/admin/pages/index.html.haml +0 -0
  34. data/spec/{the_sortable_tree_app → dummy_app}/app/views/admin/pages/manage.html.haml +0 -0
  35. data/spec/{the_sortable_tree_app → dummy_app}/app/views/admin/pages/namespaced_link.html.haml +0 -0
  36. data/spec/{the_sortable_tree_app → dummy_app}/app/views/admin/pages/nested_options.html.haml +0 -0
  37. data/spec/{the_sortable_tree_app → dummy_app}/app/views/admin/pages/node_manage.html.haml +0 -0
  38. data/spec/{the_sortable_tree_app → dummy_app}/app/views/article_categories/index.html.haml +0 -0
  39. data/spec/{the_sortable_tree_app → dummy_app}/app/views/article_categories/manage.html.haml +0 -0
  40. data/spec/{the_sortable_tree_app → dummy_app}/app/views/inventory/categories/index.html.haml +0 -0
  41. data/spec/{the_sortable_tree_app → dummy_app}/app/views/inventory/categories/manage.html.haml +0 -0
  42. data/spec/{the_sortable_tree_app → dummy_app}/app/views/layouts/application.html.erb +0 -0
  43. data/spec/dummy_app/app/views/pages/expand.html.haml +8 -0
  44. data/spec/{the_sortable_tree_app/app/views/pages/expand_children.html.haml → dummy_app/app/views/pages/expand_node.html.haml} +0 -0
  45. data/spec/{the_sortable_tree_app → dummy_app}/app/views/pages/index.html.haml +0 -0
  46. data/spec/{the_sortable_tree_app → dummy_app}/app/views/pages/manage.html.haml +0 -0
  47. data/spec/{the_sortable_tree_app → dummy_app}/app/views/pages/nested_options.html.haml +0 -0
  48. data/spec/{the_sortable_tree_app → dummy_app}/app/views/welcome/index.html.haml +1 -1
  49. data/spec/{the_sortable_tree_app → dummy_app}/config/application.rb +0 -0
  50. data/spec/{the_sortable_tree_app → dummy_app}/config/boot.rb +0 -0
  51. data/spec/dummy_app/config/database.yml +3 -0
  52. data/spec/dummy_app/config/database.yml.example +3 -0
  53. data/spec/{the_sortable_tree_app → dummy_app}/config/environment.rb +0 -0
  54. data/spec/{the_sortable_tree_app → dummy_app}/config/environments/development.rb +0 -0
  55. data/spec/{the_sortable_tree_app → dummy_app}/config/environments/production.rb +0 -0
  56. data/spec/{the_sortable_tree_app → dummy_app}/config/environments/test.rb +0 -0
  57. data/spec/{the_sortable_tree_app → dummy_app}/config/initializers/backtrace_silencers.rb +0 -0
  58. data/spec/{the_sortable_tree_app → dummy_app}/config/initializers/inflections.rb +0 -0
  59. data/spec/{the_sortable_tree_app → dummy_app}/config/initializers/mime_types.rb +0 -0
  60. data/spec/{the_sortable_tree_app → dummy_app}/config/initializers/secret_token.rb +0 -0
  61. data/spec/{the_sortable_tree_app → dummy_app}/config/initializers/session_store.rb +0 -0
  62. data/spec/{the_sortable_tree_app → dummy_app}/config/initializers/wrap_parameters.rb +0 -0
  63. data/spec/{the_sortable_tree_app → dummy_app}/config/locales/en.yml +0 -0
  64. data/spec/{the_sortable_tree_app → dummy_app}/config/routes.rb +7 -2
  65. data/spec/{the_sortable_tree_app → dummy_app}/config.ru +0 -0
  66. data/spec/dummy_app/db/development.db +0 -0
  67. data/spec/{the_sortable_tree_app → dummy_app}/db/migrate/20120211053457_create_pages.rb +0 -0
  68. data/spec/{the_sortable_tree_app → dummy_app}/db/migrate/20120503173258_create_article_categories.rb +0 -0
  69. data/spec/{the_sortable_tree_app → dummy_app}/db/migrate/20120508093823_create_inventory_categories.rb +0 -0
  70. data/spec/{the_sortable_tree_app → dummy_app}/db/migrate/20130128160328_create_admin_pages.rb +0 -0
  71. data/spec/{the_sortable_tree_app → dummy_app}/db/schema.rb +14 -14
  72. data/spec/{the_sortable_tree_app → dummy_app}/db/seeds.rb +0 -0
  73. data/spec/{the_sortable_tree_app → dummy_app}/doc/README_FOR_APP +0 -0
  74. data/spec/dummy_app/log/development.log +32859 -0
  75. data/spec/{the_sortable_tree_app → dummy_app}/public/404.html +0 -0
  76. data/spec/{the_sortable_tree_app → dummy_app}/public/422.html +0 -0
  77. data/spec/{the_sortable_tree_app → dummy_app}/public/500.html +0 -0
  78. data/spec/{the_sortable_tree_app → dummy_app}/public/favicon.ico +0 -0
  79. data/spec/{the_sortable_tree_app → dummy_app}/public/robots.txt +0 -0
  80. data/spec/{the_sortable_tree_app → dummy_app}/script/rails +0 -0
  81. data/spec/{the_sortable_tree_app → dummy_app}/test/fixtures/admin/pages.yml +0 -0
  82. data/spec/{the_sortable_tree_app → dummy_app}/test/fixtures/article_categories.yml +0 -0
  83. data/spec/{the_sortable_tree_app → dummy_app}/test/fixtures/comments.yml +0 -0
  84. data/spec/{the_sortable_tree_app → dummy_app}/test/fixtures/inventory/categories.yml +0 -0
  85. data/spec/{the_sortable_tree_app → dummy_app}/test/functional/inventory/category_controller_test.rb +0 -0
  86. data/spec/{the_sortable_tree_app → dummy_app}/test/performance/browsing_test.rb +0 -0
  87. data/spec/{the_sortable_tree_app → dummy_app}/test/test_helper.rb +0 -0
  88. data/spec/{the_sortable_tree_app → dummy_app}/test/unit/admin/page_test.rb +0 -0
  89. data/spec/{the_sortable_tree_app → dummy_app}/test/unit/article_category_test.rb +0 -0
  90. data/spec/{the_sortable_tree_app → dummy_app}/test/unit/comment_test.rb +0 -0
  91. data/spec/{the_sortable_tree_app → dummy_app}/test/unit/helpers/inventory/category_helper_test.rb +0 -0
  92. data/spec/{the_sortable_tree_app → dummy_app}/test/unit/inventory/category_test.rb +0 -0
  93. data/spec/dummy_app/tmp/cache/assets/development/sass/7078a6e7d50d4f9d68fa0d4816aa48e19cc24fe5/expandable_tree.css.scssc +0 -0
  94. data/spec/{the_sortable_tree_app/tmp/cache/sass/2255c97fc63f030a9ce238cccb311b4b1e966328 → dummy_app/tmp/cache/assets/development/sass/7078a6e7d50d4f9d68fa0d4816aa48e19cc24fe5}/nested_options.css.scssc +0 -0
  95. data/spec/dummy_app/tmp/cache/assets/development/sass/7078a6e7d50d4f9d68fa0d4816aa48e19cc24fe5/sortable_tree.css.scssc +0 -0
  96. data/spec/{the_sortable_tree_app/tmp/cache/sass/2255c97fc63f030a9ce238cccb311b4b1e966328 → dummy_app/tmp/cache/assets/development/sass/7078a6e7d50d4f9d68fa0d4816aa48e19cc24fe5}/tree.css.scssc +0 -0
  97. data/spec/dummy_app/tmp/cache/assets/development/sprockets/05efd66e23c98c77afeb4a7bcb45f8bf +0 -0
  98. data/spec/{the_sortable_tree_app/tmp/cache/assets/C6B/530/sprockets%2F54e7598ead46f414a5474993750992a6 → dummy_app/tmp/cache/assets/development/sprockets/075f155915b68deac9b84d36e9e78e12} +0 -0
  99. data/spec/dummy_app/tmp/cache/assets/development/sprockets/1142f73fad150a752112a732b733591b +0 -0
  100. data/spec/dummy_app/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  101. data/spec/{the_sortable_tree_app/tmp/cache/assets/D48/300/sprockets%2F392aba9fd44f378041913c9f0edef429 → dummy_app/tmp/cache/assets/development/sprockets/17329c76961a36ab755c53272d334b99} +0 -0
  102. data/spec/dummy_app/tmp/cache/assets/development/sprockets/1c62fe9e8cce00645d6440af4ac61ce0 +0 -0
  103. data/spec/dummy_app/tmp/cache/assets/development/sprockets/1d6831069f2ba3e6b5a700231417128f +0 -0
  104. data/spec/{the_sortable_tree_app/tmp/cache/assets/D0F/540/sprockets%2Ffdff04173da67c582219de85c136320f → dummy_app/tmp/cache/assets/development/sprockets/206ce2975a6d174ac740cab27481be7c} +0 -0
  105. data/spec/{the_sortable_tree_app/tmp/cache/assets/D07/110/sprockets%2F4a6961a0c735dbbba76f35e606f34027 → dummy_app/tmp/cache/assets/development/sprockets/22e25b35a790c2b5fabc74f93b74078d} +0 -0
  106. data/spec/{the_sortable_tree_app/tmp/cache/assets/DF1/8B0/sprockets%2F2f0d2d00353acefe637b5338a9abfdfb → dummy_app/tmp/cache/assets/development/sprockets/2d9f90ebaaf77755df5bce7315fbab07} +0 -0
  107. data/spec/{the_sortable_tree_app/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 → dummy_app/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af} +0 -0
  108. data/spec/dummy_app/tmp/cache/assets/development/sprockets/33a50ea83c8c0b953c9462be9ac2e5ae +0 -0
  109. data/spec/dummy_app/tmp/cache/assets/development/sprockets/34efe139b4a7055695595585160a0903 +0 -0
  110. data/spec/dummy_app/tmp/cache/assets/development/sprockets/351a8f38490961801e253ef169b6298e +0 -0
  111. data/spec/dummy_app/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  112. data/spec/dummy_app/tmp/cache/assets/development/sprockets/3f8d6db1d41d5620f91eb915cb1212c5 +0 -0
  113. data/spec/dummy_app/tmp/cache/assets/development/sprockets/41055928923856ad1bf8548fc57b65b0 +0 -0
  114. data/spec/{the_sortable_tree_app/tmp/cache/assets/CB1/D00/sprockets%2F90a69052f559169cc0338bb9e7b2071c → dummy_app/tmp/cache/assets/development/sprockets/45202fa0f913fbdccbf35341f8dd7b36} +0 -0
  115. data/spec/dummy_app/tmp/cache/assets/development/sprockets/4b4bd169c4e69a64a4a2741e174cf578 +0 -0
  116. data/spec/dummy_app/tmp/cache/assets/development/sprockets/4d0c7146cf04552f8b598a3e111d7997 +0 -0
  117. data/spec/{the_sortable_tree_app/tmp/cache/assets/CDC/B70/sprockets%2Fb8655a3e58029cd981112a7ce421db65 → dummy_app/tmp/cache/assets/development/sprockets/4fa563d2736e57350e947f3c45446a31} +0 -0
  118. data/spec/{the_sortable_tree_app/tmp/cache/assets/C3B/4B0/sprockets%2F4143dd2388a3252adb1804945871a002 → dummy_app/tmp/cache/assets/development/sprockets/589dc20ca8832fd1e57cee612a33470d} +0 -0
  119. data/spec/dummy_app/tmp/cache/assets/development/sprockets/592f5283e9aaf10abfabe06adb90dd24 +0 -0
  120. data/spec/dummy_app/tmp/cache/assets/development/sprockets/5f57b8f9ade7989a4ad4910dbc14e4b5 +0 -0
  121. data/spec/dummy_app/tmp/cache/assets/development/sprockets/61de97016b38506f89e31b4614e3ada2 +0 -0
  122. data/spec/dummy_app/tmp/cache/assets/development/sprockets/65203852a8bf7f4dd76a8ff5fd20d8e5 +0 -0
  123. data/spec/dummy_app/tmp/cache/assets/development/sprockets/66facc18f7ab080c8a8e3186cddb39aa +0 -0
  124. data/spec/dummy_app/tmp/cache/assets/development/sprockets/68f3f70d3556b5c8039f76c18c9520a0 +0 -0
  125. data/spec/{the_sortable_tree_app/tmp/cache/assets/D14/F00/sprockets%2Fb0d459b10f17bcc3955798772c7bac18 → dummy_app/tmp/cache/assets/development/sprockets/6ffb1af77ca6f262aec891f176a4d5a2} +0 -0
  126. data/spec/dummy_app/tmp/cache/assets/development/sprockets/7210b4d08933fddd9c8bf1d8e7b9dcb1 +0 -0
  127. data/spec/dummy_app/tmp/cache/assets/development/sprockets/77b67e5a493f0abd66712e2cfdccfbf7 +0 -0
  128. data/spec/dummy_app/tmp/cache/assets/development/sprockets/79e26ff62a5184d59f12cbaae40e0bf0 +0 -0
  129. data/spec/dummy_app/tmp/cache/assets/development/sprockets/80cb309fcd056cda2563f749bc0fedae +0 -0
  130. data/spec/dummy_app/tmp/cache/assets/development/sprockets/8223a88c26fdebbe77f2189f253c84d2 +0 -0
  131. data/spec/dummy_app/tmp/cache/assets/development/sprockets/82e61fb673d352eed69e219594c9d13d +0 -0
  132. data/spec/{the_sortable_tree_app/tmp/cache/assets/DAE/A40/sprockets%2F78e36ff8ef2fc355f82b30e0bfb397b5 → dummy_app/tmp/cache/assets/development/sprockets/8505bd144271a52deb9ced0582114f3d} +0 -0
  133. data/spec/{the_sortable_tree_app/tmp/cache/assets/DA2/800/sprockets%2F21a7cffa498af4bfb7a0849616b41dd8 → dummy_app/tmp/cache/assets/development/sprockets/8625ec6aecaca3766f0df3d7a6236594} +0 -0
  134. data/spec/dummy_app/tmp/cache/assets/development/sprockets/87521f5a93bf531f819abebebd4c2aa4 +0 -0
  135. data/spec/{the_sortable_tree_app/tmp/cache/assets/D5F/560/sprockets%2Fa07f8d3d20c8ad7093220eb04c67a6cd → dummy_app/tmp/cache/assets/development/sprockets/8979439153b5a4760f1b278fdd0e9a5c} +0 -0
  136. data/spec/dummy_app/tmp/cache/assets/development/sprockets/8f2995d8912687da614ff3b98b6e24ed +0 -0
  137. data/spec/dummy_app/tmp/cache/assets/development/sprockets/93d8d86bb80be6fb6a366b13800b4942 +0 -0
  138. data/spec/dummy_app/tmp/cache/assets/development/sprockets/99359f7a098eb16495189cf6d728f7b3 +0 -0
  139. data/spec/dummy_app/tmp/cache/assets/development/sprockets/99deda2445e2710cc890a25f205c51a6 +0 -0
  140. data/spec/dummy_app/tmp/cache/assets/development/sprockets/9ac815a1e6ab54e57f903054f878db1c +0 -0
  141. data/spec/dummy_app/tmp/cache/assets/development/sprockets/9f3643f6af4c46696ba0eab98830a7d8 +0 -0
  142. data/spec/dummy_app/tmp/cache/assets/development/sprockets/b55d5f8b7ac32c8022256909a8139dfe +0 -0
  143. data/spec/dummy_app/tmp/cache/assets/development/sprockets/bc0aca73f9504eb4d1a1d68755eedadb +0 -0
  144. data/spec/dummy_app/tmp/cache/assets/development/sprockets/bcd93e383d1f771b5a289b74ec7fb4bb +0 -0
  145. data/spec/dummy_app/tmp/cache/assets/development/sprockets/bd13d384c236f2e3cf25c76ece28ce24 +0 -0
  146. data/spec/{the_sortable_tree_app/tmp/cache/assets/D38/E20/sprockets%2F0e50ead9c50e79817fc32184e900ba5a → dummy_app/tmp/cache/assets/development/sprockets/bfde58c0dd8b76566ab23cc887e93a50} +0 -0
  147. data/spec/dummy_app/tmp/cache/assets/development/sprockets/bfe30d1ba2625e651981933ffe03ce20 +0 -0
  148. data/spec/dummy_app/tmp/cache/assets/development/sprockets/c1320f0226f27d7f547663a7deba9644 +0 -0
  149. data/spec/dummy_app/tmp/cache/assets/development/sprockets/c4432eee045f7b58525ed694662f6e12 +0 -0
  150. data/spec/dummy_app/tmp/cache/assets/development/sprockets/c7748b5f3eb8c8fea2e080c3dccaeae7 +0 -0
  151. data/spec/dummy_app/tmp/cache/assets/development/sprockets/cc6925acc7747a5cbe6e54df08217dbd +0 -0
  152. data/spec/dummy_app/tmp/cache/assets/development/sprockets/cd2cfd2ecacdf768c8a4b41c1070fbcf +0 -0
  153. data/spec/{the_sortable_tree_app/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af → dummy_app/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994} +0 -0
  154. data/spec/dummy_app/tmp/cache/assets/development/sprockets/d47a5f0466fc7f582750aa20a0182dbd +0 -0
  155. data/spec/dummy_app/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  156. data/spec/dummy_app/tmp/cache/assets/development/sprockets/daf14199207e9836228590d5efe3dcf3 +0 -0
  157. data/spec/dummy_app/tmp/cache/assets/development/sprockets/e2c92d620a13bc05f71b3405ec753edb +0 -0
  158. data/spec/dummy_app/tmp/cache/assets/development/sprockets/ea90d043aa01ed3e8e0b6cd49ea4c2a6 +0 -0
  159. data/spec/dummy_app/tmp/cache/assets/development/sprockets/eb9be27c994815f00a4c4c630c775c54 +0 -0
  160. data/spec/dummy_app/tmp/cache/assets/development/sprockets/eca8bd0ac188e23c00a4f531569d1d1e +0 -0
  161. data/spec/dummy_app/tmp/cache/assets/development/sprockets/ed396f8ec81394d660b1d6d6aab7b289 +0 -0
  162. data/spec/dummy_app/tmp/cache/assets/development/sprockets/f664eb5cbdc07ddaea6383c623fe0bac +0 -0
  163. data/spec/dummy_app/tmp/cache/assets/development/sprockets/f6f10c5b2a6282dca22b82b11b25ec12 +0 -0
  164. data/spec/dummy_app/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  165. data/spec/dummy_app/tmp/cache/assets/development/sprockets/f83592d6f5ee1f5eaaf7192d73dd5cb0 +0 -0
  166. data/spec/dummy_app/tmp/cache/assets/development/sprockets/fe2d1a86e5d6de106fa359f8c4028d77 +0 -0
  167. metadata +376 -317
  168. data/spec/the_sortable_tree_app/Gemfile.lock +0 -138
  169. data/spec/the_sortable_tree_app/README.md +0 -9
  170. data/spec/the_sortable_tree_app/app/views/pages/expand.html.haml +0 -7
  171. data/spec/the_sortable_tree_app/config/database.yml +0 -11
  172. data/spec/the_sortable_tree_app/db/development.db +0 -0
  173. data/spec/the_sortable_tree_app/db/production.db +0 -0
  174. data/spec/the_sortable_tree_app/db/test.db +0 -0
  175. data/spec/the_sortable_tree_app/log/development.log +0 -18672
  176. data/spec/the_sortable_tree_app/log/production.log +0 -5
  177. data/spec/the_sortable_tree_app/tmp/cache/assets/C50/BE0/sprockets%2Fa139ccc37272f09e8337565114558a42 +0 -0
  178. data/spec/the_sortable_tree_app/tmp/cache/assets/C77/560/sprockets%2F813f25e4a0780001a1f80f83ea522987 +0 -0
  179. data/spec/the_sortable_tree_app/tmp/cache/assets/C81/090/sprockets%2F5338822ad86a0a0079f990225ed9037d +0 -0
  180. data/spec/the_sortable_tree_app/tmp/cache/assets/C9A/730/sprockets%2F12ff81fe7a0c213d511536b1a9712613 +0 -0
  181. data/spec/the_sortable_tree_app/tmp/cache/assets/C9B/370/sprockets%2F4b19719024eb862bb0b40c2903b2444f +0 -0
  182. data/spec/the_sortable_tree_app/tmp/cache/assets/CC9/ED0/sprockets%2Fa98594ed698bb2f25c32497158b7346f +0 -0
  183. data/spec/the_sortable_tree_app/tmp/cache/assets/CD5/540/sprockets%2Fa2e03c2a79820a23e494e3b8459c32f0 +0 -0
  184. data/spec/the_sortable_tree_app/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  185. data/spec/the_sortable_tree_app/tmp/cache/assets/CE9/BD0/sprockets%2F22287637edb361485c371efd7817acc7 +0 -0
  186. data/spec/the_sortable_tree_app/tmp/cache/assets/CEA/2D0/sprockets%2F77e58093f6053b9964ca2b36bd34a94d +0 -0
  187. data/spec/the_sortable_tree_app/tmp/cache/assets/CEE/3C0/sprockets%2Ff078d8a33d271e8bf062dfd978343537 +0 -0
  188. data/spec/the_sortable_tree_app/tmp/cache/assets/CF0/590/sprockets%2F66914ec5c90e7fa7285377a17c4b94e3 +0 -0
  189. data/spec/the_sortable_tree_app/tmp/cache/assets/CF8/C70/sprockets%2Fb086216a7cea4b05f2d10a54a1508c86 +0 -0
  190. data/spec/the_sortable_tree_app/tmp/cache/assets/D0A/840/sprockets%2F38149c503a4865c81cef8cc0226b6a3d +0 -0
  191. data/spec/the_sortable_tree_app/tmp/cache/assets/D0E/CE0/sprockets%2F54005c20e9fd12f1d6d7bf9f7080f822 +0 -0
  192. data/spec/the_sortable_tree_app/tmp/cache/assets/D14/170/sprockets%2F2a860136457d8b8f4fedb7bcb3962136 +0 -0
  193. data/spec/the_sortable_tree_app/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  194. data/spec/the_sortable_tree_app/tmp/cache/assets/D42/760/sprockets%2Fa26ac9237d11ffa65fca30c861979e36 +0 -0
  195. data/spec/the_sortable_tree_app/tmp/cache/assets/D47/BE0/sprockets%2F544a4972c2f7438e092ab50cbc8c9de9 +0 -0
  196. data/spec/the_sortable_tree_app/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  197. data/spec/the_sortable_tree_app/tmp/cache/assets/D51/420/sprockets%2F8497f4db9b07de37eee54184fd031e93 +0 -0
  198. data/spec/the_sortable_tree_app/tmp/cache/assets/D59/D90/sprockets%2Ff09bd16e880b660cbf49848bc97f29e7 +0 -0
  199. data/spec/the_sortable_tree_app/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  200. data/spec/the_sortable_tree_app/tmp/cache/assets/D7C/D70/sprockets%2F8c4e6f6fc945e97cae12d8218a21f8b3 +0 -0
  201. data/spec/the_sortable_tree_app/tmp/cache/assets/DD3/4C0/sprockets%2Fb4b73a83da8ea301f18e578dc3d9dde6 +0 -0
  202. data/spec/the_sortable_tree_app/tmp/cache/assets/E03/A20/sprockets%2F74f7c02ea34e1ecfcb83bff7c167c75d +0 -0
  203. data/spec/the_sortable_tree_app/tmp/cache/sass/2255c97fc63f030a9ce238cccb311b4b1e966328/sortable_tree.css.scssc +0 -0
data/README.md CHANGED
@@ -1,13 +1,15 @@
1
1
  # TheSortableTree v2.3.3
2
2
 
3
+ [![Code Climate](https://codeclimate.com/github/the-teacher/the_sortable_tree.png)](https://codeclimate.com/github/the-teacher/the_sortable_tree)
4
+
3
5
  > tested with rails 3.2.13 + haml 4
4
6
 
5
7
  Nested Set + Drag&Drop GUI. Very fast! Best render helper! **2000 nodes/sec**. Ready for rails 4 ([RubyGems](http://rubygems.org/gems/the_sortable_tree))
6
8
 
7
- ### Test Application
9
+ ### Dummy Application
8
10
 
9
- * [spec/the_sortable_tree_app](https://github.com/the-teacher/the_sortable_tree/tree/master/spec/the_sortable_tree_app)
10
- * [spec/the_sortable_tree_app/README.md](https://github.com/the-teacher/the_sortable_tree/blob/master/spec/the_sortable_tree_app/README.md)
11
+ * [spec/dummy_app](https://github.com/the-teacher/the_sortable_tree/tree/master/spec/dummy_app)
12
+ * [spec/dummy_app/README.md](https://github.com/the-teacher/the_sortable_tree/blob/master/spec/dummy_app/README.md)
11
13
 
12
14
  ## Sortable tree. Drag&Drop GUI
13
15
 
@@ -19,7 +21,11 @@ Nested Set + Drag&Drop GUI. Very fast! Best render helper! **2000 nodes/sec**. R
19
21
 
20
22
  ## Render Nested Options
21
23
 
22
- ![Render tree](https://raw.github.com/the-teacher/the_sortable_tree/master/docs/nested_options.jpg)
24
+ ![Nested options](https://raw.github.com/the-teacher/the_sortable_tree/master/docs/nested_options.jpg)
25
+
26
+ ## Expandable tree
27
+
28
+ ![Expandable](https://raw.github.com/the-teacher/the_sortable_tree/master/docs/expandable.jpg)
23
29
 
24
30
  ## Keywords
25
31
 
@@ -0,0 +1,33 @@
1
+ @_arrays_diff = (a, b) -> b.filter (i) -> return !(a.indexOf(i) > -1)
2
+
3
+ @expandable_tree_hashchange = (hash_event) ->
4
+ if window.skip_expandable_tree_hashchange
5
+ window.skip_expandable_tree_hashchange = false
6
+ return true
7
+
8
+ hash_and_cookie_accordance()
9
+
10
+ oEvent = hash_event.originalEvent
11
+ new_url = oEvent.newURL
12
+ old_url = oEvent.oldURL
13
+
14
+ new_hash = new_url.split('#')[1]
15
+ old_hash = old_url.split('#')[1]
16
+
17
+ return false unless ('#'+new_hash).match(TSTconst.re()) or ('#'+old_hash).match(TSTconst.re())
18
+
19
+ new_arr = _nested_set_hash_arr(new_hash)
20
+ old_arr = _nested_set_hash_arr(old_hash)
21
+
22
+ diff_ids = if new_arr.length >= old_arr.length
23
+ _arrays_diff(old_arr, new_arr)
24
+ else
25
+ _arrays_diff(new_arr, old_arr)
26
+
27
+ for id in diff_ids
28
+ btn = $("[data-node-id=#{id}] > .item .expand")
29
+ btn.click()
30
+ setTimeout -> window.skip_expandable_tree_hashchange = false
31
+
32
+ $(window).bind 'hashchange', (hash_event) ->
33
+ expandable_tree_hashchange(hash_event)
@@ -1,3 +1,29 @@
1
+ # ----------------------------------------
2
+ # Restorable Helpers
3
+ # ----------------------------------------
4
+ @add_to_restorable_path = (node) ->
5
+ if window.is_restorable_tree
6
+ id = node.data('node-id')
7
+ nested_tree_path_add(id)
8
+ return true
9
+ false
10
+
11
+ @remove_from_restorable_path = (node) ->
12
+ if window.is_restorable_tree
13
+ id = node.data('node-id')
14
+ nested_tree_path_remove(id)
15
+ return true
16
+ false
17
+
18
+ # ----------------------------------------
19
+ # Main Helpers
20
+ # ----------------------------------------
21
+ @nested_tree_toggle = (button) ->
22
+ if button.hasClass('minus')
23
+ button.removeClass('minus').addClass('plus').html('+')
24
+ else
25
+ button.removeClass('plus').addClass('minus').html('–')
26
+
1
27
  @append_children_to_node = (node, html) ->
2
28
  html = html.trim()
3
29
  item = node.children('.item')
@@ -8,43 +34,71 @@
8
34
  button.addClass 'empty'
9
35
 
10
36
  if html.length > 0
11
- button.removeClass('plus').addClass('minus').html('–')
12
37
  item.after html
13
-
38
+ nested_tree_toggle(button)
39
+ add_to_restorable_path(node)
14
40
 
15
- @upload_nodes_children = (node, expand_node_url, tree_type = 'expandable') ->
16
- node_id = node.attr 'id'
41
+ @upload_nodes_children = (node, expand_node_url) ->
42
+ node_id = node.data('node-id')
43
+ tree = $('.sortable_tree')
44
+ ctrl_items = $('i.handle, b.expand', tree)
17
45
 
18
46
  $.ajax
19
47
  type: 'POST'
20
48
  dataType: 'html'
49
+ data: { id: node_id }
21
50
  url: expand_node_url
22
- data:
23
- id: node_id
24
- tree_type: tree_type
25
51
 
26
52
  beforeSend: (xhr) ->
27
- $('.sortable_tree i.handle').hide()
28
- $('.sortable_tree b.expand').hide()
53
+ ctrl_items.hide()
54
+ window.skip_expandable_tree_hashchange = true
29
55
 
30
56
  success: (data, status, xhr) ->
31
- $('.sortable_tree i.handle').show()
32
- $('.sortable_tree b.expand').show()
57
+ ctrl_items.show()
33
58
  append_children_to_node(node, data)
34
59
 
35
60
  error: (xhr, status, error) ->
36
- console.log error
61
+ try
62
+ console.log error
63
+
64
+ @init_expandable_tree = ->
65
+ sortable_tree = $('ol.sortable_tree')
66
+ return false if sortable_tree.length is 0
37
67
 
38
- $ ->
39
- for sortable_tree in $('ol.sortable_tree')
40
- sortable_tree = $ sortable_tree
41
- expand_node_url = sortable_tree.data('expand_node_url')
42
- tree_type = sortable_tree.data('tree_type')
68
+ window.is_restorable_tree ||= false
69
+ window.is_cookie_restoreable_tree = sortable_tree.data('cookie_store') || sortable_tree.data('cookie-store')
70
+
71
+ if window.is_cookie_restoreable_tree
72
+ steps = $.cookie(TSTconst.cookie_name())
73
+ _set_hash(TSTconst.hash_prefix() + steps) if steps
74
+
75
+ expand_node_url = sortable_tree.data('expand_node_url') || sortable_tree.data('expand-node-url')
76
+
77
+ # Now it's designed only for one tree
78
+ restore_nested_tree(sortable_tree, expand_node_url) if window.is_restorable_tree
79
+
80
+ sortable_tree.on 'click', '.expand.minus', (e) ->
81
+ button = $ @
82
+ node = button.parent().parent()
83
+ nested_tree_toggle(button)
84
+ remove_from_restorable_path(node)
85
+ node.children('.nested_set').hide()
86
+ false
87
+
88
+ sortable_tree.on 'click', '.expand.plus', (e) ->
89
+ button = $ @
90
+ node = button.parent().parent()
91
+ nested_set = node.children('.nested_set')
92
+
93
+ if nested_set.length is 0
94
+ upload_nodes_children(node, expand_node_url)
95
+ else
96
+ nested_set.show()
97
+ nested_tree_toggle(button)
98
+ add_to_restorable_path(node)
43
99
 
44
- pluses = $ '.expand.plus', sortable_tree
100
+ false
45
101
 
46
- pluses.live 'click', (e) ->
47
- node = $(@).parent().parent()
48
- upload_nodes_children(node, expand_node_url, tree_type)
102
+ true
49
103
 
50
- false
104
+ $ -> init_expandable_tree()
@@ -0,0 +1,68 @@
1
+ #!
2
+ # * jQuery Cookie Plugin v1.3.1
3
+ # * https://github.com/carhartl/jquery-cookie
4
+ # *
5
+ # * Copyright 2013 Klaus Hartl
6
+ # * Released under the MIT license
7
+ #
8
+ ((factory) ->
9
+ if typeof define is "function" and define.amd
10
+ # AMD. Register as anonymous module.
11
+ define ["jquery"], factory
12
+ else
13
+ # Browser globals.
14
+ factory jQuery
15
+ ) ($) ->
16
+ pluses = /\+/g
17
+
18
+ raw = (s) -> s
19
+ decoded = (s) -> decodeURIComponent s.replace(pluses, " ")
20
+ converted = (s) ->
21
+ # This is a quoted cookie as according to RFC2068, unescape
22
+ s = s.slice(1, -1).replace(/\\"/g, "\"").replace(/\\\\/g, "\\") if s.indexOf("\"") is 0
23
+ try
24
+ return (if config.json then JSON.parse(s) else s)
25
+
26
+
27
+ config = $.cookie = (key, value, options) ->
28
+ # write
29
+ if value isnt `undefined`
30
+ options = $.extend({}, config.defaults, options)
31
+
32
+ if typeof options.expires is "number"
33
+ days = options.expires
34
+ t = options.expires = new Date()
35
+ t.setDate t.getDate() + days
36
+
37
+ value = (if config.json then JSON.stringify(value) else String(value))
38
+
39
+ # use expires attribute, max-age is not supported by IE
40
+ return (document.cookie = [(if config.raw then key else encodeURIComponent(key)), "=", (if config.raw then value else encodeURIComponent(value)), (if options.expires then "; expires=" + options.expires.toUTCString() else ""), (if options.path then "; path=" + options.path else ""), (if options.domain then "; domain=" + options.domain else ""), (if options.secure then "; secure" else "")].join(""))
41
+
42
+ # read
43
+ decode = (if config.raw then raw else decoded)
44
+ cookies = document.cookie.split("; ")
45
+ result = (if key then `undefined` else {})
46
+
47
+ i = 0
48
+ l = cookies.length
49
+
50
+ while i < l
51
+ parts = cookies[i].split("=")
52
+ name = decode parts.shift()
53
+ cookie = decode parts.join("=")
54
+ if key and key is name
55
+ result = converted(cookie)
56
+ break
57
+ result[name] = converted(cookie) unless key
58
+ i++
59
+ result
60
+
61
+ config.defaults = {}
62
+
63
+ $.removeCookie = (key, options) ->
64
+ if $.cookie(key) isnt `undefined`
65
+ # Must not alter options, thus extending a fresh object...
66
+ $.cookie key, '', $.extend({}, options, expires: -1)
67
+ return true
68
+ false
@@ -0,0 +1,125 @@
1
+ window.is_restorable_tree = true
2
+
3
+ class @TSTconst
4
+ @_name = 'TST'
5
+ @delimiter = ';'
6
+ @separator = '|'
7
+ @re = -> new RegExp(@cookie_name() + '\\' + @separator)
8
+ @hash_prefix = -> @cookie_name() + @separator
9
+ @cookie_scope = -> $('.sortable_tree').data('cookie_scope') || $('.sortable_tree').data('cookie-scope')
10
+ @cookie_name = ->
11
+ return @_name unless @cookie_scope()
12
+ @_name + '_' + @cookie_scope()
13
+
14
+ # ====================================
15
+ # Helpers
16
+ # ====================================
17
+ @_get_hash = -> document.location.hash
18
+ @_set_hash = (str) ->
19
+ window.skip_expandable_tree_hashchange = true
20
+ document.location.hash = str
21
+
22
+ @_uniqueArray = (arr = []) ->
23
+ output = {}
24
+ output[item] = item for item in arr
25
+ val for key, val of output
26
+
27
+ @_compactArray = (array) -> array.filter (e) -> return e
28
+
29
+ @_nested_set_hash_arr = (hash) ->
30
+ return [] unless hash
31
+ [prefix, arr] = hash.split(TSTconst.separator)
32
+ _compactArray _uniqueArray arr.split(TSTconst.delimiter)
33
+
34
+ # ====================================
35
+ # Helpers Fn
36
+ # ====================================
37
+ @nested_tree_get_path = ->
38
+ hash = _get_hash()
39
+ return false unless hash.match(TSTconst.re())
40
+ _nested_set_hash_arr(hash)
41
+
42
+ @hash_and_cookie_accordance = ->
43
+ if window.is_cookie_restoreable_tree
44
+ hash = _get_hash()
45
+ if hash.length is 0
46
+ $.removeCookie( TSTconst.cookie_name() )
47
+ else
48
+ return false unless hash.match(TSTconst.re())
49
+ str = hash.split(TSTconst.separator)[1]
50
+ $.cookie(TSTconst.cookie_name(), str, { expires: 14 })
51
+
52
+ false
53
+
54
+ @nested_tree_path_remove = (id) ->
55
+ hash = _get_hash()
56
+ return false unless hash.match(TSTconst.re())
57
+
58
+ arr = _nested_set_hash_arr(hash)
59
+ index = arr.indexOf(id+'')
60
+ return hash_and_cookie_accordance() if index is -1
61
+
62
+ arr.splice(index, 1)
63
+ str = _uniqueArray(arr).join(TSTconst.delimiter)
64
+
65
+ if str.length is 0
66
+ _set_hash('')
67
+ else
68
+ _set_hash(TSTconst.hash_prefix() + str)
69
+
70
+ hash_and_cookie_accordance()
71
+
72
+ true
73
+
74
+ @nested_tree_path_add = (id) ->
75
+ str = id
76
+ hash = _get_hash()
77
+
78
+ if hash.match(TSTconst.re())
79
+ arr = _nested_set_hash_arr(hash)
80
+ arr.push(id)
81
+ arr = _uniqueArray arr
82
+ str = arr.join(TSTconst.delimiter)
83
+
84
+ _set_hash(TSTconst.hash_prefix() + str)
85
+ hash_and_cookie_accordance()
86
+
87
+ # ====================================
88
+ # Restore Fn
89
+ # ====================================
90
+ @load_nested_nodes = (arr, expand_node_url) ->
91
+ if arr.length is 0
92
+ window.skip_expandable_tree_hashchange = false
93
+ return false
94
+
95
+ id = arr.shift()
96
+ tree = $('.sortable_tree')
97
+ node = $("[data-node-id=#{id}]")
98
+ ctrl_items = $('i.handle, b.expand', tree)
99
+
100
+ if node.length is 0
101
+ load_nested_nodes(arr, expand_node_url)
102
+ else
103
+ $.ajax
104
+ type: 'POST'
105
+ dataType: 'html'
106
+ data: { id: id }
107
+ url: expand_node_url
108
+
109
+ beforeSend: (xhr) ->
110
+ ctrl_items.hide()
111
+ window.skip_expandable_tree_hashchange = true
112
+
113
+ success: (data, status, xhr) ->
114
+ ctrl_items.show()
115
+ append_children_to_node(node, data)
116
+ load_nested_nodes(arr, expand_node_url)
117
+
118
+ error: (xhr, status, error) ->
119
+ try
120
+ console.log error
121
+
122
+ @restore_nested_tree = (sortable_tree, expand_node_url) ->
123
+ arr = nested_tree_get_path()
124
+ return false unless arr
125
+ load_nested_nodes(arr, expand_node_url)
@@ -19,6 +19,7 @@
19
19
  disableNesting: 'ui-nestedSortable-no-nesting',
20
20
  errorClass: 'ui-nestedSortable-error',
21
21
  listType: 'ol',
22
+ listClass: 'nested_set',
22
23
  maxLevels: 0,
23
24
  noJumpFix: 0
24
25
  },
@@ -128,6 +129,7 @@
128
129
  }
129
130
 
130
131
  newList = document.createElement(o.listType);
132
+ $(newList).addClass(o.listClass)
131
133
 
132
134
  this.beyondMaxLevels = 0;
133
135
 
@@ -18,37 +18,43 @@
18
18
  error: (xhr, status, error) ->
19
19
  console.log error
20
20
 
21
- $ ->
22
- for sortable_tree in $('ol.sortable_tree')
23
- sortable_tree = $ sortable_tree
24
- rebuild_url = sortable_tree.data('rebuild_url') || sortable_tree.data('rebuild-url')
25
- max_levels = sortable_tree.data('max_levels') || sortable_tree.data('max-levels')
26
-
27
- ############################################
28
- # Initialize Sortable Tree
29
- ############################################
30
- sortable_tree.nestedSortable
31
- items: 'li'
32
- helper: 'clone'
33
- handle: 'i.handle'
34
- tolerance: 'pointer'
35
- maxLevels: max_levels
36
- revert: 250
37
- tabSize: 25
38
- opacity: 0.6
39
- placeholder: 'placeholder'
40
- disableNesting: 'no-nest'
41
- toleranceElement: '> div'
42
- forcePlaceholderSize: true
43
-
44
- ############################################
45
- # Sortable Update Event
46
- ############################################
47
- sortable_tree.on "sortupdate", (event, ui) =>
48
- item = ui.item
49
- item_id = item.attr('id')
50
- prev_id = item.prev().attr('id')
51
- next_id = item.next().attr('id')
52
- parent_id = item.parent().parent().attr('id')
53
-
54
- rebuild_sortable_tree(rebuild_url, item_id, parent_id, prev_id, next_id)
21
+ @init_sortable_tree = ->
22
+ sortable_tree = $('ol.sortable_tree')
23
+ return false if sortable_tree.length is 0
24
+
25
+ rebuild_url = sortable_tree.data('rebuild_url') || sortable_tree.data('rebuild-url')
26
+ max_levels = sortable_tree.data('max_levels') || sortable_tree.data('max-levels')
27
+
28
+ ############################################
29
+ # Initialize Sortable Tree
30
+ ############################################
31
+ sortable_tree.nestedSortable
32
+ items: 'li'
33
+ helper: 'clone'
34
+ handle: 'i.handle'
35
+ tolerance: 'pointer'
36
+ maxLevels: max_levels
37
+ revert: 250
38
+ tabSize: 25
39
+ opacity: 0.6
40
+ placeholder: 'placeholder'
41
+ disableNesting: 'no-nest'
42
+ toleranceElement: '> div'
43
+ forcePlaceholderSize: true
44
+
45
+ ############################################
46
+ # Sortable Update Event
47
+ ############################################
48
+ sortable_tree.on "sortupdate", (event, ui) =>
49
+ item = ui.item
50
+ attr_name = 'node-id'
51
+ item_id = item.data(attr_name)
52
+ prev_id = item.prev().data(attr_name)
53
+ next_id = item.next().data(attr_name)
54
+ parent_id = item.parent().parent().data(attr_name)
55
+
56
+ rebuild_sortable_tree(rebuild_url, item_id, parent_id, prev_id, next_id)
57
+
58
+ true
59
+
60
+ $ -> init_sortable_tree()
@@ -1,10 +1,16 @@
1
1
  .sortable_tree{
2
+ &.expandable{
3
+ h4{
4
+ margin-left: 50px;
5
+ }
6
+ }
7
+
2
8
  .expand{
3
9
  float: left;
4
10
  cursor: pointer;
5
11
 
6
- border: 1px solid gray;
7
- color: gray;
12
+ border: 1px solid lightgray;
13
+ color: lightgray;
8
14
 
9
15
  font-size: 13px;
10
16
  font-weight: normal;
@@ -28,10 +28,12 @@
28
28
  }
29
29
 
30
30
  h4{
31
- margin: 0;
31
+ margin-left: 30px;
32
+
32
33
  a{
33
34
  color: #333;
34
35
  font-size: 14px;
36
+ margin-left: 0;
35
37
  &:hover{ background: #eee; }
36
38
  }
37
39
  }
@@ -42,7 +44,7 @@
42
44
  }
43
45
 
44
46
  .handle{
45
- background: transparent url(/assets/iconza/icons/move.png);
47
+ background: transparent image-url("iconza/icons/move.png");
46
48
  background-position: center center;
47
49
 
48
50
  width: 16px;
@@ -51,7 +53,7 @@
51
53
  float: left;
52
54
  cursor: move;
53
55
 
54
- &:hover{ background: transparent url(/assets/iconza/icons/red_move.png); }
56
+ &:hover{ background: transparent image-url("iconza/icons/red_move.png"); }
55
57
  }
56
58
 
57
59
  .item{
@@ -90,16 +92,16 @@
90
92
  overflow: hidden; zoom: 1;
91
93
 
92
94
  &.new{
93
- background: transparent url(/assets/iconza/icons/add.png) no-repeat scroll center center;
94
- &:hover{ background: transparent url(/assets/iconza/icons/red_add.png) no-repeat scroll center center; }
95
+ background: transparent image-url("iconza/icons/add.png") no-repeat scroll center center;
96
+ &:hover{ background: transparent image-url("iconza/icons/red_add.png") no-repeat scroll center center; }
95
97
  }
96
98
  &.edit{
97
- background: transparent url(/assets/iconza/icons/edit.png) no-repeat scroll center center;
98
- &:hover{ background: transparent url(/assets/iconza/icons/red_edit.png) no-repeat scroll center center; }
99
+ background: transparent image-url("iconza/icons/edit.png") no-repeat scroll center center;
100
+ &:hover{ background: transparent image-url("iconza/icons/red_edit.png") no-repeat scroll center center; }
99
101
  }
100
102
  &.delete{
101
- background: transparent url(/assets/iconza/icons/delete.png) no-repeat scroll center center;
102
- &:hover{ background: transparent url(/assets/iconza/icons/red_delete.png) no-repeat scroll center center; }
103
+ background: transparent image-url("iconza/icons/delete.png") no-repeat scroll center center;
104
+ &:hover{ background: transparent image-url("iconza/icons/red_delete.png") no-repeat scroll center center; }
103
105
  }
104
106
  }
105
107
  }
@@ -1,7 +1,7 @@
1
1
  module TheSortableTreeController
2
- # include TheSortableTreeController::ReversedRebuild
3
2
  # include TheSortableTreeController::Rebuild
4
3
  # include TheSortableTreeController::ExpandNode
4
+ # include TheSortableTreeController::ReversedRebuild
5
5
 
6
6
  module DefineVariablesMethod
7
7
  public
@@ -18,15 +18,16 @@ module TheSortableTreeController
18
18
  module ExpandNode
19
19
  include DefineVariablesMethod
20
20
  def expand_node
21
- id = params[:id].to_i
22
- render :text => "Do nothing" and return unless id
21
+ id = params[:id].to_i
22
+ return render(nothing: true) unless id
23
+ sort = (params[:tree_sort] == 'reversed') ? 'reversed_' : nil
23
24
 
24
25
  variable, collection, klass = self.the_define_common_variables
25
- variable = self.instance_variable_set(variable, klass.find(id))
26
- @children = variable.children
26
+ variable = self.instance_variable_set(variable, klass.find(id))
27
+ @children = variable.children.send("#{sort}nested_set")
27
28
 
28
- render :text => nil and return if @children.count.zero?
29
- render :layout => false, :template => "#{collection}/expand_children"
29
+ return render(nothing: :true) if @children.count.zero?
30
+ render layout: false, template: "#{collection}/expand_node"
30
31
  end
31
32
  end
32
33
 
@@ -39,7 +40,7 @@ module TheSortableTreeController
39
40
  prev_id = params[:prev_id].to_i
40
41
  next_id = params[:next_id].to_i
41
42
 
42
- render :text => "Do nothing" and return if parent_id.zero? && prev_id.zero? && next_id.zero?
43
+ return render(nothing: true, status: :no_content) if parent_id.zero? && prev_id.zero? && next_id.zero?
43
44
 
44
45
  variable, collection, klass = self.the_define_common_variables
45
46
  variable = self.instance_variable_set(variable, klass.find(id))
@@ -52,7 +53,7 @@ module TheSortableTreeController
52
53
  variable.move_to_left_of klass.find(next_id)
53
54
  end
54
55
 
55
- render(:nothing => true)
56
+ render(nothing: true, status: :ok)
56
57
  end
57
58
  end
58
59
 
@@ -65,7 +66,7 @@ module TheSortableTreeController
65
66
  prev_id = params[:prev_id].to_i
66
67
  next_id = params[:next_id].to_i
67
68
 
68
- render :text => "Do nothing" and return if parent_id.zero? && prev_id.zero? && next_id.zero?
69
+ return render(nothing: true, status: :no_content) if parent_id.zero? && prev_id.zero? && next_id.zero?
69
70
 
70
71
  variable, collection, klass = self.the_define_common_variables
71
72
  variable = self.instance_variable_set(variable, klass.find(id))
@@ -78,7 +79,7 @@ module TheSortableTreeController
78
79
  variable.move_to_right_of klass.find(next_id)
79
80
  end
80
81
 
81
- render(:nothing => true)
82
+ render(nothing: true, status: :ok)
82
83
  end
83
84
  end
84
85
  end
@@ -13,12 +13,10 @@ module RenderExpandableTreeHelper
13
13
 
14
14
  def render_node(h, options)
15
15
  @h, @options = h, options
16
-
17
16
  node = options[:node]
18
- # &ndash;
19
17
 
20
18
  "
21
- <li id='#{ node.id }_#{ options[:klass] }'>
19
+ <li data-node-id='#{ node.id }'>
22
20
  <div class='item'>
23
21
  <i class='handle'></i>
24
22
  <b class='expand plus'>+</b>
@@ -13,11 +13,10 @@ module RenderSortableTreeHelper
13
13
 
14
14
  def render_node(h, options)
15
15
  @h, @options = h, options
16
-
17
16
  node = options[:node]
18
17
 
19
18
  "
20
- <li id='#{ node.id }_#{ options[:klass] }'>
19
+ <li data-node-id='#{ node.id }'>
21
20
  <div class='item'>
22
21
  <i class='handle'></i>
23
22
  #{ show_link }
@@ -1,3 +1,3 @@
1
1
  module TheSortableTree
2
- VERSION = "2.3.3"
2
+ VERSION = "2.4.0"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'rails'
3
+ gem 'rails', '~> 4.0.0'
4
4
  gem 'sqlite3'
5
5
 
6
6
  gem 'json'