Skip to content

Commit

Permalink
fix: improve promise handling
Browse files Browse the repository at this point in the history
  • Loading branch information
Andreas Gerlach committed Mar 18, 2019
1 parent b887b37 commit ab3d655
Showing 1 changed file with 28 additions and 32 deletions.
60 changes: 28 additions & 32 deletions lib/renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@ const domPurify = createDOMPurify();
/**
* [highlightCodeFragments description]
* @param {HTMLElement} domFragment [description]
* @param {Function} callback [description]
* @returns {Promise}
*/
function highlightCodeFragments(domFragment, callback) {
function highlightCodeFragments(domFragment) {
const defaultLanguage = 'text';
// set editor font family
const fontFamily = atom.config.get('editor.fontFamily');
Expand All @@ -34,6 +33,7 @@ function highlightCodeFragments(domFragment, callback) {
let codeBlock = preElement.firstElementChild != null ? preElement.firstElementChild : preElement;
let fenceName = codeBlock.getAttribute('class') ? codeBlock.getAttribute('class').replace(/^lang-/, '').replace(/^language-/, '') : defaultLanguage;
preElement.classList.add('editor-colors', `lang-${fenceName}`);

let editor = new TextEditor({readonly: true, keyboardInputEnabled: false});
let editorElement = editor.getElement();
editorElement.setUpdatedSynchronously(true);
Expand All @@ -45,7 +45,27 @@ function highlightCodeFragments(domFragment, callback) {

atom.grammars.assignLanguageMode(editor, scopeForFenceName(fenceName));
editor.setVisible(true);
promises.push(callback(editorElement, preElement));
promises.push(new Promise((resolve, reject) => {
let done = () => {
editorElement.querySelectorAll('.line:not(.dummy)').forEach((line) => {
let line2 = document.createElement('div');
line2.className = 'line';
line2.innerHTML = line.firstChild.innerHTML;
preElement.appendChild(line2);
});
editorElement.remove();
resolve();
}
const languageMode = editor.getBuffer().getLanguageMode();
if ((languageMode.fullyTokenized) || (languageMode.tree)) {
done();
}
else {
editor.onDidTokenize(() => {
done();
});
}
}));
});

return Promise.all(promises);
Expand All @@ -66,32 +86,6 @@ function internalRender(markdownText) {
return template.content.cloneNode(true);
}

function codeFragmentsHighlighted(editorElement, preElement) {
let p = new Promise((resolve, reject) => {
let done = () => {
editor.component.getNextUpdatePromise().then(() => {
editorElement.querySelectorAll('.line:not(.dummy)').forEach((line) => {
let line2 = document.createElement('div');
line2.className = 'line';
line2.innerHTML = line.firstChild.innerHTML;
preElement.appendChild(line2);
});
editorElement.remove();
resolve();
}).catch(reject);
}

let editor = editorElement.getModel();
let languageMode = editor.getBuffer().getLanguageMode();
if ((languageMode.fullyTokenized) || (languageMode.tree)) {
done();
}
else {
editor.onDidTokenize(() => done());
}
});
return p;
}

export default {
/**
Expand All @@ -106,11 +100,13 @@ export default {
document.body.appendChild(div);

let result = new Promise((resolve, reject) => {
let wait = highlightCodeFragments(div, codeFragmentsHighlighted);
wait.then(() => {
highlightCodeFragments(div).then(() => {
div.remove();
resolve(div.innerHTML);
}).catch(reject);
}).catch((err) => {
console.error(err);
reject();
});
});
return result;
}
Expand Down

0 comments on commit ab3d655

Please sign in to comment.