From 828e445a278e6a7035d979724faea937a1b5f76b Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 2 Sep 2012 18:32:54 +0400 Subject: [PATCH] small cleanup --- lib/ace/css/editor.css | 49 ++++++++++++++++--------------- lib/ace/mode/javascript_worker.js | 34 +++++++++++++-------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css index 9891976a..3c07a186 100644 --- a/lib/ace/css/editor.css +++ b/lib/ace/css/editor.css @@ -12,9 +12,9 @@ .ace_content { position: absolute; - box-sizing: border-box; - -moz-box-sizing: border-box; -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; cursor: text; } @@ -121,9 +121,9 @@ white-space: nowrap; height: 100%; width: 100%; - box-sizing: border-box; - -moz-box-sizing: border-box; -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; /* setting pointer-events: auto; on node under the mouse, which changes during scroll, will break mouse wheel scrolling in Safari */ pointer-events: none; @@ -190,15 +190,15 @@ .ace_marker-layer .ace_selected_word { position: absolute; z-index: 4; - box-sizing: border-box; - -moz-box-sizing: border-box; -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } .ace_line .ace_fold { - box-sizing: border-box; - -moz-box-sizing: border-box; -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; display: inline-block; height: 11px; @@ -213,9 +213,9 @@ color: transparent; border: 1px solid black; - -moz-border-radius: 2px; -webkit-border-radius: 2px; - border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; cursor: pointer; pointer-events: auto; @@ -245,10 +245,11 @@ padding: 4px; position: absolute; z-index: 300; - box-sizing: border-box; - -moz-box-sizing: border-box; -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; cursor: default; + white-space: pre-wrap; } .ace_folding-enabled > .ace_gutter-cell { @@ -256,9 +257,9 @@ } .ace_fold-widget { - box-sizing: border-box; - -moz-box-sizing: border-box; -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; margin: 0 -12px 0 1px; display: inline-block; @@ -285,17 +286,17 @@ .ace_fold-widget:hover { border: 1px solid rgba(0, 0, 0, 0.3); background-color: rgba(255, 255, 255, 0.2); - -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); - box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); + -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); + box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); } .ace_fold-widget:active { border: 1px solid rgba(0, 0, 0, 0.4); background-color: rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); - box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); + -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); + box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); } /** * Dark version for fold widgets @@ -314,9 +315,9 @@ background-color: rgba(255, 255, 255, 0.1); } .ace_dark .ace_fold-widget:active { - -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2); -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2); - box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2); + -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2); + box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2); } @@ -327,19 +328,19 @@ } .ace_fade-fold-widgets .ace_fold-widget { - -moz-transition: opacity 0.4s ease 0.05s; -webkit-transition: opacity 0.4s ease 0.05s; - -o-transition: opacity 0.4s ease 0.05s; + -moz-transition: opacity 0.4s ease 0.05s; -ms-transition: opacity 0.4s ease 0.05s; + -o-transition: opacity 0.4s ease 0.05s; transition: opacity 0.4s ease 0.05s; opacity: 0; } .ace_fade-fold-widgets:hover .ace_fold-widget { - -moz-transition: opacity 0.05s ease 0.05s; -webkit-transition: opacity 0.05s ease 0.05s; - -o-transition: opacity 0.05s ease 0.05s; + -moz-transition: opacity 0.05s ease 0.05s; -ms-transition: opacity 0.05s ease 0.05s; + -o-transition: opacity 0.05s ease 0.05s; transition: opacity 0.05s ease 0.05s; opacity:1; } diff --git a/lib/ace/mode/javascript_worker.js b/lib/ace/mode/javascript_worker.js index 25993826..937c2585 100644 --- a/lib/ace/mode/javascript_worker.js +++ b/lib/ace/mode/javascript_worker.js @@ -47,7 +47,7 @@ var errorsRe = startRegex([ "Unexpected", "Expected ", "Confusing (plus|minus)", - "{a} unterminated regular expression", + "\\{a\\} unterminated regular expression", "Unclosed ", "Unmatched ", "Unbegun comment", @@ -61,6 +61,7 @@ var infoRe = startRegex([ "Unexpected comma", "Unexpected space", "Missing radix parameter.", + "\\['\\{a\\}'\\] is better written in dot notation." ]); var JavaScriptWorker = exports.JavaScriptWorker = function(sender) { @@ -76,24 +77,40 @@ oop.inherits(JavaScriptWorker, Mirror); this.options = options || { // undef: true, // unused: true, + es5: true, + esnext: true, devel: true, browser: true, node: true, laxcomma: true, laxbreak: true, + lastsemic: true, onevar: false, passfail: false, maxerr: 100, - expr: true + expr: true, + multistr: true, + globalstrict: true }; this.doc.getValue() && this.deferredUpdate.schedule(100); }; - + this.changeOptions = function(newOptions) { oop.mixin(this.options, newOptions); this.doc.getValue() && this.deferredUpdate.schedule(100); }; + this.isValidJS = function(str) { + try { + // evaluated code can only create variables in this function + eval("throw 0;" + str); + } catch(e) { + if (e === 0) + return true; + } + return false + }; + this.onUpdate = function() { var value = this.doc.getValue(); value = value.replace(/^#!.*\n/, "\n"); @@ -105,14 +122,7 @@ oop.inherits(JavaScriptWorker, Mirror); // jshint reports many false errors // report them as error only if code is actually invalid - var maxErrorLevel = "warning"; - try { - eval("throw 0;" + value); - } catch(e) { - if (e != 0) { - maxErrorLevel = "error"; - } - } + var maxErrorLevel = this.isValidJS(value) ? "warning" : "error"; // var start = new Date(); lint(value, this.options); @@ -129,7 +139,7 @@ oop.inherits(JavaScriptWorker, Mirror); if (raw == "Missing semicolon.") { var str = error.evidence.substr(error.character); str = str.charAt(str.search(/\S/)); - if (maxErrorLevel == "error" && str && /[\w\d{([]/.test(str)) { + if (maxErrorLevel == "error" && str && /[\w\d{(['"]/.test(str)) { error.reason = 'Missing ";" before statement'; type = "error"; } else