@brightspace-ui/core 3.309.0 → 3.309.1

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.
@@ -1,5 +1,5 @@
1
- import 'prismjs/prism.js';
2
1
  import { html, LitElement } from 'lit';
2
+ import { formatCodeElement } from '../../helpers/prism.js';
3
3
  import { styles } from './code-view-styles.js';
4
4
  import { themeStyles } from './code-dark-plus-styles.js';
5
5
  import { unsafeHTML } from 'lit/directives/unsafe-html.js';
@@ -17,17 +17,10 @@ class CodeView extends LitElement {
17
17
  constructor() {
18
18
  super();
19
19
  this.language = 'html';
20
- this._dependenciesPromise = Promise.resolve();
21
20
  }
22
21
 
23
22
  attributeChangedCallback(name, oldval, newval) {
24
23
  if (name !== 'language' || oldval === newval) return;
25
- const language = this._getLanguage(newval);
26
- if (Prism.languages[language]) {
27
- this._dependenciesPromise = Promise.resolve();
28
- } else {
29
- this._dependenciesPromise = import(`../../node_modules/prismjs/components/prism-${language}.min.js`);
30
- }
31
24
  if (this.shadowRoot) this._updateCode(this.shadowRoot.querySelector('slot'));
32
25
  super.attributeChangedCallback(name, oldval, newval);
33
26
  }
@@ -78,17 +71,6 @@ class CodeView extends LitElement {
78
71
  }).join('\n');
79
72
  }
80
73
 
81
- _getLanguage(language) {
82
- const aliases = { shell: 'bash' };
83
- return aliases[language] ? aliases[language] : language;
84
- }
85
-
86
- _getPrismGrammar(language) {
87
- language = this._getLanguage(language);
88
- if (Prism.languages[language]) return Prism.languages[language];
89
- else return Prism.languages.html;
90
- }
91
-
92
74
  _handleSlotChange(e) {
93
75
  this._updateCode(e.target);
94
76
  }
@@ -107,8 +89,11 @@ class CodeView extends LitElement {
107
89
  let code = this._formatCode(nodes.reduce((code, node) => code + node.textContent, ''));
108
90
 
109
91
  try {
110
- await this._dependenciesPromise;
111
- code = Prism.highlight(code, this._getPrismGrammar(this.language), this.language);
92
+ const codeElement = document.createElement('code');
93
+ codeElement.className = `language-${this.language}`;
94
+ codeElement.textContent = code;
95
+ await formatCodeElement(codeElement, { allowAllLanguages: true });
96
+ code = codeElement.innerHTML;
112
97
  } catch (ex) {
113
98
  // eslint-disable-next-line no-console
114
99
  console.log(ex);
package/helpers/prism.js CHANGED
@@ -330,13 +330,17 @@ export const codeStyles = css`
330
330
  }
331
331
  `;
332
332
 
333
- const getLanguageInfo = elem => {
333
+ const languageAliases = {
334
+ shell: 'bash'
335
+ };
336
+
337
+ const getLanguageInfo = (elem, allowAllLanguages) => {
334
338
  const classes = elem.classList;
335
339
  for (let i = 0; i < classes.length; i++) {
336
340
  if (classes[i].startsWith('language-')) {
337
341
  const key = classes[i].substring(9);
338
342
  const desc = codeLanguages.get(key);
339
- if (desc) return { key: key, desc: desc };
343
+ if (desc || allowAllLanguages) return { key: languageAliases[key] || key, desc: desc };
340
344
  }
341
345
  }
342
346
  return { key: 'plain', desc: codeLanguages.get('plain') };
@@ -351,6 +355,7 @@ const languageDependencies = {
351
355
  const languagesLoaded = {
352
356
  clike: Promise.resolve(),
353
357
  css: Promise.resolve(),
358
+ html: Promise.resolve(),
354
359
  javascript: Promise.resolve(),
355
360
  markup: Promise.resolve(),
356
361
  plain: Promise.resolve()
@@ -442,12 +447,13 @@ const getCodeElement = elem => {
442
447
  return elem.querySelector('code');
443
448
  };
444
449
 
445
- export async function formatCodeElement(elem) {
450
+ // allowAllLanguages is intended only for development consumers.
451
+ export async function formatCodeElement(elem, { allowAllLanguages = false } = {}) {
446
452
  const code = getCodeElement(elem);
447
453
 
448
454
  if (code.className.indexOf('language-') === -1) return;
449
455
 
450
- const languageInfo = getLanguageInfo(code);
456
+ const languageInfo = getLanguageInfo(code, allowAllLanguages);
451
457
  const lineNumbers = elem.classList.contains('line-numbers') || code.classList.contains('line-numbers');
452
458
 
453
459
  await loadPrism(); // must be loaded before loading plugins or languages
@@ -457,7 +463,7 @@ export async function formatCodeElement(elem) {
457
463
  lineNumbers ? loadPlugin('line-numbers') : null
458
464
  ]);
459
465
 
460
- if (!elem.dataset.language && languageInfo.key !== 'plain') elem.dataset.language = languageInfo.desc;
466
+ if (!elem.dataset.language && languageInfo.desc && languageInfo.key !== 'plain') elem.dataset.language = languageInfo.desc;
461
467
  Prism.highlightElement(code);
462
468
  }
463
469
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "3.309.0",
3
+ "version": "3.309.1",
4
4
  "description": "A collection of accessible, free, open-source web components for building Brightspace applications",
5
5
  "type": "module",
6
6
  "repository": "https://github.com/BrightspaceUI/core.git",