mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-22 10:55:19 -04:00
Merge remote-tracking branch 'upstream/master' into feature/upscript
This commit is contained in:
commit
b1f139aaa3
117 changed files with 1024 additions and 1185 deletions
.zedstateinitialize.coffee
app
assets
javascripts
lib/ace
ace.jsext-beautify.jsext-chromevox.jsext-elastic_tabstops_lite.jsext-emmet.jsext-error_marker.jsext-keybinding_menu.jsext-language_tools.jsext-linking.jsext-modelist.jsext-old_ie.jsext-prompt.jsext-searchbox.jsext-settings_menu.jsext-spellcheck.jsext-split.jsext-static_highlight.jsext-statusbar.jsext-textarea.jsext-themelist.jsext-whitespace.jskeybinding-emacs.jskeybinding-vim.jsmode-clojure.jsmode-coffee.jsmode-javascript.jsmode-lua.jsmode-markdown.jsmode-plain_text.jsmode-python.jsmode-ruby.js
main.htmlsnippets
theme-textmate.jsworker-coffee.jsworker-css.jsworker-html.jsworker-javascript.jsworker-json.jsworker-lua.jsworker-php.jsworker-xquery.jslib
Angel.coffeeGod.coffeeRouter.coffeerequireUtils.coffee
services
facebook.coffeefilepicker.coffeegoogle.coffeelinkedin.coffeeolark.coffeesegmentio.coffeetwitter.coffee
simulator
world
locale
models
schemas
styles
templates
treema-ext.coffeeviews
1
.zedstate
Normal file
1
.zedstate
Normal file
|
@ -0,0 +1 @@
|
|||
{"split":"preview-2","session.current":["/app/styles/play/level/tome/spell.sass"],"session.open":{"/app/styles/play/level/tome/spell.sass":{"scrollTop":0,"scrollLeft":0,"selection":{"start":{"row":0,"column":0},"end":{"row":0,"column":0}},"lastUse":1402419134780,"undo":[],"redo":[]}},"window":{"width":1680,"height":1024,"top":22,"left":0}}
|
|
@ -160,12 +160,7 @@
|
|||
*
|
||||
* Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded.
|
||||
*/
|
||||
var currentWindowOnload = window.onload;
|
||||
|
||||
window.onload = function() {
|
||||
if (currentWindowOnload) {
|
||||
currentWindowOnload();
|
||||
}
|
||||
window.runJasmine = function() {
|
||||
htmlReporter.initialize();
|
||||
env.execute();
|
||||
};
|
||||
|
|
|
@ -235,6 +235,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
this.at = function(index) {
|
||||
return requests[index];
|
||||
};
|
||||
|
||||
this.all = function() {
|
||||
return requests.slice(0);
|
||||
};
|
||||
|
||||
this.filter = function(url_to_match) {
|
||||
if (requests.length == 0) return [];
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Helper for running tests through Karma.
|
||||
// Hooks into the test view logic for running tests.
|
||||
|
||||
TestView = require('views/test');
|
||||
require('initialize');
|
||||
TestView = require('views/TestView');
|
||||
TestView.runTests();
|
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/ext-beautify.js
Normal file
1
app/assets/lib/ace/ext-beautify.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/ext/beautify",["require","exports","module","ace/token_iterator","ace/ext/beautify/php_rules"],function(e,t,n){var r=e("ace/token_iterator").TokenIterator,i=e("./beautify/php_rules").transform;t.beautify=function(e){var t=new r(e,0,0),n=t.getCurrentToken(),s=e.$modeId.split("/").pop(),o=i(t,s);e.doc.setValue(o)},t.commands=[{name:"beautify",exec:function(e){t.beautify(e.session)},bindKey:"Ctrl-Shift-B"}]}),ace.define("ace/ext/beautify/php_rules",["require","exports","module","ace/token_iterator"],function(e,t,n){var r=e("ace/token_iterator").TokenIterator;t.newLines=[{type:"support.php_tag",value:"<?php"},{type:"support.php_tag",value:"<?"},{type:"support.php_tag",value:"?>"},{type:"paren.lparen",value:"{",indent:!0},{type:"paren.rparen",breakBefore:!0,value:"}",indent:!1},{type:"paren.rparen",breakBefore:!0,value:"})",indent:!1,dontBreak:!0},{type:"comment"},{type:"text",value:";"},{type:"text",value:":",context:"php"},{type:"keyword",value:"case",indent:!0,dontBreak:!0},{type:"keyword",value:"default",indent:!0,dontBreak:!0},{type:"keyword",value:"break",indent:!1,dontBreak:!0},{type:"punctuation.doctype.end",value:">"},{type:"meta.tag.punctuation.end",value:">"},{type:"meta.tag.punctuation.begin",value:"<",blockTag:!0,indent:!0,dontBreak:!0},{type:"meta.tag.punctuation.begin",value:"</",indent:!1,breakBefore:!0,dontBreak:!0},{type:"punctuation.operator",value:";"}],t.spaces=[{type:"xml-pe",prepend:!0},{type:"entity.other.attribute-name",prepend:!0},{type:"storage.type",value:"var",append:!0},{type:"storage.type",value:"function",append:!0},{type:"keyword.operator",value:"="},{type:"keyword",value:"as",prepend:!0,append:!0},{type:"keyword",value:"function",append:!0},{type:"support.function",next:/[^\(]/,append:!0},{type:"keyword",value:"or",append:!0,prepend:!0},{type:"keyword",value:"and",append:!0,prepend:!0},{type:"keyword",value:"case",append:!0},{type:"keyword.operator",value:"||",append:!0,prepend:!0},{type:"keyword.operator",value:"&&",append:!0,prepend:!0}],t.singleTags=["!doctype","area","base","br","hr","input","img","link","meta"],t.transform=function(e,n,r){var i=e.getCurrentToken(),s=t.newLines,o=t.spaces,u=t.singleTags,a="",f=0,l=!1,c,h,p={},d,v={},m=!1,g="";while(i!==null){console.log(i);if(!i){i=e.stepForward();continue}i.type=="support.php_tag"&&i.value!="?>"?r="php":i.type=="support.php_tag"&&i.value=="?>"?r="html":i.type=="meta.tag.name.style"&&r!="css"?r="css":i.type=="meta.tag.name.style"&&r=="css"?r="html":i.type=="meta.tag.name.script"&&r!="js"?r="js":i.type=="meta.tag.name.script"&&r=="js"&&(r="html"),v=e.stepForward(),v&&v.type.indexOf("meta.tag.name")==0&&(d=v.value),p.type=="support.php_tag"&&p.value=="<?="&&(l=!0),i.type=="meta.tag.name"&&(i.value=i.value.toLowerCase()),i.type=="text"&&(i.value=i.value.trim());if(!i.value){i=v;continue}g=i.value;for(var y in o)i.type==o[y].type&&(!o[y].value||i.value==o[y].value)&&v&&(!o[y].next||o[y].next.test(v.value))&&(o[y].prepend&&(g=" "+i.value),o[y].append&&(g+=" "));i.type.indexOf("meta.tag.name")==0&&(c=i.value),m=!1;for(y in s)if(i.type==s[y].type&&(!s[y].value||i.value==s[y].value)&&(!s[y].blockTag||u.indexOf(d)===-1)&&(!s[y].context||s[y].context===r)){s[y].indent===!1&&f--;if(s[y].breakBefore&&(!s[y].prev||s[y].prev.test(p.value))){a+="\n",m=!0;for(y=0;y<f;y++)a+=" "}break}if(l===!1)for(y in s)if(p.type==s[y].type&&(!s[y].value||p.value==s[y].value)&&(!s[y].blockTag||u.indexOf(c)===-1)&&(!s[y].context||s[y].context===r)){s[y].indent===!0&&f++;if(!s[y].dontBreak&&!m){a+="\n";for(y=0;y<f;y++)a+=" "}break}a+=g,p.type=="support.php_tag"&&p.value=="?>"&&(l=!1),h=c,p=i,i=v;if(i===null)break}return a}}),function(){ace.require(["ace/ext/beautify"],function(){})}()
|
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/elastic_tabstops_lite",["require","exports","module","ace/editor","ace/config"],function(e,t,n){var r=function(e){this.$editor=e;var t=this,n=[],r=!1;this.onAfterExec=function(){r=!1,t.processRows(n),n=[]},this.onExec=function(){r=!0},this.onChange=function(e){var t=e.data.range;r&&(n.indexOf(t.start.row)==-1&&n.push(t.start.row),t.end.row!=t.start.row&&n.push(t.end.row))}};(function(){this.processRows=function(e){this.$inChange=!0;var t=[];for(var n=0,r=e.length;n<r;n++){var i=e[n];if(t.indexOf(i)>-1)continue;var s=this.$findCellWidthsForBlock(i),o=this.$setBlockCellWidthsToMax(s.cellWidths),u=s.firstRow;for(var a=0,f=o.length;a<f;a++){var l=o[a];t.push(u),this.$adjustRow(u,l),u++}}this.$inChange=!1},this.$findCellWidthsForBlock=function(e){var t=[],n,r=e;while(r>=0){n=this.$cellWidthsForRow(r);if(n.length==0)break;t.unshift(n),r--}var i=r+1;r=e;var s=this.$editor.session.getLength();while(r<s-1){r++,n=this.$cellWidthsForRow(r);if(n.length==0)break;t.push(n)}return{cellWidths:t,firstRow:i}},this.$cellWidthsForRow=function(e){var t=this.$selectionColumnsForRow(e),n=[-1].concat(this.$tabsForRow(e)),r=n.map(function(e){return 0}).slice(1),i=this.$editor.session.getLine(e);for(var s=0,o=n.length-1;s<o;s++){var u=n[s]+1,a=n[s+1],f=this.$rightmostSelectionInCell(t,a),l=i.substring(u,a);r[s]=Math.max(l.replace(/\s+$/g,"").length,f-u)}return r},this.$selectionColumnsForRow=function(e){var t=[],n=this.$editor.getCursorPosition();return this.$editor.session.getSelection().isEmpty()&&e==n.row&&t.push(n.column),t},this.$setBlockCellWidthsToMax=function(e){var t=!0,n,r,i,s=this.$izip_longest(e);for(var o=0,u=s.length;o<u;o++){var a=s[o];if(!a.push){console.error(a);continue}a.push(NaN);for(var f=0,l=a.length;f<l;f++){var c=a[f];t&&(n=f,i=0,t=!1);if(isNaN(c)){r=f;for(var h=n;h<r;h++)e[h][o]=i;t=!0}i=Math.max(i,c)}}return e},this.$rightmostSelectionInCell=function(e,t){var n=0;if(e.length){var r=[];for(var i=0,s=e.length;i<s;i++)e[i]<=t?r.push(i):r.push(0);n=Math.max.apply(Math,r)}return n},this.$tabsForRow=function(e){var t=[],n=this.$editor.session.getLine(e),r=/\t/g,i;while((i=r.exec(n))!=null)t.push(i.index);return t},this.$adjustRow=function(e,t){var n=this.$tabsForRow(e);if(n.length==0)return;var r=0,i=-1,s=this.$izip(t,n);for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];i+=1+a,f+=r;var l=i-f;if(l==0)continue;var c=this.$editor.session.getLine(e).substr(0,f),h=c.replace(/\s*$/g,""),p=c.length-h.length;l>0&&(this.$editor.session.getDocument().insertInLine({row:e,column:f+1},Array(l+1).join(" ")+" "),this.$editor.session.getDocument().removeInLine(e,f,f+1),r+=l),l<0&&p>=-l&&(this.$editor.session.getDocument().removeInLine(e,f+l,f),r+=l)}},this.$izip_longest=function(e){if(!e[0])return[];var t=e[0].length,n=e.length;for(var r=1;r<n;r++){var i=e[r].length;i>t&&(t=i)}var s=[];for(var o=0;o<t;o++){var u=[];for(var r=0;r<n;r++)e[r][o]===""?u.push(NaN):u.push(e[r][o]);s.push(u)}return s},this.$izip=function(e,t){var n=e.length>=t.length?t.length:e.length,r=[];for(var i=0;i<n;i++){var s=[e[i],t[i]];r.push(s)}return r}}).call(r.prototype),t.ElasticTabstopsLite=r;var i=e("../editor").Editor;e("../config").defineOptions(i.prototype,"editor",{useElasticTabstops:{set:function(e){e?(this.elasticTabstops||(this.elasticTabstops=new r(this)),this.commands.on("afterExec",this.elasticTabstops.onAfterExec),this.commands.on("exec",this.elasticTabstops.onExec),this.on("change",this.elasticTabstops.onChange)):this.elasticTabstops&&(this.commands.removeListener("afterExec",this.elasticTabstops.onAfterExec),this.commands.removeListener("exec",this.elasticTabstops.onExec),this.removeListener("change",this.elasticTabstops.onChange))}}})})
|
||||
ace.define("ace/ext/elastic_tabstops_lite",["require","exports","module","ace/editor","ace/config"],function(e,t,n){var r=function(e){this.$editor=e;var t=this,n=[],r=!1;this.onAfterExec=function(){r=!1,t.processRows(n),n=[]},this.onExec=function(){r=!0},this.onChange=function(e){var t=e.data.range;r&&(n.indexOf(t.start.row)==-1&&n.push(t.start.row),t.end.row!=t.start.row&&n.push(t.end.row))}};(function(){this.processRows=function(e){this.$inChange=!0;var t=[];for(var n=0,r=e.length;n<r;n++){var i=e[n];if(t.indexOf(i)>-1)continue;var s=this.$findCellWidthsForBlock(i),o=this.$setBlockCellWidthsToMax(s.cellWidths),u=s.firstRow;for(var a=0,f=o.length;a<f;a++){var l=o[a];t.push(u),this.$adjustRow(u,l),u++}}this.$inChange=!1},this.$findCellWidthsForBlock=function(e){var t=[],n,r=e;while(r>=0){n=this.$cellWidthsForRow(r);if(n.length==0)break;t.unshift(n),r--}var i=r+1;r=e;var s=this.$editor.session.getLength();while(r<s-1){r++,n=this.$cellWidthsForRow(r);if(n.length==0)break;t.push(n)}return{cellWidths:t,firstRow:i}},this.$cellWidthsForRow=function(e){var t=this.$selectionColumnsForRow(e),n=[-1].concat(this.$tabsForRow(e)),r=n.map(function(e){return 0}).slice(1),i=this.$editor.session.getLine(e);for(var s=0,o=n.length-1;s<o;s++){var u=n[s]+1,a=n[s+1],f=this.$rightmostSelectionInCell(t,a),l=i.substring(u,a);r[s]=Math.max(l.replace(/\s+$/g,"").length,f-u)}return r},this.$selectionColumnsForRow=function(e){var t=[],n=this.$editor.getCursorPosition();return this.$editor.session.getSelection().isEmpty()&&e==n.row&&t.push(n.column),t},this.$setBlockCellWidthsToMax=function(e){var t=!0,n,r,i,s=this.$izip_longest(e);for(var o=0,u=s.length;o<u;o++){var a=s[o];if(!a.push){console.error(a);continue}a.push(NaN);for(var f=0,l=a.length;f<l;f++){var c=a[f];t&&(n=f,i=0,t=!1);if(isNaN(c)){r=f;for(var h=n;h<r;h++)e[h][o]=i;t=!0}i=Math.max(i,c)}}return e},this.$rightmostSelectionInCell=function(e,t){var n=0;if(e.length){var r=[];for(var i=0,s=e.length;i<s;i++)e[i]<=t?r.push(i):r.push(0);n=Math.max.apply(Math,r)}return n},this.$tabsForRow=function(e){var t=[],n=this.$editor.session.getLine(e),r=/\t/g,i;while((i=r.exec(n))!=null)t.push(i.index);return t},this.$adjustRow=function(e,t){var n=this.$tabsForRow(e);if(n.length==0)return;var r=0,i=-1,s=this.$izip(t,n);for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];i+=1+a,f+=r;var l=i-f;if(l==0)continue;var c=this.$editor.session.getLine(e).substr(0,f),h=c.replace(/\s*$/g,""),p=c.length-h.length;l>0&&(this.$editor.session.getDocument().insertInLine({row:e,column:f+1},Array(l+1).join(" ")+" "),this.$editor.session.getDocument().removeInLine(e,f,f+1),r+=l),l<0&&p>=-l&&(this.$editor.session.getDocument().removeInLine(e,f+l,f),r+=l)}},this.$izip_longest=function(e){if(!e[0])return[];var t=e[0].length,n=e.length;for(var r=1;r<n;r++){var i=e[r].length;i>t&&(t=i)}var s=[];for(var o=0;o<t;o++){var u=[];for(var r=0;r<n;r++)e[r][o]===""?u.push(NaN):u.push(e[r][o]);s.push(u)}return s},this.$izip=function(e,t){var n=e.length>=t.length?t.length:e.length,r=[];for(var i=0;i<n;i++){var s=[e[i],t[i]];r.push(s)}return r}}).call(r.prototype),t.ElasticTabstopsLite=r;var i=e("../editor").Editor;e("../config").defineOptions(i.prototype,"editor",{useElasticTabstops:{set:function(e){e?(this.elasticTabstops||(this.elasticTabstops=new r(this)),this.commands.on("afterExec",this.elasticTabstops.onAfterExec),this.commands.on("exec",this.elasticTabstops.onExec),this.on("change",this.elasticTabstops.onChange)):this.elasticTabstops&&(this.commands.removeListener("afterExec",this.elasticTabstops.onAfterExec),this.commands.removeListener("exec",this.elasticTabstops.onExec),this.removeListener("change",this.elasticTabstops.onChange))}}})}),function(){ace.require(["ace/ext/elastic_tabstops_lite"],function(){})}()
|
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/ext-error_marker.js
Normal file
1
app/assets/lib/ace/ext-error_marker.js
Normal file
|
@ -0,0 +1 @@
|
|||
(function(){ace.require(["ace/ext/error_marker"],function(){})})()
|
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/keybinding_menu",["require","exports","module","ace/editor","ace/ext/menu_tools/overlay_page","ace/ext/menu_tools/get_editor_keyboard_shortcuts"],function(e,t,n){function i(t){if(!document.getElementById("kbshortcutmenu")){var n=e("./menu_tools/overlay_page").overlayPage,r=e("./menu_tools/get_editor_keyboard_shortcuts").getEditorKeybordShortcuts,i=r(t),s=document.createElement("div"),o=i.reduce(function(e,t){return e+'<div class="ace_optionsMenuEntry"><span class="ace_optionsMenuCommand">'+t.command+"</span> : "+'<span class="ace_optionsMenuKey">'+t.key+"</span></div>"},"");s.id="kbshortcutmenu",s.innerHTML="<h1>Keyboard Shortcuts</h1>"+o+"</div>",n(t,s,"0","0","0",null)}}var r=e("ace/editor").Editor;n.exports.init=function(e){r.prototype.showKeyboardShortcuts=function(){i(this)},e.commands.addCommands([{name:"showKeyboardShortcuts",bindKey:{win:"Ctrl-Alt-h",mac:"Command-Alt-h"},exec:function(e,t){e.showKeyboardShortcuts()}}])}}),ace.define("ace/ext/menu_tools/overlay_page",["require","exports","module","ace/lib/dom"],function(e,t,n){var r=e("../../lib/dom"),i="#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);-webkit-transition: all 0.5s;transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 1000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?"top: "+i+";":"",o=o?"bottom: "+o+";":"",s=s?"right: "+s+";":"",u=u?"left: "+u+";":"";var a=document.createElement("div"),f=document.createElement("div");a.style.cssText="margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);",a.addEventListener("click",function(){document.removeEventListener("keydown",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener("keydown",l),f.style.cssText=i+s+o+u,f.addEventListener("click",function(e){e.stopPropagation()});var c=r.createElement("div");c.style.position="relative";var h=r.createElement("div");h.className="ace_closeButton",h.addEventListener("click",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),ace.define("ace/ext/menu_tools/get_editor_keyboard_shortcuts",["require","exports","module","ace/lib/keys"],function(e,t,n){var r=e("../../lib/keys");n.exports.getEditorKeybordShortcuts=function(e){var t=r.KEY_MODS,n=[],i={};return e.keyBinding.$handlers.forEach(function(e){var r=e.commandKeyBinding;for(var s in r){var o=parseInt(s);o==-1?o="":isNaN(o)?o=s:o=""+(o&t.command?"Cmd-":"")+(o&t.ctrl?"Ctrl-":"")+(o&t.alt?"Alt-":"")+(o&t.shift?"Shift-":"");for(var u in r[s]){var a=r[s][u];typeof a!="string"&&(a=a.name),i[a]?i[a].key+="|"+o+u:(i[a]={key:o+u,command:a},n.push(i[a]))}}}),n}})
|
||||
ace.define("ace/ext/keybinding_menu",["require","exports","module","ace/editor","ace/ext/menu_tools/overlay_page","ace/ext/menu_tools/get_editor_keyboard_shortcuts"],function(e,t,n){function i(t){if(!document.getElementById("kbshortcutmenu")){var n=e("./menu_tools/overlay_page").overlayPage,r=e("./menu_tools/get_editor_keyboard_shortcuts").getEditorKeybordShortcuts,i=r(t),s=document.createElement("div"),o=i.reduce(function(e,t){return e+'<div class="ace_optionsMenuEntry"><span class="ace_optionsMenuCommand">'+t.command+"</span> : "+'<span class="ace_optionsMenuKey">'+t.key+"</span></div>"},"");s.id="kbshortcutmenu",s.innerHTML="<h1>Keyboard Shortcuts</h1>"+o+"</div>",n(t,s,"0","0","0",null)}}var r=e("ace/editor").Editor;n.exports.init=function(e){r.prototype.showKeyboardShortcuts=function(){i(this)},e.commands.addCommands([{name:"showKeyboardShortcuts",bindKey:{win:"Ctrl-Alt-h",mac:"Command-Alt-h"},exec:function(e,t){e.showKeyboardShortcuts()}}])}}),ace.define("ace/ext/menu_tools/overlay_page",["require","exports","module","ace/lib/dom"],function(e,t,n){var r=e("../../lib/dom"),i="#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);-webkit-transition: all 0.5s;transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 1000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?"top: "+i+";":"",o=o?"bottom: "+o+";":"",s=s?"right: "+s+";":"",u=u?"left: "+u+";":"";var a=document.createElement("div"),f=document.createElement("div");a.style.cssText="margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);",a.addEventListener("click",function(){document.removeEventListener("keydown",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener("keydown",l),f.style.cssText=i+s+o+u,f.addEventListener("click",function(e){e.stopPropagation()});var c=r.createElement("div");c.style.position="relative";var h=r.createElement("div");h.className="ace_closeButton",h.addEventListener("click",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),ace.define("ace/ext/menu_tools/get_editor_keyboard_shortcuts",["require","exports","module","ace/lib/keys"],function(e,t,n){var r=e("../../lib/keys");n.exports.getEditorKeybordShortcuts=function(e){var t=r.KEY_MODS,n=[],i={};return e.keyBinding.$handlers.forEach(function(e){var r=e.commandKeyBinding;for(var s in r){var o=parseInt(s);o==-1?o="":isNaN(o)?o=s:o=""+(o&t.command?"Cmd-":"")+(o&t.ctrl?"Ctrl-":"")+(o&t.alt?"Alt-":"")+(o&t.shift?"Shift-":"");for(var u in r[s]){var a=r[s][u];typeof a!="string"&&(a=a.name),i[a]?i[a].key+="|"+o+u:(i[a]={key:o+u,command:a},n.push(i[a]))}}}),n}}),function(){ace.require(["ace/ext/keybinding_menu"],function(){})}()
|
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/ext-linking.js
Normal file
1
app/assets/lib/ace/ext-linking.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/ext/linking",["require","exports","module","ace/editor","ace/config"],function(e,t,n){function i(e){var t=e.editor,n=e.getAccelKey();if(n){var t=e.editor,r=e.getDocumentPosition(),i=t.session,s=i.getTokenAt(r.row,r.column);t._emit("linkHover",{position:r,token:s})}}function s(e){var t=e.getAccelKey(),n=e.getButton();if(n==0&&t){var r=e.editor,i=e.getDocumentPosition(),s=r.session,o=s.getTokenAt(i.row,i.column);r._emit("linkClick",{position:i,token:o})}}var r=e("ace/editor").Editor;e("../config").defineOptions(r.prototype,"editor",{enableLinking:{set:function(e){e?(this.on("click",s),this.on("mousemove",i)):(this.off("click",s),this.off("mousemove",i))},value:!1}})}),function(){ace.require(["ace/ext/linking"],function(){})}()
|
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/modelist",["require","exports","module"],function(e,t,n){function i(e){var t=a.text,n=e.split(/[\/\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode="ace/mode/"+e,this.extensions=n;if(/\^/.test(n))var r=n.replace(/\|(\^)?/g,function(e,t){return"$|"+(t?"^":"^.*\\.")})+"$";else var r="^.*\\.("+n+")$";this.extRe=new RegExp(r,"gi")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:["abap"],ActionScript:["as"],ADA:["ada|adb"],AsciiDoc:["asciidoc"],Assembly_x86:["asm"],AutoHotKey:["ahk"],BatchFile:["bat|cmd"],C9Search:["c9search_results"],C_Cpp:["cpp|c|cc|cxx|h|hh|hpp"],Clojure:["clj"],Cobol:["CBL|COB"],coffee:["coffee|cf|cson|^Cakefile"],ColdFusion:["cfm"],CSharp:["cs"],CSS:["css"],Curly:["curly"],D:["d|di"],Dart:["dart"],Diff:["diff|patch"],Dot:["dot"],Erlang:["erl|hrl"],EJS:["ejs"],Forth:["frt|fs|ldr"],FTL:["ftl"],Glsl:["glsl|frag|vert"],golang:["go"],Groovy:["groovy"],HAML:["haml"],Handlebars:["hbs|handlebars|tpl|mustache"],Haskell:["hs"],haXe:["hx"],HTML:["html|htm|xhtml"],HTML_Ruby:["erb|rhtml|html.erb"],INI:["ini|conf|cfg|prefs"],Jack:["jack"],Jade:["jade"],Java:["java"],JavaScript:["js|jsm"],JSON:["json"],JSONiq:["jq"],JSP:["jsp"],JSX:["jsx"],Julia:["jl"],LaTeX:["tex|latex|ltx|bib"],LESS:["less"],Liquid:["liquid"],Lisp:["lisp"],LiveScript:["ls"],LogiQL:["logic|lql"],LSL:["lsl"],Lua:["lua"],LuaPage:["lp"],Lucene:["lucene"],Makefile:["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],MATLAB:["matlab"],Markdown:["md|markdown"],MySQL:["mysql"],MUSHCode:["mc|mush"],Nix:["nix"],ObjectiveC:["m|mm"],OCaml:["ml|mli"],Pascal:["pas|p"],Perl:["pl|pm"],pgSQL:["pgsql"],PHP:["php|phtml"],Powershell:["ps1"],Prolog:["plg|prolog"],Properties:["properties"],Protobuf:["proto"],Python:["py"],R:["r"],RDoc:["Rd"],RHTML:["Rhtml"],Ruby:["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],Rust:["rs"],SASS:["sass"],SCAD:["scad"],Scala:["scala"],Scheme:["scm|rkt"],SCSS:["scss"],SH:["sh|bash|^.bashrc"],SJS:["sjs"],Space:["space"],snippets:["snippets"],Soy_Template:["soy"],SQL:["sql"],Stylus:["styl|stylus"],SVG:["svg"],Tcl:["tcl"],Tex:["tex"],Text:["txt"],Textile:["textile"],Toml:["toml"],Twig:["twig"],Typescript:["ts|typescript|str"],VBScript:["vbs"],Velocity:["vm"],Verilog:["v|vh|sv|svh"],XML:["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],XQuery:["xq"],YAML:["yaml|yml"]},u={ObjectiveC:"Objective-C",CSharp:"C#",golang:"Go",C_Cpp:"C/C++",coffee:"CoffeeScript",HTML_Ruby:"HTML (Ruby)",FTL:"FreeMarker"},a={};for(var f in o){var l=o[f],c=u[f]||f,h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}})
|
||||
ace.define("ace/ext/modelist",["require","exports","module"],function(e,t,n){function i(e){var t=a.text,n=e.split(/[\/\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode="ace/mode/"+e,this.extensions=n;if(/\^/.test(n))var r=n.replace(/\|(\^)?/g,function(e,t){return"$|"+(t?"^":"^.*\\.")})+"$";else var r="^.*\\.("+n+")$";this.extRe=new RegExp(r,"gi")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:["abap"],ActionScript:["as"],ADA:["ada|adb"],Apache_Conf:["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"],AsciiDoc:["asciidoc"],Assembly_x86:["asm"],AutoHotKey:["ahk"],BatchFile:["bat|cmd"],C9Search:["c9search_results"],C_Cpp:["cpp|c|cc|cxx|h|hh|hpp"],Cirru:["cirru|cr"],Clojure:["clj"],Cobol:["CBL|COB"],coffee:["coffee|cf|cson|^Cakefile"],ColdFusion:["cfm"],CSharp:["cs"],CSS:["css"],Curly:["curly"],D:["d|di"],Dart:["dart"],Diff:["diff|patch"],Dockerfile:["^Dockerfile"],Dot:["dot"],Erlang:["erl|hrl"],EJS:["ejs"],Forth:["frt|fs|ldr"],FTL:["ftl"],Gherkin:["feature"],Glsl:["glsl|frag|vert"],golang:["go"],Groovy:["groovy"],HAML:["haml"],Handlebars:["hbs|handlebars|tpl|mustache"],Haskell:["hs"],haXe:["hx"],HTML:["html|htm|xhtml"],HTML_Ruby:["erb|rhtml|html.erb"],INI:["ini|conf|cfg|prefs"],Jack:["jack"],Jade:["jade"],Java:["java"],JavaScript:["js|jsm"],JSON:["json"],JSONiq:["jq"],JSP:["jsp"],JSX:["jsx"],Julia:["jl"],LaTeX:["tex|latex|ltx|bib"],LESS:["less"],Liquid:["liquid"],Lisp:["lisp"],LiveScript:["ls"],LogiQL:["logic|lql"],LSL:["lsl"],Lua:["lua"],LuaPage:["lp"],Lucene:["lucene"],Makefile:["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],MATLAB:["matlab"],Markdown:["md|markdown"],MEL:["mel"],MySQL:["mysql"],MUSHCode:["mc|mush"],Nix:["nix"],ObjectiveC:["m|mm"],OCaml:["ml|mli"],Pascal:["pas|p"],Perl:["pl|pm"],pgSQL:["pgsql"],PHP:["php|phtml"],Powershell:["ps1"],Prolog:["plg|prolog"],Properties:["properties"],Protobuf:["proto"],Python:["py"],R:["r"],RDoc:["Rd"],RHTML:["Rhtml"],Ruby:["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],Rust:["rs"],SASS:["sass"],SCAD:["scad"],Scala:["scala"],Smarty:["smarty|tpl"],Scheme:["scm|rkt"],SCSS:["scss"],SH:["sh|bash|^.bashrc"],SJS:["sjs"],Space:["space"],snippets:["snippets"],Soy_Template:["soy"],SQL:["sql"],Stylus:["styl|stylus"],SVG:["svg"],Tcl:["tcl"],Tex:["tex"],Text:["txt"],Textile:["textile"],Toml:["toml"],Twig:["twig"],Typescript:["ts|typescript|str"],Vala:["vala"],VBScript:["vbs"],Velocity:["vm"],Verilog:["v|vh|sv|svh"],XML:["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],XQuery:["xq"],YAML:["yaml|yml"]},u={ObjectiveC:"Objective-C",CSharp:"C#",golang:"Go",C_Cpp:"C/C++",coffee:"CoffeeScript",HTML_Ruby:"HTML (Ruby)",FTL:"FreeMarker"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g," "),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}}),function(){ace.require(["ace/ext/modelist"],function(){})}()
|
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/ext-prompt.js
Normal file
1
app/assets/lib/ace/ext-prompt.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/ext/prompt",["require","exports","module","ace/lib/lang","ace/lib/dom","ace/lib/event","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/editor","ace/multi_select"],function(e,t,n){function c(e,t){var n=this.pixelToScreenCoordinates(e,t);return this.session.screenToDocumentPosition(Math.min(this.session.getScreenLength()-1,Math.max(n.row,0)),Math.max(n.column,0))}var r=e("../lib/lang"),i=e("ace/lib/dom"),s=e("ace/lib/event"),o=e("ace/edit_session").EditSession,u=e("ace/undomanager").UndoManager,a=e("ace/virtual_renderer").VirtualRenderer,f=e("ace/editor").Editor,l=e("ace/multi_select").MultiSelect;t.singleLineEditor=function(e){var t=new a;t.container.style.overflow="hidden",t.screenToTextCoordinates=c,t.setStyle("ace_one-line");var n=new f(t);return n.session.setUndoManager(new u),n.setOptions({showPrintMargin:!1,showGutter:!1,highlightGutterLine:!1,focusWaitTimout:0,maxLines:4}),n}}),function(){ace.require(["ace/ext/prompt"],function(){})}()
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/spellcheck",["require","exports","module","ace/lib/event","ace/editor","ace/config"],function(e,t,n){var r=e("../lib/event");t.contextMenuHandler=function(e){var t=e.target,n=t.textInput.getElement();if(!t.selection.isEmpty())return;var i=t.getCursorPosition(),s=t.session.getWordRange(i.row,i.column),o=t.session.getTextRange(s);t.session.tokenRe.lastIndex=0;if(!t.session.tokenRe.test(o))return;var u="",a=o+" "+u;n.value=a,n.setSelectionRange(o.length,o.length+1),n.setSelectionRange(0,0),n.setSelectionRange(0,o.length);var f=!1;r.addListener(n,"keydown",function l(){r.removeListener(n,"keydown",l),f=!0}),t.textInput.setInputHandler(function(e){console.log(e,a,n.selectionStart,n.selectionEnd);if(e==a)return"";if(e.lastIndexOf(a,0)===0)return e.slice(a.length);if(e.substr(n.selectionEnd)==a)return e.slice(0,-a.length);if(e.slice(-2)==u){var r=e.slice(0,-2);if(r.slice(-1)==" ")return f?r.substring(0,n.selectionEnd):(r=r.slice(0,-1),t.session.replace(s,r),"")}return e})};var i=e("../editor").Editor;e("../config").defineOptions(i.prototype,"editor",{spellcheck:{set:function(e){var n=this.textInput.getElement();n.spellcheck=!!e,e?this.on("nativecontextmenu",t.contextMenuHandler):this.removeListener("nativecontextmenu",t.contextMenuHandler)},value:!0}})})
|
||||
ace.define("ace/ext/spellcheck",["require","exports","module","ace/lib/event","ace/editor","ace/config"],function(e,t,n){var r=e("../lib/event");t.contextMenuHandler=function(e){var t=e.target,n=t.textInput.getElement();if(!t.selection.isEmpty())return;var i=t.getCursorPosition(),s=t.session.getWordRange(i.row,i.column),o=t.session.getTextRange(s);t.session.tokenRe.lastIndex=0;if(!t.session.tokenRe.test(o))return;var u="\x01\x01",a=o+" "+u;n.value=a,n.setSelectionRange(o.length,o.length+1),n.setSelectionRange(0,0),n.setSelectionRange(0,o.length);var f=!1;r.addListener(n,"keydown",function l(){r.removeListener(n,"keydown",l),f=!0}),t.textInput.setInputHandler(function(e){console.log(e,a,n.selectionStart,n.selectionEnd);if(e==a)return"";if(e.lastIndexOf(a,0)===0)return e.slice(a.length);if(e.substr(n.selectionEnd)==a)return e.slice(0,-a.length);if(e.slice(-2)==u){var r=e.slice(0,-2);if(r.slice(-1)==" ")return f?r.substring(0,n.selectionEnd):(r=r.slice(0,-1),t.session.replace(s,r),"")}return e})};var i=e("../editor").Editor;e("../config").defineOptions(i.prototype,"editor",{spellcheck:{set:function(e){var n=this.textInput.getElement();n.spellcheck=!!e,e?this.on("nativecontextmenu",t.contextMenuHandler):this.removeListener("nativecontextmenu",t.contextMenuHandler)},value:!0}})}),function(){ace.require(["ace/ext/spellcheck"],function(){})}()
|
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/split",["require","exports","module","ace/split"],function(e,t,n){n.exports=e("../split")}),ace.define("ace/split",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/editor","ace/virtual_renderer","ace/edit_session"],function(e,t,n){function l(e,t){this.$u=e,this.$doc=t}var r=e("./lib/oop"),i=e("./lib/lang"),s=e("./lib/event_emitter").EventEmitter,o=e("./editor").Editor,u=e("./virtual_renderer").VirtualRenderer,a=e("./edit_session").EditSession,f=function(e,t,n){this.BELOW=1,this.BESIDE=0,this.$container=e,this.$theme=t,this.$splits=0,this.$editorCSS="",this.$editors=[],this.$orientation=this.BESIDE,this.setSplits(n||1),this.$cEditor=this.$editors[0],this.on("focus",function(e){this.$cEditor=e}.bind(this))};(function(){r.implement(this,s),this.$createEditor=function(){var e=document.createElement("div");e.className=this.$editorCSS,e.style.cssText="position: absolute; top:0px; bottom:0px",this.$container.appendChild(e);var t=new o(new u(e,this.$theme));return t.on("focus",function(){this._emit("focus",t)}.bind(this)),this.$editors.push(t),t.setFontSize(this.$fontSize),t},this.setSplits=function(e){var t;if(e<1)throw"The number of splits have to be > 0!";if(e==this.$splits)return;if(e>this.$splits){while(this.$splits<this.$editors.length&&this.$splits<e)t=this.$editors[this.$splits],this.$container.appendChild(t.container),t.setFontSize(this.$fontSize),this.$splits++;while(this.$splits<e)this.$createEditor(),this.$splits++}else while(this.$splits>e)t=this.$editors[this.$splits-1],this.$container.removeChild(t.container),this.$splits--;this.resize()},this.getSplits=function(){return this.$splits},this.getEditor=function(e){return this.$editors[e]},this.getCurrentEditor=function(){return this.$cEditor},this.focus=function(){this.$cEditor.focus()},this.blur=function(){this.$cEditor.blur()},this.setTheme=function(e){this.$editors.forEach(function(t){t.setTheme(e)})},this.setKeyboardHandler=function(e){this.$editors.forEach(function(t){t.setKeyboardHandler(e)})},this.forEach=function(e,t){this.$editors.forEach(e,t)},this.$fontSize="",this.setFontSize=function(e){this.$fontSize=e,this.forEach(function(t){t.setFontSize(e)})},this.$cloneSession=function(e){var t=new a(e.getDocument(),e.getMode()),n=e.getUndoManager();if(n){var r=new l(n,t);t.setUndoManager(r)}return t.$informUndoManager=i.delayedCall(function(){t.$deltas=[]}),t.setTabSize(e.getTabSize()),t.setUseSoftTabs(e.getUseSoftTabs()),t.setOverwrite(e.getOverwrite()),t.setBreakpoints(e.getBreakpoints()),t.setUseWrapMode(e.getUseWrapMode()),t.setUseWorker(e.getUseWorker()),t.setWrapLimitRange(e.$wrapLimitRange.min,e.$wrapLimitRange.max),t.$foldData=e.$cloneFoldData(),t},this.setSession=function(e,t){var n;t==null?n=this.$cEditor:n=this.$editors[t];var r=this.$editors.some(function(t){return t.session===e});return r&&(e=this.$cloneSession(e)),n.setSession(e),e},this.getOrientation=function(){return this.$orientation},this.setOrientation=function(e){if(this.$orientation==e)return;this.$orientation=e,this.resize()},this.resize=function(){var e=this.$container.clientWidth,t=this.$container.clientHeight,n;if(this.$orientation==this.BESIDE){var r=e/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=r+"px",n.container.style.top="0px",n.container.style.left=i*r+"px",n.container.style.height=t+"px",n.resize()}else{var s=t/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=e+"px",n.container.style.top=i*s+"px",n.container.style.left="0px",n.container.style.height=s+"px",n.resize()}}}).call(f.prototype),function(){this.execute=function(e){this.$u.execute(e)},this.undo=function(){var e=this.$u.undo(!0);e&&this.$doc.selection.setSelectionRange(e)},this.redo=function(){var e=this.$u.redo(!0);e&&this.$doc.selection.setSelectionRange(e)},this.reset=function(){this.$u.reset()},this.hasUndo=function(){return this.$u.hasUndo()},this.hasRedo=function(){return this.$u.hasRedo()}}.call(l.prototype),t.Split=f})
|
||||
ace.define("ace/ext/split",["require","exports","module","ace/split"],function(e,t,n){n.exports=e("../split")}),ace.define("ace/split",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/editor","ace/virtual_renderer","ace/edit_session"],function(e,t,n){function l(e,t){this.$u=e,this.$doc=t}var r=e("./lib/oop"),i=e("./lib/lang"),s=e("./lib/event_emitter").EventEmitter,o=e("./editor").Editor,u=e("./virtual_renderer").VirtualRenderer,a=e("./edit_session").EditSession,f=function(e,t,n){this.BELOW=1,this.BESIDE=0,this.$container=e,this.$theme=t,this.$splits=0,this.$editorCSS="",this.$editors=[],this.$orientation=this.BESIDE,this.setSplits(n||1),this.$cEditor=this.$editors[0],this.on("focus",function(e){this.$cEditor=e}.bind(this))};(function(){r.implement(this,s),this.$createEditor=function(){var e=document.createElement("div");e.className=this.$editorCSS,e.style.cssText="position: absolute; top:0px; bottom:0px",this.$container.appendChild(e);var t=new o(new u(e,this.$theme));return t.on("focus",function(){this._emit("focus",t)}.bind(this)),this.$editors.push(t),t.setFontSize(this.$fontSize),t},this.setSplits=function(e){var t;if(e<1)throw"The number of splits have to be > 0!";if(e==this.$splits)return;if(e>this.$splits){while(this.$splits<this.$editors.length&&this.$splits<e)t=this.$editors[this.$splits],this.$container.appendChild(t.container),t.setFontSize(this.$fontSize),this.$splits++;while(this.$splits<e)this.$createEditor(),this.$splits++}else while(this.$splits>e)t=this.$editors[this.$splits-1],this.$container.removeChild(t.container),this.$splits--;this.resize()},this.getSplits=function(){return this.$splits},this.getEditor=function(e){return this.$editors[e]},this.getCurrentEditor=function(){return this.$cEditor},this.focus=function(){this.$cEditor.focus()},this.blur=function(){this.$cEditor.blur()},this.setTheme=function(e){this.$editors.forEach(function(t){t.setTheme(e)})},this.setKeyboardHandler=function(e){this.$editors.forEach(function(t){t.setKeyboardHandler(e)})},this.forEach=function(e,t){this.$editors.forEach(e,t)},this.$fontSize="",this.setFontSize=function(e){this.$fontSize=e,this.forEach(function(t){t.setFontSize(e)})},this.$cloneSession=function(e){var t=new a(e.getDocument(),e.getMode()),n=e.getUndoManager();if(n){var r=new l(n,t);t.setUndoManager(r)}return t.$informUndoManager=i.delayedCall(function(){t.$deltas=[]}),t.setTabSize(e.getTabSize()),t.setUseSoftTabs(e.getUseSoftTabs()),t.setOverwrite(e.getOverwrite()),t.setBreakpoints(e.getBreakpoints()),t.setUseWrapMode(e.getUseWrapMode()),t.setUseWorker(e.getUseWorker()),t.setWrapLimitRange(e.$wrapLimitRange.min,e.$wrapLimitRange.max),t.$foldData=e.$cloneFoldData(),t},this.setSession=function(e,t){var n;t==null?n=this.$cEditor:n=this.$editors[t];var r=this.$editors.some(function(t){return t.session===e});return r&&(e=this.$cloneSession(e)),n.setSession(e),e},this.getOrientation=function(){return this.$orientation},this.setOrientation=function(e){if(this.$orientation==e)return;this.$orientation=e,this.resize()},this.resize=function(){var e=this.$container.clientWidth,t=this.$container.clientHeight,n;if(this.$orientation==this.BESIDE){var r=e/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=r+"px",n.container.style.top="0px",n.container.style.left=i*r+"px",n.container.style.height=t+"px",n.resize()}else{var s=t/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=e+"px",n.container.style.top=i*s+"px",n.container.style.left="0px",n.container.style.height=s+"px",n.resize()}}}).call(f.prototype),function(){this.execute=function(e){this.$u.execute(e)},this.undo=function(){var e=this.$u.undo(!0);e&&this.$doc.selection.setSelectionRange(e)},this.redo=function(){var e=this.$u.redo(!0);e&&this.$doc.selection.setSelectionRange(e)},this.reset=function(){this.$u.reset()},this.hasUndo=function(){return this.$u.hasUndo()},this.hasRedo=function(){return this.$u.hasRedo()}}.call(l.prototype),t.Split=f}),function(){ace.require(["ace/ext/split"],function(){})}()
|
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/static_highlight",["require","exports","module","ace/edit_session","ace/layer/text","ace/config","ace/lib/dom"],function(e,t,n){var r=e("../edit_session").EditSession,i=e("../layer/text").Text,s=".ace_static_highlight {font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;font-size: 12px;}.ace_static_highlight .ace_gutter {width: 25px !important;display: block;float: left;text-align: right;padding: 0 3px 0 0;margin-right: 3px;position: static !important;}.ace_static_highlight .ace_line { clear: both; }.ace_static_highlight .ace_gutter-cell {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;user-select: none;}",o=e("../config"),u=e("../lib/dom"),a=function(e,t,n){var r=e.className.match(/lang-(\w+)/),i=t.mode||r&&"ace/mode/"+r[1];if(!i)return!1;var s=t.theme||"ace/theme/textmate",o="",f=[];if(e.firstElementChild){var l=0;for(var c=0;c<e.childNodes.length;c++){var h=e.childNodes[c];h.nodeType==3?(l+=h.data.length,o+=h.data):f.push(l,h)}}else o=u.getInnerText(e),t.trim&&(o=o.trim());a.render(o,i,s,t.firstLineNumber,!t.showGutter,function(t){u.importCssString(t.css,"ace_highlight"),e.innerHTML=t.html;var r=e.firstChild.firstChild;for(var i=0;i<f.length;i+=2){var s=t.session.doc.indexToPosition(f[i]),o=f[i+1],a=r.children[s.row];a&&a.appendChild(o)}n&&n()})};a.render=function(e,t,n,i,s,u){function c(){var r=a.renderSync(e,t,n,i,s);return u?u(r):r}var f=0,l=r.prototype.$modes;return typeof n=="string"&&(f++,o.loadModule(["theme",n],function(e){n=e,--f||c()})),typeof t=="string"&&(f++,o.loadModule(["mode",t],function(e){l[t]||(l[t]=new e.Mode),t=l[t],--f||c()})),f||c()},a.renderSync=function(e,t,n,o,u){o=parseInt(o||1,10);var a=new r("");a.setUseWorker(!1),a.setMode(t);var f=new i(document.createElement("div"));f.setSession(a),f.config={characterWidth:10,lineHeight:20},a.setValue(e);var l=[],c=a.getLength();for(var h=0;h<c;h++)l.push("<div class='ace_line'>"),u||l.push("<span class='ace_gutter ace_gutter-cell' unselectable='on'>"+(h+o)+"</span>"),f.$renderLine(l,h,!0,!1),l.push("\n</div>");var p="<div class='"+n.cssClass+"'>"+"<div class='ace_static_highlight'>"+l.join("")+"</div>"+"</div>";return f.destroy(),{css:s+n.cssText,html:p,session:a}},n.exports=a,n.exports.highlight=a})
|
||||
ace.define("ace/ext/static_highlight",["require","exports","module","ace/edit_session","ace/layer/text","ace/config","ace/lib/dom"],function(e,t,n){var r=e("../edit_session").EditSession,i=e("../layer/text").Text,s=".ace_static_highlight {font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;font-size: 12px;}.ace_static_highlight .ace_gutter {width: 25px !important;display: block;float: left;text-align: right;padding: 0 3px 0 0;margin-right: 3px;position: static !important;}.ace_static_highlight .ace_line { clear: both; }.ace_static_highlight .ace_gutter-cell {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;user-select: none;}.ace_static_highlight .ace_gutter-cell:before {content: counter(ace_line, decimal);counter-increment: ace_line;}.ace_static_highlight {counter-reset: ace_line;}",o=e("../config"),u=e("../lib/dom"),a=function(e,t,n){var r=e.className.match(/lang-(\w+)/),i=t.mode||r&&"ace/mode/"+r[1];if(!i)return!1;var s=t.theme||"ace/theme/textmate",o="",f=[];if(e.firstElementChild){var l=0;for(var c=0;c<e.childNodes.length;c++){var h=e.childNodes[c];h.nodeType==3?(l+=h.data.length,o+=h.data):f.push(l,h)}}else o=u.getInnerText(e),t.trim&&(o=o.trim());a.render(o,i,s,t.firstLineNumber,!t.showGutter,function(t){u.importCssString(t.css,"ace_highlight"),e.innerHTML=t.html;var r=e.firstChild.firstChild;for(var i=0;i<f.length;i+=2){var s=t.session.doc.indexToPosition(f[i]),o=f[i+1],a=r.children[s.row];a&&a.appendChild(o)}n&&n()})};a.render=function(e,t,n,i,s,u){function c(){var r=a.renderSync(e,t,n,i,s);return u?u(r):r}var f=1,l=r.prototype.$modes;return typeof n=="string"&&(f++,o.loadModule(["theme",n],function(e){n=e,--f||c()})),typeof t=="string"&&(f++,o.loadModule(["mode",t],function(e){l[t]||(l[t]=new e.Mode),t=l[t],--f||c()})),--f||c()},a.renderSync=function(e,t,n,o,u){o=parseInt(o||1,10);var a=new r("");a.setUseWorker(!1),a.setMode(t);var f=new i(document.createElement("div"));f.setSession(a),f.config={characterWidth:10,lineHeight:20},a.setValue(e);var l=[],c=a.getLength();for(var h=0;h<c;h++)l.push("<div class='ace_line'>"),u||l.push("<span class='ace_gutter ace_gutter-cell' unselectable='on'></span>"),f.$renderLine(l,h,!0,!1),l.push("\n</div>");var p="<div class='"+n.cssClass+"'>"+"<div class='ace_static_highlight' style='counter-reset:ace_line "+(o-1)+"'>"+l.join("")+"</div>"+"</div>";return f.destroy(),{css:s+n.cssText,html:p,session:a}},n.exports=a,n.exports.highlight=a}),function(){ace.require(["ace/ext/static_highlight"],function(){})}()
|
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/statusbar",["require","exports","module","ace/lib/dom","ace/lib/lang"],function(e,t,n){var r=e("ace/lib/dom"),i=e("ace/lib/lang"),s=function(e,t){this.element=r.createElement("div"),this.element.className="ace_status-indicator",this.element.style.cssText="display: inline-block;",t.appendChild(this.element);var n=i.delayedCall(function(){this.updateStatus(e)}.bind(this));e.on("changeStatus",function(){n.schedule(100)}),e.on("changeSelection",function(){n.schedule(100)})};(function(){this.updateStatus=function(e){function n(e,n){e&&t.push(e,n||"|")}var t=[];e.$vimModeHandler?n(e.$vimModeHandler.getStatusText()):e.commands.recording&&n("REC");var r=e.selection.lead;n(r.row+":"+r.column," ");if(!e.selection.isEmpty()){var i=e.getSelectionRange();n("("+(i.end.row-i.start.row)+":"+(i.end.column-i.start.column)+")")}t.pop(),this.element.textContent=t.join("")}}).call(s.prototype),t.StatusBar=s})
|
||||
ace.define("ace/ext/statusbar",["require","exports","module","ace/lib/dom","ace/lib/lang"],function(e,t,n){var r=e("ace/lib/dom"),i=e("ace/lib/lang"),s=function(e,t){this.element=r.createElement("div"),this.element.className="ace_status-indicator",this.element.style.cssText="display: inline-block;",t.appendChild(this.element);var n=i.delayedCall(function(){this.updateStatus(e)}.bind(this));e.on("changeStatus",function(){n.schedule(100)}),e.on("changeSelection",function(){n.schedule(100)})};(function(){this.updateStatus=function(e){function n(e,n){e&&t.push(e,n||"|")}var t=[];e.$vimModeHandler?n(e.$vimModeHandler.getStatusText()):e.commands.recording&&n("REC");var r=e.selection.lead;n(r.row+":"+r.column," ");if(!e.selection.isEmpty()){var i=e.getSelectionRange();n("("+(i.end.row-i.start.row)+":"+(i.end.column-i.start.column)+")")}t.pop(),this.element.textContent=t.join("")}}).call(s.prototype),t.StatusBar=s}),function(){ace.require(["ace/ext/statusbar"],function(){})}()
|
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/themelist",["require","exports","module","ace/ext/themelist_utils/themes"],function(e,t,n){n.exports.themes=e("ace/ext/themelist_utils/themes").themes,n.exports.ThemeDescription=function(e){this.name=e,this.desc=e.split("_").map(function(e){return e[0].toUpperCase()+e.slice(1)}).join(" "),this.theme="ace/theme/"+e},n.exports.themesByName={},n.exports.themes=n.exports.themes.map(function(e){return n.exports.themesByName[e]=new n.exports.ThemeDescription(e),n.exports.themesByName[e]})}),ace.define("ace/ext/themelist_utils/themes",["require","exports","module"],function(e,t,n){n.exports.themes=["ambiance","chaos","chrome","clouds","clouds_midnight","cobalt","crimson_editor","dawn","dreamweaver","eclipse","github","idle_fingers","kr_theme","merbivore","merbivore_soft","mono_industrial","monokai","pastel_on_dark","solarized_dark","solarized_light","terminal","textmate","tomorrow","tomorrow_night","tomorrow_night_blue","tomorrow_night_bright","tomorrow_night_eighties","twilight","vibrant_ink","xcode"]})
|
||||
ace.define("ace/ext/themelist",["require","exports","module","ace/lib/fixoldbrowsers"],function(e,t,n){e("ace/lib/fixoldbrowsers");var r=[["Chrome"],["Clouds"],["Crimson Editor"],["Dawn"],["Dreamweaver"],["Eclipse"],["GitHub"],["Solarized Light"],["TextMate"],["Tomorrow"],["XCode"],["Kuroir"],["KatzenMilch"],["Ambiance","ambiance","dark"],["Chaos","chaos","dark"],["Clouds Midnight","clouds_midnight","dark"],["Cobalt","cobalt","dark"],["idle Fingers","idle_fingers","dark"],["krTheme","kr_theme","dark"],["Merbivore","merbivore","dark"],["Merbivore Soft","merbivore_soft","dark"],["Mono Industrial","mono_industrial","dark"],["Monokai","monokai","dark"],["Pastel on dark","pastel_on_dark","dark"],["Solarized Dark","solarized_dark","dark"],["Terminal","terminal","dark"],["Tomorrow Night","tomorrow_night","dark"],["Tomorrow Night Blue","tomorrow_night_blue","dark"],["Tomorrow Night Bright","tomorrow_night_bright","dark"],["Tomorrow Night 80s","tomorrow_night_eighties","dark"],["Twilight","twilight","dark"],["Vibrant Ink","vibrant_ink","dark"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,"_").toLowerCase(),r={caption:e[0],theme:"ace/theme/"+n,isDark:e[2]=="dark",name:n};return t.themesByName[n]=r,r})}),function(){ace.require(["ace/ext/themelist"],function(){})}()
|
|
@ -1 +1 @@
|
|||
ace.define("ace/ext/whitespace",["require","exports","module","ace/lib/lang"],function(e,t,n){var r=e("../lib/lang");t.$detectIndentation=function(e,t){function h(e){var t=0;for(var r=e;r<n.length;r+=e)t+=n[r]||0;return t}var n=[],r=[],i=0,s=0,o=Math.min(e.length,1e3);for(var u=0;u<o;u++){var a=e[u];if(!/^\s*[^*+\-\s]/.test(a))continue;var f=a.match(/^\t*/)[0].length;a[0]==" "&&i++;var l=a.match(/^ */)[0].length;if(l&&a[l]!=" "){var c=l-s;c>0&&!(s%c)&&!(l%c)&&(r[c]=(r[c]||0)+1),n[l]=(n[l]||0)+1}s=l;while(a[a.length-1]=="\\")a=e[u++]}var p=r.reduce(function(e,t){return e+t},0),d={score:0,length:0},v=0;for(var u=1;u<12;u++){if(u==1){v=h(u);var m=1}else var m=h(u)/v;r[u]&&(m+=r[u]/p),m>d.score&&(d={score:m,length:u})}if(d.score&&d.score>1.4)var g=d.length;if(i>v+1)return{ch:" ",length:g};if(v+1>i)return{ch:" ",length:g}},t.detectIndentation=function(e){var n=e.getLines(0,1e3),r=t.$detectIndentation(n)||{};return r.ch&&e.setUseSoftTabs(r.ch==" "),r.length&&e.setTabSize(r.length),r},t.trimTrailingSpace=function(e,t){var n=e.getDocument(),r=n.getAllLines(),i=t?-1:0;for(var s=0,o=r.length;s<o;s++){var u=r[s],a=u.search(/\s+$/);a>i&&n.removeInLine(s,a,u.length)}},t.convertIndentation=function(e,t,n){var i=e.getTabString()[0],s=e.getTabSize();n||(n=s),t||(t=i);var o=t==" "?t:r.stringRepeat(t,n),u=e.doc,a=u.getAllLines(),f={},l={};for(var c=0,h=a.length;c<h;c++){var p=a[c],d=p.match(/^\s*/)[0];if(d){var v=e.$getStringScreenWidth(d)[0],m=Math.floor(v/s),g=v%s,y=f[m]||(f[m]=r.stringRepeat(o,m));y+=l[g]||(l[g]=r.stringRepeat(" ",g)),y!=d&&(u.removeInLine(c,0,d.length),u.insertInLine({row:c,column:0},y))}}e.setTabSize(n),e.setUseSoftTabs(t==" ")},t.$parseStringArg=function(e){var t={};/t/.test(e)?t.ch=" ":/s/.test(e)&&(t.ch=" ");var n=e.match(/\d+/);return n&&(t.length=parseInt(n[0],10)),t},t.$parseArg=function(e){return e?typeof e=="string"?t.$parseStringArg(e):typeof e.text=="string"?t.$parseStringArg(e.text):e:{}},t.commands=[{name:"detectIndentation",exec:function(e){t.detectIndentation(e.session)}},{name:"trimTrailingSpace",exec:function(e){t.trimTrailingSpace(e.session)}},{name:"convertIndentation",exec:function(e,n){var r=t.$parseArg(n);t.convertIndentation(e.session,r.ch,r.length)}},{name:"setIndentation",exec:function(e,n){var r=t.$parseArg(n);r.length&&e.session.setTabSize(r.length),r.ch&&e.session.setUseSoftTabs(r.ch==" ")}}]})
|
||||
ace.define("ace/ext/whitespace",["require","exports","module","ace/lib/lang"],function(e,t,n){var r=e("../lib/lang");t.$detectIndentation=function(e,t){function h(e){var t=0;for(var r=e;r<n.length;r+=e)t+=n[r]||0;return t}var n=[],r=[],i=0,s=0,o=Math.min(e.length,1e3);for(var u=0;u<o;u++){var a=e[u];if(!/^\s*[^*+\-\s]/.test(a))continue;var f=a.match(/^\t*/)[0].length;a[0]==" "&&i++;var l=a.match(/^ */)[0].length;if(l&&a[l]!=" "){var c=l-s;c>0&&!(s%c)&&!(l%c)&&(r[c]=(r[c]||0)+1),n[l]=(n[l]||0)+1}s=l;while(u<o&&a[a.length-1]=="\\")a=e[u++]}if(!n.length)return;var p=r.reduce(function(e,t){return e+t},0),d={score:0,length:0},v=0;for(var u=1;u<12;u++){if(u==1){v=h(u);var m=1}else var m=h(u)/v;r[u]&&(m+=r[u]/p),m>d.score&&(d={score:m,length:u})}if(d.score&&d.score>1.4)var g=d.length;if(i>v+1)return{ch:" ",length:g};if(v+1>i)return{ch:" ",length:g}},t.detectIndentation=function(e){var n=e.getLines(0,1e3),r=t.$detectIndentation(n)||{};return r.ch&&e.setUseSoftTabs(r.ch==" "),r.length&&e.setTabSize(r.length),r},t.trimTrailingSpace=function(e,t){var n=e.getDocument(),r=n.getAllLines(),i=t?-1:0;for(var s=0,o=r.length;s<o;s++){var u=r[s],a=u.search(/\s+$/);a>i&&n.removeInLine(s,a,u.length)}},t.convertIndentation=function(e,t,n){var i=e.getTabString()[0],s=e.getTabSize();n||(n=s),t||(t=i);var o=t==" "?t:r.stringRepeat(t,n),u=e.doc,a=u.getAllLines(),f={},l={};for(var c=0,h=a.length;c<h;c++){var p=a[c],d=p.match(/^\s*/)[0];if(d){var v=e.$getStringScreenWidth(d)[0],m=Math.floor(v/s),g=v%s,y=f[m]||(f[m]=r.stringRepeat(o,m));y+=l[g]||(l[g]=r.stringRepeat(" ",g)),y!=d&&(u.removeInLine(c,0,d.length),u.insertInLine({row:c,column:0},y))}}e.setTabSize(n),e.setUseSoftTabs(t==" ")},t.$parseStringArg=function(e){var t={};/t/.test(e)?t.ch=" ":/s/.test(e)&&(t.ch=" ");var n=e.match(/\d+/);return n&&(t.length=parseInt(n[0],10)),t},t.$parseArg=function(e){return e?typeof e=="string"?t.$parseStringArg(e):typeof e.text=="string"?t.$parseStringArg(e.text):e:{}},t.commands=[{name:"detectIndentation",exec:function(e){t.detectIndentation(e.session)}},{name:"trimTrailingSpace",exec:function(e){t.trimTrailingSpace(e.session)}},{name:"convertIndentation",exec:function(e,n){var r=t.$parseArg(n);t.convertIndentation(e.session,r.ch,r.length)}},{name:"setIndentation",exec:function(e,n){var r=t.$parseArg(n);r.length&&e.session.setTabSize(r.length),r.ch&&e.session.setUseSoftTabs(r.ch==" ")}}]}),function(){ace.require(["ace/ext/whitespace"],function(){})}()
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/mode-plain_text.js
Normal file
1
app/assets/lib/ace/mode-plain_text.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/mode/plain_text",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/behaviour"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./text_highlight_rules").TextHighlightRules,o=e("./behaviour").Behaviour,u=function(){this.HighlightRules=s,this.$behaviour=new o};r.inherits(u,i),function(){this.type="text",this.getNextLineIndent=function(e,t,n){return""},this.$id="ace/mode/plain_text"}.call(u.prototype),t.Mode=u})
|
|
@ -1 +1 @@
|
|||
ace.define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./python_highlight_rules").PythonHighlightRules,o=e("./folding/pythonic").FoldMode,u=e("../range").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o("\\:")};r.inherits(a,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[\:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id="ace/mode/python"}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield",t="True|False|None|NotImplemented|Ellipsis|__debug__",n="abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern",r=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":n,"constant.language":t,keyword:e},"identifier"),i="(?:r|u|ur|R|U|UR|Ur|uR)?",s="(?:(?:[1-9]\\d*)|(?:0))",o="(?:0[oO]?[0-7]+)",u="(?:0[xX][\\dA-Fa-f]+)",a="(?:0[bB][01]+)",f="(?:"+s+"|"+o+"|"+u+"|"+a+")",l="(?:[eE][+-]?\\d+)",c="(?:\\.\\d+)",h="(?:\\d+)",p="(?:(?:"+h+"?"+c+")|(?:"+h+"\\.))",d="(?:(?:"+p+"|"+h+")"+l+")",v="(?:"+d+"|"+p+")",m="\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:i+'"{3}',next:"qqstring3"},{token:"string",regex:i+'"(?=.)',next:"qqstring"},{token:"string",regex:i+"'{3}",next:"qstring3"},{token:"string",regex:i+"'(?=.)",next:"qstring"},{token:"constant.numeric",regex:"(?:"+v+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:v},{token:"constant.numeric",regex:f+"[lL]\\b"},{token:"constant.numeric",regex:f+"\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring3:[{token:"constant.language.escape",regex:m},{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],qstring3:[{token:"constant.language.escape",regex:m},{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],qqstring:[{token:"constant.language.escape",regex:m},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:m},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}]}};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp("([\\[{])(?:\\s*)$|("+e+")(?:\\s*)(?:#.*)?$")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)})
|
||||
ace.define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./python_highlight_rules").PythonHighlightRules,o=e("./folding/pythonic").FoldMode,u=e("../range").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o("\\:")};r.inherits(a,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[\:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id="ace/mode/python"}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield",t="True|False|None|NotImplemented|Ellipsis|__debug__",n="abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern",r=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":n,"constant.language":t,keyword:e},"identifier"),i="(?:r|u|ur|R|U|UR|Ur|uR)?",s="(?:(?:[1-9]\\d*)|(?:0))",o="(?:0[oO]?[0-7]+)",u="(?:0[xX][\\dA-Fa-f]+)",a="(?:0[bB][01]+)",f="(?:"+s+"|"+o+"|"+u+"|"+a+")",l="(?:[eE][+-]?\\d+)",c="(?:\\.\\d+)",h="(?:\\d+)",p="(?:(?:"+h+"?"+c+")|(?:"+h+"\\.))",d="(?:(?:"+p+"|"+h+")"+l+")",v="(?:"+d+"|"+p+")",m="\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:i+'"{3}',next:"qqstring3"},{token:"string",regex:i+'"(?=.)',next:"qqstring"},{token:"string",regex:i+"'{3}",next:"qstring3"},{token:"string",regex:i+"'(?=.)",next:"qstring"},{token:"constant.numeric",regex:"(?:"+v+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:v},{token:"constant.numeric",regex:f+"[lL]\\b"},{token:"constant.numeric",regex:f+"\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring3:[{token:"constant.language.escape",regex:m},{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],qstring3:[{token:"constant.language.escape",regex:m},{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],qqstring:[{token:"constant.language.escape",regex:m},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:m},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}]}};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp("([\\[{])(?:\\s*)$|("+e+")(?:\\s*)(?:#.*)?$")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)})
|
1
app/assets/lib/ace/mode-ruby.js
Normal file
1
app/assets/lib/ace/mode-ruby.js
Normal file
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/snippets/clojure.js
Normal file
1
app/assets/lib/ace/snippets/clojure.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/snippets/clojure",["require","exports","module"],function(e,t,n){t.snippetText='snippet comm\n (comment\n ${1}\n )\nsnippet condp\n (condp ${1:pred} ${2:expr}\n ${3})\nsnippet def\n (def ${1})\nsnippet defm\n (defmethod ${1:multifn} "${2:doc-string}" ${3:dispatch-val} [${4:args}]\n ${5})\nsnippet defmm\n (defmulti ${1:name} "${2:doc-string}" ${3:dispatch-fn})\nsnippet defma\n (defmacro ${1:name} "${2:doc-string}" ${3:dispatch-fn})\nsnippet defn\n (defn ${1:name} "${2:doc-string}" [${3:arg-list}]\n ${4})\nsnippet defp\n (defprotocol ${1:name}\n ${2})\nsnippet defr\n (defrecord ${1:name} [${2:fields}]\n ${3:protocol}\n ${4})\nsnippet deft\n (deftest ${1:name}\n (is (= ${2:assertion})))\n ${3})\nsnippet is\n (is (= ${1} ${2}))\nsnippet defty\n (deftype ${1:Name} [${2:fields}]\n ${3:Protocol}\n ${4})\nsnippet doseq\n (doseq [${1:elem} ${2:coll}]\n ${3})\nsnippet fn\n (fn [${1:arg-list}] ${2})\nsnippet if\n (if ${1:test-expr}\n ${2:then-expr}\n ${3:else-expr})\nsnippet if-let \n (if-let [${1:result} ${2:test-expr}]\n (${3:then-expr} $1)\n (${4:else-expr}))\nsnippet imp\n (:import [${1:package}])\n & {:keys [${1:keys}] :or {${2:defaults}}}\nsnippet let\n (let [${1:name} ${2:expr}]\n ${3})\nsnippet letfn\n (letfn [(${1:name) [${2:args}]\n ${3})])\nsnippet map\n (map ${1:func} ${2:coll})\nsnippet mapl\n (map #(${1:lambda}) ${2:coll})\nsnippet met\n (${1:name} [${2:this} ${3:args}]\n ${4})\nsnippet ns\n (ns ${1:name}\n ${2})\nsnippet dotimes\n (dotimes [_ 10]\n (time\n (dotimes [_ ${1:times}]\n ${2})))\nsnippet pmethod\n (${1:name} [${2:this} ${3:args}])\nsnippet refer\n (:refer-clojure :exclude [${1}])\nsnippet require\n (:require [${1:namespace} :as [${2}]])\nsnippet use\n (:use [${1:namespace} :only [${2}]])\nsnippet print\n (println ${1})\nsnippet reduce\n (reduce ${1:(fn [p n] ${3})} ${2})\nsnippet when\n (when ${1:test} ${2:body})\nsnippet when-let\n (when-let [${1:result} ${2:test}]\n ${3:body})\n',t.scope="clojure"})
|
1
app/assets/lib/ace/snippets/lua.js
Normal file
1
app/assets/lib/ace/snippets/lua.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/snippets/lua",["require","exports","module"],function(e,t,n){t.snippetText="snippet #!\n #!/usr/bin/env lua\n $1\nsnippet local\n local ${1:x} = ${2:1}\nsnippet fun\n function ${1:fname}(${2:...})\n ${3:-- body}\n end\nsnippet for\n for ${1:i}=${2:1},${3:10} do\n ${4:print(i)}\n end\nsnippet forp\n for ${1:i},${2:v} in pairs(${3:table_name}) do\n ${4:-- body}\n end\nsnippet fori\n for ${1:i},${2:v} in ipairs(${3:table_name}) do\n ${4:-- body}\n end\n",t.scope="lua"})
|
1
app/assets/lib/ace/snippets/luapage.js
Normal file
1
app/assets/lib/ace/snippets/luapage.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/snippets/luapage",["require","exports","module"],function(e,t,n){t.snippetText="",t.scope="luapage"})
|
1
app/assets/lib/ace/snippets/plain_text.js
Normal file
1
app/assets/lib/ace/snippets/plain_text.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/snippets/plain_text",["require","exports","module"],function(e,t,n){t.snippetText="",t.scope="plain_text"})
|
1
app/assets/lib/ace/snippets/python.js
Normal file
1
app/assets/lib/ace/snippets/python.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/snippets/python",["require","exports","module"],function(e,t,n){t.snippetText='snippet #!\n #!/usr/bin/env python\nsnippet imp\n import ${1:module}\nsnippet from\n from ${1:package} import ${2:module}\n# Module Docstring\nsnippet docs\n \'\'\'\n File: ${1:FILENAME:file_name}\n Author: ${2:author}\n Description: ${3}\n \'\'\'\nsnippet wh\n while ${1:condition}:\n ${2:# TODO: write code...}\n# dowh - does the same as do...while in other languages\nsnippet dowh\n while True:\n ${1:# TODO: write code...}\n if ${2:condition}:\n break\nsnippet with\n with ${1:expr} as ${2:var}:\n ${3:# TODO: write code...}\n# New Class\nsnippet cl\n class ${1:ClassName}(${2:object}):\n """${3:docstring for $1}"""\n def __init__(self, ${4:arg}):\n ${5:super($1, self).__init__()}\n self.$4 = $4\n ${6}\n# New Function\nsnippet def\n def ${1:fname}(${2:`indent(\'.\') ? \'self\' : \'\'`}):\n """${3:docstring for $1}"""\n ${4:# TODO: write code...}\nsnippet deff\n def ${1:fname}(${2:`indent(\'.\') ? \'self\' : \'\'`}):\n ${3:# TODO: write code...}\n# New Method\nsnippet defs\n def ${1:mname}(self, ${2:arg}):\n ${3:# TODO: write code...}\n# New Property\nsnippet property\n def ${1:foo}():\n doc = "${2:The $1 property.}"\n def fget(self):\n ${3:return self._$1}\n def fset(self, value):\n ${4:self._$1 = value}\n# Ifs\nsnippet if\n if ${1:condition}:\n ${2:# TODO: write code...}\nsnippet el\n else:\n ${1:# TODO: write code...}\nsnippet ei\n elif ${1:condition}:\n ${2:# TODO: write code...}\n# For\nsnippet for\n for ${1:item} in ${2:items}:\n ${3:# TODO: write code...}\n# Encodes\nsnippet cutf8\n # -*- coding: utf-8 -*-\nsnippet clatin1\n # -*- coding: latin-1 -*-\nsnippet cascii\n # -*- coding: ascii -*-\n# Lambda\nsnippet ld\n ${1:var} = lambda ${2:vars} : ${3:action}\nsnippet .\n self.\nsnippet try Try/Except\n try:\n ${1:# TODO: write code...}\n except ${2:Exception}, ${3:e}:\n ${4:raise $3}\nsnippet try Try/Except/Else\n try:\n ${1:# TODO: write code...}\n except ${2:Exception}, ${3:e}:\n ${4:raise $3}\n else:\n ${5:# TODO: write code...}\nsnippet try Try/Except/Finally\n try:\n ${1:# TODO: write code...}\n except ${2:Exception}, ${3:e}:\n ${4:raise $3}\n finally:\n ${5:# TODO: write code...}\nsnippet try Try/Except/Else/Finally\n try:\n ${1:# TODO: write code...}\n except ${2:Exception}, ${3:e}:\n ${4:raise $3}\n else:\n ${5:# TODO: write code...}\n finally:\n ${6:# TODO: write code...}\n# if __name__ == \'__main__\':\nsnippet ifmain\n if __name__ == \'__main__\':\n ${1:main()}\n# __magic__\nsnippet _\n __${1:init}__${2}\n# python debugger (pdb)\nsnippet pdb\n import pdb; pdb.set_trace()\n# ipython debugger (ipdb)\nsnippet ipdb\n import ipdb; ipdb.set_trace()\n# ipython debugger (pdbbb)\nsnippet pdbbb\n import pdbpp; pdbpp.set_trace()\nsnippet pprint\n import pprint; pprint.pprint(${1})${2}\nsnippet "\n """\n ${1:doc}\n """\n# test function/method\nsnippet test\n def test_${1:description}(${2:self}):\n ${3:# TODO: write code...}\n# test case\nsnippet testcase\n class ${1:ExampleCase}(unittest.TestCase):\n \n def test_${2:description}(self):\n ${3:# TODO: write code...}\nsnippet fut\n from __future__ import ${1}\n#getopt\nsnippet getopt\n try:\n # Short option syntax: "hv:"\n # Long option syntax: "help" or "verbose="\n opts, args = getopt.getopt(sys.argv[1:], "${1:short_options}", [${2:long_options}])\n \n except getopt.GetoptError, err:\n # Print debug info\n print str(err)\n ${3:error_action}\n\n for option, argument in opts:\n if option in ("-h", "--help"):\n ${4}\n elif option in ("-v", "--verbose"):\n verbose = argument\n',t.scope="python"})
|
1
app/assets/lib/ace/snippets/ruby.js
Normal file
1
app/assets/lib/ace/snippets/ruby.js
Normal file
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/snippets/snippets.js
Normal file
1
app/assets/lib/ace/snippets/snippets.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/snippets/snippets",["require","exports","module"],function(e,t,n){t.snippetText="# snippets for making snippets :)\nsnippet snip\n snippet ${1:trigger}\n ${2}\nsnippet msnip\n snippet ${1:trigger} ${2:description}\n ${3}\nsnippet v\n {VISUAL}\n",t.scope="snippets"})
|
1
app/assets/lib/ace/snippets/text.js
Normal file
1
app/assets/lib/ace/snippets/text.js
Normal file
|
@ -0,0 +1 @@
|
|||
ace.define("ace/snippets/text",["require","exports","module"],function(e,t,n){t.snippetText="",t.scope="text"})
|
|
@ -1 +1 @@
|
|||
ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
|
||||
ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
|
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/worker-css.js
Normal file
1
app/assets/lib/ace/worker-css.js
Normal file
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/worker-html.js
Normal file
1
app/assets/lib/ace/worker-html.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/worker-json.js
Normal file
1
app/assets/lib/ace/worker-json.js
Normal file
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/worker-lua.js
Normal file
1
app/assets/lib/ace/worker-lua.js
Normal file
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/worker-php.js
Normal file
1
app/assets/lib/ace/worker-php.js
Normal file
File diff suppressed because one or more lines are too long
1
app/assets/lib/ace/worker-xquery.js
Normal file
1
app/assets/lib/ace/worker-xquery.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -37,141 +37,33 @@
|
|||
<script src="/javascripts/aether.js"></script>
|
||||
<script src="/javascripts/app.js"></script> <!-- it's all Backbone! -->
|
||||
|
||||
<script>
|
||||
window.linkedInAsyncInit = function() {
|
||||
console.log("Linkedin Async Init!");
|
||||
Backbone.Mediator.publish('linkedin-loaded');
|
||||
};
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" async src="http://platform.linkedin.com/in.js">
|
||||
api_key: 75v8mv4ictvmx6
|
||||
onLoad: linkedInAsyncInit
|
||||
authorize: true
|
||||
</script>
|
||||
|
||||
<script>
|
||||
window.userObject = "userObjectTag";
|
||||
</script>
|
||||
|
||||
<script>require('initialize');</script>
|
||||
|
||||
<!-- begin LinkedIn code -->
|
||||
<script>
|
||||
window.linkedInAsyncInit = function() {
|
||||
Backbone.Mediator.publish('linkedin-loaded');
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="http://platform.linkedin.com/in.js">
|
||||
api_key: 75v8mv4ictvmx6
|
||||
onLoad: linkedInAsyncInit
|
||||
authorize: true
|
||||
</script>
|
||||
<!-- end LinkedIn code -->
|
||||
<!-- begin segment.io code -->
|
||||
<script type="text/javascript">
|
||||
var analytics=analytics||[];(function(){var e=["identify","track","trackLink","trackForm","trackClick","trackSubmit","page","pageview","ab","alias","ready","group"],t=function(e){return function(){analytics.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var n=0;n<e.length;n++)analytics[e[n]]=t(e[n])})(),analytics.load=function(e){var t=document.createElement("script");t.type="text/javascript",t.async=!0,t.src=("https:"===document.location.protocol?"https://":"http://")+"d2dq2ahtl5zl1z.cloudfront.net/analytics.js/v1/"+e+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n)};
|
||||
analytics.load("jsjzx9n4d2");
|
||||
</script>
|
||||
<!-- end segment.io code -->
|
||||
|
||||
<!-- begin olark code -->
|
||||
<script data-cfasync="false" type='text/javascript'>/*<![CDATA[*/window.olark||(function(c){var f=window,d=document,l=f.location.protocol=="https:"?"https:":"http:",z=c.name,r="load";var nt=function(){
|
||||
f[z]=function(){
|
||||
(a.s=a.s||[]).push(arguments)};var a=f[z]._={
|
||||
},q=c.methods.length;while(q--){(function(n){f[z][n]=function(){
|
||||
f[z]("call",n,arguments)}})(c.methods[q])}a.l=c.loader;a.i=nt;a.p={
|
||||
0:+new Date};a.P=function(u){
|
||||
a.p[u]=new Date-a.p[0]};function s(){
|
||||
a.P(r);f[z](r)}f.addEventListener?f.addEventListener(r,s,false):f.attachEvent("on"+r,s);var ld=function(){function p(hd){
|
||||
hd="head";return["<",hd,"></",hd,"><",i,' onl' + 'oad="var d=',g,";d.getElementsByTagName('head')[0].",j,"(d.",h,"('script')).",k,"='",l,"//",a.l,"'",'"',"></",i,">"].join("")}var i="body",m=d[i];if(!m){
|
||||
return setTimeout(ld,100)}a.P(1);var j="appendChild",h="createElement",k="src",n=d[h]("div"),v=n[j](d[h](z)),b=d[h]("iframe"),g="document",e="domain",o;n.style.display="none";m.insertBefore(n,m.firstChild).id=z;b.frameBorder="0";b.id=z+"-loader";if(/MSIE[ ]+6/.test(navigator.userAgent)){
|
||||
b.src="javascript:false"}b.allowTransparency="true";v[j](b);try{
|
||||
b.contentWindow[g].open()}catch(w){
|
||||
c[e]=d[e];o="javascript:var d="+g+".open();d.domain='"+d.domain+"';";b[k]=o+"void(0);"}try{
|
||||
var t=b.contentWindow[g];t.write(p());t.close()}catch(x){
|
||||
b[k]=o+'d.write("'+p().replace(/"/g,String.fromCharCode(92)+'"')+'");d.close();'}a.P(2)};ld()};nt()})({
|
||||
loader: "static.olark.com/jsclient/loader0.js",name:"olark",methods:["configure","extend","declare","identify"]});
|
||||
/* custom configuration goes here (www.olark.com/documentation) */
|
||||
olark.identify('1451-787-10-5544');/*]]>*/</script>
|
||||
<!-- end olark code -->
|
||||
|
||||
|
||||
</head>
|
||||
<body class="nano clearfix">
|
||||
<div id="fb-root"></div>
|
||||
|
||||
<!-- begin facebook code -->
|
||||
<script>
|
||||
// Additional JS functions here
|
||||
window.fbAsyncInit = function() {
|
||||
Backbone.Mediator.publish('fbapi-loaded');
|
||||
FB.init({
|
||||
appId : document.location.origin === 'http://localhost:3000' ? '607435142676437' : '148832601965463', // App ID
|
||||
channelUrl : document.location.origin +'/channel.html', // Channel File
|
||||
status : true, // check login status
|
||||
cookie : true, // enable cookies to allow the server to access the session
|
||||
xfbml : true // parse XFBML
|
||||
});
|
||||
|
||||
// This is fired for any auth related change, such as login, logout or session refresh.
|
||||
FB.Event.subscribe('auth.authResponseChange', function(response) {
|
||||
// Here we specify what we do with the response anytime this event occurs.
|
||||
if (response.status === 'connected') {
|
||||
// They have logged in to the app.
|
||||
Backbone.Mediator.publish('facebook-logged-in', {response:response});
|
||||
} else if (response.status === 'not_authorized') {
|
||||
// The person is logged into Facebook, but not into the app.
|
||||
} else {
|
||||
// The person is not logged into Facebook
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Load the SDK asynchronously
|
||||
(function(d){
|
||||
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
|
||||
if (d.getElementById(id)) {return;}
|
||||
js = d.createElement('script'); js.id = id; js.async = true;
|
||||
js.src = "//connect.facebook.net/en_US/all.js";
|
||||
//js.src = "//connect.facebook.net/en_US/all/debug.js";
|
||||
ref.parentNode.insertBefore(js, ref);
|
||||
}(document));
|
||||
</script>
|
||||
<!-- end facebook code -->
|
||||
|
||||
|
||||
<header class="header-container" id="header-container"></header>
|
||||
|
||||
<div id="page-container" class="nano-content"></div>
|
||||
|
||||
<div id="modal-wrapper" class="modal-content"></div>
|
||||
|
||||
<!-- begin google api/plus code -->
|
||||
<script type="text/javascript">
|
||||
(function() {
|
||||
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
|
||||
po.src = 'https://apis.google.com/js/client:plusone.js?onload=onGPlusLoaded';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
|
||||
})();
|
||||
|
||||
function onGPlusLoaded() {
|
||||
Backbone.Mediator.publish('gapi-loaded');
|
||||
}
|
||||
|
||||
function signinCallback(authResult) {
|
||||
if (authResult['access_token']) {
|
||||
Backbone.Mediator.publish('gplus-logged-in', authResult)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<!-- end google api/plus code -->
|
||||
|
||||
<!-- begin twitter code -->
|
||||
<script>
|
||||
(function (d,s,id) {
|
||||
var js, fjs = d.getElementsByTagName(s)[0], p = /^http:/.test(d.location) ? 'http' : 'https';
|
||||
if(!d.getElementById(id)) {
|
||||
js = d.createElement(s);
|
||||
js.id = id;
|
||||
js.src = p + '://platform.twitter.com/widgets.js';
|
||||
fjs.parentNode.insertBefore(js, fjs);
|
||||
}
|
||||
})(document, 'script', 'twitter-wjs');
|
||||
</script>
|
||||
<!-- end twitter code -->
|
||||
|
||||
<!-- begin filepicker.io code -->
|
||||
<script type="text/javascript">
|
||||
(function(a){if(window.filepicker){return}var b=a.createElement("script");b.type="text/javascript";b.async=!0;b.src=("https:"===a.location.protocol?"https:":"http:")+"//api.filepicker.io/v1/filepicker.js";var c=a.getElementsByTagName("script")[0];c.parentNode.insertBefore(b,c);var d={};d._queue=[];var e="pick,pickMultiple,pickAndStore,read,write,writeUrl,export,convert,store,storeUrl,remove,stat,setKey,constructWidget,makeDropPane".split(",");var f=function(a,b){return function(){b.push([a,arguments])}};for(var g=0;g<e.length;g++){d[e[g]]=f(e[g],d._queue)}window.filepicker=d})(document);
|
||||
</script>
|
||||
<!-- end filepicker.io code -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -18,6 +18,11 @@ definitionSchemas =
|
|||
'misc': require './schemas/definitions/misc'
|
||||
|
||||
init = ->
|
||||
path = document.location.pathname
|
||||
testing = path.startsWith '/test'
|
||||
demoing = path.startsWith '/demo'
|
||||
initializeServices() unless testing or demoing
|
||||
|
||||
# Set up Backbone.Mediator schemas
|
||||
setUpDefinitions()
|
||||
setUpChannels()
|
||||
|
@ -28,7 +33,6 @@ init = ->
|
|||
|
||||
treemaExt = require 'treema-ext'
|
||||
treemaExt.setup()
|
||||
filepicker.setKey('AvlkNoldcTOU4PvKi2Xm7z')
|
||||
|
||||
$ -> init()
|
||||
|
||||
|
@ -60,3 +64,18 @@ setUpChannels = ->
|
|||
setUpDefinitions = ->
|
||||
for definition of definitionSchemas
|
||||
Backbone.Mediator.addDefSchemas definitionSchemas[definition]
|
||||
|
||||
initializeServices = ->
|
||||
services = [
|
||||
'./lib/services/filepicker'
|
||||
'./lib/services/segmentio'
|
||||
'./lib/services/olark'
|
||||
'./lib/services/facebook'
|
||||
'./lib/services/google'
|
||||
'./lib/services/twitter'
|
||||
'./lib/services/linkedin'
|
||||
]
|
||||
|
||||
for service in services
|
||||
service = require service
|
||||
service()
|
||||
|
|
|
@ -9,7 +9,7 @@ module.exports = class Angel extends CocoClass
|
|||
@nicks: ['Archer', 'Lana', 'Cyril', 'Pam', 'Cheryl', 'Woodhouse', 'Ray', 'Krieger']
|
||||
|
||||
infiniteLoopIntervalDuration: 7500 # check this often
|
||||
infiniteLoopTimeoutDuration: 5000 # wait this long for a response when checking
|
||||
infiniteLoopTimeoutDuration: 10000 # wait this long for a response when checking
|
||||
abortTimeoutDuration: 500 # give in-process or dying workers this long to give up
|
||||
|
||||
constructor: (@shared) ->
|
||||
|
|
|
@ -124,6 +124,8 @@ module.exports = class God extends CocoClass
|
|||
console.log "|#{@nick}'s debugger|", event.data.args...
|
||||
when 'debug-value-return'
|
||||
Backbone.Mediator.publish 'god:debug-value-return', event.data.serialized
|
||||
when 'debug-world-load-progress-changed'
|
||||
Backbone.Mediator.publish 'god:debug-world-load-progress-changed', event.data
|
||||
|
||||
onNewWorldCreated: (e) ->
|
||||
@currentUserCodeMap = @filterUserCodeMapWhenFromWorld e.world.userCodeMap
|
||||
|
|
|
@ -16,8 +16,9 @@ module.exports = class CocoRouter extends Backbone.Router
|
|||
# editor views tend to have the same general structure
|
||||
'editor/:model(/:slug_or_id)(/:subview)': 'editorModelView'
|
||||
|
||||
# Experimenting with direct links
|
||||
'test/*subpath': go('test')
|
||||
# Direct links
|
||||
'test/*subpath': go('TestView')
|
||||
'demo/*subpath': go('DemoView')
|
||||
'play/ladder/:levelID': go('play/ladder/ladder_view')
|
||||
'play/ladder': go('play/ladder_home')
|
||||
|
||||
|
|
48
app/lib/requireUtils.coffee
Normal file
48
app/lib/requireUtils.coffee
Normal file
|
@ -0,0 +1,48 @@
|
|||
module.exports.getParentFolders = (subPath, urlPrefix='/test/') ->
|
||||
return [] unless subPath
|
||||
paths = []
|
||||
parts = subPath.split('/')
|
||||
while parts.length
|
||||
parts.pop()
|
||||
paths.unshift {
|
||||
name: parts[parts.length-1] or 'All'
|
||||
url: urlPrefix + parts.join('/')
|
||||
}
|
||||
paths
|
||||
|
||||
module.exports.parseImmediateChildren = (allChildren, subPath, baseRequirePath='test/app/', urlPrefix='/test/') ->
|
||||
return [] unless allChildren
|
||||
folders = {}
|
||||
files = {}
|
||||
|
||||
requirePrefix = baseRequirePath + subPath
|
||||
if requirePrefix[requirePrefix.length-1] isnt '/'
|
||||
requirePrefix += '/'
|
||||
|
||||
for f in allChildren
|
||||
f = f[requirePrefix.length..]
|
||||
continue unless f
|
||||
parts = f.split('/')
|
||||
name = parts[0]
|
||||
group = if parts.length is 1 then files else folders
|
||||
group[name] ?= 0
|
||||
group[name] += 1
|
||||
|
||||
children = []
|
||||
urlPrefix += subPath
|
||||
urlPrefix += '/' if urlPrefix[urlPrefix.length-1] isnt '/'
|
||||
|
||||
for name in _.keys(folders)
|
||||
children.push {
|
||||
type:'folder',
|
||||
url: urlPrefix+name
|
||||
name: name+'/'
|
||||
size: folders[name]
|
||||
}
|
||||
for name in _.keys(files)
|
||||
children.push {
|
||||
type:'file',
|
||||
url: urlPrefix+name
|
||||
name: name
|
||||
}
|
||||
children
|
42
app/lib/services/facebook.coffee
Normal file
42
app/lib/services/facebook.coffee
Normal file
|
@ -0,0 +1,42 @@
|
|||
module.exports = initializeFacebook = ->
|
||||
# Additional JS functions here
|
||||
window.fbAsyncInit = ->
|
||||
Backbone.Mediator.publish "fbapi-loaded"
|
||||
FB.init
|
||||
appId: (if document.location.origin is "http://localhost:3000" then "607435142676437" else "148832601965463") # App ID
|
||||
channelUrl: document.location.origin + "/channel.html" # Channel File
|
||||
status: true # check login status
|
||||
cookie: true # enable cookies to allow the server to access the session
|
||||
xfbml: true # parse XFBML
|
||||
|
||||
|
||||
# This is fired for any auth related change, such as login, logout or session refresh.
|
||||
FB.Event.subscribe "auth.authResponseChange", (response) ->
|
||||
|
||||
# Here we specify what we do with the response anytime this event occurs.
|
||||
if response.status is "connected"
|
||||
|
||||
# They have logged in to the app.
|
||||
Backbone.Mediator.publish "facebook-logged-in",
|
||||
response: response
|
||||
|
||||
else if response.status is "not_authorized"
|
||||
#
|
||||
else
|
||||
#
|
||||
|
||||
# Load the SDK asynchronously
|
||||
((d) ->
|
||||
js = undefined
|
||||
id = "facebook-jssdk"
|
||||
ref = d.getElementsByTagName("script")[0]
|
||||
return if d.getElementById(id)
|
||||
js = d.createElement("script")
|
||||
js.id = id
|
||||
js.async = true
|
||||
js.src = "//connect.facebook.net/en_US/all.js"
|
||||
|
||||
#js.src = "//connect.facebook.net/en_US/all/debug.js";
|
||||
ref.parentNode.insertBefore js, ref
|
||||
return
|
||||
) document
|
29
app/lib/services/filepicker.coffee
Normal file
29
app/lib/services/filepicker.coffee
Normal file
|
@ -0,0 +1,29 @@
|
|||
module.exports = initializeFilepicker = ->
|
||||
((a) ->
|
||||
return if window.filepicker
|
||||
b = a.createElement("script")
|
||||
b.type = "text/javascript"
|
||||
b.async = not 0
|
||||
b.src = ((if "https:" is a.location.protocol then "https:" else "http:")) + "//api.filepicker.io/v1/filepicker.js"
|
||||
c = a.getElementsByTagName("script")[0]
|
||||
c.parentNode.insertBefore b, c
|
||||
d = {}
|
||||
d._queue = []
|
||||
e = "pick,pickMultiple,pickAndStore,read,write,writeUrl,export,convert,store,storeUrl,remove,stat,setKey,constructWidget,makeDropPane".split(",")
|
||||
f = (a, b) ->
|
||||
->
|
||||
b.push [
|
||||
a
|
||||
arguments
|
||||
]
|
||||
return
|
||||
|
||||
g = 0
|
||||
|
||||
while g < e.length
|
||||
d[e[g]] = f(e[g], d._queue)
|
||||
g++
|
||||
d.setKey('AvlkNoldcTOU4PvKi2Xm7z')
|
||||
window.filepicker = d
|
||||
return
|
||||
) document
|
16
app/lib/services/google.coffee
Normal file
16
app/lib/services/google.coffee
Normal file
|
@ -0,0 +1,16 @@
|
|||
module.exports = initializeGoogle = ->
|
||||
onGPlusLoaded = ->
|
||||
Backbone.Mediator.publish "gapi-loaded"
|
||||
return
|
||||
signinCallback = (authResult) ->
|
||||
Backbone.Mediator.publish "gplus-logged-in", authResult if authResult["access_token"]
|
||||
return
|
||||
(->
|
||||
po = document.createElement("script")
|
||||
po.type = "text/javascript"
|
||||
po.async = true
|
||||
po.src = "https://apis.google.com/js/client:plusone.js?onload=onGPlusLoaded"
|
||||
s = document.getElementsByTagName("script")[0]
|
||||
s.parentNode.insertBefore po, s
|
||||
return
|
||||
)()
|
9
app/lib/services/linkedin.coffee
Normal file
9
app/lib/services/linkedin.coffee
Normal file
|
@ -0,0 +1,9 @@
|
|||
module.exports = initializeLinkedIn = ->
|
||||
window.linkedInAsyncInit = ->
|
||||
console.log "Linkedin async init success!"
|
||||
Backbone.Mediator.publish 'linkedin-loaded'
|
||||
|
||||
linkedInSnippet =
|
||||
''
|
||||
|
||||
$('head').append(linkedInSnippet)
|
116
app/lib/services/olark.coffee
Normal file
116
app/lib/services/olark.coffee
Normal file
|
@ -0,0 +1,116 @@
|
|||
module.exports = initializeOlark = ->
|
||||
window.olark or ((c) -> #<![CDATA[
|
||||
f = window
|
||||
d = document
|
||||
l = (if f.location.protocol is "https:" then "https:" else "http:")
|
||||
z = c.name
|
||||
r = "load"
|
||||
nt = ->
|
||||
s = ->
|
||||
a.P r
|
||||
f[z] r
|
||||
return
|
||||
f[z] = ->
|
||||
(a.s = a.s or []).push arguments
|
||||
return
|
||||
|
||||
a = f[z]._ = {}
|
||||
q = c.methods.length
|
||||
while q--
|
||||
((n) ->
|
||||
f[z][n] = ->
|
||||
f[z] "call", n, arguments
|
||||
return
|
||||
|
||||
return
|
||||
) c.methods[q]
|
||||
a.l = c.loader
|
||||
a.i = nt
|
||||
a.p = 0: +new Date
|
||||
a.P = (u) ->
|
||||
a.p[u] = new Date - a.p[0]
|
||||
return
|
||||
|
||||
(if f.addEventListener then f.addEventListener(r, s, false) else f.attachEvent("on" + r, s))
|
||||
ld = ->
|
||||
p = (hd) ->
|
||||
hd = "head"
|
||||
[
|
||||
"<"
|
||||
hd
|
||||
"></"
|
||||
hd
|
||||
"><"
|
||||
i
|
||||
" onl" + "oad=\"var d="
|
||||
g
|
||||
";d.getElementsByTagName('head')[0]."
|
||||
j
|
||||
"(d."
|
||||
h
|
||||
"('script'))."
|
||||
k
|
||||
"='"
|
||||
l
|
||||
"//"
|
||||
a.l
|
||||
"'"
|
||||
"\""
|
||||
"></"
|
||||
i
|
||||
">"
|
||||
].join ""
|
||||
i = "body"
|
||||
m = d[i]
|
||||
return setTimeout(ld, 100) unless m
|
||||
a.P 1
|
||||
j = "appendChild"
|
||||
h = "createElement"
|
||||
k = "src"
|
||||
n = d[h]("div")
|
||||
v = n[j](d[h](z))
|
||||
b = d[h]("iframe")
|
||||
g = "document"
|
||||
e = "domain"
|
||||
o = undefined
|
||||
n.style.display = "none"
|
||||
m.insertBefore(n, m.firstChild).id = z
|
||||
b.frameBorder = "0"
|
||||
b.id = z + "-loader"
|
||||
b.src = "javascript:false" if /MSIE[ ]+6/.test(navigator.userAgent)
|
||||
b.allowTransparency = "true"
|
||||
v[j] b
|
||||
try
|
||||
b.contentWindow[g].open()
|
||||
catch w
|
||||
c[e] = d[e]
|
||||
o = "javascript:var d=" + g + ".open();d.domain='" + d.domain + "';"
|
||||
b[k] = o + "void(0);"
|
||||
try
|
||||
t = b.contentWindow[g]
|
||||
t.write p()
|
||||
t.close()
|
||||
catch x
|
||||
b[k] = o + "d.write(\"" + p().replace(/"/g, String.fromCharCode(92) + "\"") + "\");d.close();"
|
||||
a.P 2
|
||||
return
|
||||
|
||||
ld()
|
||||
return
|
||||
|
||||
nt()
|
||||
return
|
||||
)(
|
||||
loader: "static.olark.com/jsclient/loader0.js"
|
||||
name: "olark"
|
||||
methods: [
|
||||
"configure"
|
||||
"extend"
|
||||
"declare"
|
||||
"identify"
|
||||
]
|
||||
)
|
||||
|
||||
# custom configuration goes here (www.olark.com/documentation)
|
||||
olark.identify "1451-787-10-5544" #]]>
|
||||
|
41
app/lib/services/segmentio.coffee
Normal file
41
app/lib/services/segmentio.coffee
Normal file
|
@ -0,0 +1,41 @@
|
|||
module.exports = initializeSegmentio = ->
|
||||
analytics = analytics or []
|
||||
(->
|
||||
e = [
|
||||
"identify"
|
||||
"track"
|
||||
"trackLink"
|
||||
"trackForm"
|
||||
"trackClick"
|
||||
"trackSubmit"
|
||||
"page"
|
||||
"pageview"
|
||||
"ab"
|
||||
"alias"
|
||||
"ready"
|
||||
"group"
|
||||
]
|
||||
t = (e) ->
|
||||
->
|
||||
analytics.push [e].concat(Array::slice.call(arguments, 0))
|
||||
return
|
||||
|
||||
n = 0
|
||||
|
||||
while n < e.length
|
||||
analytics[e[n]] = t(e[n])
|
||||
n++
|
||||
return
|
||||
)()
|
||||
analytics.load = (e) ->
|
||||
t = document.createElement("script")
|
||||
t.type = "text/javascript"
|
||||
t.async = not 0
|
||||
t.src = ((if "https:" is document.location.protocol then "https://" else "http://")) + "d2dq2ahtl5zl1z.cloudfront.net/analytics.js/v1/" + e + "/analytics.min.js"
|
||||
|
||||
n = document.getElementsByTagName("script")[0]
|
||||
n.parentNode.insertBefore t, n
|
||||
return
|
||||
|
||||
|
||||
analytics.load "jsjzx9n4d2"
|
12
app/lib/services/twitter.coffee
Normal file
12
app/lib/services/twitter.coffee
Normal file
|
@ -0,0 +1,12 @@
|
|||
module.exports = initializeTwitter = ->
|
||||
((d, s, id) ->
|
||||
js = undefined
|
||||
fjs = d.getElementsByTagName(s)[0]
|
||||
p = (if /^http:/.test(d.location) then "http" else "https")
|
||||
unless d.getElementById(id)
|
||||
js = d.createElement(s)
|
||||
js.id = id
|
||||
js.src = p + "://platform.twitter.com/widgets.js"
|
||||
fjs.parentNode.insertBefore js, fjs
|
||||
return
|
||||
) document, "script", "twitter-wjs"
|
|
@ -400,6 +400,8 @@ module.exports = class Simulator extends CocoClass
|
|||
executionLimit: 1 * 1000 * 1000
|
||||
if methodName is 'hear'
|
||||
aetherOptions.functionParameters = ['speaker', 'message', 'data']
|
||||
if methodName is 'makeBid'
|
||||
aetherOptions.functionParameters = ['blockNumber']
|
||||
#console.log "creating aether with options", aetherOptions
|
||||
return new Aether aetherOptions
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ module.exports = class World
|
|||
for thang in @thangs when thang.isProgrammable
|
||||
userCode = @userCodeMap[thang.id] ? {}
|
||||
for methodName, aether of userCode
|
||||
framesToLoadFlowBefore = if methodName is 'plan' then 200 else 1 # Adjust if plan() is taking even longer
|
||||
framesToLoadFlowBefore = if methodName is 'plan' or methodName is 'makeBid' then 200 else 1 # Adjust if plan() is taking even longer
|
||||
aether._shouldSkipFlow = i < loadUntilFrame - framesToLoadFlowBefore
|
||||
try
|
||||
@getFrame(i)
|
||||
|
|
|
@ -282,6 +282,7 @@
|
|||
education_description: "Description"
|
||||
education_description_help: "Highlight anything about this educational experience. (140 chars; optional)"
|
||||
our_notes: "Our Notes"
|
||||
remarks: "Remarks"
|
||||
projects: "Projects"
|
||||
projects_header: "Add 3 projects"
|
||||
projects_header_2: "Projects (Top 3)"
|
||||
|
@ -320,6 +321,7 @@
|
|||
candidate_top_skills: "Top Skills"
|
||||
candidate_years_experience: "Yrs Exp"
|
||||
candidate_last_updated: "Last Updated"
|
||||
candidate_who: "Who"
|
||||
featured_developers: "Featured Developers"
|
||||
other_developers: "Other Developers"
|
||||
inactive_developers: "Inactive Developers"
|
||||
|
@ -382,6 +384,8 @@
|
|||
editor_config_keybindings_label: "Key Bindings"
|
||||
editor_config_keybindings_default: "Default (Ace)"
|
||||
editor_config_keybindings_description: "Adds additional shortcuts known from the common editors."
|
||||
editor_config_livecompletion_label: "Live Autocompletion"
|
||||
editor_config_livecompletion_description: "Displays autocomplete suggestions while typing."
|
||||
editor_config_invisibles_label: "Show Invisibles"
|
||||
editor_config_invisibles_description: "Displays invisibles such as spaces or tabs."
|
||||
editor_config_indentguides_label: "Show Indent Guides"
|
||||
|
@ -882,6 +886,7 @@
|
|||
document: "Document"
|
||||
sprite_sheet: "Sprite Sheet"
|
||||
candidate_sessions: "Candidate Sessions"
|
||||
user_remark: "User Remark"
|
||||
|
||||
delta:
|
||||
added: "Added"
|
||||
|
|
|
@ -425,7 +425,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
|
|||
infinite_loop_reset_level: "Сбросить уровень"
|
||||
infinite_loop_comment_out: "Закомментировать мой код"
|
||||
|
||||
# keyboard_shortcuts:
|
||||
keyboard_shortcuts:
|
||||
keyboard_shortcuts: "Горячие клавиши"
|
||||
space: "Пробел"
|
||||
enter: "Enter"
|
||||
|
|
6
app/models/UserRemark.coffee
Normal file
6
app/models/UserRemark.coffee
Normal file
|
@ -0,0 +1,6 @@
|
|||
CocoModel = require('./CocoModel')
|
||||
|
||||
module.exports = class UserRemark extends CocoModel
|
||||
@className: "UserRemark"
|
||||
@schema: require 'schemas/models/user_remark'
|
||||
urlRoot: "/db/user.remark"
|
|
@ -7,8 +7,8 @@ module.exports =
|
|||
type: "object"
|
||||
properties: # TODO
|
||||
joined:
|
||||
type: "boolean"
|
||||
type: ["boolean", "null"]
|
||||
players:
|
||||
type: "object"
|
||||
required: ["joined", "players"]
|
||||
additionalProperties: false
|
||||
additionalProperties: true
|
||||
|
|
|
@ -30,6 +30,16 @@ PropertyDocumentationSchema = c.object {
|
|||
args: c.array {title: "Arguments", description: "If this property has type 'function', then provide documentation for any function arguments."}, c.FunctionArgumentSchema
|
||||
owner: {title: "Owner", type: 'string', description: 'Owner of the property, like "this" or "Math".'}
|
||||
example: {title: "Example", type: 'string', description: 'An optional example code block.', format: 'javascript'}
|
||||
snippets: c.object {
|
||||
title: "Snippets",
|
||||
description: "List of snippets for the respective programming languages"
|
||||
},
|
||||
javascript: c.object {title: 'JavaScript'}, c.codeSnippet 'javascript'
|
||||
coffeescript: c.object {title: 'CoffeeScript'}, c.codeSnippet 'coffee'
|
||||
python: c.object {title: 'Python'}, c.codeSnippet 'python'
|
||||
clojure: c.object {title: 'Clojure'}, c.codeSnippet 'clojure'
|
||||
lua: c.object {title: 'Lua'}, c.codeSnippet 'lua'
|
||||
io: c.object {title: 'IO'}, c.codeSnippet 'io'
|
||||
returns: c.object {
|
||||
title: "Return Value"
|
||||
description: 'Optional documentation of any return value.'
|
||||
|
|
|
@ -65,6 +65,7 @@ UserSchema = c.object {},
|
|||
invisibles: {type: 'boolean', 'default': false}
|
||||
indentGuides: {type: 'boolean', 'default': false}
|
||||
behaviors: {type: 'boolean', 'default': false}
|
||||
liveCompletion: {type: 'boolean', 'default': true}
|
||||
|
||||
simulatedBy: {type: 'integer', minimum: 0, default: 0}
|
||||
simulatedFor: {type: 'integer', minimum: 0, default: 0}
|
||||
|
|
24
app/schemas/models/user_remark.coffee
Normal file
24
app/schemas/models/user_remark.coffee
Normal file
|
@ -0,0 +1,24 @@
|
|||
c = require './../schemas'
|
||||
|
||||
UserRemarkSchema = c.object {
|
||||
title: "Remark"
|
||||
description: "Remarks on a user, point of contact, tasks."
|
||||
}
|
||||
|
||||
_.extend UserRemarkSchema.properties,
|
||||
user: c.objectId links: [{rel: 'extra', href: "/db/user/{($)}"}]
|
||||
contact: c.objectId links: [{rel: 'extra', href: "/db/user/{($)}"}]
|
||||
created: c.date title: 'Created', readOnly: true
|
||||
history: c.array {title: 'History', description: 'Records of our interactions with the user.'},
|
||||
c.object {title: 'Record'}, {date: c.date(title: 'Date'), content: {title: 'Content', type: 'string', format: 'markdown'}}
|
||||
tasks: c.array {title: 'Tasks', description: 'Task entries: when to email the contact about something.'},
|
||||
c.object {title: 'Task'}, {date: c.date(title: 'Date'), action: {title: 'Action', type: 'string'}}
|
||||
|
||||
# denormalization
|
||||
userName: { title: "Player Name", type: 'string' }
|
||||
contactName: { title: "Contact Name", type: 'string' } # Not actually our usernames
|
||||
|
||||
|
||||
c.extendBasicProperties UserRemarkSchema, 'user.remark'
|
||||
|
||||
module.exports = UserRemarkSchema
|
|
@ -171,7 +171,14 @@ me.FunctionArgumentSchema = me.object {
|
|||
description: "Default value of the argument. (Your code should set this.)"
|
||||
"default": null
|
||||
|
||||
me.codeSnippet = (mode) ->
|
||||
return snippet =
|
||||
code: {type: 'string', title: 'Snippet', default: '', description: 'Code snippet. Use ${1:defaultValue} syntax to add flexible arguments'}
|
||||
# code: {type: 'string', format: 'ace', aceMode: 'ace/mode/'+mode, title: 'Snippet', default: '', description: 'Code snippet. Use ${1:defaultValue} syntax to add flexible arguments'}
|
||||
tab: {type: 'string', description: 'Tab completion text. Will be expanded to the snippet if typed and hit tab.'}
|
||||
|
||||
me.activity = me.object {description: "Stats on an activity"},
|
||||
first: me.date()
|
||||
last: me.date()
|
||||
count: {type: 'integer', minimum: 0}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ module.exports =
|
|||
type: "object"
|
||||
properties:
|
||||
message:
|
||||
type: "string"
|
||||
type: "object"
|
||||
bus:
|
||||
$ref: "bus"
|
||||
|
||||
|
|
|
@ -193,6 +193,11 @@
|
|||
width: 100%
|
||||
height: 100px
|
||||
|
||||
#remark-treema
|
||||
background-color: white
|
||||
border: 0
|
||||
padding-top: 0
|
||||
|
||||
.right-column
|
||||
width: $side-width
|
||||
background-color: $sideBackground
|
||||
|
|
14
app/styles/demo.sass
Normal file
14
app/styles/demo.sass
Normal file
|
@ -0,0 +1,14 @@
|
|||
#demo-view
|
||||
margin: 0 20px
|
||||
|
||||
h2
|
||||
background: #add8e6
|
||||
font-family: Arial, Geneva, sans-serif
|
||||
padding: 20px
|
||||
font-weight: bold
|
||||
|
||||
#demo-wrapper
|
||||
width: 78%
|
||||
|
||||
#demo-nav
|
||||
width: 20%
|
|
@ -8,4 +8,11 @@
|
|||
padding: 10px
|
||||
background: transparent url(/images/level/popover_background.png)
|
||||
background-size: 100% 100%
|
||||
.progress
|
||||
position: relative
|
||||
span
|
||||
position: absolute
|
||||
display: block
|
||||
color: black
|
||||
width: 100%
|
||||
|
||||
|
|
|
@ -43,7 +43,9 @@ block content
|
|||
i.icon-eye-close
|
||||
span(data-i18n='account_profile.not_featured') Not Featured
|
||||
if me.isAdmin() && !myProfile
|
||||
button.btn.edit-settings-button#enter-espionage-mode 007
|
||||
button.btn#enter-espionage-mode 007
|
||||
if me.isAdmin()
|
||||
button.btn#open-model-modal Raw
|
||||
|
||||
if profile && allowedToViewJobProfile
|
||||
div(class="job-profile-container" + (editing ? " editable-profile" : ""))
|
||||
|
@ -169,6 +171,10 @@ block content
|
|||
button#contact-candidate.btn.btn-large.btn-inverse.flat-button
|
||||
span(data-i18n="account_profile.contact") Contact
|
||||
| #{profile.name.split(' ')[0]}
|
||||
if me.isAdmin()
|
||||
select#admin-contact.form-control
|
||||
for contact in adminContacts
|
||||
option(value=contact.id, selected=remark && remark.get('contact') == contact.id)= contact.name
|
||||
|
||||
if !editing && sessions.length
|
||||
h3(data-i18n="account_profile.player_code") Player Code
|
||||
|
@ -191,9 +197,12 @@ block content
|
|||
if editing && !profile.name
|
||||
h3.edit-label(data-i18n="account_profile.name_header") Fill in your name
|
||||
else if profile.name
|
||||
h3= profile.name
|
||||
h3= profile.name + (me.isAdmin() ? ' (' + user.get('name') + ')' : '')
|
||||
else
|
||||
h3(data-i18n="account_profile.name_anonymous") Anonymous Developer
|
||||
h3
|
||||
span(data-i18n="account_profile.name_anonymous") Anonymous Developer
|
||||
if me.isAdmin()
|
||||
span (#{user.get('name')})
|
||||
|
||||
form.editable-form
|
||||
.editable-icon.glyphicon.glyphicon-remove
|
||||
|
@ -396,6 +405,10 @@ block content
|
|||
else
|
||||
div!= marked(notes)
|
||||
|
||||
if me.isAdmin()
|
||||
h3(data-i18n="account_profile.remarks") Remarks
|
||||
#remark-treema
|
||||
|
||||
.right-column.full-height-column
|
||||
.sub-column
|
||||
#projects-container.editable-section
|
||||
|
|
22
app/templates/demo.jade
Normal file
22
app/templates/demo.jade
Normal file
|
@ -0,0 +1,22 @@
|
|||
h2 Demo Page
|
||||
|
||||
ol.breadcrumb
|
||||
for path in parentFolders
|
||||
li
|
||||
a(href=path.url)= path.name
|
||||
li.active= currentFolder
|
||||
|
||||
.well.pull-left#demo-wrapper
|
||||
#demo-area
|
||||
|
||||
.nav.nav-pills.nav-stacked.pull-right.well#demo-nav
|
||||
for child in children
|
||||
li(class=child.type)
|
||||
a(href=child.url).small
|
||||
if child.type == 'folder'
|
||||
span.glyphicon.glyphicon-folder-close
|
||||
else
|
||||
span.glyphicon.glyphicon-file
|
||||
span.spl= child.name
|
||||
if child.type == 'folder'
|
||||
strong (#{child.size})
|
|
@ -84,6 +84,8 @@ block content
|
|||
th(data-i18n="employers.candidate_top_skills") Top Skills
|
||||
th(data-i18n="employers.candidate_years_experience") Yrs Exp
|
||||
th(data-i18n="employers.candidate_last_updated") Last Updated
|
||||
if me.isAdmin()
|
||||
th(data-i18n="employers.candidate_who") Who
|
||||
if me.isAdmin() && area.id == 'inactive-candidates'
|
||||
th ✓?
|
||||
|
||||
|
@ -95,7 +97,10 @@ block content
|
|||
td
|
||||
if authorized
|
||||
img(src=candidate.getPhotoURL(50), alt=profile.name, title=profile.name, height=50)
|
||||
p= profile.name
|
||||
if profile.name
|
||||
p= profile.name
|
||||
else if me.isAdmin()
|
||||
p (#{candidate.get('name')})
|
||||
else
|
||||
img(src="/images/pages/contribute/archmage.png", alt="", title="Sign up as an employer to see our candidates", width=50)
|
||||
p Developer ##{index + 1 + (area.id == 'featured-candidates' ? 0 : featuredCandidates.length)}
|
||||
|
@ -111,6 +116,8 @@ block content
|
|||
span
|
||||
td= profile.experience
|
||||
td(data-profile-age=(new Date() - new Date(profile.updated)) / 86400 / 1000)= moment(profile.updated).fromNow()
|
||||
if me.isAdmin()
|
||||
td= remarks[candidate.id] ? remarks[candidate.id].get('contactName') : ''
|
||||
if me.isAdmin() && area.id == 'inactive-candidates'
|
||||
if candidate.get('jobProfileApproved')
|
||||
td ✓
|
||||
|
|
|
@ -4,6 +4,8 @@ block modal-header
|
|||
|
||||
block modal-body-content
|
||||
for model in models
|
||||
h3= model.type() + ': ' + model.id
|
||||
.model-treema(data-model-id=model.id)
|
||||
.model-container(data-model-id=model.id)
|
||||
h3= model.type() + ': ' + model.id
|
||||
.model-treema(data-model-id=model.id)
|
||||
btn.btn.btn-success.save-model(data-i18n="common.save") Save
|
||||
hr
|
||||
|
|
|
@ -27,6 +27,12 @@ block modal-body-content
|
|||
option(value="emacs" selected=(keyBindings === "emacs")) Emacs
|
||||
span.help-block(data-i18n="play_level.editor_config_keybindings_description") Adds additional shortcuts known from the common editors.
|
||||
|
||||
.form-group.checkbox
|
||||
label(for="tome-live-completion")
|
||||
input#tome-live-completion(name="liveCompletion", type="checkbox", checked=liveCompletion)
|
||||
span(data-i18n="play_level.editor_config_livecompletion_label") Live Autocompletion
|
||||
span.help-block(data-i18n="play_level.editor_config_livecompletion_description") Displays autocomplete suggestions while typing.
|
||||
|
||||
.form-group.checkbox
|
||||
label(for="tome-invisibles")
|
||||
input#tome-invisibles(name="invisibles", type="checkbox", checked=invisibles)
|
||||
|
|
|
@ -1,2 +1,6 @@
|
|||
div.progress
|
||||
.progress-bar(role="progressbar", aria-valuenow="50", aria-valuemin="0", aria-valuemax="100")
|
||||
span Inspecting variable...
|
||||
pre
|
||||
|
||||
code
|
|
@ -6,6 +6,8 @@ locale = require 'locale/locale'
|
|||
class DateTimeTreema extends TreemaNode.nodeMap.string
|
||||
valueClass: 'treema-date-time'
|
||||
buildValueForDisplay: (el) -> el.text(moment(@data).format('llll'))
|
||||
buildValueForEditing: (valEl) ->
|
||||
@buildValueForEditingSimply valEl, null, 'date'
|
||||
|
||||
class VersionTreema extends TreemaNode
|
||||
valueClass: 'treema-version'
|
||||
|
|
88
app/views/DemoView.coffee
Normal file
88
app/views/DemoView.coffee
Normal file
|
@ -0,0 +1,88 @@
|
|||
CocoView = require 'views/kinds/CocoView'
|
||||
template = require 'templates/demo'
|
||||
requireUtils = require 'lib/requireUtils'
|
||||
|
||||
DEMO_REQUIRE_PREFIX = 'test/demo/'
|
||||
DEMO_URL_PREFIX = '/demo/'
|
||||
|
||||
###
|
||||
What are demo files?
|
||||
|
||||
They could be a function which returns an element to insert into the demo page.
|
||||
But what about demoing achievements? They'll get put into the main html. Or modals.
|
||||
Well, I was thinking that a single folder would show all demos at the same time, line them up.
|
||||
But it'd be confusing to have a whole bunch of achievement demos show up all at the same time?
|
||||
Maybe there could be a button to show all the demos. Hmm, that'd be cool.
|
||||
It could work like Jasmine, where it modifies the path and so when you select to run them, they all run with page reloads.
|
||||
I think for now, I'll just say: have it be a function which we can run anytime.
|
||||
It may or may not return an element to be inserted into the main area.
|
||||
|
||||
Another idea. Do we want root views to just take over the full view?
|
||||
Or should they just go into the central part?
|
||||
Probably should take over the full view, and if you want to get out of the demo, you navigate back.
|
||||
|
||||
###
|
||||
|
||||
module.exports = DemoView = class DemoView extends CocoView
|
||||
id: "demo-view"
|
||||
template: template
|
||||
|
||||
# INITIALIZE
|
||||
|
||||
constructor: (options, @subPath='') ->
|
||||
super(options)
|
||||
@subPath = @subPath[1..] if @subPath[0] is '/'
|
||||
@loadDemoingLibs() unless DemoView.loaded
|
||||
|
||||
loadDemoingLibs: ->
|
||||
@queue = new createjs.LoadQueue()
|
||||
@queue.on('complete', @scriptsLoaded, @)
|
||||
window.jasmine = {} # so that mock-ajax properly loads. It expects jasmine to be loaded
|
||||
for f in ['mock-ajax', 'demo-app']
|
||||
@queue.loadFile({
|
||||
src: "/javascripts/#{f}.js"
|
||||
type: createjs.LoadQueue.JAVASCRIPT
|
||||
})
|
||||
|
||||
scriptsLoaded: ->
|
||||
@initDemoFiles()
|
||||
@children = requireUtils.parseImmediateChildren(@demoFiles, @subPath, DEMO_REQUIRE_PREFIX, DEMO_URL_PREFIX)
|
||||
@render()
|
||||
@runDemo()
|
||||
|
||||
# RENDER DATA
|
||||
|
||||
getRenderData: ->
|
||||
c = super(arguments...)
|
||||
c.parentFolders = requireUtils.getParentFolders(@subPath, DEMO_URL_PREFIX)
|
||||
c.children = @children or []
|
||||
parts = @subPath.split('/')
|
||||
c.currentFolder = parts[parts.length-1] or parts[parts.length-2] or 'All'
|
||||
c
|
||||
|
||||
# RUNNING DEMOS
|
||||
|
||||
initDemoFiles: ->
|
||||
@demoFiles = @getAllDemoFiles()
|
||||
if @subPath
|
||||
prefix = DEMO_REQUIRE_PREFIX + @subPath
|
||||
@demoFiles = (f for f in @demoFiles when f.startsWith prefix)
|
||||
|
||||
runDemo: ->
|
||||
# TODO: Maybe have an option to run all demos in this folder at the same time?
|
||||
return unless @subPath and _.last(@subPath.split('/')).indexOf('.demo') > -1
|
||||
requirePath = DEMO_REQUIRE_PREFIX + @subPath
|
||||
demoFunc = require requirePath
|
||||
if not _.isFunction(demoFunc)
|
||||
console.error "Demo files must export a function. #{requirePath} does not."
|
||||
return
|
||||
|
||||
jasmine.Ajax.install()
|
||||
view = demoFunc()
|
||||
return unless view
|
||||
@$el.find('#demo-area').empty().append(view.$el)
|
||||
# TODO, maybe handle root views differently than modal views differently than everything else?
|
||||
|
||||
getAllDemoFiles: ->
|
||||
allFiles = window.require.list()
|
||||
(f for f in allFiles when f.indexOf('.demo') > -1)
|
|
@ -1,7 +1,9 @@
|
|||
CocoView = require 'views/kinds/CocoView'
|
||||
template = require 'templates/test'
|
||||
requireUtils = require 'lib/requireUtils'
|
||||
|
||||
TEST_BASE_PATH = 'test/app/'
|
||||
TEST_REQUIRE_PREFIX = 'test/app/'
|
||||
TEST_URL_PREFIX = '/test/'
|
||||
|
||||
module.exports = TestView = class TestView extends CocoView
|
||||
id: "test-view"
|
||||
|
@ -13,7 +15,7 @@ module.exports = TestView = class TestView extends CocoView
|
|||
constructor: (options, @subPath='') ->
|
||||
super(options)
|
||||
@subPath = @subPath[1..] if @subPath[0] is '/'
|
||||
@loadTestingLibs() unless TestView.loaded
|
||||
@loadTestingLibs()
|
||||
|
||||
loadTestingLibs: ->
|
||||
@queue = new createjs.LoadQueue()
|
||||
|
@ -28,72 +30,24 @@ module.exports = TestView = class TestView extends CocoView
|
|||
@initSpecFiles()
|
||||
@render()
|
||||
TestView.runTests(@specFiles)
|
||||
window.runJasmine()
|
||||
|
||||
# RENDER DATA
|
||||
|
||||
getRenderData: ->
|
||||
c = super(arguments...)
|
||||
c.parentFolders = @getParentFolders()
|
||||
c.children = @getChildren()
|
||||
c.parentFolders = requireUtils.getParentFolders(@subPath, TEST_URL_PREFIX)
|
||||
c.children = requireUtils.parseImmediateChildren(@specFiles, @subPath, TEST_REQUIRE_PREFIX, TEST_URL_PREFIX)
|
||||
parts = @subPath.split('/')
|
||||
c.currentFolder = parts[parts.length-1] or parts[parts.length-2] or 'All'
|
||||
c
|
||||
|
||||
getParentFolders: ->
|
||||
return [] unless @subPath
|
||||
paths = []
|
||||
parts = @subPath.split('/')
|
||||
while parts.length
|
||||
parts.pop()
|
||||
paths.unshift {
|
||||
name: parts[parts.length-1] or 'All'
|
||||
url: '/test/' + parts.join('/')
|
||||
}
|
||||
paths
|
||||
|
||||
getChildren: ->
|
||||
return [] unless @specFiles
|
||||
folders = {}
|
||||
files = {}
|
||||
|
||||
requirePrefix = TEST_BASE_PATH + @subPath
|
||||
if requirePrefix[requirePrefix.length-1] isnt '/'
|
||||
requirePrefix += '/'
|
||||
|
||||
for f in @specFiles
|
||||
f = f[requirePrefix.length..]
|
||||
continue unless f
|
||||
parts = f.split('/')
|
||||
name = parts[0]
|
||||
group = if parts.length is 1 then files else folders
|
||||
group[name] ?= 0
|
||||
group[name] += 1
|
||||
|
||||
children = []
|
||||
urlPrefix = '/test/'+@subPath
|
||||
urlPrefix += '/' if urlPrefix[urlPrefix.length-1] isnt '/'
|
||||
|
||||
for name in _.keys(folders)
|
||||
children.push {
|
||||
type:'folder',
|
||||
url: urlPrefix+name
|
||||
name: name+'/'
|
||||
size: folders[name]
|
||||
}
|
||||
for name in _.keys(files)
|
||||
children.push {
|
||||
type:'file',
|
||||
url: urlPrefix+name
|
||||
name: name
|
||||
}
|
||||
children
|
||||
|
||||
# RUNNING TESTS
|
||||
|
||||
initSpecFiles: ->
|
||||
@specFiles = TestView.getAllSpecFiles()
|
||||
if @subPath
|
||||
prefix = TEST_BASE_PATH + @subPath
|
||||
prefix = TEST_REQUIRE_PREFIX + @subPath
|
||||
@specFiles = (f for f in @specFiles when f.startsWith prefix)
|
||||
|
||||
@runTests: (specFiles) ->
|
|
@ -19,10 +19,10 @@ module.exports = class JobProfileView extends CocoView
|
|||
|
||||
buildJobProfileTreema: ->
|
||||
visibleSettings = @editableSettings.concat @readOnlySettings
|
||||
data = _.pick (me.get('jobProfile') ? {}), (value, key) => key in visibleSettings
|
||||
data = _.pick (me.get('jobProfile') ? {}), (value, key) -> key in visibleSettings
|
||||
data.name ?= (me.get('firstName') + ' ' + me.get('lastName')).trim() if me.get('firstName')
|
||||
schema = _.cloneDeep me.schema().properties.jobProfile
|
||||
schema.properties = _.pick schema.properties, (value, key) => key in visibleSettings
|
||||
schema.properties = _.pick schema.properties, (value, key) -> key in visibleSettings
|
||||
schema.required = _.intersection schema.required, visibleSettings
|
||||
for prop in @readOnlySettings
|
||||
schema.properties[prop].readOnly = true
|
||||
|
|
|
@ -6,7 +6,9 @@ CocoCollection = require 'collections/CocoCollection'
|
|||
{me} = require 'lib/auth'
|
||||
JobProfileContactView = require 'views/modal/job_profile_contact_modal'
|
||||
JobProfileView = require 'views/account/job_profile_view'
|
||||
UserRemark = require 'models/UserRemark'
|
||||
forms = require 'lib/forms'
|
||||
ModelModal = require 'views/modal/model_modal'
|
||||
|
||||
class LevelSessionsCollection extends CocoCollection
|
||||
url: -> "/db/user/#{@userID}/level.sessions/employer"
|
||||
|
@ -14,6 +16,14 @@ class LevelSessionsCollection extends CocoCollection
|
|||
constructor: (@userID) ->
|
||||
super()
|
||||
|
||||
adminContacts = [
|
||||
{id: "", name: "Assign a Contact"}
|
||||
{id: "512ef4805a67a8c507000001", name: "Nick"}
|
||||
{id: "5162fab9c92b4c751e000274", name: "Scott"}
|
||||
{id: "51eb2714fa058cb20d0006ef", name: "Michael"}
|
||||
{id: "51538fdb812dd9af02000001", name: "George"}
|
||||
]
|
||||
|
||||
module.exports = class ProfileView extends View
|
||||
id: "profile-view"
|
||||
template: template
|
||||
|
@ -28,6 +38,7 @@ module.exports = class ProfileView extends View
|
|||
'click #save-notes-button': 'onJobProfileNotesChanged'
|
||||
'click #contact-candidate': 'onContactCandidate'
|
||||
'click #enter-espionage-mode': 'enterEspionageMode'
|
||||
'click #open-model-modal': 'openModelModal'
|
||||
'click .editable-profile .profile-photo': 'onEditProfilePhoto'
|
||||
'click .editable-profile .project-image': 'onEditProjectImage'
|
||||
'click .editable-profile .editable-display': 'onEditSection'
|
||||
|
@ -36,12 +47,14 @@ module.exports = class ProfileView extends View
|
|||
'change .editable-profile .editable-array input': 'onEditArray'
|
||||
'keyup .editable-profile .editable-array input': 'onEditArray'
|
||||
'click .editable-profile a': 'onClickLinkWhileEditing'
|
||||
'change #admin-contact': 'onAdminContactChanged'
|
||||
|
||||
constructor: (options, @userID) ->
|
||||
@userID ?= me.id
|
||||
@onJobProfileNotesChanged = _.debounce @onJobProfileNotesChanged, 1000
|
||||
@onRemarkChanged = _.debounce @onRemarkChanged, 1000
|
||||
@authorizedWithLinkedIn = IN?.User?.isAuthorized()
|
||||
@linkedInLoaded = Boolean(IN.parse)
|
||||
@linkedInLoaded = Boolean(IN?.parse)
|
||||
@waitingForLinkedIn = false
|
||||
window.contractCallback = =>
|
||||
@authorizedWithLinkedIn = IN?.User?.isAuthorized()
|
||||
|
@ -70,6 +83,22 @@ module.exports = class ProfileView extends View
|
|||
else
|
||||
@user = User.getByID(@userID)
|
||||
@sessions = @supermodel.loadCollection(new LevelSessionsCollection(@userID), 'candidate_sessions').model
|
||||
if me.isAdmin()
|
||||
# Mimicking how the VictoryModal fetches LevelFeedback
|
||||
@remark = new UserRemark()
|
||||
@remark.setURL "/db/user/#{@userID}/remark"
|
||||
@remark.fetch()
|
||||
@listenToOnce @remark, 'sync', @onRemarkLoaded
|
||||
@listenToOnce @remark, 'error', @onRemarkNotFound
|
||||
|
||||
onRemarkLoaded: ->
|
||||
@remark.setURL "/db/user.remark/#{@remark.id}"
|
||||
@render()
|
||||
|
||||
onRemarkNotFound: ->
|
||||
@remark = new UserRemark() # hmm, why do we create a new one here?
|
||||
@remark.set 'user', @userID
|
||||
@remark.set 'userName', name if name = @user.get('name')
|
||||
|
||||
onLinkedInLoaded: =>
|
||||
@linkedinLoaded = true
|
||||
|
@ -225,10 +254,12 @@ module.exports = class ProfileView extends View
|
|||
link.icon = @iconForLink link for link in links
|
||||
context.profileLinks = _.sortBy links, (link) -> not link.icon # icons first
|
||||
if @sessions
|
||||
context.sessions = (s.attributes for s in @sessions.models when (s.get('submitted') or s.get('level-id') is 'gridmancer'))
|
||||
context.sessions = (s.attributes for s in @sessions.models when (s.get('submitted') or (s.get('levelID') is 'gridmancer') and s.get('code')?.thoktar?.plan?.length isnt 942)) # no default code
|
||||
context.sessions.sort (a, b) -> (b.playtime ? 0) - (a.playtime ? 0)
|
||||
else
|
||||
context.sessions = []
|
||||
context.adminContacts = adminContacts
|
||||
context.remark = @remark
|
||||
context
|
||||
|
||||
afterRender: ->
|
||||
|
@ -249,6 +280,31 @@ module.exports = class ProfileView extends View
|
|||
_.delay ->
|
||||
justSavedSection.removeClass "just-saved", duration: 1500, easing: 'easeOutQuad'
|
||||
, 500
|
||||
if me.isAdmin()
|
||||
visibleSettings = ['history', 'tasks']
|
||||
data = _.pick (@remark.attributes), (value, key) -> key in visibleSettings
|
||||
data.history ?= []
|
||||
data.tasks ?= []
|
||||
schema = _.cloneDeep @remark.schema()
|
||||
schema.properties = _.pick schema.properties, (value, key) => key in visibleSettings
|
||||
schema.required = _.intersection (schema.required ? []), visibleSettings
|
||||
treemaOptions =
|
||||
filePath: "db/user/#{@userID}"
|
||||
schema: schema
|
||||
data: data
|
||||
aceUseWrapMode: true
|
||||
callbacks: {change: @onRemarkChanged}
|
||||
@remarkTreema = @$el.find('#remark-treema').treema treemaOptions
|
||||
@remarkTreema.build()
|
||||
@remarkTreema.open(3)
|
||||
|
||||
onRemarkChanged: (e) =>
|
||||
return unless @remarkTreema.isValid()
|
||||
for key in ['history', 'tasks']
|
||||
val = _.filter(@remarkTreema.get(key), (entry) -> entry?.content or entry?.action)
|
||||
entry.date ?= (new Date()).toISOString() for entry in val if key is 'history'
|
||||
@remark.set key, val
|
||||
@saveRemark()
|
||||
|
||||
initializeAutocomplete: (container) ->
|
||||
(container ? @$el).find('input[data-autocomplete]').each ->
|
||||
|
@ -286,6 +342,9 @@ module.exports = class ProfileView extends View
|
|||
espionageSuccess: (model) ->
|
||||
window.location.reload()
|
||||
|
||||
openModelModal: (e) ->
|
||||
@openModalView new ModelModal models: [@user]
|
||||
|
||||
onJobProfileNotesChanged: (e) =>
|
||||
notes = @$el.find("#job-profile-notes").val()
|
||||
@user.set 'jobProfileNotes', notes
|
||||
|
@ -455,6 +514,26 @@ module.exports = class ProfileView extends View
|
|||
onClickLinkWhileEditing: (e) ->
|
||||
e.preventDefault()
|
||||
|
||||
onAdminContactChanged: (e) ->
|
||||
newContact = @$el.find('#admin-contact').val()
|
||||
newContactName = if newContact then _.find(adminContacts, id: newContact).name else ''
|
||||
@remark.set 'contact', newContact
|
||||
@remark.set 'contactName', newContactName
|
||||
@saveRemark()
|
||||
|
||||
saveRemark: ->
|
||||
@remark.set 'user', @user.id
|
||||
@remark.set 'userName', @user.get('name')
|
||||
if errors = @remark.validate()
|
||||
return console.error "UserRemark", @remark, "failed validation with errors:", errors
|
||||
res = @remark.save()
|
||||
res.error =>
|
||||
return if @destroyed
|
||||
console.error "UserRemark", @remark, "failed to save with error:", res.responseText
|
||||
res.success (model, response, options) =>
|
||||
return if @destroyed
|
||||
console.log "Saved UserRemark", @remark, "with response", response
|
||||
|
||||
updateProgress: (highlightNext) ->
|
||||
return unless @user
|
||||
completed = 0
|
||||
|
|
|
@ -25,6 +25,7 @@ module.exports = class LevelComponentEditView extends View
|
|||
super options
|
||||
@levelComponent = @supermodel.getModelByOriginalAndMajorVersion LevelComponent, options.original, options.majorVersion or 0
|
||||
console.log "Couldn't get levelComponent for", options, "from", @supermodel.models unless @levelComponent
|
||||
@onEditorChange = _.debounce @onEditorChange, 1500
|
||||
|
||||
getRenderData: (context={}) ->
|
||||
context = super(context)
|
||||
|
@ -95,6 +96,7 @@ module.exports = class LevelComponentEditView extends View
|
|||
@editor.on('change', @onEditorChange)
|
||||
|
||||
onEditorChange: =>
|
||||
return if @destroyed
|
||||
@levelComponent.set 'code', @editor.getValue()
|
||||
Backbone.Mediator.publish 'level-component-edited', levelComponent: @levelComponent
|
||||
null
|
||||
|
|
|
@ -35,13 +35,13 @@ module.exports = class ComponentsTabView extends View
|
|||
|
||||
componentModels = @supermodel.getModels LevelComponent
|
||||
componentModelMap = {}
|
||||
componentModelMap[comp.get('original')] = comp for comp in componentModels
|
||||
componentModelMap[comp.get('original')] = comp for comp in componentModels
|
||||
components = ({original: key.split('.')[0], majorVersion: parseInt(key.split('.')[1], 10), thangs: value, count: value.length} for key, value of @presentComponents)
|
||||
treemaData = _.sortBy components, (comp) ->
|
||||
comp = componentModelMap[comp.original]
|
||||
res = [comp.get('system'), comp.get('name')]
|
||||
return res
|
||||
|
||||
|
||||
treemaOptions =
|
||||
supermodel: @supermodel
|
||||
schema: {type: 'array', items: {type: 'object', format: 'level-component'}}
|
||||
|
|
|
@ -2,6 +2,7 @@ View = require 'views/kinds/RootView'
|
|||
template = require 'templates/employers'
|
||||
app = require 'application'
|
||||
User = require 'models/User'
|
||||
UserRemark = require 'models/UserRemark'
|
||||
{me} = require 'lib/auth'
|
||||
CocoCollection = require 'collections/CocoCollection'
|
||||
EmployerSignupView = require 'views/modal/employer_signup_modal'
|
||||
|
@ -10,6 +11,10 @@ class CandidatesCollection extends CocoCollection
|
|||
url: '/db/user/x/candidates'
|
||||
model: User
|
||||
|
||||
class UserRemarksCollection extends CocoCollection
|
||||
url: '/db/user.remark?project=contact,contactName,user'
|
||||
model: UserRemark
|
||||
|
||||
module.exports = class EmployersView extends View
|
||||
id: "employers-view"
|
||||
template: template
|
||||
|
@ -37,6 +42,8 @@ module.exports = class EmployersView extends View
|
|||
ctx.inactiveCandidates = _.reject ctx.candidates, (c) -> c.get('jobProfile').active
|
||||
ctx.featuredCandidates = _.filter ctx.activeCandidates, (c) -> c.get('jobProfileApproved')
|
||||
ctx.otherCandidates = _.reject ctx.activeCandidates, (c) -> c.get('jobProfileApproved')
|
||||
ctx.remarks = {}
|
||||
ctx.remarks[remark.get('user')] = remark for remark in @remarks.models
|
||||
ctx.moment = moment
|
||||
ctx._ = _
|
||||
ctx
|
||||
|
@ -48,11 +55,13 @@ module.exports = class EmployersView extends View
|
|||
getCandidates: ->
|
||||
@candidates = new CandidatesCollection()
|
||||
@candidates.fetch()
|
||||
@remarks = new UserRemarksCollection()
|
||||
@remarks.fetch()
|
||||
# Re-render when we have fetched them, but don't wait and show a progress bar while loading.
|
||||
@listenToOnce @candidates, 'all', @renderCandidatesAndSetupScrolling
|
||||
@listenToOnce @remarks, 'all', @renderCandidatesAndSetupScrolling
|
||||
|
||||
renderCandidatesAndSetupScrolling: =>
|
||||
|
||||
@render()
|
||||
$(".nano").nanoScroller()
|
||||
if window.history?.state?.lastViewedCandidateID
|
||||
|
@ -179,7 +188,7 @@ module.exports = class EmployersView extends View
|
|||
"Last 4 weeks": (e, n, f, i, $r) ->
|
||||
days = parseFloat $($r.find('td')[i]).data('profile-age')
|
||||
days <= 28
|
||||
7:
|
||||
8:
|
||||
"✓": filterSelectExactMatch
|
||||
"✗": filterSelectExactMatch
|
||||
|
||||
|
|
|
@ -150,12 +150,6 @@ module.exports = class CocoView extends Backbone.View
|
|||
@lastToggleModalCall = 0
|
||||
|
||||
toggleModal: (e) ->
|
||||
if new Date().getTime() - CocoView.lastToggleModalCall < 5
|
||||
# Defensive move. This function has had a history of messing things up.
|
||||
console.error 'toggleModal is getting called too often!'
|
||||
return
|
||||
CocoView.lastToggleModalCall = new Date().getTime()
|
||||
|
||||
if $(e.currentTarget).prop('target') is '_blank'
|
||||
return true
|
||||
# special handler for opening modals that are dynamically loaded, rather than static in the page. It works (or should work) like Bootstrap's modals, except use coco-modal for the data-toggle value.
|
||||
|
@ -163,6 +157,7 @@ module.exports = class CocoView extends Backbone.View
|
|||
return unless elem.data('toggle') is 'coco-modal'
|
||||
target = elem.data('target')
|
||||
view = application.router.getView(target, '_modal') # could set up a system for loading cached modals, if told to
|
||||
e.stopPropagation()
|
||||
@openModalView(view)
|
||||
|
||||
openModalView: (modalView, softly=false) ->
|
||||
|
|
|
@ -6,6 +6,8 @@ module.exports = class ModelModal extends View
|
|||
template: template
|
||||
plain: true
|
||||
|
||||
events: 'click .save-model': 'onSaveModel'
|
||||
|
||||
constructor: (options) ->
|
||||
super options
|
||||
@models = options.models
|
||||
|
@ -20,6 +22,7 @@ module.exports = class ModelModal extends View
|
|||
|
||||
afterRender: ->
|
||||
return unless @supermodel.finished()
|
||||
@modelTreemas = {}
|
||||
for model in @models
|
||||
data = $.extend true, {}, model.attributes
|
||||
schema = $.extend true, {}, model.schema()
|
||||
|
@ -31,6 +34,7 @@ module.exports = class ModelModal extends View
|
|||
modelTreema?.build()
|
||||
modelTreema?.open()
|
||||
@openTastyTreemas modelTreema, model
|
||||
@modelTreemas[model.id] = modelTreema
|
||||
|
||||
openTastyTreemas: (modelTreema, model) ->
|
||||
# To save on quick inspection, let's auto-open the properties we're most likely to want to see.
|
||||
|
@ -45,3 +49,23 @@ module.exports = class ModelModal extends View
|
|||
}[team]
|
||||
for dessert in desserts
|
||||
child.childrenTreemas[dessert]?.open()
|
||||
|
||||
onSaveModel: (e) ->
|
||||
container = $(e.target).closest('.model-container')
|
||||
model = _.find @models, id: container.data('model-id')
|
||||
treema = @modelTreemas[model.id]
|
||||
for key, val of treema.data when not _.isEqual val, model.get key
|
||||
console.log "Updating", key, "from", model.get(key), "to", val
|
||||
model.set key, val
|
||||
for key, val of model.attributes when treema.get(key) is undefined and not _.string.startsWith key, '_'
|
||||
console.log "Deleting", key, "which was", val, "but man, that ain't going to work, now is it?"
|
||||
model.unset key
|
||||
if errors = model.validate()
|
||||
return console.warn model, "failed validation with errors:", errors
|
||||
return unless res = model.patch()
|
||||
res.error =>
|
||||
return if @destroyed
|
||||
console.error model, "failed to save with error:", res.responseText
|
||||
res.success (model, response, options) =>
|
||||
return if @destroyed
|
||||
@hide()
|
||||
|
|
|
@ -92,6 +92,7 @@ module.exports = class LadderSubmissionView extends CocoView
|
|||
includeFlow: false
|
||||
executionLimit: 1 * 1000 * 1000
|
||||
if spellID is "hear" then aetherOptions["functionParameters"] = ["speaker","message","data"]
|
||||
if spellID is "makeBid" then aetherOptions["functionParameters"] = ["blockNumber"]
|
||||
|
||||
aether = new Aether aetherOptions
|
||||
transpiledCode[thang][spellID] = aether.transpile spell
|
||||
|
|
|
@ -13,6 +13,7 @@ module.exports = class EditorConfigModal extends View
|
|||
invisibles: false
|
||||
indentGuides: false
|
||||
behaviors: false
|
||||
liveCompletion: true
|
||||
|
||||
events:
|
||||
'change #tome-invisibles': 'updateInvisibles'
|
||||
|
@ -20,6 +21,7 @@ module.exports = class EditorConfigModal extends View
|
|||
'change #tome-key-bindings': 'updateKeyBindings'
|
||||
'change #tome-indent-guides': 'updateIndentGuides'
|
||||
'change #tome-behaviors': 'updateBehaviors'
|
||||
'change #tome-live-completion': 'updateLiveCompletion'
|
||||
|
||||
constructor: (options) ->
|
||||
super(options)
|
||||
|
@ -43,6 +45,7 @@ module.exports = class EditorConfigModal extends View
|
|||
c.invisibles = @aceConfig.invisibles
|
||||
c.indentGuides = @aceConfig.indentGuides
|
||||
c.behaviors = @aceConfig.behaviors
|
||||
c.liveCompletion = @aceConfig.liveCompletion
|
||||
c
|
||||
|
||||
updateSessionLanguage: ->
|
||||
|
@ -63,6 +66,9 @@ module.exports = class EditorConfigModal extends View
|
|||
updateBehaviors: ->
|
||||
@aceConfig.behaviors = @$el.find('#tome-behaviors').prop('checked')
|
||||
|
||||
updateLiveCompletion: ->
|
||||
@aceConfig.liveCompletion = @$el.find('#tome-live-completion').prop('checked')
|
||||
|
||||
afterRender: ->
|
||||
super()
|
||||
|
||||
|
@ -75,6 +81,7 @@ module.exports = class EditorConfigModal extends View
|
|||
@aceConfig.keyBindings = @$el.find('#tome-key-bindings').val()
|
||||
@aceConfig.indentGuides = @$el.find('#tome-indent-guides').prop('checked')
|
||||
@aceConfig.behaviors = @$el.find('#tome-behaviors').prop('checked')
|
||||
@aceConfig.liveCompletion = @$el.find('#tome-live-completion').prop('checked')
|
||||
me.set 'aceConfig', @aceConfig
|
||||
Backbone.Mediator.publish 'tome:change-config'
|
||||
Backbone.Mediator.publish 'tome:change-language', language: newLanguage unless newLanguage is oldLanguage
|
||||
|
|
|
@ -18,19 +18,20 @@ module.exports = class Spell
|
|||
@supermodel = options.supermodel
|
||||
@skipProtectAPI = options.skipProtectAPI
|
||||
@worker = options.worker
|
||||
p = options.programmableMethod
|
||||
|
||||
p = options.programmableMethod
|
||||
@languages = p.languages ? {}
|
||||
@languages.javascript ?= p.source
|
||||
@name = p.name
|
||||
@permissions = read: p.permissions?.read ? [], readwrite: p.permissions?.readwrite ? [] # teams
|
||||
teamSpells = @session.get('teamSpells')
|
||||
team = @session.get('team') ? 'humans'
|
||||
@useTranspiledCode = @permissions.readwrite.length and ((teamSpells and not _.contains(teamSpells[team], @spellKey)) or (@session.get('creator') isnt me.id and not (me.isAdmin() or 'employer' in me.get('permissions'))) or @spectateView)
|
||||
#console.log @spellKey, "using transpiled code?", @useTranspiledCode
|
||||
@source = @originalSource = p.source
|
||||
@setLanguage if @canWrite() then options.language else 'javascript'
|
||||
@useTranspiledCode = @shouldUseTranspiledCode()
|
||||
console.log "Spell", @spellKey, "is using transpiled code (should only happen if it's an enemy/spectate writable method)." if @useTranspiledCode
|
||||
|
||||
@source = @originalSource
|
||||
@parameters = p.parameters
|
||||
if @permissions.readwrite.length and sessionSource = @session.getSourceFor(@spellKey)
|
||||
@source = sessionSource
|
||||
@language = if @canWrite() then options.language else 'javascript'
|
||||
@thangs = {}
|
||||
@view = new SpellView {spell: @, session: @session, worker: @worker}
|
||||
@view.render() # Get it ready and code loaded in advance
|
||||
|
@ -45,6 +46,9 @@ module.exports = class Spell
|
|||
@thangs = null
|
||||
@worker = null
|
||||
|
||||
setLanguage: (@language) ->
|
||||
@originalSource = @languages[language] ? @languages.javascript
|
||||
|
||||
addThang: (thang) ->
|
||||
if @thangs[thang.id]
|
||||
@thangs[thang.id].thang = thang
|
||||
|
@ -151,3 +155,14 @@ module.exports = class Spell
|
|||
|
||||
toString: ->
|
||||
"<Spell: #{@spellKey}>"
|
||||
|
||||
shouldUseTranspiledCode: ->
|
||||
# Determine whether this code has already been transpiled, or whether it's raw source needing transpilation.
|
||||
return false unless @permissions.readwrite.length # Only player-writable code will be stored transpiled.
|
||||
return true if @spectateView # Use transpiled code for both teams if we're just spectating.
|
||||
teamSpells = @session.get('teamSpells')
|
||||
team = @session.get('team') ? 'humans'
|
||||
return true if teamSpells and not _.contains(teamSpells[team], @spellKey) # Use transpiled for enemy spells.
|
||||
# Players without permissions can't view the raw code.
|
||||
return true if @session.get('creator') isnt me.id and not (me.isAdmin() or 'employer' in me.get('permissions'))
|
||||
false
|
||||
|
|
|
@ -14,6 +14,7 @@ module.exports = class DebugView extends View
|
|||
subscriptions:
|
||||
'god:new-world-created': 'onNewWorld'
|
||||
'god:debug-value-return': 'handleDebugValue'
|
||||
'god:debug-world-load-progress-changed': 'handleWorldLoadProgressChanged'
|
||||
'tome:spell-shown': 'changeCurrentThangAndSpell'
|
||||
'tome:cast-spells': 'onTomeCast'
|
||||
'surface:frame-changed': 'onFrameChanged'
|
||||
|
@ -26,6 +27,7 @@ module.exports = class DebugView extends View
|
|||
@ace = options.ace
|
||||
@thang = options.thang
|
||||
@spell = options.spell
|
||||
@progress = 0
|
||||
@variableStates = {}
|
||||
@globals = {Math: Math, _: _, String: String, Number: Number, Array: Array, Object: Object} # ... add more as documented
|
||||
for className, serializedClass of serializedClasses
|
||||
|
@ -36,6 +38,7 @@ module.exports = class DebugView extends View
|
|||
@lastFrameRequested = -1
|
||||
@workerIsSimulating = false
|
||||
@spellHasChanged = false
|
||||
@debouncedTooltipUpdate = _.debounce @updateTooltipProgress, 100
|
||||
|
||||
|
||||
|
||||
|
@ -50,15 +53,30 @@ module.exports = class DebugView extends View
|
|||
|
||||
|
||||
setTooltipKeyAndValue: (key, value) =>
|
||||
@hideProgressBarAndShowText()
|
||||
message = "Time: #{@calculateCurrentTimeString()}\n#{key}: #{value}"
|
||||
@$el.find("code").text message
|
||||
@$el.show().css(@pos)
|
||||
|
||||
setTooltipText: (text) =>
|
||||
#perhaps changing styling here in the future
|
||||
@hideProgressBarAndShowText()
|
||||
@$el.find("code").text text
|
||||
@$el.show().css(@pos)
|
||||
|
||||
|
||||
setTooltipProgress: (progress) =>
|
||||
@showProgressBarAndHideText()
|
||||
@$el.find(".progress-bar").css('width',progress + '%').attr 'aria-valuenow', progress
|
||||
@$el.show().css(@pos)
|
||||
|
||||
showProgressBarAndHideText: ->
|
||||
@$el.find("pre").css("display","none")
|
||||
@$el.find(".progress").css("display","block")
|
||||
|
||||
hideProgressBarAndShowText: ->
|
||||
@$el.find("pre").css("display","block")
|
||||
@$el.find(".progress").css("display","none")
|
||||
|
||||
onTomeCast: ->
|
||||
@invalidateCache()
|
||||
|
||||
|
@ -91,7 +109,9 @@ module.exports = class DebugView extends View
|
|||
if @variableChain and not key is @variableChain.join(".") then return
|
||||
@setTooltipKeyAndValue(key,value)
|
||||
|
||||
|
||||
handleWorldLoadProgressChanged: (data) ->
|
||||
@progress = data.progress
|
||||
|
||||
afterRender: ->
|
||||
super()
|
||||
@ace.on "mousemove", @onMouseMove
|
||||
|
@ -140,7 +160,12 @@ module.exports = class DebugView extends View
|
|||
onMouseOut: (e) ->
|
||||
@variableChain = @markerRange = null
|
||||
@update()
|
||||
|
||||
|
||||
updateTooltipProgress: =>
|
||||
if @variableChain and @progress < 1
|
||||
@setTooltipProgress(@progress * 100)
|
||||
_.delay @updateTooltipProgress, 100
|
||||
|
||||
onNewWorld: (e) ->
|
||||
@thang = @options.thang = e.world.thangMap[@thang.id] if @thang
|
||||
@frameRate = e.world.frameRate
|
||||
|
@ -148,6 +173,7 @@ module.exports = class DebugView extends View
|
|||
onFrameChanged: (data) ->
|
||||
@currentFrame = data.frame
|
||||
@frameRate = data.world.frameRate
|
||||
|
||||
onSpellChangedCalculation: (data) ->
|
||||
@spellHasChanged = data.hasChangedSignificantly
|
||||
|
||||
|
@ -159,8 +185,8 @@ module.exports = class DebugView extends View
|
|||
@setTooltipKeyAndValue(@variableChain.join("."),@stringifyValue(@thang[@variableChain[1]],0))
|
||||
else if @variableChain.length is 1 and Aether.globals[@variableChain[0]]
|
||||
@setTooltipKeyAndValue(@variableChain.join("."),@stringifyValue(Aether.globals[@variableChain[0]],0))
|
||||
else if @workerIsSimulating
|
||||
@setTooltipText("World is simulating, please wait...")
|
||||
else if @workerIsSimulating and @progress < 1
|
||||
@debouncedTooltipUpdate()
|
||||
else if @currentFrame is @lastFrameRequested and (cacheValue = @retrieveValueFromCache(@thang.id, @spell.name, @variableChain, @currentFrame))
|
||||
@setTooltipKeyAndValue(@variableChain.join("."),cacheValue)
|
||||
else
|
||||
|
@ -171,7 +197,8 @@ module.exports = class DebugView extends View
|
|||
frame: @currentFrame
|
||||
if @currentFrame isnt @lastFrameRequested then @workerIsSimulating = true
|
||||
@lastFrameRequested = @currentFrame
|
||||
@setTooltipText("Finding value...")
|
||||
@progress = 0
|
||||
@debouncedTooltipUpdate()
|
||||
else
|
||||
@$el.hide()
|
||||
if @variableChain?.length is 2
|
||||
|
|
|
@ -66,6 +66,7 @@ module.exports = class SpellPaletteView extends View
|
|||
'this': 'apiProperties'
|
||||
count = 0
|
||||
propGroups = {}
|
||||
console.log 'thang', @thang
|
||||
for owner, storage of propStorage
|
||||
props = _.reject @thang[storage] ? [], (prop) -> prop[0] is '_' # no private properties
|
||||
added = propGroups[owner] = _.sortBy(props).slice()
|
||||
|
@ -74,6 +75,9 @@ module.exports = class SpellPaletteView extends View
|
|||
shortenize = count > 6
|
||||
tabbify = count >= 10
|
||||
@entries = []
|
||||
|
||||
Backbone.Mediator.publish 'tome:update-snippets', propGroups: propGroups, allDocs: allDocs
|
||||
|
||||
for owner, props of propGroups
|
||||
for prop in props
|
||||
doc = _.find (allDocs['__' + prop] ? []), (doc) ->
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue