From e664a3b73844865d5b2e85776173d60afe9d50ba Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 3 May 2012 18:02:15 +0400 Subject: [PATCH] do not allow time window with no mode set on session while loading mode --- lib/ace/edit_session.js | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index 32070ce4..b563b534 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -772,6 +772,10 @@ var EditSession = function(text, mode) { if (module) return done(module); + // set mode to text until loading is finished + if (!this.$mode) + this.$setModePlaceholder(); + fetch(function() { require([mode], done); }); @@ -799,6 +803,27 @@ var EditSession = function(text, mode) { } }; + this.$setModePlaceholder = function() { + var textModeId = "ace/mode/text" + if (!this.$modes[textModeId]) + this.$modes[textModeId] = new TextMode(); + + var tokenizer = this.$modes[textModeId].getTokenizer(); + + if (!this.bgTokenizer) { + this.bgTokenizer = new BackgroundTokenizer(tokenizer); + var _self = this; + this.bgTokenizer.addEventListener("update", function(e) { + _self._emit("tokenizerUpdate", e); + }); + } else { + this.bgTokenizer.setTokenizer(tokenizer); + } + + this.tokenRe = this.$modes[textModeId].tokenRe; + this.nonTokenRe = this.$modes[textModeId].nonTokenRe; + }; + /** * EditSession.setMode(mode) * - mode (TextMode): Set a new text mode @@ -809,6 +834,7 @@ var EditSession = function(text, mode) { this.$mode = null; this.$modeId = null; this.setMode = function(mode) { + mode = mode || "ace/mode/text"; // load on demand if (typeof mode === "string") { if (this.$modeId == mode) @@ -823,12 +849,6 @@ var EditSession = function(text, mode) { _self.setMode(module); }); return; - } else if (mode == null) { - mode = "ace/mode/text" - this.$modeId = mode; - this.$modes[mode] = this.$modes[mode] || (new TextMode()); - this.setMode(this.$modes[mode]); - return; } if (this.$mode === mode) return;