geoblacklight 2.3.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 (418) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +195 -0
  3. data/.github/ISSUE_TEMPLATE.md +17 -0
  4. data/.gitignore +21 -0
  5. data/.gitmodules +0 -0
  6. data/.hound.yml +8 -0
  7. data/.jshintignore +2 -0
  8. data/.jshintrc +67 -0
  9. data/.rubocop.yml +99 -0
  10. data/.rubocop_todo.yml +196 -0
  11. data/.solr_wrapper +5 -0
  12. data/CODE_OF_CONDUCT.md +76 -0
  13. data/CONTRIBUTING.md +49 -0
  14. data/Gemfile +39 -0
  15. data/LICENSE.txt +13 -0
  16. data/README.md +39 -0
  17. data/Rakefile +125 -0
  18. data/app/assets/images/blacklight/arrow-circle-down.svg +4 -0
  19. data/app/assets/images/blacklight/baruch-cuny.svg +6 -0
  20. data/app/assets/images/blacklight/berkeley.svg +7 -0
  21. data/app/assets/images/blacklight/book.svg +6 -0
  22. data/app/assets/images/blacklight/bookmark.svg +6 -0
  23. data/app/assets/images/blacklight/cd-rom.svg +6 -0
  24. data/app/assets/images/blacklight/chicago.svg +7 -0
  25. data/app/assets/images/blacklight/columbia.svg +6 -0
  26. data/app/assets/images/blacklight/cornell.svg +8 -0
  27. data/app/assets/images/blacklight/dvd-rom.svg +6 -0
  28. data/app/assets/images/blacklight/email.svg +6 -0
  29. data/app/assets/images/blacklight/esri-globe.svg +34 -0
  30. data/app/assets/images/blacklight/geoblacklight-icons.json +2079 -0
  31. data/app/assets/images/blacklight/globe.svg +4 -0
  32. data/app/assets/images/blacklight/harvard.svg +6 -0
  33. data/app/assets/images/blacklight/home.svg +4 -0
  34. data/app/assets/images/blacklight/illinois.svg +7 -0
  35. data/app/assets/images/blacklight/image.svg +6 -0
  36. data/app/assets/images/blacklight/indiana.svg +6 -0
  37. data/app/assets/images/blacklight/iowa.svg +6 -0
  38. data/app/assets/images/blacklight/leaf.svg +6 -0
  39. data/app/assets/images/blacklight/lewis-clark.svg +8 -0
  40. data/app/assets/images/blacklight/line.svg +7 -0
  41. data/app/assets/images/blacklight/logo.svg +1 -0
  42. data/app/assets/images/blacklight/map-marker.svg +6 -0
  43. data/app/assets/images/blacklight/map.svg +6 -0
  44. data/app/assets/images/blacklight/maryland.svg +6 -0
  45. data/app/assets/images/blacklight/massgis.svg +6 -0
  46. data/app/assets/images/blacklight/metadata.svg +6 -0
  47. data/app/assets/images/blacklight/michigan-state.svg +7 -0
  48. data/app/assets/images/blacklight/michigan.svg +6 -0
  49. data/app/assets/images/blacklight/minnesota.svg +6 -0
  50. data/app/assets/images/blacklight/mit.svg +6 -0
  51. data/app/assets/images/blacklight/mixed.svg +8 -0
  52. data/app/assets/images/blacklight/multilinestring.svg +9 -0
  53. data/app/assets/images/blacklight/multipoint.svg +6 -0
  54. data/app/assets/images/blacklight/multipolygon.svg +9 -0
  55. data/app/assets/images/blacklight/nyu.svg +9 -0
  56. data/app/assets/images/blacklight/ohio-state.svg +8 -0
  57. data/app/assets/images/blacklight/pagelines-brands.svg +6 -0
  58. data/app/assets/images/blacklight/paper-map.svg +6 -0
  59. data/app/assets/images/blacklight/penn-state.svg +7 -0
  60. data/app/assets/images/blacklight/point.svg +6 -0
  61. data/app/assets/images/blacklight/polygon.svg +7 -0
  62. data/app/assets/images/blacklight/polyline.svg +9 -0
  63. data/app/assets/images/blacklight/princeton.svg +6 -0
  64. data/app/assets/images/blacklight/public.svg +6 -0
  65. data/app/assets/images/blacklight/purdue.svg +7 -0
  66. data/app/assets/images/blacklight/raster.svg +6 -0
  67. data/app/assets/images/blacklight/restricted.svg +6 -0
  68. data/app/assets/images/blacklight/sms.svg +6 -0
  69. data/app/assets/images/blacklight/stanford.svg +6 -0
  70. data/app/assets/images/blacklight/table.svg +6 -0
  71. data/app/assets/images/blacklight/tags.svg +4 -0
  72. data/app/assets/images/blacklight/texas.svg +6 -0
  73. data/app/assets/images/blacklight/tufts.svg +6 -0
  74. data/app/assets/images/blacklight/ucla.svg +6 -0
  75. data/app/assets/images/blacklight/uva.svg +6 -0
  76. data/app/assets/images/blacklight/web_services.svg +6 -0
  77. data/app/assets/images/blacklight/wisconsin.svg +6 -0
  78. data/app/assets/javascripts/geoblacklight/basemaps.js +85 -0
  79. data/app/assets/javascripts/geoblacklight/controls.js +1 -0
  80. data/app/assets/javascripts/geoblacklight/controls/opacity.js +6 -0
  81. data/app/assets/javascripts/geoblacklight/downloaders.js +1 -0
  82. data/app/assets/javascripts/geoblacklight/downloaders/downloader.js +61 -0
  83. data/app/assets/javascripts/geoblacklight/downloaders/hgl_downloader.js +32 -0
  84. data/app/assets/javascripts/geoblacklight/geoblacklight.js +42 -0
  85. data/app/assets/javascripts/geoblacklight/modules.js +1 -0
  86. data/app/assets/javascripts/geoblacklight/modules/collapse.js +7 -0
  87. data/app/assets/javascripts/geoblacklight/modules/download.js +11 -0
  88. data/app/assets/javascripts/geoblacklight/modules/geosearch.js +133 -0
  89. data/app/assets/javascripts/geoblacklight/modules/help_text.js +7 -0
  90. data/app/assets/javascripts/geoblacklight/modules/home.js +16 -0
  91. data/app/assets/javascripts/geoblacklight/modules/item.js +13 -0
  92. data/app/assets/javascripts/geoblacklight/modules/layer_opacity.js +68 -0
  93. data/app/assets/javascripts/geoblacklight/modules/metadata.js +15 -0
  94. data/app/assets/javascripts/geoblacklight/modules/metadata_download_button.js +53 -0
  95. data/app/assets/javascripts/geoblacklight/modules/relations.js +14 -0
  96. data/app/assets/javascripts/geoblacklight/modules/results.js +82 -0
  97. data/app/assets/javascripts/geoblacklight/modules/util.js +38 -0
  98. data/app/assets/javascripts/geoblacklight/templates/index_map_download.hbs +19 -0
  99. data/app/assets/javascripts/geoblacklight/templates/index_map_info.hbs +40 -0
  100. data/app/assets/javascripts/geoblacklight/viewers.js +1 -0
  101. data/app/assets/javascripts/geoblacklight/viewers/esri.js +77 -0
  102. data/app/assets/javascripts/geoblacklight/viewers/esri/dynamic_map_layer.js +85 -0
  103. data/app/assets/javascripts/geoblacklight/viewers/esri/feature_layer.js +76 -0
  104. data/app/assets/javascripts/geoblacklight/viewers/esri/image_map_layer.js +14 -0
  105. data/app/assets/javascripts/geoblacklight/viewers/esri/tiled_map_layer.js +50 -0
  106. data/app/assets/javascripts/geoblacklight/viewers/iiif.js +25 -0
  107. data/app/assets/javascripts/geoblacklight/viewers/index_map.js +70 -0
  108. data/app/assets/javascripts/geoblacklight/viewers/map.js +67 -0
  109. data/app/assets/javascripts/geoblacklight/viewers/oembed.js +13 -0
  110. data/app/assets/javascripts/geoblacklight/viewers/viewer.js +65 -0
  111. data/app/assets/javascripts/geoblacklight/viewers/wms.js +74 -0
  112. data/app/assets/stylesheets/geoblacklight/_blacklight_overrides.scss +51 -0
  113. data/app/assets/stylesheets/geoblacklight/_geoblacklight.scss +36 -0
  114. data/app/assets/stylesheets/geoblacklight/_styles.scss +4 -0
  115. data/app/assets/stylesheets/geoblacklight/application.scss +2 -0
  116. data/app/assets/stylesheets/geoblacklight/modules/downloads.scss +93 -0
  117. data/app/assets/stylesheets/geoblacklight/modules/facets.scss +5 -0
  118. data/app/assets/stylesheets/geoblacklight/modules/geosearch.scss +29 -0
  119. data/app/assets/stylesheets/geoblacklight/modules/home.scss +28 -0
  120. data/app/assets/stylesheets/geoblacklight/modules/icon-customization.scss +50 -0
  121. data/app/assets/stylesheets/geoblacklight/modules/index_maps.scss +7 -0
  122. data/app/assets/stylesheets/geoblacklight/modules/item.scss +26 -0
  123. data/app/assets/stylesheets/geoblacklight/modules/layer_opacity.scss +87 -0
  124. data/app/assets/stylesheets/geoblacklight/modules/metadata.scss +31 -0
  125. data/app/assets/stylesheets/geoblacklight/modules/metadata_content.scss +43 -0
  126. data/app/assets/stylesheets/geoblacklight/modules/metadata_markup.scss +9 -0
  127. data/app/assets/stylesheets/geoblacklight/modules/metadata_missing.scss +7 -0
  128. data/app/assets/stylesheets/geoblacklight/modules/mixins.scss +5 -0
  129. data/app/assets/stylesheets/geoblacklight/modules/modal.scss +14 -0
  130. data/app/assets/stylesheets/geoblacklight/modules/relations.scss +15 -0
  131. data/app/assets/stylesheets/geoblacklight/modules/results.scss +68 -0
  132. data/app/assets/stylesheets/geoblacklight/modules/search_widgets.scss +5 -0
  133. data/app/assets/stylesheets/geoblacklight/modules/sidebar.scss +60 -0
  134. data/app/assets/stylesheets/geoblacklight/modules/toolbar.scss +70 -0
  135. data/app/assets/stylesheets/geoblacklight/modules/web_services.scss +5 -0
  136. data/app/controllers/download_controller.rb +114 -0
  137. data/app/controllers/relation_controller.rb +20 -0
  138. data/app/controllers/wms_controller.rb +15 -0
  139. data/app/helpers/arcgis_helper.rb +12 -0
  140. data/app/helpers/blacklight_helper.rb +9 -0
  141. data/app/helpers/carto_helper.rb +29 -0
  142. data/app/helpers/geoblacklight_helper.rb +323 -0
  143. data/app/models/concerns/geoblacklight/solr_document.rb +113 -0
  144. data/app/models/concerns/geoblacklight/solr_document/arcgis.rb +10 -0
  145. data/app/models/concerns/geoblacklight/solr_document/carto.rb +28 -0
  146. data/app/models/concerns/geoblacklight/solr_document/finder.rb +38 -0
  147. data/app/models/concerns/geoblacklight/solr_document/inspection.rb +15 -0
  148. data/app/models/concerns/geoblacklight/spatial_search_behavior.rb +69 -0
  149. data/app/presenters/geoblacklight/document_presenter.rb +23 -0
  150. data/app/views/catalog/_data_dictionary.html.erb +6 -0
  151. data/app/views/catalog/_document_action.html.erb +6 -0
  152. data/app/views/catalog/_document_split.html.erb +6 -0
  153. data/app/views/catalog/_download_generated_link.html.erb +4 -0
  154. data/app/views/catalog/_download_link.html.erb +3 -0
  155. data/app/views/catalog/_downloads_generated.html.erb +6 -0
  156. data/app/views/catalog/_downloads_primary.html.erb +14 -0
  157. data/app/views/catalog/_downloads_secondary.html.erb +39 -0
  158. data/app/views/catalog/_exports.html.erb +3 -0
  159. data/app/views/catalog/_facet_tag_item.html.erb +3 -0
  160. data/app/views/catalog/_facet_tag_layout.html.erb +2 -0
  161. data/app/views/catalog/_header_icons.html.erb +3 -0
  162. data/app/views/catalog/_home_text.html.erb +43 -0
  163. data/app/views/catalog/_icon_facet.html.erb +16 -0
  164. data/app/views/catalog/_index_split_default.html.erb +22 -0
  165. data/app/views/catalog/_metadata.html.erb +27 -0
  166. data/app/views/catalog/_relations_container.html.erb +1 -0
  167. data/app/views/catalog/_results_pagination.html.erb +12 -0
  168. data/app/views/catalog/_show_default_attribute_table.html.erb +19 -0
  169. data/app/views/catalog/_show_default_viewer_container.html.erb +12 -0
  170. data/app/views/catalog/_show_default_viewer_information.html.erb +4 -0
  171. data/app/views/catalog/_show_downloads.html.erb +34 -0
  172. data/app/views/catalog/_show_header_default.html.erb +4 -0
  173. data/app/views/catalog/_show_sidebar.html.erb +12 -0
  174. data/app/views/catalog/_show_tools.html.erb +25 -0
  175. data/app/views/catalog/_web_services.html.erb +8 -0
  176. data/app/views/catalog/_web_services_default.html.erb +8 -0
  177. data/app/views/catalog/_web_services_wfs.html.erb +8 -0
  178. data/app/views/catalog/_web_services_wms.html.erb +8 -0
  179. data/app/views/catalog/index.html.erb +13 -0
  180. data/app/views/catalog/metadata.html.erb +11 -0
  181. data/app/views/catalog/metadata/_content.html.erb +3 -0
  182. data/app/views/catalog/metadata/_markup.html.erb +8 -0
  183. data/app/views/catalog/metadata/_missing.html.erb +6 -0
  184. data/app/views/catalog/web_services.html.erb +10 -0
  185. data/app/views/download/hgl.html.erb +25 -0
  186. data/app/views/relation/_ancestors.html.erb +11 -0
  187. data/app/views/relation/_descendants.html.erb +18 -0
  188. data/app/views/relation/index.html.erb +13 -0
  189. data/app/views/relation/index.json.jbuilder +3 -0
  190. data/app/views/shared/_header_navbar.html.erb +38 -0
  191. data/config/initializers/rails_config.rb +3 -0
  192. data/config/locales/geoblacklight.en.yml +163 -0
  193. data/geoblacklight.gemspec +49 -0
  194. data/lib/generators/geoblacklight/install_generator.rb +105 -0
  195. data/lib/generators/geoblacklight/templates/Procfile +3 -0
  196. data/lib/generators/geoblacklight/templates/catalog_controller.rb +272 -0
  197. data/lib/generators/geoblacklight/templates/geoblacklight.js +10 -0
  198. data/lib/generators/geoblacklight/templates/geoblacklight.scss +4 -0
  199. data/lib/generators/geoblacklight/templates/package.json +14 -0
  200. data/lib/generators/geoblacklight/templates/settings.yml +127 -0
  201. data/lib/generators/geoblacklight/templates/webpacker.yml +67 -0
  202. data/lib/generators/geoblacklight/webpacker_generator.rb +35 -0
  203. data/lib/geoblacklight.rb +50 -0
  204. data/lib/geoblacklight/bounding_box.rb +45 -0
  205. data/lib/geoblacklight/catalog_helper_override.rb +13 -0
  206. data/lib/geoblacklight/constants.rb +28 -0
  207. data/lib/geoblacklight/download.rb +108 -0
  208. data/lib/geoblacklight/download/geojson_download.rb +22 -0
  209. data/lib/geoblacklight/download/geotiff_download.rb +20 -0
  210. data/lib/geoblacklight/download/hgl_download.rb +18 -0
  211. data/lib/geoblacklight/download/kmz_download.rb +22 -0
  212. data/lib/geoblacklight/download/shapefile_download.rb +20 -0
  213. data/lib/geoblacklight/engine.rb +27 -0
  214. data/lib/geoblacklight/exceptions.rb +27 -0
  215. data/lib/geoblacklight/geoblacklight_helper_behavior.rb +14 -0
  216. data/lib/geoblacklight/item_viewer.rb +54 -0
  217. data/lib/geoblacklight/metadata.rb +18 -0
  218. data/lib/geoblacklight/metadata/base.rb +93 -0
  219. data/lib/geoblacklight/metadata/fgdc.rb +14 -0
  220. data/lib/geoblacklight/metadata/html.rb +13 -0
  221. data/lib/geoblacklight/metadata/iso19139.rb +14 -0
  222. data/lib/geoblacklight/metadata_transformer.rb +33 -0
  223. data/lib/geoblacklight/metadata_transformer/base.rb +42 -0
  224. data/lib/geoblacklight/metadata_transformer/fgdc.rb +8 -0
  225. data/lib/geoblacklight/metadata_transformer/iso19139.rb +8 -0
  226. data/lib/geoblacklight/reference.rb +45 -0
  227. data/lib/geoblacklight/references.rb +132 -0
  228. data/lib/geoblacklight/relation/ancestors.rb +27 -0
  229. data/lib/geoblacklight/relation/descendants.rb +27 -0
  230. data/lib/geoblacklight/relation/relation_response.rb +24 -0
  231. data/lib/geoblacklight/routes.rb +7 -0
  232. data/lib/geoblacklight/routes/downloadable.rb +14 -0
  233. data/lib/geoblacklight/routes/exportable.rb +17 -0
  234. data/lib/geoblacklight/routes/wms.rb +13 -0
  235. data/lib/geoblacklight/version.rb +3 -0
  236. data/lib/geoblacklight/view_helper_override.rb +40 -0
  237. data/lib/geoblacklight/wms_layer.rb +35 -0
  238. data/lib/geoblacklight/wms_layer/feature_info_response.rb +32 -0
  239. data/lib/tasks/geoblacklight.rake +108 -0
  240. data/package.json +4 -0
  241. data/schema/format-values.md +50 -0
  242. data/schema/geoblacklight-schema-deprecated.md +39 -0
  243. data/schema/geoblacklight-schema.json +214 -0
  244. data/schema/geoblacklight-schema.md +323 -0
  245. data/schema/geometry-type-values.md +11 -0
  246. data/schema/references.md +23 -0
  247. data/schema/schema-commentary.md +198 -0
  248. data/schema/subjects.md +41 -0
  249. data/schema/type-values.md +10 -0
  250. data/solr/conf/_rest_managed.json +3 -0
  251. data/solr/conf/admin-extra.html +31 -0
  252. data/solr/conf/core.properties +5 -0
  253. data/solr/conf/elevate.xml +36 -0
  254. data/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
  255. data/solr/conf/protwords.txt +21 -0
  256. data/solr/conf/schema.xml +198 -0
  257. data/solr/conf/scripts.conf +24 -0
  258. data/solr/conf/solrconfig.xml +243 -0
  259. data/solr/conf/spellings.txt +2 -0
  260. data/solr/conf/stopwords.txt +58 -0
  261. data/solr/conf/stopwords_en.txt +58 -0
  262. data/solr/conf/synonyms.txt +31 -0
  263. data/solr/conf/xslt/example.xsl +132 -0
  264. data/solr/conf/xslt/example_atom.xsl +67 -0
  265. data/solr/conf/xslt/example_rss.xsl +66 -0
  266. data/solr/conf/xslt/luke.xsl +337 -0
  267. data/spec/controllers/catalog_controller_spec.rb +82 -0
  268. data/spec/controllers/download_controller_spec.rb +120 -0
  269. data/spec/controllers/relation_controller_spec.rb +11 -0
  270. data/spec/controllers/wms_controller_spec.rb +34 -0
  271. data/spec/factories/user.rb +7 -0
  272. data/spec/features/bookmarks_spec.rb +10 -0
  273. data/spec/features/configurable_basemap_spec.rb +35 -0
  274. data/spec/features/data_dictionary_download_spec.rb +16 -0
  275. data/spec/features/download_layer_spec.rb +93 -0
  276. data/spec/features/empty_search_spec.rb +11 -0
  277. data/spec/features/esri_viewer_spec.rb +42 -0
  278. data/spec/features/exports_spec.rb +36 -0
  279. data/spec/features/help_text_spec.rb +8 -0
  280. data/spec/features/home_page_spec.rb +40 -0
  281. data/spec/features/iiif_viewer_spec.rb +8 -0
  282. data/spec/features/index_map_spec.rb +31 -0
  283. data/spec/features/layer_inspection_spec.rb +10 -0
  284. data/spec/features/layer_opacity_spec.rb +20 -0
  285. data/spec/features/layer_preview_spec.rb +17 -0
  286. data/spec/features/layer_with_no_references_spec.rb +8 -0
  287. data/spec/features/linkified_attribute_table_spec.rb +11 -0
  288. data/spec/features/metadata_panel_spec.rb +78 -0
  289. data/spec/features/missing_metadata_spec.rb +24 -0
  290. data/spec/features/oembed_spec.rb +9 -0
  291. data/spec/features/relations_spec.rb +51 -0
  292. data/spec/features/saved_searches_spec.rb +13 -0
  293. data/spec/features/search_bar_spec.rb +12 -0
  294. data/spec/features/search_results_map_spec.rb +55 -0
  295. data/spec/features/search_results_overlap_ratio_spec.rb +55 -0
  296. data/spec/features/search_spec.rb +14 -0
  297. data/spec/features/show_page_metadata_spec.rb +12 -0
  298. data/spec/features/sms_spec.rb +15 -0
  299. data/spec/features/split_view.html.erb_spec.rb +75 -0
  300. data/spec/features/suppressed_records_spec.rb +14 -0
  301. data/spec/features/web_services_modal_spec.rb +25 -0
  302. data/spec/fixtures/fgdc/harvard-g7064-s2-1834-k3.xml +1 -0
  303. data/spec/fixtures/iso19139/stanford-cg357zz0321.xml +581 -0
  304. data/spec/fixtures/mods/fb897vt9938.mods +111 -0
  305. data/spec/fixtures/mods/stanford-cg357zz0321.mods +113 -0
  306. data/spec/fixtures/solr_documents/README.md +40 -0
  307. data/spec/fixtures/solr_documents/actual-papermap1.json +23 -0
  308. data/spec/fixtures/solr_documents/actual-point1.json +37 -0
  309. data/spec/fixtures/solr_documents/actual-polygon1.json +23 -0
  310. data/spec/fixtures/solr_documents/actual-raster1.json +38 -0
  311. data/spec/fixtures/solr_documents/baruch_ancestor1.json +46 -0
  312. data/spec/fixtures/solr_documents/baruch_ancestor2.json +46 -0
  313. data/spec/fixtures/solr_documents/baruch_documentation_download.json +49 -0
  314. data/spec/fixtures/solr_documents/bbox-spans-180.json +20 -0
  315. data/spec/fixtures/solr_documents/cornell_html_metadata.json +42 -0
  316. data/spec/fixtures/solr_documents/esri-dynamic-layer-all-layers.json +38 -0
  317. data/spec/fixtures/solr_documents/esri-dynamic-layer-single-layer.json +40 -0
  318. data/spec/fixtures/solr_documents/esri-feature-layer.json +46 -0
  319. data/spec/fixtures/solr_documents/esri-image-map-layer.json +42 -0
  320. data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +22 -0
  321. data/spec/fixtures/solr_documents/esri-wms-layer.json +33 -0
  322. data/spec/fixtures/solr_documents/harvard_raster.json +44 -0
  323. data/spec/fixtures/solr_documents/iiif-eastern-hemisphere.json +30 -0
  324. data/spec/fixtures/solr_documents/index-map-polygon-no-downloadurl.json +37 -0
  325. data/spec/fixtures/solr_documents/index-map-polygon.json +37 -0
  326. data/spec/fixtures/solr_documents/index-map-stanford.json +37 -0
  327. data/spec/fixtures/solr_documents/index_map_point.json +27 -0
  328. data/spec/fixtures/solr_documents/metadata_no_dct_provenance_s.json +30 -0
  329. data/spec/fixtures/solr_documents/metadata_no_layer_geom_type_s.json +17 -0
  330. data/spec/fixtures/solr_documents/metadata_no_solr_geom.json +23 -0
  331. data/spec/fixtures/solr_documents/no_spatial.json +21 -0
  332. data/spec/fixtures/solr_documents/oembed.json +24 -0
  333. data/spec/fixtures/solr_documents/princeton-child1.json +30 -0
  334. data/spec/fixtures/solr_documents/princeton-child2.json +30 -0
  335. data/spec/fixtures/solr_documents/princeton-child3.json +30 -0
  336. data/spec/fixtures/solr_documents/princeton-child4.json +30 -0
  337. data/spec/fixtures/solr_documents/princeton-parent.json +25 -0
  338. data/spec/fixtures/solr_documents/public_direct_download.json +34 -0
  339. data/spec/fixtures/solr_documents/public_iiif_princeton.json +36 -0
  340. data/spec/fixtures/solr_documents/public_polygon_mit.json +27 -0
  341. data/spec/fixtures/solr_documents/restricted-line.json +37 -0
  342. data/spec/fixtures/solr_documents/umn_metro_result1.json +41 -0
  343. data/spec/fixtures/solr_documents/umn_state_result1.json +38 -0
  344. data/spec/fixtures/solr_documents/umn_state_result2.json +38 -0
  345. data/spec/fixtures/solr_documents/uva_slug_colon.json +25 -0
  346. data/spec/helpers/arcgis_helper_spec.rb +14 -0
  347. data/spec/helpers/carto_helper_spec.rb +11 -0
  348. data/spec/helpers/geoblacklight_helper_spec.rb +329 -0
  349. data/spec/javascripts/geoblacklight_spec.js +21 -0
  350. data/spec/javascripts/metadata_download_button_spec.js +14 -0
  351. data/spec/javascripts/spec_helper.js +32 -0
  352. data/spec/javascripts/util_spec.js +12 -0
  353. data/spec/lib/geoblacklight/bounding_box_spec.rb +27 -0
  354. data/spec/lib/geoblacklight/controller_override_spec.rb +1 -0
  355. data/spec/lib/geoblacklight/document_presenter_spec.rb +61 -0
  356. data/spec/lib/geoblacklight/download/geojson_download_spec.rb +19 -0
  357. data/spec/lib/geoblacklight/download/geotiff_download_spec.rb +20 -0
  358. data/spec/lib/geoblacklight/download/hgl_download_spec.rb +60 -0
  359. data/spec/lib/geoblacklight/download/kmz_download_spec.rb +20 -0
  360. data/spec/lib/geoblacklight/download/shapefile_download_spec.rb +19 -0
  361. data/spec/lib/geoblacklight/download_spec.rb +177 -0
  362. data/spec/lib/geoblacklight/geoblacklight_helper_behavior_spec.rb +30 -0
  363. data/spec/lib/geoblacklight/item_viewer_spec.rb +63 -0
  364. data/spec/lib/geoblacklight/metadata/base_spec.rb +157 -0
  365. data/spec/lib/geoblacklight/metadata/html_spec.rb +18 -0
  366. data/spec/lib/geoblacklight/metadata_spec.rb +42 -0
  367. data/spec/lib/geoblacklight/metadata_transformer/base_spec.rb +35 -0
  368. data/spec/lib/geoblacklight/metadata_transformer/fgdc_spec.rb +23 -0
  369. data/spec/lib/geoblacklight/metadata_transformer/iso19139_spec.rb +23 -0
  370. data/spec/lib/geoblacklight/metadata_transformer_spec.rb +69 -0
  371. data/spec/lib/geoblacklight/reference_spec.rb +64 -0
  372. data/spec/lib/geoblacklight/references_spec.rb +216 -0
  373. data/spec/lib/geoblacklight/relation/ancestors_spec.rb +32 -0
  374. data/spec/lib/geoblacklight/relation/descendants_spec.rb +32 -0
  375. data/spec/lib/geoblacklight/relation/relation_response_spec.rb +43 -0
  376. data/spec/lib/geoblacklight/view_helper_override_spec.rb +37 -0
  377. data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +50 -0
  378. data/spec/lib/geoblacklight/wms_layer_spec.rb +99 -0
  379. data/spec/models/concerns/geoblacklight/solr_document/carto_spec.rb +61 -0
  380. data/spec/models/concerns/geoblacklight/solr_document/finder_spec.rb +40 -0
  381. data/spec/models/concerns/geoblacklight/solr_document/inspection_spec.rb +16 -0
  382. data/spec/models/concerns/geoblacklight/solr_document_spec.rb +251 -0
  383. data/spec/models/concerns/geoblacklight/spatial_search_behavior_spec.rb +84 -0
  384. data/spec/routing/catalog_routing_spec.rb +8 -0
  385. data/spec/spec_helper.rb +79 -0
  386. data/spec/support/backport_test_helpers.rb +45 -0
  387. data/spec/support/features.rb +5 -0
  388. data/spec/support/features/session_helpers.rb +20 -0
  389. data/spec/teaspoon_env.rb +213 -0
  390. data/spec/test_app_templates/Gemfile.extra +1 -0
  391. data/spec/test_app_templates/lib/generators/test_app_generator.rb +49 -0
  392. data/spec/test_app_templates/metadata/fgdc.html +129 -0
  393. data/spec/test_app_templates/metadata/fgdc.xml +145 -0
  394. data/spec/test_app_templates/metadata/iso.html +275 -0
  395. data/spec/test_app_templates/metadata/iso.xml +511 -0
  396. data/spec/test_app_templates/solr_documents +1 -0
  397. data/spec/views/catalog/_document_split.html.erb_spec.rb +5 -0
  398. data/spec/views/catalog/_index_split.html.erb_spec.rb +5 -0
  399. data/spec/views/catalog/_results_pagination.html.erb_spec.rb +9 -0
  400. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +41 -0
  401. data/spec/views/catalog/_show_tools.html.erb_spec.rb +39 -0
  402. data/template.rb +19 -0
  403. data/vendor/assets/images/layers-2x.png +0 -0
  404. data/vendor/assets/images/layers.png +0 -0
  405. data/vendor/assets/images/marker-icon-2x.png +0 -0
  406. data/vendor/assets/images/marker-icon.png +0 -0
  407. data/vendor/assets/images/marker-shadow.png +0 -0
  408. data/vendor/assets/javascripts/esri-leaflet.js +5 -0
  409. data/vendor/assets/javascripts/esri-leaflet.js.map +1 -0
  410. data/vendor/assets/javascripts/leaflet-iiif.js +302 -0
  411. data/vendor/assets/javascripts/leaflet-src.js.map +1 -0
  412. data/vendor/assets/javascripts/leaflet.js.erb +13922 -0
  413. data/vendor/assets/javascripts/native.history.js +1 -0
  414. data/vendor/assets/javascripts/readmore.js +618 -0
  415. data/vendor/assets/javascripts/readmore.js.map +1 -0
  416. data/vendor/assets/stylesheets/leaflet-label.css +54 -0
  417. data/vendor/assets/stylesheets/leaflet.css +635 -0
  418. metadata +967 -0
@@ -0,0 +1,67 @@
1
+ # Note: You must restart bin/webpack-dev-server for changes to take effect
2
+
3
+ default: &default
4
+ source_path: app/javascript
5
+ source_entry_path: packs
6
+ public_output_path: packs
7
+ cache_path: tmp/cache/webpacker
8
+
9
+ # Additional paths webpack should lookup modules
10
+ # ['app/assets', 'engine/foo/app/assets']
11
+ resolved_paths: []
12
+
13
+ # Reload manifest.json on all requests so we reload latest compiled packs
14
+ cache_manifest: false
15
+
16
+ extensions:
17
+ - .js
18
+ - .sass
19
+ - .scss
20
+ - .css
21
+ - .module.sass
22
+ - .module.scss
23
+ - .module.css
24
+ - .png
25
+ - .svg
26
+ - .gif
27
+ - .jpeg
28
+ - .jpg
29
+
30
+ development: &development
31
+ <<: *default
32
+ compile: true
33
+
34
+ # Reference: https://webpack.js.org/configuration/dev-server/
35
+ dev_server:
36
+ https: false
37
+ host: localhost
38
+ port: 3035
39
+ public: localhost:3035
40
+ hmr: false
41
+ # Inline should be set to true if using HMR
42
+ inline: true
43
+ overlay: true
44
+ compress: true
45
+ disable_host_check: true
46
+ use_local_ip: false
47
+ quiet: false
48
+ headers:
49
+ 'Access-Control-Allow-Origin': '*'
50
+ watch_options:
51
+ ignored: /node_modules/
52
+
53
+
54
+ test:
55
+ <<: *development
56
+
57
+ # Compile test packs to a separate directory
58
+ public_output_path: packs-test
59
+
60
+ production:
61
+ <<: *default
62
+
63
+ # Production depends on precompilation of packs prior to booting for performance.
64
+ compile: false
65
+
66
+ # Cache manifest.json for performance
67
+ cache_manifest: true
@@ -0,0 +1,35 @@
1
+ require 'rails/generators'
2
+
3
+ module Geoblacklight
4
+ class Webpacker < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+
7
+ desc 'Integrate Webpacker for GeoBlacklight'
8
+
9
+ def webpacker_install
10
+ run 'bundle exec rails webpacker:install'
11
+ end
12
+
13
+ def webpacker_config
14
+ copy_file 'webpacker.yml', 'config/webpacker.yml'
15
+ end
16
+
17
+ def procfile
18
+ copy_file 'Procfile', 'Procfile'
19
+ end
20
+
21
+ def javascript_install
22
+ # This overrides the default dependencies specified using
23
+ # webpacker:install
24
+ copy_file 'package.json', 'package.json'
25
+ yarn_available = system('yarn --version')
26
+ if yarn_available
27
+ run 'yarn install'
28
+ run 'yarn upgrade'
29
+ else
30
+ run 'npm install'
31
+ run 'npm update'
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,50 @@
1
+ require 'active_support/dependencies'
2
+ require 'geoblacklight/engine'
3
+
4
+ module Geoblacklight
5
+ require 'geoblacklight/bounding_box'
6
+ require 'geoblacklight/catalog_helper_override'
7
+ require 'geoblacklight/constants'
8
+ # require 'geoblacklight/controller_override'
9
+ require 'geoblacklight/exceptions'
10
+ require 'geoblacklight/geoblacklight_helper_behavior'
11
+ require 'geoblacklight/view_helper_override'
12
+ require 'geoblacklight/item_viewer'
13
+ require 'geoblacklight/wms_layer'
14
+ require 'geoblacklight/wms_layer/feature_info_response'
15
+ require 'geoblacklight/download'
16
+ require 'geoblacklight/download/geojson_download'
17
+ require 'geoblacklight/download/geotiff_download'
18
+ require 'geoblacklight/download/kmz_download'
19
+ require 'geoblacklight/download/shapefile_download'
20
+ require 'geoblacklight/download/hgl_download'
21
+ require 'geoblacklight/metadata'
22
+ require 'geoblacklight/metadata/base'
23
+ require 'geoblacklight/metadata/fgdc'
24
+ require 'geoblacklight/metadata/html'
25
+ require 'geoblacklight/metadata/iso19139'
26
+ require 'geoblacklight/metadata_transformer'
27
+ require 'geoblacklight/metadata_transformer/base'
28
+ require 'geoblacklight/metadata_transformer/fgdc'
29
+ require 'geoblacklight/metadata_transformer/iso19139'
30
+ require 'geoblacklight/reference'
31
+ require 'geoblacklight/references'
32
+ require 'geoblacklight/routes'
33
+ require 'geoblacklight/relation/descendants'
34
+ require 'geoblacklight/relation/ancestors'
35
+ require 'geoblacklight/relation/relation_response'
36
+
37
+ def self.inject!
38
+ # CatalogController.send(:include, Geoblacklight::ControllerOverride)
39
+ CatalogController.send(:include, Geoblacklight::CatalogHelperOverride)
40
+ CatalogController.send(:include, Geoblacklight::ViewHelperOverride)
41
+ CatalogController.send(:helper, Geoblacklight::ViewHelperOverride) unless
42
+ CatalogController.helpers.is_a?(Geoblacklight::ViewHelperOverride)
43
+ SearchHistoryController.send(:helper, Geoblacklight::ViewHelperOverride) unless
44
+ SearchHistoryController.helpers.is_a?(Geoblacklight::ViewHelperOverride)
45
+ end
46
+
47
+ def self.logger
48
+ ::Rails.logger
49
+ end
50
+ end
@@ -0,0 +1,45 @@
1
+ module Geoblacklight
2
+ ##
3
+ # Transforms and parses a bounding box for various formats
4
+ class BoundingBox
5
+ ##
6
+ # @param [String, Integer, Float] west
7
+ # @param [String, Integer, Float] south
8
+ # @param [String, Integer, Float] east
9
+ # @param [String, Integer, Float] north
10
+ def initialize(west, south, east, north)
11
+ @west = west
12
+ @south = south
13
+ @east = east
14
+ @north = north
15
+ # TODO: check for valid Geometry and raise if not
16
+ end
17
+
18
+ ##
19
+ # Returns a bounding box in ENVELOPE syntax
20
+ # @return [String]
21
+ def to_envelope
22
+ "ENVELOPE(#{west}, #{east}, #{north}, #{south})"
23
+ end
24
+
25
+ ##
26
+ # Create a Geoblacklight::BoundingBox from a Solr rectangle syntax
27
+ # @param [String] bbox as "W S E N"
28
+ # @return [Geoblacklight::BoundingBox]
29
+ def self.from_rectangle(rectangle)
30
+ rectangle_array = rectangle.split(' ')
31
+ message = 'Bounding box should be a string in Solr rectangle syntax e.g."W S E N"'
32
+ fail Geoblacklight::Exceptions::WrongBoundingBoxFormat, message if rectangle_array.count != 4
33
+ new(
34
+ rectangle_array[0],
35
+ rectangle_array[1],
36
+ rectangle_array[2],
37
+ rectangle_array[3]
38
+ )
39
+ end
40
+
41
+ private
42
+
43
+ attr_reader :west, :south, :east, :north
44
+ end
45
+ end
@@ -0,0 +1,13 @@
1
+ module Geoblacklight
2
+ module CatalogHelperOverride
3
+ ##
4
+ # Removes spatial query from params
5
+ # @param [Symbol] symbol of field to be removed
6
+ # @param [Hash] request parameters
7
+ def remove_spatial_filter_group(field, source_params = params)
8
+ p = source_params.dup
9
+ p.delete(field.to_s)
10
+ p
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ module Geoblacklight
2
+ # Module to declare application level constants and lookup hash
3
+ module Constants
4
+ URI = {
5
+ download: 'http://schema.org/downloadUrl',
6
+ fgdc: 'http://www.opengis.net/cat/csw/csdgm',
7
+ geojson: 'http://geojson.org/geojson-spec.html',
8
+ html: 'http://www.w3.org/1999/xhtml',
9
+ iiif: 'http://iiif.io/api/image',
10
+ iiif_manifest: 'http://iiif.io/api/presentation#manifest',
11
+ iso19139: 'http://www.isotc211.org/schemas/2005/gmd',
12
+ mods: 'http://www.loc.gov/mods/v3',
13
+ shapefile: 'http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf',
14
+ url: 'http://schema.org/url',
15
+ wcs: 'http://www.opengis.net/def/serviceType/ogc/wcs',
16
+ wfs: 'http://www.opengis.net/def/serviceType/ogc/wfs',
17
+ wms: 'http://www.opengis.net/def/serviceType/ogc/wms',
18
+ hgl: 'http://schema.org/DownloadAction',
19
+ feature_layer: 'urn:x-esri:serviceType:ArcGIS#FeatureLayer',
20
+ tiled_map_layer: 'urn:x-esri:serviceType:ArcGIS#TiledMapLayer',
21
+ dynamic_map_layer: 'urn:x-esri:serviceType:ArcGIS#DynamicMapLayer',
22
+ image_map_layer: 'urn:x-esri:serviceType:ArcGIS#ImageMapLayer',
23
+ data_dictionary: 'http://lccn.loc.gov/sh85035852',
24
+ index_map: 'https://openindexmaps.org',
25
+ oembed: 'https://oembed.com'
26
+ }.freeze
27
+ end
28
+ end
@@ -0,0 +1,108 @@
1
+ module Geoblacklight
2
+ class Download
3
+ def initialize(document, options = {})
4
+ @document = document
5
+ @options = options
6
+ end
7
+
8
+ def downloadable?
9
+ @document.downloadable?
10
+ end
11
+
12
+ def file_name
13
+ "#{@document.id}-#{@options[:type]}.#{@options[:extension]}"
14
+ end
15
+
16
+ def self.file_path
17
+ Settings.DOWNLOAD_PATH || "#{Rails.root}/tmp/cache/downloads"
18
+ end
19
+
20
+ def file_path_and_name
21
+ "#{self.class.file_path}/#{file_name}"
22
+ end
23
+
24
+ def download_exists?
25
+ File.file?(file_path_and_name)
26
+ end
27
+
28
+ def get
29
+ if download_exists?
30
+ file_name
31
+ else
32
+ create_download_file
33
+ end
34
+ end
35
+
36
+ ##
37
+ # Creates temporary file on file system and renames it if download completes
38
+ # successfully. Will raise and rescue if the wrong file format is downloaded
39
+ # @return [String] filename of the completed download
40
+ def create_download_file
41
+ download = initiate_download
42
+
43
+ File.open("#{file_path_and_name}.tmp", 'wb') do |file|
44
+ fail Geoblacklight::Exceptions::WrongDownloadFormat unless matches_mimetype?(download)
45
+ file.write download.body
46
+ end
47
+ File.rename("#{file_path_and_name}.tmp", file_path_and_name)
48
+ file_name
49
+ rescue Geoblacklight::Exceptions::WrongDownloadFormat => error
50
+ Geoblacklight.logger.error "#{error} expected #{@options[:content_type]} "\
51
+ "received #{download.headers['content-type']}"
52
+ File.delete("#{file_path_and_name}.tmp")
53
+ raise Geoblacklight::Exceptions::ExternalDownloadFailed, message: 'Wrong download type'
54
+ end
55
+
56
+ ##
57
+ # Initiates download from a remote source url using the `request_params`.
58
+ # Will catch Faraday::ConnectionFailed and
59
+ # Faraday::TimeoutError
60
+ # @return [Faraday::Request] returns a Faraday::Request object
61
+ def initiate_download
62
+ conn = Faraday.new(url: url)
63
+ conn.get do |request|
64
+ request.params = @options[:request_params]
65
+ request.options.timeout = timeout
66
+ request.options.open_timeout = timeout
67
+ end
68
+ rescue Faraday::ConnectionFailed
69
+ raise Geoblacklight::Exceptions::ExternalDownloadFailed,
70
+ message: 'Download connection failed',
71
+ url: conn.url_prefix.to_s
72
+ rescue Faraday::TimeoutError
73
+ raise Geoblacklight::Exceptions::ExternalDownloadFailed,
74
+ message: 'Download timed out',
75
+ url: conn.url_prefix.to_s
76
+ end
77
+
78
+ ##
79
+ # Creates a download url for the object
80
+ # @return [String]
81
+ def url_with_params
82
+ url + '/?' + URI.encode_www_form(@options[:request_params])
83
+ end
84
+
85
+ private
86
+
87
+ def matches_mimetype?(download)
88
+ MIME::Type.simplified(download.headers['content-type']) == @options[:content_type]
89
+ end
90
+
91
+ ##
92
+ # Returns timeout for the download request. `timeout` passed as an option to
93
+ # the Geoblacklight::Download class
94
+ # @return [Fixnum] download timeout in seconds
95
+ def timeout
96
+ @options[:timeout] || Settings.TIMEOUT_DOWNLOAD || 20
97
+ end
98
+
99
+ ##
100
+ # URL for download
101
+ # @return [String] URL that is checked in download
102
+ def url
103
+ url = @document.references.send(@options[:service_type]).endpoint
104
+ url += '/reflect' if @options[:reflect]
105
+ url
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,22 @@
1
+ module Geoblacklight
2
+ class GeojsonDownload < Geoblacklight::Download
3
+ GEOJSON_DOWNLOAD_PARAMS = {
4
+ service: 'wfs',
5
+ version: '2.0.0',
6
+ request: 'GetFeature',
7
+ srsName: 'EPSG:4326',
8
+ outputformat: 'application/json'
9
+ }.freeze
10
+
11
+ def initialize(document, options = {})
12
+ request_params = GEOJSON_DOWNLOAD_PARAMS.merge(typeName: document[:layer_id_s])
13
+ super(document, {
14
+ type: 'geojson',
15
+ extension: 'json',
16
+ request_params: request_params,
17
+ content_type: 'application/json',
18
+ service_type: 'wfs'
19
+ }.merge(options))
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ module Geoblacklight
2
+ class GeotiffDownload < Geoblacklight::Download
3
+ GEOTIFF_DOWNLOAD_PARAMS = {
4
+ format: 'image/geotiff',
5
+ width: 4096
6
+ }.freeze
7
+
8
+ def initialize(document, options = {})
9
+ request_params = GEOTIFF_DOWNLOAD_PARAMS.merge(layers: document[:layer_id_s])
10
+ super(document, {
11
+ type: 'geotiff',
12
+ extension: 'tif',
13
+ request_params: request_params,
14
+ content_type: 'image/geotiff',
15
+ service_type: 'wms',
16
+ reflect: true
17
+ }.merge(options))
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ module Geoblacklight
2
+ class HglDownload < Geoblacklight::Download
3
+ def initialize(document, email, options = {})
4
+ request_params = {
5
+ 'LayerName' => document[:layer_id_s].sub(/^cite:/, ''),
6
+ 'UserEmail' => email
7
+ }
8
+ super(document, {
9
+ request_params: request_params,
10
+ service_type: 'hgl'
11
+ }.merge(options))
12
+ end
13
+
14
+ def get
15
+ initiate_download
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ module Geoblacklight
2
+ class KmzDownload < Geoblacklight::Download
3
+ KMZ_DOWNLOAD_PARAMS = { service: 'wms',
4
+ version: '1.1.0',
5
+ request: 'GetMap',
6
+ srsName: 'EPSG:900913',
7
+ format: 'application/vnd.google-earth.kmz',
8
+ width: 2000, height: 2000 }.freeze
9
+
10
+ def initialize(document, options = {})
11
+ bbox_wsen = document.bounding_box_as_wsen.split(' ').join(', ')
12
+ request_params = KMZ_DOWNLOAD_PARAMS.merge(layers: document[:layer_id_s], bbox: bbox_wsen)
13
+ super(document, {
14
+ type: 'kmz',
15
+ extension: 'kmz',
16
+ request_params: request_params,
17
+ content_type: 'application/vnd.google-earth.kmz',
18
+ service_type: 'wms'
19
+ }.merge(options))
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ module Geoblacklight
2
+ class ShapefileDownload < Geoblacklight::Download
3
+ SHAPEFILE_DOWNLOAD_PARAMS = { service: 'wfs',
4
+ version: '2.0.0',
5
+ request: 'GetFeature',
6
+ srsName: 'EPSG:4326',
7
+ outputformat: 'SHAPE-ZIP' }.freeze
8
+
9
+ def initialize(document, options = {})
10
+ request_params = SHAPEFILE_DOWNLOAD_PARAMS.merge(typeName: document[:layer_id_s])
11
+ super(document, {
12
+ type: 'shapefile',
13
+ extension: 'zip',
14
+ request_params: request_params,
15
+ content_type: 'application/zip',
16
+ service_type: 'wfs'
17
+ }.merge(options))
18
+ end
19
+ end
20
+ end