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

Side by Side Diff: lib/src/prism/components/prism-core.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
« no previous file with comments | « lib/src/prism/components/prism-clike.min.js ('k') | lib/src/prism/components/prism-core.min.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 var _self = (typeof window !== 'undefined') 1 var _self = (typeof window !== 'undefined')
2 ? window // if in browser 2 ? window // if in browser
3 : ( 3 : (
4 (typeof WorkerGlobalScope !== 'undefined' && self instanceof Wor kerGlobalScope) 4 (typeof WorkerGlobalScope !== 'undefined' && self instanceof Wor kerGlobalScope)
5 ? self // if in worker 5 ? self // if in worker
6 : {} // if in node js 6 : {} // if in node js
7 ); 7 );
8 8
9 /** 9 /**
10 * Prism: Lightweight, robust, elegant syntax highlighting 10 * Prism: Lightweight, robust, elegant syntax highlighting
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 if (_.util.type(o[i]) === 'Object') { 133 if (_.util.type(o[i]) === 'Object') {
134 _.languages.DFS(o[i], callback); 134 _.languages.DFS(o[i], callback);
135 } 135 }
136 else if (_.util.type(o[i]) === 'Array') { 136 else if (_.util.type(o[i]) === 'Array') {
137 _.languages.DFS(o[i], callback, i); 137 _.languages.DFS(o[i], callback, i);
138 } 138 }
139 } 139 }
140 } 140 }
141 } 141 }
142 }, 142 },
143 143 » plugins: {},
144 »
144 highlightAll: function(async, callback) { 145 highlightAll: function(async, callback) {
145 var elements = document.querySelectorAll('code[class*="language- "], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'); 146 var elements = document.querySelectorAll('code[class*="language- "], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');
146 147
147 for (var i=0, element; element = elements[i++];) { 148 for (var i=0, element; element = elements[i++];) {
148 _.highlightElement(element, async === true, callback); 149 _.highlightElement(element, async === true, callback);
149 } 150 }
150 }, 151 },
151 152
152 highlightElement: function(element, async, callback) { 153 highlightElement: function(element, async, callback) {
153 // Find language 154 // Find language
(...skipping 11 matching lines...) Expand all
165 // Set language on the element, if not present 166 // Set language on the element, if not present
166 element.className = element.className.replace(lang, '').replace( /\s+/g, ' ') + ' language-' + language; 167 element.className = element.className.replace(lang, '').replace( /\s+/g, ' ') + ' language-' + language;
167 168
168 // Set language on the parent, for styling 169 // Set language on the parent, for styling
169 parent = element.parentNode; 170 parent = element.parentNode;
170 171
171 if (/pre/i.test(parent.nodeName)) { 172 if (/pre/i.test(parent.nodeName)) {
172 parent.className = parent.className.replace(lang, '').re place(/\s+/g, ' ') + ' language-' + language; 173 parent.className = parent.className.replace(lang, '').re place(/\s+/g, ' ') + ' language-' + language;
173 } 174 }
174 175
175 if (!grammar) {
176 return;
177 }
178
179 var code = element.textContent; 176 var code = element.textContent;
180 177
181 if(!code) {
182 return;
183 }
184
185 code = code.replace(/^(?:\r?\n|\r)/,'');
186
187 var env = { 178 var env = {
188 element: element, 179 element: element,
189 language: language, 180 language: language,
190 grammar: grammar, 181 grammar: grammar,
191 code: code 182 code: code
192 }; 183 };
193 184
185 if (!code || !grammar) {
186 _.hooks.run('complete', env);
187 return;
188 }
189
194 _.hooks.run('before-highlight', env); 190 _.hooks.run('before-highlight', env);
195 191
196 if (async && _self.Worker) { 192 if (async && _self.Worker) {
197 var worker = new Worker(_.filename); 193 var worker = new Worker(_.filename);
198 194
199 worker.onmessage = function(evt) { 195 worker.onmessage = function(evt) {
200 » » » » env.highlightedCode = Token.stringify(JSON.parse (evt.data), language); 196 » » » » env.highlightedCode = evt.data;
201 197
202 _.hooks.run('before-insert', env); 198 _.hooks.run('before-insert', env);
203 199
204 env.element.innerHTML = env.highlightedCode; 200 env.element.innerHTML = env.highlightedCode;
205 201
206 callback && callback.call(env.element); 202 callback && callback.call(env.element);
207 _.hooks.run('after-highlight', env); 203 _.hooks.run('after-highlight', env);
204 _.hooks.run('complete', env);
208 }; 205 };
209 206
210 worker.postMessage(JSON.stringify({ 207 worker.postMessage(JSON.stringify({
211 language: env.language, 208 language: env.language,
212 » » » » code: env.code 209 » » » » code: env.code,
210 » » » » immediateClose: true
213 })); 211 }));
214 } 212 }
215 else { 213 else {
216 env.highlightedCode = _.highlight(env.code, env.grammar, env.language); 214 env.highlightedCode = _.highlight(env.code, env.grammar, env.language);
217 215
218 _.hooks.run('before-insert', env); 216 _.hooks.run('before-insert', env);
219 217
220 env.element.innerHTML = env.highlightedCode; 218 env.element.innerHTML = env.highlightedCode;
221 219
222 callback && callback.call(element); 220 callback && callback.call(element);
223 221
224 _.hooks.run('after-highlight', env); 222 _.hooks.run('after-highlight', env);
223 _.hooks.run('complete', env);
225 } 224 }
226 }, 225 },
227 226
228 highlight: function (text, grammar, language) { 227 highlight: function (text, grammar, language) {
229 var tokens = _.tokenize(text, grammar); 228 var tokens = _.tokenize(text, grammar);
230 return Token.stringify(_.util.encode(tokens), language); 229 return Token.stringify(_.util.encode(tokens), language);
231 }, 230 },
232 231
233 tokenize: function(text, grammar, language) { 232 tokenize: function(text, grammar, language) {
234 var Token = _.Token; 233 var Token = _.Token;
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 if (o.alias) { 372 if (o.alias) {
374 var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.al ias]; 373 var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.al ias];
375 Array.prototype.push.apply(env.classes, aliases); 374 Array.prototype.push.apply(env.classes, aliases);
376 } 375 }
377 376
378 _.hooks.run('wrap', env); 377 _.hooks.run('wrap', env);
379 378
380 var attributes = ''; 379 var attributes = '';
381 380
382 for (var name in env.attributes) { 381 for (var name in env.attributes) {
383 » » attributes += name + '="' + (env.attributes[name] || '') + '"'; 382 » » attributes += (attributes ? ' ' : '') + name + '="' + (env.attri butes[name] || '') + '"';
384 } 383 }
385 384
386 return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attri butes + '>' + env.content + '</' + env.tag + '>'; 385 return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attri butes + '>' + env.content + '</' + env.tag + '>';
387 386
388 }; 387 };
389 388
390 if (!_self.document) { 389 if (!_self.document) {
391 if (!_self.addEventListener) { 390 if (!_self.addEventListener) {
392 // in Node.js 391 // in Node.js
393 return _self.Prism; 392 return _self.Prism;
394 } 393 }
395 // In worker 394 // In worker
396 _self.addEventListener('message', function(evt) { 395 _self.addEventListener('message', function(evt) {
397 var message = JSON.parse(evt.data), 396 var message = JSON.parse(evt.data),
398 lang = message.language, 397 lang = message.language,
399 » » code = message.code; 398 » » code = message.code,
399 » » immediateClose = message.immediateClose;
400 400
401 » » _self.postMessage(JSON.stringify(_.util.encode(_.tokenize(code, _.languages[lang])))); 401 » » _self.postMessage(_.highlight(code, _.languages[lang], lang));
402 » » _self.close(); 402 » » if (immediateClose) {
403 » » » _self.close();
404 » » }
403 }, false); 405 }, false);
404 406
405 return _self.Prism; 407 return _self.Prism;
406 } 408 }
407 409
408 // Get current script and highlight 410 // Get current script and highlight
409 var script = document.getElementsByTagName('script'); 411 var script = document.getElementsByTagName('script');
410 412
411 script = script[script.length - 1]; 413 script = script[script.length - 1];
412 414
413 if (script) { 415 if (script) {
414 _.filename = script.src; 416 _.filename = script.src;
415 417
416 if (document.addEventListener && !script.hasAttribute('data-manual')) { 418 if (document.addEventListener && !script.hasAttribute('data-manual')) {
417 document.addEventListener('DOMContentLoaded', _.highlightAll); 419 document.addEventListener('DOMContentLoaded', _.highlightAll);
418 } 420 }
419 } 421 }
420 422
421 return _self.Prism; 423 return _self.Prism;
422 424
423 })(); 425 })();
424 426
425 if (typeof module !== 'undefined' && module.exports) { 427 if (typeof module !== 'undefined' && module.exports) {
426 module.exports = Prism; 428 module.exports = Prism;
427 } 429 }
430
431 // hack for components to work correctly in node.js
432 if (typeof global !== 'undefined') {
433 global.Prism = Prism;
434 }
OLDNEW
« no previous file with comments | « lib/src/prism/components/prism-clike.min.js ('k') | lib/src/prism/components/prism-core.min.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698