From a4df7e0be61dd93c189d9e61523c6f0ec7517c94 Mon Sep 17 00:00:00 2001 From: Giulia Alfonsi Date: Fri, 28 Mar 2014 16:44:48 +0000 Subject: [PATCH 1/6] #1339 Tern is now started with its own function and not automatically after download. --- public/js/editors/addons.js | 4 +-- public/js/editors/tern.js | 62 ++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 37 deletions(-) diff --git a/public/js/editors/addons.js b/public/js/editors/addons.js index d2f8609a..c9b80d71 100644 --- a/public/js/editors/addons.js +++ b/public/js/editors/addons.js @@ -151,8 +151,8 @@ CodeMirror.showHint && CodeMirror.TernServer; }, - done: function (cm) { - // + done: function () { + startTern(); } } }; diff --git a/public/js/editors/tern.js b/public/js/editors/tern.js index dbb05d66..7646cda9 100644 --- a/public/js/editors/tern.js +++ b/public/js/editors/tern.js @@ -1,9 +1,8 @@ (function () { 'use strict'; - /*globals $, jsbin, CodeMirror, simpleJsHint, template */ + /*globals $, jsbin, CodeMirror, template, ternDefinitions, ternBasicDefs */ - // jsbin.settings.addons.tern = true var ternServer; var ternLoaded = {}; @@ -71,54 +70,47 @@ }; var searchTernDefinition = function(htmlCode) { - if (jsbin.settings.addons.tern === true) { - for (var i = 0; i < ternDefinitions.length; i++) { - if (ternDefinitions[i].match.test(htmlCode)) { - if (ternDefinitions[i].type === 'def') { - loadTernDefinition(ternDefinitions[i].name, ternDefinitions[i].file); - } - else { - loadTernFile(ternDefinitions[i].name, ternDefinitions[i].file); - } + for (var i = 0; i < ternDefinitions.length; i++) { + if (ternDefinitions[i].match.test(htmlCode)) { + if (ternDefinitions[i].type === 'def') { + loadTernDefinition(ternDefinitions[i].name, ternDefinitions[i].file); + } + else { + loadTernFile(ternDefinitions[i].name, ternDefinitions[i].file); } } } }; // Overwrite the autocomplete function to use tern - if (jsbin.settings.addons.tern === true) { - CodeMirror.commands.autocomplete = function(cm) { - if (CodeMirror.snippets(cm) === CodeMirror.Pass) { - var pos = cm.getCursor(); - var tok = cm.getTokenAt(pos); - var indent = ''; - if (cm.options.indentWithTabs) { - indent = '\t'; - } else { - indent = new Array(cm.options.indentUnit + 1).join(' '); - } + CodeMirror.commands.autocomplete = function(cm) { + if (CodeMirror.snippets(cm) === CodeMirror.Pass) { + var pos = cm.getCursor(); + var tok = cm.getTokenAt(pos); + var indent = ''; + if (cm.options.indentWithTabs) { + indent = '\t'; + } else { + indent = new Array(cm.options.indentUnit + 1).join(' '); + } - if (tok.string === ';') { - return cm.replaceRange(indent, pos); - } - if (tok.string.trim() !== '') { - return ternServer.complete(cm); - } + if (tok.string === ';') { return cm.replaceRange(indent, pos); } - }; - } else { - // Use the simple autocompletion - CodeMirror.commands.autocomplete = simpleJsHint; - } + if (tok.string.trim() !== '') { + return ternServer.complete(cm); + } + return cm.replaceRange(indent, pos); + } + }; - if (jsbin.settings.addons.tern === true) { + window.startTern = function() { loadTern(jsbin.panels.panels.javascript.editor); searchTernDefinition(template.html); $('#library').bind('change', function () { searchTernDefinition(jsbin.panels.panels.html.getCode()); }); - } + }; })(); \ No newline at end of file From 3e727c9c2fa13b8e715989c4598f349c4bcf23d4 Mon Sep 17 00:00:00 2001 From: Giulia Alfonsi Date: Fri, 28 Mar 2014 16:45:20 +0000 Subject: [PATCH 2/6] Removed loading of external CodeMirror theme styles, they're already in the main css. --- public/js/jsbin.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/public/js/jsbin.js b/public/js/jsbin.js index f5e4597d..4ad1ba83 100644 --- a/public/js/jsbin.js +++ b/public/js/jsbin.js @@ -107,11 +107,6 @@ if (jsbin.settings.codemirror) { if (jsbin.settings.editor.theme) { $(document.documentElement).addClass('cm-s-' + jsbin.settings.editor.theme.split(' ')[0]); - var link = document.createElement('link'); - link.rel = 'stylesheet'; - link.href = jsbin['static'] + '/js/vendor/codemirror4/theme/' + jsbin.settings.editor.theme.split(' ')[0] + '.css?' + jsbin.version; - document.getElementsByTagName('head')[0].appendChild(link); - } // Add a pre-filter to all ajax requests to add a CSRF header to prevent From 07bb3f255130541e932669031e1278b8142d4b8f Mon Sep 17 00:00:00 2001 From: Giulia Alfonsi Date: Fri, 28 Mar 2014 16:53:10 +0000 Subject: [PATCH 3/6] Clean the indentation and jshint of the files --- public/js/editor-settings.js | 348 +++++++++++++++++------------------ public/js/editors/addons.js | 2 +- 2 files changed, 175 insertions(+), 175 deletions(-) diff --git a/public/js/editor-settings.js b/public/js/editor-settings.js index 3d35aa0d..29f3037d 100644 --- a/public/js/editor-settings.js +++ b/public/js/editor-settings.js @@ -1,192 +1,192 @@ (function(){ - 'use strict'; + 'use strict'; - /*globals $, CodeMirror */ + /*globals $, CodeMirror, jsbin, reloadAddons */ - // create fake jsbin object - window.jsbin = { - static: jsbin.static, - version: jsbin.version, - panels: { - panels: { - javascript: { - editor: null - }, - html: { - editor: null - } - }, - allEditors: function(fn) { - fn(jsbin.panels.panels.javascript); - } + // create fake jsbin object + window.jsbin = { + static: jsbin.static, + version: jsbin.version, + panels: { + panels: { + javascript: { + editor: null + }, + html: { + editor: null } + }, + allEditors: function(fn) { + fn(jsbin.panels.panels.javascript); + } + } + }; + + var template = { + html: null + }; + + $.browser = {}; + // work out the browser platform + var ua = navigator.userAgent; + if (ua.indexOf(' Mac ') !== -1) { + $.browser.platform = 'mac'; + } else if (/windows|win32/.test(ua)) { + $.browser.platform = 'win'; + } else if (/linux/.test(ua)) { + $.browser.platform = 'linux'; + } else { + $.browser.platform = ''; + } + + // abstract this to a function so i can easily implement the TODO below; + function getCurrentSettings(){ + // TODO do something here with a server sent object, merge it into localStorage... + // We do now want to lose sync; + return JSON.parse(localStorage.settings || '{}') || { + }; - - var template = { - html: null - }; - - $.browser = {}; - // work out the browser platform - var ua = navigator.userAgent; - if (ua.indexOf(' Mac ') !== -1) { - $.browser.platform = 'mac'; - } else if (/windows|win32/.test(ua)) { - $.browser.platform = 'win'; - } else if (/linux/.test(ua)) { - $.browser.platform = 'linux'; - } else { - $.browser.platform = ''; + } + function pick(obj, keys) { + var copy = {}; + for (var i = 0, len = keys.length; i < len; i++) { + copy[keys[i]] = obj[keys[i]]; } + return copy; + } + var settingsKeys = [ + 'indentWithTabs', + 'indentUnit', + 'theme', + 'tabSize', + 'lineWrapping', + 'lineNumbers' + ]; - // abstract this to a function so i can easily implement the TODO below; - function getCurrentSettings(){ - // TODO do something here with a server sent object, merge it into localStorage... - // We do now want to lose sync; - return JSON.parse(localStorage.settings || '{}') || { - - }; - } - function pick(obj, keys) { - var copy = {}; - for (var i = 0, len = keys.length; i < len; i++) { - copy[keys[i]] = obj[keys[i]]; - } - return copy; - } - var settingsKeys = [ - 'indentWithTabs', - 'indentUnit', - 'theme', - 'tabSize', - 'lineWrapping', - 'lineNumbers' - ]; - - var addonsKeys = [ - 'closebrackets', - 'highlight', - 'matchtags', - 'trailingspace', - 'fold', - 'vim', - 'emacs', - 'sublime', - 'tern' - ]; - var $addons = {}; + var addonsKeys = [ + 'closebrackets', + 'highlight', + 'matchtags', + 'trailingspace', + 'fold', + 'vim', + 'emacs', + 'sublime', + 'tern' + ]; + var $addons = {}; - // setup variables; - var $textarea = $('textarea'); - var currentSettings = getCurrentSettings(); - if (typeof currentSettings.editor === 'undefined') { - currentSettings.editor = {}; + // setup variables; + var $textarea = $('textarea'); + var currentSettings = getCurrentSettings(); + if (typeof currentSettings.editor === 'undefined') { + currentSettings.editor = {}; + } + if (typeof currentSettings.addons === 'undefined') { + currentSettings.addons = {}; + } + jsbin.settings = $.extend({}, currentSettings); + + var editor = window.editor = CodeMirror.fromTextArea($textarea[0], $.extend({ + mode: 'text/html' + }, currentSettings.editor)); + jsbin.panels.panels.javascript.editor = editor; + jsbin.panels.panels.html.editor = editor; + template.html = editor.getValue(); + + var $CodeMirror = $('.CodeMirror'); + + // setup font-size this has a little more work behind it. + if (currentSettings.font) { + $CodeMirror.css('font-size', currentSettings.font + 'px'); + editor.refresh(); + } + var $fontsize = $('#font-size'); + if (!$fontsize.val()) { + $fontsize.val(parseInt($CodeMirror.css('font-size'), 10)); + } + + // addons + for (var i = 0; i < addonsKeys.length; i++) { + $addons[ addonsKeys[i] ] = $('#' + addonsKeys[i]).prop('checked', currentSettings.addons[ addonsKeys[i] ] || false); + } + if ($('[name=keymap]:checked').length === 0) { + $('#defaultKeymap').prop('checked', true); + } + + // Setup the rest + var $theme = $('#theme').val(editor.getOption('theme')); + var $tabSize = $('#tabSize').val(editor.getOption('tabSize')); + var $lineWrapping = $('#lineWrapping').prop('checked', editor.getOption('lineWrapping')); + var $lineNumbers = $('#lineNumbers').prop('checked', editor.getOption('lineNumbers')); + var tabs = editor.getOption('indentWithTabs'); + var $indentWithTabs = $('#indentWithTabs').prop('checked', tabs); + $('#indentWithSpaces').prop('checked', !tabs); + var $csrf = $('#_csrf'); + + // Listeners + $('input[type="number"], input[type="text"]').on('input', saveSettings); + $(':checkbox, :radio').on('change', saveSettings); + $('select').on('change', saveSettings); + + function saveSettings() { + // First we update the codemirror instance on page + editor.setOption('lineWrapping', $lineWrapping.prop('checked')); + editor.setOption('lineNumbers', $lineNumbers.prop('checked')); + editor.setOption('indentWithTabs', $indentWithTabs.prop('checked')); + editor.setOption('tabSize', $tabSize.val()); + editor.setOption('theme', $theme.val()); + $CodeMirror.css('font-size', $fontsize.val()+'px'); + editor.refresh(); + + // Merge all our settings together + var localStorageSettings = JSON.parse(localStorage.settings || '{}'); + var codemirrorSettings = pick(editor.options, settingsKeys); + var newSettingsEditor = $.extend(localStorageSettings.editor, codemirrorSettings); + + var addonsSettings = {}; + for (var i = 0; i < addonsKeys.length; i++) { + addonsSettings[ addonsKeys[i] ] = $addons[ addonsKeys[i] ].prop('checked'); } - if (typeof currentSettings.addons === 'undefined') { - currentSettings.addons = {}; - } - jsbin.settings = $.extend({}, currentSettings); + var newSettingsAddons = $.extend(localStorageSettings.addons, addonsSettings); - var editor = window.editor = CodeMirror.fromTextArea($textarea[0], $.extend({ - mode: 'text/html' - }, currentSettings.editor)); + // Save locally + localStorageSettings.editor = newSettingsEditor; + localStorageSettings.font = $fontsize.val(); + localStorageSettings.addons = newSettingsAddons; + localStorage.settings = JSON.stringify(localStorageSettings); + $.extend(jsbin.settings.addons, newSettingsAddons); + + // destroy and recreate CodeMirror and load the addons + editor.toTextArea(); + editor = CodeMirror.fromTextArea($textarea[0], $.extend({ + mode: 'text/html' + }, newSettingsEditor)); jsbin.panels.panels.javascript.editor = editor; jsbin.panels.panels.html.editor = editor; template.html = editor.getValue(); + $CodeMirror = $('.CodeMirror'); + $CodeMirror.css('font-size', $fontsize.val()+'px'); + editor.refresh(); + reloadAddons(); - var $CodeMirror = $('.CodeMirror'); + // Save on server + $.ajax({ + type: 'POST', + dataType: 'json', + data: { + settings: JSON.stringify(localStorageSettings), + _csrf: $csrf.val() + }, + success: function() { + // console.log('success'); + }, + error: function() { + // console.log('there was an error saving'); + } + }); - // setup font-size this has a little more work behind it. - if (currentSettings.font) { - $CodeMirror.css('font-size', currentSettings.font + 'px'); - editor.refresh(); - } - var $fontsize = $('#font-size'); - if (!$fontsize.val()) { - $fontsize.val(parseInt($CodeMirror.css('font-size'))); - } - - // addons - for (var i = 0; i < addonsKeys.length; i++) { - $addons[ addonsKeys[i] ] = $('#' + addonsKeys[i]).prop('checked', currentSettings.addons[ addonsKeys[i] ] || false); - } - if ($('[name=keymap]:checked').length === 0) { - $('#defaultKeymap').prop('checked', true); - } - - // Setup the rest - var $theme = $('#theme').val(editor.getOption('theme')); - var $tabSize = $('#tabSize').val(editor.getOption('tabSize')); - var $lineWrapping = $('#lineWrapping').prop('checked', editor.getOption('lineWrapping')); - var $lineNumbers = $('#lineNumbers').prop('checked', editor.getOption('lineNumbers')); - var tabs = editor.getOption('indentWithTabs'); - var $indentWithTabs = $('#indentWithTabs').prop('checked', tabs); - $('#indentWithSpaces').prop('checked', !tabs); - var $csrf = $('#_csrf'); - - // Listeners - $('input[type="number"], input[type="text"]').on('input', saveSettings); - $(':checkbox, :radio').on('change', saveSettings); - $('select').on('change', saveSettings); - - function saveSettings() { - // First we update the codemirror instance on page - editor.setOption('lineWrapping', $lineWrapping.prop('checked')); - editor.setOption('lineNumbers', $lineNumbers.prop('checked')); - editor.setOption('indentWithTabs', $indentWithTabs.prop('checked')); - editor.setOption('tabSize', $tabSize.val()); - editor.setOption('theme', $theme.val()); - $CodeMirror.css('font-size', $fontsize.val()+'px'); - editor.refresh(); - - // Merge all our settings together - var localStorageSettings = JSON.parse(localStorage.settings || '{}'); - var codemirrorSettings = pick(editor.options, settingsKeys); - var newSettingsEditor = $.extend(localStorageSettings.editor, codemirrorSettings); - - var addonsSettings = {}; - for (var i = 0; i < addonsKeys.length; i++) { - addonsSettings[ addonsKeys[i] ] = $addons[ addonsKeys[i] ].prop('checked'); - } - var newSettingsAddons = $.extend(localStorageSettings.addons, addonsSettings); - - // Save locally - localStorageSettings.editor = newSettingsEditor; - localStorageSettings.font = $fontsize.val(); - localStorageSettings.addons = newSettingsAddons; - localStorage.settings = JSON.stringify(localStorageSettings); - $.extend(jsbin.settings.addons, newSettingsAddons); - - // destroy and recreate CodeMirror and load the addons - editor.toTextArea(); - editor = CodeMirror.fromTextArea($textarea[0], $.extend({ - mode: 'text/html' - }, newSettingsEditor)); - jsbin.panels.panels.javascript.editor = editor; - jsbin.panels.panels.html.editor = editor; - template.html = editor.getValue(); - $CodeMirror = $('.CodeMirror'); - $CodeMirror.css('font-size', $fontsize.val()+'px'); - editor.refresh(); - reloadAddons(); - - // Save on server - $.ajax({ - type: 'POST', - dataType: 'json', - data: { - settings: JSON.stringify(localStorageSettings), - _csrf: $csrf.val() - }, - success: function() { - // console.log('success'); - }, - error: function() { - // console.log('there was an error saving'); - } - }); - - } + } })(); \ No newline at end of file diff --git a/public/js/editors/addons.js b/public/js/editors/addons.js index c9b80d71..8fcf8dfc 100644 --- a/public/js/editors/addons.js +++ b/public/js/editors/addons.js @@ -1,6 +1,6 @@ (function () { 'use strict'; - /*globals $, jsbin, CodeMirror*/ + /*globals $, jsbin, CodeMirror, startTern*/ var defaults = { closebrackets: true, From 068aeb87da36bb08d6ef078bac17a786a0608e41 Mon Sep 17 00:00:00 2001 From: Giulia Alfonsi Date: Fri, 28 Mar 2014 17:29:03 +0000 Subject: [PATCH 4/6] Better Tern loading --- public/js/editor-settings.js | 14 ++++++++++---- public/js/editors/addons.js | 16 +++++++++++----- public/js/editors/tern.js | 2 +- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/public/js/editor-settings.js b/public/js/editor-settings.js index 29f3037d..b3e7e73f 100644 --- a/public/js/editor-settings.js +++ b/public/js/editor-settings.js @@ -22,7 +22,7 @@ } }; - var template = { + window.template = { html: null }; @@ -93,7 +93,7 @@ }, currentSettings.editor)); jsbin.panels.panels.javascript.editor = editor; jsbin.panels.panels.html.editor = editor; - template.html = editor.getValue(); + window.template.html = editor.getValue(); var $CodeMirror = $('.CodeMirror'); @@ -165,11 +165,17 @@ }, newSettingsEditor)); jsbin.panels.panels.javascript.editor = editor; jsbin.panels.panels.html.editor = editor; - template.html = editor.getValue(); + window.template.html = editor.getValue(); $CodeMirror = $('.CodeMirror'); $CodeMirror.css('font-size', $fontsize.val()+'px'); editor.refresh(); - reloadAddons(); + // Do not load Tern files + var tempAddonsKeys = addonsKeys.slice(0); + var tempAddonsKeysTern = tempAddonsKeys.indexOf('tern'); + if (tempAddonsKeysTern !== -1) { + tempAddonsKeys.splice(tempAddonsKeysTern, 1); + } + reloadAddons(tempAddonsKeys); // Save on server $.ajax({ diff --git a/public/js/editors/addons.js b/public/js/editors/addons.js index 8fcf8dfc..053980fc 100644 --- a/public/js/editors/addons.js +++ b/public/js/editors/addons.js @@ -1,6 +1,6 @@ (function () { 'use strict'; - /*globals $, jsbin, CodeMirror, startTern*/ + /*globals $, jsbin, CodeMirror*/ var defaults = { closebrackets: true, @@ -149,10 +149,11 @@ test: function () { return jsbin.panels.panels.javascript.editor.openDialog && CodeMirror.showHint && - CodeMirror.TernServer; + CodeMirror.TernServer && + CodeMirror.startTern; }, done: function () { - startTern(); + CodeMirror.startTern(); } } }; @@ -238,8 +239,13 @@ options.forEach(loadAddon); // External method to realod all the addons - window.reloadAddons = function() { - options.forEach(loadAddon); + window.reloadAddons = function(arr) { + if (arr) { + arr.forEach(loadAddon); + } + else { + options.forEach(loadAddon); + } }; })(); \ No newline at end of file diff --git a/public/js/editors/tern.js b/public/js/editors/tern.js index 7646cda9..8739c4fa 100644 --- a/public/js/editors/tern.js +++ b/public/js/editors/tern.js @@ -104,7 +104,7 @@ } }; - window.startTern = function() { + CodeMirror.startTern = function() { loadTern(jsbin.panels.panels.javascript.editor); searchTernDefinition(template.html); From fcbe1704fd25bb1e03b007955e2f5c415f03b19d Mon Sep 17 00:00:00 2001 From: Giulia Alfonsi Date: Mon, 31 Mar 2014 17:29:25 +0100 Subject: [PATCH 5/6] Little tweaks --- public/js/editor-settings.js | 23 ++++++++++++++--------- public/js/editors/addons.js | 3 +-- public/js/editors/tern.js | 3 +-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/public/js/editor-settings.js b/public/js/editor-settings.js index b3e7e73f..c9473280 100644 --- a/public/js/editor-settings.js +++ b/public/js/editor-settings.js @@ -4,9 +4,7 @@ /*globals $, CodeMirror, jsbin, reloadAddons */ // create fake jsbin object - window.jsbin = { - static: jsbin.static, - version: jsbin.version, + $.extend(jsbin, { panels: { panels: { javascript: { @@ -20,12 +18,15 @@ fn(jsbin.panels.panels.javascript); } } - }; + }); + // create fake template object, used by Tern to search in the html content + // for javascript definitions to load window.template = { html: null }; + // needed for the keymaps $.browser = {}; // work out the browser platform var ua = navigator.userAgent; @@ -80,10 +81,10 @@ // setup variables; var $textarea = $('textarea'); var currentSettings = getCurrentSettings(); - if (typeof currentSettings.editor === 'undefined') { + if (currentSettings.editor === undefined) { currentSettings.editor = {}; } - if (typeof currentSettings.addons === 'undefined') { + if (currentSettings.addons === undefined) { currentSettings.addons = {}; } jsbin.settings = $.extend({}, currentSettings); @@ -186,10 +187,14 @@ _csrf: $csrf.val() }, success: function() { - // console.log('success'); + if (console && console.log) { + console.log('Success on saving settings'); + } }, - error: function() { - // console.log('there was an error saving'); + error: function(xhr, status) { + if (console && console.log) { + console.log('Error: ' + status); + } } }); diff --git a/public/js/editors/addons.js b/public/js/editors/addons.js index 053980fc..3238e28a 100644 --- a/public/js/editors/addons.js +++ b/public/js/editors/addons.js @@ -242,8 +242,7 @@ window.reloadAddons = function(arr) { if (arr) { arr.forEach(loadAddon); - } - else { + } else { options.forEach(loadAddon); } }; diff --git a/public/js/editors/tern.js b/public/js/editors/tern.js index 8739c4fa..cbac223c 100644 --- a/public/js/editors/tern.js +++ b/public/js/editors/tern.js @@ -74,8 +74,7 @@ if (ternDefinitions[i].match.test(htmlCode)) { if (ternDefinitions[i].type === 'def') { loadTernDefinition(ternDefinitions[i].name, ternDefinitions[i].file); - } - else { + } else { loadTernFile(ternDefinitions[i].name, ternDefinitions[i].file); } } From ec472312dfd35877dcc543f89299b63ca59d1f84 Mon Sep 17 00:00:00 2001 From: Giulia Alfonsi Date: Tue, 1 Apr 2014 11:25:00 +0100 Subject: [PATCH 6/6] Moved specific css files outside main css --- public/css/style.css | 175 ++---------------------------------- public/js/editors/addons.js | 3 + 2 files changed, 8 insertions(+), 170 deletions(-) diff --git a/public/css/style.css b/public/css/style.css index 41340624..4ce8a774 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -275,171 +275,6 @@ div.CodeMirror-cursors { } } -/* Addon: codemirror/addon/hint/show-hint.css - ========================================================================== */ -.CodeMirror-hints { - position: absolute; - z-index: 10; - overflow: hidden; - list-style: none; - - margin: 0; - padding: 2px; - - -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); - -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); - box-shadow: 2px 3px 5px rgba(0,0,0,.2); - border-radius: 3px; - border: 1px solid silver; - - background: white; - font-size: 90%; - font-family: monospace; - - max-height: 20em; - overflow-y: auto; -} - -.CodeMirror-hint { - margin: 0; - padding: 0 4px; - border-radius: 2px; - max-width: 19em; - overflow: hidden; - white-space: pre; - color: black; - cursor: pointer; -} - -.CodeMirror-hint-active { - background: #08f; - color: white; -} - -/* codemirror/addon/dialog/dialog.css */ -/* Addon: codemirror/addon/hint/show-hint.css - ========================================================================== */ -.CodeMirror-dialog { - position: absolute; - left: 0; right: 0; - background: white; - z-index: 15; - padding: .1em .8em; - overflow: hidden; - color: #333; -} - -.CodeMirror-dialog-top { - border-bottom: 1px solid #eee; - top: 0; -} - -.CodeMirror-dialog-bottom { - border-top: 1px solid #eee; - bottom: 0; -} - -.CodeMirror-dialog input { - border: none; - outline: none; - background: transparent; - width: 20em; - color: inherit; - font-family: monospace; -} - -.CodeMirror-dialog button { - font-size: 70%; -} - -/* Addon: codemirror/addon/tern/tern.css - ========================================================================== */ -.CodeMirror-Tern-completion { - padding-left: 22px; - position: relative; -} -.CodeMirror-Tern-completion:before { - position: absolute; - left: 2px; - bottom: 2px; - border-radius: 50%; - font-size: 12px; - font-weight: bold; - height: 15px; - width: 15px; - line-height: 16px; - text-align: center; - color: white; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.CodeMirror-Tern-completion-unknown:before { - content: "?"; - background: #4bb; -} -.CodeMirror-Tern-completion-object:before { - content: "O"; - background: #77c; -} -.CodeMirror-Tern-completion-fn:before { - content: "F"; - background: #7c7; -} -.CodeMirror-Tern-completion-array:before { - content: "A"; - background: #c66; -} -.CodeMirror-Tern-completion-number:before { - content: "1"; - background: #999; -} -.CodeMirror-Tern-completion-string:before { - content: "S"; - background: #999; -} -.CodeMirror-Tern-completion-bool:before { - content: "B"; - background: #999; -} - -.CodeMirror-Tern-completion-guess { - color: #999; -} - -.CodeMirror-Tern-tooltip { - border: 1px solid silver; - border-radius: 3px; - color: #444; - padding: 2px 5px; - font-size: 90%; - font-family: monospace; - background-color: white; - white-space: pre-wrap; - - max-width: 40em; - position: absolute; - z-index: 10; - -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); - -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); - box-shadow: 2px 3px 5px rgba(0,0,0,.2); - - transition: opacity 1s; - -moz-transition: opacity 1s; - -webkit-transition: opacity 1s; - -o-transition: opacity 1s; - -ms-transition: opacity 1s; -} - -.CodeMirror-Tern-hint-doc { - max-width: 25em; -} - -.CodeMirror-Tern-fname { color: black; } -.CodeMirror-Tern-farg { color: #70a; } -.CodeMirror-Tern-farg-current { text-decoration: underline; } -.CodeMirror-Tern-type { color: #07c; } -.CodeMirror-Tern-fhint-guess { opacity: .7; } - /* CodeMirror themes */ @@ -3081,8 +2916,8 @@ input { padding-left: 0; } -.CodeMirror-Tern-tooltip, -.CodeMirror-hints { +.editbox .CodeMirror-Tern-tooltip, +.editbox .CodeMirror-hints { border: 1px solid #aaa; border: 1px solid rgb(191, 191, 191); border: 1px solid hsl(0, 0%, 75%); @@ -3093,14 +2928,14 @@ input { font-family: SourceCodeProRegular, Menlo, Monaco, consolas, monospace; font-size: 100%; } -.CodeMirror-Tern-tooltip { +.editbox .CodeMirror-Tern-tooltip { padding-top: 5px; } -.CodeMirror-hint { +.editbox .CodeMirror-hint { font-size: 1.1em; line-height: 1.4em; } -.CodeMirror-Tern-completion:before { +.editbox .CodeMirror-Tern-completion:before { bottom: auto; top: 1px; } diff --git a/public/js/editors/addons.js b/public/js/editors/addons.js index 3238e28a..72e4d4fa 100644 --- a/public/js/editors/addons.js +++ b/public/js/editors/addons.js @@ -130,6 +130,9 @@ }, tern: { url: [ + '/js/vendor/codemirror4/addon/dialog/dialog.css', + '/js/vendor/codemirror4/addon/hint/show-hint.css', + '/js/vendor/codemirror4/addon/tern/tern.css', '/js/vendor/codemirror4/addon/hint/show-hint.js', '/js/vendor/codemirror4/addon/dialog/dialog.js', '/js/vendor/cm_addons/tern.js',