geoblacklight_admin 0.0.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +59 -36
  3. data/Rakefile +47 -14
  4. data/app/assets/javascripts/geoblacklight_admin.js +2 -1
  5. data/app/assets/stylesheets/geoblacklight_admin/_core.scss +5 -0
  6. data/app/assets/stylesheets/geoblacklight_admin/modules/_chosen.scss +425 -0
  7. data/app/assets/stylesheets/geoblacklight_admin/modules/_forms.scss +108 -0
  8. data/app/controllers/admin/admin_controller.rb +4 -2
  9. data/app/controllers/admin/advanced_search_controller.rb +123 -103
  10. data/app/controllers/admin/api_controller.rb +123 -108
  11. data/app/controllers/admin/bookmarks_controller.rb +4 -4
  12. data/app/controllers/admin/bulk_actions_controller.rb +9 -4
  13. data/app/controllers/admin/concerns/upload_util.rb +2 -0
  14. data/app/controllers/admin/document_accesses_controller.rb +10 -4
  15. data/app/controllers/admin/document_assets_controller.rb +14 -11
  16. data/app/controllers/admin/document_downloads_controller.rb +12 -10
  17. data/app/controllers/admin/documents_controller.rb +32 -15
  18. data/app/controllers/admin/elements_controller.rb +6 -5
  19. data/app/controllers/admin/form_elements_controller.rb +4 -4
  20. data/app/controllers/admin/ids_controller.rb +107 -87
  21. data/app/controllers/admin/import_documents_controller.rb +1 -1
  22. data/app/controllers/admin/imports_controller.rb +7 -3
  23. data/app/controllers/admin/mappings_controller.rb +6 -4
  24. data/app/controllers/admin/notifications_controller.rb +1 -1
  25. data/app/controllers/admin/search_controller.rb +3 -2
  26. data/app/controllers/admin/users_controller.rb +2 -2
  27. data/app/helpers/form_input_helper.rb +4 -4
  28. data/app/helpers/geoblacklight_admin_helper.rb +1 -1
  29. data/app/indexers/document_indexer.rb +1 -1
  30. data/app/jobs/export_job.rb +9 -6
  31. data/app/jobs/export_json_bulk_job.rb +95 -0
  32. data/app/jobs/export_json_job.rb +14 -12
  33. data/app/models/admin/bookmark.rb +18 -0
  34. data/app/models/api_search_builder.rb +3 -1
  35. data/app/models/blacklight_api.rb +6 -6
  36. data/app/models/blacklight_api_facets.rb +7 -2
  37. data/app/models/blacklight_api_ids.rb +3 -4
  38. data/app/models/bulk_action.rb +1 -1
  39. data/app/models/document/bbox_validator.rb +9 -5
  40. data/app/models/document/date_range_validator.rb +13 -10
  41. data/app/models/document/geom_validator.rb +4 -2
  42. data/app/models/document.rb +15 -7
  43. data/app/models/element.rb +9 -7
  44. data/app/models/form_control.rb +2 -0
  45. data/app/models/form_element.rb +2 -0
  46. data/app/models/form_feature.rb +2 -0
  47. data/app/models/form_group.rb +2 -0
  48. data/app/models/form_header.rb +2 -0
  49. data/app/models/geoblacklight_admin/schema.rb +5 -2
  50. data/app/models/geoblacklight_admin.rb +2 -0
  51. data/app/models/import/csv_duplicates_validator.rb +2 -1
  52. data/app/models/import/csv_header_validator.rb +2 -1
  53. data/app/models/import.rb +4 -7
  54. data/app/models/user.rb +1 -1
  55. data/app/services/export_csv_service.rb +5 -1
  56. data/app/views/admin/advanced_search/facets.json.jbuilder +9 -8
  57. data/app/views/admin/advanced_search/index.json.jbuilder +8 -7
  58. data/app/views/admin/api/_field.json.jbuilder +1 -1
  59. data/app/views/admin/api/fetch.json.jbuilder +8 -7
  60. data/app/views/admin/api/index.json.jbuilder +8 -7
  61. data/app/views/admin/bookmarks/index.html.erb +2 -2
  62. data/app/views/admin/bulk_actions/index.html.erb +3 -3
  63. data/app/views/admin/bulk_actions/show.html.erb +1 -1
  64. data/app/views/admin/document_accesses/_form.html.erb +1 -1
  65. data/app/views/admin/document_accesses/destroy_all.html.erb +3 -3
  66. data/app/views/admin/document_accesses/edit.html.erb +1 -1
  67. data/app/views/admin/document_accesses/import.html.erb +2 -2
  68. data/app/views/admin/document_accesses/index.html.erb +9 -9
  69. data/app/views/admin/document_accesses/new.html.erb +1 -1
  70. data/app/views/admin/document_downloads/_form.html.erb +1 -1
  71. data/app/views/admin/document_downloads/destroy_all.html.erb +2 -2
  72. data/app/views/admin/document_downloads/edit.html.erb +2 -3
  73. data/app/views/admin/document_downloads/import.html.erb +1 -1
  74. data/app/views/admin/document_downloads/index.html.erb +9 -9
  75. data/app/views/admin/document_downloads/new.html.erb +1 -1
  76. data/app/views/admin/document_downloads/show.html.erb +2 -2
  77. data/app/views/admin/documents/_document_bookmark.html.erb +1 -1
  78. data/app/views/admin/documents/_form_nav.html.erb +3 -1
  79. data/app/views/admin/documents/_json_btaa_aardvark.jbuilder +1 -3
  80. data/app/views/admin/documents/_json_file.jbuilder +14 -0
  81. data/app/views/admin/documents/_result_selected_options.html.erb +3 -1
  82. data/app/views/admin/documents/edit.html.erb +1 -1
  83. data/app/views/admin/documents/features/_multiple_download_links.html.erb +2 -2
  84. data/app/views/admin/documents/fetch.json_file.jbuilder +9 -0
  85. data/app/views/admin/documents/index.html.erb +2 -4
  86. data/app/views/admin/documents/index.json_file.jbuilder +9 -0
  87. data/app/views/admin/documents/versions.html.erb +1 -1
  88. data/app/views/admin/elements/_element.json.jbuilder +4 -1
  89. data/app/views/admin/elements/_form.html.erb +1 -1
  90. data/app/views/admin/elements/edit.html.erb +2 -2
  91. data/app/views/admin/elements/index.html.erb +4 -4
  92. data/app/views/admin/elements/index.json.jbuilder +2 -0
  93. data/app/views/admin/elements/new.html.erb +1 -1
  94. data/app/views/admin/elements/show.html.erb +6 -6
  95. data/app/views/admin/elements/show.json.jbuilder +2 -0
  96. data/app/views/admin/form_elements/_form.html.erb +1 -1
  97. data/app/views/admin/form_elements/_form_element.json.jbuilder +2 -0
  98. data/app/views/admin/form_elements/edit.html.erb +2 -2
  99. data/app/views/admin/form_elements/index.html.erb +2 -2
  100. data/app/views/admin/form_elements/index.json.jbuilder +2 -0
  101. data/app/views/admin/form_elements/new.html.erb +1 -1
  102. data/app/views/admin/form_elements/show.html.erb +2 -2
  103. data/app/views/admin/form_elements/show.json.jbuilder +2 -0
  104. data/app/views/admin/ids/fetch.json.jbuilder +8 -7
  105. data/app/views/admin/ids/index.json.jbuilder +3 -2
  106. data/app/views/admin/import_documents/show.html.haml +1 -1
  107. data/app/views/admin/imports/_import.json.jbuilder +2 -1
  108. data/app/views/admin/imports/_show_failed_tab.html.erb +2 -2
  109. data/app/views/admin/imports/_show_success_tab.html.erb +1 -1
  110. data/app/views/admin/imports/edit.html.erb +3 -3
  111. data/app/views/admin/imports/index.html.erb +3 -3
  112. data/app/views/admin/layouts/application.html.erb +4 -4
  113. data/app/views/admin/mappings/_form.html.erb +1 -1
  114. data/app/views/admin/mappings/_mapping.json.jbuilder +2 -1
  115. data/app/views/admin/mappings/edit.html.erb +2 -2
  116. data/app/views/admin/mappings/new.html.erb +1 -1
  117. data/app/views/admin/mappings/show.html.erb +2 -2
  118. data/app/views/admin/notifications/index.html.erb +3 -3
  119. data/app/views/admin/search/index.html.erb +2 -2
  120. data/app/views/admin/shared/_navbar.html.erb +11 -6
  121. data/app/views/admin/shared/_toast.html.erb +1 -1
  122. data/app/views/admin/users/index.html.erb +1 -1
  123. data/app/views/catalog/_show_gbl_admin.html.erb +3 -0
  124. data/config/locales/documents.en.yml +3 -0
  125. data/config/routes.rb +37 -33
  126. data/db/migrate/20230316183001_add_geoblacklight_admin_gem.rb +409 -0
  127. data/db/seeds.rb +7 -6
  128. data/db/seeds_elements.csv +56 -55
  129. data/db/seeds_elements.numbers +0 -0
  130. data/db/seeds_form_elements.csv +65 -64
  131. data/db/seeds_form_elements.numbers +0 -0
  132. data/lib/generators/geoblacklight_admin/config_generator.rb +61 -94
  133. data/lib/generators/geoblacklight_admin/install_generator.rb +3 -12
  134. data/lib/generators/geoblacklight_admin/jobs_generator.rb +3 -2
  135. data/lib/generators/geoblacklight_admin/models_generator.rb +0 -1
  136. data/lib/generators/geoblacklight_admin/templates/_show_sidebar.html.erb +19 -0
  137. data/lib/generators/geoblacklight_admin/templates/_user_util_links.html.erb +1 -1
  138. data/lib/generators/geoblacklight_admin/templates/config/database.yml +9 -5
  139. data/lib/generators/geoblacklight_admin/templates/config/geomg_aardvark_schema.json +12 -6
  140. data/lib/generators/geoblacklight_admin/templates/config/initializers/devise.rb +315 -0
  141. data/lib/generators/geoblacklight_admin/templates/config/initializers/geoblacklight_admin.rb +1 -2
  142. data/lib/generators/geoblacklight_admin/templates/config/initializers/kithe.rb +2 -0
  143. data/lib/generators/geoblacklight_admin/templates/config/initializers/mime_types.rb +15 -0
  144. data/lib/generators/geoblacklight_admin/templates/config/initializers/pagy.rb +152 -68
  145. data/lib/generators/geoblacklight_admin/templates/config/initializers/simple_form.rb +178 -0
  146. data/lib/generators/geoblacklight_admin/templates/config/initializers/simple_form_bootstrap.rb +365 -0
  147. data/lib/generators/geoblacklight_admin/templates/config/settings.yml +293 -0
  148. data/lib/generators/geoblacklight_admin/templates/javascript/controllers/results_controller.js +10 -0
  149. data/lib/generators/geoblacklight_admin/templates/package.json +3 -0
  150. data/lib/generators/geoblacklight_admin/templates/solr/conf/schema.xml +3 -3
  151. data/lib/generators/geoblacklight_admin/views_generator.rb +2 -3
  152. data/lib/geoblacklight_admin/engine.rb +5 -6
  153. data/lib/geoblacklight_admin/version.rb +1 -1
  154. data/lib/geoblacklight_admin.rb +1 -1
  155. data/lib/tasks/geoblacklight_admin.rake +15 -11
  156. metadata +101 -63
  157. data/.editorconfig +0 -18
  158. data/.gitignore +0 -75
  159. data/.standard.yml +0 -4
  160. data/Gemfile +0 -59
  161. data/LICENSE +0 -21
  162. data/app/assets/images/.keep +0 -0
  163. data/app/controllers/admin/concerns/.keep +0 -0
  164. data/app/models/bookmark.rb +0 -17
  165. data/app/models/concerns/.keep +0 -0
  166. data/db/migrate/20230316183001_add_geoblacklight_admin.rb +0 -399
  167. data/geoblacklight_admin.gemspec +0 -67
  168. data/lib/generators/geoblacklight_admin/example_docs_generator.rb +0 -18
  169. data/lib/generators/geoblacklight_admin/templates/.env.development.example +0 -28
  170. data/lib/generators/geoblacklight_admin/templates/.solr_wrapper.yml +0 -7
  171. data/lib/generators/geoblacklight_admin/templates/solr/snapshots/.keep +0 -0
  172. data/lib/tasks/.keep +0 -0
  173. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -35
  174. data/template.rb +0 -16
  175. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/confirmations/new.html.erb +0 -0
  176. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/invitations/edit.html.erb +0 -0
  177. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/invitations/new.html.erb +0 -0
  178. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/mailer/invitation_instructions.html.erb +0 -0
  179. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/mailer/invitation_instructions.text.erb +0 -0
  180. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/passwords/edit.html.erb +0 -0
  181. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/passwords/new.html.erb +0 -0
  182. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/registrations/edit.html.erb +0 -0
  183. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/registrations/new.html.erb +0 -0
  184. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/sessions/new.html.erb +0 -0
  185. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/shared/_links.html.erb +0 -0
  186. /data/{app/views/admin → lib/generators/geoblacklight_admin/templates}/devise/unlocks/new.html.erb +0 -0
@@ -0,0 +1,365 @@
1
+ # frozen_string_literal: true
2
+
3
+ # These defaults are defined and maintained by the community at
4
+ # https://github.com/heartcombo/simple_form-bootstrap
5
+ # Please submit feedback, changes and tests only there.
6
+
7
+ # Uncomment this and change the path if necessary to include your own
8
+ # components.
9
+ # See https://github.com/heartcombo/simple_form#custom-components
10
+ # to know more about custom components.
11
+ # Dir[Rails.root.join('lib/components/**/*.rb')].each { |f| require f }
12
+
13
+ # Use this setup block to configure all options available in SimpleForm.
14
+ SimpleForm.setup do |config|
15
+ # Default class for buttons
16
+ config.button_class = "btn"
17
+
18
+ # Define the default class of the input wrapper of the boolean input.
19
+ config.boolean_label_class = "form-check-label"
20
+
21
+ # How the label text should be generated altogether with the required text.
22
+ config.label_text = lambda { |label, required, explicit_label| "#{label} #{required}" }
23
+
24
+ # Define the way to render check boxes / radio buttons with labels.
25
+ config.boolean_style = :inline
26
+
27
+ # You can wrap each item in a collection of radio/check boxes with a tag
28
+ config.item_wrapper_tag = :div
29
+
30
+ # Defines if the default input wrapper class should be included in radio
31
+ # collection wrappers.
32
+ config.include_default_input_wrapper_class = false
33
+
34
+ # CSS class to add for error notification helper.
35
+ config.error_notification_class = "alert alert-danger"
36
+
37
+ # Method used to tidy up errors. Specify any Rails Array method.
38
+ # :first lists the first message for each field.
39
+ # :to_sentence to list all errors for each field.
40
+ config.error_method = :to_sentence
41
+
42
+ # add validation classes to `input_field`
43
+ config.input_field_error_class = "is-invalid"
44
+ config.input_field_valid_class = "is-valid"
45
+
46
+ # vertical forms
47
+ #
48
+ # vertical default_wrapper
49
+ config.wrappers :vertical_form, class: "mb-3" do |b|
50
+ b.use :html5
51
+ b.use :placeholder
52
+ b.optional :maxlength
53
+ b.optional :minlength
54
+ b.optional :pattern
55
+ b.optional :min_max
56
+ b.optional :readonly
57
+ b.use :label, class: "form-label"
58
+ b.use :input, class: "form-control", error_class: "is-invalid", valid_class: "is-valid"
59
+ b.use :full_error, wrap_with: {class: "invalid-feedback"}
60
+ b.use :hint, wrap_with: {class: "form-text"}
61
+ end
62
+
63
+ # vertical input for boolean
64
+ config.wrappers :vertical_boolean, tag: "fieldset", class: "mb-3" do |b|
65
+ b.use :html5
66
+ b.optional :readonly
67
+ b.wrapper :form_check_wrapper, class: "form-check" do |bb|
68
+ bb.use :input, class: "form-check-input", error_class: "is-invalid", valid_class: "is-valid"
69
+ bb.use :label, class: "form-check-label"
70
+ bb.use :full_error, wrap_with: {class: "invalid-feedback"}
71
+ bb.use :hint, wrap_with: {class: "form-text"}
72
+ end
73
+ end
74
+
75
+ # vertical input for radio buttons and check boxes
76
+ config.wrappers :vertical_collection, item_wrapper_class: "form-check", item_label_class: "form-check-label", tag: "fieldset", class: "mb-3" do |b|
77
+ b.use :html5
78
+ b.optional :readonly
79
+ b.wrapper :legend_tag, tag: "legend", class: "col-form-label pt-0" do |ba|
80
+ ba.use :label_text
81
+ end
82
+ b.use :input, class: "form-check-input", error_class: "is-invalid", valid_class: "is-valid"
83
+ b.use :full_error, wrap_with: {class: "invalid-feedback d-block"}
84
+ b.use :hint, wrap_with: {class: "form-text"}
85
+ end
86
+
87
+ # vertical input for inline radio buttons and check boxes
88
+ config.wrappers :vertical_collection_inline, item_wrapper_class: "form-check form-check-inline", item_label_class: "form-check-label", tag: "fieldset", class: "mb-3" do |b|
89
+ b.use :html5
90
+ b.optional :readonly
91
+ b.wrapper :legend_tag, tag: "legend", class: "col-form-label pt-0" do |ba|
92
+ ba.use :label_text
93
+ end
94
+ b.use :input, class: "form-check-input", error_class: "is-invalid", valid_class: "is-valid"
95
+ b.use :full_error, wrap_with: {class: "invalid-feedback d-block"}
96
+ b.use :hint, wrap_with: {class: "form-text"}
97
+ end
98
+
99
+ # vertical file input
100
+ config.wrappers :vertical_file, class: "mb-3" do |b|
101
+ b.use :html5
102
+ b.use :placeholder
103
+ b.optional :maxlength
104
+ b.optional :minlength
105
+ b.optional :readonly
106
+ b.use :label, class: "form-label"
107
+ b.use :input, class: "form-control", error_class: "is-invalid", valid_class: "is-valid"
108
+ b.use :full_error, wrap_with: {class: "invalid-feedback"}
109
+ b.use :hint, wrap_with: {class: "form-text"}
110
+ end
111
+
112
+ # vertical select input
113
+ config.wrappers :vertical_select, class: "mb-3" do |b|
114
+ b.use :html5
115
+ b.optional :readonly
116
+ b.use :label, class: "form-label"
117
+ b.use :input, class: "form-select", error_class: "is-invalid", valid_class: "is-valid"
118
+ b.use :full_error, wrap_with: {class: "invalid-feedback"}
119
+ b.use :hint, wrap_with: {class: "form-text"}
120
+ end
121
+
122
+ # vertical multi select
123
+ config.wrappers :vertical_multi_select, class: "mb-3" do |b|
124
+ b.use :html5
125
+ b.optional :readonly
126
+ b.use :label, class: "form-label"
127
+ b.wrapper class: "d-flex flex-row justify-content-between align-items-center" do |ba|
128
+ ba.use :input, class: "form-select mx-1", error_class: "is-invalid", valid_class: "is-valid"
129
+ end
130
+ b.use :full_error, wrap_with: {class: "invalid-feedback d-block"}
131
+ b.use :hint, wrap_with: {class: "form-text"}
132
+ end
133
+
134
+ # vertical range input
135
+ config.wrappers :vertical_range, class: "mb-3" do |b|
136
+ b.use :html5
137
+ b.use :placeholder
138
+ b.optional :readonly
139
+ b.optional :step
140
+ b.use :label, class: "form-label"
141
+ b.use :input, class: "form-range", error_class: "is-invalid", valid_class: "is-valid"
142
+ b.use :full_error, wrap_with: {class: "invalid-feedback"}
143
+ b.use :hint, wrap_with: {class: "form-text"}
144
+ end
145
+
146
+ # horizontal forms
147
+ #
148
+ # horizontal default_wrapper
149
+ config.wrappers :horizontal_form, class: "row mb-3" do |b|
150
+ b.use :html5
151
+ b.use :placeholder
152
+ b.optional :maxlength
153
+ b.optional :minlength
154
+ b.optional :pattern
155
+ b.optional :min_max
156
+ b.optional :readonly
157
+ b.use :label, class: "col-sm-3 col-form-label"
158
+ b.wrapper :grid_wrapper, class: "col-sm-9" do |ba|
159
+ ba.use :input, class: "form-control", error_class: "is-invalid", valid_class: "is-valid"
160
+ ba.use :full_error, wrap_with: {class: "invalid-feedback"}
161
+ ba.use :hint, wrap_with: {class: "form-text"}
162
+ end
163
+ end
164
+
165
+ # horizontal input for boolean
166
+ config.wrappers :horizontal_boolean, class: "row mb-3" do |b|
167
+ b.use :html5
168
+ b.optional :readonly
169
+ b.wrapper :grid_wrapper, class: "col-sm-9 offset-sm-3" do |wr|
170
+ wr.wrapper :form_check_wrapper, class: "form-check" do |bb|
171
+ bb.use :input, class: "form-check-input", error_class: "is-invalid", valid_class: "is-valid"
172
+ bb.use :label, class: "form-check-label"
173
+ bb.use :full_error, wrap_with: {class: "invalid-feedback"}
174
+ bb.use :hint, wrap_with: {class: "form-text"}
175
+ end
176
+ end
177
+ end
178
+
179
+ # horizontal input for radio buttons and check boxes
180
+ config.wrappers :horizontal_collection, item_wrapper_class: "form-check", item_label_class: "form-check-label", class: "row mb-3" do |b|
181
+ b.use :html5
182
+ b.optional :readonly
183
+ b.use :label, class: "col-sm-3 col-form-label pt-0"
184
+ b.wrapper :grid_wrapper, class: "col-sm-9" do |ba|
185
+ ba.use :input, class: "form-check-input", error_class: "is-invalid", valid_class: "is-valid"
186
+ ba.use :full_error, wrap_with: {class: "invalid-feedback d-block"}
187
+ ba.use :hint, wrap_with: {class: "form-text"}
188
+ end
189
+ end
190
+
191
+ # horizontal input for inline radio buttons and check boxes
192
+ config.wrappers :horizontal_collection_inline, item_wrapper_class: "form-check form-check-inline", item_label_class: "form-check-label", class: "row mb-3" do |b|
193
+ b.use :html5
194
+ b.optional :readonly
195
+ b.use :label, class: "col-sm-3 col-form-label pt-0"
196
+ b.wrapper :grid_wrapper, class: "col-sm-9" do |ba|
197
+ ba.use :input, class: "form-check-input", error_class: "is-invalid", valid_class: "is-valid"
198
+ ba.use :full_error, wrap_with: {class: "invalid-feedback d-block"}
199
+ ba.use :hint, wrap_with: {class: "form-text"}
200
+ end
201
+ end
202
+
203
+ # horizontal file input
204
+ config.wrappers :horizontal_file, class: "row mb-3" do |b|
205
+ b.use :html5
206
+ b.use :placeholder
207
+ b.optional :maxlength
208
+ b.optional :minlength
209
+ b.optional :readonly
210
+ b.use :label, class: "col-sm-3 col-form-label"
211
+ b.wrapper :grid_wrapper, class: "col-sm-9" do |ba|
212
+ ba.use :input, class: "form-control", error_class: "is-invalid", valid_class: "is-valid"
213
+ ba.use :full_error, wrap_with: {class: "invalid-feedback"}
214
+ ba.use :hint, wrap_with: {class: "form-text"}
215
+ end
216
+ end
217
+
218
+ # horizontal select input
219
+ config.wrappers :horizontal_select, class: "row mb-3" do |b|
220
+ b.use :html5
221
+ b.optional :readonly
222
+ b.use :label, class: "col-sm-3 col-form-label"
223
+ b.wrapper :grid_wrapper, class: "col-sm-9" do |ba|
224
+ ba.use :input, class: "form-select", error_class: "is-invalid", valid_class: "is-valid"
225
+ ba.use :full_error, wrap_with: {class: "invalid-feedback"}
226
+ ba.use :hint, wrap_with: {class: "form-text"}
227
+ end
228
+ end
229
+
230
+ # horizontal multi select
231
+ config.wrappers :horizontal_multi_select, class: "row mb-3" do |b|
232
+ b.use :html5
233
+ b.optional :readonly
234
+ b.use :label, class: "col-sm-3 col-form-label"
235
+ b.wrapper :grid_wrapper, class: "col-sm-9" do |ba|
236
+ ba.wrapper class: "d-flex flex-row justify-content-between align-items-center" do |bb|
237
+ bb.use :input, class: "form-select mx-1", error_class: "is-invalid", valid_class: "is-valid"
238
+ end
239
+ ba.use :full_error, wrap_with: {class: "invalid-feedback d-block"}
240
+ ba.use :hint, wrap_with: {class: "form-text"}
241
+ end
242
+ end
243
+
244
+ # horizontal range input
245
+ config.wrappers :horizontal_range, class: "row mb-3" do |b|
246
+ b.use :html5
247
+ b.use :placeholder
248
+ b.optional :readonly
249
+ b.optional :step
250
+ b.use :label, class: "col-sm-3 col-form-label pt-0"
251
+ b.wrapper :grid_wrapper, class: "col-sm-9" do |ba|
252
+ ba.use :input, class: "form-range", error_class: "is-invalid", valid_class: "is-valid"
253
+ ba.use :full_error, wrap_with: {class: "invalid-feedback"}
254
+ ba.use :hint, wrap_with: {class: "form-text"}
255
+ end
256
+ end
257
+
258
+ # inline forms
259
+ #
260
+ # inline default_wrapper
261
+ config.wrappers :inline_form, class: "col-12" do |b|
262
+ b.use :html5
263
+ b.use :placeholder
264
+ b.optional :maxlength
265
+ b.optional :minlength
266
+ b.optional :pattern
267
+ b.optional :min_max
268
+ b.optional :readonly
269
+ b.use :label, class: "visually-hidden"
270
+
271
+ b.use :input, class: "form-control", error_class: "is-invalid", valid_class: "is-valid"
272
+ b.use :error, wrap_with: {class: "invalid-feedback"}
273
+ b.optional :hint, wrap_with: {class: "form-text"}
274
+ end
275
+
276
+ # inline input for boolean
277
+ config.wrappers :inline_boolean, class: "col-12" do |b|
278
+ b.use :html5
279
+ b.optional :readonly
280
+ b.wrapper :form_check_wrapper, class: "form-check" do |bb|
281
+ bb.use :input, class: "form-check-input", error_class: "is-invalid", valid_class: "is-valid"
282
+ bb.use :label, class: "form-check-label"
283
+ bb.use :error, wrap_with: {class: "invalid-feedback"}
284
+ bb.optional :hint, wrap_with: {class: "form-text"}
285
+ end
286
+ end
287
+
288
+ # bootstrap custom forms
289
+ #
290
+ # custom input switch for boolean
291
+ config.wrappers :custom_boolean_switch, class: "mb-3" do |b|
292
+ b.use :html5
293
+ b.optional :readonly
294
+ b.wrapper :form_check_wrapper, tag: "div", class: "form-check form-switch" do |bb|
295
+ bb.use :input, class: "form-check-input", error_class: "is-invalid", valid_class: "is-valid"
296
+ bb.use :label, class: "form-check-label"
297
+ bb.use :full_error, wrap_with: {tag: "div", class: "invalid-feedback"}
298
+ bb.use :hint, wrap_with: {class: "form-text"}
299
+ end
300
+ end
301
+
302
+ # Input Group - custom component
303
+ # see example app and config at https://github.com/heartcombo/simple_form-bootstrap
304
+ config.wrappers :input_group, class: "mb-3" do |b|
305
+ b.use :html5
306
+ b.use :placeholder
307
+ b.optional :maxlength
308
+ b.optional :minlength
309
+ b.optional :pattern
310
+ b.optional :min_max
311
+ b.optional :readonly
312
+ b.use :label, class: "form-label"
313
+ b.wrapper :input_group_tag, class: "input-group" do |ba|
314
+ ba.optional :prepend
315
+ ba.use :input, class: "form-control", error_class: "is-invalid", valid_class: "is-valid"
316
+ ba.optional :append
317
+ ba.use :full_error, wrap_with: {class: "invalid-feedback"}
318
+ end
319
+ b.use :hint, wrap_with: {class: "form-text"}
320
+ end
321
+
322
+ # Floating Labels form
323
+ #
324
+ # floating labels default_wrapper
325
+ config.wrappers :floating_labels_form, class: "form-floating mb-3" do |b|
326
+ b.use :html5
327
+ b.use :placeholder
328
+ b.optional :maxlength
329
+ b.optional :minlength
330
+ b.optional :pattern
331
+ b.optional :min_max
332
+ b.optional :readonly
333
+ b.use :input, class: "form-control", error_class: "is-invalid", valid_class: "is-valid"
334
+ b.use :label
335
+ b.use :full_error, wrap_with: {class: "invalid-feedback"}
336
+ b.use :hint, wrap_with: {class: "form-text"}
337
+ end
338
+
339
+ # custom multi select
340
+ config.wrappers :floating_labels_select, class: "form-floating mb-3" do |b|
341
+ b.use :html5
342
+ b.optional :readonly
343
+ b.use :input, class: "form-select", error_class: "is-invalid", valid_class: "is-valid"
344
+ b.use :label
345
+ b.use :full_error, wrap_with: {class: "invalid-feedback"}
346
+ b.use :hint, wrap_with: {class: "form-text"}
347
+ end
348
+
349
+ # The default wrapper to be used by the FormBuilder.
350
+ config.default_wrapper = :vertical_form
351
+
352
+ # Custom wrappers for input types. This should be a hash containing an input
353
+ # type as key and the wrapper that will be used for all inputs with specified type.
354
+ config.wrapper_mappings = {
355
+ boolean: :vertical_boolean,
356
+ check_boxes: :vertical_collection,
357
+ date: :vertical_multi_select,
358
+ datetime: :vertical_multi_select,
359
+ file: :vertical_file,
360
+ radio_buttons: :vertical_collection,
361
+ range: :vertical_range,
362
+ time: :vertical_multi_select,
363
+ select: :vertical_select
364
+ }
365
+ end
@@ -0,0 +1,293 @@
1
+ # Configurable Logo Used for CartoDB export
2
+ APPLICATION_LOGO_URL: 'http://geoblacklight.org/images/geoblacklight-logo.png'
3
+
4
+ # Carto OneClick Service https://carto.com/engine/open-in-carto/
5
+ CARTO_ONECLICK_LINK: 'http://oneclick.carto.com/'
6
+
7
+ # ArcGIS Online Base URL
8
+ ARCGIS_BASE_URL: 'https://www.arcgis.com/home/webmap/viewer.html'
9
+
10
+ # Download path can be configured using this setting
11
+ #DOWNLOAD_PATH: "./tmp/cache/downloads"
12
+
13
+ # The bq boost value for spatial search matches within a bounding box
14
+ BBOX_WITHIN_BOOST: '10'
15
+
16
+ # The bf boost value for overlap ratio
17
+ OVERLAP_RATIO_BOOST: '2'
18
+
19
+ # Homepage Map Geometry
20
+ # Leave null to default to entire world
21
+ # Add a stringified GeoJSON object to scope initial render (example from UMass)
22
+ HOMEPAGE_MAP_GEOM: null
23
+ # HOMEPAGE_MAP_GEOM: '{"type":"Polygon","coordinates":[[[-73.58,42.93],[-73.58,41.20],[-69.90,41.20],[-69.90,42.93]]]}'
24
+
25
+ # Non-search-field GeoBlacklight application permitted params
26
+ GBL_PARAMS:
27
+ - :bbox
28
+ - :email
29
+ - :file
30
+ - :format
31
+ - :id
32
+ - :logo
33
+ - :provider
34
+ - :type
35
+ - :BBOX
36
+ - :HEIGHT
37
+ - :LAYERS
38
+ - :QUERY_LAYERS
39
+ - :URL
40
+ - :WIDTH
41
+ - :X
42
+ - :Y
43
+
44
+ # Solr field mappings
45
+ FIELDS:
46
+ :ACCESS_RIGHTS: 'dct_accessRights_s'
47
+ :ALTERNATIVE_TITLE: 'dct_alternative_sm'
48
+ :CENTROID: 'dcat_centroid'
49
+ :CREATOR: 'dct_creator_sm'
50
+ :DATE_ISSUED: 'dct_issued_s'
51
+ :DATE_RANGE: 'gbl_dateRange_drsim'
52
+ :DESCRIPTION: 'dct_description_sm'
53
+ :DISPLAY_NOTE: 'gbl_displayNote_sm'
54
+ :FORMAT: 'dct_format_s'
55
+ :FILE_SIZE: 'gbl_fileSize_s'
56
+ :GEOREFERENCED: 'gbl_georeferenced_b'
57
+ :ID: 'id'
58
+ :IDENTIFIER: 'dct_identifier_sm'
59
+ :INDEX_YEAR: 'gbl_indexYear_im'
60
+ :IS_PART_OF: 'dct_isPartOf_sm'
61
+ :IS_REPLACED_BY: 'dct_isReplacedBy_sm'
62
+ :THEME: 'dcat_theme_sm'
63
+ :KEYWORD: 'dcat_keyword_sm'
64
+ :LANGUAGE: 'dct_language_sm'
65
+ :LAYER_MODIFIED: 'gbl_mdModified_dt'
66
+ :LICENSE: 'dct_license_sm'
67
+ :MEMBER_OF: 'pcdm_memberOf_sm'
68
+ :METADATA_VERSION: 'gbl_mdVersion_s'
69
+ :MODIFIED: 'gbl_mdModified_dt'
70
+ :OVERLAP_FIELD: 'solr_bboxtype'
71
+ :PUBLISHER: 'dct_publisher_sm'
72
+ :PROVIDER: 'schema_provider_s'
73
+ :REFERENCES: 'dct_references_s'
74
+ :RELATION: 'dct_relation_sm'
75
+ :REPLACES: 'dct_replaces_sm'
76
+ :RESOURCE_CLASS: 'gbl_resourceClass_sm'
77
+ :RESOURCE_TYPE: 'gbl_resourceType_sm'
78
+ :RIGHTS: 'dct_rights_sm'
79
+ :RIGHTS_HOLDER: 'dct_rightsHolder_sm'
80
+ :SOURCE: 'dct_source_sm'
81
+ :SPATIAL_COVERAGE: 'dct_spatial_sm'
82
+ :GEOMETRY: 'locn_geometry'
83
+ :SUBJECT: 'dct_subject_sm'
84
+ :SUPPRESSED: 'gbl_suppressed_b'
85
+ :TEMPORAL_COVERAGE: 'dct_temporal_sm'
86
+ :TITLE: 'dct_title_s'
87
+ :VERSION: 'dct_isVersionOf_sm'
88
+ :WXS_IDENTIFIER: 'gbl_wxsIdentifier_s'
89
+ :B1G_PUBLICATION_STATE: 'b1g_publication_state_s'
90
+ :B1G_ACCRUAL_METHOD: 'b1g_dct_accrualMethod_s'
91
+ :B1G_CODE: 'b1g_code_s'
92
+ :B1G_CHILD_RECORD: 'b1g_child_record_b'
93
+ :B1G_GEOMG_ID: 'geomg_id_s'
94
+
95
+ # Institution deployed at
96
+ INSTITUTION: 'Stanford'
97
+
98
+ # Metadata shown in tool panel
99
+ METADATA_SHOWN:
100
+ - 'mods'
101
+ - 'fgdc'
102
+ - 'iso19139'
103
+ - 'html'
104
+
105
+ # (For external Download) timeout and open_timeout parameters for Faraday
106
+ TIMEOUT_DOWNLOAD: 16
107
+
108
+ # (For WMS inspection) timeout and open_timeout parameters for Faraday
109
+ TIMEOUT_WMS: 4
110
+
111
+ # Use the geometry type for the data relations icon
112
+ USE_GEOM_FOR_RELATIONS_ICON: false
113
+
114
+ # Web services shown in tool panel
115
+ WEBSERVICES_SHOWN:
116
+ - 'wms'
117
+ - 'tms'
118
+ - 'wfs'
119
+ - 'xyz'
120
+ - 'wmts'
121
+ - 'tilejson'
122
+ - 'iiif'
123
+ - 'feature_layer'
124
+ - 'tiled_map_layer'
125
+ - 'dynamic_map_layer'
126
+ - 'image_map_layer'
127
+
128
+ # Display Notes to display / Non-prefixed default bootstrap class is alert-secondary
129
+ DISPLAY_NOTES_SHOWN:
130
+ danger:
131
+ bootstrap_alert_class: alert-danger
132
+ icon: fire-solid
133
+ note_prefix: "Danger: "
134
+ info:
135
+ bootstrap_alert_class: alert-info
136
+ icon: circle-info-solid
137
+ note_prefix: "Info: "
138
+ tip:
139
+ bootstrap_alert_class: alert-success
140
+ icon: lightbulb-solid
141
+ note_prefix: "Tip: "
142
+ warning:
143
+ bootstrap_alert_class: alert-warning
144
+ icon: triangle-exclamation-solid
145
+ note_prefix: "Warning: "
146
+
147
+ # Relationships to display
148
+ RELATIONSHIPS_SHOWN:
149
+ MEMBER_OF_ANCESTORS:
150
+ field: pcdm_memberOf_sm
151
+ icon: parent-item
152
+ inverse: :MEMBER_OF_DESCENDANTS
153
+ label: geoblacklight.relations.member_of_ancestors
154
+ query_type: ancestors
155
+ MEMBER_OF_DESCENDANTS:
156
+ field: pcdm_memberOf_sm
157
+ icon: child-item
158
+ inverse: :MEMBER_OF_ANCESTORS
159
+ label: geoblacklight.relations.member_of_descendants
160
+ query_type: descendants
161
+ PART_OF_ANCESTORS:
162
+ field: dct_isPartOf_sm
163
+ icon: parent-item
164
+ inverse: :PART_OF_DESCENDANTS
165
+ label: geoblacklight.relations.part_of_ancestors
166
+ query_type: ancestors
167
+ PART_OF_DESCENDANTS:
168
+ field: dct_isPartOf_sm
169
+ icon: child-item
170
+ inverse: :PART_OF_ANCESTORS
171
+ label: geoblacklight.relations.part_of_descendants
172
+ query_type: descendants
173
+ RELATION_ANCESTORS:
174
+ field: dct_relation_sm
175
+ icon: nil
176
+ inverse: :RELATION_DESCENDANTS
177
+ label: geoblacklight.relations.relation_ancestors
178
+ query_type: ancestors
179
+ RELATION_DESCENDANTS:
180
+ field: dct_relation_sm
181
+ icon: nil
182
+ inverse: :RELATION_ANCESTORS
183
+ label: geoblacklight.relations.relation_descendants
184
+ query_type: descendants
185
+ REPLACES_ANCESTORS:
186
+ field: dct_replaces_sm
187
+ icon: nil
188
+ inverse: :REPLACES_DESCENDANTS
189
+ label: geoblacklight.relations.replaces_ancestors
190
+ query_type: ancestors
191
+ REPLACES_DESCENDANTS:
192
+ field: dct_replaces_sm
193
+ icon: nil
194
+ inverse: :REPLACES_ANCESTORS
195
+ label: geoblacklight.relations.replaces_descendants
196
+ query_type: descendants
197
+ SOURCE_ANCESTORS:
198
+ field: dct_source_sm
199
+ icon: parent-item
200
+ inverse: :SOURCE_DESCENDANTS
201
+ label: geoblacklight.relations.source_ancestors
202
+ query_type: ancestors
203
+ SOURCE_DESCENDANTS:
204
+ field: dct_source_sm
205
+ icon: child-item
206
+ inverse: :SOURCE_ANCESTORS
207
+ label: geoblacklight.relations.source_descendants
208
+ query_type: descendants
209
+ VERSION_OF_ANCESTORS:
210
+ field: dct_isVersionOf_sm
211
+ icon: parent-item
212
+ inverse: :VERSION_OF_DESCENDANTS
213
+ label: geoblacklight.relations.version_of_ancestors
214
+ query_type: ancestors
215
+ VERSION_OF_DESCENDANTS:
216
+ field: dct_isVersionOf_sm
217
+ icon: child-item
218
+ inverse: :VERSION_OF_ANCESTORS
219
+ label: geoblacklight.relations.version_of_descendants
220
+ query_type: descendants
221
+
222
+ # WMS Parameters
223
+ WMS_PARAMS:
224
+ :SERVICE: 'WMS'
225
+ :VERSION: '1.1.1'
226
+ :REQUEST: 'GetFeatureInfo'
227
+ :STYLES: ''
228
+ :SRS: 'EPSG:4326'
229
+ :EXCEPTIONS: 'application/json'
230
+ :INFO_FORMAT: 'text/html'
231
+
232
+ # Settings for leaflet
233
+ LEAFLET:
234
+ MAP:
235
+ LAYERS:
236
+ DETECT_RETINA: true
237
+ INDEX:
238
+ DEFAULT: &default
239
+ color: "#7FCDBB"
240
+ weight: "1"
241
+ radius: "4"
242
+ UNAVAILABLE:
243
+ <<: *default
244
+ color: "#EDF8B1"
245
+ SELECTED:
246
+ <<: *default
247
+ color: "#2C7FB8"
248
+ VIEWERS:
249
+ DYNAMICMAPLAYER:
250
+ CONTROLS:
251
+ - 'Opacity'
252
+ - 'Fullscreen'
253
+ FEATURELAYER:
254
+ CONTROLS:
255
+ - 'Opacity'
256
+ - 'Fullscreen'
257
+ IIIF:
258
+ CONTROLS:
259
+ - 'Fullscreen'
260
+ IMAGEMAPLAYER:
261
+ CONTROLS:
262
+ - 'Opacity'
263
+ - 'Fullscreen'
264
+ INDEXMAP:
265
+ CONTROLS:
266
+ - 'Fullscreen'
267
+ TILEDMAPLAYER:
268
+ CONTROLS:
269
+ - 'Opacity'
270
+ - 'Fullscreen'
271
+ WMS:
272
+ CONTROLS:
273
+ - 'Opacity'
274
+ - 'Fullscreen'
275
+
276
+ # Toggle the help text feature that offers users context
277
+ HELP_TEXT:
278
+ viewer_protocol:
279
+ - 'dynamic_map_layer'
280
+ - 'feature_layer'
281
+ - 'iiif'
282
+ - 'iiif_manifest'
283
+ - 'image_map_layer'
284
+ - 'index_map'
285
+ - 'tiled_map_layer'
286
+ - 'wms'
287
+ - 'tms'
288
+ - 'oembed'
289
+
290
+ # Enable catalog#show sidebar static map for items with the following viewer protocols
291
+ SIDEBAR_STATIC_MAP:
292
+ - 'iiif'
293
+ - 'iiif_manifest'
@@ -197,6 +197,16 @@ export default class extends Controller {
197
197
  }
198
198
  }
199
199
 
200
+ exportJsonFile() {
201
+ var scope = this.checkSelectionScope();
202
+ var el = document.querySelector('#result-selected-options');
203
+ if(scope === 'pageset') {
204
+ window.location = el.dataset.pageset + "&format=json_file"
205
+ } else {
206
+ window.location = el.dataset.resultset + "&format=json_file"
207
+ }
208
+ }
209
+
200
210
  exportJsonAardvark() {
201
211
  var scope = this.checkSelectionScope();
202
212
  var el = document.querySelector('#result-selected-options');
@@ -2,6 +2,9 @@
2
2
  "name": "internal",
3
3
  "private": true,
4
4
  "dependencies": {
5
+ "@babel/plugin-proposal-private-methods": "^7.18.6",
6
+ "@babel/plugin-proposal-private-property-in-object": "^7.20.0",
7
+ "@nathanvda/cocoon": "^1.2.14",
5
8
  "@rails/actioncable": "^6.0.0",
6
9
  "@rails/activestorage": "^6.0.0",
7
10
  "@rails/ujs": "^6.0.0",