Skip to content

Commit f473c68

Browse files
committed
feat: allow opt-out of define()
Introduce option to opt-out of `define()` by adding a `?define=false` query parameter to the import/script URL - allows the use of a different tag name - run some additional advanced configuration before definition etc.
1 parent 2c345b8 commit f473c68

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

src/constants.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export const ELEMENT_NAME = 'progressive-image';
1+
export const DEFAULT_TAG_NAME = 'progressive-image';
22
export const MESSAGES = {
33
placeholderElement: {
44
missing:

src/index.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import './style.css';
2-
import { ELEMENT_NAME } from './constants';
32
import ProgressiveImageElement from './progressive-image-element';
4-
export { ProgressiveImageElement as default };
53

6-
if (!window.customElements.get(ELEMENT_NAME)) {
7-
window.ProgressiveImageElement = ProgressiveImageElement;
8-
window.customElements.define(ELEMENT_NAME, ProgressiveImageElement);
4+
export default ProgressiveImageElement;
5+
6+
if (!new URL(import.meta.url).searchParams.has('define', 'false')) {
7+
window.ProgressiveImageElement = ProgressiveImageElement.define();
98
}

src/progressive-image-element.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
1-
import { MESSAGES } from './constants';
1+
import { DEFAULT_TAG_NAME, MESSAGES } from './constants';
2+
23
const LAZY_LOADING_SUPPORT = 'loading' in HTMLImageElement.prototype;
34
const SLOW_CONNECTIONS = /\slow-2g|2g|3g/;
45

56
class ProgressiveImageElement extends HTMLElement {
7+
static define(tagName = DEFAULT_TAG_NAME, registry = customElements) {
8+
if (!registry.get(tagName)) {
9+
registry.define(tagName, ProgressiveImageElement);
10+
return ProgressiveImageElement;
11+
}
12+
}
13+
614
constructor() {
715
super();
816
const placeholderElement = this.querySelector('img, svg');

0 commit comments

Comments
 (0)