@internetarchive/collection-browser 0.2.17-alpha.0 → 0.2.20-alpha.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.
- package/dist/src/analytics/analytics-handler-interface.d.ts +25 -0
- package/dist/src/analytics/analytics-handler-interface.js +2 -0
- package/dist/src/analytics/analytics-handler-interface.js.map +1 -0
- package/dist/src/app-root.d.ts +5 -0
- package/dist/src/app-root.js +69 -0
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.d.ts +3 -0
- package/dist/src/collection-browser.js +67 -21
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets.d.ts +3 -0
- package/dist/src/collection-facets.js +12 -0
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/models.d.ts +1 -0
- package/dist/src/models.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.d.ts +5 -2
- package/dist/src/tiles/grid/item-tile.js +28 -2
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/image-block.js +1 -1
- package/dist/src/tiles/image-block.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +2 -0
- package/dist/src/tiles/list/tile-list.js +14 -1
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/text-snippet-block.d.ts +29 -0
- package/dist/src/tiles/text-snippet-block.js +128 -0
- package/dist/src/tiles/text-snippet-block.js.map +1 -0
- package/dist/src/utils/analytics-category-event.d.ts +14 -0
- package/dist/src/utils/analytics-category-event.js +15 -0
- package/dist/src/utils/analytics-category-event.js.map +1 -0
- package/dist/test/collection-browser.test.js +25 -1
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/mocks/mock-search-responses.d.ts +2 -1
- package/dist/test/mocks/mock-search-responses.js +27 -1
- package/dist/test/mocks/mock-search-responses.js.map +1 -1
- package/dist/test/mocks/mock-search-service.js +6 -2
- package/dist/test/mocks/mock-search-service.js.map +1 -1
- package/dist/test/text-snippet-block.test.d.ts +1 -0
- package/dist/test/text-snippet-block.test.js +52 -0
- package/dist/test/text-snippet-block.test.js.map +1 -0
- package/dist/test/tiles/grid/item-tile.test.js +15 -0
- package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list.test.d.ts +1 -0
- package/dist/test/tiles/list/tile-list.test.js +42 -0
- package/dist/test/tiles/list/tile-list.test.js.map +1 -0
- package/package.json +4 -3
- package/src/analytics/analytics-handler-interface.ts +28 -0
- package/src/app-root.ts +76 -0
- package/src/collection-browser.ts +69 -15
- package/src/collection-facets.ts +19 -0
- package/src/models.ts +1 -0
- package/src/tiles/grid/item-tile.ts +35 -2
- package/src/tiles/image-block.ts +1 -1
- package/src/tiles/list/tile-list.ts +14 -1
- package/src/tiles/text-snippet-block.ts +130 -0
- package/src/utils/analytics-category-event.ts +15 -0
- package/test/collection-browser.test.ts +39 -0
- package/test/mocks/mock-search-responses.ts +34 -1
- package/test/mocks/mock-search-service.ts +10 -2
- package/test/text-snippet-block.test.ts +69 -0
- package/test/tiles/grid/item-tile.test.ts +19 -0
- package/test/tiles/list/tile-list.test.ts +51 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AnalyticsEvent } from '@internetarchive/analytics-manager';
|
|
2
|
+
export interface AnalyticsHandlerInterface {
|
|
3
|
+
/**
|
|
4
|
+
* A general purpose analytics ping that takes arbitrary key-value pairs
|
|
5
|
+
* and pings the analytics endpoint
|
|
6
|
+
*
|
|
7
|
+
* @param {Record<string, any>} values
|
|
8
|
+
*/
|
|
9
|
+
sendPing(values: Record<string, any>): void;
|
|
10
|
+
/**
|
|
11
|
+
* Send a sampled event
|
|
12
|
+
*
|
|
13
|
+
* @param {options} AnalyticsEvent
|
|
14
|
+
*/
|
|
15
|
+
sendEvent(options: AnalyticsEvent): void;
|
|
16
|
+
/**
|
|
17
|
+
* Send an unsampled event.
|
|
18
|
+
*
|
|
19
|
+
* **NOTE** Use sparingly as it can generate a lot of events
|
|
20
|
+
* and deplete our event budget.
|
|
21
|
+
*
|
|
22
|
+
* @param {options} AnalyticsEvent
|
|
23
|
+
*/
|
|
24
|
+
sendEventNoSampling(options: AnalyticsEvent): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-handler-interface.js","sourceRoot":"","sources":["../../../src/analytics/analytics-handler-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type { AnalyticsEvent } from '@internetarchive/analytics-manager';\n\nexport interface AnalyticsHandlerInterface {\n /**\n * A general purpose analytics ping that takes arbitrary key-value pairs\n * and pings the analytics endpoint\n *\n * @param {Record<string, any>} values\n */\n sendPing(values: Record<string, any>): void;\n\n /**\n * Send a sampled event\n *\n * @param {options} AnalyticsEvent\n */\n sendEvent(options: AnalyticsEvent): void;\n\n /**\n * Send an unsampled event.\n *\n * **NOTE** Use sparingly as it can generate a lot of events\n * and deplete our event budget.\n *\n * @param {options} AnalyticsEvent\n */\n sendEventNoSampling(options: AnalyticsEvent): void;\n}\n"]}
|
package/dist/src/app-root.d.ts
CHANGED
|
@@ -12,9 +12,13 @@ export declare class AppRoot extends LitElement {
|
|
|
12
12
|
private rowGap;
|
|
13
13
|
private colGap;
|
|
14
14
|
private loggedIn;
|
|
15
|
+
private actionBlob?;
|
|
15
16
|
private baseQueryField;
|
|
16
17
|
private pageNumberInput;
|
|
17
18
|
private collectionBrowser;
|
|
19
|
+
private analyticsManager;
|
|
20
|
+
private analyticsHandler;
|
|
21
|
+
private sendAnalytics;
|
|
18
22
|
private searchPressed;
|
|
19
23
|
private changePagePressed;
|
|
20
24
|
protected updated(changed: PropertyValues): void;
|
|
@@ -23,6 +27,7 @@ export declare class AppRoot extends LitElement {
|
|
|
23
27
|
private baseQueryChanged;
|
|
24
28
|
private loginChanged;
|
|
25
29
|
private outlineChanged;
|
|
30
|
+
private snippetsChanged;
|
|
26
31
|
private rowGapChanged;
|
|
27
32
|
private colGapChanged;
|
|
28
33
|
private widthChanged;
|
package/dist/src/app-root.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
+
import { AnalyticsManager, } from '@internetarchive/analytics-manager';
|
|
2
3
|
import { SearchService } from '@internetarchive/search-service';
|
|
3
4
|
import { LocalCache } from '@internetarchive/local-cache';
|
|
4
5
|
import { html, css, LitElement } from 'lit';
|
|
@@ -21,6 +22,18 @@ let AppRoot = class AppRoot extends LitElement {
|
|
|
21
22
|
this.rowGap = 1.7;
|
|
22
23
|
this.colGap = 1.7;
|
|
23
24
|
this.loggedIn = false;
|
|
25
|
+
this.analyticsManager = new AnalyticsManager();
|
|
26
|
+
this.analyticsHandler = {
|
|
27
|
+
sendPing: this.sendAnalytics,
|
|
28
|
+
sendEvent: this.sendAnalytics,
|
|
29
|
+
sendEventNoSampling: this.sendAnalytics,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
sendAnalytics(ae) {
|
|
33
|
+
var _a;
|
|
34
|
+
this.actionBlob = `{category: ${ae.category}, action: ${ae.action}, label: ${ae.label}}`;
|
|
35
|
+
console.log('actionBlob: ', this.actionBlob);
|
|
36
|
+
(_a = this.analyticsManager) === null || _a === void 0 ? void 0 : _a.sendEventNoSampling(ae);
|
|
24
37
|
}
|
|
25
38
|
searchPressed(e) {
|
|
26
39
|
var _a, _b;
|
|
@@ -65,6 +78,8 @@ let AppRoot = class AppRoot extends LitElement {
|
|
|
65
78
|
<input type="submit" value="Go" />
|
|
66
79
|
</form>
|
|
67
80
|
|
|
81
|
+
<h3>Last Event Captured:: ${this.actionBlob}</h3>
|
|
82
|
+
|
|
68
83
|
<div id="cell-controls">
|
|
69
84
|
<div id="cell-size-control">
|
|
70
85
|
<div>
|
|
@@ -109,6 +124,14 @@ let AppRoot = class AppRoot extends LitElement {
|
|
|
109
124
|
@click=${this.loginChanged}
|
|
110
125
|
/>
|
|
111
126
|
</div>
|
|
127
|
+
<div>
|
|
128
|
+
<label for="show-dummy-snippets">Show dummy snippets:</label>
|
|
129
|
+
<input
|
|
130
|
+
type="checkbox"
|
|
131
|
+
id="show-dummy-snippets"
|
|
132
|
+
@click=${this.snippetsChanged}
|
|
133
|
+
/>
|
|
134
|
+
</div>
|
|
112
135
|
</div>
|
|
113
136
|
<div id="cell-gap-control">
|
|
114
137
|
<div>
|
|
@@ -150,6 +173,7 @@ let AppRoot = class AppRoot extends LitElement {
|
|
|
150
173
|
.collectionNameCache=${this.collectionNameCache}
|
|
151
174
|
.showHistogramDatePicker=${true}
|
|
152
175
|
.loggedIn=${this.loggedIn}
|
|
176
|
+
.analyticsHandler=${this.analyticsHandler}
|
|
153
177
|
@visiblePageChanged=${this.visiblePageChanged}
|
|
154
178
|
@baseQueryChanged=${this.baseQueryChanged}
|
|
155
179
|
>
|
|
@@ -178,6 +202,48 @@ let AppRoot = class AppRoot extends LitElement {
|
|
|
178
202
|
this.collectionBrowser.style.removeProperty('--infiniteScrollerCellOutline');
|
|
179
203
|
}
|
|
180
204
|
}
|
|
205
|
+
async snippetsChanged(e) {
|
|
206
|
+
const target = e.target;
|
|
207
|
+
if (target.checked) {
|
|
208
|
+
// Decorate the default search service with a wrapper that adds
|
|
209
|
+
// dummy snippets to any successful searches
|
|
210
|
+
this.searchService = {
|
|
211
|
+
...SearchService.default,
|
|
212
|
+
async search(params) {
|
|
213
|
+
var _a;
|
|
214
|
+
const result = await SearchService.default.search(params);
|
|
215
|
+
(_a = result.success) === null || _a === void 0 ? void 0 : _a.response.docs.forEach(doc => {
|
|
216
|
+
const metadata = doc.rawMetadata;
|
|
217
|
+
if (metadata) {
|
|
218
|
+
metadata.snippets = [
|
|
219
|
+
'this is a text {{{snippet}}} block with potentially',
|
|
220
|
+
'multiple {{{snippets}}} and such',
|
|
221
|
+
'but the {{{snippet}}} block may be quite long perhaps',
|
|
222
|
+
'depending on how many {{{snippet}}} matches there are',
|
|
223
|
+
'there may be multiple lines of {{{snippets}}} to show',
|
|
224
|
+
'but each {{{snippet}}} should be relatively short',
|
|
225
|
+
'and {{{snippets}}} are each a {{{snippet}}} of text',
|
|
226
|
+
'but every {{{snippet}}} might have multiple matches',
|
|
227
|
+
'the {{{snippets}}} should be separated and surrounded by ellipses',
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
return result;
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
// Restore the default seach service
|
|
237
|
+
this.searchService = SearchService.default;
|
|
238
|
+
}
|
|
239
|
+
// Re-perform the current search to show/hide the snippets immediately
|
|
240
|
+
const oldQuery = this.searchQuery;
|
|
241
|
+
this.searchQuery = ''; // Should just reset to the placeholder
|
|
242
|
+
await this.updateComplete;
|
|
243
|
+
// For unclear reasons, Safari refuses to re-apply the old query until the next tick, hence:
|
|
244
|
+
await new Promise(res => setTimeout(res, 0));
|
|
245
|
+
this.searchQuery = oldQuery; // Re-apply the original query
|
|
246
|
+
}
|
|
181
247
|
rowGapChanged(e) {
|
|
182
248
|
const input = e.target;
|
|
183
249
|
this.rowGap = parseFloat(input.value);
|
|
@@ -269,6 +335,9 @@ __decorate([
|
|
|
269
335
|
__decorate([
|
|
270
336
|
state()
|
|
271
337
|
], AppRoot.prototype, "loggedIn", void 0);
|
|
338
|
+
__decorate([
|
|
339
|
+
state()
|
|
340
|
+
], AppRoot.prototype, "actionBlob", void 0);
|
|
272
341
|
__decorate([
|
|
273
342
|
query('#base-query-field')
|
|
274
343
|
], AppRoot.prototype, "baseQueryField", void 0);
|
package/dist/src/app-root.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../src/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["import { SearchService } from '@internetarchive/search-service';\nimport { LocalCache } from '@internetarchive/local-cache';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, query, state } from 'lit/decorators.js';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport { CollectionNameCache } from '@internetarchive/collection-name-cache';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private searchService = SearchService.default;\n\n private resizeObserver = new SharedResizeObserver();\n\n private localCache = new LocalCache();\n\n private collectionNameCache = new CollectionNameCache({\n searchService: this.searchService,\n localCache: this.localCache,\n });\n\n @state() private currentPage?: number;\n\n @state() private searchQuery?: string;\n\n @state() private cellWidth: number = 18;\n\n @state() private cellHeight: number = 29;\n\n @state() private rowGap: number = 1.7;\n\n @state() private colGap: number = 1.7;\n\n @state() private loggedIn: boolean = false;\n\n @query('#base-query-field') private baseQueryField!: HTMLInputElement;\n\n @query('#page-number-input') private pageNumberInput!: HTMLInputElement;\n\n @query('collection-browser') private collectionBrowser!: CollectionBrowser;\n\n private searchPressed(e: Event) {\n e.preventDefault();\n this.searchQuery = this.baseQueryField.value;\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(this.currentPage ?? 1);\n }\n }\n\n private changePagePressed(e: Event) {\n e.preventDefault();\n this.currentPage = this.pageNumberInput.valueAsNumber;\n this.collectionBrowser.goToPage(this.currentPage);\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('currentPage') && this.currentPage) {\n this.pageNumberInput.value = this.currentPage.toString();\n }\n\n if (changed.has('searchQuery')) {\n this.queryUpdated();\n }\n }\n\n private queryUpdated() {\n this.collectionBrowser.baseQuery = this.searchQuery;\n }\n\n render() {\n return html`\n <div id=\"dev-tools\">\n <form @submit=${this.searchPressed}>\n Query:\n <input\n type=\"text\"\n id=\"base-query-field\"\n .value=${this.searchQuery ?? ''}\n />\n <input type=\"submit\" value=\"Search\" />\n </form>\n\n <form @submit=${this.changePagePressed}>\n Page: <input type=\"number\" value=\"1\" id=\"page-number-input\" />\n <input type=\"submit\" value=\"Go\" />\n </form>\n\n <div id=\"cell-controls\">\n <div id=\"cell-size-control\">\n <div>\n <label for=\"cell-width-slider\">Minimum cell width:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"18\"\n step=\"0.1\"\n id=\"cell-width-slider\"\n @input=${this.widthChanged}\n />\n <span>${this.cellWidth}rem</span>\n </div>\n <div>\n <label for=\"cell-height-slider\">Cell height:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"29\"\n step=\"0.1\"\n id=\"cell-height-slider\"\n @input=${this.heightChanged}\n />\n <span>${this.cellHeight}rem</span>\n </div>\n <div>\n <label for=\"show-outline-check\">Show outlines:</label>\n <input\n type=\"checkbox\"\n id=\"show-outline-check\"\n @click=${this.outlineChanged}\n />\n </div>\n <div>\n <label for=\"simulate-login\">Simulate Login:</label>\n <input\n type=\"checkbox\"\n id=\"simulate-login\"\n @click=${this.loginChanged}\n />\n </div>\n </div>\n <div id=\"cell-gap-control\">\n <div>\n <label for=\"cell-row-gap-slider\">Row gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-row-gap-slider\"\n @input=${this.rowGapChanged}\n />\n <span>${this.rowGap}rem</span>\n </div>\n <div>\n <label for=\"cell-col-gap-slider\">Col gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-col-gap-slider\"\n @input=${this.colGapChanged}\n />\n <span>${this.colGap}rem</span>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"collection-browser-container\">\n <collection-browser\n .baseNavigationUrl=${'https://archive.org'}\n .baseImageUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .resizeObserver=${this.resizeObserver}\n .collectionNameCache=${this.collectionNameCache}\n .showHistogramDatePicker=${true}\n .loggedIn=${this.loggedIn}\n @visiblePageChanged=${this.visiblePageChanged}\n @baseQueryChanged=${this.baseQueryChanged}\n >\n </collection-browser>\n </div>\n `;\n }\n\n private baseQueryChanged(e: CustomEvent<{ baseQuery?: string }>) {\n this.searchQuery = e.detail.baseQuery;\n }\n\n private loginChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.loggedIn = true;\n } else {\n this.loggedIn = false;\n }\n }\n\n private outlineChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.style.setProperty(\n '--infiniteScrollerCellOutline',\n '1px solid #33D1FF'\n );\n } else {\n this.collectionBrowser.style.removeProperty(\n '--infiniteScrollerCellOutline'\n );\n }\n }\n\n private rowGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.rowGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserRowGap',\n `${input.value}rem`\n );\n }\n\n private colGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.colGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserColGap',\n `${input.value}rem`\n );\n }\n\n private widthChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellWidth = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinWidth',\n `${input.value}rem`\n );\n }\n\n private heightChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellHeight = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinHeight',\n `${input.value}rem`\n );\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMaxHeight',\n `${input.value}rem`\n );\n }\n\n private visiblePageChanged(e: CustomEvent<{ pageNumber: number }>) {\n const { pageNumber } = e.detail;\n if (pageNumber === this.currentPage) return;\n this.currentPage = pageNumber;\n }\n\n static styles = css`\n :host {\n display: block;\n }\n\n input,\n button {\n font-size: 1.6rem;\n }\n\n collection-browser {\n margin-top: 30rem;\n }\n\n #base-query-field {\n width: 300px;\n }\n\n #dev-tools {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 10;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n padding: 0.5rem 1rem;\n border: 1px solid black;\n }\n\n #cell-controls {\n display: flex;\n }\n\n #cell-controls label {\n display: inline-block;\n width: 10rem;\n }\n\n #cell-gap-control {\n margin-left: 1rem;\n }\n `;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../src/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AnalyticsEvent,\n AnalyticsManager,\n} from '@internetarchive/analytics-manager';\nimport { SearchService } from '@internetarchive/search-service';\nimport { LocalCache } from '@internetarchive/local-cache';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, query, state } from 'lit/decorators.js';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport { CollectionNameCache } from '@internetarchive/collection-name-cache';\n\nimport type { AnalyticsHandlerInterface } from './analytics/analytics-handler-interface';\nimport type { CollectionBrowser } from '../src/collection-browser';\n\nimport '../src/collection-browser';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private searchService = SearchService.default;\n\n private resizeObserver = new SharedResizeObserver();\n\n private localCache = new LocalCache();\n\n private collectionNameCache = new CollectionNameCache({\n searchService: this.searchService,\n localCache: this.localCache,\n });\n\n @state() private currentPage?: number;\n\n @state() private searchQuery?: string;\n\n @state() private cellWidth: number = 18;\n\n @state() private cellHeight: number = 29;\n\n @state() private rowGap: number = 1.7;\n\n @state() private colGap: number = 1.7;\n\n @state() private loggedIn: boolean = false;\n\n @state() private actionBlob?: string;\n\n @query('#base-query-field') private baseQueryField!: HTMLInputElement;\n\n @query('#page-number-input') private pageNumberInput!: HTMLInputElement;\n\n @query('collection-browser') private collectionBrowser!: CollectionBrowser;\n\n private analyticsManager = new AnalyticsManager();\n\n private analyticsHandler: AnalyticsHandlerInterface = {\n sendPing: this.sendAnalytics,\n sendEvent: this.sendAnalytics,\n sendEventNoSampling: this.sendAnalytics,\n };\n\n private sendAnalytics(ae: AnalyticsEvent) {\n this.actionBlob = `{category: ${ae.category}, action: ${ae.action}, label: ${ae.label}}`;\n console.log('actionBlob: ', this.actionBlob);\n this.analyticsManager?.sendEventNoSampling(ae);\n }\n\n private searchPressed(e: Event) {\n e.preventDefault();\n this.searchQuery = this.baseQueryField.value;\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(this.currentPage ?? 1);\n }\n }\n\n private changePagePressed(e: Event) {\n e.preventDefault();\n this.currentPage = this.pageNumberInput.valueAsNumber;\n this.collectionBrowser.goToPage(this.currentPage);\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('currentPage') && this.currentPage) {\n this.pageNumberInput.value = this.currentPage.toString();\n }\n\n if (changed.has('searchQuery')) {\n this.queryUpdated();\n }\n }\n\n private queryUpdated() {\n this.collectionBrowser.baseQuery = this.searchQuery;\n }\n\n render() {\n return html`\n <div id=\"dev-tools\">\n <form @submit=${this.searchPressed}>\n Query:\n <input\n type=\"text\"\n id=\"base-query-field\"\n .value=${this.searchQuery ?? ''}\n />\n <input type=\"submit\" value=\"Search\" />\n </form>\n\n <form @submit=${this.changePagePressed}>\n Page: <input type=\"number\" value=\"1\" id=\"page-number-input\" />\n <input type=\"submit\" value=\"Go\" />\n </form>\n\n <h3>Last Event Captured:: ${this.actionBlob}</h3>\n\n <div id=\"cell-controls\">\n <div id=\"cell-size-control\">\n <div>\n <label for=\"cell-width-slider\">Minimum cell width:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"18\"\n step=\"0.1\"\n id=\"cell-width-slider\"\n @input=${this.widthChanged}\n />\n <span>${this.cellWidth}rem</span>\n </div>\n <div>\n <label for=\"cell-height-slider\">Cell height:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"29\"\n step=\"0.1\"\n id=\"cell-height-slider\"\n @input=${this.heightChanged}\n />\n <span>${this.cellHeight}rem</span>\n </div>\n <div>\n <label for=\"show-outline-check\">Show outlines:</label>\n <input\n type=\"checkbox\"\n id=\"show-outline-check\"\n @click=${this.outlineChanged}\n />\n </div>\n <div>\n <label for=\"simulate-login\">Simulate Login:</label>\n <input\n type=\"checkbox\"\n id=\"simulate-login\"\n @click=${this.loginChanged}\n />\n </div>\n <div>\n <label for=\"show-dummy-snippets\">Show dummy snippets:</label>\n <input\n type=\"checkbox\"\n id=\"show-dummy-snippets\"\n @click=${this.snippetsChanged}\n />\n </div>\n </div>\n <div id=\"cell-gap-control\">\n <div>\n <label for=\"cell-row-gap-slider\">Row gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-row-gap-slider\"\n @input=${this.rowGapChanged}\n />\n <span>${this.rowGap}rem</span>\n </div>\n <div>\n <label for=\"cell-col-gap-slider\">Col gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-col-gap-slider\"\n @input=${this.colGapChanged}\n />\n <span>${this.colGap}rem</span>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"collection-browser-container\">\n <collection-browser\n .baseNavigationUrl=${'https://archive.org'}\n .baseImageUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .resizeObserver=${this.resizeObserver}\n .collectionNameCache=${this.collectionNameCache}\n .showHistogramDatePicker=${true}\n .loggedIn=${this.loggedIn}\n .analyticsHandler=${this.analyticsHandler}\n @visiblePageChanged=${this.visiblePageChanged}\n @baseQueryChanged=${this.baseQueryChanged}\n >\n </collection-browser>\n </div>\n `;\n }\n\n private baseQueryChanged(e: CustomEvent<{ baseQuery?: string }>) {\n this.searchQuery = e.detail.baseQuery;\n }\n\n private loginChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.loggedIn = true;\n } else {\n this.loggedIn = false;\n }\n }\n\n private outlineChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.style.setProperty(\n '--infiniteScrollerCellOutline',\n '1px solid #33D1FF'\n );\n } else {\n this.collectionBrowser.style.removeProperty(\n '--infiniteScrollerCellOutline'\n );\n }\n }\n\n private async snippetsChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n // Decorate the default search service with a wrapper that adds\n // dummy snippets to any successful searches\n this.searchService = {\n ...SearchService.default,\n async search(params) {\n const result = await SearchService.default.search(params);\n result.success?.response.docs.forEach(doc => {\n const metadata = doc.rawMetadata;\n if (metadata) {\n metadata.snippets = [\n 'this is a text {{{snippet}}} block with potentially',\n 'multiple {{{snippets}}} and such',\n 'but the {{{snippet}}} block may be quite long perhaps',\n 'depending on how many {{{snippet}}} matches there are',\n 'there may be multiple lines of {{{snippets}}} to show',\n 'but each {{{snippet}}} should be relatively short',\n 'and {{{snippets}}} are each a {{{snippet}}} of text',\n 'but every {{{snippet}}} might have multiple matches',\n 'the {{{snippets}}} should be separated and surrounded by ellipses',\n ];\n }\n });\n return result;\n },\n };\n } else {\n // Restore the default seach service\n this.searchService = SearchService.default;\n }\n\n // Re-perform the current search to show/hide the snippets immediately\n const oldQuery = this.searchQuery;\n this.searchQuery = ''; // Should just reset to the placeholder\n await this.updateComplete;\n // For unclear reasons, Safari refuses to re-apply the old query until the next tick, hence:\n await new Promise(res => setTimeout(res, 0));\n this.searchQuery = oldQuery; // Re-apply the original query\n }\n\n private rowGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.rowGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserRowGap',\n `${input.value}rem`\n );\n }\n\n private colGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.colGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserColGap',\n `${input.value}rem`\n );\n }\n\n private widthChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellWidth = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinWidth',\n `${input.value}rem`\n );\n }\n\n private heightChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellHeight = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinHeight',\n `${input.value}rem`\n );\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMaxHeight',\n `${input.value}rem`\n );\n }\n\n private visiblePageChanged(e: CustomEvent<{ pageNumber: number }>) {\n const { pageNumber } = e.detail;\n if (pageNumber === this.currentPage) return;\n this.currentPage = pageNumber;\n }\n\n static styles = css`\n :host {\n display: block;\n }\n\n input,\n button {\n font-size: 1.6rem;\n }\n\n collection-browser {\n margin-top: 30rem;\n }\n\n #base-query-field {\n width: 300px;\n }\n\n #dev-tools {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 10;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n padding: 0.5rem 1rem;\n border: 1px solid black;\n }\n\n #cell-controls {\n display: flex;\n }\n\n #cell-controls label {\n display: inline-block;\n width: 10rem;\n }\n\n #cell-gap-control {\n margin-left: 1rem;\n }\n `;\n}\n"]}
|
|
@@ -65,6 +65,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
65
65
|
private placeholderType;
|
|
66
66
|
private contentContainer;
|
|
67
67
|
private languageCodeHandler;
|
|
68
|
+
private analyticsHandler?;
|
|
68
69
|
/**
|
|
69
70
|
* When we're animated scrolling to the page, we don't want to fetch
|
|
70
71
|
* all of the pages as it scrolls so this lets us know if we're scrolling
|
|
@@ -93,6 +94,8 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
93
94
|
*/
|
|
94
95
|
private dataSource;
|
|
95
96
|
private infiniteScroller;
|
|
97
|
+
private analyticsCategories;
|
|
98
|
+
private analyticsActions;
|
|
96
99
|
/**
|
|
97
100
|
* Go to the given page of results
|
|
98
101
|
*
|
|
@@ -15,6 +15,7 @@ import { RestorationStateHandler, } from './restoration-state-handler';
|
|
|
15
15
|
import chevronIcon from './assets/img/icons/chevron';
|
|
16
16
|
import { LanguageCodeHandler } from './language-code-handler/language-code-handler';
|
|
17
17
|
import './empty-placeholder';
|
|
18
|
+
import { analyticsActions, analyticsCategories, } from './utils/analytics-category-event';
|
|
18
19
|
let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
19
20
|
constructor() {
|
|
20
21
|
super(...arguments);
|
|
@@ -77,6 +78,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
77
78
|
* for the previous/next page, we'll fetch the next/previous page to populate it
|
|
78
79
|
*/
|
|
79
80
|
this.dataSource = {};
|
|
81
|
+
this.analyticsCategories = analyticsCategories;
|
|
82
|
+
this.analyticsActions = analyticsActions;
|
|
80
83
|
// we only want to scroll on the very first query change
|
|
81
84
|
// so this keeps track of whether we've already set the initial query
|
|
82
85
|
this.initialQueryChangeHappened = false;
|
|
@@ -181,7 +184,9 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
181
184
|
? this.totalResults.toLocaleString()
|
|
182
185
|
: '-'}
|
|
183
186
|
</span>
|
|
184
|
-
<span id="big-results-label">
|
|
187
|
+
<span id="big-results-label">
|
|
188
|
+
${this.totalResults === 1 ? 'Result' : 'Results'}
|
|
189
|
+
</span>
|
|
185
190
|
</div>
|
|
186
191
|
</div>
|
|
187
192
|
<div
|
|
@@ -212,18 +217,21 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
212
217
|
></infinite-scroller>`;
|
|
213
218
|
}
|
|
214
219
|
get sortFilterBarTemplate() {
|
|
215
|
-
return html
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
220
|
+
return html `
|
|
221
|
+
<sort-filter-bar
|
|
222
|
+
.selectedSort=${this.selectedSort}
|
|
223
|
+
.sortDirection=${this.sortDirection}
|
|
224
|
+
.displayMode=${this.displayMode}
|
|
225
|
+
.selectedTitleFilter=${this.selectedTitleFilter}
|
|
226
|
+
.selectedCreatorFilter=${this.selectedCreatorFilter}
|
|
227
|
+
.resizeObserver=${this.resizeObserver}
|
|
228
|
+
@sortChanged=${this.userChangedSort}
|
|
229
|
+
@displayModeChanged=${this.displayModeChanged}
|
|
230
|
+
@titleLetterChanged=${this.titleLetterSelected}
|
|
231
|
+
@creatorLetterChanged=${this.creatorLetterSelected}
|
|
232
|
+
>
|
|
233
|
+
</sort-filter-bar>
|
|
234
|
+
`;
|
|
227
235
|
}
|
|
228
236
|
userChangedSort(e) {
|
|
229
237
|
var _a;
|
|
@@ -236,6 +244,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
236
244
|
this.currentPage = 1;
|
|
237
245
|
}
|
|
238
246
|
selectedSortChanged() {
|
|
247
|
+
var _a;
|
|
239
248
|
if (this.selectedSort === 'relevance' || this.sortDirection === null) {
|
|
240
249
|
this.sortParam = null;
|
|
241
250
|
return;
|
|
@@ -244,19 +253,42 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
244
253
|
if (!sortField)
|
|
245
254
|
return;
|
|
246
255
|
this.sortParam = { field: sortField, direction: this.sortDirection };
|
|
256
|
+
(_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEventNoSampling({
|
|
257
|
+
category: this.analyticsCategories.default,
|
|
258
|
+
action: this.analyticsActions.sortBy,
|
|
259
|
+
label: `${sortField} - ${this.sortDirection}`,
|
|
260
|
+
});
|
|
247
261
|
}
|
|
248
262
|
displayModeChanged(e) {
|
|
263
|
+
var _a;
|
|
249
264
|
this.displayMode = e.detail.displayMode;
|
|
265
|
+
(_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEventNoSampling({
|
|
266
|
+
category: this.analyticsCategories.default,
|
|
267
|
+
action: this.analyticsActions.displayMode,
|
|
268
|
+
label: this.displayMode,
|
|
269
|
+
});
|
|
250
270
|
}
|
|
251
271
|
selectedTitleLetterChanged() {
|
|
272
|
+
var _a;
|
|
252
273
|
this.titleQuery = this.selectedTitleFilter
|
|
253
274
|
? `firstTitle:${this.selectedTitleFilter}`
|
|
254
275
|
: undefined;
|
|
276
|
+
(_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEventNoSampling({
|
|
277
|
+
category: this.analyticsCategories.default,
|
|
278
|
+
action: this.analyticsActions.sortByTitle,
|
|
279
|
+
label: `${this.titleQuery}`,
|
|
280
|
+
});
|
|
255
281
|
}
|
|
256
282
|
selectedCreatorLetterChanged() {
|
|
283
|
+
var _a;
|
|
257
284
|
this.creatorQuery = this.selectedCreatorFilter
|
|
258
285
|
? `firstCreator:${this.selectedCreatorFilter}`
|
|
259
286
|
: undefined;
|
|
287
|
+
(_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEventNoSampling({
|
|
288
|
+
category: this.analyticsCategories.default,
|
|
289
|
+
action: this.analyticsActions.sortByCreator,
|
|
290
|
+
label: `${this.creatorQuery}`,
|
|
291
|
+
});
|
|
260
292
|
}
|
|
261
293
|
titleLetterSelected(e) {
|
|
262
294
|
this.selectedCreatorFilter = null;
|
|
@@ -307,7 +339,11 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
307
339
|
?collapsableFacets=${this.mobileView}
|
|
308
340
|
?facetsLoading=${this.facetDataLoading}
|
|
309
341
|
?fullYearAggregationLoading=${this.fullYearAggregationLoading}
|
|
310
|
-
|
|
342
|
+
.analyticsHandler=${this.analyticsHandler}
|
|
343
|
+
.analyticsCategories=${this.analyticsCategories}
|
|
344
|
+
.analyticsActions=${this.analyticsActions}
|
|
345
|
+
>
|
|
346
|
+
</collection-facets>
|
|
311
347
|
`;
|
|
312
348
|
}
|
|
313
349
|
get loadingTemplate() {
|
|
@@ -347,8 +383,14 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
347
383
|
`;
|
|
348
384
|
}
|
|
349
385
|
histogramDateRangeUpdated(e) {
|
|
386
|
+
var _a;
|
|
350
387
|
const { minDate, maxDate } = e.detail;
|
|
351
388
|
this.dateRangeQueryClause = `year:[${minDate} TO ${maxDate}]`;
|
|
389
|
+
(_a = this.analyticsHandler) === null || _a === void 0 ? void 0 : _a.sendEventNoSampling({
|
|
390
|
+
category: this.analyticsCategories.default,
|
|
391
|
+
action: this.analyticsActions.histogramChanged,
|
|
392
|
+
label: this.dateRangeQueryClause,
|
|
393
|
+
});
|
|
352
394
|
}
|
|
353
395
|
firstUpdated() {
|
|
354
396
|
this.setupStateRestorationObserver();
|
|
@@ -834,7 +876,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
834
876
|
const datasource = { ...this.dataSource };
|
|
835
877
|
const tiles = [];
|
|
836
878
|
docs === null || docs === void 0 ? void 0 : docs.forEach(doc => {
|
|
837
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
|
|
879
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9;
|
|
838
880
|
if (!doc.identifier)
|
|
839
881
|
return;
|
|
840
882
|
let loginRequired = false;
|
|
@@ -871,11 +913,12 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
871
913
|
issue: (_u = doc.issue) === null || _u === void 0 ? void 0 : _u.value,
|
|
872
914
|
itemCount: (_w = (_v = doc.item_count) === null || _v === void 0 ? void 0 : _v.value) !== null && _w !== void 0 ? _w : 0,
|
|
873
915
|
mediatype: (_y = (_x = doc.mediatype) === null || _x === void 0 ? void 0 : _x.value) !== null && _y !== void 0 ? _y : 'data',
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
916
|
+
snippets: (_0 = (_z = doc.snippets) === null || _z === void 0 ? void 0 : _z.values) !== null && _0 !== void 0 ? _0 : [],
|
|
917
|
+
source: (_1 = doc.source) === null || _1 === void 0 ? void 0 : _1.value,
|
|
918
|
+
subjects: (_3 = (_2 = doc.subject) === null || _2 === void 0 ? void 0 : _2.values) !== null && _3 !== void 0 ? _3 : [],
|
|
919
|
+
title: this.etreeTitle((_4 = doc.title) === null || _4 === void 0 ? void 0 : _4.value, (_5 = doc.mediatype) === null || _5 === void 0 ? void 0 : _5.value, (_6 = doc.collection) === null || _6 === void 0 ? void 0 : _6.values),
|
|
920
|
+
volume: (_7 = doc.volume) === null || _7 === void 0 ? void 0 : _7.value,
|
|
921
|
+
viewCount: (_9 = (_8 = doc.downloads) === null || _8 === void 0 ? void 0 : _8.value) !== null && _9 !== void 0 ? _9 : 0,
|
|
879
922
|
loginRequired,
|
|
880
923
|
contentWarning,
|
|
881
924
|
});
|
|
@@ -998,7 +1041,7 @@ CollectionBrowser.styles = css `
|
|
|
998
1041
|
padding-right: 1rem;
|
|
999
1042
|
}
|
|
1000
1043
|
|
|
1001
|
-
#left-column::-webkit-scrollbar {
|
|
1044
|
+
.desktop #left-column::-webkit-scrollbar {
|
|
1002
1045
|
display: none;
|
|
1003
1046
|
}
|
|
1004
1047
|
|
|
@@ -1250,6 +1293,9 @@ __decorate([
|
|
|
1250
1293
|
__decorate([
|
|
1251
1294
|
query('#content-container')
|
|
1252
1295
|
], CollectionBrowser.prototype, "contentContainer", void 0);
|
|
1296
|
+
__decorate([
|
|
1297
|
+
property({ type: Object, attribute: false })
|
|
1298
|
+
], CollectionBrowser.prototype, "analyticsHandler", void 0);
|
|
1253
1299
|
__decorate([
|
|
1254
1300
|
query('infinite-scroller')
|
|
1255
1301
|
], CollectionBrowser.prototype, "infiniteScroller", void 0);
|