From 36c2012947316f6b7022b8b9845a79e3ae7eff7c Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Sun, 9 Jun 2019 22:29:41 +0200 Subject: [PATCH 1/6] Improved Autoloader callbacks --- plugins/autoloader/prism-autoloader.js | 56 ++++++++++++---------- plugins/autoloader/prism-autoloader.min.js | 2 +- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/plugins/autoloader/prism-autoloader.js b/plugins/autoloader/prism-autoloader.js index 93fd13c588..185f177683 100644 --- a/plugins/autoloader/prism-autoloader.js +++ b/plugins/autoloader/prism-autoloader.js @@ -152,6 +152,13 @@ "yml": "yaml" }/*]*/; + /** + * @typedef LangDataItem + * @property {{ success: function, error: function }[]} callbacks + * @property {boolean} [error] + * @property {boolean} [loading] + */ + /** @type {Object} */ var lang_data = {}; var ignored_language = 'none'; @@ -215,11 +222,6 @@ lang = lang_aliases[lang]; } - var data = lang_data[lang]; - if (!data) { - data = lang_data[lang] = {}; - } - // Look for additional dependencies defined on the or
 tags
 		var deps = elt.getAttribute('data-dependencies');
 		if (!deps && elt.parentNode && elt.parentNode.tagName.toLowerCase() === 'pre') {
@@ -281,20 +283,14 @@
 		var load = function () {
 			var data = lang_data[lang];
 			if (!data) {
-				data = lang_data[lang] = {};
-			}
-			if (success) {
-				if (!data.success_callbacks) {
-					data.success_callbacks = [];
-				}
-				data.success_callbacks.push(success);
-			}
-			if (error) {
-				if (!data.error_callbacks) {
-					data.error_callbacks = [];
-				}
-				data.error_callbacks.push(error);
+				data = lang_data[lang] = {
+					callbacks: []
+				};
 			}
+			data.callbacks.push({
+				success: success,
+				error: error
+			});
 
 			if (!force && Prism.languages[lang]) {
 				languageSuccess(lang);
@@ -328,10 +324,14 @@
 	 * @param {string} lang
 	 */
 	var languageSuccess = function (lang) {
-		if (lang_data[lang] && lang_data[lang].success_callbacks && lang_data[lang].success_callbacks.length) {
-			lang_data[lang].success_callbacks.forEach(function (f) {
-				f(lang);
-			});
+		if (lang_data[lang] ) {
+			var callbacks = lang_data[lang].callbacks;
+			while (callbacks.length) {
+				var callback = callbacks.shift().success;
+				if (callback) {
+					callback();
+				}
+			}
 		}
 	};
 
@@ -340,10 +340,14 @@
 	 * @param {string} lang
 	 */
 	var languageError = function (lang) {
-		if (lang_data[lang] && lang_data[lang].error_callbacks && lang_data[lang].error_callbacks.length) {
-			lang_data[lang].error_callbacks.forEach(function (f) {
-				f(lang);
-			});
+		if (lang_data[lang]) {
+			var callbacks = lang_data[lang].callbacks;
+			while (callbacks.length) {
+				var callback = callbacks.shift().error;
+				if (callback) {
+					callback();
+				}
+			}
 		}
 	};
 
diff --git a/plugins/autoloader/prism-autoloader.min.js b/plugins/autoloader/prism-autoloader.min.js
index 1cff879874..f17a2c2885 100644
--- a/plugins/autoloader/prism-autoloader.min.js
+++ b/plugins/autoloader/prism-autoloader.min.js
@@ -1 +1 @@
-!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.createElement){var i={javascript:"clike",actionscript:"javascript",arduino:"cpp",aspnet:["markup","csharp"],bison:"c",c:"clike",csharp:"clike",cpp:"c",coffeescript:"javascript",crystal:"ruby","css-extras":"css",d:"clike",dart:"clike",django:"markup-templating",ejs:["javascript","markup-templating"],erb:["ruby","markup-templating"],fsharp:"clike",flow:"javascript",glsl:"clike",gml:"clike",go:"clike",groovy:"clike",haml:"ruby",handlebars:"markup-templating",haxe:"clike",java:"clike",javadoc:["markup","java","javadoclike"],jolie:"clike",jsdoc:["javascript","javadoclike"],"js-extras":"javascript",jsonp:"json",json5:"json",kotlin:"clike",less:"css",markdown:"markup","markup-templating":"markup",n4js:"javascript",nginx:"clike",objectivec:"c",opencl:"cpp",parser:"markup",php:["clike","markup-templating"],phpdoc:["php","javadoclike"],"php-extras":"php",plsql:"sql",processing:"clike",protobuf:"clike",pug:["markup","javascript"],qore:"clike",jsx:["markup","javascript"],tsx:["jsx","typescript"],reason:"clike",ruby:"clike",sass:"css",scss:"css",scala:"java",smarty:"markup-templating",soy:"markup-templating",swift:"clike",tap:"yaml",textile:"markup",tt2:["clike","markup-templating"],twig:"markup",typescript:"javascript","t4-cs":["t4-templating","csharp"],"t4-vb":["t4-templating","visual-basic"],vala:"clike",vbnet:"basic",velocity:"markup",wiki:"markup",xeora:"markup",xquery:"markup"},l={html:"markup",xml:"markup",svg:"markup",mathml:"markup",js:"javascript",adoc:"asciidoc",shell:"bash",rbnf:"bnf",cs:"csharp",dotnet:"csharp",coffee:"coffeescript",jinja2:"django",dockerfile:"docker",gamemakerlanguage:"gml",hs:"haskell",tex:"latex",context:"latex",emacs:"lisp",elisp:"lisp","emacs-lisp":"lisp",md:"markdown",n4jsd:"n4js",objectpascal:"pascal",py:"python",rb:"ruby",ts:"typescript",t4:"t4-cs",vb:"visual-basic",xeoracube:"xeora",yml:"yaml"},n={},a=document.getElementsByTagName("script"),e="components/";if((a=a[a.length-1]).hasAttribute("data-autoloader-path")){var c=a.getAttribute("data-autoloader-path").trim();0
Date: Sun, 9 Jun 2019 23:13:09 +0200
Subject: [PATCH 2/6] The test and example pages now use the Autoloader

---
 examples.html       |  1 +
 scripts/examples.js | 60 +-------------------------------------
 test.html           | 71 +++++++--------------------------------------
 3 files changed, 13 insertions(+), 119 deletions(-)

diff --git a/examples.html b/examples.html
index e60984c4d7..d3b000a71b 100644
--- a/examples.html
+++ b/examples.html
@@ -101,6 +101,7 @@ 

Per language examples

+ diff --git a/scripts/examples.js b/scripts/examples.js index 5c96907601..8b62a787d5 100644 --- a/scripts/examples.js +++ b/scripts/examples.js @@ -149,69 +149,11 @@ function update(id) { language.examplesPromise.then(function (contents) { examples[id].innerHTML = buildContentsHeader(id) + contents; - loadLanguage(id).then(function () { - var elements = examples[id].querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'); - - for (var i=0, element; element = elements[i++];) { - Prism.highlightElement(element); - } - }); + Prism.highlightAllUnder(examples[id]); }); } else { examples[id].innerHTML = ''; } } -/** - * Loads a language, including all dependencies - * - * @param {string} lang the language to load - * @type {Promise} the promise which resolves as soon as everything is loaded - */ -function loadLanguage (lang) -{ - // at first we need to fetch all dependencies for the main language - // Note: we need to do this, even if the main language already is loaded (just to be sure..) - // - // We load an array of all dependencies and call recursively this function on each entry - // - // dependencies is now an (possibly empty) array of loading-promises - var dependencies = getDependenciesOfLanguage(lang).map(loadLanguage); - - // We create a promise, which will resolve, as soon as all dependencies are loaded. - // They need to be fully loaded because the main language may extend them. - return Promise.all(dependencies) - .then(function () { - - // If the main language itself isn't already loaded, load it now - // and return the newly created promise (we chain the promises). - // If the language is already loaded, just do nothing - the next .then() - // will immediately be called - if (!Prism.languages[lang]) { - return new Promise(function (resolve) { - $u.script('components/prism-' + lang + '.js', resolve); - }); - } - }); -} - - -/** - * Returns all dependencies (as identifiers) of a specific language - * - * @param {string} lang - * @returns {Array.} the list of dependencies. Empty if the language has none. - */ -function getDependenciesOfLanguage (lang) -{ - if (!components.languages[lang] || !components.languages[lang].require) - { - return []; - } - - return ($u.type(components.languages[lang].require) === "array") - ? components.languages[lang].require - : [components.languages[lang].require]; -} - }()); diff --git a/test.html b/test.html index d0c47718f2..e994fd93dd 100644 --- a/test.html +++ b/test.html @@ -128,15 +128,22 @@

Test drive

+ +