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.
- checksums.yaml +7 -0
- data/README.md +3 -1
- data/Rakefile +24 -17
- data/app/assets/{stylesheets/blacklight/hierarchy → images}/collapsed.png +0 -0
- data/app/assets/{stylesheets/blacklight/hierarchy → images}/empty_marker.png +0 -0
- data/app/assets/{stylesheets/blacklight/hierarchy → images}/expanded.png +0 -0
- data/app/assets/{stylesheets/blacklight/hierarchy → images}/minus_arrow.png +0 -0
- data/app/assets/{stylesheets/blacklight/hierarchy → images}/plus_arrow.png +0 -0
- data/app/assets/javascripts/blacklight/hierarchy/hierarchy.js +1 -1
- data/app/assets/stylesheets/blacklight/hierarchy/hierarchy.css.scss +2 -2
- data/app/helpers/blacklight/hierarchy_helper.rb +148 -111
- data/lib/blacklight/hierarchy.rb +2 -1
- data/lib/blacklight/hierarchy/engine.rb +2 -0
- data/lib/blacklight/hierarchy/version.rb +1 -1
- data/lib/generators/blacklight_hierarchy/install_generator.rb +12 -0
- data/lib/generators/blacklight_hierarchy/templates/blacklight_hierarchy.css.scss +3 -0
- data/lib/generators/blacklight_hierarchy/templates/blacklight_hierarchy.js +1 -0
- data/spec/features/basic_spec.rb +114 -0
- data/spec/helpers/hierarchy_helper_spec.rb +11 -0
- data/spec/internal/Gemfile +40 -0
- data/spec/internal/Gemfile.lock +151 -0
- data/spec/internal/README.rdoc +28 -0
- data/spec/internal/Rakefile +6 -0
- data/spec/internal/app/assets/javascripts/application.js +19 -0
- data/spec/internal/app/assets/javascripts/blacklight_hierarchy.js +1 -0
- data/spec/internal/app/assets/stylesheets/application.css +15 -0
- data/spec/internal/app/assets/stylesheets/blacklight.css.scss +5 -0
- data/spec/internal/app/assets/stylesheets/blacklight_hierarchy.css.scss +3 -0
- data/spec/internal/app/controllers/catalog_controller.rb +182 -0
- data/spec/internal/app/helpers/application_helper.rb +2 -0
- data/spec/internal/app/views/layouts/application.html.erb +14 -0
- data/spec/internal/bin/bundle +3 -0
- data/spec/internal/bin/rails +4 -0
- data/spec/internal/bin/rake +4 -0
- data/spec/internal/config.ru +4 -0
- data/spec/internal/config/application.rb +23 -0
- data/spec/internal/config/boot.rb +4 -0
- data/spec/internal/config/environment.rb +5 -0
- data/spec/internal/config/environments/development.rb +37 -0
- data/spec/internal/config/environments/production.rb +82 -0
- data/spec/internal/config/environments/test.rb +39 -0
- data/spec/internal/config/initializers/assets.rb +8 -0
- data/spec/internal/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/internal/config/initializers/blacklight_initializer.rb +7 -0
- data/spec/internal/config/initializers/cookies_serializer.rb +3 -0
- data/spec/internal/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/internal/config/initializers/inflections.rb +16 -0
- data/spec/internal/config/initializers/mime_types.rb +4 -0
- data/spec/internal/config/initializers/session_store.rb +3 -0
- data/spec/internal/config/initializers/wrap_parameters.rb +14 -0
- data/spec/internal/config/locales/blacklight.en.yml +3 -0
- data/spec/internal/config/locales/en.yml +23 -0
- data/spec/internal/config/secrets.yml +22 -0
- data/spec/internal/config/solr.yml +18 -0
- data/spec/internal/db/development.sqlite3 +0 -0
- data/spec/internal/db/migrate/20141111225552_create_searches.blacklight.rb +19 -0
- data/spec/internal/db/migrate/20141111225553_create_bookmarks.blacklight.rb +18 -0
- data/spec/internal/db/migrate/20141111225554_add_polymorphic_type_to_bookmarks.blacklight.rb +9 -0
- data/spec/internal/db/seeds.rb +7 -0
- data/spec/internal/db/test.sqlite3 +0 -0
- data/spec/internal/lib/generators/test_app_generator.rb +28 -0
- data/spec/internal/log/development.log +49 -0
- data/spec/internal/log/test.log +56 -0
- data/spec/internal/public/404.html +67 -0
- data/spec/internal/public/422.html +67 -0
- data/spec/internal/public/500.html +66 -0
- data/spec/internal/public/robots.txt +5 -0
- data/spec/internal/test/test_helper.rb +10 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_alerts.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_badges.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_breadcrumbs.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_button-groups.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_buttons.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_carousel.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_close.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_code.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_component-animations.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_dropdowns.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_forms.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_glyphicons.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_grid.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_input-groups.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_jumbotron.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_labels.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_list-group.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_media.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_mixins.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_modals.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_navbar.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_navs.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_normalize.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_pager.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_pagination.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_panels.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_popovers.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_print.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_progress-bars.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_responsive-embed.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_responsive-utilities.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_scaffolding.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_tables.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_thumbnails.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_tooltip.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_type.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_utilities.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_variables.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/359f517ba1ab8c953bbb6dc91543c3de140373f6/_wells.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/68dcee9be34904261460cf4a0e994beb05701732/blacklight.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/68dcee9be34904261460cf4a0e994beb05701732/blacklight_hierarchy.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/6d89983d04228b19fffeb0ffc236c10e9a0e1ee2/_bootstrap-sprockets.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/6d89983d04228b19fffeb0ffc236c10e9a0e1ee2/bootstrap.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_blacklight_base.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_bookmark.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_catalog.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_facets.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_group.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_header.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_layout.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_modal.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/_search_history.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/blacklight.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/8d5abc2e34d47d479bbaf9a94007cb1fbbb587fc/blacklight_defaults.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/c3fd5239c31441bb56d49be4a217da70f39ecc0a/hierarchy.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_alerts.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_background-variant.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_border-radius.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_buttons.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_center-block.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_clearfix.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_forms.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_gradients.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_grid-framework.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_grid.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_hide-text.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_image.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_labels.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_list-group.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_nav-divider.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_nav-vertical-align.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_opacity.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_pagination.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_panels.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_progress-bar.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_reset-filter.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_resize.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_responsive-visibility.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_size.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_tab-focus.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_table-row.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_text-emphasis.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_text-overflow.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/cb83b9c8b85bb3982652db91c3d946cb936820a9/_vendor-prefixes.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/0ea779b3e0c121243bf582547101b1bf +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/136ab1950eca13da4e894ff1b2b27de2 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/1966ca6fe626f223bc02aafae8d215d6 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/20933494402377b5a4ae573ec38089e3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/21539670dc497a0e6393ad19df075b66 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/268df18aed2972da207f2e747bcf232c +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/2e749ad3910712f029c8f9c22e87806b +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/384e54eed00c0341519df9a625117650 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/439c2eeec401a8ab7397179ee2504ae3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/4927f44cd4ccc2c884e82cedccde4a22 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/4a2c3a8e36587ca53b2b7e290c89b4b1 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/4b9cd5c4b234a84bbb3a69e13c83e1a4 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/4ff8d0bb5f0dcb3063b2920517715e0e +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/5a064e6539708f214231ea360825b3c3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/5e37ca964d93d3d7f4af368078665594 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/64c2e27e6730eb8be8e4037688652a29 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/6616d72225dab9428ddccc5930a08831 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/683ff1620ded8c9d80411699bafdb0ff +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/69a0b39e8aec99edabb13313660e28f2 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/6cf100c049b646808cc7700f2ee3d125 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/6dc95768f586b1f6aafc2e5707c25180 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/6f546449c0ef031d9b207a3922074493 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/7048f4e2f244cc702d01c26562014d88 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/74a8e8cd6ec72e44e546b4155ef6b683 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/77ad53b1026d69b8468759e78b981bab +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/81349b365a8ee3e987899f493404a773 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/82a17d90b083e4e3d65199d44611dfcf +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/8c0b0cb5677cee6c8bea459404d33cc9 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/8d3af96d0accc2a659b97d5c8686b749 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/93aaa9231a32901266b05632f3d35ecd +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/97be66cd58fc884d042f89a63ffca480 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/9942d6f024866931b4c6a4202eafd24f +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/9c939b2d5c9084a7ab8e411f4045cdd8 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/a0d7ebce705ba4b4828c9f6792532a48 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/a43e23596cf407d9ac7eb883da3a9202 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/a792eacf67e82469b1fe83bf6fb0773d +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/ac0afaf210ca89ebd3dc6798b44a923d +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/ac3dd20c3079957e6543251f6c6565bc +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/ac9e614f7d87003b8ef8fb55fab81db3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/ad4a54c43c2a4c3874bfde1c9f08c248 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/b4d6f2b931b66f805dfeff1bbe3bd5ec +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/b83ff1ff283372c8b643d490698ac5f2 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/bcf37edb17dbd10ffc3f86624b272a65 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/bdc6984a3b4d68f1fdcd9a88309645d2 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/beafdda6cada3ea47ad16bddbd74147e +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/c336a8218b9e8beef9723db01f63bb93 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/c8297abf45d95e6b50a977ac286c4416 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/cb05c309abebfd78bfa687ea7ec893c9 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/cb6b2f5142c44b5c536e4f9974853c6a +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/cba3dd7cc3802e4d5ac14a44c1846f08 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/cc1ae9d597a5f4ab4ff90b6ae37e5952 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/cff8e998f306908d16c122c3029e5b42 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/d2a9756a14b665060574742c4ea33429 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/d49ce2111c14bc8f827481d660ae2256 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/d69f621b8584a241ef83d7144b5bf05e +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/d8a5d13c0222d0ed583276f64fdf6951 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/dd9f78a7dfe678c27939f19abf53d525 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/dedbb55c79535e15a1e57650e4c39659 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/df45f6613abfb235029866b5a1624150 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/dfebe186cbfff08ef68f2e4713af70a3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/e12a325f7b89f9608f1ce67d0c8fc01c +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/ea3067540ee9514e70e592a251d0ea14 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/f64fc5a7979fecfb0b31bee536ff4cbd +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/fcbb570c156ad59bdcc099427cba1c4e +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/ffa439acb56ac6162efb387270e055f2 +0 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +28 -0
- metadata +467 -65
- 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'
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -8,6 +8,6 @@
|
|
8
8
|
li {
|
9
9
|
margin-left: 8px; } }
|
10
10
|
li.h-node {
|
11
|
-
list-style-image: asset_data_url("
|
11
|
+
list-style-image: asset_data_url("collapsed.png"); }
|
12
12
|
li.h-node.twiddle-open {
|
13
|
-
list-style-image: asset_data_url("
|
13
|
+
list-style-image: asset_data_url("expanded.png"); } } }
|
@@ -1,135 +1,172 @@
|
|
1
1
|
module Blacklight::HierarchyHelper
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
28
|
-
|
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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
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
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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
|
-
#
|
65
|
-
#
|
66
|
-
#
|
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
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
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
|
-
|
83
|
-
|
84
|
-
|
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
|
93
|
-
|
94
|
-
|
95
|
-
|
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
|
-
|
101
|
-
|
102
|
-
|
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
|
-
#
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
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
|
-
|
112
|
-
def
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
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
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
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
|
data/lib/blacklight/hierarchy.rb
CHANGED
@@ -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 @@
|
|
1
|
+
//= require blacklight/hierarchy/hierarchy
|