aboutsummaryrefslogtreecommitdiff
path: root/node_modules/prismjs/plugins/autoloader/prism-autoloader.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/prismjs/plugins/autoloader/prism-autoloader.js')
-rw-r--r--node_modules/prismjs/plugins/autoloader/prism-autoloader.js209
1 files changed, 209 insertions, 0 deletions
diff --git a/node_modules/prismjs/plugins/autoloader/prism-autoloader.js b/node_modules/prismjs/plugins/autoloader/prism-autoloader.js
new file mode 100644
index 00000000..7cbf2953
--- /dev/null
+++ b/node_modules/prismjs/plugins/autoloader/prism-autoloader.js
@@ -0,0 +1,209 @@
+(function () {
+ if (typeof self === 'undefined' || !self.Prism || !self.document || !document.createElement) {
+ return;
+ }
+
+ // The dependencies map is built automatically with gulp
+ var lang_dependencies = /*languages_placeholder[*/{"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","erb":["ruby","markup-templating"],"fsharp":"clike","flow":"javascript","glsl":"clike","go":"clike","groovy":"clike","haml":"ruby","handlebars":"markup-templating","haxe":"clike","java":"clike","jolie":"clike","kotlin":"clike","less":"css","markdown":"markup","markup-templating":"markup","n4js":"javascript","nginx":"clike","objectivec":"c","opencl":"cpp","parser":"markup","php":["clike","markup-templating"],"php-extras":"php","plsql":"sql","processing":"clike","protobuf":"clike","pug":"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","vbnet":"basic","velocity":"markup","wiki":"markup","xeora":"markup","xquery":"markup"}/*]*/;
+
+ var lang_data = {};
+
+ var ignored_language = 'none';
+
+ var script = document.getElementsByTagName('script');
+ script = script[script.length - 1];
+ var languages_path = 'components/';
+ if(script.hasAttribute('data-autoloader-path')) {
+ var path = script.getAttribute('data-autoloader-path').trim();
+ if(path.length > 0 && !/^[a-z]+:\/\//i.test(script.src)) {
+ languages_path = path.replace(/\/?$/, '/');
+ }
+ } else if (/[\w-]+\.js$/.test(script.src)) {
+ languages_path = script.src.replace(/[\w-]+\.js$/, 'components/');
+ }
+ var config = Prism.plugins.autoloader = {
+ languages_path: languages_path,
+ use_minified: true
+ };
+
+ /**
+ * Lazy loads an external script
+ * @param {string} src
+ * @param {function=} success
+ * @param {function=} error
+ */
+ var script = function (src, success, error) {
+ var s = document.createElement('script');
+ s.src = src;
+ s.async = true;
+ s.onload = function() {
+ document.body.removeChild(s);
+ success && success();
+ };
+ s.onerror = function() {
+ document.body.removeChild(s);
+ error && error();
+ };
+ document.body.appendChild(s);
+ };
+
+ /**
+ * Returns the path to a grammar, using the language_path and use_minified config keys.
+ * @param {string} lang
+ * @returns {string}
+ */
+ var getLanguagePath = function (lang) {
+ return config.languages_path +
+ 'prism-' + lang
+ + (config.use_minified ? '.min' : '') + '.js'
+ };
+
+ /**
+ * Tries to load a grammar and
+ * highlight again the given element once loaded.
+ * @param {string} lang
+ * @param {HTMLElement} elt
+ */
+ var registerElement = function (lang, elt) {
+ var data = lang_data[lang];
+ if (!data) {
+ data = lang_data[lang] = {};
+ }
+
+ // Look for additional dependencies defined on the <code> or <pre> tags
+ var deps = elt.getAttribute('data-dependencies');
+ if (!deps && elt.parentNode && elt.parentNode.tagName.toLowerCase() === 'pre') {
+ deps = elt.parentNode.getAttribute('data-dependencies');
+ }
+
+ if (deps) {
+ deps = deps.split(/\s*,\s*/g);
+ } else {
+ deps = [];
+ }
+
+ loadLanguages(deps, function () {
+ loadLanguage(lang, function () {
+ Prism.highlightElement(elt);
+ });
+ });
+ };
+
+ /**
+ * Sequentially loads an array of grammars.
+ * @param {string[]|string} langs
+ * @param {function=} success
+ * @param {function=} error
+ */
+ var loadLanguages = function (langs, success, error) {
+ if (typeof langs === 'string') {
+ langs = [langs];
+ }
+ var i = 0;
+ var l = langs.length;
+ var f = function () {
+ if (i < l) {
+ loadLanguage(langs[i], function () {
+ i++;
+ f();
+ }, function () {
+ error && error(langs[i]);
+ });
+ } else if (i === l) {
+ success && success(langs);
+ }
+ };
+ f();
+ };
+
+ /**
+ * Load a grammar with its dependencies
+ * @param {string} lang
+ * @param {function=} success
+ * @param {function=} error
+ */
+ var loadLanguage = function (lang, success, error) {
+ var load = function () {
+ var force = false;
+ // Do we want to force reload the grammar?
+ if (lang.indexOf('!') >= 0) {
+ force = true;
+ lang = lang.replace('!', '');
+ }
+
+ 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);
+ }
+
+ if (!force && Prism.languages[lang]) {
+ languageSuccess(lang);
+ } else if (!force && data.error) {
+ languageError(lang);
+ } else if (force || !data.loading) {
+ data.loading = true;
+ var src = getLanguagePath(lang);
+ script(src, function () {
+ data.loading = false;
+ languageSuccess(lang);
+
+ }, function () {
+ data.loading = false;
+ data.error = true;
+ languageError(lang);
+ });
+ }
+ };
+ var dependencies = lang_dependencies[lang];
+ if(dependencies && dependencies.length) {
+ loadLanguages(dependencies, load);
+ } else {
+ load();
+ }
+ };
+
+ /**
+ * Runs all success callbacks for this language.
+ * @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);
+ });
+ }
+ };
+
+ /**
+ * Runs all error callbacks for this language.
+ * @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);
+ });
+ }
+ };
+
+ Prism.hooks.add('complete', function (env) {
+ if (env.element && env.language && !env.grammar) {
+ if (env.language !== ignored_language) {
+ registerElement(env.language, env.element);
+ }
+ }
+ });
+
+}()); \ No newline at end of file