cryptpad/www/code/main.js
ansuz 663e987345 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.
2016-01-16 07:37:00 -05:00

68 lines
2.3 KiB
JavaScript

define([
'/api/config?cb=' + Math.random().toString(16).substring(2),
'/code/rtwiki.js',
'/common/messages.js',
'/common/crypto.js',
'/bower_components/jquery/dist/jquery.min.js'
], function (Config, RTWiki, Messages, Crypto) {
'/customize/pad.js'
var $ = window.jQuery;
var ifrw = $('#pad-iframe')[0].contentWindow;
var CMeditor;
$(function () {
$(window).on('hashchange', function() {
window.location.reload();
});
if (window.location.href.indexOf('#') === -1) {
window.location.href = window.location.href + '#' + Crypto.genKey();
return;
}
var andThen = function () {
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 =
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();
});
});