Refactoring rendering code to allow the loader to show

The loader is mostly an easter egg for people who like to try rendering
that enormous email-matching regexp from the Mail::RFC822::Address perl
module
This commit is contained in:
Jeff Avallone 2014-12-07 18:19:00 -05:00
parent e99c284216
commit 52a0863449

View File

@ -69,7 +69,7 @@ export default class Regexper {
updateLinks() { updateLinks() {
var blob, url; var blob, url;
blob = new Blob([svg.outerHTML], { type: 'image/svg+xml' }); blob = new Blob([this.svg.outerHTML], { type: 'image/svg+xml' });
url = URL.createObjectURL(blob); url = URL.createObjectURL(blob);
this.download.setAttribute('href', url); this.download.setAttribute('href', url);
@ -77,15 +77,27 @@ export default class Regexper {
} }
renderSvg(snap, expression) { renderSvg(snap, expression) {
var result; var deferred = Q.defer(),
result;
snap.selectAll('g').remove(); snap.selectAll('g').remove();
setTimeout(() => {
try {
result = parser.parse(expression); result = parser.parse(expression);
}
catch(e) {
deferred.reject(e);
}
if (result) {
result.container = snap.group(); result.container = snap.group();
result.render(); result.render();
deferred.resolve(result);
}
});
return result; return deferred.promise;
} }
positionSvg(snap, parsed) { positionSvg(snap, parsed) {
@ -104,15 +116,9 @@ export default class Regexper {
renderRegexp(expression) { renderRegexp(expression) {
var padding = this.padding, var padding = this.padding,
snap = Snap(this.svg), snap = Snap(this.svg);
promise;
promise = Q.promise(((resolve, reject, notify) => { return this.renderSvg(snap, expression)
resolve(this.renderSvg(snap, expression)); .then(this.positionSvg.bind(this, snap));
}).bind(this));
promise.then(this.positionSvg.bind(this, snap));
return promise;
} }
} }