@internetarchive/collection-browser 0.2.19 → 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 +63 -19
- 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/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 +65 -13
- 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/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;
|
|
@@ -214,18 +217,21 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
214
217
|
></infinite-scroller>`;
|
|
215
218
|
}
|
|
216
219
|
get sortFilterBarTemplate() {
|
|
217
|
-
return html
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
+
`;
|
|
229
235
|
}
|
|
230
236
|
userChangedSort(e) {
|
|
231
237
|
var _a;
|
|
@@ -238,6 +244,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
238
244
|
this.currentPage = 1;
|
|
239
245
|
}
|
|
240
246
|
selectedSortChanged() {
|
|
247
|
+
var _a;
|
|
241
248
|
if (this.selectedSort === 'relevance' || this.sortDirection === null) {
|
|
242
249
|
this.sortParam = null;
|
|
243
250
|
return;
|
|
@@ -246,19 +253,42 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
246
253
|
if (!sortField)
|
|
247
254
|
return;
|
|
248
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
|
+
});
|
|
249
261
|
}
|
|
250
262
|
displayModeChanged(e) {
|
|
263
|
+
var _a;
|
|
251
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
|
+
});
|
|
252
270
|
}
|
|
253
271
|
selectedTitleLetterChanged() {
|
|
272
|
+
var _a;
|
|
254
273
|
this.titleQuery = this.selectedTitleFilter
|
|
255
274
|
? `firstTitle:${this.selectedTitleFilter}`
|
|
256
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
|
+
});
|
|
257
281
|
}
|
|
258
282
|
selectedCreatorLetterChanged() {
|
|
283
|
+
var _a;
|
|
259
284
|
this.creatorQuery = this.selectedCreatorFilter
|
|
260
285
|
? `firstCreator:${this.selectedCreatorFilter}`
|
|
261
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
|
+
});
|
|
262
292
|
}
|
|
263
293
|
titleLetterSelected(e) {
|
|
264
294
|
this.selectedCreatorFilter = null;
|
|
@@ -309,7 +339,11 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
309
339
|
?collapsableFacets=${this.mobileView}
|
|
310
340
|
?facetsLoading=${this.facetDataLoading}
|
|
311
341
|
?fullYearAggregationLoading=${this.fullYearAggregationLoading}
|
|
312
|
-
|
|
342
|
+
.analyticsHandler=${this.analyticsHandler}
|
|
343
|
+
.analyticsCategories=${this.analyticsCategories}
|
|
344
|
+
.analyticsActions=${this.analyticsActions}
|
|
345
|
+
>
|
|
346
|
+
</collection-facets>
|
|
313
347
|
`;
|
|
314
348
|
}
|
|
315
349
|
get loadingTemplate() {
|
|
@@ -349,8 +383,14 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
349
383
|
`;
|
|
350
384
|
}
|
|
351
385
|
histogramDateRangeUpdated(e) {
|
|
386
|
+
var _a;
|
|
352
387
|
const { minDate, maxDate } = e.detail;
|
|
353
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
|
+
});
|
|
354
394
|
}
|
|
355
395
|
firstUpdated() {
|
|
356
396
|
this.setupStateRestorationObserver();
|
|
@@ -836,7 +876,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
836
876
|
const datasource = { ...this.dataSource };
|
|
837
877
|
const tiles = [];
|
|
838
878
|
docs === null || docs === void 0 ? void 0 : docs.forEach(doc => {
|
|
839
|
-
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;
|
|
840
880
|
if (!doc.identifier)
|
|
841
881
|
return;
|
|
842
882
|
let loginRequired = false;
|
|
@@ -873,11 +913,12 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
873
913
|
issue: (_u = doc.issue) === null || _u === void 0 ? void 0 : _u.value,
|
|
874
914
|
itemCount: (_w = (_v = doc.item_count) === null || _v === void 0 ? void 0 : _v.value) !== null && _w !== void 0 ? _w : 0,
|
|
875
915
|
mediatype: (_y = (_x = doc.mediatype) === null || _x === void 0 ? void 0 : _x.value) !== null && _y !== void 0 ? _y : 'data',
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
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,
|
|
881
922
|
loginRequired,
|
|
882
923
|
contentWarning,
|
|
883
924
|
});
|
|
@@ -1252,6 +1293,9 @@ __decorate([
|
|
|
1252
1293
|
__decorate([
|
|
1253
1294
|
query('#content-container')
|
|
1254
1295
|
], CollectionBrowser.prototype, "contentContainer", void 0);
|
|
1296
|
+
__decorate([
|
|
1297
|
+
property({ type: Object, attribute: false })
|
|
1298
|
+
], CollectionBrowser.prototype, "analyticsHandler", void 0);
|
|
1255
1299
|
__decorate([
|
|
1256
1300
|
query('infinite-scroller')
|
|
1257
1301
|
], CollectionBrowser.prototype, "infiniteScroller", void 0);
|