blacklight-hierarchy 0.0.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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