Skip to content

Commit 559e010

Browse files
committed
refactor: abstract config
1 parent 5d79142 commit 559e010

File tree

6 files changed

+33
-31
lines changed

6 files changed

+33
-31
lines changed

index.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@
9797
// */
9898
// import '/src/index.js'
9999
import SyntaxHighlightElement from '/src/index.js'
100+
// import SyntaxHighlightElement from '/src/index.js?define=false'
101+
// SyntaxHighlightElement.config.languages = ['html', 'css', 'js', 'jsx', 'md'];
102+
// window.SyntaxHighlightElement = await SyntaxHighlightElement.define();
100103

101104
/**
102105
* Option 2. Opt out of prism autoload by manually importing prism core

src/config.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { NAMESPACE } from './constants';
2+
import { tokenizer as defaultTokenizer } from './tokenizer/prism';
3+
4+
/**
5+
* @typedef Config
6+
* @type {object}
7+
* @property {string[]} languages - Languages.
8+
* @property {{ [key: string]: string[] }} languageTokens - Language specific token types.
9+
* @property {object} tokenizer - Tokenizer.
10+
*/
11+
12+
/** @type {Config} */
13+
export default Object.assign(
14+
{
15+
languages: ['markup', 'css', 'javascript'],
16+
languageTokens: {},
17+
tokenizer: Object.assign(defaultTokenizer, window[NAMESPACE]?.config?.tokenizer || {}),
18+
},
19+
window[NAMESPACE]?.config || {},
20+
);

src/constants.js

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1 @@
1-
import { tokenizer as defaultTokenizer } from './tokenizer/prism';
2-
31
export const NAMESPACE = 'she';
4-
5-
/**
6-
* @typedef Config
7-
* @type {object}
8-
* @property {string[]} languages - Languages.
9-
* @property {{ [key: string]: string[] }} languageTokens - Language specific token types.
10-
* @property {object} tokenizer - Tokenizer.
11-
*/
12-
13-
/** @type {Config} */
14-
export const CONFIG = Object.assign(
15-
{
16-
languages: ['markup', 'css', 'javascript'],
17-
languageTokens: {},
18-
tokenizer: Object.assign(defaultTokenizer, window[NAMESPACE]?.config?.tokenizer || {}),
19-
},
20-
window[NAMESPACE]?.config || {},
21-
);

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ export default SyntaxHighlightElement;
88
window[NAMESPACE] = window[NAMESPACE] || {};
99

1010
if (!new URL(import.meta.url).searchParams.has('define', 'false')) {
11-
window.SyntaxHighlightElement = SyntaxHighlightElement.define();
11+
window.SyntaxHighlightElement = await SyntaxHighlightElement.define();
1212
}

src/syntax-highlight-element.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CONFIG } from './constants';
1+
import config from './config';
22

33
export class SyntaxHighlightElement extends HTMLElement {
44
static async define(tagName = 'syntax-highlight', registry = customElements) {
@@ -8,12 +8,14 @@ export class SyntaxHighlightElement extends HTMLElement {
88
}
99

1010
if (!registry.get(tagName)) {
11-
CONFIG.tokenizer?.setup && (await CONFIG.tokenizer.setup());
11+
config?.tokenizer?.setup && (await config.tokenizer.setup(config));
1212
registry.define(tagName, SyntaxHighlightElement);
1313
return SyntaxHighlightElement;
1414
}
1515
}
1616

17+
// static config = config;
18+
1719
#internals;
1820
#highlights = new Set();
1921

@@ -54,8 +56,8 @@ export class SyntaxHighlightElement extends HTMLElement {
5456
*/
5557
paintTokenHighlights() {
5658
// Tokenize the text
57-
const tokens = CONFIG.tokenizer?.tokenize(this.contentElement.innerText, this.language) || [];
58-
const languageTokenTypes = CONFIG.languageTokens?.[this.language] || [];
59+
const tokens = config.tokenizer?.tokenize(this.contentElement.innerText, this.language) || [];
60+
const languageTokenTypes = config.languageTokens?.[this.language] || [];
5961

6062
// Paint highlights
6163
let pos = 0;

src/tokenizer/prism.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
1-
import { CONFIG } from '../constants';
21
import { setupTokenHighlights } from '../utils';
32

43
export const tokenizer = {
5-
async setup() {
4+
async setup(config) {
65
try {
76
if (!window.Prism) {
87
const prismBaseUrl = 'https://cdn.jsdelivr.net/npm/prismjs@1.30.0';
98
await loadPrismCore(prismBaseUrl);
109
await loadPrismLanguage({
1110
baseUrl: prismBaseUrl,
12-
language: CONFIG?.languages,
11+
language: config.languages,
1312
});
1413
}
15-
setupTokenHighlights(tokenTypes, {
16-
languageTokens: CONFIG?.languageTokens || {},
17-
});
14+
setupTokenHighlights(tokenTypes, { languageTokens: config.languageTokens });
1815
} catch (error) {
1916
console.error(error);
2017
}

0 commit comments

Comments
 (0)