blacklight-spotlight 4.0.2 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +17 -9
- data/app/assets/stylesheets/spotlight/_catalog.scss +0 -12
- data/app/assets/stylesheets/spotlight/_header.scss +9 -0
- data/app/assets/stylesheets/spotlight/browse_group_categories_block.scss +4 -4
- data/app/components/blacklight/icons/arrow_alt_circle_left_component.rb +15 -0
- data/app/components/blacklight/icons/arrow_alt_circle_right_component.rb +15 -0
- data/app/components/blacklight/icons/arrow_back_ios_component.rb +15 -0
- data/app/components/blacklight/icons/arrow_forward_ios_component.rb +15 -0
- data/app/components/blacklight/icons/check_circle_component.rb +15 -0
- data/app/components/blacklight/icons/check_component.rb +15 -0
- data/app/components/blacklight/icons/chevron_right_component.rb +15 -0
- data/app/components/blacklight/icons/close_component.rb +15 -0
- data/app/components/blacklight/icons/edit_component.rb +15 -0
- data/app/components/blacklight/icons/error_component.rb +14 -0
- data/app/components/blacklight/icons/highlight_off_component.rb +15 -0
- data/app/components/blacklight/icons/info_component.rb +15 -0
- data/app/components/blacklight/icons/warning_component.rb +14 -0
- data/app/components/blacklight/icons/zoom_in_component.rb +15 -0
- data/app/components/blacklight/icons/zoom_out_component.rb +15 -0
- data/app/components/spotlight/analytics/aggregation_component.html.erb +14 -0
- data/app/components/spotlight/analytics/aggregation_component.rb +37 -0
- data/app/components/spotlight/analytics/dashboard_component.html.erb +50 -0
- data/app/components/spotlight/analytics/dashboard_component.rb +32 -0
- data/app/components/spotlight/document_admin_table_component.html.erb +36 -0
- data/app/components/spotlight/document_admin_table_component.rb +23 -0
- data/app/components/spotlight/header_component.html.erb +1 -0
- data/app/components/spotlight/header_component.rb +6 -0
- data/app/components/spotlight/icon_component.rb +13 -0
- data/app/components/spotlight/solr_document_legacy_embed_component.html.erb +11 -0
- data/app/components/spotlight/solr_document_legacy_embed_component.rb +7 -0
- data/app/controllers/concerns/spotlight/controller.rb +1 -1
- data/app/controllers/spotlight/browse_controller.rb +2 -0
- data/app/controllers/spotlight/catalog_controller.rb +6 -2
- data/app/controllers/spotlight/dashboards_controller.rb +4 -3
- data/app/models/concerns/spotlight/exhibit_analytics.rb +6 -4
- data/app/models/spotlight/analytics/ga.rb +90 -43
- data/app/models/spotlight/blacklight_configuration.rb +8 -1
- data/app/views/layouts/spotlight/base.html.erb +2 -2
- data/app/views/shared/_header_navbar.html.erb +6 -12
- data/app/views/spotlight/catalog/_admin_index_header_default.html.erb +1 -0
- data/app/views/spotlight/catalog/_admin_thumbnail_default.html.erb +1 -0
- data/app/views/spotlight/catalog/_document_admin_table.html.erb +8 -1
- data/app/views/spotlight/catalog/_document_row.html.erb +2 -5
- data/app/views/spotlight/catalog/_index_compact_default.html.erb +1 -0
- data/app/views/spotlight/catalog/edit.html.erb +15 -2
- data/app/views/spotlight/dashboards/analytics.html.erb +2 -2
- data/app/views/spotlight/pages/_view_type_group.html.erb +2 -5
- data/app/views/spotlight/sir_trevor/blocks/_browse_group_categories_block.html.erb +2 -2
- data/app/views/spotlight/sir_trevor/blocks/_embedded_document.html.erb +8 -0
- data/app/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb +3 -3
- data/app/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb +1 -1
- data/config/locales/spotlight.en.yml +16 -4
- data/lib/generators/spotlight/templates/catalog_controller.rb +3 -0
- data/lib/generators/spotlight/templates/config/initializers/spotlight_initializer.rb +16 -12
- data/lib/spotlight/engine.rb +11 -9
- data/lib/spotlight/version.rb +1 -1
- data/lib/spotlight.rb +3 -0
- data/spec/support/features/test_features_helpers.rb +1 -1
- metadata +61 -31
- data/app/assets/images/blacklight/arrow-alt-circle-left.svg +0 -1
- data/app/assets/images/blacklight/arrow-alt-circle-right.svg +0 -1
- data/app/assets/images/blacklight/arrow_back_ios.svg +0 -1
- data/app/assets/images/blacklight/arrow_forward_ios.svg +0 -1
- data/app/assets/images/blacklight/check.svg +0 -1
- data/app/assets/images/blacklight/check_circle.svg +0 -1
- data/app/assets/images/blacklight/chevron_right.svg +0 -1
- data/app/assets/images/blacklight/close.svg +0 -1
- data/app/assets/images/blacklight/edit.svg +0 -1
- data/app/assets/images/blacklight/error.svg +0 -1
- data/app/assets/images/blacklight/highlight_off.svg +0 -1
- data/app/assets/images/blacklight/info.svg +0 -1
- data/app/assets/images/blacklight/warning.svg +0 -1
- data/app/assets/images/blacklight/zoom_in.svg +0 -1
- data/app/assets/images/blacklight/zoom_out.svg +0 -1
- data/app/models/spotlight/analytics/ga_model.rb +0 -29
- data/app/views/spotlight/dashboards/_analytics.html.erb +0 -35
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b9197307a89d83a9c378555c07763888e27517bd4b104d404b6dd5c9d570f6b7
|
|
4
|
+
data.tar.gz: 82a85fa5c50cfb072c1f843213fd82c15e2a5df71c9bda4e1cc18bb2a0b772bc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f5e48d34d19852384e4d92221dc5dc626211106f5b496265773da2a1f04b36c2a08d45209fef9fd033f419b610145e4bf82194535d572ada6e164aeaa32ebfa6
|
|
7
|
+
data.tar.gz: b985d712d3308eb32b6e6eaf2f0eadff2f77aa72d5b2d04775059dbd60a8bf9f98077c3952e591f7c16592564260c546efdd44006828707068d08f1a29191b95
|
data/README.md
CHANGED
|
@@ -114,16 +114,24 @@ See [developer-facing instructions for enabling translation](https://github.com/
|
|
|
114
114
|
- [Blacklight Development Google group](https://groups.google.com/forum/#!forum/blacklight-development)
|
|
115
115
|
- [Spotlight Community Group](https://groups.google.com/forum/#!forum/spotlight-community) (equivalent to #spotlight-service)
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
The javascript is built by npm from sources in `app/javascript` into a bundle
|
|
117
|
+
## Updating the JavaScript bundle
|
|
118
|
+
The JavaScript is built by npm from sources in `app/javascript` into a bundle
|
|
120
119
|
in `app/assets/javascripts/spotlight/spotlight.js`. This file should not be edited
|
|
121
|
-
by hand as any changes would be overwritten. When any of the
|
|
120
|
+
by hand as any changes would be overwritten. When any of the JavaScript
|
|
122
121
|
components in the gem are changed, this bundle should be rebuilt with the
|
|
123
122
|
following steps:
|
|
124
123
|
1. [Install npm](https://www.npmjs.com/get-npm)
|
|
125
|
-
2.
|
|
126
|
-
3.
|
|
127
|
-
4.
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
2. Run `npm install` to download dependencies
|
|
125
|
+
3. Run `npm run prepare` to build the bundle
|
|
126
|
+
4. If you are releasing a new version of the gem, follow the release instructions below.
|
|
127
|
+
|
|
128
|
+
## Releasing a new version and publishing the JavaScript
|
|
129
|
+
You only need to update `package.json` and prepare/publish the JavaScript package for npm if there are changes to the JavaScript.
|
|
130
|
+
1. Edit `version.rb` and `package.json` to set the new version
|
|
131
|
+
2. Run `npm run prepare` to build the JavaScript bundle
|
|
132
|
+
3. Run `npm i --package-lock-only` to update the version in `package-lock.json`
|
|
133
|
+
4. Commit the changes e.g. `git commit -am "Bump version to X.X.X"`
|
|
134
|
+
5. Push the release to rubygems and GitHub: `bundle exec rake release`
|
|
135
|
+
6. Run `npm publish` to push the JavaScript package to https://npmjs.org/package/spotlight-frontend
|
|
136
|
+
|
|
137
|
+
See "Updating the JavaScript bundle" above for more details.
|
|
@@ -97,14 +97,6 @@ form.edit_solr_document {
|
|
|
97
97
|
@extend .col-md-6;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
.edit_solr_document {
|
|
101
|
-
float: right;
|
|
102
|
-
@extend .col-md-6;
|
|
103
|
-
border-bottom: 1px solid #ccc;
|
|
104
|
-
margin-bottom: 1em;
|
|
105
|
-
padding-bottom: 1em;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
100
|
.tags, .dl-horizontal {
|
|
109
101
|
@extend .col-md-6;
|
|
110
102
|
}
|
|
@@ -114,10 +106,6 @@ form.edit_solr_document {
|
|
|
114
106
|
}
|
|
115
107
|
}
|
|
116
108
|
|
|
117
|
-
.edit_solr_document {
|
|
118
|
-
@extend .clearfix;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
109
|
#sortAndPerPage {
|
|
122
110
|
align-items: flex-end;
|
|
123
111
|
}
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
cursor: pointer;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
.blacklight-
|
|
36
|
+
.blacklight-icons-arrow-alt-circle-left, .blacklight-icons-arrow-alt-circle-right {
|
|
37
37
|
display: inline-block;
|
|
38
38
|
fill: $gray-600;
|
|
39
39
|
height: 44px;
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
[aria-disabled="true"] {
|
|
52
|
-
.blacklight-
|
|
52
|
+
.blacklight-icons-arrow-alt-circle-left, .blacklight-icons-arrow-alt-circle-right {
|
|
53
53
|
fill: $gray-400;
|
|
54
54
|
|
|
55
55
|
&:hover,&:focus {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
|
|
67
67
|
@media screen and (min-width: breakpoint-min("md")) {
|
|
68
68
|
.browse-group-categories-controls {
|
|
69
|
-
.blacklight-
|
|
69
|
+
.blacklight-icons-arrow-alt-circle-left, .blacklight-icons-arrow-alt-circle-right {
|
|
70
70
|
height: 32px;
|
|
71
71
|
width: 32px;
|
|
72
72
|
}
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
[dir="rtl"] {
|
|
84
|
-
.browse-group-categories-block .blacklight-
|
|
84
|
+
.browse-group-categories-block .blacklight-icons-arrow-alt-circle-left, .blacklight-icons-arrow-alt-circle-right{
|
|
85
85
|
transform: rotate(180deg);
|
|
86
86
|
}
|
|
87
87
|
// Hack to override overflow issue not fixed in RTL upstream in tiny-slider
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for ArrowAltCircleLeft
|
|
6
|
+
class ArrowAltCircleLeftComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
9
|
+
<!-- Font Awesome Free 5.15.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) -->
|
|
10
|
+
<path d="M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for ArrowAltCircleRight
|
|
6
|
+
class ArrowAltCircleRightComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
9
|
+
<!-- Font Awesome Free 5.15.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) -->
|
|
10
|
+
<path d="M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for ArrowBackIos
|
|
6
|
+
class ArrowBackIosComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path opacity=".87" fill="none" d="M0 0h24v24H0V0z"/>
|
|
10
|
+
<path d="M17.51 3.87L15.73 2.1 5.84 12l9.9 9.9 1.77-1.77L9.38 12l8.13-8.13z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for ArrowForwardIos
|
|
6
|
+
class ArrowForwardIosComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path opacity=".87" fill="none" d="M24 24H0V0h24v24z"/>
|
|
10
|
+
<path d="M6.49 20.13l1.77 1.77 9.9-9.9-9.9-9.9-1.77 1.77L14.62 12l-8.13 8.13z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for CheckCircle
|
|
6
|
+
class CheckCircleComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path fill="none" d="M0 0h24v24H0V0z"/>
|
|
10
|
+
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for Check
|
|
6
|
+
class CheckComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path fill="none" d="M0 0h24v24H0V0z"/>
|
|
10
|
+
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for ChevronRight
|
|
6
|
+
class ChevronRightComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path fill="none" d="M0 0h24v24H0V0z"/>
|
|
10
|
+
<path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for Close
|
|
6
|
+
class CloseComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
|
|
9
|
+
<path d="M0 0h24v24H0V0z" fill="none"/>
|
|
10
|
+
<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for Edit
|
|
6
|
+
class EditComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path fill="none" d="M0 0h24v24H0V0z"/>
|
|
10
|
+
<path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM21.41 6.34l-3.75-3.75-2.53 2.54 3.75 3.75 2.53-2.54z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for Error
|
|
6
|
+
class ErrorComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
|
|
10
|
+
</svg>
|
|
11
|
+
SVG
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for HighlightOff
|
|
6
|
+
class HighlightOffComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
|
|
9
|
+
<path d="M0 0h24v24H0V0z" fill="none"/>
|
|
10
|
+
<path d="M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for Info
|
|
6
|
+
class InfoComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path fill="none" d="M0 0h24v24H0V0z"/>
|
|
10
|
+
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for Warning
|
|
6
|
+
class WarningComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
9
|
+
<path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/>
|
|
10
|
+
</svg>
|
|
11
|
+
SVG
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for ZoomIn
|
|
6
|
+
class ZoomInComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
|
|
9
|
+
<path d="M0 0h24v24H0V0z" fill="none"/>
|
|
10
|
+
<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zm.5-7H9v2H7v1h2v2h1v-2h2V9h-2z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Icons
|
|
5
|
+
# Icon for ZoomOut
|
|
6
|
+
class ZoomOutComponent < Spotlight::IconComponent
|
|
7
|
+
self.svg = <<~SVG
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
|
|
9
|
+
<path d="M0 0h24v24H0V0z" fill="none"/>
|
|
10
|
+
<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7V9z"/>
|
|
11
|
+
</svg>
|
|
12
|
+
SVG
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<table class="table analytics">
|
|
2
|
+
<tr>
|
|
3
|
+
<% display_fields.each_pair do |key, value| %>
|
|
4
|
+
<td class="value <%= key %>"><%= format_field(key, value) %></td>
|
|
5
|
+
<% end %>
|
|
6
|
+
</tr>
|
|
7
|
+
<tfoot>
|
|
8
|
+
<tr>
|
|
9
|
+
<% display_fields.each_pair do |key, value| %>
|
|
10
|
+
<th><%= I18n.t("spotlight.dashboards.analytics.#{key}") %></th>
|
|
11
|
+
<% end %>
|
|
12
|
+
</tr>
|
|
13
|
+
</tfoot>
|
|
14
|
+
</table>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spotlight
|
|
4
|
+
module Analytics
|
|
5
|
+
# Display Analytics aggregations as table
|
|
6
|
+
class AggregationComponent < ViewComponent::Base
|
|
7
|
+
def initialize(data:, exclude_fields: nil)
|
|
8
|
+
super
|
|
9
|
+
@exclude_fields = exclude_fields
|
|
10
|
+
@data = data
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def render?
|
|
14
|
+
display_fields.to_h.present?
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def display_fields
|
|
18
|
+
return @data unless @exclude_fields
|
|
19
|
+
|
|
20
|
+
filtered_data = @data.to_h.except(*@exclude_fields)
|
|
21
|
+
OpenStruct.new(filtered_data)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def format_field(key, value)
|
|
25
|
+
if value.is_a?(Float)
|
|
26
|
+
if key.to_s.downcase.include?('rate')
|
|
27
|
+
"#{(value * 100).to_i}%"
|
|
28
|
+
else
|
|
29
|
+
Kernel.format('%.2f', value)
|
|
30
|
+
end
|
|
31
|
+
else
|
|
32
|
+
value
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<% if results? %>
|
|
2
|
+
<%= cache current_exhibit, expires_in: 1.hour do %>
|
|
3
|
+
<h2><%= I18n.t("spotlight.dashboards.analytics.reporting_period_heading") %></h2>
|
|
4
|
+
<h3 class="h5 mt-4"><%= I18n.t("spotlight.dashboards.analytics.visitor_header") %></h3>
|
|
5
|
+
<%= render Spotlight::Analytics::AggregationComponent.new(data: page_analytics.totals) %>
|
|
6
|
+
|
|
7
|
+
<h3 class="h5 mt-4"><%= I18n.t("spotlight.dashboards.analytics.session_header") %></h3>
|
|
8
|
+
<%= render Spotlight::Analytics::AggregationComponent.new(data: search_analytics.totals, exclude_fields: [:eventCount] ) %>
|
|
9
|
+
|
|
10
|
+
<% unless page_analytics.rows.empty? %>
|
|
11
|
+
<h3 class="h5 mt-4"><%= I18n.t("spotlight.dashboards.analytics.pages.header") %></h4>
|
|
12
|
+
<table class="table table-striped popular-pages">
|
|
13
|
+
<thead>
|
|
14
|
+
<tr>
|
|
15
|
+
<th><%= I18n.t("spotlight.dashboards.analytics.pagetitle") %></th>
|
|
16
|
+
<th class="text-right text-end"><%= I18n.t("spotlight.dashboards.analytics.pageviews") %></th>
|
|
17
|
+
</tr>
|
|
18
|
+
</thead>
|
|
19
|
+
<% page_analytics.rows.each do |p| %>
|
|
20
|
+
<tr>
|
|
21
|
+
<td><%= link_to p.pageTitle, p.pagePath %></td>
|
|
22
|
+
<td class="text-right text-end"><%= p.screenPageViews %></td>
|
|
23
|
+
</tr>
|
|
24
|
+
<% end %>
|
|
25
|
+
</table>
|
|
26
|
+
<% end %>
|
|
27
|
+
|
|
28
|
+
<% unless search_analytics.rows.empty? %>
|
|
29
|
+
<h3 class="h5 mt-4"><%= I18n.t("spotlight.dashboards.analytics.searches.header") %></h4>
|
|
30
|
+
<table class="table table-striped popular-pages">
|
|
31
|
+
<thead>
|
|
32
|
+
<tr>
|
|
33
|
+
<th><%= I18n.t("spotlight.dashboards.analytics.searches.term") %></th>
|
|
34
|
+
<th class="text-right text-end"><%= I18n.t("spotlight.dashboards.analytics.searches.views") %></th>
|
|
35
|
+
</tr>
|
|
36
|
+
</thead>
|
|
37
|
+
<% search_analytics.rows.each do |p| %>
|
|
38
|
+
<% if p.searchTerm.present? %>
|
|
39
|
+
<tr>
|
|
40
|
+
<td><%= p.searchTerm %></td>
|
|
41
|
+
<td class="text-right text-end"><%= p.eventCount %></td>
|
|
42
|
+
</tr>
|
|
43
|
+
<% end %>
|
|
44
|
+
<% end %>
|
|
45
|
+
</table>
|
|
46
|
+
<% end %>
|
|
47
|
+
<% end %>
|
|
48
|
+
<% else %>
|
|
49
|
+
<%= I18n.t("spotlight.dashboards.analytics.no_results", pageurl: page_url) %>
|
|
50
|
+
<% end %>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spotlight
|
|
4
|
+
module Analytics
|
|
5
|
+
# Display Analytics
|
|
6
|
+
class DashboardComponent < ViewComponent::Base
|
|
7
|
+
attr_reader :current_exhibit, :dates
|
|
8
|
+
|
|
9
|
+
def initialize(current_exhibit:)
|
|
10
|
+
super
|
|
11
|
+
@current_exhibit = current_exhibit
|
|
12
|
+
@dates = { 'start_date' => '365daysAgo', 'end_date' => 'today' }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def results?
|
|
16
|
+
page_analytics.totals.to_h.present? || search_analytics.totals.to_h.present?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def page_url
|
|
20
|
+
@page_url ||= helpers.exhibit_root_path(current_exhibit)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def page_analytics
|
|
24
|
+
@page_analytics ||= current_exhibit.page_analytics(dates, page_url)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def search_analytics
|
|
28
|
+
@search_analytics ||= current_exhibit.analytics(dates, page_url)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<%= content_tag @component,
|
|
2
|
+
id: @id,
|
|
3
|
+
data: {
|
|
4
|
+
'document-id': @document.id.to_s.parameterize,
|
|
5
|
+
'document-counter': @counter,
|
|
6
|
+
'label-toggle': @document.id
|
|
7
|
+
},
|
|
8
|
+
itemscope: true,
|
|
9
|
+
itemtype: @document.itemtype,
|
|
10
|
+
class: classes.flatten.join(' ') do %>
|
|
11
|
+
<% # header bar for doc items in index view -%>
|
|
12
|
+
<td class="spotlight-admin-thumbnail">
|
|
13
|
+
<%= thumbnail %>
|
|
14
|
+
</td>
|
|
15
|
+
<td>
|
|
16
|
+
<%# header bar for doc items in index view -%>
|
|
17
|
+
<div class="documentHeader row" data-label-toggle="<%= @document.id %>">
|
|
18
|
+
<h5 class="index_title col-md-12">
|
|
19
|
+
<%= helpers.link_to_document(presenter.document, itemprop: 'name') %>
|
|
20
|
+
</h5>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class="page-links">
|
|
24
|
+
<%= helpers.view_link presenter.document, helpers.link_to_document(presenter.document) %> ·
|
|
25
|
+
<%= helpers.exhibit_edit_link presenter.document, [:edit, helpers.current_exhibit, presenter.document] %>
|
|
26
|
+
</div>
|
|
27
|
+
</td>
|
|
28
|
+
|
|
29
|
+
<td class="text-nowrap">
|
|
30
|
+
<%= timestamp %>
|
|
31
|
+
</td>
|
|
32
|
+
|
|
33
|
+
<td class="checkbox-toggle">
|
|
34
|
+
<%= render partial: 'document_visibility_control', locals: { document: presenter.document} %>
|
|
35
|
+
</td>
|
|
36
|
+
<% end %>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spotlight
|
|
4
|
+
# Displays the document
|
|
5
|
+
# This overrides the title method to provide an edit link.
|
|
6
|
+
class DocumentAdminTableComponent < Blacklight::DocumentComponent
|
|
7
|
+
def initialize(component: 'tr', **kwargs)
|
|
8
|
+
super
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def classes
|
|
12
|
+
super + ['doc-row']
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def timestamp
|
|
16
|
+
return unless presenter.document[presenter.configuration.index.timestamp_field]
|
|
17
|
+
|
|
18
|
+
l Date.parse(presenter.document[presenter.configuration.index.timestamp_field])
|
|
19
|
+
rescue StandardError
|
|
20
|
+
nil
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= top_bar %>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spotlight
|
|
4
|
+
# Displays the document
|
|
5
|
+
class IconComponent < Blacklight::Icons::IconComponent
|
|
6
|
+
if Blacklight.version < '8.0'
|
|
7
|
+
# Work around https://github.com/projectblacklight/blacklight/issues/3232 (fixed in Blacklight 8.0)
|
|
8
|
+
def classes
|
|
9
|
+
(@classes - ['blacklight-icons-'] + ["blacklight-icons-#{name}"]).uniq
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -36,6 +36,8 @@ module Spotlight
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def show
|
|
39
|
+
# For Blacklight 8, @document_list will be nil but
|
|
40
|
+
# will be required for Blacklight 7 to work correctly.
|
|
39
41
|
@response, @document_list = search_service.search_results do |builder|
|
|
40
42
|
builder.with(params.merge(browse_category_id: @search.id))
|
|
41
43
|
end
|