diff --git a/app/assets/images/pages/game-menu/choose-hero-stub.png b/app/assets/images/pages/game-menu/choose-hero-stub.png deleted file mode 100644 index 5711462a7..000000000 Binary files a/app/assets/images/pages/game-menu/choose-hero-stub.png and /dev/null differ diff --git a/app/assets/images/pages/game-menu/inventory-stub.png b/app/assets/images/pages/game-menu/inventory-stub.png deleted file mode 100644 index 87963ebc4..000000000 Binary files a/app/assets/images/pages/game-menu/inventory-stub.png and /dev/null differ diff --git a/app/assets/images/pages/game-menu/slot-eyes.png b/app/assets/images/pages/game-menu/slot-eyes.png new file mode 100644 index 000000000..2b96d3408 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-eyes.png differ diff --git a/app/assets/images/pages/game-menu/slot-feet.png b/app/assets/images/pages/game-menu/slot-feet.png new file mode 100644 index 000000000..737ba94c4 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-feet.png differ diff --git a/app/assets/images/pages/game-menu/slot-gloves.png b/app/assets/images/pages/game-menu/slot-gloves.png new file mode 100644 index 000000000..1775c53d7 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-gloves.png differ diff --git a/app/assets/images/pages/game-menu/slot-head.png b/app/assets/images/pages/game-menu/slot-head.png new file mode 100644 index 000000000..2014fc9d8 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-head.png differ diff --git a/app/assets/images/pages/game-menu/slot-left-hand.png b/app/assets/images/pages/game-menu/slot-left-hand.png new file mode 100644 index 000000000..c41d8414a Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-left-hand.png differ diff --git a/app/assets/images/pages/game-menu/slot-left-ring.png b/app/assets/images/pages/game-menu/slot-left-ring.png new file mode 100644 index 000000000..fe3d78e33 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-left-ring.png differ diff --git a/app/assets/images/pages/game-menu/slot-minion.png b/app/assets/images/pages/game-menu/slot-minion.png new file mode 100644 index 000000000..126d09804 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-minion.png differ diff --git a/app/assets/images/pages/game-menu/slot-misc-0.png b/app/assets/images/pages/game-menu/slot-misc-0.png new file mode 100644 index 000000000..df5a83f4e Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-misc-0.png differ diff --git a/app/assets/images/pages/game-menu/slot-misc-1.png b/app/assets/images/pages/game-menu/slot-misc-1.png new file mode 100644 index 000000000..0106a1de7 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-misc-1.png differ diff --git a/app/assets/images/pages/game-menu/slot-neck.png b/app/assets/images/pages/game-menu/slot-neck.png new file mode 100644 index 000000000..ff0fe908b Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-neck.png differ diff --git a/app/assets/images/pages/game-menu/slot-pet.png b/app/assets/images/pages/game-menu/slot-pet.png new file mode 100644 index 000000000..2a4687b2b Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-pet.png differ diff --git a/app/assets/images/pages/game-menu/slot-programming-book.png b/app/assets/images/pages/game-menu/slot-programming-book.png new file mode 100644 index 000000000..b94baf17e Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-programming-book.png differ diff --git a/app/assets/images/pages/game-menu/slot-right-hand.png b/app/assets/images/pages/game-menu/slot-right-hand.png new file mode 100644 index 000000000..3e25b0232 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-right-hand.png differ diff --git a/app/assets/images/pages/game-menu/slot-right-ring.png b/app/assets/images/pages/game-menu/slot-right-ring.png new file mode 100644 index 000000000..3e83a9598 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-right-ring.png differ diff --git a/app/assets/images/pages/game-menu/slot-spellbook.png b/app/assets/images/pages/game-menu/slot-spellbook.png new file mode 100644 index 000000000..8418431da Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-spellbook.png differ diff --git a/app/assets/images/pages/game-menu/slot-torso.png b/app/assets/images/pages/game-menu/slot-torso.png new file mode 100644 index 000000000..37fd80a8e Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-torso.png differ diff --git a/app/assets/images/pages/game-menu/slot-waist.png b/app/assets/images/pages/game-menu/slot-waist.png new file mode 100644 index 000000000..9d0b85351 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-waist.png differ diff --git a/app/assets/images/pages/game-menu/slot-wrists.png b/app/assets/images/pages/game-menu/slot-wrists.png new file mode 100644 index 000000000..924558236 Binary files /dev/null and b/app/assets/images/pages/game-menu/slot-wrists.png differ diff --git a/app/assets/lib/ace/mode-javascript.js b/app/assets/lib/ace/mode-javascript.js index 4623b3578..c444cc0d4 100644 --- a/app/assets/lib/ace/mode-javascript.js +++ b/app/assets/lib/ace/mode-javascript.js @@ -1 +1 @@ -ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",n="[a-zA-Z\\$_\xa1-\uffff][a-zA-Z\\d\\$_\xa1-\uffff]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+t+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/,next:"start"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"start"},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],comment:[{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment"}],line_comment_regex_allowed:[{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment"}],line_comment:[{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},this.embedRules(i,"doc-",[i.getEndRule("no_regex")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_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(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc.tag",regex:"\\bTODO\\b"},{defaultToken:"comment.doc"}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.id,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var p=r.getTokens(o.start.row),d=0,v,m=-1;for(var g=0;go.start.column)break;d+=p[g].value.length}if(!v||m<0&&v.type!=="comment"&&(v.type!=="string"||o.start.column!==v.value.length+d-1&&v.value.lastIndexOf(s)===v.value.length-1)){if(!h.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(v&&v.type==="string"){var y=f.substring(a.column,a.column+1);if(y==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n),s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)}}.call(o.prototype)}) \ No newline at end of file +ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|loop|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),t="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",n="[a-zA-Z\\$_\xa1-\uffff][a-zA-Z\\d\\$_\xa1-\uffff]*\\b",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+n+")(\\.)(prototype)(\\.)("+n+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+n+")(\\.)("+n+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+t+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:e,regex:n},{token:"keyword.operator",regex:/--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/,next:"start"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"keyword.operator",regex:/\/=?/,next:"start"},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],comment:[{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment"}],line_comment_regex_allowed:[{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment"}],line_comment:[{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},this.embedRules(i,"doc-",[i.getEndRule("no_regex")])};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/doc_comment_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(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc.tag",regex:"\\bTODO\\b"},{defaultToken:"comment.doc"}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.id,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var p=r.getTokens(o.start.row),d=0,v,m=-1;for(var g=0;go.start.column)break;d+=p[g].value.length}if(!v||m<0&&v.type!=="comment"&&(v.type!=="string"||o.start.column!==v.value.length+d-1&&v.value.lastIndexOf(s)===v.value.length-1)){if(!h.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(v&&v.type==="string"){var y=f.substring(a.column,a.column+1);if(y==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n),s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)}}.call(o.prototype)}) \ No newline at end of file diff --git a/app/assets/lib/ace/mode-python.js b/app/assets/lib/ace/mode-python.js index 2bda278b8..a72f4d1b0 100644 --- a/app/assets/lib/ace/mode-python.js +++ b/app/assets/lib/ace/mode-python.js @@ -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)}) \ No newline at end of file +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|loop|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)}) \ No newline at end of file diff --git a/app/lib/Angel.coffee b/app/lib/Angel.coffee index 84a5dbf80..efa47c03b 100644 --- a/app/lib/Angel.coffee +++ b/app/lib/Angel.coffee @@ -92,7 +92,7 @@ module.exports = class Angel extends CocoClass Backbone.Mediator.publish 'god:user-code-problem', problem: event.data.problem when 'world-load-progress-changed' Backbone.Mediator.publish 'god:world-load-progress-changed', progress: event.data.progress - unless event.data.progress is 1 or @work.preload or @work.headless or @work.synchronous or @deserializationQueue.length or @shared.firstWorld + unless event.data.progress is 1 or @work.preload or @work.headless or @work.synchronous or @deserializationQueue.length or (@shared.firstWorld and not @shared.spectate) @worker.postMessage func: 'serializeFramesSoFar' # Stream it! # We have some or all of the frames serialized, so let's send the (partially?) simulated world to the Surface. @@ -143,6 +143,9 @@ module.exports = class Angel extends CocoClass @deserializationQueue = [] @running = false _.remove @shared.busyAngels, @ + clearTimeout @condemnTimeout + clearInterval @purgatoryTimer + @condemnTimeout = @purgatoryTimer = null @doWork() finalizePreload: -> diff --git a/app/lib/God.coffee b/app/lib/God.coffee index 8574aff99..cf1631689 100644 --- a/app/lib/God.coffee +++ b/app/lib/God.coffee @@ -24,6 +24,7 @@ module.exports = class God extends CocoClass @angelsShare = workerCode: options.workerCode or '/javascripts/workers/worker_world.js' # Either path or function headless: options.headless # Whether to just simulate the goals, or to deserialize all simulation results + spectate: options.spectate godNick: @nick workQueue: [] firstWorld: true diff --git a/app/lib/LevelLoader.coffee b/app/lib/LevelLoader.coffee index df5b6b28d..da87a1221 100644 --- a/app/lib/LevelLoader.coffee +++ b/app/lib/LevelLoader.coffee @@ -56,13 +56,14 @@ module.exports = class LevelLoader extends CocoClass onLevelLoaded: -> @loadSession() @populateLevel() + Backbone.Mediator.publish 'level:loaded', level: @level, team: @team ? 'humans' # Session Loading loadSession: -> return if @headless if @sessionID - url = "/db/level_session/#{@sessionID}" + url = "/db/level.session/#{@sessionID}" else url = "/db/level/#{@levelID}/session" url += "?team=#{@team}" if @team @@ -71,14 +72,15 @@ module.exports = class LevelLoader extends CocoClass @sessionResource = @supermodel.loadModel(session, 'level_session', {cache: false}) @session = @sessionResource.model if @session.loaded + @session.setURL '/db/level.session/' + @session.id @loadDependenciesForSession @session else @listenToOnce @session, 'sync', -> - @session.url = -> '/db/level.session/' + @id + @session.setURL '/db/level.session/' + @session.id @loadDependenciesForSession @session if @opponentSessionID - opponentSession = new LevelSession().setURL "/db/level_session/#{@opponentSessionID}" + opponentSession = new LevelSession().setURL "/db/level.session/#{@opponentSessionID}" @opponentSessionResource = @supermodel.loadModel(opponentSession, 'opponent_session') @opponentSession = @opponentSessionResource.model if @opponentSession.loaded @@ -89,9 +91,9 @@ module.exports = class LevelLoader extends CocoClass loadDependenciesForSession: (session) -> return unless @level.get('type', true) is 'hero' heroConfig = session.get('heroConfig') - unless heroConfig - heroConfig = {inventory: {}, thangType: '529ffbf1cf1818f2be000001'} # Temp: assign Tharin as the hero - session.set 'heroConfig', heroConfig + heroConfig ?= me.get('heroConfig') + heroConfig ?= {inventory: {}, thangType: '529ffbf1cf1818f2be000001'} # If we got here not from PlayLevelModal (like level editor preview), assign Tharin as the hero. + session.set 'heroConfig', heroConfig unless _.isEqual heroConfig, session.get('heroConfig') url = "/db/thang.type/#{heroConfig.thangType}/version?project=name,components,original" @worldNecessities.push @maybeLoadURL(url, ThangType, 'thang') @@ -99,6 +101,9 @@ module.exports = class LevelLoader extends CocoClass url = "/db/thang.type/#{itemThangType}/version?project=name,components,original" @worldNecessities.push @maybeLoadURL(url, ThangType, 'thang') + if session is @session + Backbone.Mediator.publish 'level:session-loaded', level: @level, session: @session + # Grabbing the rest of the required data for the level populateLevel: -> diff --git a/app/lib/aether_utils.coffee b/app/lib/aether_utils.coffee index ced51981e..0356aa89f 100644 --- a/app/lib/aether_utils.coffee +++ b/app/lib/aether_utils.coffee @@ -10,6 +10,7 @@ module.exports.createAetherOptions = (options) -> protectAPI: not options.skipProtectAPI includeFlow: false yieldConditionally: options.functionName is 'plan' + simpleLoops: true globals: ['Vector', '_'] problems: jshint_W040: {level: 'ignore'} diff --git a/app/lib/scripts/ScriptManager.coffee b/app/lib/scripts/ScriptManager.coffee index 7c05c58e6..2fc1c000b 100644 --- a/app/lib/scripts/ScriptManager.coffee +++ b/app/lib/scripts/ScriptManager.coffee @@ -28,7 +28,7 @@ module.exports = ScriptManager = class ScriptManager extends CocoClass subscriptions: 'script:end-current-script': 'onEndNoteGroup' - 'level:started': -> @setWorldLoading(false) + 'level:loading-view-unveiling': -> @setWorldLoading(false) 'level:restarted': 'onLevelRestarted' 'level:shift-space-pressed': 'onEndNoteGroup' 'level:escape-pressed': 'onEndAll' diff --git a/app/lib/surface/Surface.coffee b/app/lib/surface/Surface.coffee index 2d8c45fb1..85fd293b7 100644 --- a/app/lib/surface/Surface.coffee +++ b/app/lib/surface/Surface.coffee @@ -34,7 +34,7 @@ module.exports = Surface = class Surface extends CocoClass currentFrame: 0 lastFrame: null totalFramesDrawn: 0 - playing: true # play vs. pause + playing: false # play vs. pause dead: false # if we kill it for some reason imagesLoaded: false worldLoaded: false @@ -146,7 +146,6 @@ module.exports = Surface = class Surface extends CocoClass @showLevel() @updateState true if @loaded @onFrameChanged() - Backbone.Mediator.publish 'surface:world-set-up', {world: @world} showLevel: -> return if @destroyed diff --git a/app/lib/world/names.coffee b/app/lib/world/names.coffee index 46413cbcc..38679fcfd 100644 --- a/app/lib/world/names.coffee +++ b/app/lib/world/names.coffee @@ -318,7 +318,7 @@ module.exports.thangNames = thangNames = 'Griffin Rider': [ 'Aeoldan' 'Bestarius' - + 'Letholdus' ] 'Potion Master': [ 'Snake' @@ -373,4 +373,6 @@ module.exports.thangNames = thangNames = 'Lia' 'Hardcastle' 'Leona' + 'Jarin' + 'Helena' ] diff --git a/app/locale/ar.coffee b/app/locale/ar.coffee index fa6e505d6..a1e8bcd8e 100644 --- a/app/locale/ar.coffee +++ b/app/locale/ar.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi delay_5_sec: "5 ثواني" manual: "يدوي" fork: "إنسخ" - play: "إلعب" + play: "إلعب" # When used as an action verb, like "Play next level" retry: "إعادة" watch: "مشاهدة" unwatch: "إنهاء المشاهدة" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi page_not_found: "الصفحة غير موجودة" nav: - play: "إلعب" + play: "إلعب" # The top nav bar entry where players choose which levels to play community: "مجتمع" editor: "محرّر" blog: "مدوّنة" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi slogan: "تعلّم البرمجة من لعب لعبة" no_ie: "CodeCombat لا يعمل في Internet Explorer 9 أو أقل. آسف!" no_mobile: "لم يصمم CodeCombat للهواتف النقالة وقد لا يعمل!" - play: "إلعب" + play: "إلعب" # The big play button that just starts playing a level old_browser: "اه أوه، متصفحك قديم جدا لتشغيل CodeCombat. آسف!" old_browser_suffix: "يمكنك محاولة على أي حال، لكنه ربما لن يعمل." campaign: "حملة" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi spectate: "مشاهد" players: "لاعبين" hours_played: "ساعات اللّعب" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "الاتّصال بـ CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/bg.coffee b/app/locale/bg.coffee index ed1ef977d..ab680e26e 100644 --- a/app/locale/bg.coffee +++ b/app/locale/bg.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "български език", englishDescri delay_5_sec: "5 секунди" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "български език", englishDescri page_not_found: "Страницата не е намерена" nav: - play: "Нива" + play: "Нива" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Редактор" blog: "Блог" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "български език", englishDescri slogan: "Научи се да програмираш, докато играеш игра " no_ie: "CodeCombat не работи под Internet Explorer 9 или по-стар. Съжалявам!" no_mobile: "CodeCombat не е направен за мобилни устройства и може да не работи!" - play: "Играй" + play: "Играй" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "български език", englishDescri # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "български език", englishDescri # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "български език", englishDescri # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "български език", englishDescri # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/ca.coffee b/app/locale/ca.coffee index 56777cf14..e98b02dc6 100644 --- a/app/locale/ca.coffee +++ b/app/locale/ca.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr delay_5_sec: "5 segons" manual: "Manual" fork: "Fork" - play: "Jugar" + play: "Jugar" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr # page_not_found: "Page not found" nav: - play: "Nivells" + play: "Nivells" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr slogan: "Aprén a programar tot Jugant" no_ie: "CodeCombat no funciona en Internet Explorer 9 o versions anteriors. Perdó!" no_mobile: "CodeCombat no ha estat dissenyat per dispositius mòbils i per tant no funcionarà!" - play: "Jugar" + play: "Jugar" # The big play button that just starts playing a level old_browser: "Uh oh, el teu navegador és massa antic per fer funcionar CodeCombat. Perdó!" old_browser_suffix: "Pots probar-ho igualment, però el més segur és que no funcioni." campaign: "Campanya" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contacta CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/cs.coffee b/app/locale/cs.coffee index c0ed1d243..7b18b5375 100644 --- a/app/locale/cs.coffee +++ b/app/locale/cs.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr delay_5_sec: "5 vteřin" manual: "Ručně" fork: "Klonovat" - play: "Přehrát" + play: "Přehrát" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr page_not_found: "Stránka nenalezena" nav: - play: "Úrovně" + play: "Úrovně" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr slogan: "Naučte se programování tu při hraní více-hráčové programovací hry." no_ie: "Omlouváme se, ale CodeCombat boužel nefunguje v Internet Exploreru 9 nebo starším." no_mobile: "CodeCombat není navržen pro mobilní zařízení a nemusí fungovat správně!" - play: "Hrát" + play: "Hrát" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Konktujte CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/da.coffee b/app/locale/da.coffee index 7ce41ea34..a715dbbbd 100644 --- a/app/locale/da.coffee +++ b/app/locale/da.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans delay_5_sec: "5 sekunder" manual: "Manual" fork: "Forgren" - play: "Spil" + play: "Spil" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans page_not_found: "Siden blev ikke fundet" nav: - play: "Spil" + play: "Spil" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans slogan: "Lær at Kode ved at Spille et Spil" no_ie: "CodeCombat kan desværre ikke køre i Internet Explorer 9 eller ældre. Beklager!" no_mobile: "CodeCombat er ikke designet til mobile enheder og vil måske ikke virke!" - play: "Spil" + play: "Spil" # The big play button that just starts playing a level old_browser: "Åh åh, din browser er for gammel til at køre CodeCombat. Beklager!" old_browser_suffix: "Du kan godt prøve alligevel, men det vil nok ikke virke." campaign: "Kampagne" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans spectate: "Observér" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Kontakt CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/de-AT.coffee b/app/locale/de-AT.coffee index 705aa9f77..2b05da473 100644 --- a/app/locale/de-AT.coffee +++ b/app/locale/de-AT.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription: delay_5_sec: "5 Sekunden" manual: "Manuell" fork: "Fork" - play: "Abspielen" + play: "Abspielen" # When used as an action verb, like "Play next level" retry: "Erneut versuchen" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription: page_not_found: "Seite nicht gefunden" nav: - play: "Spielen" + play: "Spielen" # The top nav bar entry where players choose which levels to play community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription: slogan: "Lerne spielend Programmieren" no_ie: "CodeCombat läuft nicht im IE8 oder älteren Browsern. Tut uns Leid!" no_mobile: "CodeCombat ist nicht für Mobilgeräte optimiert und funktioniert möglicherweise nicht." - play: "Spielen" + play: "Spielen" # The big play button that just starts playing a level old_browser: "Oh! Dein Browser ist zu alt für CodeCombat. Sorry!" old_browser_suffix: "Du kannst es trotzdem versuchen, aber es wird wahrscheinlich nicht funktionieren." campaign: "Kampagne" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription: spectate: "Zuschauen" players: "Spieler" hours_played: "Stunden gespielt" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Kontaktiere CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription: multiplayer_caption: "Spiele mit Freunden!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" save_load: granularity_saved_games: "Gespeichert" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription: tutorial_play_first: "Spiele zuerst das Tutorial." simple_ai: "Einfache KI" warmup: "Aufwärmen" - vs: "VS" friends_playing: "spielende Freunde" log_in_for_friends: "Melde dich an um mit deinen Freunden zu spielen!" social_connect_blurb: "Verbinde und spiele gegen deine Freunde!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription: user_remarks: "Benutzerkommentare" versions: "Versionen" items: "Gegenstände" +# heroes: "Heroes" wizard: "Zauberer" achievement: "Achievement" clas: "CLAs" diff --git a/app/locale/de-CH.coffee b/app/locale/de-CH.coffee index 0cc876726..93b7c8ab1 100644 --- a/app/locale/de-CH.coffee +++ b/app/locale/de-CH.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge delay_5_sec: "5 sekunde" manual: "Aleitig" # fork: "Fork" - play: "Spiele" + play: "Spiele" # When used as an action verb, like "Play next level" retry: "nomol versuche" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge page_not_found: "Siite nid gfunde" nav: - play: "Levels" + play: "Levels" # The top nav bar entry where players choose which levels to play community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge slogan: "Lern, wiemer JavaScript programmiert indem du es Spiel spielsch!" no_ie: "CodeCombat funktioniert uf InternetExplorer 9 und älter nid. Sorry!" no_mobile: "CodeCombat isch nid für mobili Grät entwicklet worde und funktioniert vilicht nid!" - play: "Spiele" + play: "Spiele" # The big play button that just starts playing a level old_browser: "Uh oh, din Browser isch z alt zum CodeCombat spiele. Sorry!" old_browser_suffix: "Du chasches gliich probiere, aber es funktioniert worschinli nid." campaign: "Kampagne" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge spectate: "Zueluege" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "CodeCombat kontaktiere" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/de-DE.coffee b/app/locale/de-DE.coffee index 187e51385..22f6c26c2 100644 --- a/app/locale/de-DE.coffee +++ b/app/locale/de-DE.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription: delay_5_sec: "5 Sekunden" manual: "Manuell" fork: "Fork" - play: "Abspielen" + play: "Abspielen" # When used as an action verb, like "Play next level" retry: "Erneut versuchen" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription: page_not_found: "Seite nicht gefunden" nav: - play: "Spielen" + play: "Spielen" # The top nav bar entry where players choose which levels to play community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription: slogan: "Lerne spielend Programmieren" no_ie: "CodeCombat läuft nicht im IE8 oder älteren Browsern. Tut uns Leid!" no_mobile: "CodeCombat ist nicht für Mobilgeräte optimiert und funktioniert möglicherweise nicht." - play: "Spielen" + play: "Spielen" # The big play button that just starts playing a level old_browser: "Oh! Dein Browser ist zu alt für CodeCombat. Sorry!" old_browser_suffix: "Du kannst es trotzdem versuchen, aber es wird wahrscheinlich nicht funktionieren." campaign: "Kampagne" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription: spectate: "Zuschauen" players: "Spieler" hours_played: "Stunden gespielt" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Kontaktiere CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription: multiplayer_caption: "Spiele mit Freunden!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" save_load: granularity_saved_games: "Gespeichert" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription: tutorial_play_first: "Spiele zuerst das Tutorial." simple_ai: "Einfache KI" warmup: "Aufwärmen" - vs: "VS" friends_playing: "spielende Freunde" log_in_for_friends: "Melde dich an um mit deinen Freunden zu spielen!" social_connect_blurb: "Verbinde und spiele gegen deine Freunde!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription: user_remarks: "Benutzerkommentare" versions: "Versionen" items: "Gegenstände" +# heroes: "Heroes" wizard: "Zauberer" achievement: "Achievement" clas: "CLAs" diff --git a/app/locale/el.coffee b/app/locale/el.coffee index 8b57c8dff..aade1241a 100644 --- a/app/locale/el.coffee +++ b/app/locale/el.coffee @@ -1,19 +1,19 @@ -module.exports = nativeDescription: "ελληνικά", englishDescription: "Greek", translation: +module.exports = nativeDescription: "Ελληνικά", englishDescription: "Greek", translation: common: loading: "Φορτώνει..." - saving: "Γίνεται αποθήκευση" - sending: "Αποστολή ..." -# send: "Send" + saving: "Αποθήκευση..." + sending: "Αποστολή..." + send: "Στείλε" cancel: "Ακύρωση" save: "Αποθήκευση" - publish: "Δημοσιοποίηση" + publish: "Δημοσίευση" create: "Δημιουργία" delay_1_sec: "1 δευτερόλεπτο" delay_3_sec: "3 δευτερόλεπτα" delay_5_sec: "5 δευτερόλεπτα" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,23 +43,23 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre page_not_found: "Η σελίδα δεν βρέθηκε" nav: - play: "Επίπεδα" -# community: "Community" -# editor: "Editor" + play: "Επίπεδα" # The top nav bar entry where players choose which levels to play + community: "Κοινότητα" + editor: "Συγγραφέας" blog: "Μπλόγκ" forum: "Φόρουμ" account: "Λογαριασμός" -# profile: "Profile" -# stats: "Stats" -# code: "Code" + profile: "Προφίλ" + stats: "Στατιστικά" + code: "Κώδικας" admin: "Διαχειριστής" home: "Αρχική" - contribute: "Συμβάλλω" - legal: "Νόμιμο" + contribute: "Συνεισφέρω" + legal: "Νόμικά" about: "Σχετικά με" - contact: "Επικοίνωνω" - twitter_follow: "Follow" -# employers: "Employers" + contact: "Επικοινωνία" + twitter_follow: "Ακολούθησε" + employers: "Εργοδότες" # versions: # save_version_title: "Save New Version" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre slogan: "Μάθε να προγραμμάτιζεις με JavaScript μέσω ενός παιχνιδιού" no_ie: "Το CodeCombat δεν παίζει με το Internet Explorer 9 ή κάποια παλαιότερη έκδοση. Συγνώμη!" no_mobile: "Το CodeCombat δεν σχεδιάστηκε για κινητά και μπορεί να μην δουλεύει!" - play: "Παίξε" + play: "Παίξε" # The big play button that just starts playing a level old_browser: "Ωχ, ο περιηγητής σας είναι πολύ παλιός για να τρέξετε το CodeCombat. Συγνώμη!" old_browser_suffix: "Μπορείτε να δοκιμάσετε, αλλά πιθανών να μην λειτουργήσει." campaign: "Εκστρατεία" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Επικοινωνήστε μαζί μας" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/en-AU.coffee b/app/locale/en-AU.coffee index 7fcf2a051..b7df63f91 100644 --- a/app/locale/en-AU.coffee +++ b/app/locale/en-AU.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/en-GB.coffee b/app/locale/en-GB.coffee index e3ccfde97..42f055ae9 100644 --- a/app/locale/en-GB.coffee +++ b/app/locale/en-GB.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/en-US.coffee b/app/locale/en-US.coffee index f5b072784..c019e79e9 100644 --- a/app/locale/en-US.coffee +++ b/app/locale/en-US.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/en.coffee b/app/locale/en.coffee index 8d1cc3b63..405ab7ec9 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -13,7 +13,7 @@ delay_5_sec: "5 seconds" manual: "Manual" fork: "Fork" - play: "Play" + play: "Play" # When used as an action verb, like "Play next level" retry: "Retry" watch: "Watch" unwatch: "Unwatch" @@ -43,7 +43,7 @@ page_not_found: "Page not found" nav: - play: "Levels" + play: "Levels" # The top nav bar entry where players choose which levels to play community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ slogan: "Learn to Code by Playing a Game" no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" - play: "Play" + play: "Play" # The big play button that just starts playing a level old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" old_browser_suffix: "You can try anyway, but it probably won't work." campaign: "Campaign" @@ -136,6 +136,9 @@ achievements: "Achievements" account: "Account" settings: "Settings" + next: "Next" + previous: "Previous" + choose_inventory: "Equip Items" items: armor: "Armor" @@ -415,6 +418,7 @@ skip_tutorial: "Skip (esc)" keyboard_shortcuts: "Key Shortcuts" loading_ready: "Ready!" + loading_start: "Start Level" tip_insert_positions: "Shift+Click a point on the map to insert it into the spell editor." tip_toggle_play: "Toggle play/paused with Ctrl+P." tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rewind and fast-forward." @@ -465,10 +469,16 @@ multiplayer_caption: "Play with friends!" inventory: - temp: "Temp" + choose_inventory: "Equip Items" choose_hero: - temp: "Temp" + choose_hero: "Choose Your Hero" + programming_language: "Programming Language" + programming_language_description: "Which programming language do you want to use?" + status: "Status" + weapons: "Weapons" + health: "Health" + speed: "Speed" save_load: granularity_saved_games: "Saved" @@ -979,6 +989,7 @@ user_remarks: "User Remarks" versions: "Versions" items: "Items" + heroes: "Heroes" wizard: "Wizard" achievement: "Achievement" clas: "CLAs" diff --git a/app/locale/es-419.coffee b/app/locale/es-419.coffee index e692a93ff..eea8c974b 100644 --- a/app/locale/es-419.coffee +++ b/app/locale/es-419.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip delay_5_sec: "5 segundos" manual: "Manual" fork: "Bifurcar" - play: "Jugar" + play: "Jugar" # When used as an action verb, like "Play next level" retry: "Reintentar" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip page_not_found: "Página no encontrada" nav: - play: "Jugar" + play: "Jugar" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip slogan: "Aprende a programar jugando" no_ie: "¡Lo sentimos! CodeCombat no funciona en Internet Explorer 9 o versiones anteriores." no_mobile: "¡CodeCombat no fue diseñado para dispositivos móviles y quizás no funcione!" - play: "Jugar" + play: "Jugar" # The big play button that just starts playing a level old_browser: "¡Oh! ¡Oh! Tu navegador es muy antiguo para correr CodeCombat. ¡Lo Sentimos!" old_browser_suffix: "Puedes probar de todas formas, pero probablemente no funcione." campaign: "Campaña" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip spectate: "Observar" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contacta a CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip tutorial_play_first: "Juega el Tutorial primero." simple_ai: "IA Simple" warmup: "Calentamiento" - vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/es-ES.coffee b/app/locale/es-ES.coffee index 1d73ddfd0..37a09d6f0 100644 --- a/app/locale/es-ES.coffee +++ b/app/locale/es-ES.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis delay_5_sec: "5 segundos" manual: "Manual" fork: "Bifurcar" - play: "Jugar" + play: "Jugar" # When used as an action verb, like "Play next level" retry: "Reintentar" watch: "Mirar" unwatch: "Pasar" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis page_not_found: "Página no encontrada" nav: - play: "Jugar" + play: "Jugar" # The top nav bar entry where players choose which levels to play community: "Comunidad" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis slogan: "Aprende a programar jugando" no_ie: "CodeCombat no funciona en Internet Explorer 9 o anteriores. ¡Lo sentimos!" no_mobile: "¡CodeCombat no fue diseñado para dispositivos móviles y puede que no funcione!" - play: "Jugar" + play: "Jugar" # The big play button that just starts playing a level old_browser: "Ay, su navegador es demasiado viejo para ejecutar CodeCombat. ¡Lo sentimos!" old_browser_suffix: "Lo puede intentar de todos modos, pero probablemente no va a funcionar." campaign: "Campaña" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis spectate: "Observar" players: "jugadores" hours_played: "horas jugadas" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contacta con CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis multiplayer_caption: "Juega con amigos!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" save_load: granularity_saved_games: "Salvado" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis tutorial_play_first: "Prueba el Tutorial primero." simple_ai: "IA sencilla" warmup: "calentamiento" - vs: "VS" friends_playing: "Amigos jugando" log_in_for_friends: "¡Inicia sesión para jugar con tus amigos!" social_connect_blurb: "¡Conectate y juega contra tus amigos!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis # user_remarks: "User Remarks" versions: "Versiones" items: "Objetos" +# heroes: "Heroes" wizard: "Mago" achievement: "Logro" # clas: "CLAs" diff --git a/app/locale/fa.coffee b/app/locale/fa.coffee index 25b436ab6..93c51fb2e 100644 --- a/app/locale/fa.coffee +++ b/app/locale/fa.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", delay_5_sec: "5 ثانیه" manual: "دستی" # fork: "Fork" - play: "سطوح" + play: "سطوح" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", page_not_found: "صفحه پیدا نشد" nav: - play: "سطوح" + play: "سطوح" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "ویرایشگر" blog: "بلاگ" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", slogan: "کد نویسیا با بازی بیاموزید" no_ie: "متاسفیم اما بازی بر روی مرورگر های اینترنت اکسپلورر نسخه ۹ به قبل اجرا نمی شود" no_mobile: "این بازی برای دستگاه های موبایل طراحی نشده است و بر روی آن ها اجرا نمی شود" - play: "شروع بازی" + play: "شروع بازی" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "CodeCombatتماس با " @@ -452,10 +468,16 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/fi.coffee b/app/locale/fi.coffee index 6b9b6b08d..35ea81e89 100644 --- a/app/locale/fi.coffee +++ b/app/locale/fi.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/fr.coffee b/app/locale/fr.coffee index 09db5bc9d..56505ae42 100644 --- a/app/locale/fr.coffee +++ b/app/locale/fr.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t delay_5_sec: "5 secondes" manual: "Manuel" fork: "Fork" - play: "Jouer" + play: "Jouer" # When used as an action verb, like "Play next level" retry: "Reessayer" watch: "Regarder" unwatch: "Ne plus regarder" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t page_not_found: "Page non trouvée" nav: - play: "Jouer" + play: "Jouer" # The top nav bar entry where players choose which levels to play community: "Communauté" editor: "Éditeur" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t slogan: "Apprenez à coder tout en jouant" no_ie: "CodeCombat ne fonctionnera pas sous Internet Explorer 9 ou moins. Désolé !" no_mobile: "CodeCombat n'a pas été créé pour les plateformes mobiles donc il est possible qu'il ne fonctionne pas correctement ! " - play: "Jouer" + play: "Jouer" # The big play button that just starts playing a level old_browser: "Oh oh, votre navigateur est trop vieux pour executer CodeCombat. Désolé!" old_browser_suffix: "Vous pouvez essayer quand même, mais celà ne marchera probablement pas." campaign: "Campagne" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "français", englishDescription: "French", t spectate: "Spectateur" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contacter CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "français", englishDescription: "French", t # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "français", englishDescription: "French", t tutorial_play_first: "Jouer au Tutoriel d'abord." simple_ai: "IA simple" warmup: "Préchauffe" - vs: "VS" # friends_playing: "Friends Playing" log_in_for_friends: "Connectez vous pour jouer avec vos amis!" social_connect_blurb: "Connectez vous pour jouer contre vos amis!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/he.coffee b/app/locale/he.coffee index 48d8ddbc7..281a34b01 100644 --- a/app/locale/he.coffee +++ b/app/locale/he.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", delay_5_sec: "חמש שניות" manual: "מדריך" fork: "קילשון" - play: "שחק" + play: "שחק" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", page_not_found: "העמוד לא נמצא" nav: - play: "שלבים" + play: "שלבים" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "עורך" blog: "בלוג" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", slogan: "גם לשחק וגם ללמוד לתכנת" no_ie: "המשחק לא עובד באקפלורר 9 וישן יותר. סליחה!" no_mobile: "המשחק לא עוצב לטלפונים ואולי לא יעבוד" - play: "שחק" + play: "שחק" # The big play button that just starts playing a level old_browser: "או או, נראה כי הדפדפן שלך יותר מידי ישן כדי להריץ את המשחק. סליחה!" old_browser_suffix: "אתה יכול לנסות בכול מקרה אבל זה כנראה לא יעבוד." campaign: "מסע" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", spectate: "צופה" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "צור קשר" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/hi.coffee b/app/locale/hi.coffee index b036f7230..b2dd47c7f 100644 --- a/app/locale/hi.coffee +++ b/app/locale/hi.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/hu.coffee b/app/locale/hu.coffee index 50c340524..3d2c90a70 100644 --- a/app/locale/hu.coffee +++ b/app/locale/hu.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t delay_5_sec: "5 másodperc" manual: "Kézi" # fork: "Fork" - play: "Játék" + play: "Játék" # When used as an action verb, like "Play next level" retry: "Próbáld újra!" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t page_not_found: "Az oldal nem található" nav: - play: "Játék" + play: "Játék" # The top nav bar entry where players choose which levels to play community: "Közösség" editor: "Szerkesztő" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t slogan: "Tanulj meg nyelven programozni, miközben játszol!" no_ie: "A CodeCombat nem támogatja az Internet Explorer 9, vagy korábbi verzióit. Bocsi!" no_mobile: "A CodeCombat nem mobil eszközökre lett tervezve. Valószínűleg nem működik helyesen." - play: "Játssz!" + play: "Játssz!" # The big play button that just starts playing a level old_browser: "Hohó, a böngésződ már túl régi ahhoz, hogy a CodeCombat futhasson rajta. Bocsi!" old_browser_suffix: "Megpróbálhatod éppen, da valószínűleg nem fog működni.." campaign: "Kampány" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Lépj kapcsolatba velünk" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/id.coffee b/app/locale/id.coffee index 5c11c17df..12f6a1ab1 100644 --- a/app/locale/id.coffee +++ b/app/locale/id.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/it.coffee b/app/locale/it.coffee index de2154bdd..f79b5d23e 100644 --- a/app/locale/it.coffee +++ b/app/locale/it.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t delay_5_sec: "5 secondi" manual: "Manuale" fork: "Fork" - play: "Gioca" + play: "Gioca" # When used as an action verb, like "Play next level" retry: "Riprova" watch: "Guarda" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t page_not_found: "Pagina non trovata" nav: - play: "Livelli" + play: "Livelli" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t slogan: "Impara a programmare giocando" no_ie: "CodeCombat non supporta Internet Explorer 9 o browser precedenti. Ci dispiace!" no_mobile: "CodeCombat non è stato progettato per dispositivi mobile e potrebbe non funzionare!" - play: "Gioca" + play: "Gioca" # The big play button that just starts playing a level old_browser: "Accidenti, il tuo browser è troppo vecchio per giocare a CodeCombat. Mi spiace!" old_browser_suffix: "Puoi provare lo stesso, ma probabilmente non funzionerà." campaign: "Campagna" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t spectate: "Spettatore" players: "giocatori" hours_played: "ore di gioco" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contatta CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t multiplayer_caption: "Gioca con i tuoi amici!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" save_load: granularity_saved_games: "Salvato" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t tutorial_play_first: "Prima di tutto gioca al Tutorial." # simple_ai: "Simple AI" # warmup: "Warmup" - vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/ja.coffee b/app/locale/ja.coffee index 85448d51f..36c13cb8c 100644 --- a/app/locale/ja.coffee +++ b/app/locale/ja.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", delay_5_sec: "5秒" manual: "手動" # fork: "Fork" - play: "ゲームスタート" + play: "ゲームスタート" # When used as an action verb, like "Play next level" retry: "リトライ" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", page_not_found: "ページが見つかりません" nav: - play: "ゲームスタート" + play: "ゲームスタート" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "レベルエディタ" blog: "ブログ" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", slogan: "ゲームをプレイして学びましょう" no_ie: "大変申し訳ありませんが、ご利用のブラウザ(IE8以下)はサポートされていません。(ChromeやFirefoxをご利用ください)" no_mobile: "CodeCombat は携帯端末向けに制作されていないため、動作しない可能性があります。" - play: "ゲームスタート" + play: "ゲームスタート" # The big play button that just starts playing a level old_browser: "ご利用のブラウザはCodeCombatを動作させるには古すぎるようです" old_browser_suffix: "このまま進めることもできますが、正常動作は保証されません" campaign: "キャンペーンモード" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "お問い合わせ" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/ko.coffee b/app/locale/ko.coffee index d27aac462..d58b3f381 100644 --- a/app/locale/ko.coffee +++ b/app/locale/ko.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t delay_5_sec: "5초" manual: "수동" fork: "Fork" - play: "시작" + play: "시작" # When used as an action verb, like "Play next level" retry: "재시도" watch: "보기" unwatch: "보기 해제" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t page_not_found: "페이지를 찾을 수 없습니다" nav: - play: "레벨" + play: "레벨" # The top nav bar entry where players choose which levels to play community: "커뮤니티" editor: "에디터" blog: "블로그" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t slogan: "쉽고 간단한 게임 배우기" no_ie: "죄송하지만 코드컴뱃은 인터넷 익스플로러 9에서는 동작하지 않습니다." no_mobile: "코드 컴뱃은 모바일 기기용으로 제작되지 않았습니다. 아마 동작하지 않을 가능성이 높습니다." - play: "시작" + play: "시작" # The big play button that just starts playing a level old_browser: "브라우저가 너무 오래된 버전이라 코드 컴뱃을 실행할 수 없습니다." old_browser_suffix: "시도해볼 수는 있겠지만..안될 수도 있습니다." campaign: "캠페인" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t spectate: "관중모드" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "코드컴뱃에 전할 말" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t tutorial_play_first: "튜토리얼을 먼저 플레이해보세요." # simple_ai: "Simple AI" # warmup: "Warmup" - vs: "VS" # friends_playing: "Friends Playing" log_in_for_friends: "로그인하시고 친구들과 게임을 즐기세요!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/lt.coffee b/app/locale/lt.coffee index ab91fb4db..8e17f5090 100644 --- a/app/locale/lt.coffee +++ b/app/locale/lt.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/ms.coffee b/app/locale/ms.coffee index 8468bbacc..e61184183 100644 --- a/app/locale/ms.coffee +++ b/app/locale/ms.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # delay_5_sec: "5 seconds" manual: "Panduan" # fork: "Fork" - play: "Mula" + play: "Mula" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa page_not_found: "Halaman tidak ditemui" nav: - play: "Mula" + play: "Mula" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa slogan: "Belajar Kod bDengan Permainan" no_ie: "CodeCombat tidak berfungsi dalam Internet Explorer 9 dan terdahulu. Maaf!" no_mobile: "CodeCombat tidak dibangunkan untuk telefon mudah-alih dan tablet dan tidak akan berfungsi!" - play: "Mula" + play: "Mula" # The big play button that just starts playing a level old_browser: "Uh oh, browser anda terlalu lama untuk CodeCombat berfungsi. Maaf!" old_browser_suffix: "Anda boleh mencuba, tapi mungkin ia tidak akan berfungsi." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Hubungi CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/nb.coffee b/app/locale/nb.coffee index 2de3f086b..97df939bc 100644 --- a/app/locale/nb.coffee +++ b/app/locale/nb.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg delay_5_sec: "5 sekunder" manual: "Manuelt" # fork: "Fork" - play: "Spill" + play: "Spill" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg page_not_found: "Finner ikke siden" nav: - play: "Spill" + play: "Spill" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blogg" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg slogan: "Lær å Kode ved å Spille et Spill" no_ie: "CodeCombat kjører ikke på IE8 eller eldre. Beklager!" no_mobile: "CodeCombat ble ikke designet for mobile enheter, og vil muligens ikke virke!" - play: "Spill" + play: "Spill" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Kontakt CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/nl-BE.coffee b/app/locale/nl-BE.coffee index 2944d9357..dc71be608 100644 --- a/app/locale/nl-BE.coffee +++ b/app/locale/nl-BE.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: delay_5_sec: "5 secondes" manual: "Handleiding" fork: "Fork" - play: "Spelen" + play: "Spelen" # When used as an action verb, like "Play next level" retry: "Probeer opnieuw" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: page_not_found: "Pagina niet gevonden" nav: - play: "Levels" + play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: slogan: "Leer programmeren door het spelen van een spel" no_ie: "CodeCombat werkt niet in IE8 of ouder. Sorry!" no_mobile: "CodeCombat is niet gemaakt voor mobiele apparaten en werkt misschien niet!" - play: "Speel" + play: "Speel" # The big play button that just starts playing a level old_browser: "Uh oh, jouw browser is te oud om CodeCombat te kunnen spelen, Sorry!" old_browser_suffix: "Je kan toch proberen, maar het zal waarschijnlijk niet werken!" campaign: "Campagne" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: spectate: "Toeschouwen" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contact opnemen met CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: tutorial_play_first: "Speel eerst de Tutorial." simple_ai: "Simpele AI" warmup: "Opwarming" - vs: "tegen" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/nl-NL.coffee b/app/locale/nl-NL.coffee index 8e56b0e82..3182fe7f5 100644 --- a/app/locale/nl-NL.coffee +++ b/app/locale/nl-NL.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription delay_5_sec: "5 secondes" manual: "Handleiding" fork: "Fork" - play: "Spelen" + play: "Spelen" # When used as an action verb, like "Play next level" retry: "Probeer opnieuw" watch: "Volgen" unwatch: "Ontvolgen" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription page_not_found: "Pagina niet gevonden" nav: - play: "Levels" + play: "Levels" # The top nav bar entry where players choose which levels to play community: "Gemeenschap" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription slogan: "Leer programmeren door het spelen van een spel" no_ie: "CodeCombat werkt niet in IE8 of ouder. Sorry!" no_mobile: "CodeCombat is niet gemaakt voor mobiele apparaten en werkt misschien niet!" - play: "Speel" + play: "Speel" # The big play button that just starts playing a level old_browser: "Uh oh, jouw browser is te oud om CodeCombat te kunnen spelen, Sorry!" old_browser_suffix: "Je kan toch proberen, maar het zal waarschijnlijk niet werken!" campaign: "Campagne" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription spectate: "Toeschouwen" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contact opnemen met CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription tutorial_play_first: "Speel eerst de Tutorial." simple_ai: "Simpele AI" warmup: "Opwarming" - vs: "tegen" friends_playing: "Spelende Vrienden" # log_in_for_friends: "Log in to play with your friends!" social_connect_blurb: "Koppel je sociaal netwerk om tegen je vrienden te spelen!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/nn.coffee b/app/locale/nn.coffee index 81eafea0d..8e16ab8e2 100644 --- a/app/locale/nn.coffee +++ b/app/locale/nn.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/no.coffee b/app/locale/no.coffee index 73af1d5e9..5a0f4b248 100644 --- a/app/locale/no.coffee +++ b/app/locale/no.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr delay_5_sec: "5 sekunder" manual: "Manuelt" # fork: "Fork" - play: "Spill" + play: "Spill" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr page_not_found: "Finner ikke siden" nav: - play: "Spill" + play: "Spill" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blogg" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr slogan: "Lær å kode ved å spille et spill" no_ie: "CodeCombat kjører ikke på IE8 eller eldre. Beklager!" no_mobile: "CodeCombat ble ikke designet for mobile enheter, og vil muligens ikke virke!" - play: "Spill" + play: "Spill" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Kontakt CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/pl.coffee b/app/locale/pl.coffee index 9486b55b3..1d0152101 100644 --- a/app/locale/pl.coffee +++ b/app/locale/pl.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish delay_5_sec: "5 sekund" manual: "Ręcznie" fork: "Fork" - play: "Graj" + play: "Graj" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish page_not_found: "Strona nie istnieje" nav: - play: "Graj" + play: "Graj" # The top nav bar entry where players choose which levels to play community: "Społeczność" editor: "Edytor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish slogan: "Naucz się programowania grając" no_ie: "CodeCombat nie działa na Internet Explorer 9 lub starszym. Przepraszamy!" no_mobile: "CodeCombat nie został zaprojektowany dla urządzeń przenośnych więc może nie działać!" - play: "Graj" + play: "Graj" # The big play button that just starts playing a level old_browser: "Wygląda na to, że twoja przeglądarka jest zbyt stara, by obsłużyć CodeCombat. Wybacz!" old_browser_suffix: "Możesz spróbowac mimo tego, ale prawdopodobnie gra nie będzie działać." campaign: "Kampania" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish spectate: "Oglądaj" players: "graczy" hours_played: "rozegranych godzin" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Kontakt z CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish multiplayer_caption: "Graj ze znajomymi!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish tutorial_play_first: "Rozegraj najpierw samouczek." simple_ai: "Proste AI" warmup: "Rozgrzewka" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/pt-BR.coffee b/app/locale/pt-BR.coffee index 725ce0965..569a6f477 100644 --- a/app/locale/pt-BR.coffee +++ b/app/locale/pt-BR.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: delay_5_sec: "5 segundos" manual: "Manual" fork: "Fork" - play: "Jogar" + play: "Jogar" # When used as an action verb, like "Play next level" retry: "Tente novamente" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: page_not_found: "Página não encontrada" nav: - play: "Jogar" + play: "Jogar" # The top nav bar entry where players choose which levels to play community: "Comunidade" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: slogan: "Aprenda a programar enquanto se diverte com um jogo." no_ie: "CodeCombat não roda em versões mais antigas que o Internet Explorer 10. Desculpe!" no_mobile: "CodeCombat não foi projetado para dispositivos móveis e pode não funcionar!" - play: "Jogar" + play: "Jogar" # The big play button that just starts playing a level old_browser: "Ops, seu navegador é muito antigo para rodar o CodeCombat. Desculpe!" old_browser_suffix: "Você pode tentar de qualquer forma, mas provavelmente não irá funcionar." campaign: "Campanha" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: spectate: "Assistir" players: "jogadores" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contate-nos" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: tutorial_play_first: "Jogue o Tutorial primeiro." simple_ai: "IA Simples" warmup: "Aquecimento" - vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/pt-PT.coffee b/app/locale/pt-PT.coffee index 865c3d222..0ba11aabd 100644 --- a/app/locale/pt-PT.coffee +++ b/app/locale/pt-PT.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription: delay_5_sec: "5 segundos" manual: "Manual" fork: "Bifurcar" - play: "Jogar" + play: "Jogar" # When used as an action verb, like "Play next level" retry: "Tentar Novamente" watch: "Vigiar" unwatch: "Desvigiar" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription: page_not_found: "Página não encontrada" nav: - play: "Níveis" + play: "Níveis" # The top nav bar entry where players choose which levels to play community: "Comunidade" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription: slogan: "Aprenda a Programar ao Jogar um Jogo" no_ie: "O CodeCombat não funciona no Internet Explorer 9 ou anterior. Desculpe!" no_mobile: "O CodeCombat não foi feito para dispositivos móveis e pode não funcionar!" - play: "Jogar" + play: "Jogar" # The big play button that just starts playing a level old_browser: "Ups, o seu navegador é demasiado antigo para que o CodeCombat funcione. Desculpe!" old_browser_suffix: "Mesmo assim pode tentar, mas provavelmente não irá funcionar." campaign: "Campanha" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription: spectate: "Espectar" players: "jogadores" hours_played: "horas jogadas" + items: "Itens" + heroes: "Heróis" + achievements: "Conquistas" + account: "Conta" + settings: "Definições" + next: "Seguinte" + previous: "Anterior" + choose_inventory: "Equipar Itens" + + items: + armor: "Armadura" + hands: "Mãos" + accessories: "Acessórios" + books: "Livros" + minions: "Minions" + misc: "Vários" contact: contact_us: "Contacte o CodeCombat" @@ -451,11 +467,17 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription: guide_caption: "Documentos e dicas" multiplayer_caption: "Jogue com amigos!" -# inventory: -# temp: "Temp" + inventory: + choose_inventory: "Equipar Itens" -# choose_hero: -# temp: "Temp" + choose_hero: + choose_hero: "Escolha o Seu Herói" + programming_language: "Linguagem de Programação" + programming_language_description: "Que linguagem de programação quer usar?" + status: "Estado" + weapons: "Armas" + health: "Vida" + speed: "Velocidade" save_load: granularity_saved_games: "Guardados" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription: tutorial_play_first: "Joga o Tutorial primeiro." simple_ai: "Inteligência Artificial Simples" warmup: "Aquecimento" - vs: "VS" friends_playing: "Amigos a Jogar" log_in_for_friends: "Inicie sessão para jogar com os seus amigos!" social_connect_blurb: "Conecte-se e jogue contra os seus amigos!" @@ -967,10 +988,11 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription: user_remarks: "Observações de Utilizador" versions: "Versões" items: "Itens" + heroes: "Heróis" wizard: "Feiticeiro" achievement: "Conquista" clas: "CLAs" -# play_counts: "Play Counts" + play_counts: "Número de Jogos" feedback: "Feedback" delta: diff --git a/app/locale/ro.coffee b/app/locale/ro.coffee index e57ed93ae..aa2ef918b 100644 --- a/app/locale/ro.coffee +++ b/app/locale/ro.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman delay_5_sec: "5 secunde" manual: "Manual" fork: "Fork" - play: "Joacă" + play: "Joacă" # When used as an action verb, like "Play next level" retry: "Reîncearca" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman page_not_found: "Pagina nu a fost gasită" nav: - play: "Nivele" + play: "Nivele" # The top nav bar entry where players choose which levels to play community: "Communitate" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman slogan: "Învață sa scrii cod jucându-te" no_ie: "CodeCombat nu merge pe Internet Explorer 9 sau mai vechi. Scuze!" no_mobile: "CodeCombat nu a fost proiectat pentru dispozitive mobile si s-ar putea sa nu meargă!" - play: "Joacă" + play: "Joacă" # The big play button that just starts playing a level old_browser: "Mda , browser-ul tău este prea vechi pentru CodeCombat. Scuze!" old_browser_suffix: "Poți să încerci oricum ,dar probabil nu o să meargă." campaign: "Campanie" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman spectate: "Spectator" players: "jucători" hours_played: "ore jucate" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman multiplayer_caption: "Joaca cu prieteni!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman tutorial_play_first: "Joacă Tutorial-ul mai întâi." simple_ai: "AI simplu" warmup: "Încălzire" - vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/ru.coffee b/app/locale/ru.coffee index bd133c8c9..984f681d7 100644 --- a/app/locale/ru.coffee +++ b/app/locale/ru.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi delay_5_sec: "5 секунд" manual: "Вручную" fork: "Форк" - play: "Играть" + play: "Играть" # When used as an action verb, like "Play next level" retry: "Повторить" watch: "Следить" unwatch: "Не следить" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi page_not_found: "Страница не найдена" nav: - play: "Уровни" + play: "Уровни" # The top nav bar entry where players choose which levels to play community: "Сообщество" editor: "Редактор" blog: "Блог" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi slogan: "Научитесь программировать, играя в игру" no_ie: "CodeCombat не работает в IE8 или более старых версиях. Нам очень жаль!" no_mobile: "CodeCombat не приспособлен для работы на мобильных устройствах и может не работать!" - play: "Играть" + play: "Играть" # The big play button that just starts playing a level old_browser: "Ой, ваш браузер слишком стар для запуска CodeCombat. Извините!" old_browser_suffix: "Вы всё равно можете попробовать, но, скорее всего, это не будет работать." campaign: "Кампания" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi spectate: "Наблюдать" players: "игроки" hours_played: "часов сыграно" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Связаться с CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi tutorial_play_first: "Сначала пройдите обучение." simple_ai: "Простой ИИ" warmup: "Разминка" - vs: "против" friends_playing: "Друзья в игре" log_in_for_friends: "Войти, чтобы поиграть с друзьями!" social_connect_blurb: "Свяжите учетную запись и играйте против друзей!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi # user_remarks: "User Remarks" versions: "Версии" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/sk.coffee b/app/locale/sk.coffee index f8427f495..198f49734 100644 --- a/app/locale/sk.coffee +++ b/app/locale/sk.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", delay_5_sec: "5 sekúnd" manual: "Manuál" # fork: "Fork" - play: "Hraj" + play: "Hraj" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", page_not_found: "Stránka nenájdená" nav: - play: "Hraj" + play: "Hraj" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", slogan: "Nauč sa programovať pomocou hry" no_ie: "CodeCombat nefunguje v prehliadači Internet Explorer 9 a jeho starších verziách. Ospravedlňujeme sa." no_mobile: "CodeCombat nebol navrhnutý pre mobilné zariadenia a nemusí na nich fungovať správne!" - play: "Hraj" + play: "Hraj" # The big play button that just starts playing a level old_browser: "Ajaj, prehliadač je príliš starý. CodeCombat na ňom nepôjde. Je nám to ľúto!" old_browser_suffix: "Skúsiť sa to dá, ale asi to nepôjde." campaign: "Ťaženie" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", spectate: "Sleduj" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Kontaktujte nás" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/sl.coffee b/app/locale/sl.coffee index 60135b4f6..36ab94892 100644 --- a/app/locale/sl.coffee +++ b/app/locale/sl.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/sr.coffee b/app/locale/sr.coffee index 1980084db..383bf44b2 100644 --- a/app/locale/sr.coffee +++ b/app/locale/sr.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian delay_5_sec: "5 секунди" manual: "Упутство" # fork: "Fork" - play: "Нивои" + play: "Нивои" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian page_not_found: "Страница није нађена" nav: - play: "Нивои" + play: "Нивои" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Уређивач" blog: "Блог" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian slogan: "Научи да пишеш код играјући игру" no_ie: "CodeCombat не ради у IE8 и старијим верзијама. Жао нам је!" no_mobile: "CodeCombat није дизајниран за мобилне уређаје и може да се деси да не ради!" - play: "Играј" + play: "Играј" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Контактирај CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/sv.coffee b/app/locale/sv.coffee index 4707ff8a5..bde828292 100644 --- a/app/locale/sv.coffee +++ b/app/locale/sv.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr delay_5_sec: "5 sekunder" manual: "Manuellt" fork: "Förgrena" - play: "Spela" + play: "Spela" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr page_not_found: "Sidan kan inte hittas" nav: - play: "Spela" + play: "Spela" # The top nav bar entry where players choose which levels to play community: "Community" editor: "Nivåredigerare" blog: "Blogg" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr slogan: "Lär dig att koda genom att spela ett spel." no_ie: "CodeCombat fungerar tyvärr inte i IE8 eller äldre." no_mobile: "CodeCombat är inte designat för mobila enhter och fungerar kanske inte!" - play: "Spela" + play: "Spela" # The big play button that just starts playing a level old_browser: "Oj då, din webbläsare är för gammal för att köra CodeCombat. Förlåt!" old_browser_suffix: "Du kan försöka ändå, men det kommer nog inte fungera." campaign: "Kampanj" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr spectate: "Titta på" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Kontakta CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr tutorial_play_first: "Spela tutorial först." simple_ai: "Enkelt AI" warmup: "Uppvärmning" - vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/th.coffee b/app/locale/th.coffee index 3e06f4c97..d4fd0f7dd 100644 --- a/app/locale/th.coffee +++ b/app/locale/th.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra delay_5_sec: "5 วินาที" # manual: "Manual" # fork: "Fork" - play: "เล่น" + play: "เล่น" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra page_not_found: "ขออภัย ไม่พบหน้าเว็บที่คุณต้องการ" nav: - play: "เล่น" + play: "เล่น" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Editor" blog: "บล็อก" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" - play: "เล่น" + play: "เล่น" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/tr.coffee b/app/locale/tr.coffee index e5147d94d..b80797dc9 100644 --- a/app/locale/tr.coffee +++ b/app/locale/tr.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t delay_5_sec: "5 saniye" manual: "El ile" fork: "Çatalla" - play: "Oyna" + play: "Oyna" # When used as an action verb, like "Play next level" retry: "Yeniden Dene" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t page_not_found: "Sayfa bulunamadı" nav: - play: "Oyna" + play: "Oyna" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Düzenleyici" blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t slogan: "Oyun oynayarak kodlamayı öğrenin" no_ie: "CodeCombat maalesef Internet Explorer 9 veya daha eski sürümlerde çalışmaz." no_mobile: "CodeCombat mobil cihazlar için tasarlanmamıştır bu sebeple mobil cihazlarda çalışmayabilir." - play: "Oyna" + play: "Oyna" # The big play button that just starts playing a level old_browser: "Olamaz, Tarayıcınız CodeCombat'ı çalıştırmak için çok eski. Üzgünüz!" old_browser_suffix: "Deneyebilirsiniz, ama muhtemelen oyun çalışmayacaktır." campaign: "Senaryo Modu" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t spectate: "İzleyici olarak katıl" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "CodeCombat ile İletişim" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/uk.coffee b/app/locale/uk.coffee index f2a5b0ab6..9a6863e40 100644 --- a/app/locale/uk.coffee +++ b/app/locale/uk.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "українська мова", englishDesc delay_5_sec: "5 секунд" manual: "Інструкція" fork: "Форк" - play: "Грати" + play: "Грати" # When used as an action verb, like "Play next level" retry: "Повтор" watch: "Стежити" unwatch: "Нестежити" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "українська мова", englishDesc page_not_found: "Сторінку не знайдено" nav: - play: "Грати" + play: "Грати" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Редактор" blog: "Блог" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "українська мова", englishDesc slogan: "Навчіться програмувати, граючи у гру" no_ie: "На жаль, CodeCombat не працює в IE8 чи більш старих версіях!" no_mobile: "CodeCombat не призначений для мобільних приладів і може не працювати!" - play: "Грати" + play: "Грати" # The big play button that just starts playing a level old_browser: "Вибачте, але ваш браузер дуже старий для гри CodeCombat" old_browser_suffix: "Ви все одно можете спробувати, хоча навряд чи вийде" campaign: "Кампанія" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "українська мова", englishDesc spectate: "Спостерігати" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Зв'язатися з CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "українська мова", englishDesc # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "українська мова", englishDesc # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "українська мова", englishDesc # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/ur.coffee b/app/locale/ur.coffee index 3ba9d56cb..1080b0060 100644 --- a/app/locale/ur.coffee +++ b/app/locale/ur.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/vi.coffee b/app/locale/vi.coffee index 0a71052d7..0491f573d 100644 --- a/app/locale/vi.coffee +++ b/app/locale/vi.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" - play: "Các cấp độ" + play: "Các cấp độ" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn page_not_found: "không tìm thấy trang" nav: - play: "Các cấp độ" + play: "Các cấp độ" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "Chỉnh sửa" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn slogan: "Học mã bằng chơi Games" no_ie: "Codecombat không chạy trong Internet Explorer 9 hoặc cũ hơn. Xin lỗi!" no_mobile: "Codecombat không được thiết kế cho các thiết bị di động và có thể không hoạt động được!" - play: "Chơi" + play: "Chơi" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "Liên hệ CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/zh-HANS.coffee b/app/locale/zh-HANS.coffee index 35718a2c2..1e97addfd 100644 --- a/app/locale/zh-HANS.coffee +++ b/app/locale/zh-HANS.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese delay_5_sec: "5 秒" manual: "手动" fork: "派生" - play: "开始" + play: "开始" # When used as an action verb, like "Play next level" retry: "重试" watch: "关注" unwatch: "取消关注" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese page_not_found: "找不到网页" nav: - play: "开始游戏" + play: "开始游戏" # The top nav bar entry where players choose which levels to play community: "社区" editor: "编辑器" blog: "博客" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese slogan: "通过游戏学习编程" no_ie: "抱歉! Internet Explorer 9 等旧式预览器无法使用本网站。" no_mobile: "CodeCombat 不是针对手机设备设计的,所以可能无法达到最好的体验!" - play: "开始游戏" + play: "开始游戏" # The big play button that just starts playing a level old_browser: "噢, 你的浏览器太老了, 不能运行CodeCombat. 抱歉!" old_browser_suffix: "你可以继续重试下去,但八成不起作用,更新浏览器吧亲~" campaign: "战役模式" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese spectate: "旁观他人的游戏" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "联系我们" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese tutorial_play_first: "先玩一次教程." simple_ai: "简单电脑" warmup: "热身" - vs: "对决" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/zh-HANT.coffee b/app/locale/zh-HANT.coffee index 33dca87eb..1f4a2939a 100644 --- a/app/locale/zh-HANT.coffee +++ b/app/locale/zh-HANT.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese delay_5_sec: "5 秒" manual: "手動發動" fork: "Fork" - play: "播放" + play: "播放" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese page_not_found: "找不到網頁" nav: - play: "開始遊戲" + play: "開始遊戲" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "編輯" blog: "官方部落格" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese slogan: "通過玩遊戲學習編程" no_ie: "抱歉!Internet Explorer 9 等舊的瀏覽器打不開此網站" no_mobile: "CodeCombat 不是針對手機設備設計的,所以可能會出問題!" - play: "開始遊戲" + play: "開始遊戲" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "聯繫我們" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/zh-WUU-HANS.coffee b/app/locale/zh-WUU-HANS.coffee index 585d69970..5bc8f0aff 100644 --- a/app/locale/zh-WUU-HANS.coffee +++ b/app/locale/zh-WUU-HANS.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi # delay_5_sec: "5 seconds" # manual: "Manual" # fork: "Fork" -# play: "Play" +# play: "Play" # When used as an action verb, like "Play next level" # retry: "Retry" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi # page_not_found: "Page not found" # nav: -# play: "Levels" +# play: "Levels" # The top nav bar entry where players choose which levels to play # community: "Community" # editor: "Editor" # blog: "Blog" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi # slogan: "Learn to Code by Playing a Game" # no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!" # no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!" -# play: "Play" +# play: "Play" # The big play button that just starts playing a level # old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi # spectate: "Spectate" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" # contact: # contact_us: "Contact CodeCombat" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi # tutorial_play_first: "Play the Tutorial first." # simple_ai: "Simple AI" # warmup: "Warmup" -# vs: "VS" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/locale/zh-WUU-HANT.coffee b/app/locale/zh-WUU-HANT.coffee index d5c3db591..4fd68d9d7 100644 --- a/app/locale/zh-WUU-HANT.coffee +++ b/app/locale/zh-WUU-HANT.coffee @@ -13,7 +13,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio delay_5_sec: "5 秒" manual: "手動" fork: "派生" - play: "開來" + play: "開來" # When used as an action verb, like "Play next level" retry: "轉試" # watch: "Watch" # unwatch: "Unwatch" @@ -43,7 +43,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio page_not_found: "頁面尋弗着" nav: - play: "遊戲開來" + play: "遊戲開來" # The top nav bar entry where players choose which levels to play # community: "Community" editor: "編寫器" blog: "部落格" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio slogan: "打遊戲來學編程" no_ie: "對弗住!箇網站叻 Internet Explorer 9 箇粒老個瀏覽器嘸處用。" no_mobile: "CodeCombat 勿是照手機設備設計個,怪得嘸數达弗到頂讚個享受!" - play: "遊戲開打" + play: "遊戲開打" # The big play button that just starts playing a level old_browser: "啊耶, 爾個瀏覽器忒老哉, 嘸處運行 CodeCombat。對弗住險!" old_browser_suffix: "爾試叻好試多遍,不過嘸大用場個。" campaign: "打仗模式" @@ -131,6 +131,22 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio spectate: "望別人攪遊戲" # players: "players" # hours_played: "hours played" +# items: "Items" +# heroes: "Heroes" +# achievements: "Achievements" +# account: "Account" +# settings: "Settings" +# next: "Next" +# previous: "Previous" +# choose_inventory: "Equip Items" + +# items: +# armor: "Armor" +# hands: "Hands" +# accessories: "Accessories" +# books: "Books" +# minions: "Minions" +# misc: "Misc" contact: contact_us: "搭我裏聯繫" @@ -452,10 +468,16 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio # multiplayer_caption: "Play with friends!" # inventory: -# temp: "Temp" +# choose_inventory: "Equip Items" # choose_hero: -# temp: "Temp" +# choose_hero: "Choose Your Hero" +# programming_language: "Programming Language" +# programming_language_description: "Which programming language do you want to use?" +# status: "Status" +# weapons: "Weapons" +# health: "Health" +# speed: "Speed" # save_load: # granularity_saved_games: "Saved" @@ -878,7 +900,6 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio tutorial_play_first: "先教程攪遍。" simple_ai: "省力腦子" warmup: "熱身" - vs: "對打" # friends_playing: "Friends Playing" # log_in_for_friends: "Log in to play with your friends!" # social_connect_blurb: "Connect and play against your friends!" @@ -967,6 +988,7 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio # user_remarks: "User Remarks" # versions: "Versions" # items: "Items" +# heroes: "Heroes" # wizard: "Wizard" # achievement: "Achievement" # clas: "CLAs" diff --git a/app/models/Level.coffee b/app/models/Level.coffee index a08e814af..348091b6a 100644 --- a/app/models/Level.coffee +++ b/app/models/Level.coffee @@ -69,13 +69,13 @@ module.exports = class Level extends CocoModel heroThangType = session?.get('heroConfig')?.thangType levelThang.thangType = heroThangType if heroThangType - thangType = supermodel.getModelByOriginal(ThangType, levelThang.thangType) + thangType = supermodel.getModelByOriginal(ThangType, levelThang.thangType, (m) -> m.get('components')?) configs = {} for thangComponent in levelThang.components configs[thangComponent.original] = thangComponent - for defaultThangComponent in thangType.get('components') or [] + for defaultThangComponent in thangType?.get('components') or [] if levelThangComponent = configs[defaultThangComponent.original] # Take the ThangType default Components and merge level-specific Component config into it copy = $.extend true, {}, defaultThangComponent.config @@ -108,7 +108,6 @@ module.exports = class Level extends CocoModel for original, placeholderComponent of placeholders when not placeholdersUsed[original] levelThang.components.push placeholderComponent - sortSystems: (levelSystems, systemModels) -> [sorted, originalsSeen] = [[], {}] visit = (system) -> diff --git a/app/models/SuperModel.coffee b/app/models/SuperModel.coffee index afaceeda7..7f43c03a9 100644 --- a/app/models/SuperModel.coffee +++ b/app/models/SuperModel.coffee @@ -84,9 +84,9 @@ module.exports = class SuperModel extends Backbone.Model modelURL = modelURL() if _.isFunction(modelURL) return @models[modelURL] or null - getModelByOriginal: (ModelClass, original) -> + getModelByOriginal: (ModelClass, original, filter=null) -> _.find @models, (m) -> - m.get('original') is original and m.constructor.className is ModelClass.className + m.get('original') is original and m.constructor.className is ModelClass.className and (not filter or filter(m)) getModelByOriginalAndMajorVersion: (ModelClass, original, majorVersion=0) -> _.find @models, (m) -> diff --git a/app/models/ThangType.coffee b/app/models/ThangType.coffee index c74373c57..a9b11ed44 100644 --- a/app/models/ThangType.coffee +++ b/app/models/ThangType.coffee @@ -7,6 +7,16 @@ buildQueue = [] module.exports = class ThangType extends CocoModel @className: 'ThangType' @schema: require 'schemas/models/thang_type' + @heroes: + captain: '529ec584c423d4e83b000014' + knight: '529ffbf1cf1818f2be000001' + librarian: '52fbf74b7e01835453bd8d8e' + equestrian: '52e95b4222efc8e70900175d' + 'potion-master': '52e9adf7427172ae56002172' + thoktar: '52a00542cf1818f2be000006' + 'robot-walker': '5301696ad82649ec2c0c9b0d' + 'michael-heasell': '53e126a4e06b897606d38bef' + 'ian-elliott': '53e12be0d042f23505c3023b' urlRoot: '/db/thang.type' building: {} diff --git a/app/schemas/models/level_session.coffee b/app/schemas/models/level_session.coffee index 7fa0bbb15..b0feda914 100644 --- a/app/schemas/models/level_session.coffee +++ b/app/schemas/models/level_session.coffee @@ -59,12 +59,7 @@ _.extend LevelSessionSchema.properties, screenshot: type: 'string' - heroConfig: c.object {description: 'Which hero the player is using, equipped with what inventory.'}, - inventory: - type: 'object' - description: 'The inventory of the hero: slots to item ThangTypes.' - additionalProperties: c.objectId(description: 'An item ThangType.') - thangType: c.objectId(links: [{rel: 'db', href: '/db/thang.type/{($)}/version'}], title: 'Thang Type', description: 'The ThangType of the hero.', format: 'thang-type') + heroConfig: c.HeroConfigSchema state: c.object {}, complete: diff --git a/app/schemas/models/user.coffee b/app/schemas/models/user.coffee index 428cb7c0c..cf5764c7f 100644 --- a/app/schemas/models/user.coffee +++ b/app/schemas/models/user.coffee @@ -45,7 +45,7 @@ visa = c.shortString title: 'US Work Status' description: 'Are you authorized to work in the US, or do you need visa sponsorship? (If you live in Canada or Australia, mark authorized.)' enum: ['Authorized to work in the US', 'Need visa sponsorship'] - + _.extend UserSchema.properties, email: c.shortString({title: 'Email', format: 'email'}) firstName: c.shortString({title: 'First Name'}) @@ -64,6 +64,7 @@ _.extend UserSchema.properties, music: { type: 'boolean' } autocastDelay: { type: 'integer' } lastLevel: { type: 'string' } + heroConfig: c.HeroConfigSchema emailSubscriptions: c.array {uniqueItems: true}, {'enum': emailSubscriptions} emails: c.object {title: 'Email Settings', default: generalNews: {enabled: true}, anyNotes: {enabled: true}, recruitNotes: {enabled: true} }, @@ -114,7 +115,7 @@ _.extend UserSchema.properties, simulatedBy: {type: 'integer', minimum: 0 } simulatedFor: {type: 'integer', minimum: 0 } - + jobProfile: c.object {title: 'Job Profile', default: { active: false, lookingFor: 'Full-time', jobTitle: 'Software Developer', city: 'Defaultsville, CA', country: 'USA', skills: ['javascript'], shortDescription: 'Programmer seeking to build great software.', longDescription: '* I write great code.\n* You need great code?\n* Great!' }}, lookingFor: {title: 'Looking For', type: 'string', enum: ['Full-time', 'Part-time', 'Remote', 'Contracting', 'Internship'], description: 'What kind of developer position do you want?'} jobTitle: {type: 'string', maxLength: 50, title: 'Desired Job Title', description: 'What role are you looking for? Ex.: "Full Stack Engineer", "Front-End Developer", "iOS Developer"' } diff --git a/app/schemas/schemas.coffee b/app/schemas/schemas.coffee index 0eb37689d..77808596f 100644 --- a/app/schemas/schemas.coffee +++ b/app/schemas/schemas.coffee @@ -202,3 +202,10 @@ me.activity = me.object {description: 'Stats on an activity'}, count: {type: 'integer', minimum: 0} me.terrainString = me.shortString {enum: ['Grass', 'Dungeon', 'Indoor'], title: 'Terrain', description: 'Which terrain type this is.'} + +me.HeroConfigSchema = me.object {description: 'Which hero the player is using, equipped with what inventory.'}, + inventory: + type: 'object' + description: 'The inventory of the hero: slots to item ThangTypes.' + additionalProperties: me.objectId(description: 'An item ThangType.') + thangType: me.objectId(links: [{rel: 'db', href: '/db/thang.type/{($)}/version'}], title: 'Thang Type', description: 'The ThangType of the hero.', format: 'thang-type') diff --git a/app/schemas/subscriptions/play.coffee b/app/schemas/subscriptions/play.coffee index ad8337235..bdbab754a 100644 --- a/app/schemas/subscriptions/play.coffee +++ b/app/schemas/subscriptions/play.coffee @@ -77,6 +77,16 @@ module.exports = 'level:next-game-pressed': c.object {} + 'level:loaded': c.object {required: ['level']}, + level: {type: 'object'} + team: {type: ['string', 'null', 'undefined']} + + 'level:session-loaded': c.object {required: ['level', 'session']}, + level: {type: 'object'} + session: {type: 'object'} + + 'level:loading-view-unveiling': c.object {} + 'level:loading-view-unveiled': c.object {required: ['view']}, view: {type: 'object'} @@ -155,4 +165,7 @@ module.exports = 'level:edit-wizard-settings': c.object {} - 'level:inventory-changed': c.object {} + 'level:hero-config-changed': c.object {} + + 'level:hero-selection-updated': c.object {required: ['hero']}, + hero: {type: 'object'} diff --git a/app/schemas/subscriptions/surface.coffee b/app/schemas/subscriptions/surface.coffee index 0ca5a6a92..ba00491e5 100644 --- a/app/schemas/subscriptions/surface.coffee +++ b/app/schemas/subscriptions/surface.coffee @@ -121,9 +121,6 @@ module.exports = # /app/lib/surface 'sprite:dragged': spriteMouseEventSchema 'sprite:mouse-up': spriteMouseEventSchema - 'surface:world-set-up': c.object {}, - world: {type: 'object'} - 'surface:frame-changed': c.object {required: ['frame', 'world', 'progress']}, frame: {type: 'number', minimum: 0} world: {type: 'object'} diff --git a/app/styles/achievements.sass b/app/styles/achievements.sass index cf1425670..4b3c95e3b 100644 --- a/app/styles/achievements.sass +++ b/app/styles/achievements.sass @@ -244,9 +244,10 @@ $user-achievements-scale: 0.8 position: fixed right: 0px bottom: 0px + z-index: 9001 + cursor: pointer .popup - cursor: default left: 600px .user-level diff --git a/app/styles/base.sass b/app/styles/base.sass index 56c1a37bd..0522b50a1 100644 --- a/app/styles/base.sass +++ b/app/styles/base.sass @@ -132,6 +132,9 @@ a .close font-size: 28px + padding: 15px + margin-right: -15px + margin-top: -15px @include opacity(0.60) &:hover @include opacity(1) @@ -237,6 +240,7 @@ table.table .header-font font-family: $headings-font-family + letter-spacing: 2px body[lang='ru'], body[lang|='zh'], body[lang='pl'], body[lang='tr'], body[lang='cs'], body[lang='el'], body[lang='ro'], body[lang='vi'], body[lang='th'], body[lang='ko'], body[lang='sk'], body[lang='sl'], body[lang='bg'], body[lang='he'], body[lang='lt'], body[lang='sr'], body[lang='uk'], body[lang='hi'], body[lang='ur'], body[lang='hu'] h1, h2, h3, h4, h5, h6 diff --git a/app/styles/editor/level/systems-tab-view.sass b/app/styles/editor/level/systems-tab-view.sass index 1f7abe54a..a6736c7f5 100644 --- a/app/styles/editor/level/systems-tab-view.sass +++ b/app/styles/editor/level/systems-tab-view.sass @@ -29,7 +29,7 @@ z-index: 10 bottom: -35px - .treema-add-child + > .treema-children > .treema-add-child display: none .treema-children .treema-row * diff --git a/app/styles/game-menu/choose-hero-view.sass b/app/styles/game-menu/choose-hero-view.sass index 6da51e2ee..e6d6e4435 100644 --- a/app/styles/game-menu/choose-hero-view.sass +++ b/app/styles/game-menu/choose-hero-view.sass @@ -1,3 +1,91 @@ +@import "app/styles/mixins" +@import "app/styles/bootstrap/variables" + +$maxHeroPortraitSize: 100px +$minHeroPortraitSize: 50px + +$heroCanvasHeight: 330px + #choose-hero-view - h3 - text-decoration: underline + + #hero-carousel + margin: 0 auto 20px auto + + .carousel-indicator-container + height: $maxHeroPortraitSize + text-align: center + width: 100% + margin-bottom: 10px + margin-top: 10px + position: relative + z-index: 1 + + .carousel-indicators + position: static + height: $maxHeroPortraitSize + width: 100% + margin-left: 0 + background-repeat: no-repeat + + .hero-indicator + width: $maxHeroPortraitSize + height: $maxHeroPortraitSize + margin: 0px 3px + background-size: contain + border: 2px solid black + border-radius: 2px + position: relative + + &.initialized + @include transition(0.5s ease) + + &.active + border-color: gold + + &.locked + @include opacity(0.6) + + .hero-item + + &.locked + @include opacity(0.6) + + canvas, .hero-stats + width: 45% + height: $heroCanvasHeight + float: left + + canvas + margin-left: 5% + + .hero-stats + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.6) + font-size: 24px + + .carousel-control.left + border-top-left-radius: 10px + border-bottom-left-radius: 10px + + .carousel-control.right + border-top-right-radius: 10px + border-bottom-right-radius: 10px + + .carousel-control + height: 75% + top: 25% + width: 10% + + .select-group + display: block + min-height: 20px + margin-top: 10px + margin-bottom: 10px + padding-left: 20px + vertical-align: middle + + label + margin-right: 20px + margin-bottom: 0 + + select + font-size: 18px diff --git a/app/styles/game-menu/game-menu-modal.sass b/app/styles/game-menu/game-menu-modal.sass index 71b9728e7..7e55cfa5e 100644 --- a/app/styles/game-menu/game-menu-modal.sass +++ b/app/styles/game-menu/game-menu-modal.sass @@ -1,13 +1,35 @@ +@import "app/styles/mixins" + #game-menu-modal .close + // We have to style this indendently because it's not in the header (we don't have a header). position: absolute - top: 10px - right: 20px + top: -5px + right: 0 + padding: 15px + font-size: 28px + background-color: transparent + z-index: 1 + + @include opacity(0.60) + + &:hover + @include opacity(1) + + // Make room for an overlaid close button in the lower right (we don't have a footer). + .overlaid-close-button + position: absolute + right: 35px + bottom: 20px + #inventory-view #available-equipment + bottom: 60px + .modal-dialog margin-top: 0 - + width: 963px + .nav-tabs h2 margin: 0 @@ -58,3 +80,4 @@ &, &:hover, &:focus border-color: #ddd transparent #ddd #ddd *border-right-color: #fff + diff --git a/app/styles/game-menu/inventory-view.sass b/app/styles/game-menu/inventory-view.sass index 18dee227a..5d139338d 100644 --- a/app/styles/game-menu/inventory-view.sass +++ b/app/styles/game-menu/inventory-view.sass @@ -1,26 +1,127 @@ -$selected-area-height: 150px @import "../bootstrap/mixins" +$totalWidth: 706px - 2 * 20px +// We get 666px to play with from our parent modals. +$inventoryHeight: 530px +$equippedWidth: 450px +$itemSlotMargin: 5px +$itemSlotSize: ($equippedWidth - 6 * 2 * $itemSlotMargin) / 6 +$itemSlotSizeWithMargin: $itemSlotSize + 2 * $itemSlotMargin +$heroContainerBottomMargin: 10px +$heroContainerWidth: 4 * $itemSlotSizeWithMargin +$heroContainerHeight: $inventoryHeight - 2 * $itemSlotSizeWithMargin - $heroContainerBottomMargin +$selectedAreaHeight: 150px +$stashMargin: 20px +$stashWidth: $totalWidth - $equippedWidth - $stashMargin + #inventory-view position: relative - height: 600px + height: $inventoryHeight +user-select(none) h3 margin: 0 + + .draggable-item + width: $itemSlotSize + height: $itemSlotSize #equipped - width: 75% + width: $equippedWidth position: absolute left: 0 top: 0 - bottom: $selected-area-height + 10 + bottom: 0 + //bottom: $selectedAreaHeight + 10 right: 0 overflow: scroll + + .item-slot-row + //background-color: rgba(35, 112, 124, 0.5) + height: $itemSlotSizeWithMargin + clear: both + margin: 0px auto + + &.row-4 + width: 4 * $itemSlotSizeWithMargin + + .item-slot-column + //background-color: rgba(112, 124, 35, 0.5) + width: $itemSlotSizeWithMargin + height: 4 * $itemSlotSizeWithMargin + float: left + margin-top: 30px + + .item-slot + width: $itemSlotSize + height: $itemSlotSize + margin: $itemSlotMargin + background-color: white + float: left + position: relative + cursor: pointer + + &.selected + .placeholder, .item-container .item-view img + border-color: #28f + @include box-shadow(0 0 10px #28f) + + &.droppable + outline: 2px solid blue + + &.droppable-hover + outline: 4px solid blue + + .placeholder + width: 100% + height: 100% + background-size: cover + border: 2px solid #888 + @include opacity(0.75) + + &[data-slot="waist"], &[data-slot="pet"], &[data-slot="minion"], &[data-slot="misc-1"] + // My spooging of the other placeholders had them dimmed; these didn't. + .placeholder + @include opacity(0.35) + border-color: black + &.selected + &[data-slot="waist"], &[data-slot="pet"], &[data-slot="minion"], &[data-slot="misc-1"] + .placeholder + border-color: #28f + + .item-container + position: absolute + left: 0 + top: 0 + + .item-view + img + width: $itemSlotSize + height: $itemSlotSize + border: 2px solid black + background-color: white + + .item-info + display: none .item-slot.disabled opacity: 0.5 - + + .hero-container + //background-color: rgba(31, 0, 200, 0.25) + float: left + position: relative + + .equipped-hero-canvas + width: $heroContainerWidth + height: $heroContainerHeight + + hr.slot-row-separator + clear: both + margin-top: 0 + margin-bottom: $heroContainerBottomMargin / 2 - 1 + border-top: 1px solid #aaa + .panel text-align: center width: 31.3% @@ -41,64 +142,78 @@ $selected-area-height: 150px font-size: 12px #available-equipment - width: 25% + width: $stashWidth position: absolute right: 0 top: 0 - bottom: $selected-area-height + 10 + bottom: 0 overflow: scroll - - h3 - margin-bottom: 5px - - .list-group-item.active - background-color: #e0f0f5 - - .list-group-item.equipped - display: none + border: 2px solid #ccc + padding: 4px + background-color: white + + .list-group-item + padding: 8px 0 + img + width: 50px + height: 50px + margin-right: 5px + + &.active + background-color: #e0f0f5 + &.equipped + display: none .item-view cursor: pointer #selected-items + $selectedItemsContainerMargin: 20px + $selectedItemMargin: 10px + $selectedItemImageSize: 75px + $swapItemHeight: 40px + $swapItemWidth: 60px + position: absolute - height: $selected-area-height - left: 0 - right: 0 - bottom: 0 + top: $selectedItemsContainerMargin + right: $selectedItemsContainerMargin + bottom: $selectedItemsContainerMargin + $heroContainerBottomMargin + left: $selectedItemsContainerMargin text-align: center #selected-equipped-item, #selected-available-item text-align: left - position: absolute - bottom: 0 - top: 0 overflow: scroll - padding: 10px - height: 100% - width: 49% - display: flex - align-items: center + margin: 0 + height: 48.4% + height: -webkit-calc(50% - $selectedItemMargin / 2) + height: calc(50% - $selectedItemMargin / 2) + width: 100% + padding: 10px 5px 10px 10px img - width: 100px - height: 100px + margin-top: 21px + width: $selectedItemImageSize + height: $selectedItemImageSize .item-info - margin-left: 110px - - #selected-equipped-item - left: 0 - - #selected-available-item - right: 0 + margin-left: $selectedItemImageSize + 10px - $swap-item-height: 40px - - #swap-button - position: relative - top: ($selected-area-height / 2) - ($swap-item-height / 2) - height: $swap-item-height - font-size: 24px - line-height: 24px - display: inline-block + #selected-equipped-item + margin-bottom: $selectedItemMargin + padding-bottom: 20px + + #selected-available-item + padding-top: 15px + + #swap-button + position: absolute + top: 50% + left: 50% + margin-top: -($swapItemHeight / 2) + margin-left: -($swapItemWidth / 2) + width: $swapItemWidth + height: $swapItemHeight + font-size: 24px + line-height: 24px + display: inline-block diff --git a/app/styles/mixins.sass b/app/styles/mixins.sass index 4ce11a4fe..160178cef 100644 --- a/app/styles/mixins.sass +++ b/app/styles/mixins.sass @@ -38,3 +38,17 @@ background-image: none @include opacity(0.65) @include box-shadow(none) + +// keyframes mixin from https://gist.github.com/ericam/1607696 +=keyframes($name) + @-webkit-keyframes #{$name} + @content + @-moz-keyframes #{$name} + @content + @-ms-keyframes #{$name} + @content + @-o-keyframes #{$name} + @content + @keyframes #{$name} + @content + diff --git a/app/styles/play/level/loading.sass b/app/styles/play/level/loading.sass index 3dac90ec8..baafd99f1 100644 --- a/app/styles/play/level/loading.sass +++ b/app/styles/play/level/loading.sass @@ -25,6 +25,7 @@ left: 50% $WIDTH: 1000px width: $WIDTH + min-height: 60px margin-left: (-$WIDTH / 2) z-index: 100 background-color: rgba(220, 255, 230, 0.6) @@ -46,15 +47,34 @@ top: 0px opacity: 0.6 width: 96% + height: 40px margin: 10px auto 0 - .progress-bar - width: 1% - transition-duration: 1.2s + .progress + height: 100% + + .progress-bar + width: 1% + height: 100% + transition-duration: 1.2s #tip-wrapper position: relative z-index: 2 + top: 10px + + .level-loading-goals + margin: 30px auto 10px + width: 400px + + .panel-heading + font-size: 24px + + .list-group-item + font-size: 20px + + .start-level-button + font-size: 40px .left-wing, .right-wing width: 100% diff --git a/app/styles/play/level/tome/cast_button.sass b/app/styles/play/level/tome/cast_button.sass index 38e71cc3d..604b67d33 100644 --- a/app/styles/play/level/tome/cast_button.sass +++ b/app/styles/play/level/tome/cast_button.sass @@ -1,17 +1,5 @@ -@import "../../../bootstrap/mixins" - -// keyframes mixin from https://gist.github.com/ericam/1607696 -=keyframes($name) - @-webkit-keyframes #{$name} - @content - @-moz-keyframes #{$name} - @content - @-ms-keyframes #{$name} - @content - @-o-keyframes #{$name} - @content - @keyframes #{$name} - @content +@import "app/styles/bootstrap/mixins" +@import "app/styles/mixins" +keyframes(castablePulse) from diff --git a/app/styles/play/modal/play-level-modal.sass b/app/styles/play/modal/play-level-modal.sass new file mode 100644 index 000000000..058eb85a8 --- /dev/null +++ b/app/styles/play/modal/play-level-modal.sass @@ -0,0 +1,12 @@ +#play-level-modal + .modal-dialog + margin: 30px auto 0 auto + padding: 0 + width: 726px + + .background-wrapper + height: 100% + + .modal-body + width: 726px - 20px + height: 550px diff --git a/app/styles/play/world-map-view.sass b/app/styles/play/world-map-view.sass index 94212d574..3ed6a2e36 100644 --- a/app/styles/play/world-map-view.sass +++ b/app/styles/play/world-map-view.sass @@ -1,5 +1,6 @@ @import "app/styles/bootstrap/mixins" @import "app/styles/bootstrap/variables" +@import "app/styles/mixins" $forestMapWidth: 2500 $forestMapHeight: 1536 @@ -12,7 +13,18 @@ $levelDotShadowWidth: 0.8 * $levelDotWidth $levelDotShadowHeight: 0.8 * $levelDotHeight $levelClickRadius: 40px $gameControlSize: 80px -$gameControlMargin: 40px +$gameControlMargin: 30px + ++keyframes(levelStartedPulse) + from + @include box-shadow(0px 0px 4px #333) + margin-bottom: -$levelDotHeight / 3 + $levelDotZ + 50% + @include box-shadow(0px 0px 22px skyblue) + margin-bottom: -$levelDotHeight / 3 + ($levelDotHoverZ + $levelDotZ) / 2 + to + @include box-shadow(0px 0px 4px #333) + margin-bottom: -$levelDotHeight / 3 + $levelDotZ #world-map-view width: 100% @@ -20,7 +32,6 @@ $gameControlMargin: 40px background-color: $forestMapSeaBackground .map - //background: white url("/images/pages/play/map_forest.jpg") no-repeat center center position: relative .map-background @@ -44,12 +55,26 @@ $gameControlMargin: 40px &.disabled opacity: 0.7 - &.first + &.next width: 2 * $levelDotWidth height: 2 * $levelDotHeight margin-left: -0.5 * 2 * $levelDotWidth margin-bottom: -2 * $levelDotHeight / 3 + 2 * $levelDotZ + &.started, &.next + border: 3px solid lightgreen + @include box-shadow(0px 0px 35px skyblue) + + // Would be cool, but kills performance, since we have to re-render all the time. + //&:not(:hover) + // -webkit-animation-name: levelStartedPulse + // -webkit-animation-duration: 3s + // -webkit-animation-iteration-count: infinite + + &.complete + border: 3px solid gold + @include box-shadow(0px 0px 35px skyblue) + .level-shadow z-index: 1 width: $levelDotShadowWidth @@ -57,10 +82,10 @@ $gameControlMargin: 40px margin-left: -0.5 * $levelDotShadowWidth margin-bottom: -$levelDotShadowHeight / 3 background-color: black - box-shadow: 0px 0px 10px black + @include box-shadow(0px 0px 10px black) @include opacity(0.75) - &.first + &.next width: 2 * $levelDotShadowWidth height: 2 * $levelDotShadowHeight margin-left: -0.5 * 2 * $levelDotShadowWidth @@ -68,6 +93,10 @@ $gameControlMargin: 40px .level:hover margin-bottom: -$levelDotHeight / 3 + $levelDotHoverZ + @include box-shadow(0px 0px 35px skyblue) + + &.next + margin-bottom: -2 * $levelDotHeight / 3 + 2 * $levelDotHoverZ .level a @@ -77,7 +106,7 @@ $gameControlMargin: 40px margin-top: -0.5 * $levelClickRadius border-radius: $levelClickRadius - &.first a + &.next a padding: 2 * $levelClickRadius margin-left: 2 * -0.5 * $levelClickRadius margin-top: 2 * -0.5 * $levelClickRadius @@ -122,6 +151,7 @@ $gameControlMargin: 40px position: absolute right: 1% bottom: 1% + z-index: 3 button.btn &:not(:first-child) @@ -131,15 +161,15 @@ $gameControlMargin: 40px background: url(/images/pages/play/menu_icons.png) no-repeat background-size: cover @include transition(0.5s ease) - box-shadow: 0 0 0 #bbf + @include box-shadow(2px 2px 4px black) border: 0 border-radius: 12px &:hover - box-shadow: 0 0 12px #bbf + @include box-shadow(0 0 12px #bbf) &:active - box-shadow: 0 0 20px white + @include box-shadow(0 0 20px white) &.heroes background-position-x: -1 * $gameControlSize @@ -149,3 +179,6 @@ $gameControlMargin: 40px background-position-x: -3 * $gameControlSize &.settings background-position-x: -4 * $gameControlSize + + .tooltip + font-size: 24px diff --git a/app/templates/account/profile.jade b/app/templates/account/profile.jade index c18a85917..cba785d15 100644 --- a/app/templates/account/profile.jade +++ b/app/templates/account/profile.jade @@ -192,7 +192,7 @@ block content span= session.levelName if session.team span.spl - #{session.team} - if session.codeLanguage != 'javascript' + if session.codeLanguage && session.codeLanguage != 'javascript' span.spl - #{{coffeescript: 'CoffeeScript', python: 'Python', lua: 'Lua', io: 'Io', clojure: 'Clojure'}[session.codeLanguage]} if !editing && !sessions.length h3(data-i18n="account_profile.player_code") Player Code diff --git a/app/templates/admin/candidates.jade b/app/templates/admin/candidates.jade index 0a2d85f96..c13f34702 100644 --- a/app/templates/admin/candidates.jade +++ b/app/templates/admin/candidates.jade @@ -43,17 +43,17 @@ block content ul.nav.nav-pills li.active a(href="#featured-candidates", data-toggle="tab") - span(data-i18n="employers.featured_developers") Featured Developers + span.spr(data-i18n="employers.featured_developers") Featured Developers | (#{featuredCandidates.length}) if otherCandidates.length li a(href="#other-candidates", data-toggle="tab") - span(data-i18n="employers.other_developers") Other Developers + span.spr(data-i18n="employers.other_developers") Other Developers | (#{otherCandidates.length}) if me.isAdmin() && inactiveCandidates.length li a(href="#inactive-candidates", data-toggle="tab") - span(data-i18n="employers.inactive_developers") Inactive Developers + span.spr(data-i18n="employers.inactive_developers") Inactive Developers | (#{inactiveCandidates.length}) div.tab-content for area, tabIndex in [{id: "featured-candidates", candidates: featuredCandidates}, {id: "other-candidates", candidates: otherCandidates}, {id: "inactive-candidates", candidates: inactiveCandidates}] @@ -74,7 +74,7 @@ block content th ✓? tbody for candidate, index in area.candidates - - var profile = candidate.get('jobProfile'); + - var profile = candidate.get('jobProfile', true); - var authorized = candidate.id; // If we have the id, then we are authorized. - var profileAge = (new Date() - new Date(profile.updated)) / 86400 / 1000; - var expired = profileAge > 2 * 30.4; diff --git a/app/templates/docs/components-documentation-view.jade b/app/templates/docs/components-documentation-view.jade index 6b4eb8169..2a63a4161 100644 --- a/app/templates/docs/components-documentation-view.jade +++ b/app/templates/docs/components-documentation-view.jade @@ -11,7 +11,7 @@ li.list-group-item= component.get('system') + '.' + component.get('name') ul // .list-group for different layout - each doc in component.attributes.propertyDocumentation + each doc in (component.attributes.propertyDocumentation ? component.attributes.propertyDocumentation : []) a(href="##{component.get('name')}#{doc.name}") li.list-group-item | #{doc.name} @@ -24,7 +24,7 @@ div(class="panel-body") | #{component.get('description')} ul - each doc in component.attributes.propertyDocumentation + each doc in (component.attributes.propertyDocumentation ? component.attributes.propertyDocumentation : []) li.list-group-item(id="#{component.get('name')}#{doc.name}") | #{doc.name} ul.special-list diff --git a/app/templates/game-menu/choose-hero-view.jade b/app/templates/game-menu/choose-hero-view.jade index acef1c498..0356e4611 100644 --- a/app/templates/game-menu/choose-hero-view.jade +++ b/app/templates/game-menu/choose-hero-view.jade @@ -1,18 +1,52 @@ -h3(data-i18n="play_level.reload_title") Reload All Code? - -p(data-i18n="play_level.reload_really") Are you sure you want to reload this level back to the beginning? +#hero-carousel.carousel.slide(data-interval=0) + .carousel-indicator-container + ol.carousel-indicators + for hero, index in heroes + - var info = heroInfo[hero.get('slug')] + li(data-hero-id=hero.get('original'), title=hero.get('name'), data-slide-to=index, data-target="#hero-carousel", class="hero-indicator" + (info.status == "Locked" ? " locked" : "")) -p - a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="play_level.reload_confirm").btn.btn-primary#restart-level-confirm-button Reload All + .carousel-inner + for hero in heroes + - var info = heroInfo[hero.get('slug')] + div(class="item hero-item" + (info.status == "Locked" ? " locked" : ""), data-hero-id=hero.get('original')) + canvas.hero-canvas + .hero-stats + h2= info.fullName + p + span(data-i18n="choose_hero.status") Status + span.spr : + | #{info.status} + p + span(data-i18n="choose_hero.weapons") Weapons + span.spr : + | #{info.weapons} + p + span(data-i18n="choose_hero.health") Health + span.spr : + | #{info.health} + p + span(data-i18n="choose_hero.speed") Speed + span.spr : + | #{info.speed} + a.carousel-control.left(role="button", data-slide="prev", href="#hero-carousel") + span.glyphicon.glyphicon-chevron-left + a.carousel-control.right(role="button", data-slide="next", href="#hero-carousel") + span.glyphicon.glyphicon-chevron-right + + +.form + .form-group.select-group + label.control-label(for="option-code-language", data-i18n="choose_hero.programming_language") Programming Language + select#option-code-language(name="code-language") + for option in codeLanguages + option(value=option.id, selected=codeLanguage === option.id)= option.name + span.help-block(data-i18n="choose_hero.programming_language_description") Which programming language do you want to use? + +if level + .form-group.select-group + label.control-label(for="#restart-level-confirm-button", data-i18n="play_level.reload_title") Reload All Code? + button(data-dismiss="modal", data-i18n="play_level.reload_confirm").btn.btn-sm.btn-danger#restart-level-confirm-button Reload All + span.help-block(data-i18n="play_level.reload_really") Are you sure you want to reload this level back to the beginning? -if showDevBits - img(src="/images/pages/game-menu/choose-hero-stub.png") - div(data-i18n="choose_hero.temp") Temp - h3 Interactions - ul - li Click a language button. Click ‘save as default language’ if you want to carry it over to following levels. - li Click a hero. Right here it’s just a simple list on the left with a picture of the hero on the right. Might instead have a carousel on the left and stats on the right. Basically this needs more thought because it’s starting to look like the inventory screen, but this is more for later. Might also have the wizard coloring used here for heroes. - li Click equip and it puts in basically the inventory screen view to choose which items to start the level with. - li Click begin. A new LevelSession is created. LevelLoader is given the new/updated LevelSession, new data is loaded, world reruns. diff --git a/app/templates/game-menu/game-menu-modal.jade b/app/templates/game-menu/game-menu-modal.jade index 0ebc65f97..b40fac345 100644 --- a/app/templates/game-menu/game-menu-modal.jade +++ b/app/templates/game-menu/game-menu-modal.jade @@ -23,4 +23,5 @@ block modal-body-content .tab-pane(id=submenu + '-view') .clearfix -block modal-footer \ No newline at end of file +block modal-footer + button.btn.btn-primary.btn-lg.overlaid-close-button(type="button", data-dismiss="modal", aria-hidden="true", data-i18n="modal.close") Close diff --git a/app/templates/game-menu/inventory-view.jade b/app/templates/game-menu/inventory-view.jade index 0f474aa01..71ff11d21 100644 --- a/app/templates/game-menu/inventory-view.jade +++ b/app/templates/game-menu/inventory-view.jade @@ -1,29 +1,50 @@ -div#equipped - h3 Equipped - - for (var i=0; i < slots.length; i += 3) { - div - - for (var j=i; j < slots.length && j < i + 3; j++) { - - var slot = slots[j]; - div.panel.panel-default.item-slot(data-slot=slot) - .panel-heading - .panel-title.slot-name= slot - .panel-body.slot-item - if equipment[slot] - - var item = equipment[slot] - .replace-me(data-item-id=item.id) - - } - .clearfix - - } - -div#available-equipment - h3 Stash +#equipped + .item-slot-row + for slot in ['left-ring', 'neck', 'eyes', 'head', 'wrists', 'right-ring'] + .item-slot(data-slot=slot) + .placeholder + .item-container + if equipment[slot] + .replace-me(data-item-id=equipment[slot].get('original')) + + .item-slot-column.pull-left + for slot in ['minion', 'torso', 'gloves', 'left-hand'] + .item-slot(data-slot=slot) + .placeholder + .item-container + if equipment[slot] + .replace-me(data-item-id=equipment[slot].get('original')) + + .hero-container + canvas.equipped-hero-canvas + #selected-items + #selected-equipped-item.well + .item-view-stub + #selected-available-item.well + .item-view-stub + button#swap-button.btn.btn-danger + span.glyphicon.glyphicon-transfer + + .item-slot-column.pull-right + for slot in ['pet', 'waist', 'feet', 'right-hand'] + .item-slot(data-slot=slot) + .placeholder + .item-container + if equipment[slot] + .replace-me(data-item-id=equipment[slot].get('original')) + + hr.slot-row-separator + + .item-slot-row.row-4 + for slot in ['programming-book', 'spellbook', 'misc-0', 'misc-1'] + .item-slot(data-slot=slot) + .placeholder + .item-container + if equipment[slot] + .replace-me(data-item-id=equipment[slot].get('original')) + +#available-equipment + h4#stash-description for item in items - .list-group-item(class=item.classes, data-item-id=item.id) + .list-group-item(class=item.classes, data-item-id=item.get('original')) -div#selected-items - #selected-equipped-item.well - .item-view-stub - #selected-available-item.well - .item-view-stub - button#swap-button.btn.btn-danger - span.glyphicon.glyphicon-transfer diff --git a/app/templates/game-menu/item-view.jade b/app/templates/game-menu/item-view.jade index c22c34e27..7b5c34ace 100644 --- a/app/templates/game-menu/item-view.jade +++ b/app/templates/game-menu/item-view.jade @@ -1,7 +1,7 @@ -img(src=item.getPortraitURL()).img-thumbnail +img(src=item.getPortraitURL()) div.item-info if includes.name - strong= item.get('name') + h4= item.get('name') if includes.stats || (includes.props && props.length) ul.list-unstyled if includes.stats diff --git a/app/templates/play/level/level_loading.jade b/app/templates/play/level/level_loading.jade index 895524bce..811b979f5 100644 --- a/app/templates/play/level/level_loading.jade +++ b/app/templates/play/level/level_loading.jade @@ -42,4 +42,9 @@ span= me.get('name', true) .errors + + .panel.panel-default.level-loading-goals.secret + .panel-heading.header-font(data-i18n="play_level.goals") Goals + ul.list-group + button.start-level-button.btn.btn-lg.btn-success.header-font.secret(data-i18n="play_level.loading_start") Start Level diff --git a/app/templates/play/modal/play-level-modal.jade b/app/templates/play/modal/play-level-modal.jade new file mode 100644 index 000000000..398c174d1 --- /dev/null +++ b/app/templates/play/modal/play-level-modal.jade @@ -0,0 +1,16 @@ +extends /templates/modal/modal_base + +block modal-header-content + h1#choose-hero-header(data-i18n="choose_hero.choose_hero") Choose Your Hero + h1#choose-inventory-header.secret(data-i18n="inventory.choose_inventory") Equip Items + +block modal-body-content + #choose-hero-view + + #inventory-view + +block modal-footer-content + button#choose-inventory-button.btn.btn-lg.btn-success(data-i18n="play.next") Next + button#choose-hero-button.btn.btn-lg.btn-primary.secret.pull-left(data-i18n="play.previous") Previous + button#play-level-button.btn.btn-lg.btn-success.secret(data-i18n="common.play") Play + \ No newline at end of file diff --git a/app/templates/play/world-map-view.jade b/app/templates/play/world-map-view.jade index bd35f17f3..951c4f30c 100644 --- a/app/templates/play/world-map-view.jade +++ b/app/templates/play/world-map-view.jade @@ -1,11 +1,14 @@ .map img.map-background(src="/images/pages/play/map_forest.jpg", alt="") + - var seenNext = false; each campaign in campaigns each level in campaign.levels - div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{campaign.color}", class="level" + (level.first ? " first" : "") + (level.disabled ? " disabled" : ""), data-level-id=level.id) - a(href=level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled, class=levelStatusMap[level.id] || "") - div(style="left: #{level.x}%; bottom: #{level.y}%", class="level-shadow" + (level.first ? " first" : "")) + - var next = !seenNext && levelStatusMap[level.id] != "complete"; + - seenNext = seenNext || next; + div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{campaign.color}", class="level" + (next ? " next" : "") + (level.disabled ? " disabled" : "") + " " + levelStatusMap[level.id] || "", data-level-id=level.id) + a(href=level.type == 'hero' ? '#' : level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled, data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name) + div(style="left: #{level.x}%; bottom: #{level.y}%", class="level-shadow" + (next ? " next" : "") + " " + levelStatusMap[level.id] || "") .level-info-container(data-level-id=level.id) if level.image img.level-image(src="#{level.image}", alt="#{level.name}") @@ -26,8 +29,9 @@ span(data-i18n="play.hours_played") hours played .campaign-label(style="color: #{campaign.color}")= campaign.name -.game-controls - button.btn.items(data-toggle='coco-modal', data-target='play/modal/PlayItemsModal', data-i18n="[title]play.items") +.game-controls.header-font + if me.isAdmin() + button.btn.items(data-toggle='coco-modal', data-target='play/modal/PlayItemsModal', data-i18n="[title]play.items") button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes") button.btn.achievements(data-toggle='coco-modal', data-target='play/modal/PlayAchievementsModal', data-i18n="[title]play.achievements") button.btn.account(data-toggle='coco-modal', data-target='play/modal/PlayAccountModal', data-i18n="[title]play.account") diff --git a/app/views/achievements/AchievementPopup.coffee b/app/views/achievements/AchievementPopup.coffee index ba2b60add..f25d9e88c 100644 --- a/app/views/achievements/AchievementPopup.coffee +++ b/app/views/achievements/AchievementPopup.coffee @@ -66,14 +66,14 @@ module.exports = class AchievementPopup extends CocoView super() @container.prepend @$el if @popup - @$el.animate - left: 0 - @$el.on 'click', (e) => - @$el.animate - left: 600 - , => + hide = => + return if @destroyed + @$el.animate {left: 600}, => @$el.remove() @destroy() + @$el.animate left: 0 + @$el.on 'click', hide + _.delay hide, 10000 unless $('#editor-achievement-edit-view').length getContainer: -> unless @container diff --git a/app/views/editor/level/LevelEditView.coffee b/app/views/editor/level/LevelEditView.coffee index b9150d98a..1a5224e64 100644 --- a/app/views/editor/level/LevelEditView.coffee +++ b/app/views/editor/level/LevelEditView.coffee @@ -82,7 +82,7 @@ module.exports = class LevelEditView extends RootView @insertSubView new SettingsTabView supermodel: @supermodel @insertSubView new ScriptsTabView world: @world, supermodel: @supermodel, files: @files @insertSubView new ComponentsTabView supermodel: @supermodel - @insertSubView new SystemsTabView supermodel: @supermodel + @insertSubView new SystemsTabView supermodel: @supermodel, world: @world @insertSubView new RelatedAchievementsView supermodel: @supermodel, level: @level @insertSubView new ComponentsDocumentationView lazy: true # Don't give it the supermodel, it'll pollute it! @insertSubView new SystemsDocumentationView lazy: true # Don't give it the supermodel, it'll pollute it! diff --git a/app/views/editor/level/systems/SystemsTabView.coffee b/app/views/editor/level/systems/SystemsTabView.coffee index 8f7336946..8608578ef 100644 --- a/app/views/editor/level/systems/SystemsTabView.coffee +++ b/app/views/editor/level/systems/SystemsTabView.coffee @@ -5,7 +5,7 @@ LevelSystem = require 'models/LevelSystem' LevelSystemEditView = require './LevelSystemEditView' NewLevelSystemModal = require './NewLevelSystemModal' AddLevelSystemModal = require './AddLevelSystemModal' -{ThangTypeNode} = require './../treema_nodes' +nodes = require '../treema_nodes' module.exports = class SystemsTabView extends CocoView id: 'systems-tab-view' @@ -48,18 +48,41 @@ module.exports = class SystemsTabView extends CocoView systems = @buildDefaultSystems() insertedDefaults = true systems = @getSortedByName systems + thangs = if @level? then @level.get('thangs') else [] + thangIDs = _.filter(_.pluck(thangs, 'id')) + teams = _.filter(_.pluck(thangs, 'team')) + superteams = _.filter(_.pluck(thangs, 'superteam')) + superteams = _.union(teams, superteams) treemaOptions = supermodel: @supermodel schema: Level.schema.properties.systems data: systems readOnly: me.get('anonymous') + world: @options.world + view: @ + thangIDs: thangIDs + teams: teams + superteams: superteams callbacks: change: @onSystemsChanged select: @onSystemSelected nodeClasses: 'level-system': LevelSystemNode 'level-system-configuration': LevelSystemConfigurationNode - 'thang-type': ThangTypeNode # Not until we actually want CocoSprite IndieSprites + 'point2d': nodes.WorldPointNode + 'viewport': nodes.WorldViewportNode + 'bounds': nodes.WorldBoundsNode + 'radians': nodes.RadiansNode + 'team': nodes.TeamNode + 'superteam': nodes.SuperteamNode + 'meters': nodes.MetersNode + 'kilograms': nodes.KilogramsNode + 'seconds': nodes.SecondsNode + 'speed': nodes.SpeedNode + 'acceleration': nodes.AccelerationNode + 'thang-type': nodes.ThangTypeNode + 'item-thang-type': nodes.ItemThangTypeNode + @systemsTreema = @$el.find('#systems-treema').treema treemaOptions @systemsTreema.build() @systemsTreema.open() diff --git a/app/views/game-menu/ChooseHeroView.coffee b/app/views/game-menu/ChooseHeroView.coffee index 10069bc04..c21e33635 100644 --- a/app/views/game-menu/ChooseHeroView.coffee +++ b/app/views/game-menu/ChooseHeroView.coffee @@ -2,6 +2,9 @@ CocoView = require 'views/kinds/CocoView' template = require 'templates/game-menu/choose-hero-view' {me} = require 'lib/auth' ThangType = require 'models/ThangType' +CocoCollection = require 'collections/CocoCollection' +SpriteBuilder = require 'lib/sprites/SpriteBuilder' +AudioPlayer = require 'lib/AudioPlayer' module.exports = class ChooseHeroView extends CocoView id: 'choose-hero-view' @@ -10,11 +13,190 @@ module.exports = class ChooseHeroView extends CocoView events: 'click #restart-level-confirm-button': -> Backbone.Mediator.publish 'level:restart', {} + 'slide.bs.carousel #hero-carousel': 'onHeroChanged' + 'change #option-code-language': 'onCodeLanguageChanged' + + shortcuts: + 'left': -> @$el.find('#hero-carousel').carousel('prev') unless @$el.hasClass 'secret' + 'right': -> @$el.find('#hero-carousel').carousel('next') unless @$el.hasClass 'secret' + + constructor: (options) -> + super options + @heroes = new CocoCollection([], {model: ThangType}) + @heroes.url = '/db/thang.type?view=heroes&project=original,name,slug,soundTriggers' + @supermodel.loadCollection(@heroes, 'heroes') + @stages = {} + + destroy: -> + for heroIndex, stage of @stages + createjs.Ticker.removeEventListener "tick", stage + stage.removeAllChildren() + super() getRenderData: (context={}) -> context = super(context) - context.showDevBits = @options.showDevBits + context.heroes = @heroes.models + context.level = @options.level + context.codeLanguages = [ + {id: 'python', name: 'Python'} + {id: 'javascript', name: 'JavaScript'} + {id: 'coffeescript', name: 'CoffeeScript'} + {id: 'clojure', name: 'Clojure (Experimental)'} + {id: 'lua', name: 'Lua (Experimental)'} + {id: 'io', name: 'Io (Experimental)'} + ] + context.codeLanguage = @codeLanguage = @options.session.get('codeLanguage') ? me.get('aceConfig')?.language ? 'python' + context.heroInfo = temporaryHeroInfo context afterRender: -> super() + return unless @supermodel.finished() + heroes = @heroes.models + @$el.find('.hero-indicator').each -> + heroID = $(@).data('hero-id') + hero = _.find heroes, (hero) -> hero.get('original') is heroID + $(@).css('background-image', "url(#{hero.getPortraitURL()})").tooltip() + _.defer => $(@).addClass 'initialized' + @canvasWidth = 313 # @$el.find('canvas').width() # unreliable, whatever + @canvasHeight = @$el.find('canvas').height() + heroConfig = @options.session.get('heroConfig') ? me.get('heroConfig') ? {} + heroIndex = Math.max 0, _.findIndex(heroes, ((hero) -> hero.get('original') is heroConfig.thangType)) + @$el.find(".hero-item:nth-child(#{heroIndex + 1}), .hero-indicator:nth-child(#{heroIndex + 1})").addClass('active') + @onHeroChanged direction: null, relatedTarget: @$el.find('.hero-item')[heroIndex] + + onHeroChanged: (e) -> + direction = e.direction # 'left' or 'right' + heroItem = $(e.relatedTarget) + hero = _.find @heroes.models, (hero) -> hero.get('original') is heroItem.data('hero-id') + heroIndex = heroItem.index() + @$el.find('.hero-indicator').each -> + distance = Math.min 3, Math.abs $(@).index() - heroIndex + size = 100 - (50 / 3) * distance + $(@).css width: size, height: size, top: -(100 - size) / 2 + heroInfo = temporaryHeroInfo[hero.get('slug')] + locked = heroInfo.status is 'Locked' + hero = @loadHero hero, heroIndex + @selectedHero = hero unless locked + Backbone.Mediator.publish 'level:hero-selection-updated', hero: @selectedHero + $('#choose-inventory-button').prop 'disabled', locked + + loadHero: (hero, heroIndex) -> + createjs.Ticker.removeEventListener 'tick', stage for stage in _.values @stages + if stage = @stages[heroIndex] + createjs.Ticker.addEventListener 'tick', stage + @playSelectionSound hero + return hero + fullHero = new ThangType() + fullHero.setURL "/db/thang.type/#{hero.get('original')}/version" + fullHero = (@supermodel.loadModel fullHero, 'thang').model + onLoaded = => + return unless canvas = $(".hero-item[data-hero-id='#{fullHero.get('original')}'] canvas") + canvas.prop width: @canvasWidth, height: @canvasHeight + builder = new SpriteBuilder(fullHero) + movieClip = builder.buildMovieClip(fullHero.get('actions').attack?.animation ? fullHero.get('actions').idle.animation) + movieClip.scaleX = movieClip.scaleY = canvas.prop('height') / 120 # Average hero height is ~110px tall at normal resolution + if fullHero.get('name') in ['Knight', 'Robot Walker'] # These are too big, so shrink them. + movieClip.scaleX *= 0.7 + movieClip.scaleY *= 0.7 + movieClip.regX = -fullHero.get('positions').registration.x + movieClip.regY = -fullHero.get('positions').registration.y + movieClip.x = canvas.prop('width') * 0.5 + movieClip.y = canvas.prop('height') * 0.925 # This is where the feet go. + stage = new createjs.Stage(canvas[0]) + stage.addChild movieClip + stage.update() + createjs.Ticker.addEventListener 'tick', stage + movieClip.gotoAndPlay 0 + @stages[heroIndex] = stage + @playSelectionSound hero + if fullHero.loaded + _.defer onLoaded + else + @listenToOnce fullHero, 'sync', onLoaded + fullHero + + playSelectionSound: (hero) -> + return if @$el.hasClass 'secret' + @currentSoundInstance?.stop() + return unless sounds = hero.get('soundTriggers')?.selected + return unless sound = sounds[Math.floor Math.random() * sounds.length] + name = AudioPlayer.nameForSoundReference sound + AudioPlayer.preloadSoundReference sound + @currentSoundInstance = AudioPlayer.playSound name, 1 + @currentSoundInstance + + onCodeLanguageChanged: (e) -> + @codeLanguage = @$el.find('#option-code-language').val() + @codeLanguageChanged = true + + onShown: -> + # Called when we switch tabs to this within the modal + + onHidden: -> + # Called when the modal itself is dismissed + + +temporaryHeroInfo = + captain: + fullName: 'Captain Anya Weston' + weapons: 'Razor Discs' + status: 'Available' + health: '35' + speed: '4 m/s' + + knight: + fullName: 'Tharin Thunderfist' + weapons: 'Swords' + status: 'Available' + health: '35' + speed: '4 m/s' + + thoktar: + fullName: 'Thoktar the Devourer' + weapons: 'Magic' + status: 'Locked' + health: '???' + speed: '???' + + equestrian: + fullName: 'Rider Reynaldo' + weapons: 'Axes' + status: 'Locked' + health: '???' + speed: '???' + + 'potion-master': + fullName: 'Master Snake' + weapons: 'Magic' + status: 'Locked' + health: '???' + speed: '???' + + librarian: + fullName: 'Hushbaum' + weapons: 'Magic' + status: 'Locked' + health: '???' + speed: '???' + + 'robot-walker': + fullName: '???' + weapons: '???' + status: 'Locked' + health: '???' + speed: '???' + + 'michael-heasell': + fullName: '???' + weapons: '???' + status: 'Locked' + health: '???' + speed: '???' + + 'ian-elliott': + fullName: '???' + weapons: '???' + status: 'Locked' + health: '???' + speed: '???' diff --git a/app/views/game-menu/GameMenuModal.coffee b/app/views/game-menu/GameMenuModal.coffee index ba9493ddb..87bc66af0 100644 --- a/app/views/game-menu/GameMenuModal.coffee +++ b/app/views/game-menu/GameMenuModal.coffee @@ -11,7 +11,6 @@ submenuViews = [ module.exports = class GameMenuModal extends ModalView template: template - modalWidthPercent: 95 id: 'game-menu-modal' instant: true @@ -23,6 +22,7 @@ module.exports = class GameMenuModal extends ModalView super options @options.showDevBits = me.isAdmin() or /https?:\/\/localhost/.test(window.location.href) @options.showInventory = @options.level.get('type', true) is 'hero' + @options.levelID = @options.level.get('slug') getRenderData: (context={}) -> context = super(context) @@ -32,16 +32,51 @@ module.exports = class GameMenuModal extends ModalView afterRender: -> super() - @$el.toggleClas @insertSubView new submenuView @options for submenuView in submenuViews - (if @options.showInventory then @subviews.inventory_view else @subviews.choose_hero_view).$el.addClass 'active' + firstView = (if @options.showInventory then @subviews.inventory_view else @subviews.choose_hero_view) + firstView.$el.addClass 'active' + firstView.onShown?() Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1 - onTabShown: -> + onTabShown: (e) -> Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-tab-switch', volume: 1 + @subviews.inventory_view.selectedHero = @subviews.choose_hero_view.selectedHero + @subviews[e.target.hash.substring(1).replace(/-/g, '_')].onShown?() onHidden: -> super() subview.onHidden?() for subviewKey, subview of @subviews - me.patch() + patchingMe = @updateConfig() + me.patch() unless patchingMe # Might need to patch for options menu, too Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-close', volume: 1 + + updateConfig: -> + sessionHeroConfig = $.extend {}, true, (@options.session.get('heroConfig') ? {}) + lastHeroConfig = me.get('heroConfig') ? {} + thangType = @subviews.choose_hero_view.selectedHero.get 'original' + inventory = @subviews.inventory_view.getCurrentEquipmentConfig() + patchSession = patchMe = false + props = thangType: thangType, inventory: inventory + for key, val of props when val + patchSession ||= not _.isEqual val, sessionHeroConfig[key] + patchMe ||= not _.isEqual val, lastHeroConfig[key] + sessionHeroConfig[key] = val + lastHeroConfig[key] = val + if (codeLanguage = @subviews.choose_hero_view.codeLanguage) and @subviews.choose_hero_view.codeLanguageChanged + patchSession ||= codeLanguage isnt @options.session.get('codeLanguage') + patchMe ||= codeLanguage isnt me.get('aceConfig')?.language + @options.session.set 'codeLanguage', codeLanguage + aceConfig = me.get('aceConfig', true) ? {} + aceConfig.language = codeLanguage + me.set 'aceConfig', aceConfig + if patchSession + @options.session.set 'heroConfig', sessionHeroConfig + success = -> + _.defer -> Backbone.Mediator.publish 'level:hero-config-changed', {} + error = (model, res) -> + console.error 'error patching session', model, res, res.responseJSON, res.status, res.statusText + @options.session.patch success: success, error: error + if patchMe + me.set 'heroConfig', lastHeroConfig + me.patch() + patchMe diff --git a/app/views/game-menu/InventoryView.coffee b/app/views/game-menu/InventoryView.coffee index ca4d77b57..317fef60e 100644 --- a/app/views/game-menu/InventoryView.coffee +++ b/app/views/game-menu/InventoryView.coffee @@ -4,6 +4,7 @@ template = require 'templates/game-menu/inventory-view' ThangType = require 'models/ThangType' CocoCollection = require 'collections/CocoCollection' ItemView = require './ItemView' +SpriteBuilder = require 'lib/sprites/SpriteBuilder' module.exports = class InventoryView extends CocoView id: 'inventory-view' @@ -18,17 +19,27 @@ module.exports = class InventoryView extends CocoView 'dblclick .item-slot .item-view': 'onEquippedItemDoubleClick' 'click #swap-button': 'onClickSwapButton' + subscriptions: + 'level:hero-selection-updated': 'onHeroSelectionUpdated' + shortcuts: 'esc': 'clearSelection' initialize: (options) -> super(arguments...) @items = new CocoCollection([], {model: ThangType}) - @equipment = options.equipment or @options.session?.get('heroConfig')?.inventory or {} - @items.url = '/db/thang.type?view=items&project=name,description,components,original,rasterIcon' + @equipment = options.equipment or @options.session?.get('heroConfig')?.inventory or me.get('heroConfig')?.inventory or {} + @equipment = $.extend true, {}, @equipment + @assignLevelEquipment() + @items.url = '/db/thang.type?view=items&project=name,components,original,rasterIcon' @supermodel.loadCollection(@items, 'items') + destroy: -> + @stage?.removeAllChildren() + super() + onLoaded: -> + @items.models = _.filter(@items.models, (item) => item.get('original') in @allowedItems) if @allowedItems super() getRenderData: (context={}) -> @@ -51,14 +62,14 @@ module.exports = class InventoryView extends CocoView super() return unless @supermodel.finished() - keys = (item.id for item in @items.models) + keys = (item.get('original') for item in @items.models) itemMap = _.zipObject keys, @items.models # Fill in equipped items for slottedItemStub in @$el.find('.replace-me') itemID = $(slottedItemStub).data('item-id') item = itemMap[itemID] - itemView = new ItemView({item: item, includes: {name: true}}) + itemView = new ItemView({item: item, includes: {}}) itemView.render() $(slottedItemStub).replaceWith(itemView.$el) @registerSubView(itemView) @@ -70,31 +81,68 @@ module.exports = class InventoryView extends CocoView itemView.render() $(availableItemEl).append(itemView.$el) @registerSubView(itemView) + dragHelper = itemView.$el.find('img').clone().addClass('draggable-item') + do (dragHelper, itemView) => + itemView.$el.draggable + revert: 'invalid' + appendTo: @$el + cursorAt: {left: 35.5, top: 35.5} + helper: -> dragHelper + revertDuration: 200 + distance: 10 + scroll: false + zIndex: 100 + itemView.$el.on 'dragstart', => + @onAvailableItemClick target: itemView.$el.parent() unless itemView.$el.parent().hasClass 'active' + for itemSlot in @$el.find '.item-slot' + slot = $(itemSlot).data 'slot' + $(itemSlot).find('.placeholder').css('background-image', "url(/images/pages/game-menu/slot-#{slot}.png)") + do (slot) => + $(itemSlot).droppable + drop: (e, ui) => @onAvailableItemDoubleClick() + accept: (el) -> $(el).parent().hasClass slot + activeClass: 'droppable' + hoverClass: 'droppable-hover' + tolerance: 'touch' + + @$el.find('#selected-items').hide() # Hide until one is selected @delegateEvents() + afterInsert: -> + super() + @canvasWidth = @$el.find('canvas').innerWidth() + @canvasHeight = @$el.find('canvas').innerHeight() + clearSelection: -> - @$el.find('.panel-info').removeClass('panel-info') + @$el.find('.item-slot.selected').removeClass 'selected' @$el.find('.list-group-item').removeClass('active') @onSelectionChanged() onItemSlotClick: (e) -> - slot = $(e.target).closest('.panel') - wasActive = slot.hasClass('panel-info') + slot = $(e.target).closest('.item-slot') + wasActive = slot.hasClass('selected') @unselectAllSlots() @unselectAllAvailableEquipment() if slot.hasClass('disabled') - @selectSlot(slot) unless wasActive and not $(e.target).closest('.item-view')[0] + if wasActive + @hideSelectedSlotItem() + @unselectAllAvailableEquipment() + else + @selectSlot(slot) @onSelectionChanged() onAvailableItemClick: (e) -> itemContainer = $(e.target).closest('.list-group-item') + wasActive = itemContainer.hasClass 'active' @unselectAllAvailableEquipment() - @selectAvailableItem(itemContainer) + @selectAvailableItem(itemContainer) unless wasActive @onSelectionChanged() onAvailableItemDoubleClick: (e) -> + @selectAvailableItem $(e.target).closest('.list-group-item') + @onSelectionChanged() slot = @getSelectedSlot() - slot = @$el.find('.panel:not(.disabled):first') if not slot.length + slot = @$el.find('.item-slot:not(.disabled):first') if not slot.length @unequipItemFromSlot(slot) @equipSelectedItemToSlot(slot) @onSelectionChanged() @@ -109,7 +157,7 @@ module.exports = class InventoryView extends CocoView slot = @getSelectedSlot() selectedItemContainer = @$el.find('#available-equipment .list-group-item.active') return unless slot[0] or selectedItemContainer[0] - slot = @$el.find('.panel:not(.disabled):first') if not slot.length + slot = @$el.find('.item-slot:not(.disabled):first') if not slot.length itemContainer = @unequipItemFromSlot(slot) @equipSelectedItemToSlot(slot) @selectAvailableItem(itemContainer) @@ -117,16 +165,16 @@ module.exports = class InventoryView extends CocoView @onSelectionChanged() getSelectedSlot: -> - @$el.find('#equipped .item-slot.panel-info') + @$el.find('#equipped .item-slot.selected') unselectAllAvailableEquipment: -> @$el.find('#available-equipment .list-group-item').removeClass('active') unselectAllSlots: -> - @$el.find('#equipped .panel').removeClass('panel-info') + @$el.find('#equipped .item-slot.selected').removeClass('selected') selectSlot: (slot) -> - slot.addClass('panel-info') + slot.addClass('selected') getSlot: (name) -> @$el.find(".item-slot[data-slot=#{name}]") @@ -152,8 +200,8 @@ module.exports = class InventoryView extends CocoView equipSelectedItemToSlot: (slot) -> selectedItemContainer = @getSelectedAvailableItemContainer() newItemHTML = selectedItemContainer.html() - selectedItemContainer .addClass('equipped') - slotContainer = slot.find('.panel-body') + selectedItemContainer.addClass('equipped') + slotContainer = slot.find('.item-container') slotContainer.html(newItemHTML) slotContainer.find('.item-view').data('item-id', selectedItemContainer.find('.item-view').data('item-id')) @$el.find('.list-group-item').removeClass('active') @@ -161,12 +209,13 @@ module.exports = class InventoryView extends CocoView onSelectionChanged: -> @$el.find('.item-slot').show() - selectedSlot = @$el.find('.panel.panel-info') + selectedSlot = @$el.find('.item-slot.selected') selectedItem = @$el.find('#available-equipment .list-group-item.active') if selectedSlot.length @$el.find('#available-equipment .list-group-item').hide() - @$el.find("#available-equipment .list-group-item.#{selectedSlot.data('slot')}").show() + count = @$el.find("#available-equipment .list-group-item.#{selectedSlot.data('slot')}").show().length + @$el.find('#stash-description').text "#{count} #{selectedSlot.data('slot')} items owned" selectedSlotItemID = selectedSlot.find('.item-view').data('item-id') if selectedSlotItemID @@ -177,7 +226,8 @@ module.exports = class InventoryView extends CocoView @hideSelectedSlotItem() else - @$el.find('#available-equipment .list-group-item').show() + count = @$el.find('#available-equipment .list-group-item').show().length + @$el.find('#stash-description').text "#{count} items owned" @$el.find('#available-equipment .list-group-item.equipped').hide() @$el.find('.item-slot').removeClass('disabled') @@ -203,28 +253,30 @@ module.exports = class InventoryView extends CocoView @selectedEquippedItemView = new ItemView({ item: item, includes: {name: true, stats: true, props: true}}) @insertSubView(@selectedEquippedItemView, @$el.find('#selected-equipped-item .item-view-stub')) - else @selectedEquippedItemView.$el.show() @selectedEquippedItemView.item = item @selectedEquippedItemView.render() + @$el.find('#selected-items').show() hideSelectedSlotItem: -> @selectedEquippedItemView?.$el.hide() + @$el.find('#selected-items').hide() unless @selectedEquippedItemView?.$el?.is(':visible') showSelectedAvailableItem: (item) -> if not @selectedAvailableItemView @selectedAvailableItemView = new ItemView({ item: item, includes: {name: true, stats: true, props: true}}) @insertSubView(@selectedAvailableItemView, @$el.find('#selected-available-item .item-view-stub')) - else @selectedAvailableItemView.$el.show() @selectedAvailableItemView.item = item @selectedAvailableItemView.render() + @$el.find('#selected-items').show() hideSelectedAvailableItem: -> @selectedAvailableItemView?.$el.hide() + @$el.find('#selected-items').hide() unless @selectedEquippedItemView?.$el?.is(':visible') getCurrentEquipmentConfig: -> config = {} @@ -234,16 +286,79 @@ module.exports = class InventoryView extends CocoView continue unless slotItemID item = _.find @items.models, {id:slotItemID} config[slotName] = item.get('original') - config + assignLevelEquipment: -> + # This is temporary, until we have a more general way of awarding items and configuring needed/restricted items per level. + gear = + 'simple-boots': '53e237bf53457600003e3f05' + 'longsword': '53e218d853457600003e3ebe' + 'leather-tunic': '53e22eac53457600003e3efc' + 'programmaticon-i': '53e4108204c00d4607a89f78' + 'crude-glasses': '53e238df53457600003e3f0b' + 'builders-hammer': '53f4e6e3d822c23505b74f42' + gearByLevel = + 'dungeons-of-kithgard': {feet: 'simple-boots'} + 'gems-in-the-deep': {feet: 'simple-boots'} + 'shadow-guard': {feet: 'simple-boots'} + 'true-names': {feet: 'simple-boots', 'right-hand': 'longsword'} + 'the-raised-sword': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic'} + 'the-first-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'} + 'the-second-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'} + 'new-sight': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'} + 'lowly-kithmen': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} + 'a-bolt-in-the-dark': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} + 'the-final-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} + 'kithgard-gates': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} + 'defence-of-plainswood': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'} + necessaryGear = gearByLevel[@options.levelID] + for slot, item of necessaryGear ? {} + @equipment[slot] ?= gear[item] + @allowedItems = _.union(_.values(gear), _.values(@equipment)) if necessaryGear # If it's one of these levels, don't show the extra items. + + onHeroSelectionUpdated: (e) -> + @selectedHero = e.hero + @loadHero() + + loadHero: -> + return unless @selectedHero and not @$el.hasClass 'secret' + @stage?.removeAllChildren() + if @selectedHero.loaded and movieClip = @movieClips?[@selectedHero.get('original')] + @stage.addChild(movieClip) + @stage.update() + return + onLoaded = => + return unless canvas = $(".equipped-hero-canvas") + @canvasWidth ||= canvas.width() + @canvasHeight ||= canvas.height() + canvas.prop width: @canvasWidth, height: @canvasHeight + builder = new SpriteBuilder(@selectedHero) + movieClip = builder.buildMovieClip(@selectedHero.get('actions').attack?.animation ? @selectedHero.get('actions').idle.animation) + movieClip.scaleX = movieClip.scaleY = canvas.prop('height') / 120 # Average hero height is ~110px at normal resolution + if @selectedHero.get('name') in ['Knight', 'Robot Walker'] # These are too big, so shrink them. + movieClip.scaleX *= 0.7 + movieClip.scaleY *= 0.7 + movieClip.regX = -@selectedHero.get('positions').registration.x + movieClip.regY = -@selectedHero.get('positions').registration.y + movieClip.x = canvas.prop('width') * 0.5 + movieClip.y = canvas.prop('height') * 0.95 # This is where the feet go. + movieClip.gotoAndPlay 0 + @stage ?= new createjs.Stage(canvas[0]) + @stage.addChild movieClip + @stage.update() + @movieClips ?= {} + @movieClips[@selectedHero.get('original')] = movieClip + if @selectedHero.loaded + if @selectedHero.isFullyLoaded() + _.defer onLoaded + else + console.error 'Hmm, trying to render a hero we have not loaded...?', @selectedHero + else + @listenToOnce @selectedHero, 'sync', onLoaded + + onShown: -> + # Called when we switch tabs to this within the modal + @loadHero() + onHidden: -> - inventory = @getCurrentEquipmentConfig() - heroConfig = @options.session.get('heroConfig') ? {} - return if _.isEqual inventory, (heroConfig.inventory ? {}) - heroConfig.inventory = inventory - heroConfig.thangType ?= '529ffbf1cf1818f2be000001' # Temp: assign Tharin as the hero - @options.session.set 'heroConfig', heroConfig - @options.session.patch success: -> - _.defer -> - Backbone.Mediator.publish 'level:inventory-changed', {} + # Called when the modal itself is dismissed diff --git a/app/views/game-menu/MultiplayerView.coffee b/app/views/game-menu/MultiplayerView.coffee index 35b7f426b..9d95345bd 100644 --- a/app/views/game-menu/MultiplayerView.coffee +++ b/app/views/game-menu/MultiplayerView.coffee @@ -24,7 +24,6 @@ module.exports = class MultiplayerView extends CocoView super(options) @level = options.level @session = options.session - @playableTeams = options.playableTeams @listenTo @session, 'change:multiplayer', @updateLinkSection @initMultiplayerSessions() @@ -40,7 +39,6 @@ module.exports = class MultiplayerView extends CocoView c.multiplayer = @session.get 'multiplayer' c.team = @session.get 'team' c.levelSlug = @level?.get 'slug' - c.playableTeams = @playableTeams # For now, ladderGame will disallow multiplayer, because session code combining doesn't play nice yet. if @level?.get('type') is 'ladder' c.ladderGame = true @@ -100,9 +98,9 @@ module.exports = class MultiplayerView extends CocoView @currentMultiplayerSession = ms @currentMultiplayerSession.on 'change', @onMultiplayerSessionChanged Backbone.Mediator.publish 'real-time-multiplayer:joined-game', session: @currentMultiplayerSession - + onMultiplayerSessionAdded: (e) => - console.log 'onMultiplayerSessionAdded', e + #console.log 'onMultiplayerSessionAdded', e @initMultiplayerSession e @render() diff --git a/app/views/play/SpectateView.coffee b/app/views/play/SpectateView.coffee index 05f97f20e..4adab5a3f 100644 --- a/app/views/play/SpectateView.coffee +++ b/app/views/play/SpectateView.coffee @@ -44,7 +44,6 @@ module.exports = class SpectateLevelView extends RootView 'god:new-world-created': 'onNewWorld' 'god:streaming-world-updated': 'onNewWorld' 'god:infinite-loop': 'onInfiniteLoop' - 'surface:world-set-up': 'onSurfaceSetUpNewWorld' 'level:next-game-pressed': 'onNextGamePressed' 'level:started': 'onLevelStarted' 'level:loading-view-unveiled': 'onLoadingViewUnveiled' @@ -84,7 +83,7 @@ module.exports = class SpectateLevelView extends RootView opponentSessionID: @sessionTwo spectateMode: true team: @getQueryVariable('team') - @god = new God maxAngels: 1 + @god = new God maxAngels: 1, spectate: true getRenderData: -> c = super() @@ -99,9 +98,9 @@ module.exports = class SpectateLevelView extends RootView $('body').addClass('is-playing') onLoaded: -> - _.defer => @onLevelLoaded() + _.defer => @onLevelLoaderLoaded() - onLevelLoaded: -> + onLevelLoaderLoaded: -> @grabLevelLoaderData() #at this point, all requisite data is loaded, and sessions are not denormalized team = @world.teamForPlayer(0) @@ -120,18 +119,19 @@ module.exports = class SpectateLevelView extends RootView @register() @controlBar.setBus(@bus) @surface.showLevel() - if me.id isnt @session.get 'creator' - @surface.createOpponentWizard - id: @session.get('creator') - name: @session.get('creatorName') - team: @session.get('team') - levelSlug: @level.get('slug') + if @level.get('type', true) isnt 'hero' + if me.id isnt @session.get 'creator' + @surface.createOpponentWizard + id: @session.get('creator') + name: @session.get('creatorName') + team: @session.get('team') + levelSlug: @level.get('slug') - @surface.createOpponentWizard - id: @otherSession.get('creator') - name: @otherSession.get('creatorName') - team: @otherSession.get('team') - levelSlug: @level.get('slug') + @surface.createOpponentWizard + id: @otherSession.get('creator') + name: @otherSession.get('creatorName') + team: @otherSession.get('team') + levelSlug: @level.get('slug') grabLevelLoaderData: -> @session = @levelLoader.session @@ -161,12 +161,16 @@ module.exports = class SpectateLevelView extends RootView @session.set 'multiplayer', false onLevelStarted: (e) -> - @loadingView?.unveil() + go = => + @loadingView?.startUnveiling() + @loadingView?.unveil() + _.delay go, 1000 onLoadingViewUnveiled: (e) -> # Don't remove it; we want its decoration around on large screens. #@removeSubView @loadingView #@loadingView = null + Backbone.Mediator.publish 'level:set-playing', playing: true onSupermodelLoadedOne: => @modelsLoaded ?= 0 @@ -183,7 +187,7 @@ module.exports = class SpectateLevelView extends RootView ctx.fillText("Loaded #{@modelsLoaded} thingies",50,50) insertSubviews: -> - @insertSubView @tome = new TomeView levelID: @levelID, session: @session, thangs: @world.thangs, supermodel: @supermodel, spectateView: true, spectateOpponentCodeLanguage: @otherSession?.get('submittedCodeLanguage') + @insertSubView @tome = new TomeView levelID: @levelID, session: @session, thangs: @world.thangs, supermodel: @supermodel, spectateView: true, spectateOpponentCodeLanguage: @otherSession?.get('submittedCodeLanguage'), level: @level @insertSubView new PlaybackView {} @insertSubView new GoldView {} @@ -202,7 +206,7 @@ module.exports = class SpectateLevelView extends RootView initSurface: -> surfaceCanvas = $('canvas#surface', @$el) - @surface = new Surface(@world, surfaceCanvas, thangTypes: @supermodel.getModels(ThangType), playJingle: not @isEditorPreview, spectateGame: true) + @surface = new Surface(@world, surfaceCanvas, thangTypes: @supermodel.getModels(ThangType), playJingle: not @isEditorPreview, spectateGame: true, wizards: @level.get('type', true) isnt 'hero') worldBounds = @world.getBounds() bounds = [{x:worldBounds.left, y:worldBounds.top}, {x:worldBounds.right, y:worldBounds.bottom}] @surface.camera.setBounds(bounds) @@ -229,13 +233,6 @@ module.exports = class SpectateLevelView extends RootView volume = 1.0 unless volume? Backbone.Mediator.publish 'level:set-volume', volume: volume - onSurfaceSetUpNewWorld: -> - return if @alreadyLoadedState - @alreadyLoadedState = true - state = @originalSessionState - if state.playing? - Backbone.Mediator.publish 'level:set-playing', playing: state.playing - register: -> return onSessionWillSave: (e) -> @@ -259,6 +256,7 @@ module.exports = class SpectateLevelView extends RootView return if @headless scripts = @world.scripts # Since these worlds don't have scripts, preserve them. @world = e.world + @world.scripts = scripts thangTypes = @supermodel.getModels(ThangType) startFrame = @lastWorldFramesLoaded ? 0 if @world.frames.length is @world.totalFrames # Finished loading diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee index a73108f04..cc5dff687 100644 --- a/app/views/play/WorldMapView.coffee +++ b/app/views/play/WorldMapView.coffee @@ -3,6 +3,7 @@ template = require 'templates/play/world-map-view' LevelSession = require 'models/LevelSession' CocoCollection = require 'collections/CocoCollection' AudioPlayer = require 'lib/AudioPlayer' +PlayLevelModal = require 'views/play/modal/PlayLevelModal' class LevelSessionsCollection extends CocoCollection url: '' @@ -12,13 +13,13 @@ class LevelSessionsCollection extends CocoCollection super() @url = "/db/user/#{me.id}/level.sessions?project=state.complete,levelID" -module.exports = class MainPlayView extends RootView +module.exports = class WorldMapView extends RootView id: 'world-map-view' template: template events: 'click .map': 'onClickMap' - 'click .game-controls button': 'onClickGameControl' + 'click .level a': 'onClickLevel' 'mouseenter .level a': 'onMouseEnterLevel' 'mouseleave .level a': 'onMouseLeaveLevel' 'mousemove .map': 'onMouseMoveMap' @@ -32,6 +33,10 @@ module.exports = class MainPlayView extends RootView @getLevelPlayCounts() $(window).on 'resize', @onWindowResize + destroy: -> + $(window).off 'resize', @onWindowResize + super() + getLevelPlayCounts: -> success = (levelPlayCounts) => return if @destroyed @@ -78,8 +83,11 @@ module.exports = class MainPlayView extends RootView y = (1 - e.offsetY / @$el.find('.map-background').height()) console.log " x: #{(100 * x).toFixed(2)}\n y: #{(100 * y).toFixed(2)}\n" - onClickGameControl: (e) -> - + onClickLevel: (e) -> + e.preventDefault() + return if $(e.target).attr('disabled') + playLevelModal = new PlayLevelModal supermodel: @supermodel, levelID: $(e.target).data('level-id'), levelPath: $(e.target).data('level-path'), levelName: $(e.target).data('level-name') + @openModalView playLevelModal onMouseEnterLevel: (e) -> levelID = $(e.target).parents('.level').data('level-id') @@ -133,7 +141,6 @@ tutorials = [ id: 'rescue-mission' image: '/file/db/level/52740644904ac0411700067c/rescue_mission_icon.png' description: 'Tharin has been captured! Start here.' - first: true x: 17.23 y: 36.94 } @@ -463,10 +470,195 @@ playerCreated = [ } ] -campaigns = [ - {id: 'beginner', name: 'Beginner Campaign', description: '... in which you learn the wizardry of programming.', levels: tutorials, color: "rgb(255, 80, 60)"} - {id: 'multiplayer', name: 'Multiplayer Arenas', description: '... in which you code head-to-head against other players.', levels: arenas, color: "rgb(80, 5, 60)"} - {id: 'dev', name: 'Random Harder Levels', description: '... in which you learn the interface while doing something a little harder.', levels: experienced, color: "rgb(80, 60, 255)"} - {id: 'classic' ,name: 'Classic Algorithms', description: '... in which you learn the most popular algorithms in Computer Science.', levels: classicAlgorithms, color: "rgb(110, 80, 120)"} - {id: 'player_created', name: 'Player-Created', description: '... in which you battle against the creativity of your fellow Artisan Wizards.', levels: playerCreated, color: "rgb(160, 160, 180)"} +hero = [ + { + name: 'Dungeons of Kithgard' + type: 'hero' + difficulty: 1 + id: 'dungeons-of-kithgard' + image: '/file/db/level/52740644904ac0411700067c/rescue_mission_icon.png' + description: 'Grab the gem, but touch nothing else. Start here.' + x: 17.23 + y: 36.94 + } + { + name: 'Gems in the Deep' + type: 'hero' + difficulty: 1 + id: 'gems-in-the-deep' + image: '/file/db/level/529662dfe0df8f0000000007/grab_the_mushroom_icon.png' + description: 'Quickly collect the gems; you will need them.' + x: 22.6 + y: 35.1 + } + { + name: 'Shadow Guard' + type: 'hero' + difficulty: 1 + id: 'shadow-guard' + image: '/file/db/level/525dc5589a0765e496000006/drink_me_icon.png' + description: 'Evade the Kithgard minion.' + x: 27.74 + y: 35.17 + } + { + name: 'True Names' + type: 'hero' + difficulty: 1 + id: 'true-names' + image: '/file/db/level/5276c9bdcf83207a2801ff8f/taunt_icon.png' + description: 'Learn an enemy\'s true name to defeat it.' + x: 32.7 + y: 36.7 + } + { + name: 'The Raised Sword' + type: 'hero' + difficulty: 1 + id: 'the-raised-sword' + image: '/file/db/level/528aea2d7f37fc4e0700016b/its_a_trap_icon.png' + description: 'Learn to equip yourself for combat.' + x: 36.6 + y: 39.5 + } + { + name: 'The First Kithmaze' + type: 'hero' + difficulty: 1 + id: 'the-first-kithmaze' + image: '/file/db/level/5275272c69abdcb12401216e/break_the_prison_icon.png' + description: 'The builders of Kith constructed many mazes to confuse travelers.' + x: 38.4 + y: 43.5 + } + { + name: 'The Second Kithmaze' + type: 'hero' + difficulty: 1 + id: 'the-second-kithmaze' + image: '/file/db/level/525f150306e1ab0962000018/taunt_icon.png' + description: 'Many have tried, few have found their way through this maze.' + x: 38.9 + y: 48.1 + } + { + name: 'New Sight' + type: 'hero' + difficulty: 1 + id: 'new-sight' + image: '/file/db/level/525abfd9b12777d78e000009/cowardly_taunt_icon.png' + description: 'A true name can only be seen with the correct lenses.' + x: 39.3 + y: 53.1 + } + { + name: 'Lowly Kithmen' + type: 'hero' + difficulty: 1 + id: 'lowly-kithmen' + image: '/file/db/level/525ef8ef06e1ab0962000003/commanding_followers_icon.png' + description: 'Use your glasses to seek out and attack the Kithmen.' + x: 39.4 + y: 57.7 + } + { + name: 'A Bolt in the Dark' + type: 'hero' + difficulty: 1 + id: 'a-bolt-in-the-dark' + image: '/file/db/level/525085419851b83f4b000001/mobile_artillery_icon.png' + description: 'Kithmen are not the only ones to stand in your way.' + x: 40.0 + y: 63.2 + } + { + name: 'The Final Kithmaze' + type: 'hero' + difficulty: 2 + id: 'the-final-kithmaze' + image: '/file/db/level/526bda3fe79aefde2a003e36/mobile_artillery_icon.png' + description: 'To escape you must find your way through an Elder Kithman\'s maze.' + x: 42.67 + y: 67.98 + } + { + name: 'Kithgard Gates' + type: 'hero' + difficulty: 1 + id: 'kithgard-gates' + image: '/file/db/level/526fd3043c637ece50001bb2/the_herd_icon.png' + description: 'Board up Kithguard and escape into the forest.' + x: 47.38 + y: 70.55 + } + { + name: 'Defence of Plainswood' + type: 'hero' + difficulty: 1 + id: 'defence-of-plainswood' + image: '/file/db/level/525dc5589a0765e496000006/drink_me_icon.png' + description: 'Protect the peasants from the pursuing ogres.' + x: 52.66 + y: 69.66 + } + #{ + # name: '' + # type: 'hero' + # difficulty: 1 + # id: '' + # image: '/file/db/level/529662dfe0df8f0000000007/grab_the_mushroom_icon.png' + # description: '' + # x: 58.46 + # y: 66.38 + # } + #{ + # name: '' + # type: 'hero' + # difficulty: 1 + # id: '' + # image: '/file/db/level/526ae95c1e5cd30000000008/zone_of_danger_icon.png' + # description: '' + # x: 63.11 + # y: 62.74 + # } + #{ + # name: '' + # type: 'hero' + # difficulty: 1 + # id: '' + # image: '/file/db/level/529662dfe0df8f0000000007/grab_the_mushroom_icon.png' + # description: '' + # x: 69.19 + # y: 60.61 + # } + #{ + # name: '' + # type: 'hero' + # difficulty: 1 + # id: '' + # image: '/file/db/level/52740644904ac0411700067c/rescue_mission_icon.png' + # description: '' + # x: 77.54 + # y: 65.94 + #} + #{ + # name: '' + # type: 'hero' + # difficulty: 1 + # id: '' + # image: '/file/db/level/526711d9add4f8965f000002/hunter_triplets_icon.png' + # description: '' + # x: 84.29 + # y: 61.23 + #} + +] + +campaigns = [ + #{id: 'beginner', name: 'Beginner Campaign', description: '... in which you learn the wizardry of programming.', levels: tutorials, color: "rgb(255, 80, 60)"} + #{id: 'multiplayer', name: 'Multiplayer Arenas', description: '... in which you code head-to-head against other players.', levels: arenas, color: "rgb(80, 5, 60)"} + #{id: 'dev', name: 'Random Harder Levels', description: '... in which you learn the interface while doing something a little harder.', levels: experienced, color: "rgb(80, 60, 255)"} + #{id: 'classic' ,name: 'Classic Algorithms', description: '... in which you learn the most popular algorithms in Computer Science.', levels: classicAlgorithms, color: "rgb(110, 80, 120)"} + #{id: 'player_created', name: 'Player-Created', description: '... in which you battle against the creativity of your fellow Artisan Wizards.', levels: playerCreated, color: "rgb(160, 160, 180)"} + {id: 'beginner', name: 'Beginner Campaign', levels: hero, color: 'rgb(255, 80, 60)'} ] diff --git a/app/views/play/level/ControlBarView.coffee b/app/views/play/level/ControlBarView.coffee index 2eca3bbb7..30a8bbaa3 100644 --- a/app/views/play/level/ControlBarView.coffee +++ b/app/views/play/level/ControlBarView.coffee @@ -32,7 +32,6 @@ module.exports = class ControlBarView extends CocoView @worldName = options.worldName @session = options.session @level = options.level - @playableTeams = options.playableTeams @spectateGame = options.spectateGame ? false super options @@ -83,7 +82,7 @@ module.exports = class ControlBarView extends CocoView @guideHighlightInterval = null showGameMenuModal: -> - @openModalView new GameMenuModal level: @level, session: @session, playableTeams: @playableTeams + @openModalView new GameMenuModal level: @level, session: @session onJoinedRealTimeMultiplayerGame: (e) -> @multiplayerSession = e.session diff --git a/app/views/play/level/LevelLoadingView.coffee b/app/views/play/level/LevelLoadingView.coffee index 9d8ec311c..62834d214 100644 --- a/app/views/play/level/LevelLoadingView.coffee +++ b/app/views/play/level/LevelLoadingView.coffee @@ -5,13 +5,26 @@ module.exports = class LevelLoadingView extends CocoView id: 'level-loading-view' template: template - onLoaded: -> + events: + 'mousedown .start-level-button': 'startUnveiling' # Split into two for animation smoothness. + 'click .start-level-button': 'onClickStartLevel' + + subscriptions: + 'level:loaded': 'onLevelLoaded' # If Level loads after level loading view. + afterRender: -> @$el.find('.tip.rare').remove() if _.random(1, 10) < 9 tips = @$el.find('.tip').addClass('to-remove') tip = _.sample(tips) $(tip).removeClass('to-remove') @$el.find('.to-remove').remove() + @onLevelLoaded level: @options.level if @options.level?.get('goals') # If Level was already loaded. + + onLevelLoaded: (e) -> + @level = e.level + goalList = @$el.find('.level-loading-goals').removeClass('secret').find('ul') + for goalID, goal of @level.get('goals') when (not goal.team or goal.team is e.team) and not goal.hiddenGoal + goalList.append $('
  • ' + goal.name + '
  • ') showReady: -> return if @shownReady @@ -19,12 +32,19 @@ module.exports = class LevelLoadingView extends CocoView ready = $.i18n.t('play_level.loading_ready', defaultValue: 'Ready!') @$el.find('#tip-wrapper .tip').addClass('ready').text ready Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'level_loaded', volume: 0.75 # old: loading_ready + if @options.autoUnveil + @startUnveiling() + @unveil() + else + @$el.find('.start-level-button').removeClass 'secret' + + startUnveiling: (e) -> + Backbone.Mediator.publish 'level:loading-view-unveiling', {} + + onClickStartLevel: (e) -> + @unveil() unveil: -> - _.delay @reallyUnveil, 1000 - - reallyUnveil: => - return if @destroyed @$el.addClass 'unveiled' loadingDetails = @$el.find('.loading-details') duration = parseFloat loadingDetails.css 'transition-duration' diff --git a/app/views/play/level/PlayLevelView.coffee b/app/views/play/level/PlayLevelView.coffee index fafe1db1d..f62519c31 100644 --- a/app/views/play/level/PlayLevelView.coffee +++ b/app/views/play/level/PlayLevelView.coffee @@ -33,6 +33,7 @@ LevelFlagsView = require './LevelFlagsView' GoldView = require './LevelGoldView' VictoryModal = require './modal/VictoryModal' InfiniteLoopModal = require './modal/InfiniteLoopModal' +GameMenuModal = require 'views/game-menu/GameMenuModal' PROFILE_ME = false @@ -60,17 +61,19 @@ module.exports = class PlayLevelView extends RootView 'level:reload-thang-type': 'onLevelReloadThangType' 'level:play-next-level': 'onPlayNextLevel' 'level:edit-wizard-settings': 'showWizardSettingsModal' - 'surface:world-set-up': 'onSurfaceSetUpNewWorld' 'level:session-will-save': 'onSessionWillSave' 'level:started': 'onLevelStarted' + 'level:loading-view-unveiling': 'onLoadingViewUnveiling' 'level:loading-view-unveiled': 'onLoadingViewUnveiled' + 'level:loaded': 'onLevelLoaded' + 'level:session-loaded': 'onSessionLoaded' 'playback:real-time-playback-waiting': 'onRealTimePlaybackWaiting' 'playback:real-time-playback-started': 'onRealTimePlaybackStarted' 'playback:real-time-playback-ended': 'onRealTimePlaybackEnded' 'real-time-multiplayer:joined-game': 'onJoinedRealTimeMultiplayerGame' 'real-time-multiplayer:left-game': 'onLeftRealTimeMultiplayerGame' 'real-time-multiplayer:manual-cast': 'onRealTimeMultiplayerCast' - 'level:inventory-changed': 'onInventoryChanged' + 'level:hero-config-changed': 'onHeroConfigChanged' events: 'click #level-done-button': 'onDonePressed' @@ -171,14 +174,13 @@ module.exports = class PlayLevelView extends RootView afterRender: -> super() window.onPlayLevelViewLoaded? @ # still a hack - @insertSubView @loadingView = new LevelLoadingView {} + @insertSubView @loadingView = new LevelLoadingView autoUnveil: @options.autoUnveil, level: @level # May not have @level loaded yet @$el.find('#level-done-button').hide() $('body').addClass('is-playing') $('body').bind('touchmove', false) if @isIPadApp() afterInsert: -> super() - @showWizardSettingsModal() if not me.get('name') and not @isIPadApp() # Partially Loaded Setup #################################################### @@ -252,7 +254,7 @@ module.exports = class PlayLevelView extends RootView @god.setGoalManager @goalManager insertSubviews: -> - @insertSubView @tome = new TomeView levelID: @levelID, session: @session, otherSession: @otherSession, thangs: @world.thangs, supermodel: @supermodel + @insertSubView @tome = new TomeView levelID: @levelID, session: @session, otherSession: @otherSession, thangs: @world.thangs, supermodel: @supermodel, level: @level @insertSubView new LevelPlaybackView session: @session @insertSubView new GoalsView {} @insertSubView new LevelFlagsView world: @world @@ -260,7 +262,7 @@ module.exports = class PlayLevelView extends RootView @insertSubView new HUDView {} @insertSubView new ChatView levelID: @levelID, sessionID: @session.id, session: @session worldName = utils.i18n @level.attributes, 'name' - @controlBar = @insertSubView new ControlBarView {worldName: worldName, session: @session, level: @level, supermodel: @supermodel, playableTeams: @world.playableTeams} + @controlBar = @insertSubView new ControlBarView {worldName: worldName, session: @session, level: @level, supermodel: @supermodel} Backbone.Mediator.publish('level:set-debug', debug: true) if @isIPadApp() # if me.displayName() is 'Nick' initVolume: -> @@ -280,10 +282,19 @@ module.exports = class PlayLevelView extends RootView # Load Completed Setup ###################################################### - onLoaded: -> - _.defer => @onLevelLoaded() + onLevelLoaded: (e) -> + # Just the level has been loaded by the level loader + @showWizardSettingsModal() if not me.get('name') and not @isIPadApp() and e.level.get('type', true) isnt 'hero' - onLevelLoaded: -> + onSessionLoaded: (e) -> + # Just the level and session have been loaded by the level loader + if e.level.get('type', true) is 'hero' and not _.size e.session.get('heroConfig')?.inventory ? {} + @openModalView new GameMenuModal level: e.level, session: e.session + + onLoaded: -> + _.defer => @onLevelLoaderLoaded() + + onLevelLoaderLoaded: -> # Everything is now loaded return unless @levelLoader.progress() is 1 # double check, since closing the guide may trigger this early @@ -306,7 +317,7 @@ module.exports = class PlayLevelView extends RootView initSurface: -> surfaceCanvas = $('canvas#surface', @$el) - @surface = new Surface(@world, surfaceCanvas, thangTypes: @supermodel.getModels(ThangType), playJingle: not @isEditorPreview) + @surface = new Surface(@world, surfaceCanvas, thangTypes: @supermodel.getModels(ThangType), playJingle: not @isEditorPreview, wizards: @level.get('type', true) isnt 'hero') worldBounds = @world.getBounds() bounds = [{x: worldBounds.left, y: worldBounds.top}, {x: worldBounds.right, y: worldBounds.bottom}] @surface.camera.setBounds(bounds) @@ -320,10 +331,15 @@ module.exports = class PlayLevelView extends RootView if window.currentModal and not window.currentModal.destroyed return Backbone.Mediator.subscribeOnce 'modal:closed', @onLevelStarted, @ @surface.showLevel() - if @otherSession + if @otherSession and @level.get('type', true) isnt 'hero' # TODO: colorize name and cloud by team, colorize wizard by user's color config @surface.createOpponentWizard id: @otherSession.get('creator'), name: @otherSession.get('creatorName'), team: @otherSession.get('team'), levelSlug: @level.get('slug'), codeLanguage: @otherSession.get('submittedCodeLanguage') - @loadingView?.unveil() + if @isEditorPreview + @loadingView.startUnveiling() + @loadingView.unveil() + + onLoadingViewUnveiling: (e) -> + @restoreSessionState() onLoadingViewUnveiled: (e) -> @loadingView.$el.remove() @@ -336,17 +352,17 @@ module.exports = class PlayLevelView extends RootView application.tracker?.trackEvent 'Finished Level Load', level: @levelID, label: @levelID, loadDuration: loadDuration, ['Google Analytics'] application.tracker?.trackTiming loadDuration, 'Level Load Time', @levelID, @levelID - onSurfaceSetUpNewWorld: -> + restoreSessionState: -> return if @alreadyLoadedState @alreadyLoadedState = true state = @originalSessionState - if state.frame and @level.get('type') isnt 'ladder' # https://github.com/codecombat/codecombat/issues/714 + if state.frame and @level.get('type', true) isnt 'ladder' # https://github.com/codecombat/codecombat/issues/714 Backbone.Mediator.publish 'level:set-time', time: 0, frameOffset: state.frame - if state.selected + if @level.get('type', true) is 'hero' + Backbone.Mediator.publish 'tome:select-primary-sprite', {} + else if state.selected # TODO: Should also restore selected spell here by saving spellName Backbone.Mediator.publish 'level:select-sprite', thangID: state.selected, spellName: null - else if @isIPadApp() - Backbone.Mediator.publish 'tome:select-primary-sprite', {} if state.playing? Backbone.Mediator.publish 'level:set-playing', playing: state.playing @@ -371,18 +387,21 @@ module.exports = class PlayLevelView extends RootView break Backbone.Mediator.publish 'tome:cast-spell', {} - onInventoryChanged: (e) -> + onHeroConfigChanged: (e) -> # Doesn't work because the new inventory ThangTypes may not be loaded. #@setLevel @level, @supermodel #Backbone.Mediator.publish 'tome:cast-spell', {} # We'll just make a new PlayLevelView instead + console.log 'Hero config changed; reload the level.' Backbone.Mediator.publish 'router:navigate', { route: window.location.pathname, viewClass: PlayLevelView, - viewArgs: [{supermodel: @supermodel}, @levelID]} + viewArgs: [{supermodel: @supermodel, autoUnveil: true}, @levelID] + } onWindowResize: (s...) -> $('#pointer').css('opacity', 0.0) + clearInterval(@pointerInterval) onDisableControls: (e) -> return if e.controls and not ('level' in e.controls) @@ -505,7 +524,7 @@ module.exports = class PlayLevelView extends RootView pointer = $('#pointer') pointer.css('transition', 'all 0.6s ease-out') pointer.css('transform', "rotate(#{@pointerRotation}rad) translate(-3px, #{@pointerRadialDistance-50}px)") - Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'dom_highlight', volume: 0.75 + #Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'dom_highlight', volume: 0.75 # Never mind, this is currently so annoying setTimeout((=> pointer.css('transform', "rotate(#{@pointerRotation}rad) translate(-3px, #{@pointerRadialDistance}px)").css('transition', 'all 0.4s ease-in')), 800) diff --git a/app/views/play/level/tome/TomeView.coffee b/app/views/play/level/tome/TomeView.coffee index 066fa9b71..c473262af 100644 --- a/app/views/play/level/tome/TomeView.coffee +++ b/app/views/play/level/tome/TomeView.coffee @@ -183,6 +183,7 @@ module.exports = class TomeView extends CocoView @thangList?.$el.show() onSpriteSelected: (e) -> + return if @spellView and @options.level.get('type', true) is 'hero' # Never deselect the hero in the Tome. thang = e.thang spellName = e.spellName @spellList?.$el.hide() diff --git a/app/views/play/modal/PlayLevelModal.coffee b/app/views/play/modal/PlayLevelModal.coffee new file mode 100644 index 000000000..2da166646 --- /dev/null +++ b/app/views/play/modal/PlayLevelModal.coffee @@ -0,0 +1,106 @@ +ModalView = require 'views/kinds/ModalView' +template = require 'templates/play/modal/play-level-modal' +ChooseHeroView = require 'views/game-menu/ChooseHeroView' +InventoryView = require 'views/game-menu/InventoryView' +PlayLevelView = require 'views/play/level/PlayLevelView' +LevelSession = require 'models/LevelSession' + +module.exports = class PlayLevelModal extends ModalView + className: 'modal fade play-modal' + template: template + id: 'play-level-modal' + + events: + 'click #choose-inventory-button': 'onClickChooseInventory' + 'click #choose-hero-button': 'onClickChooseHero' + 'click #play-level-button': 'onClickPlayLevel' + + shortcuts: + 'enter': 'onEnterPressed' + + constructor: (options) -> + super options + @options.showDevBits = true + @loadSession() + + loadSession: -> + url = "/db/level/#{@options.levelID}/session" + #url += "?team=#{@team}" if @options.team # TODO: figure out how to get the teams for multiplayer PVP hero style + session = new LevelSession().setURL url + @session = @supermodel.loadModel(session, 'level_session').model + @options.session = @session + + getRenderData: (context={}) -> + context = super(context) + context.levelID = @options.levelID + context.levelPath = @options.levelPath + context.levelName = @options.levelName + context + + afterRender: -> + super() + return unless @supermodel.finished() + @session.url = -> '/db/level.session/' + @id + Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1 + @insertSubView @chooseHeroView = new ChooseHeroView @options + @insertSubView @inventoryView = new InventoryView @options + @inventoryView.$el.addClass 'secret' + @chooseHeroView.onShown() + + onHidden: -> + unless @navigatingToPlay + skipSessionSave = not @options.session.get('levelName')? # Has to have been already started. + @updateConfig null, skipSessionSave + Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-close', volume: 1 + super() + + updateConfig: (callback, skipSessionSave) -> + sessionHeroConfig = @options.session.get('heroConfig') ? {} + lastHeroConfig = me.get('heroConfig') ? {} + thangType = @subviews.choose_hero_view.selectedHero.get 'original' + inventory = @subviews.inventory_view.getCurrentEquipmentConfig() + patchSession = patchMe = false + props = thangType: thangType, inventory: inventory + for key, val of props when val + patchSession ||= not _.isEqual val, sessionHeroConfig[key] + patchMe ||= not _.isEqual val, lastHeroConfig[key] + sessionHeroConfig[key] = val + lastHeroConfig[key] = val + if (codeLanguage = @subviews.choose_hero_view.codeLanguage) and @subviews.choose_hero_view.codeLanguageChanged + patchSession ||= codeLanguage isnt @options.session.get('codeLanguage') + patchMe ||= codeLanguage isnt me.get('aceConfig')?.language + @options.session.set 'codeLanguage', codeLanguage + aceConfig = me.get('aceConfig', true) ? {} + aceConfig.language = codeLanguage + me.set 'aceConfig', aceConfig + if patchMe + me.set 'heroConfig', lastHeroConfig + me.patch() + if patchSession + @options.session.set 'heroConfig', sessionHeroConfig + @options.session.patch success: callback unless skipSessionSave + else + callback?() + + onClickChooseInventory: (e) -> + @chooseHeroView.$el.add('#choose-inventory-button, #choose-hero-header').addClass 'secret' + @inventoryView.$el.add('#choose-hero-button, #play-level-button, #choose-inventory-header').removeClass 'secret' + @inventoryView.selectedHero = @chooseHeroView.selectedHero + @inventoryView.onShown() + + onClickChooseHero: (e) -> + @chooseHeroView.$el.add('#choose-inventory-button, #choose-hero-header').removeClass 'secret' + @inventoryView.$el.add('#choose-hero-button, #play-level-button, #choose-inventory-header').addClass 'secret' + @chooseHeroView.onShown() + + onClickPlayLevel: (e) -> + @showLoading() + @updateConfig => + @navigatingToPlay = true + Backbone.Mediator.publish 'router:navigate', { + route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}", + viewClass: PlayLevelView, + viewArgs: [{supermodel: @supermodel}, @options.levelID]} + + onEnterPressed: (e) -> + (if @chooseHeroView.$el.hasClass('secret') then @onClickPlayLevel else @onClickChooseInventory).apply @ diff --git a/app/views/user/JobProfileView.coffee b/app/views/user/JobProfileView.coffee index 9edc938fd..c910522fd 100644 --- a/app/views/user/JobProfileView.coffee +++ b/app/views/user/JobProfileView.coffee @@ -85,6 +85,7 @@ module.exports = class JobProfileView extends UserView $.post "/db/user/#{me.id}/track/view_candidate" $.post "/db/user/#{@userID}/track/viewed_by_employer" unless me.isAdmin() @sessions = @supermodel.loadCollection(new LevelSessionsCollection(@userID), 'candidate_sessions').model + @listenToOnce @sessions, 'sync', => @render?() if me.isAdmin() # Mimicking how the VictoryModal fetches LevelFeedback @remark = new UserRemark() diff --git a/bower.json b/bower.json index c37c71732..5dcb1f801 100644 --- a/bower.json +++ b/bower.json @@ -32,7 +32,7 @@ "firepad": "~0.1.2", "marked": "~0.3.0", "moment": "~2.5.0", - "aether": "~0.2.28", + "aether": "~0.2.32", "underscore.string": "~2.3.3", "firebase": "~1.0.2", "catiline": "~2.9.3", diff --git a/package.json b/package.json index 7bf7b7893..95d305bcd 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "redis": "", "webworker-threads": "~0.4.11", "node-gyp": "~0.13.0", - "aether": "~0.2.28", + "aether": "~0.2.32", "JASON": "~0.1.3", "JQDeferred": "~2.1.0" }, diff --git a/scripts/copy-i18n-tags.coffee b/scripts/copy-i18n-tags.coffee index c7f49b975..c325aea88 100644 --- a/scripts/copy-i18n-tags.coffee +++ b/scripts/copy-i18n-tags.coffee @@ -1,5 +1,28 @@ fs = require 'fs' +path = require 'path' en = require('../app/locale/en').translation + +enSource = fs.readFileSync(path.join(__dirname, '../app/locale/en.coffee'), encoding='utf8') +commentsMap = {} + +categorySplitPattern = /^[\s\n]*(?=[^:\n]+:\s*$)/gm +categoryCapturePattern = /^([^:\n]+):\s*\n/ +commentPattern = /^[\s\n]*([^:\n]+):\s*"[^#\n"]+"\s*#(.*)$/gm + +splitByCategories = enSource.split(categorySplitPattern) + +for section in splitByCategories + categoryMatch = categoryCapturePattern.exec section + + if categoryMatch? + category = categoryMatch[1] + comment = [] + + commentsMap[category] ?= {} + + while (comment = commentPattern.exec section)? + commentsMap[category][comment[1]] = comment[2] + dir = fs.readdirSync 'app/locale' for file in dir when not (file in ['locale.coffee', 'en.coffee']) contents = require('../app/locale/' + file) @@ -16,6 +39,11 @@ for file in dir when not (file in ['locale.coffee', 'en.coffee']) tagMissing = not cat[enTag]? tag = (cat[enTag] ?= enString) tag = tag.replace /"/g, '\\"' - lines.push "#{if tagMissing then '#' else ''} #{enTag}: \"#{tag}\"" + + comment = "" + if commentsMap[enCat]? and commentsMap[enCat][enTag]? + comment = " \##{commentsMap[enCat][enTag]}" + + lines.push "#{if tagMissing then '#' else ''} #{enTag}: \"#{tag}\"#{comment}" newContents = lines.join('\n') + '\n' fs.writeFileSync 'app/locale/' + file, newContents diff --git a/server/achievements/achievement_handler.coffee b/server/achievements/achievement_handler.coffee index 211068bd1..3b9833836 100644 --- a/server/achievements/achievement_handler.coffee +++ b/server/achievements/achievement_handler.coffee @@ -16,7 +16,7 @@ class AchievementHandler extends Handler get: (req, res) -> # /db/achievement?related= if req.query.related - return @sendUnauthorizedError(res) if not @hasAccess(req) + return @sendForbiddenError(res) if not @hasAccess(req) Achievement.find {related: req.query.related}, (err, docs) => return @sendDatabaseError(res, err) if err docs = (@formatEntity(req, doc) for doc in docs) @@ -25,7 +25,7 @@ class AchievementHandler extends Handler super req, res delete: (req, res, slugOrID) -> - return @sendUnauthorizedError res unless req.user?.isAdmin() + return @sendForbiddenError res unless req.user?.isAdmin() @getDocumentForIdOrSlug slugOrID, (err, document) => # Check first return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless document? diff --git a/server/achievements/earned_achievement_handler.coffee b/server/achievements/earned_achievement_handler.coffee index 50796fe38..75359b78a 100644 --- a/server/achievements/earned_achievement_handler.coffee +++ b/server/achievements/earned_achievement_handler.coffee @@ -115,9 +115,9 @@ class EarnedAchievementHandler extends Handler earned.previouslyAchievedAmount = 0 expFunction = achievement.getExpFunction() - newPoints = expFunction(earned.achievedAmount) * achievement.get('worth') + newPoints = expFunction(earned.achievedAmount) * achievement.get('worth') ? 10 else - newPoints = achievement.get 'worth' + newPoints = achievement.get('worth') ? 10 earned.earnedPoints = newPoints newTotalPoints += newPoints diff --git a/server/commons/Handler.coffee b/server/commons/Handler.coffee index aea9810c1..f8392cf6e 100644 --- a/server/commons/Handler.coffee +++ b/server/commons/Handler.coffee @@ -55,7 +55,6 @@ module.exports = class Handler props # sending functions - sendUnauthorizedError: (res) -> errors.forbidden(res) #TODO: rename sendUnauthorizedError to sendForbiddenError sendForbiddenError: (res) -> errors.forbidden(res) sendNotFoundError: (res, message) -> errors.notFound(res, message) sendMethodNotAllowed: (res, message) -> errors.badMethod(res, @allowedMethods, message) @@ -86,7 +85,7 @@ module.exports = class Handler # generic handlers get: (req, res) -> - @sendUnauthorizedError(res) if not @hasAccess(req) + @sendForbiddenError(res) if not @hasAccess(req) specialParameters = ['term', 'project', 'conditions'] @@ -150,16 +149,16 @@ module.exports = class Handler @sendSuccess(res, documents) # regular users are only allowed text searches for now, without any additional filters or sorting else - return @sendUnauthorizedError(res) + return @sendForbiddenError(res) getById: (req, res, id) -> # return @sendNotFoundError(res) # for testing - return @sendUnauthorizedError(res) unless @hasAccess(req) + return @sendForbiddenError(res) unless @hasAccess(req) @getDocumentForIdOrSlug id, (err, document) => return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless document? - return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, document) + return @sendForbiddenError(res) unless @hasAccessToDocument(req, document) @sendSuccess(res, @formatEntity(req, document)) getByRelationship: (req, res, args...) -> @@ -211,7 +210,7 @@ module.exports = class Handler setWatching: (req, res, id) -> @getDocumentForIdOrSlug id, (err, document) => - return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, document, 'get') + return @sendForbiddenError(res) unless @hasAccessToDocument(req, document, 'get') return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless document? watchers = document.get('watchers') or [] @@ -263,7 +262,7 @@ module.exports = class Handler args.push projection @modelClass.findOne(args...).sort(sort).exec (err, doc) => return @sendNotFoundError(res) unless doc? - return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, doc) + return @sendForbiddenError(res) unless @hasAccessToDocument(req, doc) res.send(doc) res.end() @@ -273,12 +272,12 @@ module.exports = class Handler put: (req, res, id) -> return @postNewVersion(req, res) if @modelClass.schema.uses_coco_versions return @sendBadInputError(res, 'No input.') if _.isEmpty(req.body) - return @sendUnauthorizedError(res) unless @hasAccess(req) + return @sendForbiddenError(res) unless @hasAccess(req) @getDocumentForIdOrSlug req.body._id or id, (err, document) => return @sendBadInputError(res, 'Bad id.') if err and err.name is 'CastError' return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless document? - return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, document) + return @sendForbiddenError(res) unless @hasAccessToDocument(req, document) @doWaterfallChecks req, document, (err, document) => return @sendError(res, err.code, err.res) if err @saveChangesToDocument req, document, (err) => @@ -295,7 +294,7 @@ module.exports = class Handler return @sendBadInputError(res, 'No input.') if _.isEmpty(req.body) return @sendBadInputError(res, 'id should not be included.') if req.body._id - return @sendUnauthorizedError(res) unless @hasAccess(req) + return @sendForbiddenError(res) unless @hasAccess(req) document = @makeNewInstance(req) @saveChangesToDocument req, document, (err) => return @sendBadInputError(res, err.errors) if err?.valid is false @@ -314,7 +313,7 @@ module.exports = class Handler postFirstVersion: (req, res) -> return @sendBadInputError(res, 'No input.') if _.isEmpty(req.body) return @sendBadInputError(res, 'id should not be included.') if req.body._id - return @sendUnauthorizedError(res) unless @hasAccess(req) + return @sendForbiddenError(res) unless @hasAccess(req) document = @makeNewInstance(req) document.set('original', document._id) document.set('creator', req.user._id) @@ -337,12 +336,12 @@ module.exports = class Handler """ return @sendBadInputError(res, 'This entity is not versioned') unless @modelClass.schema.uses_coco_versions return @sendBadInputError(res, 'No input.') if _.isEmpty(req.body) - return @sendUnauthorizedError(res) unless @hasAccess(req) + return @sendForbiddenError(res) unless @hasAccess(req) @getDocumentForIdOrSlug req.body._id, (err, parentDocument) => return @sendBadInputError(res, 'Bad id.') if err and err.name is 'CastError' return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless parentDocument? - return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, parentDocument) + return @sendForbiddenError(res) unless @hasAccessToDocument(req, parentDocument) editableProperties = @getEditableProperties req, parentDocument updatedObject = parentDocument.toObject() for prop in editableProperties diff --git a/server/levels/level_handler.coffee b/server/levels/level_handler.coffee index f51f6574f..e2d10747f 100644 --- a/server/levels/level_handler.coffee +++ b/server/levels/level_handler.coffee @@ -50,7 +50,7 @@ LevelHandler = class LevelHandler extends Handler @getDocumentForIdOrSlug id, (err, level) => return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless level? - return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, level, 'get') + return @sendForbiddenError(res) unless @hasAccessToDocument(req, level, 'get') callback err, level getSession: (req, res, id) -> @@ -308,5 +308,8 @@ LevelHandler = class LevelHandler extends Handler @playCountCache[cacheKey] = data @sendSuccess res, data + hasAccessToDocument: (req, document, method=null) -> + return true if method is null or method is 'get' + super(req, document, method) module.exports = new LevelHandler() diff --git a/server/levels/sessions/level_session_handler.coffee b/server/levels/sessions/level_session_handler.coffee index 7d7e2886d..7e94efcaf 100644 --- a/server/levels/sessions/level_session_handler.coffee +++ b/server/levels/sessions/level_session_handler.coffee @@ -20,7 +20,7 @@ class LevelSessionHandler extends Handler return _.omit documentObject, @privateProperties getActiveSessions: (req, res) -> - return @sendUnauthorizedError(res) unless req.user.isAdmin() + return @sendForbiddenError(res) unless req.user.isAdmin() start = new Date() start = new Date(start.getTime() - TIMEOUT) query = @modelClass.find({'changed': {$gt: start}}) diff --git a/server/levels/thangs/thang_type_handler.coffee b/server/levels/thangs/thang_type_handler.coffee index fe6db8587..a69aa797a 100644 --- a/server/levels/thangs/thang_type_handler.coffee +++ b/server/levels/thangs/thang_type_handler.coffee @@ -1,6 +1,17 @@ ThangType = require './ThangType' Handler = require '../../commons/Handler' +heroes = + captain: '529ec584c423d4e83b000014' + knight: '529ffbf1cf1818f2be000001' + librarian: '52fbf74b7e01835453bd8d8e' + equestrian: '52e95b4222efc8e70900175d' + 'potion-master': '52e9adf7427172ae56002172' + thoktar: '52a00542cf1818f2be000006' + 'robot-walker': '5301696ad82649ec2c0c9b0d' + 'michael-heasell': '53e126a4e06b897606d38bef' + 'ian-elliott': '53e12be0d042f23505c3023b' + ThangTypeHandler = class ThangTypeHandler extends Handler modelClass: ThangType jsonSchema: require '../../../app/schemas/models/thang_type' @@ -28,11 +39,17 @@ ThangTypeHandler = class ThangTypeHandler extends Handler req.method is 'GET' or req.user?.isAdmin() get: (req, res) -> - if req.query.view is 'items' + if req.query.view in ['items', 'heroes'] projection = {} if req.query.project projection[field] = 1 for field in req.query.project.split(',') - ThangType.find({ 'kind': 'Item', slug: { $exists: true } }, projection).exec (err, documents) => + query = slug: {$exists: true} + if req.query.view is 'items' + query.kind = 'Item' + else if req.query.view is 'heroes' + query.kind = 'Unit' + query.original = {$in: _.values heroes} # TODO: replace with some sort of ThangType property later + ThangType.find(query, projection).exec (err, documents) => return @sendDatabaseError(res, err) if err documents = (@formatEntity(req, doc) for doc in documents) @sendSuccess(res, documents) diff --git a/server/patches/patch_handler.coffee b/server/patches/patch_handler.coffee index fd316ce4b..3a6cd4ff7 100644 --- a/server/patches/patch_handler.coffee +++ b/server/patches/patch_handler.coffee @@ -42,13 +42,13 @@ PatchHandler = class PatchHandler extends Handler targetModel.findOne(query).sort(sort).exec (err, target) => return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless target? - return @sendUnauthorizedError(res) unless targetHandler.hasAccessToDocument(req, target, 'get') + return @sendForbiddenError(res) unless targetHandler.hasAccessToDocument(req, target, 'get') if newStatus in ['rejected', 'accepted'] - return @sendUnauthorizedError(res) unless targetHandler.hasAccessToDocument(req, target, 'put') + return @sendForbiddenError(res) unless targetHandler.hasAccessToDocument(req, target, 'put') if newStatus is 'withdrawn' - return @sendUnauthorizedError(res) unless req.user.get('_id').equals patch.get('creator') + return @sendForbiddenError(res) unless req.user.get('_id').equals patch.get('creator') patch.set 'status', newStatus diff --git a/server/users/User.coffee b/server/users/User.coffee index abdd629a0..fa4ee0612 100644 --- a/server/users/User.coffee +++ b/server/users/User.coffee @@ -193,7 +193,8 @@ UserSchema.statics.editableProperties = [ 'name', 'photoURL', 'password', 'anonymous', 'wizardColor1', 'volume', 'firstName', 'lastName', 'gender', 'facebookID', 'gplusID', 'emails', 'testGroupNumber', 'music', 'hourOfCode', 'hourOfCodeComplete', 'preferredLanguage', - 'wizard', 'aceConfig', 'autocastDelay', 'lastLevel', 'jobProfile', 'savedEmployerFilterAlerts' + 'wizard', 'aceConfig', 'autocastDelay', 'lastLevel', 'jobProfile', 'savedEmployerFilterAlerts', + 'heroConfig' ] UserSchema.plugin plugins.NamedPlugin diff --git a/server/users/user_handler.coffee b/server/users/user_handler.coffee index 40eed11ea..25f1335a3 100644 --- a/server/users/user_handler.coffee +++ b/server/users/user_handler.coffee @@ -193,7 +193,7 @@ UserHandler = class UserHandler extends Handler super(arguments...) agreeToCLA: (req, res) -> - return @sendUnauthorizedError(res) unless req.user + return @sendForbiddenError(res) unless req.user doc = user: req.user._id+'' email: req.user.get 'email' @@ -224,8 +224,8 @@ UserHandler = class UserHandler extends Handler res.end() getLevelSessionsForEmployer: (req, res, userID) -> - return @sendUnauthorizedError(res) unless req.user._id+'' is userID or req.user.isAdmin() or ('employer' in (req.user.get('permissions') ? [])) - query = creator: userID, levelID: {$in: ['gridmancer', 'greed', 'dungeon-arena', 'brawlwood', 'gold-rush']} + return @sendForbiddenError(res) unless req.user._id+'' is userID or req.user.isAdmin() or ('employer' in (req.user.get('permissions') ? [])) + query = creator: userID, levelID: {$in: ['criss-cross', 'gridmancer', 'greed', 'dungeon-arena', 'brawlwood', 'gold-rush']} projection = 'levelName levelID team playtime codeLanguage submitted code totalScore teamSpells level' LevelSession.find(query).select(projection).exec (err, documents) => return @sendDatabaseError(res, err) if err @@ -281,7 +281,7 @@ UserHandler = class UserHandler extends Handler isMe = userID is req.user._id + '' isAuthorized = isMe or req.user.isAdmin() isAuthorized ||= ('employer' in (req.user.get('permissions') ? [])) and (activityName in ['viewed_by_employer', 'contacted_by_employer']) - return @sendUnauthorizedError res unless isAuthorized + return @sendForbiddenError res unless isAuthorized updateUser = (user) => activity = user.trackActivity activityName, increment user.update {activity: activity}, (err) => @@ -356,7 +356,7 @@ UserHandler = class UserHandler extends Handler true getEmployers: (req, res) -> - return @sendUnauthorizedError(res) unless req.user.isAdmin() + return @sendForbiddenError(res) unless req.user.isAdmin() query = {employerAt: {$exists: true, $ne: ''}} selection = 'name firstName lastName email activity signedEmployerAgreement photoURL employerAt' User.find(query).select(selection).lean().exec (err, documents) => @@ -379,7 +379,7 @@ UserHandler = class UserHandler extends Handler hash.digest('hex') getRemark: (req, res, userID) -> - return @sendUnauthorizedError(res) unless req.user.isAdmin() + return @sendForbiddenError(res) unless req.user.isAdmin() query = user: userID projection = null if req.query.project @@ -392,7 +392,7 @@ UserHandler = class UserHandler extends Handler searchForUser: (req, res) -> # TODO: also somehow search the CLAs to find a match amongst those fields and to find GitHub ids - return @sendUnauthorizedError(res) unless req.user.isAdmin() + return @sendForbiddenError(res) unless req.user.isAdmin() search = req.body.search query = email: {$exists: true}, $or: [ {emailLower: search} diff --git a/vendor/scripts/jquery-ui-1.10.4.custom.js b/vendor/scripts/jquery-ui-1.11.1.custom.js similarity index 70% rename from vendor/scripts/jquery-ui-1.10.4.custom.js rename to vendor/scripts/jquery-ui-1.11.1.custom.js index 0aa0374c8..bc366ba65 100644 --- a/vendor/scripts/jquery-ui-1.10.4.custom.js +++ b/vendor/scripts/jquery-ui-1.11.1.custom.js @@ -1,18 +1,36 @@ -/*! jQuery UI - v1.10.4 - 2014-04-11 +/*! jQuery UI - v1.11.1 - 2014-09-20 * http://jqueryui.com -* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.resizable.js, jquery.ui.sortable.js, jquery.ui.autocomplete.js, jquery.ui.menu.js, jquery.ui.slider.js, jquery.ui.effect.js, jquery.ui.effect-bounce.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-shake.js, jquery.ui.effect-transfer.js +* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, sortable.js, autocomplete.js, menu.js, slider.js, effect.js, effect-bounce.js, effect-highlight.js, effect-pulsate.js, effect-shake.js, effect-transfer.js * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ -(function( $, undefined ) { +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { +/*! + * jQuery UI Core 1.11.1 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/ui-core/ + */ -var uuid = 0, - runiqueId = /^ui-id-\d+$/; // $.ui might exist from components with no dependencies, e.g., $.ui.position $.ui = $.ui || {}; $.extend( $.ui, { - version: "1.10.4", + version: "1.11.1", keyCode: { BACKSPACE: 8, @@ -24,12 +42,6 @@ $.extend( $.ui, { ESCAPE: 27, HOME: 36, LEFT: 37, - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, @@ -42,77 +54,36 @@ $.extend( $.ui, { // plugins $.fn.extend({ - focus: (function( orig ) { - return function( delay, fn ) { - return typeof delay === "number" ? - this.each(function() { - var elem = this; - setTimeout(function() { - $( elem ).focus(); - if ( fn ) { - fn.call( elem ); - } - }, delay ); - }) : - orig.apply( this, arguments ); - }; - })( $.fn.focus ), - - scrollParent: function() { - var scrollParent; - if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { - scrollParent = this.parents().filter(function() { - return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } else { - scrollParent = this.parents().filter(function() { - return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } - - return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent; - }, - - zIndex: function( zIndex ) { - if ( zIndex !== undefined ) { - return this.css( "zIndex", zIndex ); - } - - if ( this.length ) { - var elem = $( this[ 0 ] ), position, value; - while ( elem.length && elem[ 0 ] !== document ) { - // Ignore z-index if position is set to a value where z-index is ignored by the browser - // This makes behavior of this function consistent across browsers - // WebKit always returns auto if the element is positioned - position = elem.css( "position" ); - if ( position === "absolute" || position === "relative" || position === "fixed" ) { - // IE returns 0 when zIndex is not specified - // other browsers return a string - // we ignore the case of nested elements with an explicit value of 0 - //
    - value = parseInt( elem.css( "zIndex" ), 10 ); - if ( !isNaN( value ) && value !== 0 ) { - return value; - } + scrollParent: function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; } - elem = elem.parent(); - } - } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) ); + }).eq( 0 ); - return 0; + return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent; }, - uniqueId: function() { - return this.each(function() { - if ( !this.id ) { - this.id = "ui-id-" + (++uuid); - } - }); - }, + uniqueId: (function() { + var uuid = 0; + + return function() { + return this.each(function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + }); + }; + })(), removeUniqueId: function() { return this.each(function() { - if ( runiqueId.test( this.id ) ) { + if ( /^ui-id-\d+$/.test( this.id ) ) { $( this ).removeAttr( "id" ); } }); @@ -129,7 +100,7 @@ function focusable( element, isTabIndexNotNaN ) { if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { return false; } - img = $( "img[usemap=#" + mapName + "]" )[0]; + img = $( "img[usemap='#" + mapName + "']" )[ 0 ]; return !!img && visible( img ); } return ( /input|select|textarea|button|object/.test( nodeName ) ? @@ -240,94 +211,137 @@ if ( $( "" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { })( $.fn.removeData ); } - - - - // deprecated $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); -$.support.selectstart = "onselectstart" in document.createElement( "div" ); $.fn.extend({ - disableSelection: function() { - return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + - ".ui-disableSelection", function( event ) { + focus: (function( orig ) { + return function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + orig.apply( this, arguments ); + }; + })( $.fn.focus ), + + disableSelection: (function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; + + return function() { + return this.bind( eventType + ".ui-disableSelection", function( event ) { event.preventDefault(); }); - }, + }; + })(), enableSelection: function() { return this.unbind( ".ui-disableSelection" ); - } -}); - -$.extend( $.ui, { - // $.ui.plugin is deprecated. Use $.widget() extensions instead. - plugin: { - add: function( module, option, set ) { - var i, - proto = $.ui[ module ].prototype; - for ( i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args ) { - var i, - set = instance.plugins[ name ]; - if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) { - return; - } - - for ( i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); - } - } - } }, - // only used by resizable - hasScroll: function( el, a ) { - - //If overflow is hidden, the element might have extra content, but the user wants to hide it - if ( $( el ).css( "overflow" ) === "hidden") { - return false; + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); } - var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", - has = false; - - if ( el[ scroll ] > 0 ) { - return true; + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + //
    + value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } } - // TODO: determine which cases actually cause this to happen - // if the element doesn't have the scroll set, see if it's possible to - // set the scroll - el[ scroll ] = 1; - has = ( el[ scroll ] > 0 ); - el[ scroll ] = 0; - return has; + return 0; } }); -})( jQuery ); -(function( $, undefined ) { +// $.ui.plugin is deprecated. Use $.widget() extensions instead. +$.ui.plugin = { + add: function( module, option, set ) { + var i, + proto = $.ui[ module ].prototype; + for ( i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args, allowDisconnected ) { + var i, + set = instance.plugins[ name ]; -var uuid = 0, - slice = Array.prototype.slice, - _cleanData = $.cleanData; -$.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} + if ( !set ) { + return; + } + + if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) { + return; + } + + for ( i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } } - _cleanData( elems ); }; + +/*! + * jQuery UI Widget 1.11.1 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/jQuery.widget/ + */ + + +var widget_uuid = 0, + widget_slice = Array.prototype.slice; + +$.cleanData = (function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; (elem = elems[i]) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + } + orig( elems ); + }; +})( $.cleanData ); + $.widget = function( name, base, prototype ) { var fullName, existingConstructor, constructor, basePrototype, // proxiedPrototype allows the provided prototype to remain unmodified @@ -439,10 +453,12 @@ $.widget = function( name, base, prototype ) { } $.widget.bridge( name, constructor ); + + return constructor; }; $.widget.extend = function( target ) { - var input = slice.call( arguments, 1 ), + var input = widget_slice.call( arguments, 1 ), inputIndex = 0, inputLength = input.length, key, @@ -471,7 +487,7 @@ $.widget.bridge = function( name, object ) { var fullName = object.prototype.widgetFullName || name; $.fn[ name ] = function( options ) { var isMethodCall = typeof options === "string", - args = slice.call( arguments, 1 ), + args = widget_slice.call( arguments, 1 ), returnValue = this; // allow multiple hashes to be passed on init @@ -483,6 +499,10 @@ $.widget.bridge = function( name, object ) { this.each(function() { var methodValue, instance = $.data( this, fullName ); + if ( options === "instance" ) { + returnValue = instance; + return false; + } if ( !instance ) { return $.error( "cannot call methods on " + name + " prior to initialization; " + "attempted to call method '" + options + "'" ); @@ -502,7 +522,10 @@ $.widget.bridge = function( name, object ) { this.each(function() { var instance = $.data( this, fullName ); if ( instance ) { - instance.option( options || {} )._init(); + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } } else { $.data( this, fullName, new object( options, this ) ); } @@ -529,7 +552,7 @@ $.Widget.prototype = { _createWidget: function( options, element ) { element = $( element || this.defaultElement || this )[ 0 ]; this.element = $( element ); - this.uuid = uuid++; + this.uuid = widget_uuid++; this.eventNamespace = "." + this.widgetName + this.uuid; this.options = $.widget.extend( {}, this.options, @@ -572,9 +595,6 @@ $.Widget.prototype = { // all event bindings should go through this._on() this.element .unbind( this.eventNamespace ) - // 1.9 BC for #7810 - // TODO remove dual storage - .removeData( this.widgetName ) .removeData( this.widgetFullName ) // support: jquery <1.6.3 // http://bugs.jquery.com/ticket/9413 @@ -650,20 +670,23 @@ $.Widget.prototype = { if ( key === "disabled" ) { this.widget() - .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) - .attr( "aria-disabled", value ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); + .toggleClass( this.widgetFullName + "-disabled", !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + } } return this; }, enable: function() { - return this._setOption( "disabled", false ); + return this._setOptions({ disabled: false }); }, disable: function() { - return this._setOption( "disabled", true ); + return this._setOptions({ disabled: true }); }, _on: function( suppressDisabledCheck, element, handlers ) { @@ -683,7 +706,6 @@ $.Widget.prototype = { element = this.element; delegateElement = this.widget(); } else { - // accept selectors, DOM elements element = delegateElement = $( element ); this.bindings = this.bindings.add( element ); } @@ -708,7 +730,7 @@ $.Widget.prototype = { handler.guid || handlerProxy.guid || $.guid++; } - var match = event.match( /^(\w+)\s*(.*)$/ ), + var match = event.match( /^([\w:-]*)\s*(.*)$/ ), eventName = match[1] + instance.eventNamespace, selector = match[2]; if ( selector ) { @@ -823,16 +845,28 @@ $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { }; }); -})( jQuery ); -(function( $, undefined ) { +var widget = $.widget; + + +/*! + * jQuery UI Mouse 1.11.1 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/mouse/ + */ + var mouseHandled = false; $( document ).mouseup( function() { mouseHandled = false; }); -$.widget("ui.mouse", { - version: "1.10.4", +var mouse = $.widget("ui.mouse", { + version: "1.11.1", options: { cancel: "input,textarea,button,select,option", distance: 1, @@ -842,10 +876,10 @@ $.widget("ui.mouse", { var that = this; this.element - .bind("mousedown."+this.widgetName, function(event) { + .bind("mousedown." + this.widgetName, function(event) { return that._mouseDown(event); }) - .bind("click."+this.widgetName, function(event) { + .bind("click." + this.widgetName, function(event) { if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { $.removeData(event.target, that.widgetName + ".preventClickEvent"); event.stopImmediatePropagation(); @@ -859,17 +893,19 @@ $.widget("ui.mouse", { // TODO: make sure destroying one instance of mouse doesn't mess with // other instances of mouse _mouseDestroy: function() { - this.element.unbind("."+this.widgetName); + this.element.unbind("." + this.widgetName); if ( this._mouseMoveDelegate ) { - $(document) - .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); + this.document + .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate) + .unbind("mouseup." + this.widgetName, this._mouseUpDelegate); } }, _mouseDown: function(event) { // don't let more than one widget handle mouseStart - if( mouseHandled ) { return; } + if ( mouseHandled ) { + return; + } // we may have missed mouseup (out of window) (this._mouseStarted && this._mouseUp(event)); @@ -912,9 +948,10 @@ $.widget("ui.mouse", { this._mouseUpDelegate = function(event) { return that._mouseUp(event); }; - $(document) - .bind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .bind("mouseup."+this.widgetName, this._mouseUpDelegate); + + this.document + .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .bind( "mouseup." + this.widgetName, this._mouseUpDelegate ); event.preventDefault(); @@ -926,6 +963,10 @@ $.widget("ui.mouse", { // IE mouseup check - mouseup happened when mouse was out of window if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { return this._mouseUp(event); + + // Iframe mouseup check - mouseup occurred in another document + } else if ( !event.which ) { + return this._mouseUp( event ); } if (this._mouseStarted) { @@ -943,9 +984,9 @@ $.widget("ui.mouse", { }, _mouseUp: function(event) { - $(document) - .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) - .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); + this.document + .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate ); if (this._mouseStarted) { this._mouseStarted = false; @@ -957,6 +998,7 @@ $.widget("ui.mouse", { this._mouseStop(event); } + mouseHandled = false; return false; }, @@ -979,12 +1021,23 @@ $.widget("ui.mouse", { _mouseCapture: function(/* event */) { return true; } }); -})(jQuery); -(function( $, undefined ) { + +/*! + * jQuery UI Position 1.11.1 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +(function() { $.ui = $.ui || {}; -var cachedScrollbarWidth, +var cachedScrollbarWidth, supportsOffsetFractions, max = Math.max, abs = Math.abs, round = Math.round, @@ -1084,8 +1137,11 @@ $.position = { offset: withinElement.offset() || { left: 0, top: 0 }, scrollLeft: withinElement.scrollLeft(), scrollTop: withinElement.scrollTop(), - width: isWindow ? withinElement.width() : withinElement.outerWidth(), - height: isWindow ? withinElement.height() : withinElement.outerHeight() + + // support: jQuery 1.6.x + // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows + width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(), + height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight() }; } }; @@ -1197,7 +1253,7 @@ $.fn.position = function( options ) { position.top += myOffset[ 1 ]; // if the browser doesn't support fractions, then round for consistent results - if ( !$.support.offsetFractions ) { + if ( !supportsOffsetFractions ) { position.left = round( position.left ); position.top = round( position.top ); } @@ -1221,7 +1277,7 @@ $.fn.position = function( options ) { my: options.my, at: options.at, within: within, - elem : elem + elem: elem }); } }); @@ -1375,8 +1431,7 @@ $.ui.position = { if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { position.left += myOffset + atOffset + offset; } - } - else if ( overRight > 0 ) { + } else if ( overRight > 0 ) { newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { position.left += myOffset + atOffset + offset; @@ -1410,8 +1465,7 @@ $.ui.position = { if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) { position.top += myOffset + atOffset + offset; } - } - else if ( overBottom > 0 ) { + } else if ( overBottom > 0 ) { newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) { position.top += myOffset + atOffset + offset; @@ -1432,7 +1486,7 @@ $.ui.position = { }; // fraction support test -(function () { +(function() { var testElement, testElementParent, testElementStyle, offsetLeft, i, body = document.getElementsByTagName( "body" )[ 0 ], div = document.createElement( "div" ); @@ -1464,25 +1518,1434 @@ $.ui.position = { div.style.cssText = "position: absolute; left: 10.7432222px;"; offsetLeft = $( div ).offset().left; - $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11; + supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11; testElement.innerHTML = ""; testElementParent.removeChild( testElement ); })(); -}( jQuery ) ); -(function( $, undefined ) { +})(); -function num(v) { - return parseInt(v, 10) || 0; -} +var position = $.ui.position; + + +/*! + * jQuery UI Draggable 1.11.1 + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/draggable/ + */ + + +$.widget("ui.draggable", $.ui.mouse, { + version: "1.11.1", + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false, + + // callbacks + drag: null, + start: null, + stop: null + }, + _create: function() { + + if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) { + this.element[0].style.position = "relative"; + } + if (this.options.addClasses){ + this.element.addClass("ui-draggable"); + } + if (this.options.disabled){ + this.element.addClass("ui-draggable-disabled"); + } + this._setHandleClassName(); + + this._mouseInit(); + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "handle" ) { + this._removeHandleClassName(); + this._setHandleClassName(); + } + }, + + _destroy: function() { + if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) { + this.destroyOnClear = true; + return; + } + this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" ); + this._removeHandleClassName(); + this._mouseDestroy(); + }, + + _mouseCapture: function(event) { + + var document = this.document[ 0 ], + o = this.options; + + // support: IE9 + // IE9 throws an "Unspecified error" accessing document.activeElement from an