blacklight-hierarchy 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (227) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +3 -1
  3. data/Rakefile +24 -17
  4. data/app/assets/{stylesheets/blacklight/hierarchy → images}/collapsed.png +0 -0
  5. data/app/assets/{stylesheets/blacklight/hierarchy → images}/empty_marker.png +0 -0
  6. data/app/assets/{stylesheets/blacklight/hierarchy → images}/expanded.png +0 -0
  7. data/app/assets/{stylesheets/blacklight/hierarchy → images}/minus_arrow.png +0 -0
  8. data/app/assets/{stylesheets/blacklight/hierarchy → images}/plus_arrow.png +0 -0
  9. data/app/assets/javascripts/blacklight/hierarchy/hierarchy.js +1 -1
  10. data/app/assets/stylesheets/blacklight/hierarchy/hierarchy.css.scss +2 -2
  11. data/app/helpers/blacklight/hierarchy_helper.rb +148 -111
  12. data/lib/blacklight/hierarchy.rb +2 -1
  13. data/lib/blacklight/hierarchy/engine.rb +2 -0
  14. data/lib/blacklight/hierarchy/version.rb +1 -1
  15. data/lib/generators/blacklight_hierarchy/install_generator.rb +12 -0
  16. data/lib/generators/blacklight_hierarchy/templates/blacklight_hierarchy.css.scss +3 -0
  17. data/lib/generators/blacklight_hierarchy/templates/blacklight_hierarchy.js +1 -0
  18. data/spec/features/basic_spec.rb +114 -0
  19. data/spec/helpers/hierarchy_helper_spec.rb +11 -0
  20. data/spec/internal/Gemfile +40 -0
  21. data/spec/internal/Gemfile.lock +151 -0
  22. data/spec/internal/README.rdoc +28 -0
  23. data/spec/internal/Rakefile +6 -0
  24. data/spec/internal/app/assets/javascripts/application.js +19 -0
  25. data/spec/internal/app/assets/javascripts/blacklight_hierarchy.js +1 -0
  26. data/spec/internal/app/assets/stylesheets/application.css +15 -0
  27. data/spec/internal/app/assets/stylesheets/blacklight.css.scss +5 -0
  28. data/spec/internal/app/assets/stylesheets/blacklight_hierarchy.css.scss +3 -0
  29. data/spec/internal/app/controllers/catalog_controller.rb +182 -0
  30. data/spec/internal/app/helpers/application_helper.rb +2 -0
  31. data/spec/internal/app/views/layouts/application.html.erb +14 -0
  32. data/spec/internal/bin/bundle +3 -0
  33. data/spec/internal/bin/rails +4 -0
  34. data/spec/internal/bin/rake +4 -0
  35. data/spec/internal/config.ru +4 -0
  36. data/spec/internal/config/application.rb +23 -0
  37. data/spec/internal/config/boot.rb +4 -0
  38. data/spec/internal/config/environment.rb +5 -0
  39. data/spec/internal/config/environments/development.rb +37 -0
  40. data/spec/internal/config/environments/production.rb +82 -0
  41. data/spec/internal/config/environments/test.rb +39 -0
  42. data/spec/internal/config/initializers/assets.rb +8 -0
  43. data/spec/internal/config/initializers/backtrace_silencers.rb +7 -0
  44. data/spec/internal/config/initializers/blacklight_initializer.rb +7 -0
  45. data/spec/internal/config/initializers/cookies_serializer.rb +3 -0
  46. data/spec/internal/config/initializers/filter_parameter_logging.rb +4 -0
  47. data/spec/internal/config/initializers/inflections.rb +16 -0
  48. data/spec/internal/config/initializers/mime_types.rb +4 -0
  49. data/spec/internal/config/initializers/session_store.rb +3 -0
  50. data/spec/internal/config/initializers/wrap_parameters.rb +14 -0
  51. data/spec/internal/config/locales/blacklight.en.yml +3 -0
  52. data/spec/internal/config/locales/en.yml +23 -0
  53. data/spec/internal/config/secrets.yml +22 -0
  54. data/spec/internal/config/solr.yml +18 -0
  55. data/spec/internal/db/development.sqlite3 +0 -0
  56. data/spec/internal/db/migrate/20141111225552_create_searches.blacklight.rb +19 -0
  57. data/spec/internal/db/migrate/20141111225553_create_bookmarks.blacklight.rb +18 -0
  58. data/spec/internal/db/migrate/20141111225554_add_polymorphic_type_to_bookmarks.blacklight.rb +9 -0
  59. data/spec/internal/db/seeds.rb +7 -0
  60. data/spec/internal/db/test.sqlite3 +0 -0
  61. data/spec/internal/lib/generators/test_app_generator.rb +28 -0
  62. data/spec/internal/log/development.log +49 -0
  63. data/spec/internal/log/test.log +56 -0
  64. data/spec/internal/public/404.html +67 -0
  65. data/spec/internal/public/422.html +67 -0
  66. data/spec/internal/public/500.html +66 -0
  67. data/spec/internal/public/robots.txt +5 -0
  68. data/spec/internal/test/test_helper.rb +10 -0
  69. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_alerts.scssc +0 -0
  70. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_badges.scssc +0 -0
  71. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_breadcrumbs.scssc +0 -0
  72. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_button-groups.scssc +0 -0
  73. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_buttons.scssc +0 -0
  74. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_carousel.scssc +0 -0
  75. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_close.scssc +0 -0
  76. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_code.scssc +0 -0
  77. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_component-animations.scssc +0 -0
  78. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_dropdowns.scssc +0 -0
  79. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_forms.scssc +0 -0
  80. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_glyphicons.scssc +0 -0
  81. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_grid.scssc +0 -0
  82. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_input-groups.scssc +0 -0
  83. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_jumbotron.scssc +0 -0
  84. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_labels.scssc +0 -0
  85. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_list-group.scssc +0 -0
  86. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_media.scssc +0 -0
  87. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_mixins.scssc +0 -0
  88. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_modals.scssc +0 -0
  89. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_navbar.scssc +0 -0
  90. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_navs.scssc +0 -0
  91. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_normalize.scssc +0 -0
  92. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_pager.scssc +0 -0
  93. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_pagination.scssc +0 -0
  94. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_panels.scssc +0 -0
  95. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_popovers.scssc +0 -0
  96. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_print.scssc +0 -0
  97. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_progress-bars.scssc +0 -0
  98. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_responsive-embed.scssc +0 -0
  99. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_responsive-utilities.scssc +0 -0
  100. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_scaffolding.scssc +0 -0
  101. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_tables.scssc +0 -0
  102. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_thumbnails.scssc +0 -0
  103. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_tooltip.scssc +0 -0
  104. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_type.scssc +0 -0
  105. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_utilities.scssc +0 -0
  106. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_variables.scssc +0 -0
  107. data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_wells.scssc +0 -0
  108. data/spec/internal/tmp/cache/assets/test/sass/68dcee9be34904261460cf4a0e994beb05701732/blacklight.css.scssc +0 -0
  109. data/spec/internal/tmp/cache/assets/test/sass/68dcee9be34904261460cf4a0e994beb05701732/blacklight_hierarchy.css.scssc +0 -0
  110. data/spec/internal/tmp/cache/assets/test/sass/6d89983d04228b19fffeb0ffc236c10e9a0e1ee2/_bootstrap-sprockets.scssc +0 -0
  111. data/spec/internal/tmp/cache/assets/test/sass/6d89983d04228b19fffeb0ffc236c10e9a0e1ee2/bootstrap.scssc +0 -0
  112. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_blacklight_base.css.scssc +0 -0
  113. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_bookmark.css.scssc +0 -0
  114. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_catalog.css.scssc +0 -0
  115. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_facets.css.scssc +0 -0
  116. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_group.css.scssc +0 -0
  117. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_header.css.scssc +0 -0
  118. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_layout.css.scssc +0 -0
  119. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_modal.css.scssc +0 -0
  120. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_search_history.css.scssc +0 -0
  121. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/blacklight.css.scssc +0 -0
  122. data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/blacklight_defaults.css.scssc +0 -0
  123. data/spec/internal/tmp/cache/assets/test/sass/c3fd5239c31441bb56d49be4a217da70f39ecc0a/hierarchy.css.scssc +0 -0
  124. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_alerts.scssc +0 -0
  125. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_background-variant.scssc +0 -0
  126. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_border-radius.scssc +0 -0
  127. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_buttons.scssc +0 -0
  128. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_center-block.scssc +0 -0
  129. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_clearfix.scssc +0 -0
  130. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_forms.scssc +0 -0
  131. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_gradients.scssc +0 -0
  132. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_grid-framework.scssc +0 -0
  133. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_grid.scssc +0 -0
  134. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_hide-text.scssc +0 -0
  135. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_image.scssc +0 -0
  136. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_labels.scssc +0 -0
  137. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_list-group.scssc +0 -0
  138. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_nav-divider.scssc +0 -0
  139. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_nav-vertical-align.scssc +0 -0
  140. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_opacity.scssc +0 -0
  141. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_pagination.scssc +0 -0
  142. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_panels.scssc +0 -0
  143. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_progress-bar.scssc +0 -0
  144. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_reset-filter.scssc +0 -0
  145. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_resize.scssc +0 -0
  146. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_responsive-visibility.scssc +0 -0
  147. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_size.scssc +0 -0
  148. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_tab-focus.scssc +0 -0
  149. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_table-row.scssc +0 -0
  150. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_text-emphasis.scssc +0 -0
  151. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_text-overflow.scssc +0 -0
  152. data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_vendor-prefixes.scssc +0 -0
  153. data/spec/internal/tmp/cache/assets/test/sprockets/0ea779b3e0c121243bf582547101b1bf +0 -0
  154. data/spec/internal/tmp/cache/assets/test/sprockets/136ab1950eca13da4e894ff1b2b27de2 +0 -0
  155. data/spec/internal/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  156. data/spec/internal/tmp/cache/assets/test/sprockets/1966ca6fe626f223bc02aafae8d215d6 +0 -0
  157. data/spec/internal/tmp/cache/assets/test/sprockets/20933494402377b5a4ae573ec38089e3 +0 -0
  158. data/spec/internal/tmp/cache/assets/test/sprockets/21539670dc497a0e6393ad19df075b66 +0 -0
  159. data/spec/internal/tmp/cache/assets/test/sprockets/268df18aed2972da207f2e747bcf232c +0 -0
  160. data/spec/internal/tmp/cache/assets/test/sprockets/2e749ad3910712f029c8f9c22e87806b +0 -0
  161. data/spec/internal/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  162. data/spec/internal/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  163. data/spec/internal/tmp/cache/assets/test/sprockets/384e54eed00c0341519df9a625117650 +0 -0
  164. data/spec/internal/tmp/cache/assets/test/sprockets/439c2eeec401a8ab7397179ee2504ae3 +0 -0
  165. data/spec/internal/tmp/cache/assets/test/sprockets/4927f44cd4ccc2c884e82cedccde4a22 +0 -0
  166. data/spec/internal/tmp/cache/assets/test/sprockets/4a2c3a8e36587ca53b2b7e290c89b4b1 +0 -0
  167. data/spec/internal/tmp/cache/assets/test/sprockets/4b9cd5c4b234a84bbb3a69e13c83e1a4 +0 -0
  168. data/spec/internal/tmp/cache/assets/test/sprockets/4ff8d0bb5f0dcb3063b2920517715e0e +0 -0
  169. data/spec/internal/tmp/cache/assets/test/sprockets/5a064e6539708f214231ea360825b3c3 +0 -0
  170. data/spec/internal/tmp/cache/assets/test/sprockets/5e37ca964d93d3d7f4af368078665594 +0 -0
  171. data/spec/internal/tmp/cache/assets/test/sprockets/64c2e27e6730eb8be8e4037688652a29 +0 -0
  172. data/spec/internal/tmp/cache/assets/test/sprockets/6616d72225dab9428ddccc5930a08831 +0 -0
  173. data/spec/internal/tmp/cache/assets/test/sprockets/683ff1620ded8c9d80411699bafdb0ff +0 -0
  174. data/spec/internal/tmp/cache/assets/test/sprockets/69a0b39e8aec99edabb13313660e28f2 +0 -0
  175. data/spec/internal/tmp/cache/assets/test/sprockets/6cf100c049b646808cc7700f2ee3d125 +0 -0
  176. data/spec/internal/tmp/cache/assets/test/sprockets/6dc95768f586b1f6aafc2e5707c25180 +0 -0
  177. data/spec/internal/tmp/cache/assets/test/sprockets/6f546449c0ef031d9b207a3922074493 +0 -0
  178. data/spec/internal/tmp/cache/assets/test/sprockets/7048f4e2f244cc702d01c26562014d88 +0 -0
  179. data/spec/internal/tmp/cache/assets/test/sprockets/74a8e8cd6ec72e44e546b4155ef6b683 +0 -0
  180. data/spec/internal/tmp/cache/assets/test/sprockets/77ad53b1026d69b8468759e78b981bab +0 -0
  181. data/spec/internal/tmp/cache/assets/test/sprockets/81349b365a8ee3e987899f493404a773 +0 -0
  182. data/spec/internal/tmp/cache/assets/test/sprockets/82a17d90b083e4e3d65199d44611dfcf +0 -0
  183. data/spec/internal/tmp/cache/assets/test/sprockets/8c0b0cb5677cee6c8bea459404d33cc9 +0 -0
  184. data/spec/internal/tmp/cache/assets/test/sprockets/8d3af96d0accc2a659b97d5c8686b749 +0 -0
  185. data/spec/internal/tmp/cache/assets/test/sprockets/93aaa9231a32901266b05632f3d35ecd +0 -0
  186. data/spec/internal/tmp/cache/assets/test/sprockets/97be66cd58fc884d042f89a63ffca480 +0 -0
  187. data/spec/internal/tmp/cache/assets/test/sprockets/9942d6f024866931b4c6a4202eafd24f +0 -0
  188. data/spec/internal/tmp/cache/assets/test/sprockets/9c939b2d5c9084a7ab8e411f4045cdd8 +0 -0
  189. data/spec/internal/tmp/cache/assets/test/sprockets/a0d7ebce705ba4b4828c9f6792532a48 +0 -0
  190. data/spec/internal/tmp/cache/assets/test/sprockets/a43e23596cf407d9ac7eb883da3a9202 +0 -0
  191. data/spec/internal/tmp/cache/assets/test/sprockets/a792eacf67e82469b1fe83bf6fb0773d +0 -0
  192. data/spec/internal/tmp/cache/assets/test/sprockets/ac0afaf210ca89ebd3dc6798b44a923d +0 -0
  193. data/spec/internal/tmp/cache/assets/test/sprockets/ac3dd20c3079957e6543251f6c6565bc +0 -0
  194. data/spec/internal/tmp/cache/assets/test/sprockets/ac9e614f7d87003b8ef8fb55fab81db3 +0 -0
  195. data/spec/internal/tmp/cache/assets/test/sprockets/ad4a54c43c2a4c3874bfde1c9f08c248 +0 -0
  196. data/spec/internal/tmp/cache/assets/test/sprockets/b4d6f2b931b66f805dfeff1bbe3bd5ec +0 -0
  197. data/spec/internal/tmp/cache/assets/test/sprockets/b83ff1ff283372c8b643d490698ac5f2 +0 -0
  198. data/spec/internal/tmp/cache/assets/test/sprockets/bcf37edb17dbd10ffc3f86624b272a65 +0 -0
  199. data/spec/internal/tmp/cache/assets/test/sprockets/bdc6984a3b4d68f1fdcd9a88309645d2 +0 -0
  200. data/spec/internal/tmp/cache/assets/test/sprockets/beafdda6cada3ea47ad16bddbd74147e +0 -0
  201. data/spec/internal/tmp/cache/assets/test/sprockets/c336a8218b9e8beef9723db01f63bb93 +0 -0
  202. data/spec/internal/tmp/cache/assets/test/sprockets/c8297abf45d95e6b50a977ac286c4416 +0 -0
  203. data/spec/internal/tmp/cache/assets/test/sprockets/cb05c309abebfd78bfa687ea7ec893c9 +0 -0
  204. data/spec/internal/tmp/cache/assets/test/sprockets/cb6b2f5142c44b5c536e4f9974853c6a +0 -0
  205. data/spec/internal/tmp/cache/assets/test/sprockets/cba3dd7cc3802e4d5ac14a44c1846f08 +0 -0
  206. data/spec/internal/tmp/cache/assets/test/sprockets/cc1ae9d597a5f4ab4ff90b6ae37e5952 +0 -0
  207. data/spec/internal/tmp/cache/assets/test/sprockets/cff8e998f306908d16c122c3029e5b42 +0 -0
  208. data/spec/internal/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  209. data/spec/internal/tmp/cache/assets/test/sprockets/d2a9756a14b665060574742c4ea33429 +0 -0
  210. data/spec/internal/tmp/cache/assets/test/sprockets/d49ce2111c14bc8f827481d660ae2256 +0 -0
  211. data/spec/internal/tmp/cache/assets/test/sprockets/d69f621b8584a241ef83d7144b5bf05e +0 -0
  212. data/spec/internal/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  213. data/spec/internal/tmp/cache/assets/test/sprockets/d8a5d13c0222d0ed583276f64fdf6951 +0 -0
  214. data/spec/internal/tmp/cache/assets/test/sprockets/dd9f78a7dfe678c27939f19abf53d525 +0 -0
  215. data/spec/internal/tmp/cache/assets/test/sprockets/dedbb55c79535e15a1e57650e4c39659 +0 -0
  216. data/spec/internal/tmp/cache/assets/test/sprockets/df45f6613abfb235029866b5a1624150 +0 -0
  217. data/spec/internal/tmp/cache/assets/test/sprockets/dfebe186cbfff08ef68f2e4713af70a3 +0 -0
  218. data/spec/internal/tmp/cache/assets/test/sprockets/e12a325f7b89f9608f1ce67d0c8fc01c +0 -0
  219. data/spec/internal/tmp/cache/assets/test/sprockets/ea3067540ee9514e70e592a251d0ea14 +0 -0
  220. data/spec/internal/tmp/cache/assets/test/sprockets/f64fc5a7979fecfb0b31bee536ff4cbd +0 -0
  221. data/spec/internal/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  222. data/spec/internal/tmp/cache/assets/test/sprockets/fcbb570c156ad59bdcc099427cba1c4e +0 -0
  223. data/spec/internal/tmp/cache/assets/test/sprockets/ffa439acb56ac6162efb387270e055f2 +0 -0
  224. data/spec/spec_helper.rb +22 -0
  225. data/spec/test_app_templates/lib/generators/test_app_generator.rb +28 -0
  226. metadata +467 -65
  227. data/lib/tasks/blacklight_hierarchy_tasks.rake +0 -4
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5c9f090f95fb37ee74711fb756c5c4ac2ae9efb8
4
+ data.tar.gz: 189511ac1bddefc9090b031ab87952112535b70a
5
+ SHA512:
6
+ metadata.gz: f0bef2770dfe4c05c6a8e9571a256e9548e91cb4efbcd09b0134a8afdcf03128d121a7ea416947f9b542edd150b2ddcb37feed1a3ea6f622f407e4592dee2681
7
+ data.tar.gz: 945eb9c018efbe582747bd348a6ffaff1856bbf32fd6e1b56884f69ed8e39a311ff574513d949599d75626bec671bd9d8c7fec9537001682cb80d11bd381f821
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Blacklight::Hierarchy
2
+ [![Build Status](https://travis-ci.org/sul-dlss/blacklight-hierarchy.svg?branch=master)](https://travis-ci.org/sul-dlss/blacklight-hierarchy) [![Coverage Status](https://coveralls.io/repos/sul-dlss/blacklight-hierarchy/badge.png)](https://coveralls.io/r/sul-dlss/blacklight-hierarchy) [![Dependency Status](https://gemnasium.com/sul-dlss/blacklight-hierarchy.svg)](https://gemnasium.com/sul-dlss/blacklight-hierarchy) [![Gem Version](https://badge.fury.io/rb/blacklight-hierarchy.svg)](http://badge.fury.io/rb/blacklight-hierarchy)
2
3
 
3
4
  This plugin provides hierarchical facets for [Blacklight](https://github.com/projectblacklight/blacklight).
4
5
 
@@ -6,7 +7,8 @@ This plugin provides hierarchical facets for [Blacklight](https://github.com/pro
6
7
 
7
8
  Add the plugin to your Blacklight app's Gemfile
8
9
 
9
- gem 'blacklight-hierarchy', :git => 'git@github.com:sul-dlss/blacklight-hierarchy.git'
10
+ gem 'blacklight-hierarchy'
11
+ #gem 'blacklight-hierarchy', :git => 'git@github.com:sul-dlss/blacklight-hierarchy.git'
10
12
 
11
13
  Index your hierarchies in colon-separated list. For example, items in a "processing" queue with a "copy" action, might be indexed as
12
14
 
data/Rakefile CHANGED
@@ -1,9 +1,32 @@
1
1
  #!/usr/bin/env rake
2
2
  begin
3
3
  require 'bundler/setup'
4
+ Bundler::GemHelper.install_tasks
4
5
  rescue LoadError
5
6
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
7
  end
8
+
9
+ require 'engine_cart/rake_task'
10
+ TEST_APP_TEMPLATES = 'spec/test_app_templates'
11
+ TEST_APP = 'spec/internal'
12
+ #ZIP_URL = "https://github.com/projectblacklight/blacklight-jetty/archive/v4.0.0.zip"
13
+ APP_ROOT = File.expand_path("..", __FILE__)
14
+
15
+ task :default => :ci
16
+
17
+
18
+ require 'rspec/core/rake_task'
19
+
20
+ desc "Run specs"
21
+ RSpec::Core::RakeTask.new(:rspec) do |spec|
22
+ spec.rspec_opts = ["-c", "-f progress", "-r ./spec/spec_helper.rb", "-t ~wip"]
23
+ end
24
+ task :spec => :rspec
25
+
26
+
27
+ desc "Execute Continuous Integration Build"
28
+ task :ci => ['engine_cart:clean', 'engine_cart:generate', 'rspec']
29
+
7
30
  begin
8
31
  require 'rdoc/task'
9
32
  rescue LoadError
@@ -12,6 +35,7 @@ rescue LoadError
12
35
  RDoc::Task = Rake::RDocTask
13
36
  end
14
37
 
38
+ desc "Create rdoc"
15
39
  RDoc::Task.new(:rdoc) do |rdoc|
16
40
  rdoc.rdoc_dir = 'rdoc'
17
41
  rdoc.title = 'Blacklight::Hierarchy'
@@ -19,20 +43,3 @@ RDoc::Task.new(:rdoc) do |rdoc|
19
43
  rdoc.rdoc_files.include('README.rdoc')
20
44
  rdoc.rdoc_files.include('lib/**/*.rb')
21
45
  end
22
-
23
-
24
-
25
-
26
- Bundler::GemHelper.install_tasks
27
-
28
- require 'rake/testtask'
29
-
30
- Rake::TestTask.new(:test) do |t|
31
- t.libs << 'lib'
32
- t.libs << 'test'
33
- t.pattern = 'test/**/*_test.rb'
34
- t.verbose = false
35
- end
36
-
37
-
38
- task :default => :test
@@ -1,4 +1,4 @@
1
- $(document).ready(function() {
1
+ Blacklight.onLoad(function(){
2
2
  Blacklight.do_hierarchical_facet_expand_contract_behavior();
3
3
  });
4
4
 
@@ -8,6 +8,6 @@
8
8
  li {
9
9
  margin-left: 8px; } }
10
10
  li.h-node {
11
- list-style-image: asset_data_url("blacklight/hierarchy/collapsed.png"); }
11
+ list-style-image: asset_data_url("collapsed.png"); }
12
12
  li.h-node.twiddle-open {
13
- list-style-image: asset_data_url("blacklight/hierarchy/expanded.png"); } } }
13
+ list-style-image: asset_data_url("expanded.png"); } } }
@@ -1,135 +1,172 @@
1
1
  module Blacklight::HierarchyHelper
2
2
 
3
- def is_hierarchical?(field_name)
4
- (prefix,order,suffix) = field_name.split(/_/)
5
- list = blacklight_config.facet_display[:hierarchy][prefix] and list.include?(order)
6
- end
7
-
8
- def facet_order(prefix)
9
- param_name = "#{prefix}_facet_order".to_sym
10
- params[param_name] || blacklight_config.facet_display[:hierarchy][prefix].first
11
- end
3
+ # Putting bare HTML strings in a helper sucks. But in this case, with a
4
+ # lot of recursive tree-walking going on, it's an order of magnitude faster
5
+ # than either render(:partial) or content_tag
6
+ def render_facet_hierarchy_item(field_name, data, key)
7
+ item = data[:_]
8
+ subset = data.reject { |k,v| ! k.is_a?(String) }
12
9
 
13
- def facet_after(prefix, order)
14
- orders = blacklight_config.facet_display[:hierarchy][prefix]
15
- orders[orders.index(order)+1] || orders.first
16
- end
10
+ li_class = subset.empty? ? 'h-leaf' : 'h-node'
11
+ li = ul = ''
12
+
13
+ if item.nil?
14
+ li = key
15
+ elsif facet_in_params?(field_name, item.qvalue)
16
+ li = render_selected_qfacet_value(field_name, item)
17
+ else
18
+ li = render_qfacet_value(field_name, item)
19
+ end
20
+
21
+ unless subset.empty?
22
+ subul = subset.keys.sort.collect do |subkey|
23
+ render_facet_hierarchy_item(field_name, subset[subkey], subkey)
24
+ end.join('')
25
+ ul = "<ul>#{subul}</ul>".html_safe
26
+ end
27
+
28
+ %{<li class="#{li_class}">#{li.html_safe}#{ul.html_safe}</li>}.html_safe
29
+ end
17
30
 
18
- def hide_facet?(field_name)
19
- if is_hierarchical?(field_name)
20
- prefix = field_name.split(/_/).first
21
- field_name != "#{prefix}_#{facet_order(prefix)}_facet"
22
- else
23
- false
31
+ # TODO: remove baked in notion of underscores being part of the blacklight facet field names,
32
+ # and of _facet being the suffix of the Solr field name seems to be baked in.
33
+ #
34
+ # @param [Blacklight::Configuration::FacetField] as defined in controller with config.add_facet_field (and with :partial => 'blacklight/hierarchy/facet_hierarchy')
35
+ # @return [String] html for the facet tree
36
+ def render_hierarchy(bl_facet_field)
37
+ field_name = bl_facet_field.field
38
+ prefix = field_name.gsub("_#{field_name.split(/_/).last}", '')
39
+ tree = facet_tree(prefix)[field_name]
40
+ if tree
41
+ result = tree.keys.sort.collect do |key|
42
+ render_facet_hierarchy_item(field_name, tree[key], key)
43
+ end.join("\n").html_safe
44
+ else
45
+ ""
46
+ end
24
47
  end
25
- end
26
48
 
27
- def rotate_facet_value(val, from, to)
28
- components = Hash[from.split(//).zip(val.split(/:/))]
29
- new_values = components.values_at(*(to.split(//)))
30
- while new_values.last.nil?
31
- new_values.pop
49
+ def render_qfacet_value(facet_solr_field, item, options ={})
50
+ (link_to_unless(options[:suppress_link], item.value, add_facet_params(facet_solr_field, item.qvalue), :class=>"facet_select") + " " + render_facet_count(item.hits)).html_safe
32
51
  end
33
- if new_values.include?(nil)
34
- nil
35
- else
36
- new_values.compact.join(':')
52
+
53
+ # Standard display of a SELECTED facet value, no link, special span
54
+ # with class, and 'remove' button.
55
+ def render_selected_qfacet_value(facet_solr_field, item)
56
+ content_tag(:span, render_qfacet_value(facet_solr_field, item, :suppress_link => true), :class => "selected") + " " +
57
+ link_to(content_tag(:span, '', :class => "glyphicon glyphicon-remove") + content_tag(:span, '[remove]', :class => 'sr-only'), remove_facet_params(facet_solr_field, item.qvalue, params), :class=>"remove")
37
58
  end
38
- end
39
59
 
40
- def rotate_facet_params(prefix, from, to, p=params.dup)
41
- return p if from == to
42
- from_field = "#{prefix}_#{from}_facet"
43
- to_field = "#{prefix}_#{to}_facet"
44
- p[:f] = (p[:f] || {}).dup # the command above is not deep in rails3, !@#$!@#$
45
- p[:f][from_field] = (p[:f][from_field] || []).dup
46
- p[:f][to_field] = (p[:f][to_field] || []).dup
47
- p[:f][from_field].reject! { |v| p[:f][to_field] << rotate_facet_value(v, from, to); true }
48
- p[:f].delete(from_field)
49
- p[:f][to_field].compact!
50
- p[:f].delete(to_field) if p[:f][to_field].empty?
51
- p
52
- end
60
+ HierarchicalFacetItem = Struct.new :qvalue, :value, :hits
61
+
62
+ # @param [String] hkey - a key to access the rest of the hierarchy tree, as defined in controller config.facet_display[:hierarchy] declaration.
63
+ # e.g. if you had this in controller:
64
+ # config.facet_display = {
65
+ # :hierarchy => {
66
+ # 'wf' => [['wps','wsp','swp'], ':'],
67
+ # 'callnum' => [['top_facet'], '/']
68
+ # }
69
+ # }
70
+ # then possible hkey values would be 'wf' and 'callnum'
71
+ def facet_tree(hkey)
72
+ @facet_tree ||= {}
73
+ if blacklight_config.facet_display[:hierarchy] && blacklight_config.facet_display[:hierarchy][hkey]
74
+ value_delim = blacklight_config.facet_display[:hierarchy][hkey].last
75
+ split_regex = Regexp.new("\s*#{Regexp.escape(value_delim)}\s*")
76
+ if @facet_tree[hkey].nil?
77
+ @facet_tree[hkey] = {}
78
+ blacklight_config.facet_display[:hierarchy][hkey].first.each { |key|
79
+ # TODO: remove baked in notion of underscores being part of the blacklight facet field names
80
+ facet_field = [hkey,key].compact.join('_')
81
+ @facet_tree[hkey][facet_field] ||= {}
82
+ data = @response.facet_by_field_name(facet_field)
83
+ next if data.nil?
53
84
 
54
- def render_facet_rotate(field_name)
55
- if is_hierarchical?(field_name)
56
- (prefix,order,suffix) = field_name.split(/_/)
57
- new_order = facet_after(prefix,order)
58
- new_params = rotate_facet_params(prefix,order,new_order)
59
- new_params["#{prefix}_facet_order"] = new_order
60
- link_to image_tag('icons/rotate.png', :title => new_order.upcase).html_safe, new_params, :class => 'no-underline'
85
+ data.items.each { |facet_item|
86
+ path = facet_item.value.split(split_regex)
87
+ loc = @facet_tree[hkey][facet_field]
88
+ while path.length > 0
89
+ loc = loc[path.shift] ||= {}
90
+ end
91
+ loc[:_] = HierarchicalFacetItem.new(facet_item.value, facet_item.value.split(split_regex).last, facet_item.hits)
92
+ }
93
+ }
94
+ end
95
+ end
96
+ @facet_tree[hkey]
61
97
  end
62
- end
63
98
 
64
- # Putting bare HTML strings in a helper sucks. But in this case, with a
65
- # lot of recursive tree-walking going on, it's an order of magnitude faster
66
- # than either render(:partial) or content_tag
67
- def render_facet_hierarchy_item(field_name, data, key)
68
- item = data[:_]
69
- subset = data.reject { |k,v| ! k.is_a?(String) }
99
+ # --------------------------------------------------------------------------------------------------------------------------------
100
+ # below are methods pertaining to the "rotate" notion where you may want to look at the same tree data organized another way
101
+ # --------------------------------------------------------------------------------------------------------------------------------
70
102
 
71
- li_class = subset.empty? ? 'h-leaf' : 'h-node'
72
- li = ul = ''
73
-
74
- if item.nil?
75
- li = key
76
- elsif facet_in_params?(field_name, item.qvalue)
77
- li = render_selected_qfacet_value(field_name, item)
78
- else
79
- li = render_qfacet_value(field_name, item)
103
+ # FIXME: remove baked in underscore separator in field name
104
+ def is_hierarchical?(field_name)
105
+ (prefix,order) = field_name.split(/_/, 2)
106
+ list = blacklight_config.facet_display[:hierarchy][prefix] and list.include?(order)
80
107
  end
81
-
82
- unless subset.empty?
83
- subul = subset.keys.sort.collect do |subkey|
84
- render_facet_hierarchy_item(field_name, subset[subkey], subkey)
85
- end.join('')
86
- ul = "<ul>#{subul}</ul>".html_safe
108
+
109
+ def facet_order(prefix)
110
+ param_name = "#{prefix}_facet_order".to_sym
111
+ params[param_name] || blacklight_config.facet_display[:hierarchy][prefix].first
87
112
  end
88
-
89
- %{<li class="#{li_class}">#{li.html_safe}#{ul.html_safe}</li>}.html_safe
90
- end
91
113
 
92
- def render_hierarchy(field)
93
- prefix = field.field.split(/_/).first
94
- tree = facet_tree(prefix)[field.field]
95
- tree.keys.sort.collect do |key|
96
- render_facet_hierarchy_item(field.field, tree[key], key)
97
- end.join("\n").html_safe
98
- end
114
+ def facet_after(prefix, order)
115
+ orders = blacklight_config.facet_display[:hierarchy][prefix]
116
+ orders[orders.index(order)+1] || orders.first
117
+ end
99
118
 
100
- def render_qfacet_value(facet_solr_field, item, options ={})
101
- (link_to_unless(options[:suppress_link], item.value, add_facet_params(facet_solr_field, item.qvalue), :class=>"facet_select label") + " " + render_facet_count(item.hits)).html_safe
102
- end
119
+ # FIXME: remove baked in underscore separator in field name
120
+ def hide_facet?(field_name)
121
+ if is_hierarchical?(field_name)
122
+ prefix = field_name.split(/_/).first
123
+ field_name != "#{prefix}_#{facet_order(prefix)}"
124
+ else
125
+ false
126
+ end
127
+ end
128
+
129
+ # FIXME: remove baked in colon separator
130
+ def rotate_facet_value(val, from, to)
131
+ components = Hash[from.split(//).zip(val.split(/:/))]
132
+ new_values = components.values_at(*(to.split(//)))
133
+ while new_values.last.nil?
134
+ new_values.pop
135
+ end
136
+ if new_values.include?(nil)
137
+ nil
138
+ else
139
+ new_values.compact.join(':')
140
+ end
141
+ end
103
142
 
104
- # Standard display of a SELECTED facet value, no link, special span
105
- # with class, and 'remove' button.
106
- def render_selected_qfacet_value(facet_solr_field, item)
107
- content_tag(:span, render_qfacet_value(facet_solr_field, item, :suppress_link => true), :class => "selected label") +
108
- link_to("[remove]", remove_facet_params(facet_solr_field, item.qvalue, params), :class=>"remove")
143
+ # FIXME: remove baked in underscore separator in field name
144
+ def rotate_facet_params(prefix, from, to, p=params.dup)
145
+ return p if from == to
146
+ from_field = "#{prefix}_#{from}"
147
+ to_field = "#{prefix}_#{to}"
148
+ p[:f] = (p[:f] || {}).dup # the command above is not deep in rails3, !@#$!@#$
149
+ p[:f][from_field] = (p[:f][from_field] || []).dup
150
+ p[:f][to_field] = (p[:f][to_field] || []).dup
151
+ p[:f][from_field].reject! { |v| p[:f][to_field] << rotate_facet_value(v, from, to); true }
152
+ p[:f].delete(from_field)
153
+ p[:f][to_field].compact!
154
+ p[:f].delete(to_field) if p[:f][to_field].empty?
155
+ p
109
156
  end
110
157
 
111
- HierarchicalFacetItem = Struct.new :qvalue, :value, :hits
112
- def facet_tree(prefix)
113
- @facet_tree ||= {}
114
- if @facet_tree[prefix].nil?
115
- @facet_tree[prefix] = {}
116
- blacklight_config.facet_display[:hierarchy][prefix].each { |key|
117
- facet_field = [prefix,key,'facet'].compact.join('_')
118
- @facet_tree[prefix][facet_field] ||= {}
119
- data = @response.facet_by_field_name(facet_field)
120
- next if data.nil?
158
+ # FIXME: remove baked in underscore separator in field name
159
+ def render_facet_rotate(field_name)
160
+ if is_hierarchical?(field_name)
161
+ (prefix,order) = field_name.split(/_/, 2)
162
+
163
+ return if blacklight_config.facet_display[:hierarchy][prefix].length < 2
121
164
 
122
- data.items.each { |facet_item|
123
- path = facet_item.value.split(/\s*:\s*/)
124
- loc = @facet_tree[prefix][facet_field]
125
- while path.length > 0
126
- loc = loc[path.shift] ||= {}
127
- end
128
- loc[:_] = HierarchicalFacetItem.new(facet_item.value, facet_item.value.split(/\s*:\s*/).last, facet_item.hits)
129
- }
130
- }
165
+ new_order = facet_after(prefix,order)
166
+ new_params = rotate_facet_params(prefix,order,new_order)
167
+ new_params["#{prefix}_facet_order"] = new_order
168
+ link_to image_tag('icons/rotate.png', :title => new_order.upcase).html_safe, new_params, :class => 'no-underline'
169
+ end
131
170
  end
132
- @facet_tree[prefix]
133
- end
134
171
 
135
172
  end
@@ -1,6 +1,7 @@
1
- require 'blacklight/hierarchy/engine'
1
+ require 'blacklight/hierarchy/version'
2
2
 
3
3
  module Blacklight
4
4
  module Hierarchy
5
+ require 'blacklight/hierarchy/engine'
5
6
  end
6
7
  end
@@ -1,3 +1,5 @@
1
+ require 'blacklight'
2
+
1
3
  module Blacklight
2
4
  module Hierarchy
3
5
  class Engine < Rails::Engine
@@ -1,5 +1,5 @@
1
1
  module Blacklight
2
2
  module Hierarchy
3
- VERSION = "0.0.3"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -0,0 +1,12 @@
1
+ require 'rails/generators'
2
+
3
+ module BlacklightHierarchy
4
+ class Install < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+
7
+ def assets
8
+ copy_file "blacklight_hierarchy.css.scss", "app/assets/stylesheets/blacklight_hierarchy.css.scss"
9
+ copy_file "blacklight_hierarchy.js", "app/assets/javascripts/blacklight_hierarchy.js"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require blacklight/hierarchy/hierarchy
3
+ */
@@ -0,0 +1 @@
1
+ //= require blacklight/hierarchy/hierarchy