Skip to content

Commit 3d96eed

Browse files
authoredOct 5, 2021
Update test and example pages to use Autoloader (#1936)
1 parent b5a70e4 commit 3d96eed

File tree

4 files changed

+24
-115
lines changed

4 files changed

+24
-115
lines changed
 

‎assets/examples.js

+12-52
Original file line numberDiff line numberDiff line change
@@ -179,62 +179,22 @@
179179
language.examplesPromise.then(function (contents) {
180180
examples[id].innerHTML = buildContentsHeader(id) + contents;
181181

182-
loadLanguage(id).then(function () {
183-
Prism.highlightAllUnder(examples[id]);
182+
/** @type {HTMLElement} */
183+
var container = examples[id];
184+
container.innerHTML = buildContentsHeader(id) + contents;
185+
186+
// the current language might be an extension of a language
187+
// so to be safe, we explicitly add a dependency to the current language
188+
$$('pre', container).forEach(/** @param {HTMLElement} pre */function (pre) {
189+
var dependencies = (pre.getAttribute('data-dependencies') || '').trim();
190+
dependencies = dependencies ? dependencies + ',' + id : id;
191+
pre.setAttribute('data-dependencies', dependencies);
184192
});
193+
194+
Prism.highlightAllUnder(container);
185195
});
186196
} else {
187197
examples[id].innerHTML = '';
188198
}
189199
}
190-
191-
/**
192-
* Loads a language, including all dependencies
193-
*
194-
* @param {string} lang the language to load
195-
* @returns {Promise} the promise which resolves as soon as everything is loaded
196-
*/
197-
function loadLanguage(lang) {
198-
// at first we need to fetch all dependencies for the main language
199-
// Note: we need to do this, even if the main language already is loaded (just to be sure..)
200-
//
201-
// We load an array of all dependencies and call recursively this function on each entry
202-
//
203-
// dependencies is now an (possibly empty) array of loading-promises
204-
var dependencies = getDependenciesOfLanguage(lang).map(loadLanguage);
205-
206-
// We create a promise, which will resolve, as soon as all dependencies are loaded.
207-
// They need to be fully loaded because the main language may extend them.
208-
return Promise.all(dependencies)
209-
.then(function () {
210-
211-
// If the main language itself isn't already loaded, load it now
212-
// and return the newly created promise (we chain the promises).
213-
// If the language is already loaded, just do nothing - the next .then()
214-
// will immediately be called
215-
if (!Prism.languages[lang]) {
216-
return new Promise(function (resolve) {
217-
$u.script('components/prism-' + lang + '.js', resolve);
218-
});
219-
}
220-
});
221-
}
222-
223-
224-
/**
225-
* Returns all dependencies (as identifiers) of a specific language
226-
*
227-
* @param {string} lang
228-
* @returns {string[]} the list of dependencies. Empty if the language has none.
229-
*/
230-
function getDependenciesOfLanguage(lang) {
231-
if (!components.languages[lang] || !components.languages[lang].require) {
232-
return [];
233-
}
234-
235-
return ($u.type(components.languages[lang].require) === 'array')
236-
? components.languages[lang].require
237-
: [components.languages[lang].require];
238-
}
239-
240200
}());

‎examples.html

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ <h1>Per language examples</h1>
101101

102102
<script src="assets/vendor/utopia.js"></script>
103103
<script src="prism.js"></script>
104+
<script src="plugins/autoloader/prism-autoloader.js" data-autoloader-path="components/"></script>
104105
<script src="components.js"></script>
105106
<script src="assets/code.js"></script>
106107
<script src="assets/vendor/promise.js"></script>

‎examples/prism-js-templates.html

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
<h2>HTML template literals</h2>
2-
<pre><code class="language-javascript">html`
2+
<pre data-dependencies="markup"><code class="language-javascript">html`
33
&lt;p>
44
Foo.
55
&lt;/p>`;</code></pre>
66

77
<h2>JS DOM</h2>
8-
<pre><code class="language-javascript">div.innerHTML = `&lt;p>&lt;/p>`;
8+
<pre data-dependencies="markup"><code class="language-javascript">div.innerHTML = `&lt;p>&lt;/p>`;
99
div.outerHTML = `&lt;p>&lt;/p>`;</code></pre>
1010

1111
<h2><a href="https://github.com/zeit/styled-jsx">styled-jsx</a> CSS template literals</h2>
12-
<pre><code class="language-javascript">css`a:hover { color: blue; }`;</code></pre>
12+
<pre data-dependencies="css"><code class="language-javascript">css`a:hover { color: blue; }`;</code></pre>
1313

1414
<h2><a href="https://github.com/styled-components/styled-components"><code class="language-none">styled-components</code></a> CSS template literals</h2>
15-
<pre><code class="language-javascript">const Button = styled.button`
15+
<pre data-dependencies="css"><code class="language-javascript">const Button = styled.button`
1616
color: blue;
1717
background: red;
1818
`;</code></pre>
1919

2020
<h2>Markdown template literals</h2>
21-
<pre><code class="language-javascript">markdown`# My title`;</code></pre>
21+
<pre data-dependencies="markdown"><code class="language-javascript">markdown`# My title`;</code></pre>
2222

2323
<h2>GraphQL template literals</h2>
24-
<pre><code class="language-javascript">gql`{ foo }`;
24+
<pre data-dependencies="graphql"><code class="language-javascript">gql`{ foo }`;
2525
graphql`{ foo }`;</code></pre>

‎test.html

+5-57
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,10 @@ <h2>Test drive</h2>
173173

174174
<script src="assets/vendor/utopia.js"></script>
175175
<script src="components/prism-core.js"></script>
176+
<script src="plugins/autoloader/prism-autoloader.js" data-autoloader-path="components/"></script>
177+
<script>
178+
Prism.plugins.autoloader.use_minified = false;
179+
</script>
176180
<script src="components.js"></script>
177181
<script src="assets/code.js"></script>
178182
<script src="assets/vendor/promise.js"></script>
@@ -266,10 +270,7 @@ <h2>Test drive</h2>
266270
updateHashLanguage(lang);
267271
updateShareLink();
268272

269-
// loadLanguage() returns a promise, so we use highlightCode()
270-
// as resolve callback. The promise will be immediately
271-
// resolved if there is nothing to load.
272-
loadLanguage(lang).then(highlightCode);
273+
highlightCode();
273274
}
274275
}
275276
}, name
@@ -279,59 +280,6 @@ <h2>Test drive</h2>
279280
}
280281

281282

282-
/**
283-
* Loads a language, including all dependencies
284-
*
285-
* @param {string} lang the language to load
286-
* @type {Promise} the promise which resolves as soon as everything is loaded
287-
*/
288-
function loadLanguage (lang)
289-
{
290-
// at first we need to fetch all dependencies for the main language
291-
// Note: we need to do this, even if the main language already is loaded (just to be sure..)
292-
//
293-
// We load an array of all dependencies and call recursively this function on each entry
294-
//
295-
// dependencies is now an (possibly empty) array of loading-promises
296-
var dependencies = getDependenciesOfLanguage(lang).map(loadLanguage);
297-
298-
// We create a promise, which will resolve, as soon as all dependencies are loaded.
299-
// They need to be fully loaded because the main language may extend them.
300-
return Promise.all(dependencies)
301-
.then(function () {
302-
303-
// If the main language itself isn't already loaded, load it now
304-
// and return the newly created promise (we chain the promises).
305-
// If the language is already loaded, just do nothing - the next .then()
306-
// will immediately be called
307-
if (!Prism.languages[lang]) {
308-
return new Promise(function (resolve) {
309-
$u.script('components/prism-' + lang + '.js', resolve);
310-
});
311-
}
312-
});
313-
}
314-
315-
316-
/**
317-
* Returns all dependencies (as identifiers) of a specific language
318-
*
319-
* @param {string} lang
320-
* @returns {Array.<string>} the list of dependencies. Empty if the language has none.
321-
*/
322-
function getDependenciesOfLanguage (lang)
323-
{
324-
if (!components.languages[lang] || !components.languages[lang].require)
325-
{
326-
return [];
327-
}
328-
329-
return ($u.type(components.languages[lang].require) === "array")
330-
? components.languages[lang].require
331-
: [components.languages[lang].require];
332-
}
333-
334-
335283
var radios = $$('input[name=language]');
336284
var selectedRadio = radios[0];
337285

0 commit comments

Comments
 (0)
Please sign in to comment.