fix race condition in codemirror initialization

over slow connections, iframes don't load fast enough to be ready for code
which depends on certain features existing.

wait until they're ready, then initialize.
This commit is contained in:
ansuz
2016-01-16 07:37:00 -05:00
parent 41fe0faa04
commit 663e987345

View File

@@ -8,7 +8,7 @@ define([
'/customize/pad.js' '/customize/pad.js'
var $ = window.jQuery; var $ = window.jQuery;
var ifrw = $('#pad-iframe')[0].contentWindow; var ifrw = $('#pad-iframe')[0].contentWindow;
var CMeditor = ifrw.CodeMirror; var CMeditor;
$(function () { $(function () {
$(window).on('hashchange', function() { $(window).on('hashchange', function() {
@@ -18,32 +18,50 @@ define([
window.location.href = window.location.href + '#' + Crypto.genKey(); window.location.href = window.location.href + '#' + Crypto.genKey();
return; return;
} }
var key = Crypto.parseKey(window.location.hash.substring(1));
var editor = CMeditor.fromTextArea($('#pad-iframe').contents().find('#editor1')[0], {
lineNumbers: true,
lineWrapping: true,
autoCloseBrackets: true,
matchBrackets : true,
showTrailingSpace : true,
styleActiveLine : true,
search: true,
highlightSelectionMatches: {showToken: /\w+/},
extraKeys: {"Ctrl-Q": function(cm){ cm.foldCode(cm.getCursor()); }},
foldGutter: true,
gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
mode: "javascript"
});
editor.setValue(Messages.codeInitialState);
var rtw = var andThen = function () {
RTWiki.start(ifrw, var key = Crypto.parseKey(window.location.hash.substring(1));
Config.websocketURL, var editor = CMeditor.fromTextArea($('#pad-iframe').contents().find('#editor1')[0], {
Crypto.rand64(8), lineNumbers: true,
key.channel, lineWrapping: true,
key.cryptKey); autoCloseBrackets: true,
editor.on('change', function() { matchBrackets : true,
editor.save(); showTrailingSpace : true,
rtw.onEvent(); styleActiveLine : true,
}); search: true,
highlightSelectionMatches: {showToken: /\w+/},
extraKeys: {"Ctrl-Q": function(cm){ cm.foldCode(cm.getCursor()); }},
foldGutter: true,
gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
mode: "javascript"
});
editor.setValue(Messages.codeInitialState);
var rtw =
RTWiki.start(ifrw,
Config.websocketURL,
Crypto.rand64(8),
key.channel,
key.cryptKey);
editor.on('change', function() {
editor.save();
rtw.onEvent();
});
};
var interval = 100;
var first = function () {
if (CMeditor = ifrw.CodeMirror) {
// it exists, call your continuation
andThen();
} else {
console.log("CMeditor was not defined. Trying again in %sms", interval);
// try again in 'interval' ms
setTimeout(first, interval);
}
};
first();
}); });
}); });