12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /* global marked */
- var versionCache = {};
- var currentVersion;
- onmessage = function (e) {
- if (e.data.version === currentVersion) {
- parse(e);
- } else {
- getVersion(e.data.version).then(function (text) {
- // eslint-disable-next-line no-new-func
- Function(text)();
- currentVersion = e.data.version;
- parse(e);
- });
- }
- };
- onunhandledrejection = function (e) {
- throw e.reason;
- };
- function parse(e) {
- switch (e.data.task) {
- case 'defaults':
- var defaults = marked.getDefaults();
- defaults.renderer = null;
- postMessage({
- task: e.data.task,
- defaults: defaults
- });
- break;
- case 'parse':
- var startTime = new Date();
- var lexed = marked.lexer(e.data.markdown, e.data.options);
- var lexedList = [];
- for (var i = 0; i < lexed.length; i++) {
- var lexedLine = [];
- for (var j in lexed[i]) {
- lexedLine.push(j + ':' + jsonString(lexed[i][j]));
- }
- lexedList.push('{' + lexedLine.join(', ') + '}');
- }
- var parsed = marked.parser(lexed, e.data.options);
- var endTime = new Date();
- // setTimeout(function () {
- postMessage({
- task: e.data.task,
- lexed: lexedList.join('\n'),
- parsed: parsed,
- time: endTime - startTime
- });
- // }, 10000);
- break;
- }
- }
- function jsonString(input) {
- var output = (input + '')
- .replace(/\n/g, '\\n')
- .replace(/\r/g, '\\r')
- .replace(/\t/g, '\\t')
- .replace(/\f/g, '\\f')
- .replace(/[\\"']/g, '\\$&')
- .replace(/\u0000/g, '\\0');
- return '"' + output + '"';
- };
- function getVersion(ver) {
- if (ver in versionCache) {
- return Promise.resolve(versionCache[ver]);
- }
- return fetch(ver)
- .then(function (res) { return res.text(); })
- .then(function (text) {
- versionCache[ver] = text;
- return text;
- });
- }
|