Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(584)

Side by Side Diff: lib/src/prism/plugins/autoloader/prism-autoloader.js

Issue 1418513006: update elements and fix some bugs (Closed) Base URL: git@github.com:dart-lang/polymer_elements.git@master
Patch Set: code review updates Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 (function () {
2 if (typeof self === 'undefined' || !self.Prism || !self.document || !doc ument.createElement) {
3 return;
4 }
5
6 // The dependencies map is built automatically with gulp
7 var lang_dependencies = /*languages_placeholder[*/{"javascript":"clike", "actionscript":"javascript","aspnet":"markup","bison":"c","c":"clike","csharp":" clike","cpp":"c","coffeescript":"javascript","crystal":"ruby","css-extras":"css" ,"d":"clike","dart":"clike","fsharp":"clike","glsl":"clike","go":"clike","groovy ":"clike","haml":"ruby","handlebars":"markup","jade":"javascript","java":"clike" ,"less":"css","markdown":"markup","nginx":"clike","objectivec":"c","php":"clike" ,"php-extras":"php","processing":"clike","qore":"clike","jsx":["markup","javascr ipt"],"ruby":"clike","sass":"css","scss":"css","scala":"java","smarty":"markup", "swift":"clike","textile":"markup","twig":"markup","typescript":"javascript","wi ki":"markup"}/*]*/;
8
9 var lang_data = {};
10
11 var config = Prism.plugins.autoloader = {
12 languages_path: 'components/',
13 use_minified: true
14 };
15
16 /**
17 * Lazy loads an external script
18 * @param {string} src
19 * @param {function=} success
20 * @param {function=} error
21 */
22 var script = function (src, success, error) {
23 var s = document.createElement('script');
24 s.src = src;
25 s.async = true;
26 s.onload = function() {
27 document.body.removeChild(s);
28 success && success();
29 };
30 s.onerror = function() {
31 document.body.removeChild(s);
32 error && error();
33 };
34 document.body.appendChild(s);
35 };
36
37 /**
38 * Returns the path to a grammar, using the language_path and use_minifi ed config keys.
39 * @param {string} lang
40 * @returns {string}
41 */
42 var getLanguagePath = function (lang) {
43 return config.languages_path +
44 'prism-' + lang
45 + (config.use_minified ? '.min' : '') + '.js'
46 };
47
48 /**
49 * Tries to load a grammar and
50 * highlight again the given element once loaded.
51 * @param {string} lang
52 * @param {HTMLElement} elt
53 */
54 var registerElement = function (lang, elt) {
55 var data = lang_data[lang];
56 if (!data) {
57 data = lang_data[lang] = {};
58 }
59
60 // Look for additional dependencies defined on the <code> or <pr e> tags
61 var deps = elt.getAttribute('data-dependencies');
62 if (!deps && elt.parentNode && elt.parentNode.tagName.toLowerCas e() === 'pre') {
63 deps = elt.parentNode.getAttribute('data-dependencies');
64 }
65
66 if (deps) {
67 deps = deps.split(/\s*,\s*/g);
68 } else {
69 deps = [];
70 }
71
72 loadLanguages(deps, function () {
73 loadLanguage(lang, function () {
74 Prism.highlightElement(elt);
75 });
76 });
77 };
78
79 /**
80 * Sequentially loads an array of grammars.
81 * @param {string[]|string} langs
82 * @param {function=} success
83 * @param {function=} error
84 */
85 var loadLanguages = function (langs, success, error) {
86 if (typeof langs === 'string') {
87 langs = [langs];
88 }
89 var i = 0;
90 var l = langs.length;
91 var f = function () {
92 if (i < l) {
93 loadLanguage(langs[i], function () {
94 i++;
95 f();
96 }, function () {
97 error && error(langs[i]);
98 });
99 } else if (i === l) {
100 success && success(langs);
101 }
102 };
103 f();
104 };
105
106 /**
107 * Load a grammar with its dependencies
108 * @param {string} lang
109 * @param {function=} success
110 * @param {function=} error
111 */
112 var loadLanguage = function (lang, success, error) {
113 var load = function () {
114 var force = false;
115 // Do we want to force reload the grammar?
116 if (lang.indexOf('!') >= 0) {
117 force = true;
118 lang = lang.replace('!', '');
119 }
120
121 var data = lang_data[lang];
122 if (!data) {
123 data = lang_data[lang] = {};
124 }
125 if (success) {
126 if (!data.success_callbacks) {
127 data.success_callbacks = [];
128 }
129 data.success_callbacks.push(success);
130 }
131 if (error) {
132 if (!data.error_callbacks) {
133 data.error_callbacks = [];
134 }
135 data.error_callbacks.push(error);
136 }
137
138 if (!force && Prism.languages[lang]) {
139 languageSuccess(lang);
140 } else if (!force && data.error) {
141 languageError(lang);
142 } else if (force || !data.loading) {
143 data.loading = true;
144 var src = getLanguagePath(lang);
145 script(src, function () {
146 data.loading = false;
147 languageSuccess(lang);
148
149 }, function () {
150 data.loading = false;
151 data.error = true;
152 languageError(lang);
153 });
154 }
155 };
156 var dependencies = lang_dependencies[lang];
157 if(dependencies && dependencies.length) {
158 loadLanguages(dependencies, load);
159 } else {
160 load();
161 }
162 };
163
164 /**
165 * Runs all success callbacks for this language.
166 * @param {string} lang
167 */
168 var languageSuccess = function (lang) {
169 if (lang_data[lang] && lang_data[lang].success_callbacks && lang _data[lang].success_callbacks.length) {
170 lang_data[lang].success_callbacks.forEach(function (f) {
171 f(lang);
172 });
173 }
174 };
175
176 /**
177 * Runs all error callbacks for this language.
178 * @param {string} lang
179 */
180 var languageError = function (lang) {
181 if (lang_data[lang] && lang_data[lang].error_callbacks && lang_d ata[lang].error_callbacks.length) {
182 lang_data[lang].error_callbacks.forEach(function (f) {
183 f(lang);
184 });
185 }
186 };
187
188 Prism.hooks.add('complete', function (env) {
189 if (env.element && env.language && !env.grammar) {
190 registerElement(env.language, env.element);
191 }
192 });
193
194 }());
OLDNEW
« no previous file with comments | « lib/src/prism/plugins/autolinker/prism-autolinker.min.js ('k') | lib/src/prism/plugins/autoloader/prism-autoloader.min.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698