@internetarchive/ia-item-navigator 2.1.3 → 2.2.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/demo/app-root.ts +5 -4
- package/dist/demo/app-root.d.ts +2 -2
- package/dist/demo/app-root.js +1 -1
- package/dist/demo/app-root.js.map +1 -1
- package/dist/src/iaux-item-navigator.d.ts +3 -1
- package/dist/src/iaux-item-navigator.js +43 -13
- package/dist/src/iaux-item-navigator.js.map +1 -1
- package/dist/src/interfaces/menu-interfaces.d.ts +4 -5
- package/dist/src/interfaces/menu-interfaces.js.map +1 -1
- package/dist/src/menu-slider/ia-menu-slider.d.ts +13 -7
- package/dist/src/menu-slider/ia-menu-slider.js +65 -20
- package/dist/src/menu-slider/ia-menu-slider.js.map +1 -1
- package/dist/src/menu-slider/menu-button.d.ts +15 -7
- package/dist/src/menu-slider/menu-button.js +12 -3
- package/dist/src/menu-slider/menu-button.js.map +1 -1
- package/dist/src/menu-slider/styles/menu-button.js +14 -4
- package/dist/src/menu-slider/styles/menu-button.js.map +1 -1
- package/dist/src/menu-slider/styles/menu-slider.js +7 -9
- package/dist/src/menu-slider/styles/menu-slider.js.map +1 -1
- package/dist/src/menus/share-panel.js +15 -9
- package/dist/src/menus/share-panel.js.map +1 -1
- package/dist/test/iaux-item-navigator.test.js +1 -0
- package/dist/test/iaux-item-navigator.test.js.map +1 -1
- package/package.json +1 -1
- package/src/iaux-item-navigator.ts +41 -13
- package/src/interfaces/menu-interfaces.ts +4 -8
- package/src/menu-slider/ia-menu-slider.ts +67 -28
- package/src/menu-slider/menu-button.ts +14 -4
- package/src/menu-slider/styles/menu-button.ts +14 -4
- package/src/menu-slider/styles/menu-slider.ts +7 -9
- package/src/menus/share-panel.ts +15 -9
- package/test/iaux-item-navigator.test.ts +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { LitElement, html, nothing } from 'lit';
|
|
3
|
-
import { customElement, property } from 'lit/decorators.js';
|
|
3
|
+
import { customElement, property, query } from 'lit/decorators.js';
|
|
4
4
|
import menuSliderCSS from './styles/menu-slider';
|
|
5
5
|
import '@internetarchive/icon-collapse-sidebar';
|
|
6
6
|
import './menu-button';
|
|
@@ -21,20 +21,25 @@ let IaMenuSlider = class IaMenuSlider extends LitElement {
|
|
|
21
21
|
return menuSliderCSS;
|
|
22
22
|
}
|
|
23
23
|
updated() {
|
|
24
|
-
|
|
24
|
+
var _a;
|
|
25
|
+
const actionButton = ((_a = this.selectedMenuDetails) === null || _a === void 0 ? void 0 : _a.actionButton) || nothing;
|
|
25
26
|
const actionButtonHasChanged = actionButton !== this.selectedMenuAction;
|
|
26
27
|
if (actionButtonHasChanged) {
|
|
27
|
-
this.selectedMenuAction = actionButton
|
|
28
|
+
this.selectedMenuAction = actionButton;
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
31
32
|
* Event handler, captures state of selected menu
|
|
32
33
|
*/
|
|
33
34
|
setSelectedMenu({ detail }) {
|
|
35
|
+
var _a;
|
|
34
36
|
const { id } = detail;
|
|
35
37
|
this.selectedMenu = this.selectedMenu === id ? '' : id;
|
|
36
|
-
|
|
37
|
-
this.
|
|
38
|
+
this.selectedMenuAction = ((_a = this.selectedMenuDetails) === null || _a === void 0 ? void 0 : _a.actionButton) || nothing;
|
|
39
|
+
this.updateComplete.then(() => {
|
|
40
|
+
var _a;
|
|
41
|
+
(_a = this.contentCloseButton) === null || _a === void 0 ? void 0 : _a.focus();
|
|
42
|
+
});
|
|
38
43
|
}
|
|
39
44
|
/**
|
|
40
45
|
* closes menu drawer
|
|
@@ -49,15 +54,37 @@ let IaMenuSlider = class IaMenuSlider extends LitElement {
|
|
|
49
54
|
});
|
|
50
55
|
this.dispatchEvent(drawerClosed);
|
|
51
56
|
}
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
57
|
+
closePanel() {
|
|
58
|
+
const menuId = this.selectedMenu;
|
|
59
|
+
this.selectedMenu = '';
|
|
60
|
+
this.selectedMenuAction = nothing;
|
|
61
|
+
// Return focus to the menu button that was previously selected
|
|
62
|
+
if (menuId) {
|
|
63
|
+
this.updateComplete.then(() => {
|
|
64
|
+
const menuIndex = this.menus.findIndex(menu => menu.id === menuId);
|
|
65
|
+
if (menuIndex !== -1) {
|
|
66
|
+
const menuButton = this.menuList.querySelector(`li:nth-child(${menuIndex + 1}) menu-button`);
|
|
67
|
+
menuButton === null || menuButton === void 0 ? void 0 : menuButton.focus();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Handle keyboard events, specifically ESC key to close menu details
|
|
74
|
+
*/
|
|
75
|
+
handleKeyDown(event) {
|
|
76
|
+
if (event.key === 'Escape') {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
if (this.selectedMenu) {
|
|
79
|
+
this.closePanel();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.closeMenu();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
55
85
|
}
|
|
56
|
-
get
|
|
57
|
-
|
|
58
|
-
return menuItem && (menuItem === null || menuItem === void 0 ? void 0 : menuItem.component)
|
|
59
|
-
? menuItem.component
|
|
60
|
-
: html ``;
|
|
86
|
+
get selectedMenuDetails() {
|
|
87
|
+
return this.menus.find(menu => menu.id === this.selectedMenu);
|
|
61
88
|
}
|
|
62
89
|
/* render */
|
|
63
90
|
get sliderDetailsClass() {
|
|
@@ -69,17 +96,17 @@ let IaMenuSlider = class IaMenuSlider extends LitElement {
|
|
|
69
96
|
return this.selectedMenu ? 'open' : '';
|
|
70
97
|
}
|
|
71
98
|
get menuItems() {
|
|
72
|
-
return this.menus.map(
|
|
99
|
+
return this.menus.map(menu => html `
|
|
73
100
|
<li>
|
|
74
101
|
<menu-button
|
|
75
102
|
@menuTypeSelected=${this.setSelectedMenu}
|
|
76
103
|
.icon=${menu.icon}
|
|
77
104
|
.label=${menu.label}
|
|
78
|
-
.menuDetails=${menu.menuDetails}
|
|
105
|
+
.menuDetails=${menu.menuDetails || ''}
|
|
79
106
|
.buttonId=${menu.id}
|
|
80
107
|
.selected=${menu.id === this.selectedMenu}
|
|
81
|
-
.followable=${menu.followable}
|
|
82
|
-
.href=${menu.href}
|
|
108
|
+
.followable=${menu.followable || false}
|
|
109
|
+
.href=${menu.href || ''}
|
|
83
110
|
></menu-button>
|
|
84
111
|
</li>
|
|
85
112
|
`);
|
|
@@ -96,7 +123,15 @@ let IaMenuSlider = class IaMenuSlider extends LitElement {
|
|
|
96
123
|
<h3>${label}</h3>
|
|
97
124
|
<span class="extra-details">${menuDetails}</span>
|
|
98
125
|
</div>
|
|
99
|
-
${actionBlock}
|
|
126
|
+
${actionBlock}
|
|
127
|
+
<button
|
|
128
|
+
class="close"
|
|
129
|
+
aria-label="Close this menu"
|
|
130
|
+
title="Close this menu"
|
|
131
|
+
@click=${this.closePanel}
|
|
132
|
+
>
|
|
133
|
+
<ia-icon-collapse-sidebar></ia-icon-collapse-sidebar>
|
|
134
|
+
</button>
|
|
100
135
|
</header>
|
|
101
136
|
`;
|
|
102
137
|
}
|
|
@@ -105,6 +140,7 @@ let IaMenuSlider = class IaMenuSlider extends LitElement {
|
|
|
105
140
|
<button
|
|
106
141
|
class="close"
|
|
107
142
|
aria-label="Close this menu"
|
|
143
|
+
title="Close this menu"
|
|
108
144
|
@click=${this.closeMenu}
|
|
109
145
|
>
|
|
110
146
|
<ia-icon-collapse-sidebar></ia-icon-collapse-sidebar>
|
|
@@ -113,8 +149,9 @@ let IaMenuSlider = class IaMenuSlider extends LitElement {
|
|
|
113
149
|
}
|
|
114
150
|
/** @inheritdoc */
|
|
115
151
|
render() {
|
|
152
|
+
var _a;
|
|
116
153
|
return html `
|
|
117
|
-
<div class="main">
|
|
154
|
+
<div class="main" @keydown=${this.handleKeyDown}>
|
|
118
155
|
<div class="menu ${this.sliderDetailsClass}">
|
|
119
156
|
${this.closeButton}
|
|
120
157
|
<ul class="menu-list">
|
|
@@ -126,7 +163,9 @@ let IaMenuSlider = class IaMenuSlider extends LitElement {
|
|
|
126
163
|
>
|
|
127
164
|
${this.renderMenuHeader}
|
|
128
165
|
<section>
|
|
129
|
-
<div class="selected-menu"
|
|
166
|
+
<div class="selected-menu">
|
|
167
|
+
${((_a = this.selectedMenuDetails) === null || _a === void 0 ? void 0 : _a.component) || nothing}
|
|
168
|
+
</div>
|
|
130
169
|
</section>
|
|
131
170
|
</div>
|
|
132
171
|
</div>
|
|
@@ -152,6 +191,12 @@ __decorate([
|
|
|
152
191
|
__decorate([
|
|
153
192
|
property({ type: Boolean })
|
|
154
193
|
], IaMenuSlider.prototype, "animateMenuOpen", void 0);
|
|
194
|
+
__decorate([
|
|
195
|
+
query('.content.open button.close')
|
|
196
|
+
], IaMenuSlider.prototype, "contentCloseButton", void 0);
|
|
197
|
+
__decorate([
|
|
198
|
+
query('.menu-list')
|
|
199
|
+
], IaMenuSlider.prototype, "menuList", void 0);
|
|
155
200
|
IaMenuSlider = __decorate([
|
|
156
201
|
customElement('ia-menu-slider')
|
|
157
202
|
], IaMenuSlider);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ia-menu-slider.js","sourceRoot":"","sources":["../../../src/menu-slider/ia-menu-slider.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport menuSliderCSS from './styles/menu-slider';\nimport '@internetarchive/icon-collapse-sidebar';\nimport './menu-button';\nimport { MenuProviderInterface } from '../interfaces/menu-interfaces';\n\nconst sliderEvents = {\n closeDrawer: 'menuSliderClosed',\n};\n\n@customElement('ia-menu-slider')\nexport class IaMenuSlider extends LitElement {\n static get styles() {\n return menuSliderCSS;\n }\n\n @property({ type: Array }) menus: MenuProviderInterface[] = [];\n\n @property({ type: Boolean }) open = false;\n\n @property({ type: Boolean }) manuallyHandleClose = false;\n\n @property({ type: String }) selectedMenu = '';\n\n @property({ type: Object }) selectedMenuAction = nothing;\n\n @property({ type: Boolean }) animateMenuOpen = false;\n\n updated() {\n const { actionButton } =\n this.selectedMenuDetails || ({} as Record<string, any>);\n const actionButtonHasChanged = actionButton !== this.selectedMenuAction;\n if (actionButtonHasChanged) {\n this.selectedMenuAction = actionButton || nothing;\n }\n }\n\n /**\n * Event handler, captures state of selected menu\n */\n setSelectedMenu({ detail }: CustomEvent) {\n const { id } = detail;\n this.selectedMenu = this.selectedMenu === id ? '' : id;\n const { actionButton } =\n this.selectedMenuDetails || ({} as Record<string, any>);\n this.selectedMenuAction = actionButton || nothing;\n }\n\n /**\n * closes menu drawer\n */\n closeMenu() {\n if (!this.manuallyHandleClose) {\n this.open = false;\n }\n const { closeDrawer } = sliderEvents;\n const drawerClosed = new CustomEvent(closeDrawer, {\n detail: this.selectedMenuDetails,\n });\n this.dispatchEvent(drawerClosed);\n }\n\n get selectedMenuDetails() {\n const selectedMenu = this.menus.find(\n menu => (menu as any).id === this.selectedMenu,\n );\n return selectedMenu;\n }\n\n get selectedMenuComponent() {\n const menuItem = this.selectedMenuDetails;\n return menuItem && (menuItem as any)?.component\n ? (menuItem as any).component\n : html``;\n }\n\n /* render */\n\n get sliderDetailsClass() {\n const animate = this.animateMenuOpen ? 'animate' : '';\n const state = this.open ? 'open' : '';\n return `${animate} ${state}`;\n }\n\n get selectedMenuClass() {\n return this.selectedMenu ? 'open' : '';\n }\n\n get menuItems() {\n return this.menus.map(\n (menu: Record<string, any>) => html`\n <li>\n <menu-button\n @menuTypeSelected=${this.setSelectedMenu}\n .icon=${menu.icon}\n .label=${menu.label}\n .menuDetails=${menu.menuDetails}\n .buttonId=${menu.id}\n .selected=${menu.id === this.selectedMenu}\n .followable=${menu.followable}\n .href=${menu.href}\n ></menu-button>\n </li>\n `,\n );\n }\n\n get renderMenuHeader() {\n const { label = '', menuDetails = '' } =\n this.selectedMenuDetails || ({} as Record<string, any>);\n const headerClass = this.selectedMenuAction ? 'with-secondary-action' : '';\n const actionBlock = this.selectedMenuAction\n ? html`<span class=\"custom-action\">${this.selectedMenuAction}</span>`\n : nothing;\n return html`\n <header class=\"${headerClass}\">\n <div class=\"details\">\n <h3>${label}</h3>\n <span class=\"extra-details\">${menuDetails}</span>\n </div>\n ${actionBlock} ${this.closeButton}\n </header>\n `;\n }\n\n get closeButton() {\n return html`\n <button\n class=\"close\"\n aria-label=\"Close this menu\"\n @click=${this.closeMenu}\n >\n <ia-icon-collapse-sidebar></ia-icon-collapse-sidebar>\n </button>\n `;\n }\n\n /** @inheritdoc */\n render() {\n return html`\n <div class=\"main\">\n <div class=\"menu ${this.sliderDetailsClass}\">\n ${this.closeButton}\n <ul class=\"menu-list\">\n ${this.menuItems}\n </ul>\n <div\n class=\"content ${this.selectedMenuClass}\"\n @menuTypeSelected=${this.setSelectedMenu}\n >\n ${this.renderMenuHeader}\n <section>\n <div class=\"selected-menu\">${this.selectedMenuComponent}</div>\n </section>\n </div>\n </div>\n </div>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ia-menu-slider.js","sourceRoot":"","sources":["../../../src/menu-slider/ia-menu-slider.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, TemplateResult, html, nothing } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport menuSliderCSS from './styles/menu-slider';\nimport '@internetarchive/icon-collapse-sidebar';\nimport './menu-button';\nimport { MenuProviderInterface } from '../interfaces/menu-interfaces';\n\nconst sliderEvents = {\n closeDrawer: 'menuSliderClosed',\n};\n\n@customElement('ia-menu-slider')\nexport class IaMenuSlider extends LitElement {\n static get styles() {\n return menuSliderCSS;\n }\n\n @property({ type: Array }) menus: MenuProviderInterface[] = [];\n\n @property({ type: Boolean }) open = false;\n\n @property({ type: Boolean }) manuallyHandleClose = false;\n\n @property({ type: String }) selectedMenu = '';\n\n @property({ type: Object }) selectedMenuAction:\n | TemplateResult\n | typeof nothing = nothing;\n\n @property({ type: Boolean }) animateMenuOpen = false;\n\n @query('.content.open button.close') contentCloseButton!: HTMLElement;\n\n @query('.menu-list') menuList!: HTMLUListElement;\n\n updated() {\n const actionButton = this.selectedMenuDetails?.actionButton || nothing;\n const actionButtonHasChanged = actionButton !== this.selectedMenuAction;\n if (actionButtonHasChanged) {\n this.selectedMenuAction = actionButton;\n }\n }\n\n /**\n * Event handler, captures state of selected menu\n */\n setSelectedMenu({ detail }: CustomEvent) {\n const { id } = detail;\n this.selectedMenu = this.selectedMenu === id ? '' : id;\n this.selectedMenuAction = this.selectedMenuDetails?.actionButton || nothing;\n this.updateComplete.then(() => {\n this.contentCloseButton?.focus();\n });\n }\n\n /**\n * closes menu drawer\n */\n closeMenu() {\n if (!this.manuallyHandleClose) {\n this.open = false;\n }\n const { closeDrawer } = sliderEvents;\n const drawerClosed = new CustomEvent(closeDrawer, {\n detail: this.selectedMenuDetails,\n });\n this.dispatchEvent(drawerClosed);\n }\n\n closePanel() {\n const menuId = this.selectedMenu;\n this.selectedMenu = '';\n this.selectedMenuAction = nothing;\n\n // Return focus to the menu button that was previously selected\n if (menuId) {\n this.updateComplete.then(() => {\n const menuIndex = this.menus.findIndex(menu => menu.id === menuId);\n if (menuIndex !== -1) {\n const menuButton = this.menuList.querySelector(\n `li:nth-child(${menuIndex + 1}) menu-button`,\n ) as HTMLElement;\n menuButton?.focus();\n }\n });\n }\n }\n\n /**\n * Handle keyboard events, specifically ESC key to close menu details\n */\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n if (this.selectedMenu) {\n this.closePanel();\n } else {\n this.closeMenu();\n }\n }\n }\n\n get selectedMenuDetails() {\n return this.menus.find(menu => menu.id === this.selectedMenu);\n }\n\n /* render */\n\n get sliderDetailsClass() {\n const animate = this.animateMenuOpen ? 'animate' : '';\n const state = this.open ? 'open' : '';\n return `${animate} ${state}`;\n }\n\n get selectedMenuClass() {\n return this.selectedMenu ? 'open' : '';\n }\n\n get menuItems() {\n return this.menus.map(\n menu => html`\n <li>\n <menu-button\n @menuTypeSelected=${this.setSelectedMenu}\n .icon=${menu.icon}\n .label=${menu.label}\n .menuDetails=${menu.menuDetails || ''}\n .buttonId=${menu.id}\n .selected=${menu.id === this.selectedMenu}\n .followable=${menu.followable || false}\n .href=${menu.href || ''}\n ></menu-button>\n </li>\n `,\n );\n }\n\n get renderMenuHeader() {\n const { label = '', menuDetails = '' } = this.selectedMenuDetails || {};\n const headerClass = this.selectedMenuAction ? 'with-secondary-action' : '';\n const actionBlock = this.selectedMenuAction\n ? html`<span class=\"custom-action\">${this.selectedMenuAction}</span>`\n : nothing;\n return html`\n <header class=\"${headerClass}\">\n <div class=\"details\">\n <h3>${label}</h3>\n <span class=\"extra-details\">${menuDetails}</span>\n </div>\n ${actionBlock}\n <button\n class=\"close\"\n aria-label=\"Close this menu\"\n title=\"Close this menu\"\n @click=${this.closePanel}\n >\n <ia-icon-collapse-sidebar></ia-icon-collapse-sidebar>\n </button>\n </header>\n `;\n }\n\n get closeButton() {\n return html`\n <button\n class=\"close\"\n aria-label=\"Close this menu\"\n title=\"Close this menu\"\n @click=${this.closeMenu}\n >\n <ia-icon-collapse-sidebar></ia-icon-collapse-sidebar>\n </button>\n `;\n }\n\n /** @inheritdoc */\n render() {\n return html`\n <div class=\"main\" @keydown=${this.handleKeyDown}>\n <div class=\"menu ${this.sliderDetailsClass}\">\n ${this.closeButton}\n <ul class=\"menu-list\">\n ${this.menuItems}\n </ul>\n <div\n class=\"content ${this.selectedMenuClass}\"\n @menuTypeSelected=${this.setSelectedMenu}\n >\n ${this.renderMenuHeader}\n <section>\n <div class=\"selected-menu\">\n ${this.selectedMenuDetails?.component || nothing}\n </div>\n </section>\n </div>\n </div>\n </div>\n `;\n }\n}\n"]}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
1
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
2
2
|
export declare class MenuButton extends LitElement {
|
|
3
3
|
static get styles(): import("lit").CSSResult;
|
|
4
|
-
|
|
4
|
+
static shadowRootOptions: {
|
|
5
|
+
delegatesFocus: boolean;
|
|
6
|
+
mode: ShadowRootMode;
|
|
7
|
+
serializable?: boolean;
|
|
8
|
+
slotAssignment?: SlotAssignmentMode;
|
|
9
|
+
customElements?: CustomElementRegistry;
|
|
10
|
+
registry?: CustomElementRegistry;
|
|
11
|
+
};
|
|
12
|
+
icon: TemplateResult | string;
|
|
5
13
|
href: string;
|
|
6
14
|
label: string;
|
|
7
|
-
menuDetails: string;
|
|
15
|
+
menuDetails: TemplateResult | string;
|
|
8
16
|
buttonId: string;
|
|
9
17
|
selected: boolean;
|
|
10
18
|
followable: boolean;
|
|
@@ -12,8 +20,8 @@ export declare class MenuButton extends LitElement {
|
|
|
12
20
|
dispatchMenuTypeSelectedEvent(): void;
|
|
13
21
|
get buttonClass(): "" | "selected";
|
|
14
22
|
get iconClass(): "" | "active";
|
|
15
|
-
get menuItem():
|
|
16
|
-
get linkButton():
|
|
17
|
-
get clickButton():
|
|
18
|
-
render():
|
|
23
|
+
get menuItem(): TemplateResult<1>;
|
|
24
|
+
get linkButton(): TemplateResult<1>;
|
|
25
|
+
get clickButton(): TemplateResult<1>;
|
|
26
|
+
render(): TemplateResult<1>;
|
|
19
27
|
}
|
|
@@ -37,7 +37,12 @@ let MenuButton = class MenuButton extends LitElement {
|
|
|
37
37
|
}
|
|
38
38
|
get menuItem() {
|
|
39
39
|
return html `
|
|
40
|
-
<span
|
|
40
|
+
<span
|
|
41
|
+
class="icon ${this.iconClass}"
|
|
42
|
+
aria-hidden="true"
|
|
43
|
+
title="${this.label}"
|
|
44
|
+
>${this.icon}</span
|
|
45
|
+
>
|
|
41
46
|
<span class="label">${this.label}</span>
|
|
42
47
|
<span class="menu-details">${this.menuDetails}</span>
|
|
43
48
|
`;
|
|
@@ -63,8 +68,12 @@ let MenuButton = class MenuButton extends LitElement {
|
|
|
63
68
|
return this.href ? this.linkButton : this.clickButton;
|
|
64
69
|
}
|
|
65
70
|
};
|
|
71
|
+
MenuButton.shadowRootOptions = {
|
|
72
|
+
...LitElement.shadowRootOptions,
|
|
73
|
+
delegatesFocus: true,
|
|
74
|
+
};
|
|
66
75
|
__decorate([
|
|
67
|
-
property({ type:
|
|
76
|
+
property({ type: Object })
|
|
68
77
|
], MenuButton.prototype, "icon", void 0);
|
|
69
78
|
__decorate([
|
|
70
79
|
property({ type: String })
|
|
@@ -73,7 +82,7 @@ __decorate([
|
|
|
73
82
|
property({ type: String })
|
|
74
83
|
], MenuButton.prototype, "label", void 0);
|
|
75
84
|
__decorate([
|
|
76
|
-
property({ type:
|
|
85
|
+
property({ type: Object })
|
|
77
86
|
], MenuButton.prototype, "menuDetails", void 0);
|
|
78
87
|
__decorate([
|
|
79
88
|
property({ type: String })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-button.js","sourceRoot":"","sources":["../../../src/menu-slider/menu-button.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"menu-button.js","sourceRoot":"","sources":["../../../src/menu-slider/menu-button.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport menuButtonCSS from './styles/menu-button';\n\n@customElement('menu-button')\nexport class MenuButton extends LitElement {\n static get styles() {\n return menuButtonCSS;\n }\n\n static shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n @property({ type: Object }) icon: TemplateResult | string = '';\n\n @property({ type: String }) href = '';\n\n @property({ type: String }) label = '';\n\n @property({ type: Object }) menuDetails: TemplateResult | string = '';\n\n @property({ type: String }) buttonId = '';\n\n @property({ type: Boolean }) selected = false;\n\n @property({ type: Boolean }) followable = false;\n\n onClick(e: Event) {\n e.preventDefault();\n this.dispatchMenuTypeSelectedEvent();\n }\n\n dispatchMenuTypeSelectedEvent() {\n this.dispatchEvent(\n new CustomEvent('menuTypeSelected', {\n bubbles: true,\n composed: true,\n detail: {\n id: this.buttonId,\n },\n }),\n );\n }\n\n get buttonClass() {\n return this.selected ? 'selected' : '';\n }\n\n get iconClass() {\n return this.selected ? 'active' : '';\n }\n\n get menuItem() {\n return html`\n <span\n class=\"icon ${this.iconClass}\"\n aria-hidden=\"true\"\n title=\"${this.label}\"\n >${this.icon}</span\n >\n <span class=\"label\">${this.label}</span>\n <span class=\"menu-details\">${this.menuDetails}</span>\n `;\n }\n\n get linkButton() {\n return html`\n <a\n href=\"${this.href}\"\n class=\"menu-item ${this.buttonClass}\"\n @click=${this.followable ? undefined : this.onClick}\n >${this.menuItem}</a\n >\n `;\n }\n\n get clickButton() {\n return html`\n <button class=\"menu-item ${this.buttonClass}\" @click=${this.onClick}>\n ${this.menuItem}\n </button>\n `;\n }\n\n render() {\n return this.href ? this.linkButton : this.clickButton;\n }\n}\n"]}
|
|
@@ -5,6 +5,11 @@ export default css `
|
|
|
5
5
|
text-decoration: none;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
button.menu-item {
|
|
9
|
+
-webkit-appearance: none;
|
|
10
|
+
appearance: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
8
13
|
.menu-item {
|
|
9
14
|
display: inline-flex;
|
|
10
15
|
width: 100%;
|
|
@@ -17,12 +22,12 @@ export default css `
|
|
|
17
22
|
align-items: center;
|
|
18
23
|
border: none;
|
|
19
24
|
cursor: pointer;
|
|
25
|
+
transition: background-color 0.2s;
|
|
26
|
+
border-radius: 6px;
|
|
20
27
|
}
|
|
21
28
|
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
appearance: none;
|
|
25
|
-
border-radius: 0;
|
|
29
|
+
.menu-item:hover {
|
|
30
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
.label {
|
|
@@ -59,6 +64,11 @@ export default css `
|
|
|
59
64
|
justify-content: center;
|
|
60
65
|
}
|
|
61
66
|
|
|
67
|
+
.menu-item > .icon > * {
|
|
68
|
+
/* Prevent tooltip containing icon literal description */
|
|
69
|
+
pointer-events: none;
|
|
70
|
+
}
|
|
71
|
+
|
|
62
72
|
.menu-item.selected .icon {
|
|
63
73
|
background-color: var(--activeButtonBg);
|
|
64
74
|
border-radius: 1rem 0 0 1rem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-button.js","sourceRoot":"","sources":["../../../../src/menu-slider/styles/menu-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"menu-button.js","sourceRoot":"","sources":["../../../../src/menu-slider/styles/menu-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFjB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport default css`\n a {\n display: inline-block;\n text-decoration: none;\n }\n\n button.menu-item {\n -webkit-appearance: none;\n appearance: none;\n }\n\n .menu-item {\n display: inline-flex;\n width: 100%;\n padding: 0;\n font-size: 1.6rem;\n text-align: left;\n background: transparent;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n border: none;\n cursor: pointer;\n transition: background-color 0.2s;\n border-radius: 6px;\n }\n\n .menu-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n }\n\n .label {\n display: var(--menuButtonLabelDisplay, none);\n padding: 0;\n font-weight: 400;\n color: var(--primaryTextColor);\n text-align: left;\n vertical-align: middle;\n margin-left: 1rem;\n }\n\n .menu-details {\n color: var(--primaryTextColor);\n display: inline-block;\n margin-left: 0.5rem;\n font-style: italic;\n font-size: 1.5rem;\n }\n\n .menu-item > .icon {\n position: relative;\n display: inline-flex;\n z-index: 2;\n min-width: 4.2rem;\n max-width: 4.2rem;\n height: 4.2rem;\n vertical-align: middle;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n }\n\n .menu-item > .icon > * {\n /* Prevent tooltip containing icon literal description */\n pointer-events: none;\n }\n\n .menu-item.selected .icon {\n background-color: var(--activeButtonBg);\n border-radius: 1rem 0 0 1rem;\n }\n\n .icon .fill-color {\n fill: #999;\n }\n\n .icon.active .fill-color {\n fill: #fff;\n }\n`;\n"]}
|
|
@@ -27,10 +27,6 @@ export default css `
|
|
|
27
27
|
transform: translateX(calc(${sliderWidth} * -1));
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
.menu > button.close {
|
|
31
|
-
right: 0.7rem;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
30
|
button {
|
|
35
31
|
cursor: pointer;
|
|
36
32
|
}
|
|
@@ -70,11 +66,13 @@ export default css `
|
|
|
70
66
|
position: absolute;
|
|
71
67
|
}
|
|
72
68
|
button.close {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
69
|
+
min-width: 38px;
|
|
70
|
+
min-height: 38px;
|
|
71
|
+
display: flex;
|
|
72
|
+
justify-content: center;
|
|
73
|
+
align-items: center;
|
|
74
|
+
right: 0;
|
|
75
|
+
top: 0;
|
|
78
76
|
}
|
|
79
77
|
|
|
80
78
|
.content {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-slider.js","sourceRoot":"","sources":["../../../../src/menu-slider/styles/menu-slider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,eAAe,GAAG,GAAG,CAAA,MAAM,CAAC;AAClC,MAAM,WAAW,GAAG,GAAG,CAAA,yBAAyB,CAAC;AACjD,MAAM,gBAAgB,GAAG,GAAG,CAAA,+BAA+B,CAAC;AAE5D,eAAe,GAAG,CAAA;;;;;;;;4BAQU,gBAAgB;;;;;;;;aAQ/B,WAAW;;;;;;iCAMS,WAAW
|
|
1
|
+
{"version":3,"file":"menu-slider.js","sourceRoot":"","sources":["../../../../src/menu-slider/styles/menu-slider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,eAAe,GAAG,GAAG,CAAA,MAAM,CAAC;AAClC,MAAM,WAAW,GAAG,GAAG,CAAA,yBAAyB,CAAC;AACjD,MAAM,gBAAgB,GAAG,GAAG,CAAA,+BAA+B,CAAC;AAE5D,eAAe,GAAG,CAAA;;;;;;;;4BAQU,gBAAgB;;;;;;;;aAQ/B,WAAW;;;;;;iCAMS,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAwDhC,eAAe;;iCAEM,WAAW;4BAChB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B3C,CAAC","sourcesContent":["import { css } from 'lit';\n\nconst menuButtonWidth = css`42px`;\nconst sliderWidth = css`var(--menuWidth, 320px)`;\nconst transitionTiming = css`var(--animationTiming, 200ms)`;\n\nexport default css`\n .main {\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .animate {\n transition: transform ${transitionTiming} ease-out;\n }\n\n .menu {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: ${sliderWidth};\n padding: 0.5rem 0.5rem 0 0;\n box-sizing: border-box;\n font-size: 1.4rem;\n color: var(--primaryTextColor);\n background: var(--menuSliderBg);\n transform: translateX(calc(${sliderWidth} * -1));\n }\n\n button {\n cursor: pointer;\n }\n\n header {\n margin: 0 0 0.5rem 0;\n }\n\n header * {\n margin: 0;\n display: inline-block;\n }\n header button {\n cursor: pointer;\n }\n\n header.with-secondary-action .details {\n width: 80%;\n }\n\n header .details {\n font-weight: bold;\n width: 88%;\n }\n\n header .custom-action > *,\n button.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n --iconWidth: var(--menuSliderHeaderIconWidth);\n --iconHeight: var(--menuSliderHeaderIconHeight);\n }\n\n header .custom-action,\n button.close {\n position: absolute;\n }\n button.close {\n min-width: 38px;\n min-height: 38px;\n display: flex;\n justify-content: center;\n align-items: center;\n right: 0;\n top: 0;\n }\n\n .content {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: ${menuButtonWidth};\n z-index: 1;\n transform: translateX(calc(${sliderWidth} * -1));\n transition: transform ${transitionTiming} ease-out;\n background: var(--activeButtonBg);\n border-right: 0.2rem solid;\n border-color: var(--subpanelRightBorderColor);\n padding: 0.5rem 0 0 0.5rem;\n display: flex;\n flex-direction: column;\n }\n\n .open {\n transform: translateX(0);\n }\n\n .menu-list {\n padding: 0;\n margin: 0;\n list-style: none;\n background: var(--menuSliderBg);\n }\n .menu-list li {\n margin-bottom: 0.2rem;\n }\n\n .content > section {\n overflow: auto;\n overscroll-behavior: contain;\n }\n`;\n"]}
|
|
@@ -56,7 +56,7 @@ let IauxSharingOptions = class IauxSharingOptions extends LitElement {
|
|
|
56
56
|
this.sharingOptions = [
|
|
57
57
|
{
|
|
58
58
|
name: 'Twitter',
|
|
59
|
-
icon: html `<ia-icon-twitter></ia-icon-twitter>`,
|
|
59
|
+
icon: html `<ia-icon-twitter aria-hidden="true"></ia-icon-twitter>`,
|
|
60
60
|
url: `https://twitter.com/intent/tweet?${new URLSearchParams({
|
|
61
61
|
url: shareUrl,
|
|
62
62
|
text: shareBlurb,
|
|
@@ -65,14 +65,14 @@ let IauxSharingOptions = class IauxSharingOptions extends LitElement {
|
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
name: 'Facebook',
|
|
68
|
-
icon: html `<ia-icon-facebook></ia-icon-facebook>`,
|
|
68
|
+
icon: html `<ia-icon-facebook aria-hidden="true"></ia-icon-facebook>`,
|
|
69
69
|
url: `https://www.facebook.com/sharer/sharer.php?${new URLSearchParams({
|
|
70
70
|
u: shareUrl,
|
|
71
71
|
})}`,
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
name: 'Tumblr',
|
|
75
|
-
icon: html `<ia-icon-tumblr></ia-icon-tumblr>`,
|
|
75
|
+
icon: html `<ia-icon-tumblr aria-hidden="true"></ia-icon-tumblr>`,
|
|
76
76
|
url: `https://www.tumblr.com/widgets/share/tool/preview?${new URLSearchParams({
|
|
77
77
|
posttype: 'link',
|
|
78
78
|
canonicalUrl: shareUrl,
|
|
@@ -81,7 +81,7 @@ let IauxSharingOptions = class IauxSharingOptions extends LitElement {
|
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
name: 'Pinterest',
|
|
84
|
-
icon: html `<ia-icon-pinterest></ia-icon-pinterest>`,
|
|
84
|
+
icon: html `<ia-icon-pinterest aria-hidden="true"></ia-icon-pinterest>`,
|
|
85
85
|
url: `http://www.pinterest.com/pin/create/button/?${new URLSearchParams({
|
|
86
86
|
url: shareUrl,
|
|
87
87
|
description: shareBlurb,
|
|
@@ -89,7 +89,7 @@ let IauxSharingOptions = class IauxSharingOptions extends LitElement {
|
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
name: 'Email',
|
|
92
|
-
icon: html `<ia-icon-email></ia-icon-email>`,
|
|
92
|
+
icon: html `<ia-icon-email aria-hidden="true"></ia-icon-email>`,
|
|
93
93
|
url: `mailto:?${new URLSearchParams({
|
|
94
94
|
subject: shareBlurb,
|
|
95
95
|
body: shareUrl,
|
|
@@ -117,13 +117,13 @@ let IauxSharingOptions = class IauxSharingOptions extends LitElement {
|
|
|
117
117
|
render() {
|
|
118
118
|
return html `
|
|
119
119
|
${this.header}
|
|
120
|
-
<
|
|
120
|
+
<div>
|
|
121
121
|
${this.sharingOptions.map(option => html ` <a class="share-option" href="${option.url}" target="_blank">
|
|
122
122
|
${option.icon} ${option.name}
|
|
123
123
|
</a>`)}
|
|
124
124
|
<details>
|
|
125
125
|
<summary class="share-option">
|
|
126
|
-
<ia-icon-link></ia-icon-link>
|
|
126
|
+
<ia-icon-link aria-hidden="true"></ia-icon-link>
|
|
127
127
|
Get an embeddable link
|
|
128
128
|
</summary>
|
|
129
129
|
<div class="embed">
|
|
@@ -148,7 +148,7 @@ let IauxSharingOptions = class IauxSharingOptions extends LitElement {
|
|
|
148
148
|
</p>
|
|
149
149
|
</div>
|
|
150
150
|
</details>
|
|
151
|
-
</
|
|
151
|
+
</div>
|
|
152
152
|
`;
|
|
153
153
|
}
|
|
154
154
|
get providerIcon() {
|
|
@@ -181,7 +181,7 @@ let IauxSharingOptions = class IauxSharingOptions extends LitElement {
|
|
|
181
181
|
font-size: 1.4rem;
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
|
|
184
|
+
:host > div {
|
|
185
185
|
padding: 1rem 0;
|
|
186
186
|
}
|
|
187
187
|
|
|
@@ -192,6 +192,12 @@ let IauxSharingOptions = class IauxSharingOptions extends LitElement {
|
|
|
192
192
|
text-decoration: none;
|
|
193
193
|
color: var(--shareLinkColor);
|
|
194
194
|
cursor: pointer;
|
|
195
|
+
transition: background-color 0.2s;
|
|
196
|
+
border-radius: 6px;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.share-option:hover {
|
|
200
|
+
background-color: rgba(255, 255, 255, 0.05);
|
|
195
201
|
}
|
|
196
202
|
|
|
197
203
|
.share-option > * {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share-panel.js","sourceRoot":"","sources":["../../../src/menus/share-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n CSSResult,\n html,\n LitElement,\n nothing,\n PropertyValues,\n TemplateResult,\n} from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@internetarchive/icon-share/icon-share';\nimport '@internetarchive/icon-twitter/icon-twitter';\nimport '@internetarchive/icon-facebook/icon-facebook';\nimport '@internetarchive/icon-tumblr/icon-tumblr';\nimport '@internetarchive/icon-pinterest/icon-pinterest';\nimport '@internetarchive/icon-email/icon-email';\nimport '@internetarchive/icon-link/icon-link';\n\ntype ShareOption = {\n name: string;\n icon: TemplateResult | string;\n url: string;\n};\n\nconst copyToClipboard = (event: MouseEvent) => {\n const currentTarget = event.currentTarget as HTMLElement;\n const textarea = currentTarget.querySelector('textarea');\n const note = currentTarget.querySelector('small') as any;\n textarea!.select();\n document.execCommand('copy');\n textarea!.blur();\n note.classList.add('visible');\n clearTimeout(note.timeout);\n note.timeout = setTimeout(() => note.classList.remove('visible'), 4000);\n};\n\nexport const iauxShareIcon: TemplateResult = html`<ia-icon-share\n style=\"width: var(--iconWidth); height: var(--iconHeight);\"\n></ia-icon-share>`;\n\n@customElement('iaux-in-share-panel')\nexport class IauxSharingOptions extends LitElement {\n @property({ type: String }) baseHost = 'archive.org';\n\n @property({ type: String }) creator = '';\n\n @property({ type: String }) description = '';\n\n @property({ type: Boolean }) embedOptionsVisible = false;\n\n @property({ type: String }) identifier = '';\n\n @property({ type: Array }) sharingOptions: ShareOption[] = [];\n\n @property({ type: String }) type = '';\n\n @property({ type: Boolean }) renderHeader = false;\n\n @property({ type: String }) fileSubPrefix = '';\n\n updated(changed: PropertyValues) {\n if (changed.has('sharingOptions') && !this.sharingOptions.length) {\n this.loadProviders();\n }\n }\n\n loadProviders() {\n let shareUrl = `https://${this.baseHost}/details/${this.identifier}`;\n if (this.fileSubPrefix) {\n shareUrl += `/${this.fileSubPrefix}`;\n }\n const shareBlurb = [\n this.description,\n this.creator,\n 'Free Download, Borrow, and Streaming',\n 'Internet Archive',\n ]\n .filter(Boolean)\n .join(' : ');\n\n this.sharingOptions = [\n {\n name: 'Twitter',\n icon: html`<ia-icon-twitter></ia-icon-twitter>`,\n url: `https://twitter.com/intent/tweet?${new URLSearchParams({\n url: shareUrl,\n text: shareBlurb,\n via: 'internetarchive',\n })}`,\n },\n {\n name: 'Facebook',\n icon: html`<ia-icon-facebook></ia-icon-facebook>`,\n url: `https://www.facebook.com/sharer/sharer.php?${new URLSearchParams({\n u: shareUrl,\n })}`,\n },\n {\n name: 'Tumblr',\n icon: html`<ia-icon-tumblr></ia-icon-tumblr>`,\n url: `https://www.tumblr.com/widgets/share/tool/preview?${new URLSearchParams(\n {\n posttype: 'link',\n canonicalUrl: shareUrl,\n title: shareBlurb,\n },\n )}`,\n },\n {\n name: 'Pinterest',\n icon: html`<ia-icon-pinterest></ia-icon-pinterest>`,\n url: `http://www.pinterest.com/pin/create/button/?${new URLSearchParams(\n {\n url: shareUrl,\n description: shareBlurb,\n },\n )}`,\n },\n {\n name: 'Email',\n icon: html`<ia-icon-email></ia-icon-email>`,\n url: `mailto:?${new URLSearchParams({\n subject: shareBlurb,\n body: shareUrl,\n })}`,\n },\n ];\n }\n\n get iframeEmbed() {\n return `<iframe\n src=\"https://${this.baseHost}/embed/${this.identifier}\"\n width=\"560\" height=\"384\" frameborder=\"0\"\n webkitallowfullscreen=\"true\" mozallowfullscreen=\"true\" allowfullscreen\n ></iframe>`;\n }\n\n get bbcodeEmbed() {\n return `[archiveorg ${this.identifier} width=560 height=384 frameborder=0 webkitallowfullscreen=true mozallowfullscreen=true]`;\n }\n\n get helpURL() {\n return `https://${this.baseHost}/help/audio.php?identifier=${this.identifier}`;\n }\n\n get header() {\n const header = html`<header><h3>Share this ${this.type}</h3></header>`;\n return this.renderHeader ? header : nothing;\n }\n\n render() {\n return html`\n ${this.header}\n <main>\n ${this.sharingOptions.map(\n option =>\n html` <a class=\"share-option\" href=\"${option.url}\" target=\"_blank\">\n ${option.icon} ${option.name}\n </a>`,\n )}\n <details>\n <summary class=\"share-option\">\n <ia-icon-link></ia-icon-link>\n Get an embeddable link\n </summary>\n <div class=\"embed\">\n <h4>Embed</h4>\n <div class=\"code\" @click=${copyToClipboard}>\n <textarea readonly>${this.iframeEmbed}</textarea>\n <small>Copied to clipboard</small>\n </div>\n <h4>\n Embed for wordpress.com hosted blogs and archive.org item\n <description> tags\n </h4>\n <div class=\"code\" @click=${copyToClipboard}>\n <textarea readonly>${this.bbcodeEmbed}</textarea>\n <small>Copied to clipboard</small>\n </div>\n <p>\n Want more?\n <a href=${this.helpURL}\n >Advanced embedding details, examples, and help</a\n >!\n </p>\n </div>\n </details>\n </main>\n `;\n }\n\n get providerIcon(): TemplateResult {\n return html`<ia-icon-share\n style=\"width: var(--iconWidth); height: var(--iconHeight);\"\n ></ia-icon-share>`;\n }\n\n static get styles(): CSSResult {\n return css`\n :host {\n display: block;\n height: 100%;\n overflow-y: auto;\n font-size: 1.4rem;\n box-sizing: border-box;\n }\n\n header {\n display: flex;\n align-items: baseline;\n }\n\n h3 {\n padding: 0;\n margin: 0 1rem 0 0;\n font-size: 1.6rem;\n }\n\n h4 {\n font-size: 1.4rem;\n }\n\n main {\n padding: 1rem 0;\n }\n\n .share-option {\n display: block;\n padding: 0.5rem 0;\n font-size: 1.6rem;\n text-decoration: none;\n color: var(--shareLinkColor);\n cursor: pointer;\n }\n\n .share-option > * {\n display: inline-block;\n padding: 0.2rem;\n margin-right: 1rem;\n vertical-align: middle;\n border: 1px solid var(--shareIconBorder);\n border-radius: 7px;\n background: var(--shareIconBg);\n }\n\n /* Hide the triangle that appears on details tags */\n summary::marker {\n content: '';\n }\n\n summary::-webkit-details-marker {\n display: none;\n }\n\n .embed {\n padding-right: 5px;\n }\n\n .embed a {\n color: var(--shareLinkColor);\n }\n\n .code {\n position: relative;\n }\n\n textarea {\n display: block;\n width: 100%;\n height: 120px;\n padding: 0.8rem 1rem;\n box-sizing: border-box;\n resize: none;\n cursor: pointer;\n font:\n normal 1.4rem 'Helvetica Neue',\n Helvetica,\n Arial,\n sans-serif;\n color: var(--textareaColor, #fff);\n background: var(--textareaBg, #151515);\n }\n\n small {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 3rem;\n padding: 0.5rem 1rem;\n box-sizing: border-box;\n font:\n normal 1.2rem/2rem 'Helvetica Neue',\n Helvetica,\n Arial,\n sans-serif;\n color: var(--textareaBg, #151515);\n background: var(--textareaColor, #fff);\n opacity: 0;\n transition: opacity 300ms linear;\n }\n small.visible {\n opacity: 1;\n }\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"share-panel.js","sourceRoot":"","sources":["../../../src/menus/share-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n CSSResult,\n html,\n LitElement,\n nothing,\n PropertyValues,\n TemplateResult,\n} from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@internetarchive/icon-share/icon-share';\nimport '@internetarchive/icon-twitter/icon-twitter';\nimport '@internetarchive/icon-facebook/icon-facebook';\nimport '@internetarchive/icon-tumblr/icon-tumblr';\nimport '@internetarchive/icon-pinterest/icon-pinterest';\nimport '@internetarchive/icon-email/icon-email';\nimport '@internetarchive/icon-link/icon-link';\n\ntype ShareOption = {\n name: string;\n icon: TemplateResult | string;\n url: string;\n};\n\nconst copyToClipboard = (event: MouseEvent) => {\n const currentTarget = event.currentTarget as HTMLElement;\n const textarea = currentTarget.querySelector('textarea');\n const note = currentTarget.querySelector('small') as any;\n textarea!.select();\n document.execCommand('copy');\n textarea!.blur();\n note.classList.add('visible');\n clearTimeout(note.timeout);\n note.timeout = setTimeout(() => note.classList.remove('visible'), 4000);\n};\n\nexport const iauxShareIcon: TemplateResult = html`<ia-icon-share\n style=\"width: var(--iconWidth); height: var(--iconHeight);\"\n></ia-icon-share>`;\n\n@customElement('iaux-in-share-panel')\nexport class IauxSharingOptions extends LitElement {\n @property({ type: String }) baseHost = 'archive.org';\n\n @property({ type: String }) creator = '';\n\n @property({ type: String }) description = '';\n\n @property({ type: Boolean }) embedOptionsVisible = false;\n\n @property({ type: String }) identifier = '';\n\n @property({ type: Array }) sharingOptions: ShareOption[] = [];\n\n @property({ type: String }) type = '';\n\n @property({ type: Boolean }) renderHeader = false;\n\n @property({ type: String }) fileSubPrefix = '';\n\n updated(changed: PropertyValues) {\n if (changed.has('sharingOptions') && !this.sharingOptions.length) {\n this.loadProviders();\n }\n }\n\n loadProviders() {\n let shareUrl = `https://${this.baseHost}/details/${this.identifier}`;\n if (this.fileSubPrefix) {\n shareUrl += `/${this.fileSubPrefix}`;\n }\n const shareBlurb = [\n this.description,\n this.creator,\n 'Free Download, Borrow, and Streaming',\n 'Internet Archive',\n ]\n .filter(Boolean)\n .join(' : ');\n\n this.sharingOptions = [\n {\n name: 'Twitter',\n icon: html`<ia-icon-twitter aria-hidden=\"true\"></ia-icon-twitter>`,\n url: `https://twitter.com/intent/tweet?${new URLSearchParams({\n url: shareUrl,\n text: shareBlurb,\n via: 'internetarchive',\n })}`,\n },\n {\n name: 'Facebook',\n icon: html`<ia-icon-facebook aria-hidden=\"true\"></ia-icon-facebook>`,\n url: `https://www.facebook.com/sharer/sharer.php?${new URLSearchParams({\n u: shareUrl,\n })}`,\n },\n {\n name: 'Tumblr',\n icon: html`<ia-icon-tumblr aria-hidden=\"true\"></ia-icon-tumblr>`,\n url: `https://www.tumblr.com/widgets/share/tool/preview?${new URLSearchParams(\n {\n posttype: 'link',\n canonicalUrl: shareUrl,\n title: shareBlurb,\n },\n )}`,\n },\n {\n name: 'Pinterest',\n icon: html`<ia-icon-pinterest aria-hidden=\"true\"></ia-icon-pinterest>`,\n url: `http://www.pinterest.com/pin/create/button/?${new URLSearchParams(\n {\n url: shareUrl,\n description: shareBlurb,\n },\n )}`,\n },\n {\n name: 'Email',\n icon: html`<ia-icon-email aria-hidden=\"true\"></ia-icon-email>`,\n url: `mailto:?${new URLSearchParams({\n subject: shareBlurb,\n body: shareUrl,\n })}`,\n },\n ];\n }\n\n get iframeEmbed() {\n return `<iframe\n src=\"https://${this.baseHost}/embed/${this.identifier}\"\n width=\"560\" height=\"384\" frameborder=\"0\"\n webkitallowfullscreen=\"true\" mozallowfullscreen=\"true\" allowfullscreen\n ></iframe>`;\n }\n\n get bbcodeEmbed() {\n return `[archiveorg ${this.identifier} width=560 height=384 frameborder=0 webkitallowfullscreen=true mozallowfullscreen=true]`;\n }\n\n get helpURL() {\n return `https://${this.baseHost}/help/audio.php?identifier=${this.identifier}`;\n }\n\n get header() {\n const header = html`<header><h3>Share this ${this.type}</h3></header>`;\n return this.renderHeader ? header : nothing;\n }\n\n render() {\n return html`\n ${this.header}\n <div>\n ${this.sharingOptions.map(\n option =>\n html` <a class=\"share-option\" href=\"${option.url}\" target=\"_blank\">\n ${option.icon} ${option.name}\n </a>`,\n )}\n <details>\n <summary class=\"share-option\">\n <ia-icon-link aria-hidden=\"true\"></ia-icon-link>\n Get an embeddable link\n </summary>\n <div class=\"embed\">\n <h4>Embed</h4>\n <div class=\"code\" @click=${copyToClipboard}>\n <textarea readonly>${this.iframeEmbed}</textarea>\n <small>Copied to clipboard</small>\n </div>\n <h4>\n Embed for wordpress.com hosted blogs and archive.org item\n <description> tags\n </h4>\n <div class=\"code\" @click=${copyToClipboard}>\n <textarea readonly>${this.bbcodeEmbed}</textarea>\n <small>Copied to clipboard</small>\n </div>\n <p>\n Want more?\n <a href=${this.helpURL}\n >Advanced embedding details, examples, and help</a\n >!\n </p>\n </div>\n </details>\n </div>\n `;\n }\n\n get providerIcon(): TemplateResult {\n return html`<ia-icon-share\n style=\"width: var(--iconWidth); height: var(--iconHeight);\"\n ></ia-icon-share>`;\n }\n\n static get styles(): CSSResult {\n return css`\n :host {\n display: block;\n height: 100%;\n overflow-y: auto;\n font-size: 1.4rem;\n box-sizing: border-box;\n }\n\n header {\n display: flex;\n align-items: baseline;\n }\n\n h3 {\n padding: 0;\n margin: 0 1rem 0 0;\n font-size: 1.6rem;\n }\n\n h4 {\n font-size: 1.4rem;\n }\n\n :host > div {\n padding: 1rem 0;\n }\n\n .share-option {\n display: block;\n padding: 0.5rem 0;\n font-size: 1.6rem;\n text-decoration: none;\n color: var(--shareLinkColor);\n cursor: pointer;\n transition: background-color 0.2s;\n border-radius: 6px;\n }\n\n .share-option:hover {\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n .share-option > * {\n display: inline-block;\n padding: 0.2rem;\n margin-right: 1rem;\n vertical-align: middle;\n border: 1px solid var(--shareIconBorder);\n border-radius: 7px;\n background: var(--shareIconBg);\n }\n\n /* Hide the triangle that appears on details tags */\n summary::marker {\n content: '';\n }\n\n summary::-webkit-details-marker {\n display: none;\n }\n\n .embed {\n padding-right: 5px;\n }\n\n .embed a {\n color: var(--shareLinkColor);\n }\n\n .code {\n position: relative;\n }\n\n textarea {\n display: block;\n width: 100%;\n height: 120px;\n padding: 0.8rem 1rem;\n box-sizing: border-box;\n resize: none;\n cursor: pointer;\n font:\n normal 1.4rem 'Helvetica Neue',\n Helvetica,\n Arial,\n sans-serif;\n color: var(--textareaColor, #fff);\n background: var(--textareaBg, #151515);\n }\n\n small {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 3rem;\n padding: 0.5rem 1rem;\n box-sizing: border-box;\n font:\n normal 1.2rem/2rem 'Helvetica Neue',\n Helvetica,\n Arial,\n sans-serif;\n color: var(--textareaBg, #151515);\n background: var(--textareaColor, #fff);\n opacity: 0;\n transition: opacity 300ms linear;\n }\n small.visible {\n opacity: 1;\n }\n `;\n }\n}\n"]}
|