@internetarchive/ia-item-navigator 1.1.0 → 2.0.0-alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/demo/app-root.ts +190 -28
  2. package/dist/demo/app-root.d.ts +7 -3
  3. package/dist/demo/app-root.js +158 -22
  4. package/dist/demo/app-root.js.map +1 -1
  5. package/dist/index.d.ts +4 -1
  6. package/dist/index.js +5 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/src/{item-navigator.js → iaux-item-navigator.js} +3 -10
  9. package/dist/src/iaux-item-navigator.js.map +1 -0
  10. package/dist/src/menu-slider/ia-menu-slider.js +1 -1
  11. package/dist/src/menu-slider/ia-menu-slider.js.map +1 -1
  12. package/dist/src/menus/iaux-sharing-options.d.ts +28 -0
  13. package/dist/src/menus/iaux-sharing-options.js +277 -0
  14. package/dist/src/menus/iaux-sharing-options.js.map +1 -0
  15. package/dist/src/menus/iaux-viewable-files.d.ts +32 -0
  16. package/dist/src/menus/iaux-viewable-files.js +367 -0
  17. package/dist/src/menus/iaux-viewable-files.js.map +1 -0
  18. package/dist/src/menus/share-providers/email.d.ts +11 -0
  19. package/dist/src/menus/share-providers/email.js +15 -0
  20. package/dist/src/menus/share-providers/email.js.map +1 -0
  21. package/dist/src/menus/share-providers/facebook.d.ts +11 -0
  22. package/dist/src/menus/share-providers/facebook.js +15 -0
  23. package/dist/src/menus/share-providers/facebook.js.map +1 -0
  24. package/dist/src/menus/share-providers/pinterest.d.ts +11 -0
  25. package/dist/src/menus/share-providers/pinterest.js +15 -0
  26. package/dist/src/menus/share-providers/pinterest.js.map +1 -0
  27. package/dist/src/menus/share-providers/provider.d.ts +20 -0
  28. package/dist/src/menus/share-providers/provider.js +37 -0
  29. package/dist/src/menus/share-providers/provider.js.map +1 -0
  30. package/dist/src/menus/share-providers/share-provider-interface.d.ts +13 -0
  31. package/dist/src/menus/share-providers/share-provider-interface.js +2 -0
  32. package/dist/src/menus/share-providers/share-provider-interface.js.map +1 -0
  33. package/dist/src/menus/share-providers/tumblr.d.ts +11 -0
  34. package/dist/src/menus/share-providers/tumblr.js +15 -0
  35. package/dist/src/menus/share-providers/tumblr.js.map +1 -0
  36. package/dist/src/menus/share-providers/twitter.d.ts +11 -0
  37. package/dist/src/menus/share-providers/twitter.js +15 -0
  38. package/dist/src/menus/share-providers/twitter.js.map +1 -0
  39. package/dist/test/iaux-item-navigator.test.d.ts +1 -0
  40. package/dist/test/{ia-item-navigator.test.js → iaux-item-navigator.test.js} +49 -27
  41. package/dist/test/iaux-item-navigator.test.js.map +1 -0
  42. package/dist/test/iaux-sharing-options.test.d.ts +1 -0
  43. package/dist/test/iaux-sharing-options.test.js +64 -0
  44. package/dist/test/iaux-sharing-options.test.js.map +1 -0
  45. package/index.ts +9 -1
  46. package/package.json +11 -4
  47. package/src/{item-navigator.ts → iaux-item-navigator.ts} +2 -10
  48. package/src/menu-slider/ia-menu-slider.ts +1 -1
  49. package/src/menus/foo.json +84 -0
  50. package/src/menus/iaux-sharing-options.ts +281 -0
  51. package/src/menus/iaux-viewable-files.ts +377 -0
  52. package/src/menus/share-providers/email.ts +23 -0
  53. package/src/menus/share-providers/facebook.ts +23 -0
  54. package/src/menus/share-providers/pinterest.ts +23 -0
  55. package/src/menus/share-providers/provider.ts +63 -0
  56. package/src/menus/share-providers/share-provider-interface.ts +17 -0
  57. package/src/menus/share-providers/tumblr.ts +23 -0
  58. package/src/menus/share-providers/twitter.ts +23 -0
  59. package/test/ia-sharing-options.test.js +78 -0
  60. package/test/{ia-item-navigator.test.ts → iaux-item-navigator.test.ts} +49 -27
  61. package/test/iaux-sharing-options.test.ts +84 -0
  62. package/dist/src/item-navigator.js.map +0 -1
  63. package/dist/test/ia-item-navigator.test.d.ts +0 -1
  64. package/dist/test/ia-item-navigator.test.js.map +0 -1
  65. /package/dist/src/{item-navigator.d.ts → iaux-item-navigator.d.ts} +0 -0
@@ -0,0 +1,15 @@
1
+ import '@internetarchive/icon-twitter/icon-twitter';
2
+ import { html } from 'lit';
3
+ import Provider from './provider';
4
+ export default class TwitterProvider extends Provider {
5
+ constructor(params) {
6
+ super(params);
7
+ this.name = 'Twitter';
8
+ this.icon = html `<ia-icon-twitter></ia-icon-twitter>`;
9
+ this.class = 'twitter';
10
+ }
11
+ get url() {
12
+ return `https://twitter.com/intent/tweet?url=https://${this.baseHost}/details/${this.itemPath}&via=internetarchive&text=${this.encodedDescription}+%3A+${this.encodedCreator}${this.encodedPromoCopy}`;
13
+ }
14
+ }
15
+ //# sourceMappingURL=twitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twitter.js","sourceRoot":"","sources":["../../../../src/menus/share-providers/twitter.ts"],"names":[],"mappings":"AAAA,OAAO,4CAA4C,CAAC;AACpD,OAAO,EAAkB,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAGlC,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,QAAQ;IAOnD,YAAY,MAAsB;QAChC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA,qCAAqC,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,IAAa,GAAG;QACd,OAAO,gDAAgD,IAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,QAAQ,6BAA6B,IAAI,CAAC,kBAAkB,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzM,CAAC;CACF","sourcesContent":["import '@internetarchive/icon-twitter/icon-twitter';\nimport { TemplateResult, html } from 'lit';\nimport Provider from './provider';\nimport { ProviderParams } from './share-provider-interface';\n\nexport default class TwitterProvider extends Provider {\n name: string;\n\n icon: TemplateResult;\n\n class: string;\n\n constructor(params: ProviderParams) {\n super(params);\n this.name = 'Twitter';\n this.icon = html`<ia-icon-twitter></ia-icon-twitter>`;\n this.class = 'twitter';\n }\n\n override get url(): string {\n return `https://twitter.com/intent/tweet?url=https://${this.baseHost}/details/${this.itemPath}&via=internetarchive&text=${this.encodedDescription}+%3A+${this.encodedCreator}${this.encodedPromoCopy}`;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ import '../src/iaux-item-navigator';
@@ -3,8 +3,8 @@ import { html, fixture, expect } from '@open-wc/testing';
3
3
  import Sinon from 'sinon';
4
4
  import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
5
5
  import { ModalManager } from '@internetarchive/modal-manager';
6
- import '../src/item-navigator';
7
- import { ItemStub, menuProvider, shortcut } from '../test/ia-stub';
6
+ import '../src/iaux-item-navigator';
7
+ import { ItemStub, menuProvider, shortcut } from './ia-stub';
8
8
  afterEach(() => {
9
9
  Sinon.restore();
10
10
  });
@@ -12,7 +12,9 @@ describe('ItemNavigator', () => {
12
12
  describe('Theaters', () => {
13
13
  it('shows <ia-no-theater-available> if told', async () => {
14
14
  var _a;
15
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
15
+ const el = await fixture(html `<iaux-item-navigator
16
+ .item=${new ItemStub()}
17
+ ></iaux-item-navigator>`);
16
18
  el.viewAvailable = false;
17
19
  await el.updateComplete;
18
20
  expect(el.viewAvailable).to.be.false;
@@ -20,7 +22,9 @@ describe('ItemNavigator', () => {
20
22
  });
21
23
  it('opens main slot by default', async () => {
22
24
  var _a, _b;
23
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
25
+ const el = await fixture(html `<iaux-item-navigator
26
+ .item=${new ItemStub()}
27
+ ></iaux-item-navigator>`);
24
28
  expect(el.viewAvailable).to.be.true;
25
29
  expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('ia-no-theater-available')).to.be
26
30
  .null;
@@ -30,18 +34,20 @@ describe('ItemNavigator', () => {
30
34
  describe('`el.loaded`', () => {
31
35
  it('toggles the spinning loader', async () => {
32
36
  var _a;
33
- const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
37
+ const el = await fixture(html `<iaux-item-navigator></iaux-item-navigator>`);
34
38
  expect(el.loaded).to.be.null; // initial load
35
39
  expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('ia-itemnav-loader')).to.exist;
36
40
  });
37
41
  it('hides reader section if `!loaded`', async () => {
38
42
  var _a, _b;
39
- const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
43
+ const el = await fixture(html `<iaux-item-navigator></iaux-item-navigator>`);
40
44
  expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#reader')) === null || _b === void 0 ? void 0 : _b.getAttribute('class')).to.contain('hidden');
41
45
  });
42
46
  it('shows reader when `loaded` ', async () => {
43
47
  var _a, _b;
44
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
48
+ const el = await fixture(html `<iaux-item-navigator
49
+ .item=${new ItemStub()}
50
+ ></iaux-item-navigator>`);
45
51
  el.loaded = true;
46
52
  await el.updateComplete;
47
53
  const mainTheaterSection = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#reader');
@@ -52,7 +58,7 @@ describe('ItemNavigator', () => {
52
58
  expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('slot[name="main"]')).to.exist;
53
59
  });
54
60
  it('listens to `@loadingStateUpdated` to update `loaded` for <no-theater-available>', async () => {
55
- const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
61
+ const el = await fixture(html `<iaux-item-navigator></iaux-item-navigator>`);
56
62
  await el.updateComplete;
57
63
  const spy = Sinon.spy();
58
64
  el.loadingStateUpdated = spy;
@@ -70,32 +76,32 @@ describe('ItemNavigator', () => {
70
76
  describe('`el.sharedObserver`', () => {
71
77
  it('uses one', async () => {
72
78
  const sharedObserver = new SharedResizeObserver();
73
- const el = await fixture(html `<ia-item-navigator
79
+ const el = await fixture(html `<iaux-item-navigator
74
80
  .sharedObserver=${sharedObserver}
75
- ></ia-item-navigator>`);
81
+ ></iaux-item-navigator>`);
76
82
  expect(el.sharedObserver).to.equal(sharedObserver);
77
83
  expect(typeof el.handleResize).to.equal('function');
78
84
  });
79
85
  it('freshly registers handlers', async () => {
80
86
  const sharedObserver = new SharedResizeObserver();
81
87
  const addObserverSpy = Sinon.spy(sharedObserver, 'addObserver');
82
- await fixture(html `<ia-item-navigator
88
+ await fixture(html `<iaux-item-navigator
83
89
  .sharedObserver=${sharedObserver}
84
- ></ia-item-navigator>`);
90
+ ></iaux-item-navigator>`);
85
91
  expect(addObserverSpy.callCount).to.equal(2);
86
92
  });
87
93
  it('removes handler when component disconnects', async () => {
88
94
  const sharedObserver = new SharedResizeObserver();
89
95
  const removeObserverSpy = Sinon.spy(sharedObserver, 'removeObserver');
90
- const el = await fixture(html `<ia-item-navigator
96
+ const el = await fixture(html `<iaux-item-navigator
91
97
  .sharedObserver=${sharedObserver}
92
- ></ia-item-navigator>`);
98
+ ></iaux-item-navigator>`);
93
99
  el.disconnectedCallback();
94
100
  await el.updateComplete;
95
101
  expect(removeObserverSpy.callCount).to.equal(1);
96
102
  });
97
103
  it('sets menu to overlay if container width is <= 600px', async () => {
98
- const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
104
+ const el = await fixture(html `<iaux-item-navigator></iaux-item-navigator>`);
99
105
  expect(el.openMenuState).to.equal('shift'); // as starting point
100
106
  const overlaySize = {
101
107
  contentRect: { width: 600 },
@@ -114,21 +120,21 @@ describe('ItemNavigator', () => {
114
120
  describe('`el.modal`', () => {
115
121
  it('uses one', async () => {
116
122
  const modal = new ModalManager();
117
- const el = await fixture(html `<ia-item-navigator .modal=${modal}></ia-item-navigator>`);
123
+ const el = await fixture(html `<iaux-item-navigator .modal=${modal}></iaux-item-navigator>`);
118
124
  expect(el.modal).to.equal(modal);
119
125
  });
120
126
  });
121
127
  describe('full browser window immersion "fullscreen"', () => {
122
128
  it('creates reflected attribute `viewportinfullscreen`', async () => {
123
129
  /** to help with external styling adjustmnents */
124
- const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
130
+ const el = await fixture(html `<iaux-item-navigator></iaux-item-navigator>`);
125
131
  expect(el.getAttribute('viewportinfullscreen')).to.be.null;
126
132
  el.viewportInFullscreen = true;
127
133
  await el.updateComplete;
128
134
  expect(el.getAttribute('viewportinfullscreen')).to.exist;
129
135
  });
130
136
  it('@ViewportInFullScreen', async () => {
131
- const el = await fixture(html `<ia-item-navigator></ia-item-navigator>`);
137
+ const el = await fixture(html `<iaux-item-navigator></iaux-item-navigator>`);
132
138
  expect(el.viewportInFullscreen).to.be.null;
133
139
  const yesFullscreenEvent = {
134
140
  detail: {
@@ -152,7 +158,9 @@ describe('ItemNavigator', () => {
152
158
  describe('el.menuOpened', () => {
153
159
  it('toggles side menu open', async () => {
154
160
  var _a, _b, _c;
155
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
161
+ const el = await fixture(html `<iaux-item-navigator
162
+ .item=${new ItemStub()}
163
+ ></iaux-item-navigator>`);
156
164
  el.menuContents = [menuProvider];
157
165
  await el.updateComplete;
158
166
  const nav = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('nav');
@@ -168,7 +176,9 @@ describe('ItemNavigator', () => {
168
176
  });
169
177
  it('opens menu shortcut with `@manageSideMenuEvents`', async () => {
170
178
  var _a;
171
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
179
+ const el = await fixture(html `<iaux-item-navigator
180
+ .item=${new ItemStub()}
181
+ ></iaux-item-navigator>`);
172
182
  const detail = {
173
183
  menuId: 'fullscreen',
174
184
  action: 'open',
@@ -219,7 +229,9 @@ describe('ItemNavigator', () => {
219
229
  describe('el.menuContents', () => {
220
230
  it('draws side menu when populated', async () => {
221
231
  var _a;
222
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
232
+ const el = await fixture(html `<iaux-item-navigator
233
+ .item=${new ItemStub()}
234
+ ></iaux-item-navigator>`);
223
235
  el.menuContents = [menuProvider];
224
236
  await el.updateComplete;
225
237
  expect(el.menuContents.length).to.exist;
@@ -235,7 +247,9 @@ describe('ItemNavigator', () => {
235
247
  describe('`el.menuShortcuts`', () => {
236
248
  it('displays shortcut & toggle side menu button', async () => {
237
249
  var _a;
238
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
250
+ const el = await fixture(html `<iaux-item-navigator
251
+ .item=${new ItemStub()}
252
+ ></iaux-item-navigator>`);
239
253
  const anotherShortcut = {
240
254
  id: 'foo',
241
255
  icon: html `<i class="foo-shortcut"></i>`,
@@ -255,7 +269,9 @@ describe('ItemNavigator', () => {
255
269
  });
256
270
  describe('Menu events', () => {
257
271
  it('`el.setMenuShortcuts`', async () => {
258
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
272
+ const el = await fixture(html `<iaux-item-navigator
273
+ .item=${new ItemStub()}
274
+ ></iaux-item-navigator>`);
259
275
  expect(el.menuShortcuts.length).to.equal(0);
260
276
  const menuShortcuts = [shortcut];
261
277
  el.setMenuShortcuts({
@@ -265,7 +281,9 @@ describe('ItemNavigator', () => {
265
281
  expect(el.menuShortcuts.length).to.equal(1);
266
282
  });
267
283
  it('`el.setMenuContents`', async () => {
268
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
284
+ const el = await fixture(html `<iaux-item-navigator
285
+ .item=${new ItemStub()}
286
+ ></iaux-item-navigator>`);
269
287
  expect(el.menuContents.length).to.equal(0);
270
288
  el.setMenuShortcuts({
271
289
  detail: [menuProvider],
@@ -274,7 +292,9 @@ describe('ItemNavigator', () => {
274
292
  expect(el.menuShortcuts.length).to.equal(1);
275
293
  });
276
294
  it('`el.setOpenMenu`', async () => {
277
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
295
+ const el = await fixture(html `<iaux-item-navigator
296
+ .item=${new ItemStub()}
297
+ ></iaux-item-navigator>`);
278
298
  el.setOpenMenu({
279
299
  detail: { id: 'foo' },
280
300
  });
@@ -290,7 +310,9 @@ describe('ItemNavigator', () => {
290
310
  expect(el.selectedMenuId).to.equal('');
291
311
  });
292
312
  it('`el.closeMenu`', async () => {
293
- const el = await fixture(html `<ia-item-navigator .item=${new ItemStub()}></ia-item-navigator>`);
313
+ const el = await fixture(html `<iaux-item-navigator
314
+ .item=${new ItemStub()}
315
+ ></iaux-item-navigator>`);
294
316
  el.menuOpened = true;
295
317
  await el.updateComplete;
296
318
  expect(el.menuOpened).to.be.true;
@@ -300,4 +322,4 @@ describe('ItemNavigator', () => {
300
322
  });
301
323
  });
302
324
  });
303
- //# sourceMappingURL=ia-item-navigator.test.js.map
325
+ //# sourceMappingURL=iaux-item-navigator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iaux-item-navigator.test.js","sourceRoot":"","sources":["../../test/iaux-item-navigator.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\nimport { html, fixture, expect } from '@open-wc/testing';\nimport Sinon from 'sinon';\n\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport { ModalManager } from '@internetarchive/modal-manager';\nimport { ItemNavigator } from '../src/iaux-item-navigator';\nimport '../src/iaux-item-navigator';\n\nimport { ItemStub, menuProvider, shortcut } from './ia-stub';\nimport {\n ManageFullscreenEvent,\n ToggleSideMenuOpenEvent,\n SetSideMenuContentsEvent,\n SetSideMenuShortcutsEvent,\n ToggleSidePanelOpenEvent,\n} from '../src/interfaces/event-interfaces';\n\nafterEach(() => {\n Sinon.restore();\n});\n\ndescribe('ItemNavigator', () => {\n describe('Theaters', () => {\n it('shows <ia-no-theater-available> if told', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n el.viewAvailable = false;\n await el.updateComplete;\n expect(el.viewAvailable).to.be.false;\n expect(el.shadowRoot?.querySelector('ia-no-theater-available')).to.exist;\n });\n it('opens main slot by default', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n\n expect(el.viewAvailable).to.be.true;\n expect(el.shadowRoot?.querySelector('ia-no-theater-available')).to.be\n .null;\n expect(el.shadowRoot?.querySelector('slot[name=\"main\"]')).to.exist;\n });\n });\n describe('`el.loaded`', () => {\n it('toggles the spinning loader', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator></iaux-item-navigator>`,\n );\n expect(el.loaded).to.be.null; // initial load\n expect(el.shadowRoot?.querySelector('ia-itemnav-loader')).to.exist;\n });\n it('hides reader section if `!loaded`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator></iaux-item-navigator>`,\n );\n\n expect(\n el.shadowRoot?.querySelector('#reader')?.getAttribute('class'),\n ).to.contain('hidden');\n });\n it('shows reader when `loaded` ', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n\n el.loaded = true;\n await el.updateComplete;\n const mainTheaterSection = el.shadowRoot?.querySelector('#reader');\n expect(mainTheaterSection?.classList.contains('hide')).to.be.false;\n expect(el.loaded).to.be.true;\n // `loaded` property is reflected as DOM attribute\n expect(el.hasAttribute('loaded')).to.equal(true);\n expect(el.shadowRoot?.querySelector('slot[name=\"main\"]')).to.exist;\n });\n it('listens to `@loadingStateUpdated` to update `loaded` for <no-theater-available>', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator></iaux-item-navigator>`,\n );\n\n await el.updateComplete;\n const spy = Sinon.spy();\n el.loadingStateUpdated = spy;\n el.loaded = null;\n el.viewAvailable = false;\n await el.updateComplete;\n // check base properties\n expect(el.loaded).to.equal(null);\n expect(el.item).to.be.undefined;\n\n // spy fires\n expect(spy.called).to.equal(true);\n expect(spy.callCount).to.equal(1);\n });\n });\n\n describe('`el.sharedObserver`', () => {\n it('uses one', async () => {\n const sharedObserver = new SharedResizeObserver();\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .sharedObserver=${sharedObserver}\n ></iaux-item-navigator>`,\n );\n\n expect(el.sharedObserver).to.equal(sharedObserver);\n expect(typeof el.handleResize).to.equal('function');\n });\n it('freshly registers handlers', async () => {\n const sharedObserver = new SharedResizeObserver();\n const addObserverSpy = Sinon.spy(sharedObserver, 'addObserver');\n\n await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .sharedObserver=${sharedObserver}\n ></iaux-item-navigator>`,\n );\n\n expect(addObserverSpy.callCount).to.equal(2);\n });\n it('removes handler when component disconnects', async () => {\n const sharedObserver = new SharedResizeObserver();\n const removeObserverSpy = Sinon.spy(sharedObserver, 'removeObserver');\n\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .sharedObserver=${sharedObserver}\n ></iaux-item-navigator>`,\n );\n\n el.disconnectedCallback();\n await el.updateComplete;\n\n expect(removeObserverSpy.callCount).to.equal(1);\n });\n it('sets menu to overlay if container width is <= 600px', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator></iaux-item-navigator>`,\n );\n\n expect(el.openMenuState).to.equal('shift'); // as starting point\n\n const overlaySize = {\n contentRect: { width: 600 },\n } as ResizeObserverEntry;\n el.handleResize(overlaySize);\n await el.updateComplete;\n\n expect(el.openMenuState).to.equal('overlay'); // changes open menu display to an overlay\n\n const shiftSize = {\n contentRect: { width: 601 },\n } as ResizeObserverEntry;\n el.handleResize(shiftSize);\n await el.updateComplete;\n\n expect(el.openMenuState).to.equal('shift');\n });\n });\n\n describe('`el.modal`', () => {\n it('uses one', async () => {\n const modal = new ModalManager();\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator .modal=${modal}></iaux-item-navigator>`,\n );\n expect(el.modal).to.equal(modal);\n });\n });\n\n describe('full browser window immersion \"fullscreen\"', () => {\n it('creates reflected attribute `viewportinfullscreen`', async () => {\n /** to help with external styling adjustmnents */\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator></iaux-item-navigator>`,\n );\n expect(el.getAttribute('viewportinfullscreen')).to.be.null;\n\n el.viewportInFullscreen = true;\n await el.updateComplete;\n\n expect(el.getAttribute('viewportinfullscreen')).to.exist;\n });\n it('@ViewportInFullScreen', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator></iaux-item-navigator>`,\n );\n expect(el.viewportInFullscreen).to.be.null;\n\n const yesFullscreenEvent = {\n detail: {\n isFullScreen: true,\n },\n } as ManageFullscreenEvent;\n el.manageViewportFullscreen(yesFullscreenEvent);\n await el.updateComplete;\n expect(el.viewportInFullscreen).to.be.true;\n\n const noFullscreenEvent = {\n detail: {\n isFullScreen: false,\n },\n } as ManageFullscreenEvent;\n el.manageViewportFullscreen(noFullscreenEvent);\n await el.updateComplete;\n expect(el.viewportInFullscreen).to.be.null;\n });\n });\n\n /* Side menu & shortcuts tests */\n describe('el.menuOpened', () => {\n it('toggles side menu open', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n\n el.menuContents = [menuProvider];\n await el.updateComplete;\n\n const nav = el.shadowRoot?.querySelector('nav');\n\n expect(nav?.querySelector('#menu')).to.exist;\n // side menu starts closed\n expect(el.menuOpened).to.be.false;\n expect(nav?.querySelector('#menu')?.getAttribute('class')).to.contain(\n 'hidden',\n );\n\n // let's open menu\n el.toggleMenu();\n await el.updateComplete;\n\n expect(el.menuOpened).to.be.true;\n expect(nav?.querySelector('#menu')?.getAttribute('class')).to.not.contain(\n 'hidden',\n );\n });\n\n it('opens menu shortcut with `@manageSideMenuEvents`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n const detail = {\n menuId: 'fullscreen',\n action: 'open',\n };\n\n el.menuContents = [menuProvider];\n await el.updateComplete;\n const frame = el.shadowRoot?.querySelector('#frame');\n // default menu open behavior is to side menu open, not overlay\n expect(frame?.getAttribute('class')).to.contain('shift');\n\n expect(el.menuOpened).to.be.false;\n expect(el.openMenu).to.be.undefined;\n expect(frame?.getAttribute('class')).to.not.contain('open');\n\n const event = new CustomEvent('updateSideMenu', {\n detail,\n }) as ToggleSideMenuOpenEvent;\n el.manageSideMenuEvents(event);\n await el.updateComplete;\n\n expect(el.shouldRenderMenu).to.be.true;\n expect(el.menuOpened).to.be.true;\n expect(el.openMenu).to.equal(detail.menuId);\n\n expect(frame?.getAttribute('class')).to.contain('open');\n\n // no menu provided\n const openShortcutSpy = Sinon.spy(el, 'openShortcut');\n const toggleMenuSpy = Sinon.spy(el, 'toggleMenu');\n\n const noMenuProvidedEvent = new CustomEvent('updateSideMenu', {\n detail: {},\n }) as any;\n el.manageSideMenuEvents(noMenuProvidedEvent);\n await el.updateComplete;\n\n expect(openShortcutSpy.called).to.be.false;\n expect(toggleMenuSpy.called).to.be.false;\n\n // toggle menu\n const toggleMenuEvent = new CustomEvent('updateSideMenu', {\n detail: { action: 'toggle', menuId: 'fullscreen' },\n }) as any;\n el.manageSideMenuEvents(toggleMenuEvent);\n await el.updateComplete;\n\n expect(toggleMenuSpy.callCount).to.equal(1);\n\n // open menu\n const openMenuEvent = new CustomEvent('updateSideMenu', {\n detail: { action: 'open', menuId: 'fullscreen' },\n }) as any;\n el.manageSideMenuEvents(openMenuEvent);\n await el.updateComplete;\n\n expect(openShortcutSpy.callCount).to.equal(1);\n });\n });\n\n describe('el.menuContents', () => {\n it('draws side menu when populated', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n\n el.menuContents = [menuProvider];\n await el.updateComplete;\n expect(el.menuContents.length).to.exist;\n expect(el.shouldRenderMenu).to.be.true;\n\n const nav = el.shadowRoot?.querySelector('nav');\n expect(nav).to.exist;\n\n const menuSlider = nav?.querySelector('ia-menu-slider');\n expect(menuSlider).to.exist;\n expect(menuSlider?.getAttribute('manuallyhandleclose')).to.exist;\n expect(menuSlider?.getAttribute('open')).to.exist;\n });\n });\n\n describe('`el.menuShortcuts`', () => {\n it('displays shortcut & toggle side menu button', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n\n const anotherShortcut = {\n id: 'foo',\n icon: html`<i class=\"foo-shortcut\"></i>`,\n };\n el.menuContents = [menuProvider];\n el.menuShortcuts = [shortcut, anotherShortcut];\n await el.updateComplete;\n\n const nav = el.shadowRoot?.querySelector('nav');\n\n const shortcutsContainer = nav?.querySelector('.shortcuts');\n expect(el.menuShortcuts.length).to.exist;\n expect(nav).to.exist;\n expect(shortcutsContainer).to.exist;\n expect(shortcutsContainer?.querySelector('i.fullscreen-test')).to.exist;\n expect(shortcutsContainer?.querySelector('button.shortcut.foo')).to.exist;\n expect(nav?.querySelector('.toggle-menu')).to.exist;\n });\n });\n\n describe('Menu events', () => {\n it('`el.setMenuShortcuts`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n expect(el.menuShortcuts.length).to.equal(0);\n\n const menuShortcuts = [shortcut];\n\n el.setMenuShortcuts({\n detail: menuShortcuts,\n } as SetSideMenuShortcutsEvent);\n await el.updateComplete;\n\n expect(el.menuShortcuts.length).to.equal(1);\n });\n it('`el.setMenuContents`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n expect(el.menuContents.length).to.equal(0);\n\n el.setMenuShortcuts({\n detail: [menuProvider],\n } as SetSideMenuContentsEvent);\n await el.updateComplete;\n\n expect(el.menuShortcuts.length).to.equal(1);\n });\n it('`el.setOpenMenu`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n\n el.setOpenMenu({\n detail: { id: 'foo' },\n } as ToggleSidePanelOpenEvent);\n await el.updateComplete;\n\n expect(el.openMenu).to.equal('foo');\n expect(el.selectedMenuId).to.equal('foo');\n\n // toggles it off\n el.setOpenMenu({\n detail: { id: 'foo' },\n } as ToggleSidePanelOpenEvent);\n await el.updateComplete;\n\n expect(el.openMenu).to.be.undefined;\n expect(el.selectedMenuId).to.equal('');\n });\n it('`el.closeMenu`', async () => {\n const el = await fixture<ItemNavigator>(\n html`<iaux-item-navigator\n .item=${new ItemStub()}\n ></iaux-item-navigator>`,\n );\n\n el.menuOpened = true;\n await el.updateComplete;\n\n expect(el.menuOpened).to.be.true;\n\n el.closeMenu();\n await el.updateComplete;\n\n expect(el.menuOpened).to.be.false;\n });\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ import '../src/menus/iaux-sharing-options';
@@ -0,0 +1,64 @@
1
+ import { html, fixture, expect } from '@open-wc/testing';
2
+ import sinon from 'sinon';
3
+ import '../src/menus/iaux-sharing-options';
4
+ const identifier = 'goody';
5
+ const itemType = 'book';
6
+ const creator = 'Welsh, Charles';
7
+ const description = 'The history of Little Goody Two-Shoes : otherwise called Mrs. Margery Two-Shoes ... [1766 edition]';
8
+ const container = (optionalFileSubprefix = '') => html `<iaux-sharing-options
9
+ identifier="${identifier}"
10
+ type="${itemType}"
11
+ creator="${creator}"
12
+ description="${description}"
13
+ baseHost="archive.org"
14
+ fileSubPrefix="${optionalFileSubprefix}"
15
+ ></iaux-sharing-options>`;
16
+ describe('<iaux-sharing-options>', () => {
17
+ afterEach(() => {
18
+ sinon.restore();
19
+ });
20
+ it('sets default properties', async () => {
21
+ const el = (await fixture(container()));
22
+ expect(el.identifier).to.equal(identifier);
23
+ expect(el.type).to.equal(itemType);
24
+ expect(el.creator).to.equal(creator);
25
+ expect(el.description).to.equal(description);
26
+ });
27
+ it('renders buttons for each sharing method', async () => {
28
+ const el = (await fixture(container()));
29
+ await el.updateComplete;
30
+ el.sharingOptions.forEach(option => {
31
+ const button = el.shadowRoot && el.shadowRoot.querySelector(`a.${option.class}`);
32
+ expect(button).to.exist;
33
+ expect(button === null || button === void 0 ? void 0 : button.getAttribute('href')).to.equal(option.url);
34
+ });
35
+ });
36
+ it('toggles visibility of embed options', async () => {
37
+ const el = (await fixture(container()));
38
+ el.toggleEmbedOptions(new Event('click'));
39
+ await el.updateComplete;
40
+ expect(el.embedOptionsVisible).to.equal(true);
41
+ });
42
+ it('does not show internal header by default', async () => {
43
+ var _a;
44
+ const el = (await fixture(container()));
45
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('header')).to.be.null;
46
+ });
47
+ it('does shows internal header when requested', async () => {
48
+ var _a;
49
+ const el = (await fixture(container()));
50
+ el.renderHeader = true;
51
+ await el.updateComplete;
52
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('header')).to.not.be.null;
53
+ });
54
+ it('sets file subprefix to end of share URLs if present', async () => {
55
+ const optionalFileSubprefix = 'foo- bar - 123-';
56
+ const el = (await fixture(container(optionalFileSubprefix)));
57
+ el.sharingOptions.forEach(option => {
58
+ if (option.name !== 'Tumblr') {
59
+ expect(option.url).to.contain(encodeURIComponent(optionalFileSubprefix));
60
+ }
61
+ });
62
+ });
63
+ });
64
+ //# sourceMappingURL=iaux-sharing-options.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iaux-sharing-options.test.js","sourceRoot":"","sources":["../../test/iaux-sharing-options.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, fixture, expect } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport '../src/menus/iaux-sharing-options';\nimport type { IauxSharingOptions } from '../src/menus/iaux-sharing-options';\n\nconst identifier = 'goody';\nconst itemType = 'book';\nconst creator = 'Welsh, Charles';\nconst description =\n 'The history of Little Goody Two-Shoes : otherwise called Mrs. Margery Two-Shoes ... [1766 edition]';\n\nconst container = (optionalFileSubprefix = '') =>\n html`<iaux-sharing-options\n identifier=\"${identifier}\"\n type=\"${itemType}\"\n creator=\"${creator}\"\n description=\"${description}\"\n baseHost=\"archive.org\"\n fileSubPrefix=\"${optionalFileSubprefix}\"\n ></iaux-sharing-options>`;\n\ndescribe('<iaux-sharing-options>', () => {\n afterEach(() => {\n sinon.restore();\n });\n\n it('sets default properties', async () => {\n const el = (await fixture(container())) as IauxSharingOptions;\n\n expect(el.identifier).to.equal(identifier);\n expect(el.type).to.equal(itemType);\n expect(el.creator).to.equal(creator);\n expect(el.description).to.equal(description);\n });\n\n it('renders buttons for each sharing method', async () => {\n const el = (await fixture(container())) as IauxSharingOptions;\n\n await el.updateComplete;\n\n el.sharingOptions.forEach(option => {\n const button =\n el.shadowRoot && el.shadowRoot.querySelector(`a.${option.class}`);\n expect(button).to.exist;\n expect(button?.getAttribute('href')).to.equal(option.url);\n });\n });\n\n it('toggles visibility of embed options', async () => {\n const el = (await fixture(container())) as IauxSharingOptions;\n\n el.toggleEmbedOptions(new Event('click'));\n await el.updateComplete;\n\n expect(el.embedOptionsVisible).to.equal(true);\n });\n\n it('does not show internal header by default', async () => {\n const el = (await fixture(container())) as IauxSharingOptions;\n expect(el.shadowRoot?.querySelector('header')).to.be.null;\n });\n\n it('does shows internal header when requested', async () => {\n const el = (await fixture(container())) as IauxSharingOptions;\n el.renderHeader = true;\n await el.updateComplete;\n expect(el.shadowRoot?.querySelector('header')).to.not.be.null;\n });\n\n it('sets file subprefix to end of share URLs if present', async () => {\n const optionalFileSubprefix = 'foo- bar - 123-';\n const el = (await fixture(\n container(optionalFileSubprefix),\n )) as IauxSharingOptions;\n\n el.sharingOptions.forEach(option => {\n if (option.name !== 'Tumblr') {\n expect(option.url).to.contain(\n encodeURIComponent(optionalFileSubprefix),\n );\n }\n });\n });\n});\n"]}
package/index.ts CHANGED
@@ -1,3 +1,11 @@
1
- export { ItemNavigator } from './src/item-navigator';
1
+ export { ItemNavigator } from './src/iaux-item-navigator';
2
2
  export { MenuButton } from './src/menu-slider/menu-button';
3
3
  export { IaMenuSlider } from './src/menu-slider/ia-menu-slider';
4
+
5
+ // side menus
6
+ export {
7
+ IauxSharingOptions,
8
+ iauxShareIcon,
9
+ } from './src/menus/iaux-sharing-options';
10
+ export { IauxViewableFiles } from './src/menus/iaux-viewable-files';
11
+ export { IauxSortFilesButton } from './src/menus/iaux-viewable-files';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetarchive/ia-item-navigator",
3
- "version": "1.1.0",
3
+ "version": "v2.0.0-alpha1",
4
4
  "description": "Internet Archive's Item Navigator, visually explore an item's contents.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,7 +31,13 @@
31
31
  "dependencies": {
32
32
  "@internetarchive/icon-collapse-sidebar": "^1.3.4",
33
33
  "@internetarchive/icon-ellipses": "^1.3.4",
34
+ "@internetarchive/icon-email": "^1.3.4",
35
+ "@internetarchive/icon-facebook": "^1.3.4",
36
+ "@internetarchive/icon-link": "^1.3.4",
37
+ "@internetarchive/icon-pinterest": "^1.3.4",
34
38
  "@internetarchive/icon-share": "^1.3.4",
39
+ "@internetarchive/icon-tumblr": "^1.3.4",
40
+ "@internetarchive/icon-twitter": "^1.3.4",
35
41
  "@internetarchive/icon-visual-adjustment": "^1.3.4",
36
42
  "@internetarchive/modal-manager": "^0.2.7",
37
43
  "@internetarchive/search-service": "^0.1.2",
@@ -71,14 +77,13 @@
71
77
  "eslintConfig": {
72
78
  "parser": "@typescript-eslint/parser",
73
79
  "extends": [
74
- "@open-wc/eslint-config",
75
- "eslint-config-prettier"
80
+ "@open-wc",
81
+ "prettier"
76
82
  ],
77
83
  "plugins": [
78
84
  "@typescript-eslint"
79
85
  ],
80
86
  "rules": {
81
- "class-methods-use-this": "off",
82
87
  "no-unused-vars": "off",
83
88
  "@typescript-eslint/no-unused-vars": [
84
89
  "error"
@@ -87,9 +92,11 @@
87
92
  "@typescript-eslint/no-shadow": [
88
93
  "error"
89
94
  ],
95
+ "class-methods-use-this": "off",
90
96
  "import/no-unresolved": "off",
91
97
  "import/extensions": [
92
98
  "off",
99
+ "ignorePackages",
93
100
  {
94
101
  "js": "never",
95
102
  "ts": "never"
@@ -35,7 +35,7 @@ import {
35
35
  } from './interfaces/menu-interfaces';
36
36
  import './no-theater-available';
37
37
 
38
- @customElement('ia-item-navigator')
38
+ @customElement('iaux-item-navigator')
39
39
  export class ItemNavigator
40
40
  extends LitElement
41
41
  implements SharedResizeObserverResizeHandlerInterface
@@ -55,15 +55,7 @@ export class ItemNavigator
55
55
 
56
56
  @property({ type: String }) baseHost = 'archive.org';
57
57
 
58
- @property({
59
- converter: (arg: string | boolean | null) => {
60
- if (typeof arg === 'boolean') {
61
- return arg;
62
- }
63
- return arg === 'true';
64
- },
65
- })
66
- signedIn = false;
58
+ @property({ type: Boolean }) signedIn = false;
67
59
 
68
60
  @property({ type: Array }) menuContents: MenuProviderInterface[] = [];
69
61
 
@@ -96,7 +96,7 @@ export class IaMenuSlider extends LitElement {
96
96
  .icon=${menu.icon}
97
97
  .label=${menu.label}
98
98
  .menuDetails=${menu.menuDetails}
99
- .id=${menu.id}
99
+ .buttonId=${menu.id}
100
100
  .selected=${menu.id === this.selectedMenu}
101
101
  .followable=${menu.followable}
102
102
  .href=${menu.href}
@@ -0,0 +1,84 @@
1
+ [
2
+ /* This is a whole user list */
3
+ {
4
+ "list_name": "My Great List",
5
+ "description": "The greatest list of all",
6
+ "private": true,
7
+ "date_created": "2020-01-01T01:23:45Z",
8
+ "date_updated": "2020-01-01T01:23:45Z",
9
+ "members": [
10
+ /* This is a member of the user list */
11
+ {
12
+ "identifier": "BettyWhiteShow",
13
+ "date_added": "2020-01-01T01:23:45Z"
14
+ },
15
+ {
16
+ "identifier": "masterbookofamericanfolksong00shep",
17
+ "file": "04-Letters%20to%20Riley%20Shepard",
18
+ "date_added": "2020-01-01T01:23:45Z"
19
+ },
20
+ {
21
+ "identifier": "inlibrary",
22
+ "search-term": "?not%5B%5D=lending%3A%22available_to_borrow%22",
23
+ "date_added": "2020-01-01T01:23:45Z"
24
+ },
25
+ {
26
+ "type": "search",
27
+ "search-term": "?query=San+Francisco%2C+ca&not%5B%5D=mediatype%3A%22audio%22",
28
+ "date_added": "2020-01-01T01:23:45Z"
29
+ },
30
+
31
+ /* More members ... */
32
+ ]
33
+ },
34
+ /* More lists ... */
35
+ ]
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+ {
44
+ 'foo': {
45
+ 'date-added': datetime,
46
+ items: [
47
+ {
48
+ id: 'goody',
49
+ subprefix: '/subdi/subdir/tooshoes',
50
+ date-added: datetime,
51
+ }
52
+ ]
53
+ }
54
+
55
+ }
56
+
57
+ [
58
+ {
59
+ list-name: 'foo-list',
60
+ date-created: datetime,
61
+ date-updated: datetime,
62
+ items: [
63
+ {
64
+ id: 'goody',
65
+ subprefix: '/subdi/subdir/tooshoes',
66
+ date-added: datetime,
67
+ }
68
+ ]
69
+ },
70
+ {
71
+ list-name: 'uncategorized',
72
+ date-created: datetime,
73
+ date-updated: datetime,
74
+ items: [
75
+ {
76
+ id: 'goody',
77
+ subprefix: '/subdi/subdir/tooshoes',
78
+ date-added: datetime,
79
+ }
80
+ ]
81
+ }
82
+ ]
83
+
84
+ q:items='goody','good'