From 84db5289f9e20cd110c406495a80e3806df79c3c Mon Sep 17 00:00:00 2001 From: Aditya Raisinghani Date: Tue, 25 Mar 2014 16:36:24 +0530 Subject: [PATCH 001/665] Fixed issue with two scroll bars appearing. --- app/styles/base.sass | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/styles/base.sass b/app/styles/base.sass index 166fd23e3..e42ce479a 100644 --- a/app/styles/base.sass +++ b/app/styles/base.sass @@ -8,6 +8,9 @@ html, body // For level loading view wings overflow-x: hidden +body + overflow: hidden + // https://github.com/twbs/bootstrap/issues/9237 -- need a version that's not !important .secret display: none @@ -48,7 +51,6 @@ h1 h2 h3 h4 margin: 0 auto .footer - height: 75px border-top: 1px solid black background-color: #2f261d p From 6208e8e3247df8a70ea981bf9c7bf213f62fe87f Mon Sep 17 00:00:00 2001 From: Aditya Raisinghani Date: Tue, 25 Mar 2014 16:50:02 +0530 Subject: [PATCH 002/665] Additional fixes for double scrollbars of modals. --- app/styles/base.sass | 1 + 1 file changed, 1 insertion(+) diff --git a/app/styles/base.sass b/app/styles/base.sass index e42ce479a..22f50b398 100644 --- a/app/styles/base.sass +++ b/app/styles/base.sass @@ -171,6 +171,7 @@ a[data-toggle="modal"] width: 100% .modal + overflow: hidden !important .wait h3 text-align: center From deb3ddeece22cdffbe4a73e64a735c3f714717f7 Mon Sep 17 00:00:00 2001 From: Aditya Raisinghani Date: Thu, 27 Mar 2014 12:31:29 +0530 Subject: [PATCH 003/665] Longer modals are now scrollable. --- app/styles/base.sass | 12 ++++-------- app/styles/play/level.sass | 4 ++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/styles/base.sass b/app/styles/base.sass index 22f50b398..909ac02df 100644 --- a/app/styles/base.sass +++ b/app/styles/base.sass @@ -1,16 +1,12 @@ @import "bootstrap/variables" @import "bootstrap/mixins" +::-webkit-scrollbar + display: none + html background-color: #2f261d -html, body - // For level loading view wings - overflow-x: hidden - -body - overflow: hidden - // https://github.com/twbs/bootstrap/issues/9237 -- need a version that's not !important .secret display: none @@ -171,7 +167,7 @@ a[data-toggle="modal"] width: 100% .modal - overflow: hidden !important + overflow-y: auto !important .wait h3 text-align: center diff --git a/app/styles/play/level.sass b/app/styles/play/level.sass index d051e9f43..51a982544 100644 --- a/app/styles/play/level.sass +++ b/app/styles/play/level.sass @@ -1,6 +1,10 @@ @import "app/styles/bootstrap/mixins" @import "app/styles/mixins" +#level-loading-view + overflow-x: hidden + + #level-view margin: 0 auto @include user-select(none) From 9acde85c8ca558472027ad350ef5fec35a281ce1 Mon Sep 17 00:00:00 2001 From: Inez KEMENES Date: Wed, 2 Apr 2014 15:24:26 +0200 Subject: [PATCH 004/665] Update hu.coffee --- app/locale/hu.coffee | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/locale/hu.coffee b/app/locale/hu.coffee index 2c8a626b3..e21001a87 100644 --- a/app/locale/hu.coffee +++ b/app/locale/hu.coffee @@ -14,12 +14,12 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t play: "Játék" # units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" +# second: "másodperc" +# seconds: "másodpercek" +# minute: "perc" +# minutes: "percek" +# hour: "óra" +# hours: "órák" modal: close: "Mégse" From 70d42b6eae4cf2ac7d179eeb28180c57841067ca Mon Sep 17 00:00:00 2001 From: Inez KEMENES Date: Wed, 2 Apr 2014 16:00:15 +0200 Subject: [PATCH 005/665] Update hu.coffee --- app/locale/hu.coffee | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/locale/hu.coffee b/app/locale/hu.coffee index 2c8a626b3..82ccf26c1 100644 --- a/app/locale/hu.coffee +++ b/app/locale/hu.coffee @@ -76,12 +76,12 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t 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!" -# 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" -# for_beginners: "For Beginners" +# 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" +# for_beginners: "Kezdőknek" # multiplayer: "Multiplayer" -# for_developers: "For Developers" +# for_developers: "Fejlesztőknek" play: choose_your_level: "Válaszd ki a pályát!" @@ -97,7 +97,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t campaign_player_created: "Játékosok pályái" campaign_player_created_description: "...melyekben Művészi Varázsló társaid ellen kűzdhetsz." level_difficulty: "Nehézség: " -# play_as: "Play As" +# play_as: "Játssz mint" # spectate: "Spectate" contact: @@ -122,12 +122,12 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t wizard_settings: title: "Varázsló beállításai" customize_avatar: "Állítsd be az Avatarod!" -# clothes: "Clothes" +# clothes: "Öltözetek" # trim: "Trim" -# cloud: "Cloud" -# spell: "Spell" -# boots: "Boots" -# hue: "Hue" +# cloud: "Felhő" +# spell: "Varázslat" +# boots: "Lábbelik" +# hue: "Árnyalat" # saturation: "Saturation" # lightness: "Lightness" From 44979c074d791b8074da10e560bf469ddafe493d Mon Sep 17 00:00:00 2001 From: Aditya Raisinghani Date: Thu, 3 Apr 2014 03:10:06 +0530 Subject: [PATCH 006/665] Integrated nanoscroller. --- app/assets/index.html | 24 +- app/styles/base.sass | 15 +- app/styles/nanoscroller.scss | 272 ++++++++++ app/styles/play/level/tome/spell_palette.sass | 8 +- app/styles/play/spectate.sass | 3 +- app/templates/base.jade | 2 +- app/templates/modal/modal_base.jade | 47 +- app/templates/play/level.jade | 1 - app/templates/play/level/hud.jade | 14 +- .../play/level/tome/spell_palette.jade | 4 +- app/views/home_view.coffee | 2 +- app/views/kinds/ModalView.coffee | 3 + app/views/kinds/RootView.coffee | 1 + .../play/level/tome/spell_palette_view.coffee | 1 + app/views/play/level/tome/spell_view.coffee | 2 +- app/views/play_view.coffee | 1 + config.coffee | 5 +- vendor/scripts/antiscroll.js | 471 ------------------ vendor/scripts/jquery.nanoscroller.min.js | 4 + 19 files changed, 361 insertions(+), 519 deletions(-) create mode 100644 app/styles/nanoscroller.scss delete mode 100644 vendor/scripts/antiscroll.js create mode 100644 vendor/scripts/jquery.nanoscroller.min.js diff --git a/app/assets/index.html b/app/assets/index.html index 27aca27ff..a81c32f5b 100644 --- a/app/assets/index.html +++ b/app/assets/index.html @@ -67,7 +67,7 @@ - +
@@ -111,7 +111,7 @@
-
+
- + + + + + diff --git a/app/styles/base.sass b/app/styles/base.sass index 909ac02df..f53d5147b 100644 --- a/app/styles/base.sass +++ b/app/styles/base.sass @@ -1,9 +1,6 @@ @import "bootstrap/variables" @import "bootstrap/mixins" -::-webkit-scrollbar - display: none - html background-color: #2f261d @@ -100,10 +97,14 @@ a[data-toggle="modal"] .modal-dialog padding: 5px - background: transparent url(/images/pages/base/modal_background.png) - background-size: 100% 100% - border: 0 - @include box-shadow(0 0 0 #000) + + .background-wrapper + background: url("/images/pages/base/modal_background.png") + background-size: 100% 100% + border: 0 + @include box-shadow(0 0 0 #000) + position: absolute + width: 99% .modal-content @include box-shadow(none) diff --git a/app/styles/nanoscroller.scss b/app/styles/nanoscroller.scss new file mode 100644 index 000000000..caf13c1c3 --- /dev/null +++ b/app/styles/nanoscroller.scss @@ -0,0 +1,272 @@ +// +// nanoScrollerJS (Sass) +// -------------------------------------------------- +/** initial setup **/ +$nanoClass: "nano"; +$paneClass: "nano-pane"; +$sliderClass: "nano-slider"; +$contentClass: "nano-content"; + +.#{$nanoClass} { + width: 100%; + height: 100%; + position: relative; + overflow: hidden; + + .#{$contentClass} { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: scroll; + overflow-x: hidden; + + &:focus { + outline: thin dotted; + } + + &::-webkit-scrollbar { + visibility: hidden; + } + } + + > .#{$paneClass} { + width: 10px; + background: rgba(0,0,0,.25); + position: absolute; + top: 0; + right: 0; + bottom: 0; + -webkit-transition: .2s; + -moz-transition: .2s; + -o-transition: .2s; + transition: .2s; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + visibility: hidden\9; // Target only IE7 and IE8 with this hack + opacity: .01; + + > .#{$sliderClass} { + background: #444; + background: rgba(0,0,0,.5); + position: relative; + margin: 0 1px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + } +} + +.has-scrollbar > .#{$contentClass}::-webkit-scrollbar { + visibility: visible; +} + +.#{$paneClass} { + .#{$nanoClass}:hover > &, + &.active, + &.flashed { + visibility: visible\9; // Target only IE7 and IE8 with this hack + opacity: 0.99; + } +} + +.nano-table { + width: 100%; + height: 100%; + position: relative; + overflow: hidden; + + .nano-table-content { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: scroll; + overflow-x: hidden; + + &:focus { + outline: thin dotted; + } + + &::-webkit-scrollbar { + visibility: hidden; + } + } + + > .#{$paneClass} { + width: 10px; + background: rgba(0,0,0,.25); + position: absolute; + top: 0; + right: 0; + bottom: 0; + -webkit-transition: .2s; + -moz-transition: .2s; + -o-transition: .2s; + transition: .2s; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + visibility: hidden\9; // Target only IE7 and IE8 with this hack + opacity: .01; + + > .#{$sliderClass} { + background: #444; + background: rgba(0,0,0,.5); + position: relative; + margin: 0 1px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + } +} + +.has-scrollbar > .nano-table-content::-webkit-scrollbar { + visibility: visible; +} + +.#{$paneClass} { + .nano-table:hover > &, + &.active, + &.flashed { + visibility: visible\9; // Target only IE7 and IE8 with this hack + opacity: 0.99; + } +} + +body { + width: 100%; + height: 100%; + position: absolute; + overflow: hidden; + + .nano-content { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: scroll; + overflow-x: hidden; + + &:focus { + outline: thin dotted; + } + + &::-webkit-scrollbar { + visibility: hidden; + } + } + + > .#{$paneClass} { + width: 10px; + background: rgba(0,0,0,.25); + position: absolute; + top: 0; + right: 0; + bottom: 0; + -webkit-transition: .2s; + -moz-transition: .2s; + -o-transition: .2s; + transition: .2s; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + visibility: hidden\9; // Target only IE7 and IE8 with this hack + opacity: .01; + + > .#{$sliderClass} { + background: #444; + background: rgba(0,0,0,.5); + position: relative; + margin: 0 1px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + } +} + +.has-scrollbar > .nano-content::-webkit-scrollbar { + visibility: visible; +} + +.#{$paneClass} { + body:hover > &, + &.active, + &.flashed { + visibility: visible\9; // Target only IE7 and IE8 with this hack + opacity: 0.99; + } +} + +.modal{ + width: 100%; + height: 100%; + position: absolute; + overflow: hidden; + + .modal-dialog { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: scroll; + overflow-x: hidden; + + &:focus { + outline: thin dotted; + } + + &::-webkit-scrollbar { + visibility: hidden; + } + } + + > .#{$paneClass} { + width: 10px; + background: rgba(255,255,255,.6); + position: absolute; + top: 0; + right: 0; + bottom: 0; + -webkit-transition: .2s; + -moz-transition: .2s; + -o-transition: .2s; + transition: .2s; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + visibility: hidden\9; // Target only IE7 and IE8 with this hack + opacity: .01; + + > .#{$sliderClass} { + background: #444; + background: rgba(0,0,0,.5); + position: relative; + margin: 0 1px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + } +} + +.has-scrollbar > .modal-dialog::-webkit-scrollbar { + visibility: visible; +} + +.#{$paneClass} { + .modal:hover > &, + &.active, + &.flashed { + visibility: visible\9; // Target only IE7 and IE8 with this hack + opacity: 0.99; + } +} \ No newline at end of file diff --git a/app/styles/play/level/tome/spell_palette.sass b/app/styles/play/level/tome/spell_palette.sass index e941f8def..52ce37658 100644 --- a/app/styles/play/level/tome/spell_palette.sass +++ b/app/styles/play/level/tome/spell_palette.sass @@ -15,7 +15,7 @@ background-color: transparent background-size: 100% 100% z-index: 0 - overflow-y: auto + //overflow-y: auto img position: absolute @@ -47,6 +47,12 @@ &.multiple-tabs li:not(.active) a cursor: pointer + .tab-content + height: 80px + .nano-pane + width: 7px + right: 5px + //.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus // background-color: lighten(rgb(230, 212, 146), 10%) diff --git a/app/styles/play/spectate.sass b/app/styles/play/spectate.sass index f04075b79..8e79d3957 100644 --- a/app/styles/play/spectate.sass +++ b/app/styles/play/spectate.sass @@ -23,7 +23,7 @@ line-height: 15px left: 0 - max-width: 1920px + //max-width: 1920px margin: 0 auto @include user-select(none) @@ -31,6 +31,7 @@ max-height: 1284px .level-content + max-width: 1920px position: relative margin: 0px auto diff --git a/app/templates/base.jade b/app/templates/base.jade index 981c15a72..132e831bc 100644 --- a/app/templates/base.jade +++ b/app/templates/base.jade @@ -42,7 +42,7 @@ body p If this is showing, you dun goofed block footer - .footer + .footer.clearfix .content p.footer-link-text if pathname == "/" diff --git a/app/templates/modal/modal_base.jade b/app/templates/modal/modal_base.jade index caebe847c..e2c2d527f 100644 --- a/app/templates/modal/modal_base.jade +++ b/app/templates/modal/modal_base.jade @@ -1,26 +1,27 @@ .modal-dialog - .modal-content - block modal-header - .modal-header - if closeButton - .button.close(type="button", data-dismiss="modal", aria-hidden="true") × - block modal-header-content - h3 man bites God - - block modal-body - .modal-body - block modal-body-content - p Man Bites God are the bad boys of the Melbourne live music and comedy scene. It is like being drowned in a bathtub of harmony. - img(src="http://www.manbitesgod.com/images/picturecoupleb.jpg") - img(src="http://www.manbitesgod.com/images/manrantb.jpg") + .background-wrapper + .modal-content + block modal-header + .modal-header + if closeButton + .button.close(type="button", data-dismiss="modal", aria-hidden="true") × + block modal-header-content + h3 man bites God + + block modal-body + .modal-body + block modal-body-content + p Man Bites God are the bad boys of the Melbourne live music and comedy scene. It is like being drowned in a bathtub of harmony. + img(src="http://www.manbitesgod.com/images/picturecoupleb.jpg") + img(src="http://www.manbitesgod.com/images/manrantb.jpg") - .modal-body.wait.secret - block modal-body-wait-content - h3 Reticulating Splines... - .progress.progress-striped.active - .progress-bar + .modal-body.wait.secret + block modal-body-wait-content + h3 Reticulating Splines... + .progress.progress-striped.active + .progress-bar - block modal-footer - .modal-footer - block modal-footer-content - button.btn.btn-primary(type="button", data-dismiss="modal", aria-hidden="true", data-i18n="modal.okay") Okay \ No newline at end of file + block modal-footer + .modal-footer + block modal-footer-content + button.btn.btn-primary(type="button", data-dismiss="modal", aria-hidden="true", data-i18n="modal.okay") Okay \ No newline at end of file diff --git a/app/templates/play/level.jade b/app/templates/play/level.jade index fe4170d1c..d5386952d 100644 --- a/app/templates/play/level.jade +++ b/app/templates/play/level.jade @@ -1,7 +1,6 @@ #level-loading-view .level-content - #control-bar-view #code-area diff --git a/app/templates/play/level/hud.jade b/app/templates/play/level/hud.jade index f3a67ff9b..a5b066cc3 100644 --- a/app/templates/play/level/hud.jade +++ b/app/templates/play/level/hud.jade @@ -9,12 +9,14 @@ .thang-name .thang-actions.thang-elem - .action-header(data-i18n="play_level.action_timeline") Action Timeline - .table-container - .progress-arrow.progress-indicator - .progress-line.progress-indicator - table - tbody + .nano-table + .nano-table-content + .action-header(data-i18n="play_level.action_timeline") Action Timeline + .table-container + .progress-arrow.progress-indicator + .progress-line.progress-indicator + table + tbody .dialogue-area p.bubble.dialogue-bubble diff --git a/app/templates/play/level/tome/spell_palette.jade b/app/templates/play/level/tome/spell_palette.jade index d587da8c5..f87259d77 100644 --- a/app/templates/play/level/tome/spell_palette.jade +++ b/app/templates/play/level/tome/spell_palette.jade @@ -6,5 +6,5 @@ ul(class="nav nav-pills" + (tabbed ? ' multiple-tabs' : '')) h4= group .tab-content each slug, group in entryGroupSlugs - div(id="palette-tab-" + slug, class="tab-pane" + (group == "this" || slug == defaultGroupSlug ? " active" : "")) - div(class="properties properties-" + slug) + div(id="palette-tab-" + slug, class="tab-pane nano" + (group == "this" || slug == defaultGroupSlug ? " active" : "")) + div(class="properties properties-" + slug + " nano-content") diff --git a/app/views/home_view.coffee b/app/views/home_view.coffee index 7c0eea234..565e7e1a7 100644 --- a/app/views/home_view.coffee +++ b/app/views/home_view.coffee @@ -39,4 +39,4 @@ module.exports = class HomeView extends View href = playLink.attr("href").split("/") href[href.length-1] = lastLevel if href.length isnt 0 href = href.join("/") - playLink.attr("href", href) + playLink.attr("href", href) \ No newline at end of file diff --git a/app/views/kinds/ModalView.coffee b/app/views/kinds/ModalView.coffee index 5222df067..e6e4c777b 100644 --- a/app/views/kinds/ModalView.coffee +++ b/app/views/kinds/ModalView.coffee @@ -37,6 +37,9 @@ module.exports = class ModalView extends CocoView # This makes sure if you press enter right after opening the players guide, # it doesn't just reopen the modal. $(document.activeElement).blur() + setTimeout -> + $('.modal').nanoScroller({contentClass:'modal-dialog'}) + , 1000 showLoading: ($el) -> $el = @$el.find('.modal-body') unless $el diff --git a/app/views/kinds/RootView.coffee b/app/views/kinds/RootView.coffee index 87752cebf..20e325ab2 100644 --- a/app/views/kinds/RootView.coffee +++ b/app/views/kinds/RootView.coffee @@ -38,6 +38,7 @@ module.exports = class RootView extends CocoView location.hash = '' location.hash = hash @buildLanguages() + renderScrollbar() #@$('.antiscroll-wrap').antiscroll() # not yet, buggy afterRender: -> diff --git a/app/views/play/level/tome/spell_palette_view.coffee b/app/views/play/level/tome/spell_palette_view.coffee index 3a1056733..776c28f53 100644 --- a/app/views/play/level/tome/spell_palette_view.coffee +++ b/app/views/play/level/tome/spell_palette_view.coffee @@ -39,6 +39,7 @@ module.exports = class SpellPaletteView extends View for entry in entryColumn col.append entry.el entry.render() # Render after appending so that we can access parent container for popover + $('.nano').nanoScroller() createPalette: -> lcs = @supermodel.getModels LevelComponent diff --git a/app/views/play/level/tome/spell_view.coffee b/app/views/play/level/tome/spell_view.coffee index 4b08efaac..434c1def5 100644 --- a/app/views/play/level/tome/spell_view.coffee +++ b/app/views/play/level/tome/spell_view.coffee @@ -77,7 +77,7 @@ module.exports = class SpellView extends View @ace.setShowPrintMargin false @ace.setShowInvisibles aceConfig.invisibles @ace.setBehavioursEnabled aceConfig.behaviors - @ace.setAnimatedScroll true + @ace.setAnimatedScroll true @ace.setKeyboardHandler @keyBindings[aceConfig.keyBindings ? 'default'] @toggleControls null, @writable @aceSession.selection.on 'changeCursor', @onCursorActivity diff --git a/app/views/play_view.coffee b/app/views/play_view.coffee index 6ca2df50f..ab2a81d4e 100644 --- a/app/views/play_view.coffee +++ b/app/views/play_view.coffee @@ -198,3 +198,4 @@ module.exports = class PlayView extends View super() @$el.find('.modal').on 'shown.bs.modal', -> $('input:visible:first', @).focus() + diff --git a/config.coffee b/config.coffee index f64a3d7ac..8e38bca55 100644 --- a/config.coffee +++ b/config.coffee @@ -71,7 +71,10 @@ exports.config = joinTo: 'stylesheets/app.css': /^(app|vendor)/ order: - before: ['app/styles/bootstrap.scss'] + before: [ + 'app/styles/bootstrap.scss' + 'app/styles/nanoscroller.scss' + ] templates: defaultExtension: 'jade' joinTo: 'javascripts/app.js' diff --git a/vendor/scripts/antiscroll.js b/vendor/scripts/antiscroll.js deleted file mode 100644 index 2de1812d6..000000000 --- a/vendor/scripts/antiscroll.js +++ /dev/null @@ -1,471 +0,0 @@ -(function ($) { - - /** - * Augment jQuery prototype. - */ - - $.fn.antiscroll = function (options) { - return this.each(function () { - if ($(this).data('antiscroll')) { - $(this).data('antiscroll').destroy(); - } - - $(this).data('antiscroll', new $.Antiscroll(this, options)); - }); - }; - - /** - * Expose constructor. - */ - - $.Antiscroll = Antiscroll; - - /** - * Antiscroll pane constructor. - * - * @param {Element|jQuery} main pane - * @parma {Object} options - * @api public - */ - - function Antiscroll (el, opts) { - this.el = $(el); - this.options = opts || {}; - - this.x = (false !== this.options.x) || this.options.forceHorizontal; - this.y = (false !== this.options.y) || this.options.forceVertical; - this.autoHide = false !== this.options.autoHide; - this.padding = undefined == this.options.padding ? 2 : this.options.padding; - - this.inner = this.el.find('.antiscroll-inner'); - this.inner.css({ - 'width': '+=' + (this.y ? scrollbarSize() : 0) - , 'height': '+=' + (this.x ? scrollbarSize() : 0) - }); - - this.refresh(); - }; - - /** - * refresh scrollbars - * - * @api public - */ - - Antiscroll.prototype.refresh = function() { - var needHScroll = this.inner.get(0).scrollWidth > this.el.width() + (this.y ? scrollbarSize() : 0), - needVScroll = this.inner.get(0).scrollHeight > this.el.height() + (this.x ? scrollbarSize() : 0); - - if (this.x) { - if (!this.horizontal && needHScroll) { - this.horizontal = new Scrollbar.Horizontal(this); - } else if (this.horizontal && !needHScroll) { - this.horizontal.destroy(); - this.horizontal = null; - } else if (this.horizontal) { - this.horizontal.update(); - } - } - - if (this.y) { - if (!this.vertical && needVScroll) { - this.vertical = new Scrollbar.Vertical(this); - } else if (this.vertical && !needVScroll) { - this.vertical.destroy(); - this.vertical = null; - } else if (this.vertical) { - this.vertical.update(); - } - } - }; - - /** - * Cleans up. - * - * @return {Antiscroll} for chaining - * @api public - */ - - Antiscroll.prototype.destroy = function () { - if (this.horizontal) { - this.horizontal.destroy(); - this.horizontal = null - } - if (this.vertical) { - this.vertical.destroy(); - this.vertical = null - } - return this; - }; - - /** - * Rebuild Antiscroll. - * - * @return {Antiscroll} for chaining - * @api public - */ - - Antiscroll.prototype.rebuild = function () { - this.destroy(); - this.inner.attr('style', ''); - Antiscroll.call(this, this.el, this.options); - return this; - }; - - /** - * Scrollbar constructor. - * - * @param {Element|jQuery} element - * @api public - */ - - function Scrollbar (pane) { - this.pane = pane; - this.pane.el.append(this.el); - this.innerEl = this.pane.inner.get(0); - - this.dragging = false; - this.enter = false; - this.shown = false; - - // hovering - this.pane.el.mouseenter($.proxy(this, 'mouseenter')); - this.pane.el.mouseleave($.proxy(this, 'mouseleave')); - - // dragging - this.el.mousedown($.proxy(this, 'mousedown')); - - // scrolling - this.innerPaneScrollListener = $.proxy(this, 'scroll'); - this.pane.inner.scroll(this.innerPaneScrollListener); - - // wheel -optional- - this.innerPaneMouseWheelListener = $.proxy(this, 'mousewheel'); - this.pane.inner.bind('mousewheel', this.innerPaneMouseWheelListener); - - // show - var initialDisplay = this.pane.options.initialDisplay; - - if (initialDisplay !== false) { - this.show(); - if (this.pane.autoHide) { - this.hiding = setTimeout($.proxy(this, 'hide'), parseInt(initialDisplay, 10) || 3000); - } - } - }; - - /** - * Cleans up. - * - * @return {Scrollbar} for chaining - * @api public - */ - - Scrollbar.prototype.destroy = function () { - this.el.remove(); - this.pane.inner.unbind('scroll', this.innerPaneScrollListener); - this.pane.inner.unbind('mousewheel', this.innerPaneMouseWheelListener); - return this; - }; - - /** - * Called upon mouseenter. - * - * @api private - */ - - Scrollbar.prototype.mouseenter = function () { - this.enter = true; - this.show(); - }; - - /** - * Called upon mouseleave. - * - * @api private - */ - - Scrollbar.prototype.mouseleave = function () { - this.enter = false; - - if (!this.dragging) { - if (this.pane.autoHide) { - this.hide(); - } - } - }; - - /** - * Called upon wrap scroll. - * - * @api private - */ - - Scrollbar.prototype.scroll = function () { - if (!this.shown) { - this.show(); - if (!this.enter && !this.dragging) { - if (this.pane.autoHide) { - this.hiding = setTimeout($.proxy(this, 'hide'), 1500); - } - } - } - - this.update(); - }; - - /** - * Called upon scrollbar mousedown. - * - * @api private - */ - - Scrollbar.prototype.mousedown = function (ev) { - ev.preventDefault(); - - this.dragging = true; - - this.startPageY = ev.pageY - parseInt(this.el.css('top'), 10); - this.startPageX = ev.pageX - parseInt(this.el.css('left'), 10); - - // prevent crazy selections on IE - this.el[0].ownerDocument.onselectstart = function () { return false; }; - - var pane = this.pane, - move = $.proxy(this, 'mousemove'), - self = this - - $(this.el[0].ownerDocument) - .mousemove(move) - .mouseup(function () { - self.dragging = false; - this.onselectstart = null; - - $(this).unbind('mousemove', move); - - if (!self.enter) { - self.hide(); - } - }); - }; - - /** - * Show scrollbar. - * - * @api private - */ - - Scrollbar.prototype.show = function (duration) { - if (!this.shown && this.update()) { - this.el.addClass('antiscroll-scrollbar-shown'); - if (this.hiding) { - clearTimeout(this.hiding); - this.hiding = null; - } - this.shown = true; - } - }; - - /** - * Hide scrollbar. - * - * @api private - */ - - Scrollbar.prototype.hide = function () { - if (this.pane.autoHide !== false && this.shown) { - // check for dragging - this.el.removeClass('antiscroll-scrollbar-shown'); - this.shown = false; - } - }; - - /** - * Horizontal scrollbar constructor - * - * @api private - */ - - Scrollbar.Horizontal = function (pane) { - this.el = $('
', pane.el); - Scrollbar.call(this, pane); - }; - - /** - * Inherits from Scrollbar. - */ - - inherits(Scrollbar.Horizontal, Scrollbar); - - /** - * Updates size/position of scrollbar. - * - * @api private - */ - - Scrollbar.Horizontal.prototype.update = function () { - var paneWidth = this.pane.el.width(), - trackWidth = paneWidth - this.pane.padding * 2, - innerEl = this.pane.inner.get(0) - - this.el - .css('width', trackWidth * paneWidth / innerEl.scrollWidth) - .css('left', trackWidth * innerEl.scrollLeft / innerEl.scrollWidth); - - return paneWidth < innerEl.scrollWidth; - }; - - /** - * Called upon drag. - * - * @api private - */ - - Scrollbar.Horizontal.prototype.mousemove = function (ev) { - var trackWidth = this.pane.el.width() - this.pane.padding * 2, - pos = ev.pageX - this.startPageX, - barWidth = this.el.width(), - innerEl = this.pane.inner.get(0) - - // minimum top is 0, maximum is the track height - var y = Math.min(Math.max(pos, 0), trackWidth - barWidth); - - innerEl.scrollLeft = (innerEl.scrollWidth - this.pane.el.width()) - * y / (trackWidth - barWidth); - }; - - /** - * Called upon container mousewheel. - * - * @api private - */ - - Scrollbar.Horizontal.prototype.mousewheel = function (ev, delta, x, y) { - if ((x < 0 && 0 == this.pane.inner.get(0).scrollLeft) || - (x > 0 && (this.innerEl.scrollLeft + Math.ceil(this.pane.el.width()) - == this.innerEl.scrollWidth))) { - ev.preventDefault(); - return false; - } - }; - - /** - * Vertical scrollbar constructor - * - * @api private - */ - - Scrollbar.Vertical = function (pane) { - this.el = $('
', pane.el); - Scrollbar.call(this, pane); - }; - - /** - * Inherits from Scrollbar. - */ - - inherits(Scrollbar.Vertical, Scrollbar); - - /** - * Updates size/position of scrollbar. - * - * @api private - */ - - Scrollbar.Vertical.prototype.update = function () { - var paneHeight = this.pane.el.height(), - trackHeight = paneHeight - this.pane.padding * 2, - innerEl = this.innerEl; - - var scrollbarHeight = trackHeight * paneHeight / innerEl.scrollHeight; - scrollbarHeight = scrollbarHeight < 20 ? 20 : scrollbarHeight; - - var topPos = trackHeight * innerEl.scrollTop / innerEl.scrollHeight; - - if((topPos + scrollbarHeight) > trackHeight) { - var diff = (topPos + scrollbarHeight) - trackHeight; - topPos = topPos - diff - 3; - } - - this.el - .css('height', scrollbarHeight) - .css('top', topPos); - - return paneHeight < innerEl.scrollHeight; - }; - - /** - * Called upon drag. - * - * @api private - */ - - Scrollbar.Vertical.prototype.mousemove = function (ev) { - var paneHeight = this.pane.el.height(), - trackHeight = paneHeight - this.pane.padding * 2, - pos = ev.pageY - this.startPageY, - barHeight = this.el.height(), - innerEl = this.innerEl - - // minimum top is 0, maximum is the track height - var y = Math.min(Math.max(pos, 0), trackHeight - barHeight); - - innerEl.scrollTop = (innerEl.scrollHeight - paneHeight) - * y / (trackHeight - barHeight); - }; - - /** - * Called upon container mousewheel. - * - * @api private - */ - - Scrollbar.Vertical.prototype.mousewheel = function (ev, delta, x, y) { - if ((y > 0 && 0 == this.innerEl.scrollTop) || - (y < 0 && (this.innerEl.scrollTop + Math.ceil(this.pane.el.height()) - == this.innerEl.scrollHeight))) { - ev.preventDefault(); - return false; - } - }; - - /** - * Cross-browser inheritance. - * - * @param {Function} constructor - * @param {Function} constructor we inherit from - * @api private - */ - - function inherits (ctorA, ctorB) { - function f() {}; - f.prototype = ctorB.prototype; - ctorA.prototype = new f; - }; - - /** - * Scrollbar size detection. - */ - - var size; - - function scrollbarSize () { - if (size === undefined) { - var div = $( - '
' - + '
' - ); - - $('body').append(div); - var w1 = $(div).innerWidth(); - var w2 = $('div', div).innerWidth(); - $(div).remove(); - - size = w1 - w2; - } - - return size; - }; - -})(jQuery); diff --git a/vendor/scripts/jquery.nanoscroller.min.js b/vendor/scripts/jquery.nanoscroller.min.js new file mode 100644 index 000000000..0e42f7645 --- /dev/null +++ b/vendor/scripts/jquery.nanoscroller.min.js @@ -0,0 +1,4 @@ +/*! nanoScrollerJS - v0.8.0 - (c) 2014 James Florentino; Licensed MIT */ + +!function(a,b,c){"use strict";var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F;x={paneClass:"nano-pane",sliderClass:"nano-slider",contentClass:"nano-content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},s="scrollbar",r="scroll",k="mousedown",l="mousemove",n="mousewheel",m="mouseup",q="resize",h="drag",u="up",p="panedown",f="DOMMouseScroll",g="down",v="wheel",i="keydown",j="keyup",t="touchmove",d="Microsoft Internet Explorer"===b.navigator.appName&&/msie 7./i.test(b.navigator.appVersion)&&b.ActiveXObject,e=null,B=b.requestAnimationFrame,w=b.cancelAnimationFrame,D=c.createElement("div").style,F=function(){var a,b,c,d,e,f;for(d=["t","webkitT","MozT","msT","OT"],a=e=0,f=d.length;f>e;a=++e)if(c=d[a],b=d[a]+"ransform",b in D)return d[a].substr(0,d[a].length-1);return!1}(),E=function(a){return F===!1?!1:""===F?a:F+a.charAt(0).toUpperCase()+a.substr(1)},C=E("transform"),z=C!==!1,y=function(){var a,b,d;return a=c.createElement("div"),b=a.style,b.position="absolute",b.width="100px",b.height="100px",b.overflow=r,b.top="-9999px",c.body.appendChild(a),d=a.offsetWidth-a.clientWidth,c.body.removeChild(a),d},A=function(){var a,c,d;return c=b.navigator.userAgent,(a=/(?=.+Mac OS X)(?=.+Firefox)/.test(c))?(d=/Firefox\/\d{2}\./.exec(c),d&&(d=d[0].replace(/\D+/g,"")),a&&+d>23):!1},o=function(){function i(d,f){this.el=d,this.options=f,e||(e=y()),this.$el=a(this.el),this.doc=a(this.options.documentContext||c),this.win=a(this.options.windowContext||b),this.$content=this.$el.children("."+f.contentClass),this.$content.attr("tabindex",this.options.tabIndex||0),this.content=this.$content[0],this.options.iOSNativeScrolling&&null!=this.el.style.WebkitOverflowScrolling?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return i.prototype.preventScrolling=function(a,b){if(this.isActive)if(a.type===f)(b===g&&a.originalEvent.detail>0||b===u&&a.originalEvent.detail<0)&&a.preventDefault();else if(a.type===n){if(!a.originalEvent||!a.originalEvent.wheelDelta)return;(b===g&&a.originalEvent.wheelDelta<0||b===u&&a.originalEvent.wheelDelta>0)&&a.preventDefault()}},i.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},i.prototype.updateScrollValues=function(){var a;a=this.content,this.maxScrollTop=a.scrollHeight-a.clientHeight,this.prevScrollTop=this.contentScrollTop||0,this.contentScrollTop=a.scrollTop,this.iOSNativeScrolling||(this.maxSliderTop=this.paneHeight-this.sliderHeight,this.sliderTop=0===this.maxScrollTop?0:this.contentScrollTop*this.maxSliderTop/this.maxScrollTop)},i.prototype.setOnScrollStyles=function(){var a;z?(a={},a[C]="translate(0, "+this.sliderTop+"px)"):a={top:this.sliderTop},B?this.scrollRAF||(this.scrollRAF=B(function(b){return function(){b.scrollRAF=null,b.slider.css(a)}}(this))):this.slider.css(a)},i.prototype.createEvents=function(){this.events={down:function(a){return function(b){return a.isBeingDragged=!0,a.offsetY=b.pageY-a.slider.offset().top,a.pane.addClass("active"),a.doc.bind(l,a.events[h]).bind(m,a.events[u]),!1}}(this),drag:function(a){return function(b){return a.sliderY=b.pageY-a.$el.offset().top-a.offsetY,a.scroll(),a.contentScrollTop>=a.maxScrollTop&&a.prevScrollTop!==a.maxScrollTop?a.$el.trigger("scrollend"):0===a.contentScrollTop&&0!==a.prevScrollTop&&a.$el.trigger("scrolltop"),!1}}(this),up:function(a){return function(){return a.isBeingDragged=!1,a.pane.removeClass("active"),a.doc.unbind(l,a.events[h]).unbind(m,a.events[u]),!1}}(this),resize:function(a){return function(){a.reset()}}(this),panedown:function(a){return function(b){return a.sliderY=(b.offsetY||b.originalEvent.layerY)-.5*a.sliderHeight,a.scroll(),a.events.down(b),!1}}(this),scroll:function(a){return function(b){a.updateScrollValues(),a.isBeingDragged||(a.iOSNativeScrolling||(a.sliderY=a.sliderTop,a.setOnScrollStyles()),null!=b&&(a.contentScrollTop>=a.maxScrollTop?(a.options.preventPageScrolling&&a.preventScrolling(b,g),a.prevScrollTop!==a.maxScrollTop&&a.$el.trigger("scrollend")):0===a.contentScrollTop&&(a.options.preventPageScrolling&&a.preventScrolling(b,u),0!==a.prevScrollTop&&a.$el.trigger("scrolltop"))))}}(this),wheel:function(a){return function(b){var c;if(null!=b)return c=b.delta||b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.detail||b.originalEvent&&-b.originalEvent.detail,c&&(a.sliderY+=-c/3),a.scroll(),!1}}(this)}},i.prototype.addEvents=function(){var a;this.removeEvents(),a=this.events,this.options.disableResize||this.win.bind(q,a[q]),this.iOSNativeScrolling||(this.slider.bind(k,a[g]),this.pane.bind(k,a[p]).bind(""+n+" "+f,a[v])),this.$content.bind(""+r+" "+n+" "+f+" "+t,a[r])},i.prototype.removeEvents=function(){var a;a=this.events,this.win.unbind(q,a[q]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+r+" "+n+" "+f+" "+t,a[r])},i.prototype.generate=function(){var a,c,d,f,g,h;return f=this.options,g=f.paneClass,h=f.sliderClass,a=f.contentClass,this.$el.find("."+g).length||this.$el.find("."+h).length||this.$el.append('
'),this.pane=this.$el.children("."+g),this.slider=this.pane.find("."+h),0===e&&A()?(d=b.getComputedStyle(this.content,null).getPropertyValue("padding-right").replace(/\D+/g,""),c={right:-14,paddingRight:+d+14}):e&&(c={right:-e},this.$el.addClass("has-scrollbar")),null!=c&&this.$content.css(c),this},i.prototype.restore=function(){this.stopped=!1,this.iOSNativeScrolling||this.pane.show(),this.addEvents()},i.prototype.reset=function(){var a,b,c,f,g,h,i,j,k,l,m,n;return this.iOSNativeScrolling?void(this.contentHeight=this.content.scrollHeight):(this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(),a=this.content,f=a.style,g=f.overflowY,d&&this.$content.css({height:this.$content.height()}),b=a.scrollHeight+e,l=parseInt(this.$el.css("max-height"),10),l>0&&(this.$el.height(""),this.$el.height(a.scrollHeight>l?l:a.scrollHeight)),i=this.pane.outerHeight(!1),k=parseInt(this.pane.css("top"),10),h=parseInt(this.pane.css("bottom"),10),j=i+k+h,n=Math.round(j/b*j),nthis.options.sliderMaxHeight&&(n=this.options.sliderMaxHeight),g===r&&f.overflowX!==r&&(n+=e),this.maxSliderTop=j-n,this.contentHeight=b,this.paneHeight=i,this.paneOuterHeight=j,this.sliderHeight=n,this.slider.height(n),this.events.scroll(),this.pane.show(),this.isActive=!0,a.scrollHeight===a.clientHeight||this.pane.outerHeight(!0)>=a.scrollHeight&&g!==r?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===a.scrollHeight&&g===r?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),c=this.$content.css("position"),("static"===c||"relative"===c)&&(m=parseInt(this.$content.css("right"),10),m&&this.$content.css({right:"",marginRight:m})),this)},i.prototype.scroll=function(){return this.isActive?(this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop((this.paneHeight-this.contentHeight+e)*this.sliderY/this.maxSliderTop*-1),this.iOSNativeScrolling||(this.updateScrollValues(),this.setOnScrollStyles()),this):void 0},i.prototype.scrollBottom=function(a){return this.isActive?(this.$content.scrollTop(this.contentHeight-this.$content.height()-a).trigger(n),this.stop().restore(),this):void 0},i.prototype.scrollTop=function(a){return this.isActive?(this.$content.scrollTop(+a).trigger(n),this.stop().restore(),this):void 0},i.prototype.scrollTo=function(a){return this.isActive?(this.scrollTop(this.$el.find(a).get(0).offsetTop),this):void 0},i.prototype.stop=function(){return w&&this.scrollRAF&&(w(this.scrollRAF),this.scrollRAF=null),this.stopped=!0,this.removeEvents(),this.iOSNativeScrolling||this.pane.hide(),this},i.prototype.destroy=function(){return this.stopped||this.stop(),!this.iOSNativeScrolling&&this.pane.length&&this.pane.remove(),d&&this.$content.height(""),this.$content.removeAttr("tabindex"),this.$el.hasClass("has-scrollbar")&&(this.$el.removeClass("has-scrollbar"),this.$content.css({right:""})),this},i.prototype.flash=function(){return!this.iOSNativeScrolling&&this.isActive?(this.reset(),this.pane.addClass("flashed"),setTimeout(function(a){return function(){a.pane.removeClass("flashed")}}(this),this.options.flashDelay),this):void 0},i}(),a.fn.nanoScroller=function(b){return this.each(function(){var c,d;if((d=this.nanoscroller)||(c=a.extend({},x,b),this.nanoscroller=d=new o(this,c)),b&&"object"==typeof b){if(a.extend(d.options,b),null!=b.scrollBottom)return d.scrollBottom(b.scrollBottom);if(null!=b.scrollTop)return d.scrollTop(b.scrollTop);if(b.scrollTo)return d.scrollTo(b.scrollTo);if("bottom"===b.scroll)return d.scrollBottom(0);if("top"===b.scroll)return d.scrollTop(0);if(b.scroll&&b.scroll instanceof a)return d.scrollTo(b.scroll);if(b.stop)return d.stop();if(b.destroy)return d.destroy();if(b.flash)return d.flash()}return d.reset()})},a.fn.nanoScroller.Constructor=o}(jQuery,window,document); +//# sourceMappingURL=jquery.nanoscroller.min.map \ No newline at end of file From 1c3117836fbb3a838e7e7fd95199af125b5b4923 Mon Sep 17 00:00:00 2001 From: Aditya Raisinghani Date: Fri, 4 Apr 2014 00:13:09 +0530 Subject: [PATCH 007/665] Shifted nanoscroller to vendor. --- app/views/kinds/CocoView.coffee | 3 +++ app/views/kinds/ModalView.coffee | 3 --- config.coffee | 2 +- {app => vendor}/styles/nanoscroller.scss | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename {app => vendor}/styles/nanoscroller.scss (100%) diff --git a/app/views/kinds/CocoView.coffee b/app/views/kinds/CocoView.coffee index b95abd12e..99bf08a6a 100644 --- a/app/views/kinds/CocoView.coffee +++ b/app/views/kinds/CocoView.coffee @@ -114,6 +114,9 @@ module.exports = class CocoView extends Backbone.View $('#modal-wrapper .modal').modal(modalOptions).on 'hidden.bs.modal', @modalClosed window.currentModal = modalView @getRootView().stopListeningToShortcuts(true) + setTimeout -> + $('.modal').nanoScroller({contentClass:'modal-dialog'}) + , 1000 modalClosed: => visibleModal.willDisappear() if visibleModal diff --git a/app/views/kinds/ModalView.coffee b/app/views/kinds/ModalView.coffee index e6e4c777b..5222df067 100644 --- a/app/views/kinds/ModalView.coffee +++ b/app/views/kinds/ModalView.coffee @@ -37,9 +37,6 @@ module.exports = class ModalView extends CocoView # This makes sure if you press enter right after opening the players guide, # it doesn't just reopen the modal. $(document.activeElement).blur() - setTimeout -> - $('.modal').nanoScroller({contentClass:'modal-dialog'}) - , 1000 showLoading: ($el) -> $el = @$el.find('.modal-body') unless $el diff --git a/config.coffee b/config.coffee index 8e38bca55..fafa2c855 100644 --- a/config.coffee +++ b/config.coffee @@ -73,7 +73,7 @@ exports.config = order: before: [ 'app/styles/bootstrap.scss' - 'app/styles/nanoscroller.scss' + 'vendor/styles/nanoscroller.scss' ] templates: defaultExtension: 'jade' diff --git a/app/styles/nanoscroller.scss b/vendor/styles/nanoscroller.scss similarity index 100% rename from app/styles/nanoscroller.scss rename to vendor/styles/nanoscroller.scss From eca934d6a56182272694da9e29fe6b788e33143c Mon Sep 17 00:00:00 2001 From: Digot Date: Thu, 3 Apr 2014 21:58:12 +0200 Subject: [PATCH 008/665] Update de.coffee --- app/locale/de.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/locale/de.coffee b/app/locale/de.coffee index d451d6528..5c84e7c57 100644 --- a/app/locale/de.coffee +++ b/app/locale/de.coffee @@ -264,8 +264,8 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra tip_patience: "Geduld du musst haben, junger Padawan. - Yoda" tip_documented_bug: "Ein dokumentierter Fehler ist kein Fehler; er ist ein Merkmal." tip_impossible: "Es wirkt immer unmöglich bis es vollbracht ist. - Nelson Mandela" -# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" -# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" + tip_talk_is_cheap: "Reden ist billig. Zeig mir den Code. - Linus Torvalds" + tip_first_language: "Das schwierigste, das du jemals lernen wirst, ist die erste Programmiersprache. - Alan Kay" time_current: "Aktuell" time_total: "Total" time_goto: "Gehe zu" From 3fba1123f330337c2be26af5845561c1a43e99f6 Mon Sep 17 00:00:00 2001 From: Ting-Kuan Date: Fri, 4 Apr 2014 12:49:39 -0400 Subject: [PATCH 009/665] no message --- .gitignore | 80 --------------------------- vendor/scripts/notify-combined.min.js | 5 ++ 2 files changed, 5 insertions(+), 80 deletions(-) delete mode 100644 .gitignore create mode 100644 vendor/scripts/notify-combined.min.js diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ba0802aa6..000000000 --- a/.gitignore +++ /dev/null @@ -1,80 +0,0 @@ -### If you add something here, copy it to the end of .npmignore, too. ### - -# Python -*.pyc -*.pyo - -# OS X -.DS_Store -Icon? -._* -.Spotlight-V100 -.Trashes - -# Windows -Thumbs.db - -# Emacs -*.*~ -*.# -.#* -*# - -# Vim -.*.sw[a-z] -*.un~i - -# Sublime -*.sublime-project -*.sublime-workspace - -# NPM packages folder. -node_modules/ -bower_components/ - -# Some other random stuff -always-ignore extensions -*.diff -*.err -*.orig -*.log -*.rej -*.vi -*.sass-cache - -# OS or Editor folders -.cache -.project -.settings -.tmproj -.idea -nbproject - -# Brunch folder for temporary files. -tmp/ - -# Brunch output -public/ - -# Redis? -dump.rdb - -# Mongo -mongo/ - -# Karma coverage -coverage/ - -# Floo -.floo -FLOOBITS_README.md - -# mongodb -db/ -bin/node/ -bin/mongo/ - -# windows -/SCOCODE.bat - -### If you add something here, copy it to the end of .npmignore, too. ### diff --git a/vendor/scripts/notify-combined.min.js b/vendor/scripts/notify-combined.min.js new file mode 100644 index 000000000..bafa7af50 --- /dev/null +++ b/vendor/scripts/notify-combined.min.js @@ -0,0 +1,5 @@ +/** Notify.js - v0.3.1 - 2014/02/06 + * http://notifyjs.com/ + * Copyright (c) 2014 Jaime Pillora - MIT + */ +(function(t,i,n,e){"use strict";var o,r,s,a,l,h,c,p,u,d,f,A,m,w,g,y,b,v,x,C,S,E,M,k,H,D,F,T=[].indexOf||function(t){for(var i=0,n=this.length;n>i;i++)if(i in this&&this[i]===t)return i;return-1};S="notify",C=S+"js",s=S+"!blank",M={t:"top",m:"middle",b:"bottom",l:"left",c:"center",r:"right"},m=["l","c","r"],F=["t","m","b"],b=["t","b","l","r"],v={t:"b",m:null,b:"t",l:"r",c:null,r:"l"},x=function(t){var i;return i=[],n.each(t.split(/\W+/),function(t,n){var o;return o=n.toLowerCase().charAt(0),M[o]?i.push(o):e}),i},D={},a={name:"core",html:'
\n
\n
\n
',css:"."+C+"-corner {\n position: fixed;\n margin: 5px;\n z-index: 1050;\n}\n\n."+C+"-corner ."+C+"-wrapper,\n."+C+"-corner ."+C+"-container {\n position: relative;\n display: block;\n height: inherit;\n width: inherit;\n margin: 3px;\n}\n\n."+C+"-wrapper {\n z-index: 1;\n position: absolute;\n display: inline-block;\n height: 0;\n width: 0;\n}\n\n."+C+"-container {\n display: none;\n z-index: 1;\n position: absolute;\n cursor: pointer;\n}\n\n[data-notify-text],[data-notify-html] {\n position: relative;\n}\n\n."+C+"-arrow {\n position: absolute;\n z-index: 2;\n width: 0;\n height: 0;\n}"},H={"border-radius":["-webkit-","-moz-"]},f=function(t){return D[t]},r=function(i,e){var o,r,s,a;if(!i)throw"Missing Style name";if(!e)throw"Missing Style definition";if(!e.html)throw"Missing Style HTML";return(null!=(a=D[i])?a.cssElem:void 0)&&(t.console&&console.warn(""+S+": overwriting style '"+i+"'"),D[i].cssElem.remove()),e.name=i,D[i]=e,o="",e.classes&&n.each(e.classes,function(t,i){return o+="."+C+"-"+e.name+"-"+t+" {\n",n.each(i,function(t,i){return H[t]&&n.each(H[t],function(n,e){return o+=" "+e+t+": "+i+";\n"}),o+=" "+t+": "+i+";\n"}),o+="}\n"}),e.css&&(o+="/* styles for "+e.name+" */\n"+e.css),o&&(e.cssElem=y(o),e.cssElem.attr("id","notify-"+e.name)),s={},r=n(e.html),u("html",r,s),u("text",r,s),e.fields=s},y=function(t){var i;i=l("style"),i.attr("type","text/css"),n("head").append(i);try{i.html(t)}catch(e){i[0].styleSheet.cssText=t}return i},u=function(t,i,e){var o;return"html"!==t&&(t="text"),o="data-notify-"+t,p(i,"["+o+"]").each(function(){var i;return i=n(this).attr(o),i||(i=s),e[i]=t})},p=function(t,i){return t.is(i)?t:t.find(i)},E={clickToHide:!0,autoHide:!0,autoHideDelay:5e3,arrowShow:!0,arrowSize:5,breakNewLines:!0,elementPosition:"bottom",globalPosition:"top right",style:"bootstrap",className:"error",showAnimation:"slideDown",showDuration:400,hideAnimation:"slideUp",hideDuration:200,gap:5},g=function(t,i){var e;return e=function(){},e.prototype=t,n.extend(!0,new e,i)},h=function(t){return n.extend(E,t)},l=function(t){return n("<"+t+">")},A={},d=function(t){var i;return t.is("[type=radio]")&&(i=t.parents("form:first").find("[type=radio]").filter(function(i,e){return n(e).attr("name")===t.attr("name")}),t=i.first()),t},w=function(t,i,n){var o,r;if("string"==typeof n)n=parseInt(n,10);else if("number"!=typeof n)return;if(!isNaN(n))return o=M[v[i.charAt(0)]],r=i,t[o]!==e&&(i=M[o.charAt(0)],n=-n),t[i]===e?t[i]=n:t[i]+=n,null},k=function(t,i,n){if("l"===t||"t"===t)return 0;if("c"===t||"m"===t)return n/2-i/2;if("r"===t||"b"===t)return n-i;throw"Invalid alignment"},c=function(t){return c.e=c.e||l("div"),c.e.text(t).html()},o=function(){function t(t,i,e){"string"==typeof e&&(e={className:e}),this.options=g(E,n.isPlainObject(e)?e:{}),this.loadHTML(),this.wrapper=n(a.html),this.wrapper.data(C,this),this.arrow=this.wrapper.find("."+C+"-arrow"),this.container=this.wrapper.find("."+C+"-container"),this.container.append(this.userContainer),t&&t.length&&(this.elementType=t.attr("type"),this.originalElement=t,this.elem=d(t),this.elem.data(C,this),this.elem.before(this.wrapper)),this.container.hide(),this.run(i)}return t.prototype.loadHTML=function(){var t;return t=this.getStyle(),this.userContainer=n(t.html),this.userFields=t.fields},t.prototype.show=function(t,i){var n,o,r,s,a,l=this;if(o=function(){return t||l.elem||l.destroy(),i?i():e},a=this.container.parent().parents(":hidden").length>0,r=this.container.add(this.arrow),n=[],a&&t)s="show";else if(a&&!t)s="hide";else if(!a&&t)s=this.options.showAnimation,n.push(this.options.showDuration);else{if(a||t)return o();s=this.options.hideAnimation,n.push(this.options.hideDuration)}return n.push(o),r[s].apply(r,n)},t.prototype.setGlobalPosition=function(){var t,i,e,o,r,s,a,h;return h=this.getPosition(),a=h[0],s=h[1],r=M[a],t=M[s],o=a+"|"+s,i=A[o],i||(i=A[o]=l("div"),e={},e[r]=0,"middle"===t?e.top="45%":"center"===t?e.left="45%":e[t]=0,i.css(e).addClass(""+C+"-corner"),n("body").append(i)),i.prepend(this.wrapper)},t.prototype.setElementPosition=function(){var t,i,o,r,s,a,l,h,c,p,u,d,f,A,g,y,x,C,S,E,H,D,z,Q,B,R,N,P,U;for(z=this.getPosition(),E=z[0],C=z[1],S=z[2],u=this.elem.position(),h=this.elem.outerHeight(),d=this.elem.outerWidth(),c=this.elem.innerHeight(),p=this.elem.innerWidth(),Q=this.wrapper.position(),s=this.container.height(),a=this.container.width(),A=M[E],y=v[E],x=M[y],l={},l[x]="b"===E?h:"r"===E?d:0,w(l,"top",u.top-Q.top),w(l,"left",u.left-Q.left),U=["top","left"],B=0,N=U.length;N>B;B++)H=U[B],g=parseInt(this.elem.css("margin-"+H),10),g&&w(l,H,g);if(f=Math.max(0,this.options.gap-(this.options.arrowShow?o:0)),w(l,x,f),this.options.arrowShow){for(o=this.options.arrowSize,i=n.extend({},l),t=this.userContainer.css("border-color")||this.userContainer.css("background-color")||"white",R=0,P=b.length;P>R;R++)H=b[R],D=M[H],H!==y&&(r=D===A?t:"transparent",i["border-"+D]=""+o+"px solid "+r);w(l,M[y],o),T.call(b,C)>=0&&w(i,M[C],2*o)}else this.arrow.hide();return T.call(F,E)>=0?(w(l,"left",k(C,a,d)),i&&w(i,"left",k(C,o,p))):T.call(m,E)>=0&&(w(l,"top",k(C,s,h)),i&&w(i,"top",k(C,o,c))),this.container.is(":visible")&&(l.display="block"),this.container.removeAttr("style").css(l),i?this.arrow.removeAttr("style").css(i):e},t.prototype.getPosition=function(){var t,i,n,e,o,r,s,a;if(i=this.options.position||(this.elem?this.options.elementPosition:this.options.globalPosition),t=x(i),0===t.length&&(t[0]="b"),n=t[0],0>T.call(b,n))throw"Must be one of ["+b+"]";return(1===t.length||(e=t[0],T.call(F,e)>=0&&(o=t[1],0>T.call(m,o)))||(r=t[0],T.call(m,r)>=0&&(s=t[1],0>T.call(F,s))))&&(t[1]=(a=t[0],T.call(m,a)>=0?"m":"l")),2===t.length&&(t[2]=t[1]),t},t.prototype.getStyle=function(t){var i;if(t||(t=this.options.style),t||(t="default"),i=D[t],!i)throw"Missing style: "+t;return i},t.prototype.updateClasses=function(){var t,i;return t=["base"],n.isArray(this.options.className)?t=t.concat(this.options.className):this.options.className&&t.push(this.options.className),i=this.getStyle(),t=n.map(t,function(t){return""+C+"-"+i.name+"-"+t}).join(" "),this.userContainer.attr("class",t)},t.prototype.run=function(t,i){var o,r,a,l,h,u=this;if(n.isPlainObject(i)?n.extend(this.options,i):"string"===n.type(i)&&(this.options.className=i),this.container&&!t)return this.show(!1),e;if(this.container||t){r={},n.isPlainObject(t)?r=t:r[s]=t;for(a in r)o=r[a],l=this.userFields[a],l&&("text"===l&&(o=c(o),this.options.breakNewLines&&(o=o.replace(/\n/g,"
"))),h=a===s?"":"="+a,p(this.userContainer,"[data-notify-"+l+h+"]").html(o));return this.updateClasses(),this.elem?this.setElementPosition():this.setGlobalPosition(),this.show(!0),this.options.autoHide?(clearTimeout(this.autohideTimer),this.autohideTimer=setTimeout(function(){return u.show(!1)},this.options.autoHideDelay)):e}},t.prototype.destroy=function(){return this.wrapper.remove()},t}(),n[S]=function(t,i,e){return t&&t.nodeName||t.jquery?n(t)[S](i,e):(e=i,i=t,new o(null,i,e)),t},n.fn[S]=function(t,i){return n(this).each(function(){var e;return e=d(n(this)).data(C),e?e.run(t,i):new o(n(this),t,i)}),this},n.extend(n[S],{defaults:h,addStyle:r,pluginOptions:E,getStyle:f,insertCSS:y}),n(function(){return y(a.css).attr("id","core-notify"),n(i).on("click notify-hide","."+C+"-wrapper",function(t){var i;return i=n(this).data(C),i&&(i.options.clickToHide||"notify-hide"===t.type)?i.show(!1):e})})})(window,document,jQuery),$.notify.addStyle("bootstrap",{html:"
\n\n
",classes:{base:{"font-weight":"bold",padding:"8px 15px 8px 14px","text-shadow":"0 1px 0 rgba(255, 255, 255, 0.5)","background-color":"#fcf8e3",border:"1px solid #fbeed5","border-radius":"4px","white-space":"nowrap","padding-left":"25px","background-repeat":"no-repeat","background-position":"3px 7px"},error:{color:"#B94A48","background-color":"#F2DEDE","border-color":"#EED3D7","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=)"},success:{color:"#468847","background-color":"#DFF0D8","border-color":"#D6E9C6","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNq0lctPE0Ecx38zu/RFS1EryqtgJFA08YCiMZIAQQ4eRG8eDGdPJiYeTIwHTfwPiAcvXIwXLwoXPaDxkWgQ6islKlJLSQWLUraPLTv7Gme32zoF9KSTfLO7v53vZ3d/M7/fIth+IO6INt2jjoA7bjHCJoAlzCRw59YwHYjBnfMPqAKWQYKjGkfCJqAF0xwZjipQtA3MxeSG87VhOOYegVrUCy7UZM9S6TLIdAamySTclZdYhFhRHloGYg7mgZv1Zzztvgud7V1tbQ2twYA34LJmF4p5dXF1KTufnE+SxeJtuCZNsLDCQU0+RyKTF27Unw101l8e6hns3u0PBalORVVVkcaEKBJDgV3+cGM4tKKmI+ohlIGnygKX00rSBfszz/n2uXv81wd6+rt1orsZCHRdr1Imk2F2Kob3hutSxW8thsd8AXNaln9D7CTfA6O+0UgkMuwVvEFFUbbAcrkcTA8+AtOk8E6KiQiDmMFSDqZItAzEVQviRkdDdaFgPp8HSZKAEAL5Qh7Sq2lIJBJwv2scUqkUnKoZgNhcDKhKg5aH+1IkcouCAdFGAQsuWZYhOjwFHQ96oagWgRoUov1T9kRBEODAwxM2QtEUl+Wp+Ln9VRo6BcMw4ErHRYjH4/B26AlQoQQTRdHWwcd9AH57+UAXddvDD37DmrBBV34WfqiXPl61g+vr6xA9zsGeM9gOdsNXkgpEtTwVvwOklXLKm6+/p5ezwk4B+j6droBs2CsGa/gNs6RIxazl4Tc25mpTgw/apPR1LYlNRFAzgsOxkyXYLIM1V8NMwyAkJSctD1eGVKiq5wWjSPdjmeTkiKvVW4f2YPHWl3GAVq6ymcyCTgovM3FzyRiDe2TaKcEKsLpJvNHjZgPNqEtyi6mZIm4SRFyLMUsONSSdkPeFtY1n0mczoY3BHTLhwPRy9/lzcziCw9ACI+yql0VLzcGAZbYSM5CCSZg1/9oc/nn7+i8N9p/8An4JMADxhH+xHfuiKwAAAABJRU5ErkJggg==)"},info:{color:"#3A87AD","background-color":"#D9EDF7","border-color":"#BCE8F1","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYFAhkSsdes/QAAA8dJREFUOMvVlGtMW2UYx//POaWHXg6lLaW0ypAtw1UCgbniNOLcVOLmAjHZolOYlxmTGXVZdAnRfXQm+7SoU4mXaOaiZsEpC9FkiQs6Z6bdCnNYruM6KNBw6YWewzl9z+sHImEWv+vz7XmT95f/+3/+7wP814v+efDOV3/SoX3lHAA+6ODeUFfMfjOWMADgdk+eEKz0pF7aQdMAcOKLLjrcVMVX3xdWN29/GhYP7SvnP0cWfS8caSkfHZsPE9Fgnt02JNutQ0QYHB2dDz9/pKX8QjjuO9xUxd/66HdxTeCHZ3rojQObGQBcuNjfplkD3b19Y/6MrimSaKgSMmpGU5WevmE/swa6Oy73tQHA0Rdr2Mmv/6A1n9w9suQ7097Z9lM4FlTgTDrzZTu4StXVfpiI48rVcUDM5cmEksrFnHxfpTtU/3BFQzCQF/2bYVoNbH7zmItbSoMj40JSzmMyX5qDvriA7QdrIIpA+3cdsMpu0nXI8cV0MtKXCPZev+gCEM1S2NHPvWfP/hL+7FSr3+0p5RBEyhEN5JCKYr8XnASMT0xBNyzQGQeI8fjsGD39RMPk7se2bd5ZtTyoFYXftF6y37gx7NeUtJJOTFlAHDZLDuILU3j3+H5oOrD3yWbIztugaAzgnBKJuBLpGfQrS8wO4FZgV+c1IxaLgWVU0tMLEETCos4xMzEIv9cJXQcyagIwigDGwJgOAtHAwAhisQUjy0ORGERiELgG4iakkzo4MYAxcM5hAMi1WWG1yYCJIcMUaBkVRLdGeSU2995TLWzcUAzONJ7J6FBVBYIggMzmFbvdBV44Corg8vjhzC+EJEl8U1kJtgYrhCzgc/vvTwXKSib1paRFVRVORDAJAsw5FuTaJEhWM2SHB3mOAlhkNxwuLzeJsGwqWzf5TFNdKgtY5qHp6ZFf67Y/sAVadCaVY5YACDDb3Oi4NIjLnWMw2QthCBIsVhsUTU9tvXsjeq9+X1d75/KEs4LNOfcdf/+HthMnvwxOD0wmHaXr7ZItn2wuH2SnBzbZAbPJwpPx+VQuzcm7dgRCB57a1uBzUDRL4bfnI0RE0eaXd9W89mpjqHZnUI5Hh2l2dkZZUhOqpi2qSmpOmZ64Tuu9qlz/SEXo6MEHa3wOip46F1n7633eekV8ds8Wxjn37Wl63VVa+ej5oeEZ/82ZBETJjpJ1Rbij2D3Z/1trXUvLsblCK0XfOx0SX2kMsn9dX+d+7Kf6h8o4AIykuffjT8L20LU+w4AZd5VvEPY+XpWqLV327HR7DzXuDnD8r+ovkBehJ8i+y8YAAAAASUVORK5CYII=)"},warn:{color:"#C09853","background-color":"#FCF8E3","border-color":"#FBEED5","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABJlBMVEXr6eb/2oD/wi7/xjr/0mP/ykf/tQD/vBj/3o7/uQ//vyL/twebhgD/4pzX1K3z8e349vK6tHCilCWbiQymn0jGworr6dXQza3HxcKkn1vWvV/5uRfk4dXZ1bD18+/52YebiAmyr5S9mhCzrWq5t6ufjRH54aLs0oS+qD751XqPhAybhwXsujG3sm+Zk0PTwG6Shg+PhhObhwOPgQL4zV2nlyrf27uLfgCPhRHu7OmLgAafkyiWkD3l49ibiAfTs0C+lgCniwD4sgDJxqOilzDWowWFfAH08uebig6qpFHBvH/aw26FfQTQzsvy8OyEfz20r3jAvaKbhgG9q0nc2LbZxXanoUu/u5WSggCtp1anpJKdmFz/zlX/1nGJiYmuq5Dx7+sAAADoPUZSAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfdBgUBGhh4aah5AAAAlklEQVQY02NgoBIIE8EUcwn1FkIXM1Tj5dDUQhPU502Mi7XXQxGz5uVIjGOJUUUW81HnYEyMi2HVcUOICQZzMMYmxrEyMylJwgUt5BljWRLjmJm4pI1hYp5SQLGYxDgmLnZOVxuooClIDKgXKMbN5ggV1ACLJcaBxNgcoiGCBiZwdWxOETBDrTyEFey0jYJ4eHjMGWgEAIpRFRCUt08qAAAAAElFTkSuQmCC)"}}}); \ No newline at end of file From fe27756b06c74783f6a40b45f9a46a488ab07e44 Mon Sep 17 00:00:00 2001 From: Ting-Kuan Date: Fri, 4 Apr 2014 12:52:22 -0400 Subject: [PATCH 010/665] Pull from upsatream. --- app/application.coffee | 4 +- app/assets/index.html | 166 --- app/initialize.coffee | 10 +- app/lib/FacebookHandler.coffee | 3 +- app/lib/GPlusHandler.coffee | 3 +- app/lib/Router.coffee | 2 - app/lib/auth.coffee | 65 +- app/lib/surface/CocoSprite.coffee | 11 +- app/lib/world/GoalManager.coffee | 14 +- app/lib/world/names.coffee | 17 + app/lib/world/thang.coffee | 2 +- app/lib/world/thang_state.coffee | 12 +- app/locale/ar.coffee | 10 +- app/locale/bg.coffee | 10 +- app/locale/ca.coffee | 10 +- app/locale/cs.coffee | 8 +- app/locale/da.coffee | 10 +- app/locale/de.coffee | 116 +- app/locale/el.coffee | 10 +- app/locale/en-AU.coffee | 10 +- app/locale/en-GB.coffee | 10 +- app/locale/en-US.coffee | 10 +- app/locale/en.coffee | 36 +- app/locale/es-419.coffee | 10 +- app/locale/es-ES.coffee | 36 +- app/locale/es.coffee | 10 +- app/locale/fa.coffee | 10 +- app/locale/fi.coffee | 10 +- app/locale/fr.coffee | 10 +- app/locale/he.coffee | 10 +- app/locale/hi.coffee | 10 +- app/locale/hu.coffee | 10 +- app/locale/id.coffee | 10 +- app/locale/it.coffee | 10 +- app/locale/ja.coffee | 10 +- app/locale/ko.coffee | 10 +- app/locale/lt.coffee | 10 +- app/locale/ms.coffee | 101 +- app/locale/nb.coffee | 10 +- app/locale/nl-BE.coffee | 224 ++-- app/locale/nl-NL.coffee | 224 ++-- app/locale/nl.coffee | 56 +- app/locale/nn.coffee | 10 +- app/locale/no.coffee | 10 +- app/locale/pl.coffee | 6 + app/locale/pt-BR.coffee | 24 +- app/locale/pt-PT.coffee | 92 +- app/locale/pt.coffee | 10 +- app/locale/ro.coffee | 64 +- app/locale/ru.coffee | 44 +- app/locale/sk.coffee | 10 +- app/locale/sl.coffee | 10 +- app/locale/sr.coffee | 10 +- app/locale/sv.coffee | 10 +- app/locale/th.coffee | 10 +- app/locale/tr.coffee | 10 +- app/locale/uk.coffee | 62 +- app/locale/ur.coffee | 10 +- app/locale/vi.coffee | 10 +- app/locale/zh-HANS.coffee | 8 +- app/locale/zh-HANT.coffee | 10 +- app/locale/zh.coffee | 10 +- app/models/CocoModel.coffee | 10 +- app/styles/base.sass | 44 +- app/styles/bootstrap/_bootswatch.scss | 1 + app/styles/common/top_nav.sass | 32 +- app/styles/home.sass | 35 + app/styles/play.sass | 10 +- app/styles/play/ladder.sass | 5 + app/styles/play/ladder/ladder_tab.sass | 6 + app/styles/play/ladder/my_matches_tab.sass | 13 + app/templates/base.jade | 46 +- app/templates/contribute/artisan.jade | 5 +- app/templates/contribute/contribute.jade | 5 +- app/templates/editor/level/thangs_tab.jade | 5 + app/templates/home.jade | 5 +- app/templates/loading.jade | 14 +- app/templates/loading_error.jade | 31 + app/templates/play.jade | 2 +- app/templates/play/ladder/ladder_tab.jade | 1 + app/templates/play/ladder/my_matches_tab.jade | 12 +- app/templates/play/level/level_loading.jade | 2 + .../play/level/modal/editor_config.jade | 11 +- app/views/editor/article/edit.coffee | 14 +- app/views/editor/components/main.coffee | 9 +- app/views/editor/level/edit.coffee | 7 +- app/views/editor/level/thangs_tab_view.coffee | 30 +- app/views/editor/thang/colors_tab_view.coffee | 4 + app/views/editor/thang/edit.coffee | 7 +- app/views/kinds/CocoView.coffee | 123 +- app/views/kinds/RootView.coffee | 4 +- app/views/modal/signup_modal.coffee | 4 +- app/views/play/ladder/ladder_tab.coffee | 97 +- app/views/play/ladder/my_matches_tab.coffee | 66 + app/views/play/ladder_view.coffee | 17 +- .../level/modal/editor_config_modal.coffee | 19 +- .../play/level/modal/victory_modal.coffee | 2 +- app/views/play/level/playback_view.coffee | 1 - app/views/play/level/tome/spell.coffee | 9 + app/views/play/level/tome/spell_view.coffee | 28 +- app/views/play/level/tome/tome_view.coffee | 4 + app/views/play/level_view.coffee | 18 +- app/views/play_view.coffee | 24 +- bower.json | 5 +- config.coffee | 1 + scripts/devSetup/ruby.py | 2 +- .../coco-dev-setup/batch/config/config.coco | 11 +- .../batch/config/downloads.coco | 59 +- .../batch/config/finished_header.coco | 7 + .../batch/config/github_header.coco | 7 + .../coco-dev-setup/batch/config/info.coco | 9 - .../batch/config/install_header.coco | 7 + .../batch/config/npm_and_brunch_header.coco | 7 + .../coco-dev-setup/batch/config/readme.coco | 29 + .../coco-dev-setup/batch/config/tips.coco | 12 +- .../coco-dev-setup/batch/get_config.bat | 4 - .../coco-dev-setup/batch/get_download.bat | 4 - .../windows/coco-dev-setup/batch/get_text.bat | 4 - .../windows/coco-dev-setup/batch/get_var.exe | Bin 28160 -> 0 bytes .../coco-dev-setup/batch/localisation/de.coco | 82 ++ .../coco-dev-setup/batch/localisation/en.coco | 123 +- .../coco-dev-setup/batch/localisation/fr.coco | 82 ++ .../batch/localisation/languages.coco | 7 + .../coco-dev-setup/batch/localisation/nl.coco | 123 +- .../batch/localisation/zh-HANS.coco | 82 ++ .../batch/localisation/zh-HANT.coco | 82 ++ .../coco-dev-setup/batch/localisation/zh.coco | 82 ++ .../coco-dev-setup/batch/print_header.bat | 4 - .../coco-dev-setup/batch/print_info.bat | 4 - .../coco-dev-setup/batch/print_license.bat | 4 - .../coco-dev-setup/batch/print_tips.bat | 4 - .../batch/scripts/ask_question.bat | 5 + .../scripts/download_and_install_app.bat | 68 ++ .../download_and_install_applications.bat | 53 + .../batch/scripts/get_array.bat | 6 + .../batch/scripts/get_config.bat | 3 + .../batch/scripts/get_download.bat | 3 + .../batch/scripts/get_extension.bat | 3 + .../batch/scripts/get_extension.ps1 | 18 + .../batch/scripts/get_language.bat | 36 + .../batch/scripts/get_local_text.bat | 1 + .../batch/scripts/get_path_safe.bat | 10 + .../batch/scripts/get_system_information.bat | 31 + .../coco-dev-setup/batch/scripts/get_text.bat | 3 + .../coco-dev-setup/batch/scripts/get_var.ps1 | 27 + .../batch/scripts/get_variables.bat | 4 + .../batch/scripts/get_variables.ps1 | 33 + .../batch/scripts/github_setup.bat | 115 ++ .../batch/scripts/npm_and_brunch_setup.bat | 89 ++ .../batch/scripts/open_readme.bat | 1 + .../batch/scripts/open_text_file.bat | 1 + .../batch/scripts/print_dashed_seperator.bat | 3 + .../batch/scripts/print_exit.bat | 2 + .../batch/{ => scripts}/print_file.bat | 11 +- .../batch/scripts/print_finished_header.bat | 1 + .../batch/scripts/print_github_header.bat | 1 + .../batch/scripts/print_header.bat | 1 + .../batch/scripts/print_info.bat | 1 + .../batch/scripts/print_install_header.bat | 1 + .../batch/scripts/print_license.bat | 1 + .../scripts/print_npm_and_brunch_header.bat | 1 + .../batch/scripts/print_seperator.bat | 3 + .../batch/scripts/print_tips.bat | 1 + .../batch/scripts/run_script.bat | 2 + .../coco-dev-setup/batch/scripts/setup.bat | 67 ++ .../batch/scripts/sign_license.bat | 15 + .../windows/coco-dev-setup/batch/setup.bat | 2 + .../coco-dev-setup/dev-setup-packer.bat | 23 +- .../{batch => }/recycle_bin/dev-setup.bat | 1064 ++++++++--------- .../{batch => }/recycle_bin/git-test.bat | 98 +- server/commons/Handler.coffee | 25 +- .../sessions/level_session_handler.coffee | 7 +- server/queues/scoring.coffee | 400 ++++--- server/routes/auth.coffee | 41 +- server/users/user_handler.coffee | 24 +- server/users/user_schema.coffee | 1 + server_setup.coffee | 16 +- 177 files changed, 3782 insertions(+), 1929 deletions(-) delete mode 100644 app/assets/index.html create mode 100644 app/styles/play/ladder/ladder_tab.sass create mode 100644 app/styles/play/ladder/my_matches_tab.sass create mode 100644 app/templates/loading_error.jade create mode 100644 scripts/windows/coco-dev-setup/batch/config/finished_header.coco create mode 100644 scripts/windows/coco-dev-setup/batch/config/github_header.coco delete mode 100755 scripts/windows/coco-dev-setup/batch/config/info.coco create mode 100644 scripts/windows/coco-dev-setup/batch/config/install_header.coco create mode 100644 scripts/windows/coco-dev-setup/batch/config/npm_and_brunch_header.coco create mode 100644 scripts/windows/coco-dev-setup/batch/config/readme.coco delete mode 100755 scripts/windows/coco-dev-setup/batch/get_config.bat delete mode 100755 scripts/windows/coco-dev-setup/batch/get_download.bat delete mode 100755 scripts/windows/coco-dev-setup/batch/get_text.bat delete mode 100755 scripts/windows/coco-dev-setup/batch/get_var.exe create mode 100644 scripts/windows/coco-dev-setup/batch/localisation/de.coco create mode 100644 scripts/windows/coco-dev-setup/batch/localisation/fr.coco create mode 100644 scripts/windows/coco-dev-setup/batch/localisation/languages.coco create mode 100644 scripts/windows/coco-dev-setup/batch/localisation/zh-HANS.coco create mode 100644 scripts/windows/coco-dev-setup/batch/localisation/zh-HANT.coco create mode 100644 scripts/windows/coco-dev-setup/batch/localisation/zh.coco delete mode 100755 scripts/windows/coco-dev-setup/batch/print_header.bat delete mode 100755 scripts/windows/coco-dev-setup/batch/print_info.bat delete mode 100755 scripts/windows/coco-dev-setup/batch/print_license.bat delete mode 100755 scripts/windows/coco-dev-setup/batch/print_tips.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/ask_question.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/download_and_install_app.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/download_and_install_applications.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_array.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_config.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_download.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_extension.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_extension.ps1 create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_language.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_local_text.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_path_safe.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_system_information.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_text.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_var.ps1 create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_variables.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/get_variables.ps1 create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/github_setup.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/npm_and_brunch_setup.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/open_readme.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/open_text_file.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_dashed_seperator.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_exit.bat rename scripts/windows/coco-dev-setup/batch/{ => scripts}/print_file.bat (58%) mode change 100755 => 100644 create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_finished_header.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_github_header.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_header.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_info.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_install_header.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_license.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_npm_and_brunch_header.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_seperator.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/print_tips.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/run_script.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/setup.bat create mode 100644 scripts/windows/coco-dev-setup/batch/scripts/sign_license.bat create mode 100644 scripts/windows/coco-dev-setup/batch/setup.bat rename scripts/windows/coco-dev-setup/{batch => }/recycle_bin/dev-setup.bat (95%) mode change 100755 => 100644 rename scripts/windows/coco-dev-setup/{batch => }/recycle_bin/git-test.bat (95%) mode change 100755 => 100644 diff --git a/app/application.coffee b/app/application.coffee index cc6acd63b..f44287599 100644 --- a/app/application.coffee +++ b/app/application.coffee @@ -5,10 +5,12 @@ locale = require 'locale/locale' Tracker = require 'lib/Tracker' CocoView = require 'views/kinds/CocoView' +# Prevent Ctrl/Cmd + [ / ], P, S +ctrlDefaultPrevented = [219, 221, 80, 83] preventBackspace = (event) -> if event.keyCode is 8 and not elementAcceptsKeystrokes(event.srcElement or event.target) event.preventDefault() - else if (key.ctrl or key.command) and not key.alt and event.keyCode in [219, 221] # prevent Ctrl/Cmd + [ / ] + else if (key.ctrl or key.command) and not key.alt and event.keyCode in ctrlDefaultPrevented event.preventDefault() elementAcceptsKeystrokes = (el) -> diff --git a/app/assets/index.html b/app/assets/index.html deleted file mode 100644 index b558ff66f..000000000 --- a/app/assets/index.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - - - - CodeCombat - Learn how to code by playing a game - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
- -
- - - - - - - - - - - - - - - - - diff --git a/app/initialize.coffee b/app/initialize.coffee index 7670088db..80c33c9b7 100644 --- a/app/initialize.coffee +++ b/app/initialize.coffee @@ -1,5 +1,4 @@ app = require 'application' -auth = require 'lib/auth' init = -> app.initialize() @@ -10,15 +9,8 @@ init = -> treemaExt.setup() filepicker.setKey('AvlkNoldcTOU4PvKi2Xm7z') -$ -> - # Make sure we're "logged in" first. - if auth.me.id - init() - else - Backbone.Mediator.subscribeOnce 'me:synced', init +$ -> init() -window.init = init - handleNormalUrls = -> # http://artsy.github.com/blog/2012/06/25/replacing-hashbang-routes-with-pushstate/ $(document).on "click", "a[href^='/']", (event) -> diff --git a/app/lib/FacebookHandler.coffee b/app/lib/FacebookHandler.coffee index ffd61b5a1..10a59c40c 100644 --- a/app/lib/FacebookHandler.coffee +++ b/app/lib/FacebookHandler.coffee @@ -1,5 +1,5 @@ CocoClass = require 'lib/CocoClass' -{me, CURRENT_USER_KEY} = require 'lib/auth' +{me} = require 'lib/auth' {backboneFailure} = require 'lib/errors' storage = require 'lib/storage' @@ -59,7 +59,6 @@ module.exports = FacebookHandler = class FacebookHandler extends CocoClass error: backboneFailure, url: "/db/user?facebookID=#{r.id}&facebookAccessToken=#{@authResponse.accessToken}" success: (model) -> - storage.save(CURRENT_USER_KEY, model.attributes) window.location.reload() if model.get('email') isnt oldEmail }) diff --git a/app/lib/GPlusHandler.coffee b/app/lib/GPlusHandler.coffee index 2ffd27805..8565a2075 100644 --- a/app/lib/GPlusHandler.coffee +++ b/app/lib/GPlusHandler.coffee @@ -1,5 +1,5 @@ CocoClass = require 'lib/CocoClass' -{me, CURRENT_USER_KEY} = require 'lib/auth' +{me} = require 'lib/auth' {backboneFailure} = require 'lib/errors' storage = require 'lib/storage' GPLUS_TOKEN_KEY = 'gplusToken' @@ -102,7 +102,6 @@ module.exports = GPlusHandler = class GPlusHandler extends CocoClass error: backboneFailure, url: "/db/user?gplusID=#{gplusID}&gplusAccessToken=#{@accessToken.access_token}" success: (model) -> - storage.save(CURRENT_USER_KEY, model.attributes) window.location.reload() if wasAnonymous and not model.get('anonymous') }) diff --git a/app/lib/Router.coffee b/app/lib/Router.coffee index 65915dd56..7c12e1cb8 100644 --- a/app/lib/Router.coffee +++ b/app/lib/Router.coffee @@ -1,5 +1,3 @@ -{me} = require 'lib/auth' - gplusClientID = "800329290710-j9sivplv2gpcdgkrsis9rff3o417mlfa.apps.googleusercontent.com" go = (path) -> -> @routeDirectly path, arguments diff --git a/app/lib/auth.coffee b/app/lib/auth.coffee index 5a14effb0..d46733089 100644 --- a/app/lib/auth.coffee +++ b/app/lib/auth.coffee @@ -1,17 +1,24 @@ {backboneFailure, genericFailure} = require 'lib/errors' User = require 'models/User' storage = require 'lib/storage' - -module.exports.CURRENT_USER_KEY = CURRENT_USER_KEY = 'whoami' BEEN_HERE_BEFORE_KEY = 'beenHereBefore' -module.exports.createUser = (userObject, failure=backboneFailure) -> +init = -> + module.exports.me = window.me = new User(window.userObject) # inserted into main.html + trackFirstArrival() + if me and not me.get('testGroupNumber')? + # Assign testGroupNumber to returning visitors; new ones in server/routes/auth + me.set 'testGroupNumber', Math.floor(Math.random() * 256) + me.save() + + me.loadGravatarProfile() if me.get('email') + Backbone.listenTo(me, 'sync', Backbone.Mediator.publish('me:synced', {me:me})) + +module.exports.createUser = (userObject, failure=backboneFailure, nextURL=null) -> user = new User(userObject) user.save({}, { - error: failure, - success: (model) -> - storage.save(CURRENT_USER_KEY, model) - window.location.reload() + error: failure, + success: -> if nextURL then window.location.href = nextURL else window.location.reload() }) module.exports.loginUser = (userObject, failure=genericFailure) -> @@ -20,52 +27,15 @@ module.exports.loginUser = (userObject, failure=genericFailure) -> username:userObject.email, password:userObject.password }, - (model) -> - storage.save(CURRENT_USER_KEY, model) - window.location.reload() + (model) -> window.location.reload() ) jqxhr.fail(failure) module.exports.logoutUser = -> FB?.logout?() - res = $.post('/auth/logout', {}, -> - storage.save(CURRENT_USER_KEY, null) - window.location.reload() - ) + res = $.post('/auth/logout', {}, -> window.location.reload()) res.fail(genericFailure) -init = -> - # Load the user from local storage, and refresh it from the server. - # Also refresh and cache the gravatar info. - - storedUser = storage.load(CURRENT_USER_KEY) - firstTime = not storedUser - module.exports.me = window.me = new User(storedUser) - me.url = -> '/auth/whoami' - me.fetch() - - retry = -> me.fetch() # blindly try again - error = -> setTimeout(retry, 1000) # blindly try again - me.on 'error', error, @ - me.on 'sync', -> - me.off 'error', error, @ if firstTime - me.url = -> "/db/user/#{me.id}" - trackFirstArrival() if firstTime - if me and not me.get('testGroupNumber')? - # Assign testGroupNumber to returning visitors; new ones in server/handlers/user - me.set 'testGroupNumber', Math.floor(Math.random() * 256) - me.save() - storage.save(CURRENT_USER_KEY, me.attributes) - - me.loadGravatarProfile() if me.get('email') - Backbone.listenTo(me, 'sync', userSynced) - -userSynced = (user) -> - Backbone.Mediator.publish('me:synced', {me:user}) - storage.save(CURRENT_USER_KEY, user) - -init() - onSetVolume = (e) -> return if e.volume is me.get('volume') me.set('volume', e.volume) @@ -80,3 +50,6 @@ trackFirstArrival = -> return if beenHereBefore window.tracker?.trackEvent 'First Arrived' storage.save(BEEN_HERE_BEFORE_KEY, true) + +init() + diff --git a/app/lib/surface/CocoSprite.coffee b/app/lib/surface/CocoSprite.coffee index 04942a549..e77d5de4f 100644 --- a/app/lib/surface/CocoSprite.coffee +++ b/app/lib/surface/CocoSprite.coffee @@ -253,12 +253,12 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass return scaleX = if @getActionProp 'flipX' then -1 else 1 scaleY = if @getActionProp 'flipY' then -1 else 1 - if @thang.maximizesArc and @thangType.get('name') in ['Arrow', 'Spear'] + if @thangType.get('name') in ['Arrow', 'Spear'] # Scales the arrow so it appears longer when flying parallel to horizon. # To do that, we convert angle to [0, 90] (mirroring half-planes twice), then make linear function out of it: # (a - x) / a: equals 1 when x = 0, equals 0 when x = a, monotonous in between. That gives us some sort of # degenerative multiplier. - # For our puproses, a = 90 - the direction straight upwards. + # For our purposes, a = 90 - the direction straight upwards. # Then we use r + (1 - r) * x function with r = 0.5, so that # maximal scale equals 1 (when x is at it's maximum) and minimal scale is 0.5. # Notice that the value of r is empirical. @@ -289,12 +289,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass rotation = @getRotation() if @thangType.get('name') in ['Arrow', 'Spear'] # Rotates the arrow to see it arc based on velocity.z. - # At midair we must see the original angle (delta = 0), but at launch time - # and arrow must point upwards/downwards respectively. - # The curve must consider two variables: speed and angle to camera: - # higher angle -> higher steep - # higher speed -> higher steep (0 at midpoint). - # All constants are empirical. Notice that rotation here does not affect thang's state - it is just the effect. + # Notice that rotation here does not affect thang's state - it is just the effect. # Thang's rotation is always pointing where it is heading. vz = @thang.velocity.z if vz and speed = @thang.velocity.magnitude(true) diff --git a/app/lib/world/GoalManager.coffee b/app/lib/world/GoalManager.coffee index 3bebeca92..4d85d9c3a 100644 --- a/app/lib/world/GoalManager.coffee +++ b/app/lib/world/GoalManager.coffee @@ -125,9 +125,9 @@ module.exports = class GoalManager extends CocoClass keyFrame: 0 # when it became a 'success' or 'failure' } @initGoalState(state, [goal.killThangs, goal.saveThangs], 'killed') - for getTo in goal.getAllToLocations ? [] + for getTo in goal.getAllToLocations ? [] @initGoalState(state,[ getTo.getToLocation?.who , [] ], 'arrived') - for keepFrom in goal.keepAllFromLocations ? [] + for keepFrom in goal.keepAllFromLocations ? [] @initGoalState(state,[ [] , keepFrom.keepFromLocation?.who], 'arrived') @initGoalState(state, [goal.getToLocations?.who, goal.keepFromLocations?.who], 'arrived') @initGoalState(state, [goal.leaveOffSides?.who, goal.keepFromLeavingOffSides?.who], 'left') @@ -146,11 +146,11 @@ module.exports = class GoalManager extends CocoClass onThangTouchedGoal: (e, frameNumber) -> for goal in @goals ? [] @checkArrived(goal.id, goal.getToLocations.who, goal.getToLocations.targets, e.actor, e.touched.id, frameNumber) if goal.getToLocations? - if goal.getAllToLocations? + if goal.getAllToLocations? for getTo in goal.getAllToLocations @checkArrived(goal.id, getTo.getToLocation.who, getTo.getToLocation.targets, e.actor, e.touched.id, frameNumber) @checkArrived(goal.id, goal.keepFromLocations.who, goal.keepFromLocations.targets, e.actor, e.touched.id, frameNumber) if goal.keepFromLocations? - if goal.keepAllFromLocations? + if goal.keepAllFromLocations? for keepFrom in goal.keepAllFromLocations @checkArrived(goal.id, keepFrom.keepFromLocation.who , keepFrom.keepFromLocation.targets, e.actor, e.touched.id, frameNumber ) @@ -200,7 +200,7 @@ module.exports = class GoalManager extends CocoClass initGoalState: (state, whos, progressObjectName) -> # 'whos' is an array of goal 'who' values. # This inits the progress object for the goal tracking. - + arrays = (prop for prop in whos when prop?.length) return unless arrays.length state[progressObjectName] = {} @@ -221,7 +221,7 @@ module.exports = class GoalManager extends CocoClass victory = overallStatus is "success" tentative = overallStatus is "success" @world.endWorld victory, mostEagerGoal.worldEndsAfter, tentative if mostEagerGoal isnt Infinity - + updateGoalState: (goalID, thangID, progressObjectName, frameNumber) -> # A thang has done something related to the goal! # Mark it down and update the goal state. @@ -236,7 +236,7 @@ module.exports = class GoalManager extends CocoClass # saveThangs: by default we would want to save all the Thangs, which means that we would want none of them to be "done" numNeeded = _.size(stateThangs) - Math.min((goal.howMany ? 1), _.size stateThangs) + 1 numDone = _.filter(stateThangs).length - #console.log "needed", numNeeded, "done", numDone, "of total", _.size(stateThangs), "with how many", goal.howMany + #console.log "needed", numNeeded, "done", numDone, "of total", _.size(stateThangs), "with how many", goal.howMany, "and stateThangs", stateThangs return unless numDone >= numNeeded return if state.status and not success # already failed it; don't wipe keyframe state.status = if success then "success" else "failure" diff --git a/app/lib/world/names.coffee b/app/lib/world/names.coffee index 04d8e1fc6..fc0a6aff9 100644 --- a/app/lib/world/names.coffee +++ b/app/lib/world/names.coffee @@ -49,6 +49,8 @@ module.exports.thangNames = thangNames = "Stormy" "Halle" "Sage" + "Ryan" + "Bond" ] "Soldier F": [ "Sarah" @@ -64,6 +66,8 @@ module.exports.thangNames = thangNames = "Lukaz" "Gorgin" "Coco" + "Buffy" + "Allankrita" ] "Peasant": [ "Yorik" @@ -88,10 +92,13 @@ module.exports.thangNames = thangNames = "Gawain" "Durfkor" "Paps" + "Hodor" ] "Peasant F": [ "Hilda" "Icey" + "Matilda" + "Mertia" ] "Archer F": [ "Phoebe" @@ -123,6 +130,7 @@ module.exports.thangNames = thangNames = "Luna" "Alleria" "Vereesa" + "Beatrice" ] "Archer M": [ "Brian" @@ -143,6 +151,7 @@ module.exports.thangNames = thangNames = "Vican" "Mars" "Dev" + "Oliver" ] "Ogre Munchkin M": [ "Brack" @@ -191,6 +200,8 @@ module.exports.thangNames = thangNames = "Tarlok" "Gurulax" "Mokrul" + "Polifemo" + "Muthyala" ] "Ogre F": [ "Nareng" @@ -260,6 +271,7 @@ module.exports.thangNames = thangNames = "Gom" "Gogg" "Ghuk" + "Makas" ] "Ogre Thrower": [ "Kyrgg" @@ -276,6 +288,7 @@ module.exports.thangNames = thangNames = "Makas" "Rakash" "Drumbaa" + "Pinakin" ] "Burl": [ "Borlit" @@ -283,18 +296,22 @@ module.exports.thangNames = thangNames = ] "Griffin Rider": [ "Aeoldan" + "Bestarius" ] "Potion Master": [ "Snake" "Amaranth" "Zander" "Arora" + "Curie" + "Clause" ] "Librarian": [ "Hushbaum" "Matilda" "Agnes" "Agathe" + "Satish" ] "Equestrian": [ "Reynaldo" diff --git a/app/lib/world/thang.coffee b/app/lib/world/thang.coffee index 41544cbca..426e7541f 100644 --- a/app/lib/world/thang.coffee +++ b/app/lib/world/thang.coffee @@ -38,7 +38,7 @@ module.exports = class Thang publishNote: (channel, event) -> event.thang = @ @world.publishNote channel, event - + setGoalState: (goalID, status) -> @world.setGoalState goalID, status diff --git a/app/lib/world/thang_state.coffee b/app/lib/world/thang_state.coffee index 7ea6a9687..655f41b01 100644 --- a/app/lib/world/thang_state.coffee +++ b/app/lib/world/thang_state.coffee @@ -98,10 +98,14 @@ module.exports = class ThangState storage = @trackedPropertyValues[propIndex] value = @getStoredProp propIndex, type, storage if prop is "pos" - @thang.pos = @thang.pos.copy() - @thang.pos.x = inverse * @thang.pos.x + ratio * value.x - @thang.pos.y = inverse * @thang.pos.y + ratio * value.y - @thang.pos.z = inverse * @thang.pos.z + ratio * value.z + if @thang.pos.distanceSquared(value) > 900 + # Don't interpolate; it was probably a teleport. https://github.com/codecombat/codecombat/issues/738 + @thang.pos = value + else + @thang.pos = @thang.pos.copy() + @thang.pos.x = inverse * @thang.pos.x + ratio * value.x + @thang.pos.y = inverse * @thang.pos.y + ratio * value.y + @thang.pos.z = inverse * @thang.pos.z + ratio * value.z else if prop is "rotation" @thang.rotation = inverse * @thang.rotation + ratio * value @thang.partialState = true diff --git a/app/locale/ar.coffee b/app/locale/ar.coffee index b61580832..d98e9c0e6 100644 --- a/app/locale/ar.coffee +++ b/app/locale/ar.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi sending: "ارسال..." cancel: "الغي" save: "احفض" +# create: "Create" delay_1_sec: "ثانية" delay_3_sec: "3 ثواني" delay_5_sec: "5 ثواني" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/bg.coffee b/app/locale/bg.coffee index bf28857cb..5443c75a3 100644 --- a/app/locale/bg.coffee +++ b/app/locale/bg.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "български език", englishDescri sending: "Изпращане..." cancel: "Отказ" save: "Запис" +# create: "Create" delay_1_sec: "1 секунда" delay_3_sec: "3 секунди" delay_5_sec: "5 секунди" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "български език", englishDescri login: sign_up: "Създай Профил" log_in: "Вход" +# logging_in: "Logging In" log_out: "Изход" recover: "Възстанови акаунт" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "български език", englishDescri # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "български език", englishDescri # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "български език", englishDescri # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/ca.coffee b/app/locale/ca.coffee index 595ac7bb3..305bd992e 100644 --- a/app/locale/ca.coffee +++ b/app/locale/ca.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr sending: "Enviant..." cancel: "Cancel·lant" save: "Guardar" +# create: "Create" delay_1_sec: "1 segon" delay_3_sec: "3 segons" delay_5_sec: "5 segons" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr login: sign_up: "Crear un compte" log_in: "Iniciar Sessió" +# logging_in: "Logging In" log_out: "Tancar Sessió" recover: "Recuperar un compte" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/cs.coffee b/app/locale/cs.coffee index d69702f93..f60722bf1 100644 --- a/app/locale/cs.coffee +++ b/app/locale/cs.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr sending: "Odesílání..." cancel: "Zrušit" save: "Uložit" +# create: "Create" delay_1_sec: "1 vteřina" delay_3_sec: "3 vteřiny" delay_5_sec: "5 vteřin" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr login: sign_up: "Vytvořit účet" log_in: "Přihlásit" +# logging_in: "Logging In" log_out: "Odhlásit" recover: "obnovit účet" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,7 +472,7 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr more_about_archmage: "Dozvědět se více o tom, jak se stát mocným Arcimágem" archmage_subscribe_desc: "Dostávat emailem oznámení a informacemi nových programovacích příležitostech" # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." artisan_introduction_pref: "Musíme vytvářet další úrovně! Lidé nás prosí o další obsah, ale sami zvládáme vytvořit jen málo. Naším prvním pracovním zastavením je první úroveň. Editor úrovní je tak-tak použitelný i pro jeho vlastní tvůrce. Máte-li vizi pro vytvoření vnořených úrovní alá " artisan_introduction_suf: "pak neváhejte, toto je vaše destinace." artisan_attribute_1: "Předchozí zkušenosti s vytvářením podobného obsahu by byly vítány, například z editorů úrovní Blizzardu, ale nejsou vyžadovány!" diff --git a/app/locale/da.coffee b/app/locale/da.coffee index 200d6c873..ce34dfa42 100644 --- a/app/locale/da.coffee +++ b/app/locale/da.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans sending: "Sender..." cancel: "Annuller" save: "Gem" +# create: "Create" delay_1_sec: "1 sekund" delay_3_sec: "3 sekunder" delay_5_sec: "5 sekunder" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans login: sign_up: "opret ny konto" log_in: "Log Ind" +# logging_in: "Logging In" log_out: "Log Ud" recover: "genskab konto" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans skip_tutorial: "Spring over (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." editor_config_keybindings_label: "Tastaturgenveje" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/de.coffee b/app/locale/de.coffee index 0b16ea9a5..d451d6528 100644 --- a/app/locale/de.coffee +++ b/app/locale/de.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra sending: "Übertrage..." cancel: "Abbrechen" save: "Speichern" +# create: "Create" delay_1_sec: "1 Sekunde" delay_3_sec: "3 Sekunden" delay_5_sec: "5 Sekunden" @@ -12,13 +13,13 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra # fork: "Fork" play: "Abspielen" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + units: + second: "Sekunde" + seconds: "Sekunden" + minute: "Minute" + minutes: "Minuten" + hour: "Stunde" + hours: "Stunden" modal: close: "Schließen" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra login: sign_up: "Registrieren" log_in: "Einloggen" +# logging_in: "Logging In" log_out: "Ausloggen" recover: "Account wiederherstellen" @@ -76,7 +78,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra play: "Spielen" 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: "Campaign" + campaign: "Kampagne" for_beginners: "Für Anfänger" multiplayer: "Mehrspieler" for_developers: "Für Entwickler" @@ -195,9 +197,9 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra victory_sign_up: "Melde Dich an, um Fortschritte zu speichern" victory_sign_up_poke: "Möchtest Du Neuigkeiten per Mail erhalten? Erstelle einen kostenlosen Account und wir halten Dich auf dem Laufenden." victory_rate_the_level: "Bewerte das Level: " -# victory_rank_my_game: "Rank My Game" -# victory_ranking_game: "Submitting..." -# victory_return_to_ladder: "Return to Ladder" + victory_rank_my_game: "Werte mein Spiel" + victory_ranking_game: "Einreichen..." + victory_return_to_ladder: "Zurück zur Rangliste" victory_play_next_level: "Spiel das nächste Level" victory_go_home: "Geh auf die Startseite" victory_review: "Erzähl uns davon!" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra skip_tutorial: "Überspringen (Esc)" editor_config: "Editor Einstellungen" editor_config_title: "Editor Einstellungen" + editor_config_language_label: "Programmiersprache" + editor_config_language_description: "Bestimme die Programmiersprache in der du arbeiten möchtest." editor_config_keybindings_label: "Tastenbelegung" editor_config_keybindings_default: "Standard (Ace)" editor_config_keybindings_description: "Fügt zusätzliche Tastenkombinationen, bekannt aus anderen Editoren, hinzu" @@ -231,35 +235,37 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra editor_config_invisibles_description: "Zeigt unsichtbare Zeichen wie Leertasten an." editor_config_indentguides_label: "Zeige Einrückungshilfe" editor_config_indentguides_description: "Zeigt vertikale Linien an um Einrückungen besser zu sehen." -# editor_config_behaviors_label: "Smart Behaviors" -# editor_config_behaviors_description: "Autocompletes brackets, braces, and quotes." -# loading_ready: "Ready!" -# 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." -# tip_guide_exists: "Click the guide at the top of the page for useful info." -# tip_open_source: "CodeCombat is 100% open source!" -# tip_beta_launch: "CodeCombat launched its beta in October, 2013." -# tip_js_beginning: "JavaScript is just the beginning." -# tip_autocast_setting: "Adjust autocast settings by clicking the gear on the cast button." -# think_solution: "Think of the solution, not the problem." -# tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra" -# tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis" -# tip_debugging_program: "If debugging is the process of removing bugs, then programming must be the process of putting them in. - Edsger W. Dijkstra" -# tip_forums: "Head over to the forums and tell us what you think!" -# tip_baby_coders: "In the future, even babies will be Archmages." -# tip_morale_improves: "Loading will continue until morale improves." -# tip_all_species: "We believe in equal opportunities to learn programming for all species." + editor_config_behaviors_label: "Intelligentes Verhalten" + editor_config_behaviors_description: "Vervollständigt automatisch Klammern und Anführungszeichen." + loading_ready: "Bereit!" + tip_insert_positions: "Halte 'Umschalt' gedrückt und klicke auf die Karte um die Koordinaten einzufügen." + tip_toggle_play: "Wechsel zwischen Play und Pause mit Strg+P." + tip_scrub_shortcut: "Spule vor und zurück mit Strg+[ und Strg+]" + tip_guide_exists: "Klicke auf die Anleitung am oberen Ende der Seite für nützliche Informationen" + tip_open_source: "CodeCombat ist 100% quelloffen!" + tip_beta_launch: "CodeCombat startete seine Beta im Oktober 2013." + tip_js_beginning: "JavaScript ist nur der Anfang." + tip_autocast_setting: "Ändere die Einstellungen für das automatische Ausführen über das Zahnrad neben dem Ausführen Knopf" + think_solution: "Denke über die Lösung nach, nicht über das Problem." + tip_theory_practice: "In der Theorie gibt es keinen Unterschied zwischen Theorie und Praxis. In der Praxis schon. - Yogi Berra" + tip_error_free: "Es gibt zwei Wege fehlerfreie Programme zu schreiben; nur der Dritte funktioniert. - Alan Perlis" + tip_debugging_program: "Wenn Debugging der Prozess zum Fehler entfernen ist, dann muss Programmieren der Prozess sein Fehler zu machen. - Edsger W. Dijkstra" + tip_forums: "Gehe zum Forum und sage uns was du denkst!" + tip_baby_coders: "In der Zukunft werden sogar Babies Erzmagier sein." + tip_morale_improves: "Das Laden wird weiter gehen bis die Stimmung sich verbessert." + tip_all_species: "Wir glauben an gleiche Chancen für alle Arten Programmieren zu lernen." # tip_reticulating: "Reticulating spines." -# tip_harry: "Yer a Wizard, " -# tip_great_responsibility: "With great coding skill comes great debug responsibility." -# tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep." -# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't." -# tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda" -# tip_no_try: "Do. Or do not. There is no try. - Yoda" -# tip_patience: "Patience you must have, young Padawan. - Yoda" -# tip_documented_bug: "A documented bug is not a bug; it is a feature." -# tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" + tip_harry: "Du bist ein Zauberer, " + tip_great_responsibility: "Mit großen Programmierfähigkeiten kommt große Verantwortung." + tip_munchkin: "Wenn du dein Gemüse nicht isst, besucht dich ein Zwerg während du schläfst." + tip_binary: "Es gibt auf der Welt nur 10 Arten von Menschen: die, welche Binär verstehen und die, welche nicht." + tip_commitment_yoda: "Ein Programmier muss die größte Hingabe haben, den ernstesten Verstand. ~ Yoda" + tip_no_try: "Tu. Oder tu nicht. Es gibt kein Versuchen. - Yoda" + tip_patience: "Geduld du musst haben, junger Padawan. - Yoda" + tip_documented_bug: "Ein dokumentierter Fehler ist kein Fehler; er ist ein Merkmal." + tip_impossible: "Es wirkt immer unmöglich bis es vollbracht ist. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" time_current: "Aktuell" time_total: "Total" time_goto: "Gehe zu" @@ -288,8 +294,8 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra contact_us: "setze dich mit uns in Verbindung!" hipchat_prefix: "Besuche uns auch in unserem" hipchat_url: "HipChat room." -# revert: "Revert" -# revert_models: "Revert Models" + revert: "Zurücksetzen" + revert_models: "Models zurücksetzen." level_some_options: "Einige Einstellungsmöglichkeiten?" level_tab_thangs: "Thangs" level_tab_scripts: "Skripte" @@ -308,7 +314,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra level_components_title: "Zurück zu allen Thangs" level_components_type: "Typ" level_component_edit_title: "Komponente bearbeiten" -# level_component_config_schema: "Config Schema" + level_component_config_schema: "Konfigurationsschema" level_component_settings: "Einstellungen" level_system_edit_title: "System bearbeiten" create_system_title: "neues System erstellen" @@ -331,7 +337,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra body: "Inhalt" version: "Version" commit_msg: "Commit Nachricht" -# history: "History" + history: "Verlauf" version_history_for: "Versionsgeschichte für: " result: "Ergebnis" results: "Ergebnisse" @@ -340,15 +346,15 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra email: "Email" password: "Passwort" message: "Nachricht" -# code: "Code" -# ladder: "Ladder" -# when: "When" -# opponent: "Opponent" -# rank: "Rank" -# score: "Score" -# win: "Win" -# loss: "Loss" -# tie: "Tie" + code: "Code" + ladder: "Rangliste" + when: "Wann" + opponent: "Gegner" + rank: "Rang" + score: "Punktzahl" + win: "Sieg" + loss: "Niederlage" + tie: "Unentschieden" easy: "Einfach" medium: "Mittel" hard: "Schwer" @@ -374,7 +380,7 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra nick_description: "Programmierzauberer, exzentrischer Motivationskünstler und Auf-den-Kopf-stell-Experimentierer. Nick könnte alles mögliche tun und entschied CodeCombat zu bauen." jeremy_description: "Kundendienstmagier, Usability Tester und Community-Organisator. Wahrscheinlich hast du schon mit Jeremy gesprochen." michael_description: "Programmierer, Systemadministrator und studentisch technisches Wunderkind, Michael hält unsere Server am Laufen." -# glen_description: "Programmer and passionate game developer, with the motivation to make this world a better place, by developing things that matter. The word impossible can't be found in his dictionary. Learning new skills is his joy!" + glen_description: "Programmier und leidenschaftlicher Spieleentwickler mit der Motivation die Welt, durch das Entwickeln von Sachen die zählen, zu einem besseren Platz zu machen. Das Wort 'unmöglich' kann nicht in seinem Wortschatz gefunden werden. Neue Fähigkeiten zu lernen ist seine Leidenschaft!" legal: page_title: "Rechtliches" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/el.coffee b/app/locale/el.coffee index 1741ad6f3..a301dcb79 100644 --- a/app/locale/el.coffee +++ b/app/locale/el.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre sending: "Αποστολή ..." cancel: "Ακύρωση" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre login: sign_up: "Δημιούργησε Λογαριασμό" log_in: "Σύνδεση" +# logging_in: "Logging In" log_out: "Αποσύνδεση" recover: "Κάντε ανάκτηση του λογαριασμού σας" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/en-AU.coffee b/app/locale/en-AU.coffee index a4938fc7a..98b872bce 100644 --- a/app/locale/en-AU.coffee +++ b/app/locale/en-AU.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/en-GB.coffee b/app/locale/en-GB.coffee index 9adacaab0..d9f675858 100644 --- a/app/locale/en-GB.coffee +++ b/app/locale/en-GB.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/en-US.coffee b/app/locale/en-US.coffee index 6e8a79b62..78aa5661b 100644 --- a/app/locale/en-US.coffee +++ b/app/locale/en-US.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/en.coffee b/app/locale/en.coffee index 4b07bac03..7d35d42aa 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -5,12 +5,14 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr sending: "Sending..." cancel: "Cancel" save: "Save" + create: "Create" delay_1_sec: "1 second" delay_3_sec: "3 seconds" delay_5_sec: "5 seconds" manual: "Manual" fork: "Fork" play: "Play" + retry: "Retry" units: second: "second" @@ -52,6 +54,7 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr login: sign_up: "Create Account" log_in: "Log In" + logging_in: "Logging In" log_out: "Log Out" recover: "recover account" @@ -224,6 +227,8 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr skip_tutorial: "Skip (esc)" editor_config: "Editor Config" editor_config_title: "Editor Configuration" + editor_config_language_label: "Programming Language" + editor_config_language_description: "Define the programming language you want to code in." editor_config_keybindings_label: "Key Bindings" editor_config_keybindings_default: "Default (Ace)" editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +265,8 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr tip_patience: "Patience you must have, young Padawan. - Yoda" tip_documented_bug: "A documented bug is not a bug; it is a feature." tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" + tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" + tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" time_current: "Now:" time_total: "Max:" time_goto: "Go to:" @@ -320,6 +327,7 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr article_search_title: "Search Articles Here" thang_search_title: "Search Thang Types Here" level_search_title: "Search Levels Here" + read_only_warning: "Note: you can't save any edits here, because you're not logged in as an admin." article: edit_btn_preview: "Preview" @@ -467,9 +475,9 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr more_about_archmage: "Learn More About Becoming an Archmage" archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" - artisan_summary_suf: "then this class is for you." + artisan_summary_suf: ", then this class is for you." artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" - artisan_introduction_suf: "then this class might be for you." + artisan_introduction_suf: ", then this class might be for you." artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" @@ -595,3 +603,27 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr tutorial: "tutorial" new_to_programming: ". New to programming? Hit our beginner campaign to skill up." so_ready: "I Am So Ready for This" + + loading_error: + could_not_load: "Error loading from server" + connection_failure: "Connection failed." + unauthorized: "You need to be signed in. Do you have cookies disabled?" + forbidden: "You do not have the permissions." + not_found: "Not found." + not_allowed: "Method not allowed." + timeout: "Server timeout." + conflict: "Resource conflict." + bad_input: "Bad input." + server_error: "Server error." + unknown: "Unknown error." + + resources: + your_sessions: "Your Sessions" + level: "Level" + social_network_apis: "Social Network APIs" + facebook_status: "Facebook Status" + facebook_friends: "Facebook Friends" + facebook_friend_sessions: "Facebook Friend Sessions" + gplus_friends: "G+ Friends" + gplus_friend_sessions: "G+ Friend Sessions" + leaderboard: 'leaderboard' \ No newline at end of file diff --git a/app/locale/es-419.coffee b/app/locale/es-419.coffee index b00e98d03..a09319212 100644 --- a/app/locale/es-419.coffee +++ b/app/locale/es-419.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip sending: "Enviando..." cancel: "Cancelar" # save: "Save" +# create: "Create" delay_1_sec: "1 segundo" delay_3_sec: "3 segundos" delay_5_sec: "5 segundos" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip login: sign_up: "Crear Cuenta" log_in: "Entrar" +# logging_in: "Logging In" log_out: "Salir" recover: "recuperar cuenta" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/es-ES.coffee b/app/locale/es-ES.coffee index 79d4e8ef0..9111150f1 100644 --- a/app/locale/es-ES.coffee +++ b/app/locale/es-ES.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis sending: "Enviando..." cancel: "Cancelar" save: "Guardar" + create: "Crear" delay_1_sec: "1 segundo" delay_3_sec: "3 segundos" delay_5_sec: "5 segundos" @@ -12,13 +13,13 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis fork: "Bifurcar" play: "Jugar" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + units: + second: "segundo" + seconds: "segundos" + minute: "minuto" + minutes: "minutos" + hour: "hora" + hours: "horas" modal: close: "Cerrar" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis login: sign_up: "Crear una cuenta" log_in: "Entrar" + logging_in: "Entrando..." log_out: "Salir" recover: "recuperar cuenta" @@ -74,12 +76,12 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis 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" -# 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" -# for_beginners: "For Beginners" -# multiplayer: "Multiplayer" -# for_developers: "For Developers" + old_browser: "Ay, su navegador es demasiado viejo para ejecutar CodeCombat. ¡Lo sentimos!" + old_browser_suffix: "Puede tentar de todos modos, pero probablemente no va a funcionar." + campaign: "Campaña" + for_beginners: "Para principiantes" + multiplayer: "Multijugador" + for_developers: "Para programadores" play: choose_your_level: "Elige tu nivel" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis more_about_archmage: "Aprende más sobre convertirte en un poderoso Archimago" archmage_subscribe_desc: "Recibe correos sobre nuevos anuncios y oportunidades de codificar." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" - artisan_summary_suf: "entonces esta Clase es la tuya." + artisan_summary_suf: ", entonces esta Clase es la tuya." artisan_introduction_pref: "¡Debemos construir niveles adicionales! La gente clama por más contenido y solo podemos crear unos cuantos. Ahora mismo tu estación de trabajo es el nivel uno; nuestro editor de niveles es apenas usable por sus creadores, así que ten cuidado. Si tienes visiones de campañas que alcanzan el infinito" - artisan_introduction_suf: "entonces esta Clase es ideal para ti." + artisan_introduction_suf: ", entonces esta Clase es ideal para ti." artisan_attribute_1: "Cualquier experiencia creando contenido similar estaría bien, como por ejemplo el editor de niveles de Blizzard. ¡Aunque no es necesaria!" artisan_attribute_2: "Un anhelo de hacer un montón de testeo e iteraciones. Para hacer buenos niveles necesitas mostrárselos a otros y mirar como juegan, además de estar preparado para encontrar los fallos a reparar." artisan_attribute_3: "Por el momento, la resistencia va a la par con el Aventurero. Nuestro editor de niveles está a un nivel de desarrollo temprano y puede ser muy frustrante usarlo. ¡Estás advertido!" diff --git a/app/locale/es.coffee b/app/locale/es.coffee index 8a59ff812..e94a4f211 100644 --- a/app/locale/es.coffee +++ b/app/locale/es.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "español", englishDescription: "Spanish", t sending: "Enviando..." cancel: "Cancelar" save: "Guardar" +# create: "Create" delay_1_sec: "1 segundo" delay_3_sec: "3 segundos" delay_5_sec: "5 segundos" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "español", englishDescription: "Spanish", t login: sign_up: "Crear Cuenta" log_in: "Iniciar Sesión" +# logging_in: "Logging In" log_out: "Cerrar Sesión" recover: "recuperar cuenta" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "español", englishDescription: "Spanish", t skip_tutorial: "Saltar (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "español", englishDescription: "Spanish", t # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "español", englishDescription: "Spanish", t # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/fa.coffee b/app/locale/fa.coffee index d91e19e22..424c6544d 100644 --- a/app/locale/fa.coffee +++ b/app/locale/fa.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", sending: "...در حال ارسال" cancel: "لغو" save: "ذخیره " +# create: "Create" delay_1_sec: "1 ثانیه" delay_3_sec: "3 ثانیه" delay_5_sec: "5 ثانیه" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", login: sign_up: "ایجاد حساب کاربری" log_in: "ورود" +# logging_in: "Logging In" log_out: "خروج" recover: "بازیابی حساب کاربری" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian", # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/fi.coffee b/app/locale/fi.coffee index c750083fe..ea46d4b27 100644 --- a/app/locale/fi.coffee +++ b/app/locale/fi.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/fr.coffee b/app/locale/fr.coffee index 7b0eae3b0..8c77980bb 100644 --- a/app/locale/fr.coffee +++ b/app/locale/fr.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t sending: "Envoi..." cancel: "Annuler" save: "Sauvegarder" +# create: "Create" delay_1_sec: "1 seconde" delay_3_sec: "3 secondes" delay_5_sec: "5 secondes" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t login: sign_up: "Créer un compte" log_in: "Connexion" +# logging_in: "Logging In" log_out: "Déconnexion" recover: "récupérer son compte" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t skip_tutorial: "Passer (esc)" editor_config: "Config de l'éditeur" editor_config_title: "Configuration de l'éditeur" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." editor_config_keybindings_label: "Raccourcis clavier" editor_config_keybindings_default: "Par défault (Ace)" editor_config_keybindings_description: "Ajouter de nouveaux raccourcis connus depuis l'éditeur commun." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "français", englishDescription: "French", t # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "français", englishDescription: "French", t more_about_archmage: "En apprendre plus sur devenir un puissant archimage" archmage_subscribe_desc: "Recevoir un email sur les nouvelles possibilités de développement et des annonces." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." artisan_introduction_pref: "Nous devons créer des niveaux additionnels! Les gens veulent plus de contenu, et nous ne pouvons pas tous les créer nous-mêmes. Maintenant votre station de travail est au niveau un ; notre éditeur de niveaux est à peine utilisable même par ses créateurs, donc méfiez-vous. Si vous avez des idées sur la boucle for de" - artisan_introduction_suf: "cette classe est faite pour vous." + artisan_introduction_suf: ", cette classe est faite pour vous." artisan_attribute_1: "Une expérience dans la création de contenu comme celui-ci serait un plus, comme utiliser l'éditeur de niveaux de Blizzard. Mais ce n'est pas nécessaire!" artisan_attribute_2: "Vous aspirez à faire beaucoup de tests et d'itérations. Pour faire de bons niveaux, vous aurez besoin de les proposer aux autres et les regarder les jouer, et être prêt à trouver un grand nombre de choses à corriger." artisan_attribute_3: "Pour l'heure, endurance en binôme avec un Aventurier. Notre éditeur de niveaux est vraiment préliminaire et frustrant à l'utilisation. Vous êtes prévenus!" diff --git a/app/locale/he.coffee b/app/locale/he.coffee index e3966af95..d61d6c68e 100644 --- a/app/locale/he.coffee +++ b/app/locale/he.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", sending: "...שולח" cancel: "ביטול" save: "שמור" +# create: "Create" delay_1_sec: "שניה אחת" delay_3_sec: "שלוש שניות" delay_5_sec: "חמש שניות" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", login: sign_up: "הירשם" log_in: "היכנס" +# logging_in: "Logging In" log_out: "צא" recover: "שחזר סיסמה" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew", # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/hi.coffee b/app/locale/hi.coffee index 406135762..ffcdbc8c7 100644 --- a/app/locale/hi.coffee +++ b/app/locale/hi.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/hu.coffee b/app/locale/hu.coffee index e162d61f6..eaa9a8077 100644 --- a/app/locale/hu.coffee +++ b/app/locale/hu.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t sending: "Küldés..." cancel: "Mégse" save: "Mentés" +# create: "Create" delay_1_sec: "1 másodperc" delay_3_sec: "3 másodperc" delay_5_sec: "5 másodperc" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t login: sign_up: "Regisztráció" log_in: "Bejelentkezés" +# logging_in: "Logging In" log_out: "Kijelentkezés" recover: "meglévő fiók visszaállítása" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/id.coffee b/app/locale/id.coffee index 1c9b3b97e..bdafc21fc 100644 --- a/app/locale/id.coffee +++ b/app/locale/id.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/it.coffee b/app/locale/it.coffee index 0206d742d..5acb59898 100644 --- a/app/locale/it.coffee +++ b/app/locale/it.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t sending: "Invio in corso..." cancel: "Annulla" save: "Salva" +# create: "Create" delay_1_sec: "1 secondo" delay_3_sec: "3 secondi" delay_5_sec: "5 secondi" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t login: sign_up: "Crea account" log_in: "Accedi" +# logging_in: "Logging In" log_out: "Disconnetti" recover: "Recupera account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t skip_tutorial: "Salta (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t more_about_archmage: "Leggi di più su cosa vuol dire diventare un potente Arcimago" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/ja.coffee b/app/locale/ja.coffee index 0d2286c8f..86a87bb66 100644 --- a/app/locale/ja.coffee +++ b/app/locale/ja.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", sending: "送信中..." cancel: "キャンセル" save: "保存" +# create: "Create" delay_1_sec: "1秒" delay_3_sec: "3秒" delay_5_sec: "5秒" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", login: sign_up: "アカウント登録" log_in: "ログイン" +# logging_in: "Logging In" log_out: "ログアウト" recover: "パスワードを忘れた場合はこちら" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese", # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/ko.coffee b/app/locale/ko.coffee index cac92fa8d..c4f3f6ff6 100644 --- a/app/locale/ko.coffee +++ b/app/locale/ko.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t sending: "보내는 중입니다..." cancel: "취소" save: "저장" +# create: "Create" delay_1_sec: "1초" delay_3_sec: "3초" delay_5_sec: "5초" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t login: sign_up: "계정 생성" log_in: "로그인" +# logging_in: "Logging In" log_out: "로그아웃" recover: "계정 복구" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t skip_tutorial: "넘기기 (esc)" editor_config: "에디터 설정" editor_config_title: "에디터 설정" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." editor_config_keybindings_label: "단축키 설정" editor_config_keybindings_default: "기본(Ace)" editor_config_keybindings_description: "일반적인 에디터와 마찬가지인 단축키 설정" @@ -260,6 +264,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/lt.coffee b/app/locale/lt.coffee index 962c8ee6b..fda003f0a 100644 --- a/app/locale/lt.coffee +++ b/app/locale/lt.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/ms.coffee b/app/locale/ms.coffee index 6be2a2396..fcba5465a 100644 --- a/app/locale/ms.coffee +++ b/app/locale/ms.coffee @@ -5,10 +5,11 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa sending: "Menghantar maklumat.." cancel: "Batal" save: "Simpan data" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" -# manual: "Manual" + manual: "Panduan" # fork: "Fork" play: "Mula" @@ -52,12 +53,13 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa login: sign_up: "Buat Akaun" log_in: "Log Masuk" +# logging_in: "Logging In" log_out: "Log Keluar" recover: "Perbaharui Akaun" recover: recover_account_title: "Dapatkan Kembali Akaun" - send_password: "Hantar kembali kata laluan" + send_password: "Hantar kembali kata-laluan" signup: # create_account_title: "Create Account to Save Progress" @@ -100,7 +102,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa contact: contact_us: "Hubungi CodeCombat" - welcome: "Kami suka mendengar dari anda! Gunakan form ini dan hantar kami emel. " + welcome: "Kami gemar mendengar dari anda! Gunakan borang ini dan hantar emel kepada kami. " contribute_prefix: "Jikalau anda berasa besar hati untuk menyumbang, sila lihat " contribute_page: "laman kami untuk menyumbang" # contribute_suffix: "!" @@ -112,8 +114,8 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa diplomat_suggestion: title: "Kami perlu menterjemahkan CodeCombat!" sub_heading: "Kami memerlukan kemahiran bahasa anda." - pitch_body: "Kami membina CodeCombat dalam Bahasa Inggeris, tetapi kami sudah ada pemain dari seluruh dunia. Kebanyakan mereka mahu bermain dalam Bahasa Melayu dan tidak memahami bahasa Inggeris, jikalau anda boleh tertutur dalam kedua-dua bahasa, harap anda boleh daftar untuk menjadi Diplomat dan menolong menterjemahkan laman CodeCombat dan kesemua level kepada Bahasa Melayu." - missing_translations: "Sehingga kami dalam menterjemahkan kesemua kepada Bahasa Melayu, anda akan melihat Inggeris apabila Bahasa Melayu tiada dalam penterjemahan." + pitch_body: "Kami membina CodeCombat dalam Bahasa Inggeris, tetapi kami sudah ada pemain dari seluruh dunia. Kebanyakan mereka mahu bermain dalam Bahasa Melayu dan tidak memahami Bahasa Inggeris, jikalau anda boleh tertutur dalam kedua-dua bahasa, harap anda boleh daftar untuk menjadi Diplomat dan menolong menterjemahkan laman CodeCombat dan kesemua level kepada Bahasa Melayu." + missing_translations: "Sehingga kami dapat menterjemahkan kesemua kepada Bahasa Melayu, anda akan melihat Bahasa Inggeris apabila Bahasa Melayu tiada dalam penterjemahan." learn_more: "Ketahui lebih lanjut untuk menjadi ahli Diplomat" # subscribe_as_diplomat: "Subscribe as a Diplomat" @@ -129,35 +131,35 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # saturation: "Saturation" # lightness: "Lightness" -# account_settings: + account_settings: # title: "Account Settings" -# not_logged_in: "Log in or create an account to change your settings." -# autosave: "Changes Save Automatically" -# me_tab: "Me" -# picture_tab: "Picture" + not_logged_in: "Daftar masuk atau buat account untuk menukar \"setting\" anda." + autosave: "Pengubahsuaian disimpan secara automatik" + me_tab: "Saya" + picture_tab: "Gambar" # wizard_tab: "Wizard" -# password_tab: "Password" -# emails_tab: "Emails" + password_tab: "Kata-laluan" + emails_tab: "Kesemua E-mel" # admin: "Admin" -# gravatar_select: "Select which Gravatar photo to use" -# gravatar_add_photos: "Add thumbnails and photos to a Gravatar account for your email to choose an image." -# gravatar_add_more_photos: "Add more photos to your Gravatar account to access them here." + gravatar_select: "Pilih mana gambar Gravatar photo digunakan" + gravatar_add_photos: "Tambah thumbnail and gambar-gambar kepada akaun Gravatar untuk emel anda untuk pilih imej." + gravatar_add_more_photos: "Tambah lebih gambar kepada akaun Gravatar dan aksess dari sana." # wizard_color: "Wizard Clothes Color" -# new_password: "New Password" -# new_password_verify: "Verify" + new_password: "Kata-laluan baru" + new_password_verify: "Verifikasi" # email_subscriptions: "Email Subscriptions" -# email_announcements: "Announcements" -# email_notifications: "Notifications" + email_announcements: "Pengumuman" + email_notifications: "Notifikasi" # email_notifications_description: "Get periodic notifications for your account." # email_announcements_description: "Get emails on the latest news and developments at CodeCombat." # contributor_emails: "Contributor Class Emails" -# contribute_prefix: "We're looking for people to join our party! Check out the " -# contribute_page: "contribute page" -# contribute_suffix: " to find out more." + contribute_prefix: "Kami sedang mencari orang untuk masuk 'parti' kami! Sila semak kepada " + contribute_page: "Laman untuk sumbangan" + contribute_suffix: " untuk mengetahui lebih lanjut." # email_toggle: "Toggle All" -# error_saving: "Error Saving" -# saved: "Changes Saved" -# password_mismatch: "Password does not match." + error_saving: "Masalah menyimpan" + saved: "Pengubahsuian disimpan" + password_mismatch: "Kata-laluan tidak sama." account_profile: # edit_settings: "Edit Settings" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -332,7 +338,7 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa version: "Versi" commit_msg: "Mesej Commit" # history: "History" -# version_history_for: "Version History for: " + version_history_for: "Versi History untuk: " result: "Keputusan" results: "Keputusan-keputusan" description: "Deskripsi" @@ -356,16 +362,16 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa about: who_is_codecombat: "Siapa adalah CodeCombat?" why_codecombat: "Kenapa CodeCombat?" - who_description_prefix: "bersama memulai CodeCombat in 2013. Kami juga membuat (mengaturcara) " + who_description_prefix: "bersama memulai CodeCombat dalam 2013. Kami juga membuat (mengaturcara) " who_description_suffix: "dalam 2008, mengembangkan ia kepada applikasi iOS dan applikasi web #1 untuk belajar menaip dalam karakter Cina dan Jepun." who_description_ending: "Sekarang, sudah tiba masanya untuk mengajar orang untuk menaip kod." # why_paragraph_1: "When making Skritter, George didn't know how to program and was constantly frustrated by his inability to implement his ideas. Afterwards, he tried learning, but the lessons were too slow. His housemate, wanting to reskill and stop teaching, tried Codecademy, but \"got bored.\" Each week another friend started Codecademy, then dropped off. We realized it was the same problem we'd solved with Skritter: people learning a skill via slow, intensive lessons when what they need is fast, extensive practice. We know how to fix that." why_paragraph_2: "Mahu belajar untuk membina kod? Anda tidak perlu membaca dan belajar. Anda perlu menaip kod yang banyak dan bersuka-suka dengan masa yang terluang." - why_paragraph_3_prefix: "Itulah semua tentang pengaturcaraan. Ia harus membuat anda gembira dan rasa berpuas hati. Tidak seperti" + why_paragraph_3_prefix: "Itulah semua mengenai pengaturcaraan. Ia harus membuat anda gembira dan rasa berpuas hati. Tidak seperti" why_paragraph_3_italic: "yay satu badge" why_paragraph_3_center: "tapi bersukaria seperti" why_paragraph_3_italic_caps: "TIDAK MAK SAYA PERLU HABISKAN LEVEL!" - why_paragraph_3_suffix: "Itulah kenapa CodeCombat adalah permainan multiplayer, tapi bukan sebuah khursus dibuat sebagai permainan. Kami tidak akan berhenti sehingga kamu tidak akan--tetapi buat masa kini, itulah perkara yang baik." + why_paragraph_3_suffix: "Itulah kenapa CodeCombat adalah permainan multiplayer, tapi bukan sebuah khursus dibuat sebagai permainan. Kami tidak akan berhenti sehingga anda tidak--tetapi buat masa kini, itulah perkara yang terbaik." why_paragraph_4: "Jika kamu mahu berasa ketagih terhadap sesuatu permainan komputer, jadilah ketagih kepada permainan ini dan jadilah seorang pakar dalam zaman teknologi terkini." why_ending: "Dan ia adalah percuma! " why_ending_url: "Mulalah bermain sekarang!" @@ -376,14 +382,14 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # michael_description: "Programmer, sys-admin, and undergrad technical wunderkind, Michael is the person keeping our servers online." # glen_description: "Programmer and passionate game developer, with the motivation to make this world a better place, by developing things that matter. The word impossible can't be found in his dictionary. Learning new skills is his joy!" -# legal: -# page_title: "Legal" -# opensource_intro: "CodeCombat is free to play and completely open source." -# opensource_description_prefix: "Check out " -# github_url: "our GitHub" -# opensource_description_center: "and help out if you like! CodeCombat is built on dozens of open source projects, and we love them. See " + legal: + page_title: "Undang-Undang" + opensource_intro: "CodeCombat adalah percuma untuk bermain dan adalah open source." + opensource_description_prefix: "Sila lihat " + github_url: "GitHub kami" + opensource_description_center: "dan sumbang seberapa mampu! CodeCombat dibina atas beberapa projek open source, dan kami menyukainya. Sila lihat " # archmage_wiki_url: "our Archmage wiki" -# opensource_description_suffix: "for a list of the software that makes this game possible." + opensource_description_suffix: "senarai sofwe yang membolehkan permainan ini berfungsi." # practices_title: "Respectful Best Practices" # practices_description: "These are our promises to you, the player, in slightly less legalese." # privacy_title: "Privacy" @@ -395,26 +401,27 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # email_settings_url: "your email settings" # email_description_suffix: "or through links in the emails we send, you can change your preferences and easily unsubscribe at any time." # cost_title: "Cost" -# cost_description: "Currently, CodeCombat is 100% free! One of our main goals is to keep it that way, so that as many people can play as possible, regardless of place in life. If the sky darkens, we might have to charge subscriptions or for some content, but we'd rather not. With any luck, we'll be able to sustain the company with:" + cost_description: "Buat masa ini, CodeCombat adalah 100% percuma! salah satu daripada tujuan kami adalah untuk membiarkan ia sebegitu, supaya ramai boleh bermain, di mana sahaja mereka berada. Jikalau langit menjadi gelap untuk kami, kami akan mengecaj untuk langganan atau untuk beberapa muatan, tapi kami lebih suka untuk tidak berbuat demikian. Jika kami bernasib baik, kami dapat menanggung syarikat kami dengan:" + # recruitment_title: "Recruitment" # recruitment_description_prefix: "Here on CodeCombat, you're going to become a powerful wizard–not just in the game, but also in real life." # url_hire_programmers: "No one can hire programmers fast enough" # recruitment_description_suffix: "so once you've sharpened your skills and if you agree, we will demo your best coding accomplishments to the thousands of employers who are drooling for the chance to hire you. They pay us a little, they pay you" # recruitment_description_italic: "a lot" # recruitment_description_ending: "the site remains free and everybody's happy. That's the plan." -# copyrights_title: "Copyrights and Licenses" -# contributor_title: "Contributor License Agreement" -# contributor_description_prefix: "All contributions, both on the site and on our GitHub repository, are subject to our" + copyrights_title: "Hakcipta dan Pemelesenan" + contributor_title: "Persetujuan Lesen Penyumbang" + contributor_description_prefix: "Kesemua sumbangan, termasuk di dalam laman dan di dalam repositiri GitHub, tertakluk kepada" # cla_url: "CLA" -# contributor_description_suffix: "to which you should agree before contributing." + contributor_description_suffix: "di mana harus dipersetujui sebelum menyumbang." # code_title: "Code - MIT" -# code_description_prefix: "All code owned by CodeCombat or hosted on codecombat.com, both in the GitHub repository or in the codecombat.com database, is licensed under the" + code_description_prefix: "Kesemua kod yang dimiliki CodeCombat atau dihos di codecombat.com, termasuk di dalam repositori GitHub dan database codecombat.com, dilesenkan di bawah" # mit_license_url: "MIT license" -# code_description_suffix: "This includes all code in Systems and Components that are made available by CodeCombat for the purpose of creating levels." + code_description_suffix: "Ini termasuk kesemua kod Sistem dan Komponen yang sudah sedia ada untuk CodeCombat untuk membina level." # art_title: "Art/Music - Creative Commons " -# art_description_prefix: "All common content is available under the" + art_description_prefix: "Kesemua muatan umum boleh didapat di bawah" # cc_license_url: "Creative Commons Attribution 4.0 International License" -# art_description_suffix: "Common content is anything made generally available by CodeCombat for the purpose of creating Levels. This includes:" +# art_description_suffix: "Common content is anything made generally available by CodeCombat for the purpose of creating Levels. This includes:" # art_music: "Music" # art_sound: "Sound" # art_artwork: "Artwork" @@ -466,9 +473,9 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/nb.coffee b/app/locale/nb.coffee index 19cefee72..6035495d4 100644 --- a/app/locale/nb.coffee +++ b/app/locale/nb.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg # sending: "Sending..." cancel: "Avbryt" # save: "Save" +# create: "Create" delay_1_sec: "1 sekunder" delay_3_sec: "3 sekunder" delay_5_sec: "5 sekunder" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg login: sign_up: "Lag konto" log_in: "Logg Inn" +# logging_in: "Logging In" log_out: "Logg Ut" recover: "gjenåpne konto" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/nl-BE.coffee b/app/locale/nl-BE.coffee index b790f13da..bcc6c0875 100644 --- a/app/locale/nl-BE.coffee +++ b/app/locale/nl-BE.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: sending: "Verzenden..." cancel: "Annuleren" save: "Opslagen" + create: "Creëer" delay_1_sec: "1 seconde" delay_3_sec: "3 secondes" delay_5_sec: "5 secondes" @@ -12,13 +13,13 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: fork: "Fork" play: "Spelen" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + units: + second: "seconde" + seconds: "seconden" + minute: "minuut" + minutes: "minuten" + hour: "uur" + hours: "uren" modal: close: "Sluiten" @@ -39,19 +40,20 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: about: "Over Ons" contact: "Contact" twitter_follow: "Volgen" - employers: "Werknemers" + employers: "Werkgevers" versions: save_version_title: "Nieuwe versie opslagen" new_major_version: "Nieuwe hoofd versie" - cla_prefix: "Om bewerkingen op te slagen, moet je eerst akkoord gaan met onze" + cla_prefix: "Om bewerkingen op te slaan, moet je eerst akkoord gaan met onze" cla_url: "CLA" cla_suffix: "." cla_agree: "IK GA AKKOORD" login: - sign_up: "Account Maken" + sign_up: "Account maken" log_in: "Inloggen" + logging_in: "Bezig met inloggen" log_out: "Uitloggen" recover: "account herstellen" @@ -60,7 +62,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: send_password: "Verzend nieuw wachtwoord" signup: - create_account_title: "Maak een account aan om je progressie op te slagen" + create_account_title: "Maak een account aan om je vooruitgang op te slaan" description: "Het is gratis. We hebben maar een paar dingen nodig en dan kan je aan de slag:" email_announcements: "Ontvang aankondigingen via email" coppa: "13+ of niet uit de VS" @@ -78,7 +80,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: old_browser_suffix: "Je kan toch proberen, maar het zal waarschijnlijk niet werken!" campaign: "Campagne" for_beginners: "Voor Beginners" -# multiplayer: "Multiplayer" + multiplayer: "Multiplayer" for_developers: "Voor ontwikkelaars" play: @@ -87,7 +89,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: adventurer_forum: "het Avonturiersforum" adventurer_suffix: "." campaign_beginner: "Beginnercampagne" - campaign_beginner_description: "... waarin je de toverkunst van programmeren leert." + campaign_beginner_description: "... waarin je de toverkunst van het programmeren leert." campaign_dev: "Willekeurige moeilijkere levels" campaign_dev_description: "... waarin je de interface leert kennen terwijl je wat moeilijkers doet." campaign_multiplayer: "Multiplayer Arena's" @@ -96,7 +98,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: campaign_player_created_description: "... waarin je ten strijde trekt tegen de creativiteit van andere Ambachtelijke Tovenaars." level_difficulty: "Moeilijkheidsgraad: " play_as: "Speel als " - spectate: "Schouw toe" + spectate: "Toeschouwen" contact: contact_us: "Contact opnemen met CodeCombat" @@ -126,19 +128,19 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: spell: "Spreuk" boots: "Laarzen" hue: "Hue" - saturation: "Saturation" - lightness: "Lightness" + saturation: "Saturatie" + lightness: "Helderheid" account_settings: title: "Account Instellingen" - not_logged_in: "Log in of maak een account om je instellingen aan te passen." + not_logged_in: "Log in of maak een account aan om je instellingen aan te passen." autosave: "Aanpassingen Automatisch Opgeslagen" me_tab: "Ik" picture_tab: "Afbeelding" wizard_tab: "Tovenaar" password_tab: "Wachtwoord" emails_tab: "Emails" -# admin: "Admin" + admin: "Administrator" gravatar_select: "Selecteer welke Gravatar foto je wilt gebruiken" gravatar_add_photos: "Voeg thumbnails en foto's toe aan je Gravatar account, gekoppeld aan jouw email-adres, om een afbeelding te kiezen." gravatar_add_more_photos: "Voeg meer afbeeldingen toe aan je Gravatar account om ze hier te gebruiken." @@ -151,8 +153,8 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: email_notifications_description: "Krijg periodieke meldingen voor jouw account." email_announcements_description: "Verkrijg emails over het laatste nieuws en de ontwikkelingen bij CodeCombat." contributor_emails: "Medewerker Klasse emails" - contribute_prefix: "We zoeken mensen om bij ons feest aan te voegen! Bekijk de " - contribute_page: "contributiepagina" + contribute_prefix: "We zoeken mensen om met ons te komen feesten! Bekijk de " + contribute_page: "bijdragepagina" contribute_suffix: " om meer te weten te komen." email_toggle: "Vink alles aan/af" error_saving: "Fout Tijdens Het Opslaan" @@ -162,7 +164,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: account_profile: edit_settings: "Instellingen Aanpassen" profile_for_prefix: "Profiel voor " -# profile_for_suffix: "" + profile_for_suffix: "" profile: "Profiel" user_not_found: "Geen gebruiker gevonden. Controleer de URL?" gravatar_not_found_mine: "We konden geen account vinden gekoppeld met:" @@ -190,9 +192,9 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: reload_title: "Alle Code Herladen?" reload_really: "Weet je zeker dat je dit level tot het begin wilt herladen?" reload_confirm: "Herlaad Alles" -# victory_title_prefix: "" + victory_title_prefix: "" victory_title_suffix: " Compleet" - victory_sign_up: "Schrijf je in om je progressie op te slaan" + victory_sign_up: "Schrijf je in om je vooruitgang op te slaan" victory_sign_up_poke: "Wil je jouw code opslaan? Maak een gratis account aan!" victory_rate_the_level: "Beoordeel het level: " victory_rank_my_game: "Rankschik mijn Wedstrijd" @@ -224,45 +226,49 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: skip_tutorial: "Overslaan (esc)" editor_config: "Editor Configuratie" editor_config_title: "Editor Configuratie" + editor_config_language_label: "Programmeertaal" + editor_config_language_description: "Definieer de programmeertaal waarin jij wilt programmeren." editor_config_keybindings_label: "Toets instellingen" -# editor_config_keybindings_default: "Default (Ace)" + editor_config_keybindings_default: "Standaard (Ace)" editor_config_keybindings_description: "Voeg extra shortcuts toe van de gebruikelijke editors." editor_config_invisibles_label: "Toon onzichtbare" editor_config_invisibles_description: "Toon onzichtbare whitespace karakters." editor_config_indentguides_label: "Toon inspringing regels" editor_config_indentguides_description: "Toon verticale hulplijnen om de zichtbaarheid te verbeteren." editor_config_behaviors_label: "Slim gedrag" - editor_config_behaviors_description: "Auto-aanvulling (gekrulde) haakjes en aanhalingstekens." -# loading_ready: "Ready!" -# 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." -# tip_guide_exists: "Click the guide at the top of the page for useful info." -# tip_open_source: "CodeCombat is 100% open source!" -# tip_beta_launch: "CodeCombat launched its beta in October, 2013." -# tip_js_beginning: "JavaScript is just the beginning." -# tip_autocast_setting: "Adjust autocast settings by clicking the gear on the cast button." -# think_solution: "Think of the solution, not the problem." -# tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra" -# tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis" -# tip_debugging_program: "If debugging is the process of removing bugs, then programming must be the process of putting them in. - Edsger W. Dijkstra" -# tip_forums: "Head over to the forums and tell us what you think!" -# tip_baby_coders: "In the future, even babies will be Archmages." -# tip_morale_improves: "Loading will continue until morale improves." -# tip_all_species: "We believe in equal opportunities to learn programming for all species." + editor_config_behaviors_description: "Automatisch aanvullen van (gekrulde) haakjes en aanhalingstekens." + loading_ready: "Klaar!" + tip_insert_positions: "Shift+Klik een punt op de kaart om het toe te voegen aan je spreuk editor." + tip_toggle_play: "Verwissel speel/pauze met Ctrl+P." + tip_scrub_shortcut: "Ctrl+[ en Ctrl+] om terug te spoelen en vooruit te spoelen." + tip_guide_exists: "Klik op de handleiding bovenaan het scherm voor nuttige informatie." + tip_open_source: "CodeCombat is 100% open source!" + tip_beta_launch: "CodeCombat lanceerde zijn beta versie in Oktober, 2013." + tip_js_beginning: "JavaScript is nog maar het begin." + tip_autocast_setting: "Verander de autocast instelling door te klikken op het tandwiel naast de cast knop." + think_solution: "Denk aan de oplossing, niet aan het probleem" + tip_theory_practice: "In theorie is er geen verschil tussen de theorie en de praktijk; in de praktijk is er wel een verschil. - Yogi Berra" + tip_error_free: "Er zijn twee manieren om fout-vrije code te schrijven, maar enkele de derde manier werkt. - Alan Perlis" + tip_debugging_program: "Als debuggen het proces is om bugs te verwijderen, dan moet programmeren het proces zijn om ze erin te stoppen. - Edsger W. Dijkstra" + tip_forums: "Ga naar de forums en vertel ons wat je denkt!" + tip_baby_coders: "Zelfs babies zullen in de toekomst een Tovenaar zijn." + tip_morale_improves: "Het spel zal blijven laden tot de moreel verbeterd." + tip_all_species: "Wij geloven in gelijke kansen voor alle wezens om te leren programmeren." # tip_reticulating: "Reticulating spines." -# tip_harry: "Yer a Wizard, " -# tip_great_responsibility: "With great coding skill comes great debug responsibility." -# tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep." -# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't." -# tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda" -# tip_no_try: "Do. Or do not. There is no try. - Yoda" -# tip_patience: "Patience you must have, young Padawan. - Yoda" -# tip_documented_bug: "A documented bug is not a bug; it is a feature." -# tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" -# time_current: "Now:" -# time_total: "Max:" -# time_goto: "Go to:" + tip_harry: "Je bent een tovenaar, " + tip_great_responsibility: "Met een groots talent voor programmeren komt een grootse debug verantwoordelijkheid." + tip_munchkin: "Als je je groentjes niet opeet zal een munchkin je ontvoeren terwijl je slaapt." + tip_binary: "Er zijn 10 soorten mensen in de wereld: Mensen die binair kunnen tellen en mensen die dat niet kunnen." + tip_commitment_yoda: "Een programmeur moet de grootste inzet hebben, een meest serieuze geest. ~ Yoda" + tip_no_try: "Doe het. Of doe het niet. Je kunt niet proberen. - Yoda" + tip_patience: "Geduld moet je hebben, jonge Padawan. - Yoda" + tip_documented_bug: "Een gedocumenteerde fout is geen fout; het is deel van het programma." + tip_impossible: "Het lijkt altijd onmogelijk tot het gedaan wordt. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" + time_current: "Nu:" + time_total: "Maximum:" + time_goto: "Ga naar:" admin: av_title: "Administrator panels" @@ -273,7 +279,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: av_other_debug_base_url: "Base (om base.jade te debuggen)" u_title: "Gebruikerslijst" lg_title: "Laatste Spelletjes" -# clas: "CLAs" + clas: "CLAs" editor: main_title: "CodeCombat Editors" @@ -281,10 +287,10 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: article_title: "Artikel Editor" article_description: "Schrijf artikels die spelers een overzicht geven over programmeer concepten die kunnen gebruikt worden over een variëteit van levels en campagnes." thang_title: "Thang Editor" - thang_description: "Maak eenheden, beschrijf hun standaard logica, graphics en audio. Momenteel is enkel het importeren van vector graphics geëxporteerd in Flash ondersteund." + thang_description: "Maak eenheden, beschrijf hun standaard logica, graphics en audio. Momenteel is enkel het importeren van vector graphics geëxporteerd uit Flash ondersteund." level_title: "Level Editor" - level_description: "Bevat het programma om te programmeren, audio te uploaden en aangepaste logica te creëren om alle soorten levels te maken. Het is alles wat wijzelf ook gebruiken!" - security_notice: "Veel belangrijke elementen in deze editors zijn momenteel niet actief. Met dat wij de veiligheid van deze systemen verbeteren, zullen ook deze elementen beschikbaar worden. Indien u deze elementen al eerder wil gebruiken, " + level_description: "Bevat de benodigdheden om scripts te schrijven, audio te uploaden en aangepaste logica te creëren om alle soorten levels te maken. Het is alles wat wij zelf ook gebruiken!" + security_notice: "Veel belangrijke elementen in deze editors zijn momenteel niet actief. Als wij de veiligheid van deze systemen verbeteren, zullen ook deze elementen beschikbaar worden. Indien u deze elementen al eerder wil gebruiken, " contact_us: "contacteer ons!" hipchat_prefix: "Je kan ons ook vinden in ons" hipchat_url: "(Engelstalig) HipChat kanaal." @@ -301,7 +307,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: level_tab_thangs_add: "Voeg element toe" level_settings_title: "Instellingen" level_component_tab_title: "Huidige Componenten" - level_component_btn_new: "Maak een nieuw component aan" + level_component_btn_new: "Maak een nieuwe component aan" level_systems_tab_title: "Huidige Systemen" level_systems_btn_new: "Maak een nieuw systeem aan" level_systems_btn_add: "Voeg Systeem toe" @@ -312,7 +318,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: level_component_settings: "Instellingen" level_system_edit_title: "Wijzig Systeem" create_system_title: "Maak een nieuw Systeem aan" - new_component_title: "Maak een nieuw Component aan" + new_component_title: "Maak een nieuwe Component aan" new_component_field_system: "Systeem" new_article_title: "Maak een Nieuw Artikel" new_thang_title: "Maak een Nieuw Thang Type" @@ -348,7 +354,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: score: "Score" win: "Win" loss: "Verlies" - tie: "Gelijk" + tie: "Gelijkstand" easy: "Gemakkelijk" medium: "Medium" hard: "Moeilijk" @@ -359,7 +365,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: who_description_prefix: "hebben samen CodeCombat opgericht in 2013. We creëerden ook " who_description_suffix: "en in 2008, groeide het uit tot de #1 web en iOS applicatie om Chinese en Japanse karakters te leren schrijven." who_description_ending: "Nu is het tijd om mensen te leren programmeren." - why_paragraph_1: "Tijdens het maken van Skritter wist George niet hoe hij moest programmeren en was hij constant gefrustreerd doordat hij zijn ideeën niet kon verwezelijken. Nadien probeerde hij te studeren maar de lessen gingen te traag. Ook zijn huisgenoot wou opnieuw studeren en stopte met lesgeven. Hij probeerde Codecademy maar was al snel \"verveeld\". Iedere week startte een andere vriend met Codecademy, met telkens als resultaat dat hij/zij vrij snel met de lessen stopte. We realiseerden ons dat het hetzelfde probleem was zoals we al eerder hadden opgelost met Skritter: mensen leren iets via langzame en intensieve lessen, terwijl ze het eigenlijk zo snel mogelijk nodig hebben via uitgebreide oefeningen. Wij weten hoe dat op te lossen." + why_paragraph_1: "Tijdens het maken van Skritter wist George niet hoe hij moest programmeren en was hij constant gefrustreerd doordat hij zijn ideeën niet kon verwezelijken. Nadien probeerde hij te studeren maar de lessen gingen te traag. Ook zijn huisgenoot wou opnieuw studeren en stopte met lesgeven. Hij probeerde Codecademy maar was al snel \"verveeld\". Iedere week startte een andere vriend met Codecademy, met telkens als resultaat dat hij/zij vrij snel met de lessen stopte. We realiseerden ons dat het hetzelfde probleem was zoals we al eerder hadden opgelost met Skritter: mensen leren iets via langzame en intensieve lessen, terwijl ze eigenlijk beter een snelle en uitgebreide opleiding nodig hebben. Wij weten hoe dat op te lossen." why_paragraph_2: "Wil je leren programmeren? Je hebt geen lessen nodig. Je moet vooral veel code schrijven en je amuseren terwijl je dit doet." why_paragraph_3_prefix: "Dat is waar programmeren om draait. Het moet tof zijn. Niet tof zoals" why_paragraph_3_italic: "joepie een medaille" @@ -381,13 +387,13 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: opensource_intro: "CodeCombat is gratis en volledig open source." opensource_description_prefix: "Bekijk " github_url: "onze GitHub" - opensource_description_center: "en help ons als je wil! CodeCombat is gebouwd met de hulp van duizende open source projecten, en wij zijn er gek van. Bekijk ook " + opensource_description_center: "en help ons als je wil! CodeCombat is gebouwd met de hulp van tientallen open source projecten, en wij zijn er gek op. Bekijk ook " archmage_wiki_url: "onze Tovenaar wiki" - opensource_description_suffix: "voor een lijst van de software dat dit spel mogelijk maakt." + opensource_description_suffix: "voor een lijst van de software die dit spel mogelijk maakt." practices_title: "Goede Respectvolle gewoonten" - practices_description: "Dit zijn onze beloften aan u, de speler, en iets minder juridische jargon." + practices_description: "Dit zijn onze beloften aan u, de speler, in een iets minder juridische jargon." privacy_title: "Privacy" - privacy_description: "We zullen nooit jouw persoonlijke informatie verkopen. We willen geld verdienen dankzij aanwerving in verloop van tijd, maar je mag op je twee oren slapen dat wij nooit jouw persoonlijke informatie zullen verspreiden aan geïnteresseerde bedrijven zonder dat jij daar expliciet mee akkoord gaat." + privacy_description: "We zullen nooit jouw persoonlijke informatie verkopen. We willen in verloop van tijd geld verdienen dankzij aanwervingen, maar je mag op je beide oren slapen dat wij nooit jouw persoonlijke informatie zullen verspreiden aan geïnteresseerde bedrijven zonder dat jij daar expliciet mee akkoord gaat." security_title: "Beveiliging" security_description: "We streven ernaar om jouw persoonlijke informatie veilig te bewaren. Onze website is open en beschikbaar voor iedereen, opdat ons beveiliging systeem kan worden nagekeken en geoptimaliseerd door iedereen die dat wil. Dit alles is mogelijk doordat we volledig open source en transparant zijn." email_title: "E-mail" @@ -399,7 +405,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: recruitment_title: "Aanwervingen" recruitment_description_prefix: "Hier bij CodeCombat, ga je ontplooien tot een krachtige tovenoor-niet enkel virtueel, maar ook in het echt." url_hire_programmers: "Niemand kan snel genoeg programmeurs aanwerven" - recruitment_description_suffix: "dus eenmaal je jouw vaardigheden hebt aangescherp en ermee akkoord gaat, zullen we jouw beste codeer prestaties voorstellen aan duizenden bedrijven die niet kunnen wachten om jou aan te werven. Zij betalen ons een beetje, maar betalen jou" + recruitment_description_suffix: "dus eenmaal je jouw vaardigheden hebt aangescherp en ermee akkoord gaat, zullen we jouw beste programmeer prestaties voorstellen aan duizenden werkgevers die niet kunnen wachten om jou aan te werven. Zij betalen ons een beetje, maar betalen jou" recruitment_description_italic: "enorm veel" recruitment_description_ending: "de site blijft volledig gratis en iedereen is gelukkig. Dat is het plan." copyrights_title: "Auteursrechten en licenties" @@ -408,25 +414,25 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: cla_url: "CLA" contributor_description_suffix: "waarmee je moet akkoord gaan voordat wij jouw bijdragen kunnen gebruiken." code_title: "Code - MIT" - code_description_prefix: "Alle code in het bezit van CodeCombat of aanwezig op codecombat.com, zowel in de GitHub respository of in de codecombat.com database, is erkend onder de" + code_description_prefix: "Alle code in het bezit van CodeCombat of aanwezig op codecombat.com, zowel in de GitHub respository als in de codecombat.com database, is erkend onder de" mit_license_url: "MIT licentie" - code_description_suffix: "Dit geldt ook voor code in Systemen en Componenten dat publiekelijk is gemaakt met als doelstellingen het maken van levels." + code_description_suffix: "Dit geldt ook voor code in Systemen en Componenten dat publiek is gemaakt met als doel het maken van levels." art_title: "Art/Music - Creative Commons " art_description_prefix: "Alle gemeenschappelijke inhoud valt onder de" cc_license_url: "Creative Commons Attribution 4.0 Internationale Licentie" - art_description_suffix: "Gemeenschappelijke inhoud is alles dat algemeen verkrijgbaar is bij CodeCombat voor het doel levels te maken. Dit omvat:" + art_description_suffix: "Gemeenschappelijke inhoud is alles dat algemeen verkrijgbaar is bij CodeCombat met als doel levels te maken. Dit omvat:" art_music: "Muziek" art_sound: "Geluid" - art_artwork: "Artwork" + art_artwork: "Illustraties" art_sprites: "Sprites" art_other: "Eender wat en al het creatief werk dat niet als code aanzien wordt en verkrijgbaar is bij het aanmaken van levels." - art_access: "Momenteel is er geen universeel en gebruiksvriendelijk systeem voor het ophalen van deze assets. In het algemeen, worden deze opgehaald via de links zoals gebruikt door de website. Contacteer ons voor assitentie, of help ons met de website uit te breiden en de assets bereikbaarder te maken." + art_access: "Momenteel is er geen universeel en gebruiksvriendelijk systeem voor het ophalen van deze assets. In het algemeen, worden deze opgehaald via de links zoals gebruikt door de website. Contacteer ons voor assistentie, of help ons met de website uit te breiden en de assets bereikbaarder te maken." art_paragraph_1: "Voor toekenning, gelieve de naam en link naar codecombat.com te plaatsen waar dit passend is voor de vorm waarin het voorkomt. Bijvoorbeeld:" use_list_1: "Wanneer gebruikt in een film of een ander spel, voeg codecombat.com toe in de credits." - use_list_2: "Wanneer toegepast op een website, inclusief een link naar het gebruik, bijvoorbeeld onderaan een afbeelding. Of in een algemene webpagina waar je eventueel ook andere Create Commons werken en open source software vernoemd die je gebruikt op de website. Iets dat alreeds duidelijk is gespecificeerd met CodeCombat, zoals een blog artikel, dat CodeCombat vernoemt, heeft geen aparte vermelding nodig." - art_paragraph_2: "Wanneer de gebruikte inhoud is gemaakt door een gebruiker van codecombat.com, vernoem hem/haar in plaats van ons en volg verspreidingsaanwijzingen van die brons als die er zijn." + use_list_2: "Wanneer toegepast op een website, inclusief een link naar het gebruik, bijvoorbeeld onderaan een afbeelding. Of in een algemene webpagina waar je eventueel ook andere Creative Commons werken en open source software vernoemd die je gebruikt op de website. Iets dat al duidelijk gerelateerd is met CodeCombat, zoals een blog artikel dat CodeCombat vernoemd, heeft geen aparte vermelding nodig." + art_paragraph_2: "Wanneer de gebruikte inhoud is gemaakt door een gebruiker van codecombat.com, vernoem hem/haar in plaats van ons en volg toekenningsaanwijzingen als deze in de beschrijving van de bron staan." rights_title: "Rechten Voorbehouden" - rights_desc: "Alle rechten zijn voorbehouden voor de Levels. Dit omvat:" + rights_desc: "Alle rechten zijn voorbehouden voor de Levels zelf. Dit omvat:" rights_scripts: "Scripts" rights_unit: "Eenheid Configuratie" rights_description: "Beschrijvingen" @@ -443,77 +449,77 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: introduction_desc_intro: "We hebben hoge verwachtingen over CodeCombat." introduction_desc_pref: "We willen zijn waar programmeurs van alle niveaus komen om te leren en samen te spelen, anderen introduceren aan de wondere wereld van code, en de beste delen van de gemeenschap te reflecteren. We kunnen en willen dit niet alleen doen; wat projecten zoals GitHub, Stack Overflow en Linux groots en succesvol maken, zijn de mensen die deze software gebruiken en verbeteren. Daartoe, " introduction_desc_github_url: "CodeCombat is volledig open source" - introduction_desc_suf: ", en we mikken ernaar om zoveel mogelijk manieren mogelijk maken voor u om deel te nemen en dit project van zowel jou als ons te maken." + introduction_desc_suf: ", en we streven ernaar om op zoveel mogelijk manieren het mogelijk te maken voor u om deel te nemen en dit project van zowel jou als ons te maken." introduction_desc_ending: "We hopen dat je met ons meedoet!" introduction_desc_signature: "- Nick, George, Scott, Michael, Jeremy en Glen" alert_account_message_intro: "Hallo!" alert_account_message_pref: "Om je te abonneren voor de klasse e-mails, moet je eerst " alert_account_message_suf: "." alert_account_message_create_url: "een account aanmaken" - archmage_summary: "Geïnteresserd in werken aan game graphics, user interface design, database- en serverorganisatie, multiplayer networking, physics, geluid of game engine prestaties? Wil jij helpen een game te bouwen wat anderen leert waar jij goed in bent? We moeten nog veel doen en als jij een ervaren programmeur bent en wil ontwikkelen voor CodeCombat, dan is dit de klasse voor jou. We zouden graag je hulp hebben bij het maken van de beste programmeergame ooit." - archmage_introduction: "Een van de beste aspecten aan het maken van spelletjes is dat zij zoveel verschillende zaken omvatten. Visualisaties, geluid, real-time netwerken, sociale netwerken, en natuurlijk veel van de voorkomende aspecten van programmeren, van low-level database beheer en server administratie tot gebruiksvriendelijke interfaces maken. Er is veel te doen, en als jij een ervaren programmeur bent met de motivatie om je handen veel te maken met CodeCombat, dan ben je de tovenaar die wij zoeken! We zouden graag jouw help hebben met het bouwen aan het allerbeste programmeerspel ooit." + archmage_summary: "Geïnteresserd in het werken aan game graphics, user interface design, database- en serverorganisatie, multiplayer networking, physics, geluid of game engine prestaties? Wil jij helpen een game te bouwen wat anderen leert waar jij goed in bent? We moeten nog veel doen en als jij een ervaren programmeur bent en wil ontwikkelen voor CodeCombat, dan is dit de klasse voor jou. We zouden graag je hulp hebben bij het maken van de beste programmeergame ooit." + archmage_introduction: "Een van de beste aspecten aan het maken van spelletjes is dat zij zoveel verschillende zaken omvatten. Visualisaties, geluid, real-time netwerken, sociale netwerken, en natuurlijk enkele veelvoorkomende aspecten van programmeren, van low-level database beheer en server administratie tot gebruiksvriendelijke interfaces maken. Er is veel te doen, en als jij een ervaren programmeur bent met de motivatie om je volledig te verdiepen in de details van CodeCombat, dan ben je de tovenaar die wij zoeken! We zouden graag jouw hulp krijgen bij het bouwen van het allerbeste programmeerspel ooit." class_attributes: "Klasse kenmerken" archmage_attribute_1_pref: "Ervaring met " archmage_attribute_1_suf: ", of de wil om het te leren. De meeste van onze code is in deze taal. Indien je een fan van Ruby of Python bent, zal je je meteen thuis voelen! Het is zoals JavaScript, maar met een mooiere syntax." archmage_attribute_2: "Ervaring in programmeren en individueel initiatief. We kunnen jou helpen bij het opstarten, maar kunnen niet veel tijd spenderen om je op te leiden." how_to_join: "Hoe deel te nemen" join_desc_1: "Iedereen kan helpen! Bekijk onze " - join_desc_2: "om te starten, en vink het vierkantje hieronder aan om jouzelf te abonneren als dappere tovenaar en het laatste magische nieuws te ontvangen. Wil je met ons praten over wat er te doen is of hoe je nog meer met ons kan samenwerken? " + join_desc_2: "om te starten, en vink het vierkantje hieronder aan om jezelf te abonneren als dappere tovenaar en het laatste magische nieuws te ontvangen. Wil je met ons praten over wat er te doen is of hoe je nog meer kunt helpen? " join_desc_3: ", of vind ons in " join_desc_4: "en we bekijken het verder vandaar!" join_url_email: "E-mail ons" join_url_hipchat: "ons publiek (Engelstalig) HipChat kanaal" more_about_archmage: "Leer meer over hoe je een Machtige Tovenaar kan worden" - archmage_subscribe_desc: "Ontvang e-mails met nieuwe codeer oppurtiniteiten en aankondigingen." - artisan_summary_pref: "Wil je levels ontwerpen en CodeCombat's arsenaal vergroten? Mensen spelen sneller door onze content dan wij bij kunnen houden! Op dit moment is onze level editor nog wat kaal, dus wees daarvan bewust. Levels maken zal een beetje uitdagend en buggy zijn. Als jij een visie van campagnes hebt van for-loops tot" - artisan_summary_suf: "dan is dit de klasse voor jou." - artisan_introduction_pref: "We moeten meer levels bouwen! Mensen schreeuwen om meer inhoud, en er zijn ook maar zoveel levels dat wij kunnen maken. Momenteel is jouw werkplaats level een; onze level editor is amper gebruikt door zelfs ons, wees dus voorzichtig. Indien je visioenen hebt van campagnes, gaande van for-loops tot" - artisan_introduction_suf: "dan is deze klasse waarschijnlijk iets voor jou." - artisan_attribute_1: "Enige ervaring in het maken van gelijkbare inhoud. Bijvoorbeeld ervaring het gebruiken van Blizzard's level editor. Maar dit is niet vereist!" - artisan_attribute_2: "Tot in detail testen en itereren staat voor jou gelijk aan plezier. Om goede levels te maken, moet jet het door anderen laten spelen en bereid zijn om een hele boel aan te passen." - artisan_attribute_3: "Momenteel heb je nog veel geduld nodig, doordat onze editor nog vrij ruw is en op je frustraties kan werken. Samenwerken met een Adventurer kan jou ook veel helpen." - artisan_join_desc: "Gebruik de Level Editor in deze volgorde, min of meer:" + archmage_subscribe_desc: "Ontvang e-mails met nieuwe programmeer mogelijkheden en aankondigingen." + artisan_summary_pref: "Wil je levels ontwerpen en CodeCombat's arsenaal vergroten? Mensen spelen sneller door onze content dan wij bij kunnen houden! Op dit moment is onze level editor nog wat beperkt, dus wees daarvan bewust. Het maken van levels zal een uitdaging zijn met een grote kans op fouten. Als jij een visie van campagnes hebt van for-loops tot" + artisan_summary_suf: ", dan is dit de klasse voor jou." + artisan_introduction_pref: "We moeten meer levels bouwen! Mensen schreeuwen om meer inhoud, en er zijn ook maar zoveel levels dat wij kunnen maken. Momenteel is jouw werkplaats level een; onze level editor wordt zelfs door ons amper gebruikt, dus wees voorzichtig. Indien je een visie hebt van een campagne, gaande van for-loops tot" + artisan_introduction_suf: ", dan is deze klasse waarschijnlijk iets voor jou." + artisan_attribute_1: "Enige ervaring in het maken van vergelijkbare inhoud. Bijvoorbeeld ervaring in het gebruiken van Blizzard's level editor. Maar dit is niet vereist!" + artisan_attribute_2: "Tot in het detail testen en opnieuw proberen staat voor jou gelijk aan plezier. Om goede levels te maken, moet je het door anderen laten spelen en bereid zijn om een hele boel aan te passen." + artisan_attribute_3: "Momenteel heb je nog veel geduld nodig, doordat onze editor nog vrij ruw is en op je zenuwen kan werken. Samenwerken met een Avonturier kan jou ook veel helpen." + artisan_join_desc: "Gebruik de Level Editor min of meer in deze volgorde:" artisan_join_step1: "Lees de documentatie." artisan_join_step2: "Maak een nieuw level en bestudeer reeds bestaande levels." artisan_join_step3: "Praat met ons in ons publieke (Engelstalige) HipChat kanaal voor hulp. (optioneel)" artisan_join_step4: "Maak een bericht over jouw level op ons forum voor feedback." more_about_artisan: "Leer meer over hoe je een Creatieve Ambachtsman kan worden." artisan_subscribe_desc: "Ontvang e-mails met nieuws over de Level Editor." - adventurer_summary: "Laten we duidelijk zijn over je rol: jij bent de tank. Jij krijgt de zware klappen te verduren. We hebben mensen nodig om spiksplinternieuwe levels te proberen en te kijken hoe deze beter kunnen. De pijn zal groot zijn, het maken van een goede game is een lang proces en niemand doet het de eerste keer goed. Als jij dit kan verduren en een hoge constitution score hebt, dan is dit de klasse voor jou." - adventurer_introduction: "Laten we duidelijk zijn over je rol: jij bent de tank. Jij krijgt de zware klappen te verduren. We hebben mensen nodig om spiksplinternieuwe levels te proberen en te kijken hoe deze beter kunnen. De pijn zal groot zijn, het maken van een goede game is een lang proces en niemand doet het de eerste keer goed. Als jij dit kan verduren en een hoge constitution score hebt, dan is dit de klasse voor jou." + adventurer_summary: "Laten we duidelijk zijn over je rol: jij bent de tank. Jij krijgt de zware klappen te verduren. We hebben mensen nodig om spiksplinternieuwe levels te proberen en te kijken hoe deze beter kunnen. Je zult veel afzien, want het maken van een goede game is een lang proces en niemand doet het de eerste keer goed. Als jij dit kan verduren en een hoog uihoudingsvermogen hebt, dan is dit de klasse voor jou." + adventurer_introduction: "Laten we duidelijk zijn over je rol: jij bent de tank. Jij krijgt de zware klappen te verduren. We hebben mensen nodig om spiksplinternieuwe levels uit te proberen en te kijken hoe deze beter kunnen. Je zult veel afzien.Het maken van een goede game is een lang proces en niemand doet het de eerste keer goed. Als jij dit kan verduren en een hoog uihoudingsvermogen hebt, dan is dit de klasse voor jou." adventurer_attribute_1: "Een wil om te leren. Jij wilt leren hoe je programmeert en wij willen het jou leren. Je zal overigens zelf het meeste leren doen." adventurer_attribute_2: "Charismatisch. Wees netjes maar duidelijk over wat er beter kan en geef suggesties over hoe het beter kan." - adventurer_join_pref: "Werk samen met een Ambachtsman of recruteer er een, of tik het veld hieronder aan om e-mails te ontvangen wanneer er nieuwe levels zijn om te testen. We zullen ook posten over levels die beoordeeld moeten worden op onze netwerken zoals" + adventurer_join_pref: "Werk samen met een Ambachtsman of recruteer er een, of tik het veld hieronder aan om e-mails te ontvangen wanneer er nieuwe levels zijn om te testen. We zullen ook berichten over levels die beoordeeld moeten worden op onze netwerken zoals" adventurer_forum_url: "ons forum" adventurer_join_suf: "dus als je liever op deze manier wordt geïnformeerd, schrijf je daar in!" - more_about_adventurer: "Leer meer over hoe je een dappere avonturier kunt worden." + more_about_adventurer: "Leer meer over hoe je een Dappere Avonturier kunt worden." adventurer_subscribe_desc: "Ontvang e-mails wanneer er nieuwe levels zijn die getest moeten worden." - scribe_summary_pref: "CodeCombat is meer dan slechts een aantal levels, het zal ook een bron van kennis kennis zijn en een wiki met programmeerconcepten waar levels op in kunnen gaan. Op die manier zal een Ambachtslied een link kunnen geven naar een artikel wat past bij een level. Net zoiets als het " + scribe_summary_pref: "CodeCombat is meer dan slechts een aantal levels, het zal ook een bron van kennis zijn die spelers kunnen nakijken. Op die manier zal een Ambachtsman een link kunnen geven naar een artikel dat past bij een level. Net zoiets als het " scribe_summary_suf: " heeft gebouwd. Als jij het leuk vindt programmeerconcepten uit te leggen, dan is deze klasse iets voor jou." - scribe_introduction_pref: "CodeCombat is meer dan slechts een aantal levels, het zal ook een bron van kennis kennis zijn en een wiki met programmeerconcepten waar levels op in kunnen gaan. Op die manier zal elk Ambachtslied niet in detail hoeven uit te leggen wat een vergelijkingsoperator is, maar een link kunnen geven naar een artikel wat deze informatie bevat voor de speler. Net zoiets als het " + scribe_introduction_pref: "CodeCombat is meer dan slechts een aantal levels, het zal ook een bron van kennis zijn en een wiki met programmeerconcepten waar levels op in kunnen gaan. Op die manier zal niet elke Ambachtsman in detail hoeven uit te leggen wat een vergelijkingsoperator is, maar een link kunnen geven naar een artikel die deze informatie al verduidelijkt voor speler. Net zoiets als het " scribe_introduction_url_mozilla: "Mozilla Developer Network" scribe_introduction_suf: " heeft gebouwd. Als jij het leuk vindt om programmeerconcepten uit te leggen in Markdown-vorm, dan is deze klasse wellicht iets voor jou." - scribe_attribute_1: "Taal-skills zijn praktisch alles wat je nodig hebt. Niet alleen grammatica of spelling, maar ook moeilijke ideeën overbrengen aan anderen." + scribe_attribute_1: "Taalvaardigheid is praktisch alles wat je nodig hebt. Je moet niet enkel bedreven zijn in grammatica en spelling, maar ook moeilijke ideeën kunnen overbrengen aan anderen." contact_us_url: "Contacteer ons" scribe_join_description: "vertel ons wat over jezelf, je ervaring met programmeren en over wat voor soort dingen je graag zou schrijven. Verder zien we wel!" more_about_scribe: "Leer meer over het worden van een ijverige Klerk." scribe_subscribe_desc: "Ontvang e-mails met aankondigingen over het schrijven van artikelen." - diplomat_summary: "Er is grote interesse in CodeCombat in landen waar geen Engels wordt gesproken! We zijn op zoek naar vertalers wie tijd willen spenderen aan het vertalen van de site's corpus aan woorden zodat CodeCombat zo snel mogelijk toegankelijk wordt voor heel de wereld. Als jij wilt helpen met CodeCombat internationaal maken, dan is dit de klasse voor jou." + diplomat_summary: "Er is grote interesse voor CodeCombat in landen waar geen Engels wordt gesproken! We zijn op zoek naar vertalers die tijd willen spenderen aan het vertalen van de site's corpus aan woorden zodat CodeCombat zo snel mogelijk toegankelijk wordt voor de hele wereld. Als jij wilt helpen om CodeCombat internationaal maken, dan is dit de klasse voor jou." diplomat_introduction_pref: "Dus, als er iets is wat we geleerd hebben van de " diplomat_launch_url: "release in oktober" - diplomat_introduction_suf: "dan is het wel dat er een significante interesse is in CodeCombat in andere landen, vooral Brazilië! We zijn een corps aan vertalers aan het creëren dat ijverig de ene set woorden in een andere omzet om CodeCombat zo toegankelijk te maken als mogelijk in heel de wereld. Als jij het leuk vindt glimpsen op te vangen van aankomende content en deze levels zo snel mogelijk naar je landgenoten te krijgen, dan is dit de klasse voor jou." - diplomat_attribute_1: "Vloeiend Engels en de taal waar naar je wilt vertalen kunnen spreken. Wanneer je moeilijke ideeën wilt overbrengen, is het belangrijk beide goed te kunnen!" + diplomat_introduction_suf: "dan is het wel dat er een enorme belangstelling is voor CodeCombat in andere landen, vooral Brazilië! We zijn een groep van vertalers aan het creëren dat ijverig de ene set woorden in de andere omzet om CodeCombat zo toegankelijk mogelijk te maken in de hele wereld. Als jij het leuk vindt glimpsen op te vangen van aankomende content en deze levels zo snel mogelijk naar je landgenoten te krijgen, dan is dit de klasse voor jou." + diplomat_attribute_1: "Vloeiend Engels en de taal waar naar je wilt vertalen kunnen spreken. Wanneer je moeilijke ideeën wilt overbrengen, is het belangrijk beide talen goed te begrijpen!" diplomat_join_pref_github: "Vind van jouw taal het locale bestand " diplomat_github_url: "op GitHub" diplomat_join_suf_github: ", edit het online, en submit een pull request. Daarnaast kun je hieronder aanvinken als je up-to-date wilt worden gehouden met nieuwe internationalisatie-ontwikkelingen." more_about_diplomat: "Leer meer over het worden van een geweldige Diplomaat" diplomat_subscribe_desc: "Ontvang e-mails over i18n ontwikkelingen en levels om te vertalen." ambassador_summary: "We proberen een gemeenschap te bouwen en elke gemeenschap heeft een supportteam nodig wanneer er problemen zijn. We hebben chats, e-mails en sociale netwerken zodat onze gebruikers het spel kunnen leren kennen. Als jij mensen wilt helpen betrokken te raken, plezier te hebben en wat te leren programmeren, dan is dit wellicht de klasse voor jou." - ambassador_introduction: "We zijn een community aan het uitbouwen, en jij maakt er deel van uit. We hebben Olark chatkamers, emails, en soeciale netwerken met veel andere mensen waarmee je kan praten en hulp kan vragen over het spel en om bij te leren. Als jij mensen wil helpen en te werken nabij de hartslag van CodeCombat in het bijsturen van onze toekomstvisie, dan is dit de geknipte klasse voor jou!" + ambassador_introduction: "We zijn een gemeenschap aan het uitbouwen, en jij maakt er deel van uit. We hebben Olark chatkamers, emails, en sociale netwerken met veel andere mensen waarmee je kan praten en hulp aan kan vragen over het spel of om bij te leren. Als jij mensen wil helpen en te werken nabij de hartslag van CodeCombat in het bijsturen van onze toekomstvisie, dan is dit de geknipte klasse voor jou!" ambassador_attribute_1: "Communicatieskills. Problemen die spelers hebben kunnen identificeren en ze helpen deze op te lossen. Verder zul je ook de rest van ons geïnformeerd houden over wat de spelers zeggen, wat ze leuk vinden, wat ze minder vinden en waar er meer van moet zijn!" ambassador_join_desc: "vertel ons wat over jezelf, wat je hebt gedaan en wat je graag zou doen. We zien verder wel!" ambassador_join_note_strong: "Opmerking" - ambassador_join_note_desc: "Een van onze topprioriteiten is om een multiplayer te bouwen waar spelers die moeite hebben een level op te lossen een wizard met een hoger level kunnen oproepen om te helpen. Dit zal een goede manier zijn voor ambassadeurs om hun ding te doen. We houden je op de hoogte!" + ambassador_join_note_desc: "Een van onze topprioriteiten is om een multiplayer te bouwen waar spelers die moeite hebben een level op te lossen een tovenaar met een hoger level kunnen oproepen om te helpen. Dit zal een goede manier zijn voor ambassadeurs om hun ding te doen. We houden je op de hoogte!" more_about_ambassador: "Leer meer over het worden van een behulpzame Ambassadeur" ambassador_subscribe_desc: "Ontvang e-mails met updates over ondersteuning en multiplayer-ontwikkelingen." counselor_summary: "Geen van de rollen hierboven in jouw interessegebied? Maak je geen zorgen, we zijn op zoek naar iedereen die wil helpen met het ontwikkelen van CodeCombat! Als je geïnteresseerd bent in lesgeven, gameontwikkeling, open source management of iets anders waarvan je denkt dat het relevant voor ons is, dan is dit de klasse voor jou." @@ -529,7 +535,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: creative_artisans: "Onze creatieve Ambachtslieden:" brave_adventurers: "Onze dappere Avonturiers:" translating_diplomats: "Onze vertalende Diplomaten:" - helpful_ambassadors: "Onze helpvolle Ambassadeurs:" + helpful_ambassadors: "Onze behulpzame Ambassadeurs:" classes: archmage_title: "Tovenaar" @@ -554,8 +560,8 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: simulation_explanation: "Door spellen te simuleren kan je zelf sneller beoordeeld worden!" simulate_games: "Simuleer spellen!" simulate_all: "RESET EN SIMULEER SPELLEN" -# games_simulated_by: "Games simulated by you:" -# games_simulated_for: "Games simulated for you:" + games_simulated_by: "Door jou gesimuleerde spellen:" + games_simulated_for: "Voor jou gesimuleerde spellen:" leaderboard: "Leaderboard" battle_as: "Vecht als " summary_your: "Jouw " @@ -575,7 +581,7 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: tutorial_play: "Speel de Tutorial" tutorial_recommended: "Aanbevolen als je nog niet eerder hebt gespeeld" tutorial_skip: "Sla Tutorial over" - tutorial_not_sure: "Niet zeker wat er aan de gang is?" + tutorial_not_sure: "Niet zeker wat er aan de hand is?" tutorial_play_first: "Speel eerst de Tutorial." simple_ai: "Simpele AI" warmup: "Opwarming" @@ -583,14 +589,14 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription: multiplayer_launch: introducing_dungeon_arena: "Introductie van Dungeon Arena" - new_way: "De nieuwe manier om te concurreren met code." + new_way: "17 maart, 2014: De nieuwe manier om te concurreren met code." to_battle: "Naar het slagveld, ontwikkelaars!" - modern_day_sorcerer: "Kan jij programmeren? Hoe stoer is dat. Jij bent een modere voetballer! is het niet tijd dat je jouw magische krachten gebruikt voor het controlleren van jou minions in het slagveld? En nee, we praten heir niet over robots." - arenas_are_here: "CodeCombat head-to-head multiplayer arenas are here." - ladder_explanation: "Kies jouw helden, betover jouw mens of ogre legers, en beklim jouw weg naar de top in de ladder, door het verslagen van vriend en vijand. Daag nu je vrienden uit in multiplayer coding arenas en verkrijg faam en glorie. Indien je creatief bent, kan je zelfs" + modern_day_sorcerer: "Kan jij programmeren? Dat is pas stoer. Jij bent een modere tovenaar! Is het niet tijd dat je jouw magische krachten gebruikt voor het besturen van jou minions in het slagveld? En nee, we praten hier niet over robots." + arenas_are_here: "CodeCombat's kop aan kop multiplayer arena's zijn er." + ladder_explanation: "Kies jouw helden, betover jouw mensen of ogre legers, en beklim jouw weg naar de top in de ladder, door het verslagen van vriend en vijand. Daag nu je vrienden uit in de multiplayer programmeer arena's en verdien eeuwige roem. Indien je creatief bent, kan je zelfs" fork_our_arenas: "onze arenas forken" create_worlds: "en jouw eigen werelden creëren." - javascript_rusty: "Jouw JavaScript is een beetje roest? Wees niet bang, er is een" + javascript_rusty: "Jouw JavaScript is een beetje roestig? Wees niet bang, er is een" tutorial: "tutorial" new_to_programming: ". Ben je net begonnen met programmeren? Speel dan eerst onze beginners campagne." so_ready: "Ik ben hier zo klaar voor" diff --git a/app/locale/nl-NL.coffee b/app/locale/nl-NL.coffee index f813bc8aa..59783a502 100644 --- a/app/locale/nl-NL.coffee +++ b/app/locale/nl-NL.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription sending: "Verzenden..." cancel: "Annuleren" save: "Opslagen" + create: "Creëer" delay_1_sec: "1 seconde" delay_3_sec: "3 secondes" delay_5_sec: "5 secondes" @@ -12,13 +13,13 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription fork: "Fork" play: "Spelen" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + units: + second: "seconde" + seconds: "seconden" + minute: "minuut" + minutes: "minuten" + hour: "uur" + hours: "uren" modal: close: "Sluiten" @@ -39,19 +40,20 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription about: "Over Ons" contact: "Contact" twitter_follow: "Volgen" - employers: "Werknemers" + employers: "Werkgevers" versions: save_version_title: "Nieuwe versie opslagen" new_major_version: "Nieuwe hoofd versie" - cla_prefix: "Om bewerkingen op te slagen, moet je eerst akkoord gaan met onze" + cla_prefix: "Om bewerkingen op te slaan, moet je eerst akkoord gaan met onze" cla_url: "CLA" cla_suffix: "." cla_agree: "IK GA AKKOORD" login: - sign_up: "Account Maken" + sign_up: "Account maken" log_in: "Inloggen" + logging_in: "Bezig met inloggen" log_out: "Uitloggen" recover: "account herstellen" @@ -60,7 +62,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription send_password: "Verzend nieuw wachtwoord" signup: - create_account_title: "Maak een account aan om je progressie op te slagen" + create_account_title: "Maak een account aan om je vooruitgang op te slaan" description: "Het is gratis. We hebben maar een paar dingen nodig en dan kan je aan de slag:" email_announcements: "Ontvang aankondigingen via email" coppa: "13+ of niet uit de VS" @@ -78,7 +80,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription old_browser_suffix: "Je kan toch proberen, maar het zal waarschijnlijk niet werken!" campaign: "Campagne" for_beginners: "Voor Beginners" -# multiplayer: "Multiplayer" + multiplayer: "Multiplayer" for_developers: "Voor ontwikkelaars" play: @@ -87,7 +89,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription adventurer_forum: "het Avonturiersforum" adventurer_suffix: "." campaign_beginner: "Beginnercampagne" - campaign_beginner_description: "... waarin je de toverkunst van programmeren leert." + campaign_beginner_description: "... waarin je de toverkunst van het programmeren leert." campaign_dev: "Willekeurige moeilijkere levels" campaign_dev_description: "... waarin je de interface leert kennen terwijl je wat moeilijkers doet." campaign_multiplayer: "Multiplayer Arena's" @@ -96,7 +98,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription campaign_player_created_description: "... waarin je ten strijde trekt tegen de creativiteit van andere Ambachtelijke Tovenaars." level_difficulty: "Moeilijkheidsgraad: " play_as: "Speel als " - spectate: "Schouw toe" + spectate: "Toeschouwen" contact: contact_us: "Contact opnemen met CodeCombat" @@ -126,19 +128,19 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription spell: "Spreuk" boots: "Laarzen" hue: "Hue" - saturation: "Saturation" - lightness: "Lightness" + saturation: "Saturatie" + lightness: "Helderheid" account_settings: title: "Account Instellingen" - not_logged_in: "Log in of maak een account om je instellingen aan te passen." + not_logged_in: "Log in of maak een account aan om je instellingen aan te passen." autosave: "Aanpassingen Automatisch Opgeslagen" me_tab: "Ik" picture_tab: "Afbeelding" wizard_tab: "Tovenaar" password_tab: "Wachtwoord" emails_tab: "Emails" -# admin: "Admin" + admin: "Administrator" gravatar_select: "Selecteer welke Gravatar foto je wilt gebruiken" gravatar_add_photos: "Voeg thumbnails en foto's toe aan je Gravatar account, gekoppeld aan jouw email-adres, om een afbeelding te kiezen." gravatar_add_more_photos: "Voeg meer afbeeldingen toe aan je Gravatar account om ze hier te gebruiken." @@ -151,8 +153,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription email_notifications_description: "Krijg periodieke meldingen voor jouw account." email_announcements_description: "Verkrijg emails over het laatste nieuws en de ontwikkelingen bij CodeCombat." contributor_emails: "Medewerker Klasse emails" - contribute_prefix: "We zoeken mensen om bij ons feest aan te voegen! Bekijk de " - contribute_page: "contributiepagina" + contribute_prefix: "We zoeken mensen om met ons te komen feesten! Bekijk de " + contribute_page: "bijdragepagina" contribute_suffix: " om meer te weten te komen." email_toggle: "Vink alles aan/af" error_saving: "Fout Tijdens Het Opslaan" @@ -162,7 +164,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription account_profile: edit_settings: "Instellingen Aanpassen" profile_for_prefix: "Profiel voor " -# profile_for_suffix: "" + profile_for_suffix: "" profile: "Profiel" user_not_found: "Geen gebruiker gevonden. Controleer de URL?" gravatar_not_found_mine: "We konden geen account vinden gekoppeld met:" @@ -190,9 +192,9 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription reload_title: "Alle Code Herladen?" reload_really: "Weet je zeker dat je dit level tot het begin wilt herladen?" reload_confirm: "Herlaad Alles" -# victory_title_prefix: "" + victory_title_prefix: "" victory_title_suffix: " Compleet" - victory_sign_up: "Schrijf je in om je progressie op te slaan" + victory_sign_up: "Schrijf je in om je vooruitgang op te slaan" victory_sign_up_poke: "Wil je jouw code opslaan? Maak een gratis account aan!" victory_rate_the_level: "Beoordeel het level: " victory_rank_my_game: "Rankschik mijn Wedstrijd" @@ -224,45 +226,49 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription skip_tutorial: "Overslaan (esc)" editor_config: "Editor Configuratie" editor_config_title: "Editor Configuratie" + editor_config_language_label: "Programmeertaal" + editor_config_language_description: "Definieer de programmeertaal waarin jij wilt programmeren." editor_config_keybindings_label: "Toets instellingen" -# editor_config_keybindings_default: "Default (Ace)" + editor_config_keybindings_default: "Standaard (Ace)" editor_config_keybindings_description: "Voeg extra shortcuts toe van de gebruikelijke editors." editor_config_invisibles_label: "Toon onzichtbare" editor_config_invisibles_description: "Toon onzichtbare whitespace karakters." editor_config_indentguides_label: "Toon inspringing regels" editor_config_indentguides_description: "Toon verticale hulplijnen om de zichtbaarheid te verbeteren." editor_config_behaviors_label: "Slim gedrag" - editor_config_behaviors_description: "Auto-aanvulling (gekrulde) haakjes en aanhalingstekens." -# loading_ready: "Ready!" -# 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." -# tip_guide_exists: "Click the guide at the top of the page for useful info." -# tip_open_source: "CodeCombat is 100% open source!" -# tip_beta_launch: "CodeCombat launched its beta in October, 2013." -# tip_js_beginning: "JavaScript is just the beginning." -# tip_autocast_setting: "Adjust autocast settings by clicking the gear on the cast button." -# think_solution: "Think of the solution, not the problem." -# tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra" -# tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis" -# tip_debugging_program: "If debugging is the process of removing bugs, then programming must be the process of putting them in. - Edsger W. Dijkstra" -# tip_forums: "Head over to the forums and tell us what you think!" -# tip_baby_coders: "In the future, even babies will be Archmages." -# tip_morale_improves: "Loading will continue until morale improves." -# tip_all_species: "We believe in equal opportunities to learn programming for all species." + editor_config_behaviors_description: "Automatisch aanvullen van (gekrulde) haakjes en aanhalingstekens." + loading_ready: "Klaar!" + tip_insert_positions: "Shift+Klik een punt op de kaart om het toe te voegen aan je spreuk editor." + tip_toggle_play: "Verwissel speel/pauze met Ctrl+P." + tip_scrub_shortcut: "Ctrl+[ en Ctrl+] om terug te spoelen en vooruit te spoelen." + tip_guide_exists: "Klik op de handleiding bovenaan het scherm voor nuttige informatie." + tip_open_source: "CodeCombat is 100% open source!" + tip_beta_launch: "CodeCombat lanceerde zijn beta versie in Oktober, 2013." + tip_js_beginning: "JavaScript is nog maar het begin." + tip_autocast_setting: "Verander de autocast instelling door te klikken op het tandwiel naast de cast knop." + think_solution: "Denk aan de oplossing, niet aan het probleem" + tip_theory_practice: "In theorie is er geen verschil tussen de theorie en de praktijk; in de praktijk is er wel een verschil. - Yogi Berra" + tip_error_free: "Er zijn twee manieren om fout-vrije code te schrijven, maar enkele de derde manier werkt. - Alan Perlis" + tip_debugging_program: "Als debuggen het proces is om bugs te verwijderen, dan moet programmeren het proces zijn om ze erin te stoppen. - Edsger W. Dijkstra" + tip_forums: "Ga naar de forums en vertel ons wat je denkt!" + tip_baby_coders: "Zelfs babies zullen in de toekomst een Tovenaar zijn." + tip_morale_improves: "Het spel zal blijven laden tot de moreel verbeterd." + tip_all_species: "Wij geloven in gelijke kansen voor alle wezens om te leren programmeren." # tip_reticulating: "Reticulating spines." -# tip_harry: "Yer a Wizard, " -# tip_great_responsibility: "With great coding skill comes great debug responsibility." -# tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep." -# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't." -# tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda" -# tip_no_try: "Do. Or do not. There is no try. - Yoda" -# tip_patience: "Patience you must have, young Padawan. - Yoda" -# tip_documented_bug: "A documented bug is not a bug; it is a feature." -# tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" -# time_current: "Now:" -# time_total: "Max:" -# time_goto: "Go to:" + tip_harry: "Je bent een tovenaar, " + tip_great_responsibility: "Met een groots talent voor programmeren komt een grootse debug verantwoordelijkheid." + tip_munchkin: "Als je je groentjes niet opeet zal een munchkin je ontvoeren terwijl je slaapt." + tip_binary: "Er zijn 10 soorten mensen in de wereld: Mensen die binair kunnen tellen en mensen die dat niet kunnen." + tip_commitment_yoda: "Een programmeur moet de grootste inzet hebben, een meest serieuze geest. ~ Yoda" + tip_no_try: "Doe het. Of doe het niet. Je kunt niet proberen. - Yoda" + tip_patience: "Geduld moet je hebben, jonge Padawan. - Yoda" + tip_documented_bug: "Een gedocumenteerde fout is geen fout; het is deel van het programma." + tip_impossible: "Het lijkt altijd onmogelijk tot het gedaan wordt. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" + time_current: "Nu:" + time_total: "Maximum:" + time_goto: "Ga naar:" admin: av_title: "Administrator panels" @@ -273,7 +279,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription av_other_debug_base_url: "Base (om base.jade te debuggen)" u_title: "Gebruikerslijst" lg_title: "Laatste Spelletjes" -# clas: "CLAs" + clas: "CLAs" editor: main_title: "CodeCombat Editors" @@ -281,10 +287,10 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription article_title: "Artikel Editor" article_description: "Schrijf artikels die spelers een overzicht geven over programmeer concepten die kunnen gebruikt worden over een variëteit van levels en campagnes." thang_title: "Thang Editor" - thang_description: "Maak eenheden, beschrijf hun standaard logica, graphics en audio. Momenteel is enkel het importeren van vector graphics geëxporteerd in Flash ondersteund." + thang_description: "Maak eenheden, beschrijf hun standaard logica, graphics en audio. Momenteel is enkel het importeren van vector graphics geëxporteerd uit Flash ondersteund." level_title: "Level Editor" - level_description: "Bevat het programma om te programmeren, audio te uploaden en aangepaste logica te creëren om alle soorten levels te maken. Het is alles wat wijzelf ook gebruiken!" - security_notice: "Veel belangrijke elementen in deze editors zijn momenteel niet actief. Met dat wij de veiligheid van deze systemen verbeteren, zullen ook deze elementen beschikbaar worden. Indien u deze elementen al eerder wil gebruiken, " + level_description: "Bevat de benodigdheden om scripts te schrijven, audio te uploaden en aangepaste logica te creëren om alle soorten levels te maken. Het is alles wat wij zelf ook gebruiken!" + security_notice: "Veel belangrijke elementen in deze editors zijn momenteel niet actief. Als wij de veiligheid van deze systemen verbeteren, zullen ook deze elementen beschikbaar worden. Indien u deze elementen al eerder wil gebruiken, " contact_us: "contacteer ons!" hipchat_prefix: "Je kan ons ook vinden in ons" hipchat_url: "(Engelstalig) HipChat kanaal." @@ -301,7 +307,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription level_tab_thangs_add: "Voeg element toe" level_settings_title: "Instellingen" level_component_tab_title: "Huidige Componenten" - level_component_btn_new: "Maak een nieuw component aan" + level_component_btn_new: "Maak een nieuwe component aan" level_systems_tab_title: "Huidige Systemen" level_systems_btn_new: "Maak een nieuw systeem aan" level_systems_btn_add: "Voeg Systeem toe" @@ -312,7 +318,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription level_component_settings: "Instellingen" level_system_edit_title: "Wijzig Systeem" create_system_title: "Maak een nieuw Systeem aan" - new_component_title: "Maak een nieuw Component aan" + new_component_title: "Maak een nieuwe Component aan" new_component_field_system: "Systeem" new_article_title: "Maak een Nieuw Artikel" new_thang_title: "Maak een Nieuw Thang Type" @@ -348,7 +354,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription score: "Score" win: "Win" loss: "Verlies" - tie: "Gelijk" + tie: "Gelijkstand" easy: "Gemakkelijk" medium: "Medium" hard: "Moeilijk" @@ -359,7 +365,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription who_description_prefix: "hebben samen CodeCombat opgericht in 2013. We creëerden ook " who_description_suffix: "en in 2008, groeide het uit tot de #1 web en iOS applicatie om Chinese en Japanse karakters te leren schrijven." who_description_ending: "Nu is het tijd om mensen te leren programmeren." - why_paragraph_1: "Tijdens het maken van Skritter wist George niet hoe hij moest programmeren en was hij constant gefrustreerd doordat hij zijn ideeën niet kon verwezelijken. Nadien probeerde hij te studeren maar de lessen gingen te traag. Ook zijn huisgenoot wou opnieuw studeren en stopte met lesgeven. Hij probeerde Codecademy maar was al snel \"verveeld\". Iedere week startte een andere vriend met Codecademy, met telkens als resultaat dat hij/zij vrij snel met de lessen stopte. We realiseerden ons dat het hetzelfde probleem was zoals we al eerder hadden opgelost met Skritter: mensen leren iets via langzame en intensieve lessen, terwijl ze het eigenlijk zo snel mogelijk nodig hebben via uitgebreide oefeningen. Wij weten hoe dat op te lossen." + why_paragraph_1: "Tijdens het maken van Skritter wist George niet hoe hij moest programmeren en was hij constant gefrustreerd doordat hij zijn ideeën niet kon verwezelijken. Nadien probeerde hij te studeren maar de lessen gingen te traag. Ook zijn huisgenoot wou opnieuw studeren en stopte met lesgeven. Hij probeerde Codecademy maar was al snel \"verveeld\". Iedere week startte een andere vriend met Codecademy, met telkens als resultaat dat hij/zij vrij snel met de lessen stopte. We realiseerden ons dat het hetzelfde probleem was zoals we al eerder hadden opgelost met Skritter: mensen leren iets via langzame en intensieve lessen, terwijl ze eigenlijk beter een snelle en uitgebreide opleiding nodig hebben. Wij weten hoe dat op te lossen." why_paragraph_2: "Wil je leren programmeren? Je hebt geen lessen nodig. Je moet vooral veel code schrijven en je amuseren terwijl je dit doet." why_paragraph_3_prefix: "Dat is waar programmeren om draait. Het moet tof zijn. Niet tof zoals" why_paragraph_3_italic: "joepie een medaille" @@ -381,13 +387,13 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription opensource_intro: "CodeCombat is gratis en volledig open source." opensource_description_prefix: "Bekijk " github_url: "onze GitHub" - opensource_description_center: "en help ons als je wil! CodeCombat is gebouwd met de hulp van duizende open source projecten, en wij zijn er gek van. Bekijk ook " + opensource_description_center: "en help ons als je wil! CodeCombat is gebouwd met de hulp van tientallen open source projecten, en wij zijn er gek op. Bekijk ook " archmage_wiki_url: "onze Tovenaar wiki" - opensource_description_suffix: "voor een lijst van de software dat dit spel mogelijk maakt." + opensource_description_suffix: "voor een lijst van de software die dit spel mogelijk maakt." practices_title: "Goede Respectvolle gewoonten" - practices_description: "Dit zijn onze beloften aan u, de speler, en iets minder juridische jargon." + practices_description: "Dit zijn onze beloften aan u, de speler, in een iets minder juridische jargon." privacy_title: "Privacy" - privacy_description: "We zullen nooit jouw persoonlijke informatie verkopen. We willen geld verdienen dankzij aanwerving in verloop van tijd, maar je mag op je twee oren slapen dat wij nooit jouw persoonlijke informatie zullen verspreiden aan geïnteresseerde bedrijven zonder dat jij daar expliciet mee akkoord gaat." + privacy_description: "We zullen nooit jouw persoonlijke informatie verkopen. We willen in verloop van tijd geld verdienen dankzij aanwervingen, maar je mag op je beide oren slapen dat wij nooit jouw persoonlijke informatie zullen verspreiden aan geïnteresseerde bedrijven zonder dat jij daar expliciet mee akkoord gaat." security_title: "Beveiliging" security_description: "We streven ernaar om jouw persoonlijke informatie veilig te bewaren. Onze website is open en beschikbaar voor iedereen, opdat ons beveiliging systeem kan worden nagekeken en geoptimaliseerd door iedereen die dat wil. Dit alles is mogelijk doordat we volledig open source en transparant zijn." email_title: "E-mail" @@ -399,7 +405,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription recruitment_title: "Aanwervingen" recruitment_description_prefix: "Hier bij CodeCombat, ga je ontplooien tot een krachtige tovenoor-niet enkel virtueel, maar ook in het echt." url_hire_programmers: "Niemand kan snel genoeg programmeurs aanwerven" - recruitment_description_suffix: "dus eenmaal je jouw vaardigheden hebt aangescherp en ermee akkoord gaat, zullen we jouw beste codeer prestaties voorstellen aan duizenden bedrijven die niet kunnen wachten om jou aan te werven. Zij betalen ons een beetje, maar betalen jou" + recruitment_description_suffix: "dus eenmaal je jouw vaardigheden hebt aangescherp en ermee akkoord gaat, zullen we jouw beste programmeer prestaties voorstellen aan duizenden werkgevers die niet kunnen wachten om jou aan te werven. Zij betalen ons een beetje, maar betalen jou" recruitment_description_italic: "enorm veel" recruitment_description_ending: "de site blijft volledig gratis en iedereen is gelukkig. Dat is het plan." copyrights_title: "Auteursrechten en licenties" @@ -408,25 +414,25 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription cla_url: "CLA" contributor_description_suffix: "waarmee je moet akkoord gaan voordat wij jouw bijdragen kunnen gebruiken." code_title: "Code - MIT" - code_description_prefix: "Alle code in het bezit van CodeCombat of aanwezig op codecombat.com, zowel in de GitHub respository of in de codecombat.com database, is erkend onder de" + code_description_prefix: "Alle code in het bezit van CodeCombat of aanwezig op codecombat.com, zowel in de GitHub respository als in de codecombat.com database, is erkend onder de" mit_license_url: "MIT licentie" - code_description_suffix: "Dit geldt ook voor code in Systemen en Componenten dat publiekelijk is gemaakt met als doelstellingen het maken van levels." + code_description_suffix: "Dit geldt ook voor code in Systemen en Componenten dat publiek is gemaakt met als doel het maken van levels." art_title: "Art/Music - Creative Commons " art_description_prefix: "Alle gemeenschappelijke inhoud valt onder de" cc_license_url: "Creative Commons Attribution 4.0 Internationale Licentie" - art_description_suffix: "Gemeenschappelijke inhoud is alles dat algemeen verkrijgbaar is bij CodeCombat voor het doel levels te maken. Dit omvat:" + art_description_suffix: "Gemeenschappelijke inhoud is alles dat algemeen verkrijgbaar is bij CodeCombat met als doel levels te maken. Dit omvat:" art_music: "Muziek" art_sound: "Geluid" - art_artwork: "Artwork" + art_artwork: "Illustraties" art_sprites: "Sprites" art_other: "Eender wat en al het creatief werk dat niet als code aanzien wordt en verkrijgbaar is bij het aanmaken van levels." - art_access: "Momenteel is er geen universeel en gebruiksvriendelijk systeem voor het ophalen van deze assets. In het algemeen, worden deze opgehaald via de links zoals gebruikt door de website. Contacteer ons voor assitentie, of help ons met de website uit te breiden en de assets bereikbaarder te maken." + art_access: "Momenteel is er geen universeel en gebruiksvriendelijk systeem voor het ophalen van deze assets. In het algemeen, worden deze opgehaald via de links zoals gebruikt door de website. Contacteer ons voor assistentie, of help ons met de website uit te breiden en de assets bereikbaarder te maken." art_paragraph_1: "Voor toekenning, gelieve de naam en link naar codecombat.com te plaatsen waar dit passend is voor de vorm waarin het voorkomt. Bijvoorbeeld:" use_list_1: "Wanneer gebruikt in een film of een ander spel, voeg codecombat.com toe in de credits." - use_list_2: "Wanneer toegepast op een website, inclusief een link naar het gebruik, bijvoorbeeld onderaan een afbeelding. Of in een algemene webpagina waar je eventueel ook andere Create Commons werken en open source software vernoemd die je gebruikt op de website. Iets dat alreeds duidelijk is gespecificeerd met CodeCombat, zoals een blog artikel, dat CodeCombat vernoemt, heeft geen aparte vermelding nodig." - art_paragraph_2: "Wanneer de gebruikte inhoud is gemaakt door een gebruiker van codecombat.com, vernoem hem/haar in plaats van ons en volg verspreidingsaanwijzingen van die brons als die er zijn." + use_list_2: "Wanneer toegepast op een website, inclusief een link naar het gebruik, bijvoorbeeld onderaan een afbeelding. Of in een algemene webpagina waar je eventueel ook andere Creative Commons werken en open source software vernoemd die je gebruikt op de website. Iets dat al duidelijk gerelateerd is met CodeCombat, zoals een blog artikel dat CodeCombat vernoemd, heeft geen aparte vermelding nodig." + art_paragraph_2: "Wanneer de gebruikte inhoud is gemaakt door een gebruiker van codecombat.com, vernoem hem/haar in plaats van ons en volg toekenningsaanwijzingen als deze in de beschrijving van de bron staan." rights_title: "Rechten Voorbehouden" - rights_desc: "Alle rechten zijn voorbehouden voor de Levels. Dit omvat:" + rights_desc: "Alle rechten zijn voorbehouden voor de Levels zelf. Dit omvat:" rights_scripts: "Scripts" rights_unit: "Eenheid Configuratie" rights_description: "Beschrijvingen" @@ -443,77 +449,77 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription introduction_desc_intro: "We hebben hoge verwachtingen over CodeCombat." introduction_desc_pref: "We willen zijn waar programmeurs van alle niveaus komen om te leren en samen te spelen, anderen introduceren aan de wondere wereld van code, en de beste delen van de gemeenschap te reflecteren. We kunnen en willen dit niet alleen doen; wat projecten zoals GitHub, Stack Overflow en Linux groots en succesvol maken, zijn de mensen die deze software gebruiken en verbeteren. Daartoe, " introduction_desc_github_url: "CodeCombat is volledig open source" - introduction_desc_suf: ", en we mikken ernaar om zoveel mogelijk manieren mogelijk maken voor u om deel te nemen en dit project van zowel jou als ons te maken." + introduction_desc_suf: ", en we streven ernaar om op zoveel mogelijk manieren het mogelijk te maken voor u om deel te nemen en dit project van zowel jou als ons te maken." introduction_desc_ending: "We hopen dat je met ons meedoet!" introduction_desc_signature: "- Nick, George, Scott, Michael, Jeremy en Glen" alert_account_message_intro: "Hallo!" alert_account_message_pref: "Om je te abonneren voor de klasse e-mails, moet je eerst " alert_account_message_suf: "." alert_account_message_create_url: "een account aanmaken" - archmage_summary: "Geïnteresserd in werken aan game graphics, user interface design, database- en serverorganisatie, multiplayer networking, physics, geluid of game engine prestaties? Wil jij helpen een game te bouwen wat anderen leert waar jij goed in bent? We moeten nog veel doen en als jij een ervaren programmeur bent en wil ontwikkelen voor CodeCombat, dan is dit de klasse voor jou. We zouden graag je hulp hebben bij het maken van de beste programmeergame ooit." - archmage_introduction: "Een van de beste aspecten aan het maken van spelletjes is dat zij zoveel verschillende zaken omvatten. Visualisaties, geluid, real-time netwerken, sociale netwerken, en natuurlijk veel van de voorkomende aspecten van programmeren, van low-level database beheer en server administratie tot gebruiksvriendelijke interfaces maken. Er is veel te doen, en als jij een ervaren programmeur bent met de motivatie om je handen veel te maken met CodeCombat, dan ben je de tovenaar die wij zoeken! We zouden graag jouw help hebben met het bouwen aan het allerbeste programmeerspel ooit." + archmage_summary: "Geïnteresserd in het werken aan game graphics, user interface design, database- en serverorganisatie, multiplayer networking, physics, geluid of game engine prestaties? Wil jij helpen een game te bouwen wat anderen leert waar jij goed in bent? We moeten nog veel doen en als jij een ervaren programmeur bent en wil ontwikkelen voor CodeCombat, dan is dit de klasse voor jou. We zouden graag je hulp hebben bij het maken van de beste programmeergame ooit." + archmage_introduction: "Een van de beste aspecten aan het maken van spelletjes is dat zij zoveel verschillende zaken omvatten. Visualisaties, geluid, real-time netwerken, sociale netwerken, en natuurlijk enkele veelvoorkomende aspecten van programmeren, van low-level database beheer en server administratie tot gebruiksvriendelijke interfaces maken. Er is veel te doen, en als jij een ervaren programmeur bent met de motivatie om je volledig te verdiepen in de details van CodeCombat, dan ben je de tovenaar die wij zoeken! We zouden graag jouw hulp krijgen bij het bouwen van het allerbeste programmeerspel ooit." class_attributes: "Klasse kenmerken" archmage_attribute_1_pref: "Ervaring met " archmage_attribute_1_suf: ", of de wil om het te leren. De meeste van onze code is in deze taal. Indien je een fan van Ruby of Python bent, zal je je meteen thuis voelen! Het is zoals JavaScript, maar met een mooiere syntax." archmage_attribute_2: "Ervaring in programmeren en individueel initiatief. We kunnen jou helpen bij het opstarten, maar kunnen niet veel tijd spenderen om je op te leiden." how_to_join: "Hoe deel te nemen" join_desc_1: "Iedereen kan helpen! Bekijk onze " - join_desc_2: "om te starten, en vink het vierkantje hieronder aan om jouzelf te abonneren als dappere tovenaar en het laatste magische nieuws te ontvangen. Wil je met ons praten over wat er te doen is of hoe je nog meer met ons kan samenwerken? " + join_desc_2: "om te starten, en vink het vierkantje hieronder aan om jezelf te abonneren als dappere tovenaar en het laatste magische nieuws te ontvangen. Wil je met ons praten over wat er te doen is of hoe je nog meer kunt helpen? " join_desc_3: ", of vind ons in " join_desc_4: "en we bekijken het verder vandaar!" join_url_email: "E-mail ons" join_url_hipchat: "ons publiek (Engelstalig) HipChat kanaal" more_about_archmage: "Leer meer over hoe je een Machtige Tovenaar kan worden" - archmage_subscribe_desc: "Ontvang e-mails met nieuwe codeer oppurtiniteiten en aankondigingen." - artisan_summary_pref: "Wil je levels ontwerpen en CodeCombat's arsenaal vergroten? Mensen spelen sneller door onze content dan wij bij kunnen houden! Op dit moment is onze level editor nog wat kaal, dus wees daarvan bewust. Levels maken zal een beetje uitdagend en buggy zijn. Als jij een visie van campagnes hebt van for-loops tot" - artisan_summary_suf: "dan is dit de klasse voor jou." - artisan_introduction_pref: "We moeten meer levels bouwen! Mensen schreeuwen om meer inhoud, en er zijn ook maar zoveel levels dat wij kunnen maken. Momenteel is jouw werkplaats level een; onze level editor is amper gebruikt door zelfs ons, wees dus voorzichtig. Indien je visioenen hebt van campagnes, gaande van for-loops tot" - artisan_introduction_suf: "dan is deze klasse waarschijnlijk iets voor jou." - artisan_attribute_1: "Enige ervaring in het maken van gelijkbare inhoud. Bijvoorbeeld ervaring het gebruiken van Blizzard's level editor. Maar dit is niet vereist!" - artisan_attribute_2: "Tot in detail testen en itereren staat voor jou gelijk aan plezier. Om goede levels te maken, moet jet het door anderen laten spelen en bereid zijn om een hele boel aan te passen." - artisan_attribute_3: "Momenteel heb je nog veel geduld nodig, doordat onze editor nog vrij ruw is en op je frustraties kan werken. Samenwerken met een Adventurer kan jou ook veel helpen." - artisan_join_desc: "Gebruik de Level Editor in deze volgorde, min of meer:" + archmage_subscribe_desc: "Ontvang e-mails met nieuwe programmeer mogelijkheden en aankondigingen." + artisan_summary_pref: "Wil je levels ontwerpen en CodeCombat's arsenaal vergroten? Mensen spelen sneller door onze content dan wij bij kunnen houden! Op dit moment is onze level editor nog wat beperkt, dus wees daarvan bewust. Het maken van levels zal een uitdaging zijn met een grote kans op fouten. Als jij een visie van campagnes hebt van for-loops tot" + artisan_summary_suf: ", dan is dit de klasse voor jou." + artisan_introduction_pref: "We moeten meer levels bouwen! Mensen schreeuwen om meer inhoud, en er zijn ook maar zoveel levels dat wij kunnen maken. Momenteel is jouw werkplaats level een; onze level editor wordt zelfs door ons amper gebruikt, dus wees voorzichtig. Indien je een visie hebt van een campagne, gaande van for-loops tot" + artisan_introduction_suf: ", dan is deze klasse waarschijnlijk iets voor jou." + artisan_attribute_1: "Enige ervaring in het maken van vergelijkbare inhoud. Bijvoorbeeld ervaring in het gebruiken van Blizzard's level editor. Maar dit is niet vereist!" + artisan_attribute_2: "Tot in het detail testen en opnieuw proberen staat voor jou gelijk aan plezier. Om goede levels te maken, moet je het door anderen laten spelen en bereid zijn om een hele boel aan te passen." + artisan_attribute_3: "Momenteel heb je nog veel geduld nodig, doordat onze editor nog vrij ruw is en op je zenuwen kan werken. Samenwerken met een Avonturier kan jou ook veel helpen." + artisan_join_desc: "Gebruik de Level Editor min of meer in deze volgorde:" artisan_join_step1: "Lees de documentatie." artisan_join_step2: "Maak een nieuw level en bestudeer reeds bestaande levels." artisan_join_step3: "Praat met ons in ons publieke (Engelstalige) HipChat kanaal voor hulp. (optioneel)" artisan_join_step4: "Maak een bericht over jouw level op ons forum voor feedback." more_about_artisan: "Leer meer over hoe je een Creatieve Ambachtsman kan worden." artisan_subscribe_desc: "Ontvang e-mails met nieuws over de Level Editor." - adventurer_summary: "Laten we duidelijk zijn over je rol: jij bent de tank. Jij krijgt de zware klappen te verduren. We hebben mensen nodig om spiksplinternieuwe levels te proberen en te kijken hoe deze beter kunnen. De pijn zal groot zijn, het maken van een goede game is een lang proces en niemand doet het de eerste keer goed. Als jij dit kan verduren en een hoge constitution score hebt, dan is dit de klasse voor jou." - adventurer_introduction: "Laten we duidelijk zijn over je rol: jij bent de tank. Jij krijgt de zware klappen te verduren. We hebben mensen nodig om spiksplinternieuwe levels te proberen en te kijken hoe deze beter kunnen. De pijn zal groot zijn, het maken van een goede game is een lang proces en niemand doet het de eerste keer goed. Als jij dit kan verduren en een hoge constitution score hebt, dan is dit de klasse voor jou." + adventurer_summary: "Laten we duidelijk zijn over je rol: jij bent de tank. Jij krijgt de zware klappen te verduren. We hebben mensen nodig om spiksplinternieuwe levels te proberen en te kijken hoe deze beter kunnen. Je zult veel afzien, want het maken van een goede game is een lang proces en niemand doet het de eerste keer goed. Als jij dit kan verduren en een hoog uihoudingsvermogen hebt, dan is dit de klasse voor jou." + adventurer_introduction: "Laten we duidelijk zijn over je rol: jij bent de tank. Jij krijgt de zware klappen te verduren. We hebben mensen nodig om spiksplinternieuwe levels uit te proberen en te kijken hoe deze beter kunnen. Je zult veel afzien.Het maken van een goede game is een lang proces en niemand doet het de eerste keer goed. Als jij dit kan verduren en een hoog uihoudingsvermogen hebt, dan is dit de klasse voor jou." adventurer_attribute_1: "Een wil om te leren. Jij wilt leren hoe je programmeert en wij willen het jou leren. Je zal overigens zelf het meeste leren doen." adventurer_attribute_2: "Charismatisch. Wees netjes maar duidelijk over wat er beter kan en geef suggesties over hoe het beter kan." - adventurer_join_pref: "Werk samen met een Ambachtsman of recruteer er een, of tik het veld hieronder aan om e-mails te ontvangen wanneer er nieuwe levels zijn om te testen. We zullen ook posten over levels die beoordeeld moeten worden op onze netwerken zoals" + adventurer_join_pref: "Werk samen met een Ambachtsman of recruteer er een, of tik het veld hieronder aan om e-mails te ontvangen wanneer er nieuwe levels zijn om te testen. We zullen ook berichten over levels die beoordeeld moeten worden op onze netwerken zoals" adventurer_forum_url: "ons forum" adventurer_join_suf: "dus als je liever op deze manier wordt geïnformeerd, schrijf je daar in!" - more_about_adventurer: "Leer meer over hoe je een dappere avonturier kunt worden." + more_about_adventurer: "Leer meer over hoe je een Dappere Avonturier kunt worden." adventurer_subscribe_desc: "Ontvang e-mails wanneer er nieuwe levels zijn die getest moeten worden." - scribe_summary_pref: "CodeCombat is meer dan slechts een aantal levels, het zal ook een bron van kennis kennis zijn en een wiki met programmeerconcepten waar levels op in kunnen gaan. Op die manier zal een Ambachtslied een link kunnen geven naar een artikel wat past bij een level. Net zoiets als het " + scribe_summary_pref: "CodeCombat is meer dan slechts een aantal levels, het zal ook een bron van kennis zijn die spelers kunnen nakijken. Op die manier zal een Ambachtsman een link kunnen geven naar een artikel dat past bij een level. Net zoiets als het " scribe_summary_suf: " heeft gebouwd. Als jij het leuk vindt programmeerconcepten uit te leggen, dan is deze klasse iets voor jou." - scribe_introduction_pref: "CodeCombat is meer dan slechts een aantal levels, het zal ook een bron van kennis kennis zijn en een wiki met programmeerconcepten waar levels op in kunnen gaan. Op die manier zal elk Ambachtslied niet in detail hoeven uit te leggen wat een vergelijkingsoperator is, maar een link kunnen geven naar een artikel wat deze informatie bevat voor de speler. Net zoiets als het " + scribe_introduction_pref: "CodeCombat is meer dan slechts een aantal levels, het zal ook een bron van kennis zijn en een wiki met programmeerconcepten waar levels op in kunnen gaan. Op die manier zal niet elke Ambachtsman in detail hoeven uit te leggen wat een vergelijkingsoperator is, maar een link kunnen geven naar een artikel die deze informatie al verduidelijkt voor speler. Net zoiets als het " scribe_introduction_url_mozilla: "Mozilla Developer Network" scribe_introduction_suf: " heeft gebouwd. Als jij het leuk vindt om programmeerconcepten uit te leggen in Markdown-vorm, dan is deze klasse wellicht iets voor jou." - scribe_attribute_1: "Taal-skills zijn praktisch alles wat je nodig hebt. Niet alleen grammatica of spelling, maar ook moeilijke ideeën overbrengen aan anderen." + scribe_attribute_1: "Taalvaardigheid is praktisch alles wat je nodig hebt. Je moet niet enkel bedreven zijn in grammatica en spelling, maar ook moeilijke ideeën kunnen overbrengen aan anderen." contact_us_url: "Contacteer ons" scribe_join_description: "vertel ons wat over jezelf, je ervaring met programmeren en over wat voor soort dingen je graag zou schrijven. Verder zien we wel!" more_about_scribe: "Leer meer over het worden van een ijverige Klerk." scribe_subscribe_desc: "Ontvang e-mails met aankondigingen over het schrijven van artikelen." - diplomat_summary: "Er is grote interesse in CodeCombat in landen waar geen Engels wordt gesproken! We zijn op zoek naar vertalers wie tijd willen spenderen aan het vertalen van de site's corpus aan woorden zodat CodeCombat zo snel mogelijk toegankelijk wordt voor heel de wereld. Als jij wilt helpen met CodeCombat internationaal maken, dan is dit de klasse voor jou." + diplomat_summary: "Er is grote interesse voor CodeCombat in landen waar geen Engels wordt gesproken! We zijn op zoek naar vertalers die tijd willen spenderen aan het vertalen van de site's corpus aan woorden zodat CodeCombat zo snel mogelijk toegankelijk wordt voor de hele wereld. Als jij wilt helpen om CodeCombat internationaal maken, dan is dit de klasse voor jou." diplomat_introduction_pref: "Dus, als er iets is wat we geleerd hebben van de " diplomat_launch_url: "release in oktober" - diplomat_introduction_suf: "dan is het wel dat er een significante interesse is in CodeCombat in andere landen, vooral Brazilië! We zijn een corps aan vertalers aan het creëren dat ijverig de ene set woorden in een andere omzet om CodeCombat zo toegankelijk te maken als mogelijk in heel de wereld. Als jij het leuk vindt glimpsen op te vangen van aankomende content en deze levels zo snel mogelijk naar je landgenoten te krijgen, dan is dit de klasse voor jou." - diplomat_attribute_1: "Vloeiend Engels en de taal waar naar je wilt vertalen kunnen spreken. Wanneer je moeilijke ideeën wilt overbrengen, is het belangrijk beide goed te kunnen!" + diplomat_introduction_suf: "dan is het wel dat er een enorme belangstelling is voor CodeCombat in andere landen, vooral Brazilië! We zijn een groep van vertalers aan het creëren dat ijverig de ene set woorden in de andere omzet om CodeCombat zo toegankelijk mogelijk te maken in de hele wereld. Als jij het leuk vindt glimpsen op te vangen van aankomende content en deze levels zo snel mogelijk naar je landgenoten te krijgen, dan is dit de klasse voor jou." + diplomat_attribute_1: "Vloeiend Engels en de taal waar naar je wilt vertalen kunnen spreken. Wanneer je moeilijke ideeën wilt overbrengen, is het belangrijk beide talen goed te begrijpen!" diplomat_join_pref_github: "Vind van jouw taal het locale bestand " diplomat_github_url: "op GitHub" diplomat_join_suf_github: ", edit het online, en submit een pull request. Daarnaast kun je hieronder aanvinken als je up-to-date wilt worden gehouden met nieuwe internationalisatie-ontwikkelingen." more_about_diplomat: "Leer meer over het worden van een geweldige Diplomaat" diplomat_subscribe_desc: "Ontvang e-mails over i18n ontwikkelingen en levels om te vertalen." ambassador_summary: "We proberen een gemeenschap te bouwen en elke gemeenschap heeft een supportteam nodig wanneer er problemen zijn. We hebben chats, e-mails en sociale netwerken zodat onze gebruikers het spel kunnen leren kennen. Als jij mensen wilt helpen betrokken te raken, plezier te hebben en wat te leren programmeren, dan is dit wellicht de klasse voor jou." - ambassador_introduction: "We zijn een community aan het uitbouwen, en jij maakt er deel van uit. We hebben Olark chatkamers, emails, en soeciale netwerken met veel andere mensen waarmee je kan praten en hulp kan vragen over het spel en om bij te leren. Als jij mensen wil helpen en te werken nabij de hartslag van CodeCombat in het bijsturen van onze toekomstvisie, dan is dit de geknipte klasse voor jou!" + ambassador_introduction: "We zijn een gemeenschap aan het uitbouwen, en jij maakt er deel van uit. We hebben Olark chatkamers, emails, en sociale netwerken met veel andere mensen waarmee je kan praten en hulp aan kan vragen over het spel of om bij te leren. Als jij mensen wil helpen en te werken nabij de hartslag van CodeCombat in het bijsturen van onze toekomstvisie, dan is dit de geknipte klasse voor jou!" ambassador_attribute_1: "Communicatieskills. Problemen die spelers hebben kunnen identificeren en ze helpen deze op te lossen. Verder zul je ook de rest van ons geïnformeerd houden over wat de spelers zeggen, wat ze leuk vinden, wat ze minder vinden en waar er meer van moet zijn!" ambassador_join_desc: "vertel ons wat over jezelf, wat je hebt gedaan en wat je graag zou doen. We zien verder wel!" ambassador_join_note_strong: "Opmerking" - ambassador_join_note_desc: "Een van onze topprioriteiten is om een multiplayer te bouwen waar spelers die moeite hebben een level op te lossen een wizard met een hoger level kunnen oproepen om te helpen. Dit zal een goede manier zijn voor ambassadeurs om hun ding te doen. We houden je op de hoogte!" + ambassador_join_note_desc: "Een van onze topprioriteiten is om een multiplayer te bouwen waar spelers die moeite hebben een level op te lossen een tovenaar met een hoger level kunnen oproepen om te helpen. Dit zal een goede manier zijn voor ambassadeurs om hun ding te doen. We houden je op de hoogte!" more_about_ambassador: "Leer meer over het worden van een behulpzame Ambassadeur" ambassador_subscribe_desc: "Ontvang e-mails met updates over ondersteuning en multiplayer-ontwikkelingen." counselor_summary: "Geen van de rollen hierboven in jouw interessegebied? Maak je geen zorgen, we zijn op zoek naar iedereen die wil helpen met het ontwikkelen van CodeCombat! Als je geïnteresseerd bent in lesgeven, gameontwikkeling, open source management of iets anders waarvan je denkt dat het relevant voor ons is, dan is dit de klasse voor jou." @@ -529,7 +535,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription creative_artisans: "Onze creatieve Ambachtslieden:" brave_adventurers: "Onze dappere Avonturiers:" translating_diplomats: "Onze vertalende Diplomaten:" - helpful_ambassadors: "Onze helpvolle Ambassadeurs:" + helpful_ambassadors: "Onze behulpzame Ambassadeurs:" classes: archmage_title: "Tovenaar" @@ -554,8 +560,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription simulation_explanation: "Door spellen te simuleren kan je zelf sneller beoordeeld worden!" simulate_games: "Simuleer spellen!" simulate_all: "RESET EN SIMULEER SPELLEN" -# games_simulated_by: "Games simulated by you:" -# games_simulated_for: "Games simulated for you:" + games_simulated_by: "Door jou gesimuleerde spellen:" + games_simulated_for: "Voor jou gesimuleerde spellen:" leaderboard: "Leaderboard" battle_as: "Vecht als " summary_your: "Jouw " @@ -575,7 +581,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription tutorial_play: "Speel de Tutorial" tutorial_recommended: "Aanbevolen als je nog niet eerder hebt gespeeld" tutorial_skip: "Sla Tutorial over" - tutorial_not_sure: "Niet zeker wat er aan de gang is?" + tutorial_not_sure: "Niet zeker wat er aan de hand is?" tutorial_play_first: "Speel eerst de Tutorial." simple_ai: "Simpele AI" warmup: "Opwarming" @@ -583,14 +589,14 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription multiplayer_launch: introducing_dungeon_arena: "Introductie van Dungeon Arena" - new_way: "De nieuwe manier om te concurreren met code." + new_way: "17 maart, 2014: De nieuwe manier om te concurreren met code." to_battle: "Naar het slagveld, ontwikkelaars!" - modern_day_sorcerer: "Kan jij programmeren? Hoe stoer is dat. Jij bent een modere voetballer! is het niet tijd dat je jouw magische krachten gebruikt voor het controlleren van jou minions in het slagveld? En nee, we praten heir niet over robots." - arenas_are_here: "CodeCombat head-to-head multiplayer arenas are here." - ladder_explanation: "Kies jouw helden, betover jouw mens of ogre legers, en beklim jouw weg naar de top in de ladder, door het verslagen van vriend en vijand. Daag nu je vrienden uit in multiplayer coding arenas en verkrijg faam en glorie. Indien je creatief bent, kan je zelfs" + modern_day_sorcerer: "Kan jij programmeren? Dat is pas stoer. Jij bent een modere tovenaar! Is het niet tijd dat je jouw magische krachten gebruikt voor het besturen van jou minions in het slagveld? En nee, we praten hier niet over robots." + arenas_are_here: "CodeCombat's kop aan kop multiplayer arena's zijn er." + ladder_explanation: "Kies jouw helden, betover jouw mensen of ogre legers, en beklim jouw weg naar de top in de ladder, door het verslagen van vriend en vijand. Daag nu je vrienden uit in de multiplayer programmeer arena's en verdien eeuwige roem. Indien je creatief bent, kan je zelfs" fork_our_arenas: "onze arenas forken" create_worlds: "en jouw eigen werelden creëren." - javascript_rusty: "Jouw JavaScript is een beetje roest? Wees niet bang, er is een" + javascript_rusty: "Jouw JavaScript is een beetje roestig? Wees niet bang, er is een" tutorial: "tutorial" new_to_programming: ". Ben je net begonnen met programmeren? Speel dan eerst onze beginners campagne." so_ready: "Ik ben hier zo klaar voor" diff --git a/app/locale/nl.coffee b/app/locale/nl.coffee index e2de4d9df..afcd5d37f 100644 --- a/app/locale/nl.coffee +++ b/app/locale/nl.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Nederlands", englishDescription: "Dutch", t sending: "Verzenden..." cancel: "Annuleren" save: "Opslagen" + create: "Creëer" delay_1_sec: "1 seconde" delay_3_sec: "3 secondes" delay_5_sec: "5 secondes" @@ -12,13 +13,13 @@ module.exports = nativeDescription: "Nederlands", englishDescription: "Dutch", t fork: "Fork" play: "Spelen" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + units: + second: "seconde" + seconds: "seconden" + minute: "minuut" + minutes: "minuten" + hour: "uur" + hours: "uren" modal: close: "Sluiten" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Nederlands", englishDescription: "Dutch", t login: sign_up: "Account maken" log_in: "Inloggen" + logging_in: "Bezig met inloggen" log_out: "Uitloggen" recover: "account herstellen" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Nederlands", englishDescription: "Dutch", t skip_tutorial: "Overslaan (esc)" editor_config: "Editor Configuratie" editor_config_title: "Editor Configuratie" + editor_config_language_label: "Programmeertaal" + editor_config_language_description: "Definieer de programmeertaal waarin jij wilt programmeren." editor_config_keybindings_label: "Toets instellingen" editor_config_keybindings_default: "Standaard (Ace)" editor_config_keybindings_description: "Voeg extra shortcuts toe van de gebruikelijke editors." @@ -242,27 +246,29 @@ module.exports = nativeDescription: "Nederlands", englishDescription: "Dutch", t tip_beta_launch: "CodeCombat lanceerde zijn beta versie in Oktober, 2013." tip_js_beginning: "JavaScript is nog maar het begin." tip_autocast_setting: "Verander de autocast instelling door te klikken op het tandwiel naast de cast knop." -# think_solution: "Think of the solution, not the problem." -# tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra" -# tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis" -# tip_debugging_program: "If debugging is the process of removing bugs, then programming must be the process of putting them in. - Edsger W. Dijkstra" -# tip_forums: "Head over to the forums and tell us what you think!" + think_solution: "Denk aan de oplossing, niet aan het probleem" + tip_theory_practice: "In theorie is er geen verschil tussen de theorie en de praktijk; in de praktijk is er wel een verschil. - Yogi Berra" + tip_error_free: "Er zijn twee manieren om fout-vrije code te schrijven, maar enkele de derde manier werkt. - Alan Perlis" + tip_debugging_program: "Als debuggen het proces is om bugs te verwijderen, dan moet programmeren het proces zijn om ze erin te stoppen. - Edsger W. Dijkstra" + tip_forums: "Ga naar de forums en vertel ons wat je denkt!" tip_baby_coders: "Zelfs babies zullen in de toekomst een Tovenaar zijn." tip_morale_improves: "Het spel zal blijven laden tot de moreel verbeterd." tip_all_species: "Wij geloven in gelijke kansen voor alle wezens om te leren programmeren." # tip_reticulating: "Reticulating spines." tip_harry: "Je bent een tovenaar, " -# tip_great_responsibility: "With great coding skill comes great debug responsibility." -# tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep." -# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't." -# tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda" -# tip_no_try: "Do. Or do not. There is no try. - Yoda" -# tip_patience: "Patience you must have, young Padawan. - Yoda" -# tip_documented_bug: "A documented bug is not a bug; it is a feature." -# tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" -# time_current: "Now:" -# time_total: "Max:" -# time_goto: "Go to:" + tip_great_responsibility: "Met een groots talent voor programmeren komt een grootse debug verantwoordelijkheid." + tip_munchkin: "Als je je groentjes niet opeet zal een munchkin je ontvoeren terwijl je slaapt." + tip_binary: "Er zijn 10 soorten mensen in de wereld: Mensen die binair kunnen tellen en mensen die dat niet kunnen." + tip_commitment_yoda: "Een programmeur moet de grootste inzet hebben, een meest serieuze geest. ~ Yoda" + tip_no_try: "Doe het. Of doe het niet. Je kunt niet proberen. - Yoda" + tip_patience: "Geduld moet je hebben, jonge Padawan. - Yoda" + tip_documented_bug: "Een gedocumenteerde fout is geen fout; het is deel van het programma." + tip_impossible: "Het lijkt altijd onmogelijk tot het gedaan wordt. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" + time_current: "Nu:" + time_total: "Maximum:" + time_goto: "Ga naar:" admin: av_title: "Administrator panels" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Nederlands", englishDescription: "Dutch", t more_about_archmage: "Leer meer over hoe je een Machtige Tovenaar kan worden" archmage_subscribe_desc: "Ontvang e-mails met nieuwe programmeer mogelijkheden en aankondigingen." artisan_summary_pref: "Wil je levels ontwerpen en CodeCombat's arsenaal vergroten? Mensen spelen sneller door onze content dan wij bij kunnen houden! Op dit moment is onze level editor nog wat beperkt, dus wees daarvan bewust. Het maken van levels zal een uitdaging zijn met een grote kans op fouten. Als jij een visie van campagnes hebt van for-loops tot" - artisan_summary_suf: "dan is dit de klasse voor jou." + artisan_summary_suf: ", dan is dit de klasse voor jou." artisan_introduction_pref: "We moeten meer levels bouwen! Mensen schreeuwen om meer inhoud, en er zijn ook maar zoveel levels dat wij kunnen maken. Momenteel is jouw werkplaats level een; onze level editor wordt zelfs door ons amper gebruikt, dus wees voorzichtig. Indien je een visie hebt van een campagne, gaande van for-loops tot" - artisan_introduction_suf: "dan is deze klasse waarschijnlijk iets voor jou." + artisan_introduction_suf: ", dan is deze klasse waarschijnlijk iets voor jou." artisan_attribute_1: "Enige ervaring in het maken van vergelijkbare inhoud. Bijvoorbeeld ervaring in het gebruiken van Blizzard's level editor. Maar dit is niet vereist!" artisan_attribute_2: "Tot in het detail testen en opnieuw proberen staat voor jou gelijk aan plezier. Om goede levels te maken, moet je het door anderen laten spelen en bereid zijn om een hele boel aan te passen." artisan_attribute_3: "Momenteel heb je nog veel geduld nodig, doordat onze editor nog vrij ruw is en op je zenuwen kan werken. Samenwerken met een Avonturier kan jou ook veel helpen." diff --git a/app/locale/nn.coffee b/app/locale/nn.coffee index 22f12947f..88c9d7d35 100644 --- a/app/locale/nn.coffee +++ b/app/locale/nn.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/no.coffee b/app/locale/no.coffee index 2b401c494..aa3c48484 100644 --- a/app/locale/no.coffee +++ b/app/locale/no.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr # sending: "Sending..." cancel: "Avbryt" # save: "Save" +# create: "Create" delay_1_sec: "1 sekunder" delay_3_sec: "3 sekunder" delay_5_sec: "5 sekunder" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr login: sign_up: "Lag konto" log_in: "Logg Inn" +# logging_in: "Logging In" log_out: "Logg Ut" recover: "gjenåpne konto" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/pl.coffee b/app/locale/pl.coffee index d8d4f85ec..b858762ce 100644 --- a/app/locale/pl.coffee +++ b/app/locale/pl.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish sending: "Wysyłanie…" cancel: "Anuluj" save: "Zapisz" +# create: "Create" delay_1_sec: "1 sekunda" delay_3_sec: "3 sekundy" delay_5_sec: "5 sekund" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish login: sign_up: "Stwórz konto" log_in: "Zaloguj się" +# logging_in: "Logging In" log_out: "Wyloguj się" recover: "odzyskaj konto" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish skip_tutorial: "Pomiń (esc)" editor_config: "Konfiguracja edytora" editor_config_title: "Konfiguracja edytora" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." editor_config_keybindings_label: "Przypisania klawiszy" editor_config_keybindings_default: "Domyślny (Ace)" editor_config_keybindings_description: "Dodaje skróty znane z popularnych edytorów." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" diff --git a/app/locale/pt-BR.coffee b/app/locale/pt-BR.coffee index 3802d0956..1e350d8e1 100644 --- a/app/locale/pt-BR.coffee +++ b/app/locale/pt-BR.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: sending: "Enviando..." cancel: "Cancelar" save: "Salvar" + create: "Criar" delay_1_sec: "1 segundo" delay_3_sec: "3 segundos" delay_5_sec: "5 segundos" @@ -12,13 +13,13 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: fork: "Fork" play: "Jogar" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + unidades: + second: "segundo" + seconds: "segundos" + minute: "minuto" + minutes: "minutos" + hour: "hora" + hours: "horas" modal: close: "Fechar" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: login: sign_up: "Criar conta" log_in: "Entrar" + logging_in: "Entrando" log_out: "Sair" recover: "Recuperar sua conta" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: skip_tutorial: "Pular (esc)" editor_config: "Editor de Configurações" editor_config_title: "Editor de Configurações" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." editor_config_keybindings_label: "Teclas de Atalho" editor_config_keybindings_default: "Padrão (Ace)" editor_config_keybindings_description: "Adicionar atalhos conhecidos de editores comuns." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "português do Brasil", englishDescription: more_about_archmage: "Saiba Mais Sobre Como Se Tornar Um Poderoso Arquimago" archmage_subscribe_desc: "Receba email sobre novas oportunidades para codificar e anúncios." artisan_summary_pref: "Quer criar níveis e ampliar o arsenal do CodeCombat? As pessoas estão jogando com o nosso conteúdo em um ritmo mais rápido do que podemos construir! Neste momento, nosso editor de níveis é instável, então fique esperto. Fazer os níveis será um pouco desafiador e com alguns bugs. Se você tem visões de campanhas abrangendo for-loops para" - artisan_summary_suf: "então essa classe é para você." + artisan_summary_suf: ", então essa classe é para você." artisan_introduction_pref: "Nós devemos contruir níveis adicionais! Pessoas estão clamando por mais conteúdo, e só podemos contruir tantos de nós mesmos. Agora sua estação de trabalho é o nível um; nosso Editor de Níveis é pouco utilizável até mesmo para seus criadores, então fique esperto. Se você tem visões de campanhas abrangendo for-loops para" - artisan_introduction_suf: "para, em seguida, esta classe pode ser para você." + artisan_introduction_suf: ", esta classe pode ser para você." artisan_attribute_1: "Qualquer experiência em construir conteúdo como esse seria legal, como usando os editores de nível da Blizzard. Mas não é obrigatório!" artisan_attribute_2: "Um desejo ardente de fazer um monte de testes e iteração. Para fazer bons níveis, você precisa levá-lo para os outros e vê-los jogar, e estar preparado para encontrar muitas coisas para consertar." artisan_attribute_3: "Por enquanto, a resistência em par com um Aventureiro. Nosso Editor de Níveis é super preliminar e frustrante para usar. Você foi avisado!" diff --git a/app/locale/pt-PT.coffee b/app/locale/pt-PT.coffee index d6744433c..5ad78369a 100644 --- a/app/locale/pt-PT.coffee +++ b/app/locale/pt-PT.coffee @@ -4,7 +4,8 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P saving: "A guardar..." sending: "A enviar..." cancel: "Cancelar" - save: "Save" + save: "Guardar" + create: "Create" delay_1_sec: "1 segundo" delay_3_sec: "3 segundos" delay_5_sec: "5 segundos" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P login: sign_up: "Criar conta" log_in: "Iniciar sessão" +# logging_in: "Logging In" log_out: "Sair" recover: "recuperar conta" @@ -121,7 +123,7 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P title: "Definições do Wizard" customize_avatar: "Altera o teu Avatar" clothes: "Roupas" - trim: "Faixa" + trim: "Pormenores" cloud: "Nuvem" spell: "Feitiço" boots: "Botas" @@ -162,7 +164,7 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P account_profile: edit_settings: "Editar Definições" profile_for_prefix: "Perfil de " -# profile_for_suffix: "" + profile_for_suffix: "" profile: "Perfil" user_not_found: "Nenhum utilizador encontrado. Verifica o URL?" gravatar_not_found_mine: "Não conseguimos encontrar o teu perfil associado com:" @@ -190,14 +192,14 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P reload_title: "Recarregar todo o código?" reload_really: "Tens a certeza que queres recarregar este nível de volta ao início?" reload_confirm: "Recarregar tudo" -# victory_title_prefix: "" + victory_title_prefix: "" victory_title_suffix: " Concluído" victory_sign_up: "Cria uma conta para guardar o teu progresso" victory_sign_up_poke: "Queres guardar o teu código? Cria uma conta grátis!" victory_rate_the_level: "Classifica este nível: " victory_rank_my_game: "Classifica o meu jogo" victory_ranking_game: "A submeter..." -# victory_return_to_ladder: "Return to Ladder" + victory_return_to_ladder: "Voltar à Classificação" victory_play_next_level: "Jogar próximo nível" victory_go_home: "Ir para o Inicio" victory_review: "Conta-nos mais!" @@ -212,8 +214,8 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P tome_minion_spells: "Feitiços dos teus Minions" tome_read_only_spells: "Feitiços apenas de leitura" tome_other_units: "Outras Unidades" -# tome_cast_button_castable: "Cast Spell" - tome_cast_button_casting: "A lançar" + tome_cast_button_castable: "Lançar Feitiço" + tome_cast_button_casting: "A Lançar Feitiço" tome_cast_button_cast: "Lançar Feitiço" # tome_autocast_delay: "Autocast Delay" tome_select_spell: "Escolhe um Feitiço" @@ -222,17 +224,19 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P hud_continue: "Continuar (shift-espaço)" spell_saved: "Feitiço Guardado" skip_tutorial: "Saltar (esc)" -# editor_config: "Editor Config" -# editor_config_title: "Editor Configuration" -# editor_config_keybindings_label: "Key Bindings" -# editor_config_keybindings_default: "Default (Ace)" -# editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." -# editor_config_invisibles_label: "Show Invisibles" -# editor_config_invisibles_description: "Displays invisibles such as spaces or tabs." -# editor_config_indentguides_label: "Show Indent Guides" -# editor_config_indentguides_description: "Displays vertical lines to see indentation better." -# editor_config_behaviors_label: "Smart Behaviors" -# editor_config_behaviors_description: "Autocompletes brackets, braces, and quotes." + editor_config: "Configurar Editor" + editor_config_title: "Configuração do Editor" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." + editor_config_keybindings_label: "Atalhos de Teclado" + editor_config_keybindings_default: "Predefinição (Ace)" + editor_config_keybindings_description: "Adiciona atalhos de teclado de acordo com o editor escolhido" + editor_config_invisibles_label: "Mostrar Invisíveis" + editor_config_invisibles_description: "Mostra caracteres invisíveis como espaços e tabulações" + editor_config_indentguides_label: "Mostrar Guias" + editor_config_indentguides_description: "Mostra linhas verticais de acordo com a identação." + editor_config_behaviors_label: "Comportamentos Inteligentes" + editor_config_behaviors_description: "Completa automaticamente chavetas, parêntesis e aspas" # loading_ready: "Ready!" # 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." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -267,8 +273,8 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P admin: av_title: "Visualizações de Admin" av_entities_sub_title: "Entidades" - av_entities_users_url: "utilizadores" - av_entities_active_instances_url: "Activar Instancias" + av_entities_users_url: "Utilizadores" + av_entities_active_instances_url: "Activar Instâncias" av_other_sub_title: "Outro" av_other_debug_base_url: "Base (para fazer debug base.jade)" u_title: "Lista de Utilizadores" @@ -315,11 +321,11 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P new_component_title: "Criar novo Componente" new_component_field_system: "Sistema" new_article_title: "Criar um Novo Artigo" - new_thang_title: "Criar um Novo tipo the Thang" + new_thang_title: "Criar um Novo Tipo de Thang" new_level_title: "Criar um Novo Nível" - article_search_title: "Procura Artigos Aqui" - thang_search_title: "Procura Tipos de Thang Aqui" - level_search_title: "Procura Níveis aqui" + article_search_title: "Procurar Artigos Aqui" + thang_search_title: "Procurar Tipos de Thang Aqui" + level_search_title: "Procurar Níveis Aqui" article: edit_btn_preview: "Visualizar" @@ -341,7 +347,7 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P password: "Palavra-passe" message: "Mensagem" code: "Código" -# ladder: "Ladder" + ladder: "Classificação" when: "quando" opponent: "Adversário" rank: "Classificação" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" @@ -548,36 +554,36 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P counselor_title_description: "(Expert/ Professor)" ladder: -# please_login: "Please log in first before playing a ladder game." + please_login: "Por favor, faz log in antes de jogar um jogo para o campeonato." my_matches: "Os meus jogos" simulate: "Simular" -# simulation_explanation: "By simulating games you can get your game ranked faster!" -# simulate_games: "Simulate Games!" + simulation_explanation: "Simulando jogos podes fazer com que o teu jogo seja classificado mais rapidamente!" + simulate_games: "Simular Jogos!" # simulate_all: "RESET AND SIMULATE GAMES" # games_simulated_by: "Games simulated by you:" # games_simulated_for: "Games simulated for you:" -# leaderboard: "Leaderboard" -# battle_as: "Battle as " -# summary_your: "Your " -# summary_matches: "Matches - " + leaderboard: "Tabela de Classificação" + battle_as: "Lutar como " + summary_your: "As tuas " + summary_matches: "Partidas - " summary_wins: " Vitórias, " summary_losses: " Derrotas" -# rank_no_code: "No New Code to Rank" + rank_no_code: "Sem código novo para classificar" rank_my_game: "Classifica o meu jogo!" rank_submitting: "A submeter..." rank_submitted: "Submetido para Classificação" rank_failed: "Falhou a Classificar" rank_being_ranked: "Jogo a ser Classificado" -# code_being_simulated: "Your new code is being simulated by other players for ranking. This will refresh as new matches come in." -# no_ranked_matches_pre: "No ranked matches for the " -# no_ranked_matches_post: " team! Play against some competitors and then come back here to get your game ranked." + code_being_simulated: "O teu código está a ser simulado por outros jogadores, para ser classificado. Isto será actualizado quando surgirem novas partidas." + no_ranked_matches_pre: "Sem jogos classificados pela equipa " + no_ranked_matches_post: "! Joga contra alguns adversários e volta aqui para veres o teu jogo classificado." choose_opponent: "Escolhe um Adversário" tutorial_play: "Jogar Tutorial" tutorial_recommended: "Recomendado se nunca jogaste antes" tutorial_skip: "Saltar Tutorial" tutorial_not_sure: "Não tens a certeza do que se passa?" tutorial_play_first: "Joga o Tutorial primeiro." -# simple_ai: "Simple AI" + simple_ai: "Inteligência Artificial Simples" warmup: "Aquecimento" vs: "VS" @@ -585,11 +591,11 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P introducing_dungeon_arena: "Introduzindo a Dungeon Arena" new_way: "Uma nova forma de competir com código." to_battle: "Às armas, Programadores!" -# modern_day_sorcerer: "You know how to code? That's badass. You're a modern-day sorcerer! Isn't about time that you used your magic coding powers to command your minions in epic combat? And we're not talking robots here." + modern_day_sorcerer: "Sabes programar? És tão forte! És um feiticeiro dos tempos modernos! Será que não está na altura de usares os teus poderes mágicos de programação para comandar os teus servos em combates épicos? E não estamos a falar de robots." arenas_are_here: "As arenas mano-a-mano multiplayer de CodeCombat estão aqui." -# ladder_explanation: "Choose your heroes, enchant your human or ogre armies, and climb your way over defeated fellow Wizards to reach the top of the ladders–then challenge your friends in our glorious, asynchronous multiplayer coding arenas. If you're feeling creative, you can even" -# fork_our_arenas: "fork our arenas" - create_worlds: "e cria os teus próprios mundos." + ladder_explanation: "Escolhe os teus heróis, encanta os teus exércitos de ogres ou humanos, e constrói o teu caminho, derrotando outros Feiticeiros para chegares ao topo da classificação. Depois, desafia os teus amigos para gloriosas arenas de programação multijogador. Se te sentes criativo, podes até" + fork_our_arenas: "alterar as nossas arenas" + create_worlds: "e criar os teus próprios mundos." javascript_rusty: "O teu JavaScript está enferrujado? Não te preocupes; Existe um" tutorial: "tutorial" new_to_programming: ". Novo na programação? Faz a Campanha para Iniciantes para expandires as tuas capacidades." diff --git a/app/locale/pt.coffee b/app/locale/pt.coffee index 7008fc8fb..09d07b3db 100644 --- a/app/locale/pt.coffee +++ b/app/locale/pt.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "português", englishDescription: "Portugues sending: "Enviando..." cancel: "Cancelar" # save: "Save" +# create: "Create" delay_1_sec: "1 segundo" delay_3_sec: "3 segundos" delay_5_sec: "5 segundos" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "português", englishDescription: "Portugues login: sign_up: "Criar conta" log_in: "Entrar" +# logging_in: "Logging In" log_out: "Sair" recover: "recuperar sua conta" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "português", englishDescription: "Portugues # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "português", englishDescription: "Portugues # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "português", englishDescription: "Portugues # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/ro.coffee b/app/locale/ro.coffee index 789bd1159..d32ba3c6d 100644 --- a/app/locale/ro.coffee +++ b/app/locale/ro.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman sending: "Se trimite..." cancel: "Anulează" save: "Salvează" + create: "Crează" delay_1_sec: "1 secundă" delay_3_sec: "3 secunde" delay_5_sec: "5 secunde" @@ -12,13 +13,13 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman fork: "Fork" play: "Joacă" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + units: + second: "secundă" + seconds: "secunde" + minute: "minut" + minutes: "minute" + hour: "oră" + hours: "ore" modal: close: "Inchide" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman login: sign_up: "Crează cont" log_in: "Log In" + logging_in: "Se conectează" log_out: "Log Out" recover: "recuperează cont" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman skip_tutorial: "Sari peste (esc)" editor_config: "Editor Config" editor_config_title: "Configurare Editor" + editor_config_language_label: "Limbaj de Programare" + editor_config_language_description: "Definește limbajul de programare în care vrei să codezi." editor_config_keybindings_label: "Mapare taste" editor_config_keybindings_default: "Default (Ace)" editor_config_keybindings_description: "Adaugă comenzi rapide suplimentare cunoscute din editoarele obisnuite." @@ -242,17 +246,17 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman tip_beta_launch: "CodeCombat a fost lansat beta in Octombrie 2013." tip_js_beginning: "JavaScript este doar începutul." tip_autocast_setting: "Ajutează setările de autocast apăsând pe rotița de pe buton." -# think_solution: "Think of the solution, not the problem." -# tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra" -# tip_error_free: "There are two ways to write error-free programs; only the third one works. - Alan Perlis" -# tip_debugging_program: "If debugging is the process of removing bugs, then programming must be the process of putting them in. - Edsger W. Dijkstra" -# tip_forums: "Head over to the forums and tell us what you think!" + think_solution: "Gândește-te la soluție, nu la problemă." + tip_theory_practice: "Teoretic nu este nici o diferență înte teorie și practică. Dar practic este. - Yogi Berra" + tip_error_free: "Există doar două metode de a scrie un program fără erori; numai a treia funcționează. - Alan Perlis" + tip_debugging_program: "Dacă a face debuggin este procesul de a scoate bug-uri, atunci a programa este procesul de a introduce bug-uri. - Edsger W. Dijkstra" + tip_forums: "Intră pe forum și spune-ți părerea!" tip_baby_coders: "În vitor până și bebelușii vor fi Archmage." tip_morale_improves: "Se va încărca până până când va crește moralul." tip_all_species: "Noi credem în șanse egale de a învăța programare pentru toate speciile." -# tip_reticulating: "Reticulating spines." + tip_reticulating: "Reticulating spines." tip_harry: "Ha un Wizard, " -# tip_great_responsibility: "With great coding skill comes great debug responsibility." + tip_great_responsibility: "With great coding skill comes great debug responsibility." # tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep." # tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't." # tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda" @@ -260,6 +264,8 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman more_about_archmage: "Învață mai multe despre cum să devi un Archmage" archmage_subscribe_desc: "Primește email-uri despre noi oportunități de progrmare și anunțuri." artisan_summary_pref: "Vrei să creezi nivele și să extinzi arsenalul CodeCombat? Oamenii ne termină nivelele mai repede decât putem să le creăm! Momentan, editorul nostru de nivele este rudimentar, așa că aveți grijă. Crearea de nivele va fi o mică provocare și va mai avea câteva bug-uri. Dacă ai viziuni cu campanii care cuprind loop-uri for pentru" - artisan_summary_suf: "atunci asta e clasa pentru tine." + artisan_summary_suf: ", atunci asta e clasa pentru tine." artisan_introduction_pref: "Trebuie să construim nivele adiționale! Oamenii sunt nerăbdători pentru mai mult conținut, și noi putem face doar atât singuri. Momentan editorul de nivele abia este utilizabil până și de creatorii lui, așa că aveți grijă. Dacă ai viziuni cu campanii care cuprind loop-uri for pentru" - artisan_introduction_suf: "atunci aceasta ar fi clasa pentru tine." + artisan_introduction_suf: ", atunci aceasta ar fi clasa pentru tine." artisan_attribute_1: "Orice experiență în crearea de conținut ca acesta ar fi de preferat, precum folosirea editoarelor de nivele de la Blizzard. Dar nu este obligatoriu!" artisan_attribute_2: "Un chef de a face o mulțime de teste și iterări. Pentru a face nivele bune, trebuie să testați pe mai mulți oameni și să obțineți feedback, și să fiți pregăți să reparați o mulțime de lucruri." artisan_attribute_3: "Pentru moment trebui să ai nervi de oțel. Editorul nostru de nivele este abia la început și încă are multe probleme. Ai fost avertizat!" @@ -581,16 +587,16 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman warmup: "Încălzire" vs: "VS" -# multiplayer_launch: -# introducing_dungeon_arena: "Introducing Dungeon Arena" -# new_way: "The new way to compete with code." -# to_battle: "To Battle, Developers!" -# modern_day_sorcerer: "You know how to code? That's badass. You're a modern-day sorcerer! Isn't about time that you used your magic coding powers to command your minions in epic combat? And we're not talking robots here." -# arenas_are_here: "CodeCombat head-to-head multiplayer arenas are here." -# ladder_explanation: "Choose your heroes, enchant your human or ogre armies, and climb your way over defeated fellow Wizards to reach the top of the ladders–then challenge your friends in our glorious, asynchronous multiplayer coding arenas. If you're feeling creative, you can even" -# fork_our_arenas: "fork our arenas" -# create_worlds: "and create your own worlds." -# javascript_rusty: "JavaScript a bit rusty? Don't worry; there's a" -# tutorial: "tutorial" -# new_to_programming: ". New to programming? Hit our beginner campaign to skill up." -# so_ready: "I Am So Ready for This" + multiplayer_launch: + introducing_dungeon_arena: "Prezentăm Dungeon Arena" + new_way: "Noul mod de a concura prin linii de cod." + to_battle: "La luptă, Developers!" + modern_day_sorcerer: "Știi să programezie? Tare. Ești un vrăjitor al noii ere! Nu crezi ca este timpul să îți folosești puterile de programare pentru a conduce în lupte epice minionii tăi? Și nu vorbim despre roboți aici." + arenas_are_here: "Arenele CodeCombat multiplayer 1v1 sunt aici." + ladder_explanation: "Alegeți eroii,vrăjește armatele de orci sau oameni, și croiește-ți drumul luptând și învingând alți Vrăjitori pentru a ajunge în topul clasamentului. Dacă te simți creativ poți chiar să" + fork_our_arenas: "să dai fork la arenele noastre" + create_worlds: "și să îți creezi propriile lumi." + javascript_rusty: "N-ai mai pus mâna pe JavaScript? Nicio problemă; există un" + tutorial: "tutorial" + new_to_programming: ". Nou in tainele programării? Încearcă campania de începători pentru ați dezolvata abilitățile." + so_ready: "Sunt atât de pregătit pentru asta!" diff --git a/app/locale/ru.coffee b/app/locale/ru.coffee index d4b35cde0..5f77ea288 100644 --- a/app/locale/ru.coffee +++ b/app/locale/ru.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi sending: "Отправка..." cancel: "Отмена" save: "Сохранить" + create: "Создать" delay_1_sec: "1 секунда" delay_3_sec: "3 секунды" delay_5_sec: "5 секунд" @@ -12,13 +13,13 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi fork: "Форк" play: "Играть" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + units: + second: "секунда" + seconds: "секунд(ы)" + minute: "минута" + minutes: "минут(ы)" + hour: "час" + hours: "часа(ов)" modal: close: "Закрыть" @@ -32,7 +33,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi editor: "Редактор" blog: "Блог" forum: "Форум" - admin: "Администратор" + admin: "Админ" home: "Домой" contribute: "Сотрудничество" legal: "Юридическая информация" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi login: sign_up: "Создать аккаунт" log_in: "Войти" + logging_in: "Вход..." log_out: "Выйти" recover: "восстановить аккаунт" @@ -61,7 +63,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi signup: create_account_title: "Создать аккаунт, чтобы сохранить прогресс" - description: "Это бесплатно. Нужна лишь пара вещей и вы сможете продолжить путешествие:" + description: "Это бесплатно. Нужна лишь пара вещей, и вы сможете продолжить путешествие:" email_announcements: "Получать оповещения на email" coppa: "Вы старше 13 лет или живёте не в США " coppa_why: "(почему?)" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi skip_tutorial: "Пропуск (Esc)" editor_config: "Настройки редактора" editor_config_title: "Настройки редактора" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." editor_config_keybindings_label: "Сочетания клавиш" editor_config_keybindings_default: "По умолчанию (Ace)" editor_config_keybindings_description: "Добавляет дополнительные сочетания, известные из популярных редакторов." @@ -239,7 +243,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi tip_scrub_shortcut: "Ctrl+[ и Ctrl+] - перемотка назад и вперёд." tip_guide_exists: "Щёлкните \"руководство\" наверху страницы для получения полезной информации." tip_open_source: "Исходный код CodeCombat открыт на 100%!" - tip_beta_launch: "CodeCombat запустил бета-тестирование в октябре 2013." + tip_beta_launch: "CodeCombat запустил бета-тестирование в октябре 2013 года." tip_js_beginning: "JavaScript это только начало." tip_autocast_setting: "Изменяйте настройки авточтения заклинания, щёлкнув по шестерёнке на кнопке прочтения." think_solution: "Думайте о решении, а не о проблеме." @@ -260,9 +264,11 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi tip_patience: "Терпением ты обладать должен, юный падаван. - Yoda" tip_documented_bug: "Документированный баг не является багом; это фича." tip_impossible: "Это всегда кажется невозможным, пока не сделано. - Nelson Mandela" -# time_current: "Now:" -# time_total: "Max:" -# time_goto: "Go to:" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" + time_current: "Текущее:" + time_total: "Максимальное:" + time_goto: "Перейти на:" admin: av_title: "Админ панель" @@ -387,7 +393,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi practices_title: "Уважаемые лучшие практики" practices_description: "Это наши обещания тебе, игроку, менее юридическим языком." privacy_title: "Конфиденциальность" - privacy_description: "Мы не будем продавать какой-либо личной информации. Мы намерены заработать деньги с помощью рекрутинга в конечном счёте, но будьте уверены, мы не будем распространять вашу личную информацию заинтересованным компаниям без вашего явного согласия." + privacy_description: "Мы не будем продавать какую-либо личную информацию. Мы намерены заработать деньги с помощью рекрутинга в конечном счёте, но будьте уверены, мы не будем распространять вашу личную информацию заинтересованным компаниям без вашего явного согласия." security_title: "Безопасность" security_description: "Мы стремимся сохранить вашу личную информацию в безопасности. Как проект с открытым исходным кодом, наш сайт открыт для всех в вопросах пересмотра и совершенствования систем безопасности." email_title: "Email" @@ -459,7 +465,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi how_to_join: "Как присоединиться" join_desc_1: "Любой желающий может помочь! Просто ознакомьтесь с нашим " join_desc_2: "чтобы начать, и установите флажок ниже, чтобы отметить себя как отважного Архимага и получать последние новости через email. Хотите поговорить о том, что делать или как принять более активное участие? " - join_desc_3: "или найдите нас в " + join_desc_3: " или найдите нас в " join_desc_4: "и мы решим, откуда можно начать!" join_url_email: "Напишите нам" join_url_hipchat: "публичной комнате HipChat" @@ -505,7 +511,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi diplomat_attribute_1: "Свободное владение английским языком и языком, на который вы хотели бы переводить. При передаче сложных идей важно иметь сильную хватку в обоих!" diplomat_join_pref_github: "Найдите файл локализации вашего языка " diplomat_github_url: "на GitHub" - diplomat_join_suf_github: ", отредактируйте его онлайн и отправьте запрос на включение изменений. Кроме того, установите флажок ниже, чтобы быть в курсе новых разработок интернационализации!" + diplomat_join_suf_github: ", отредактируйте его онлайн и отправьте запрос на подтверждение изменений. Кроме того, установите флажок ниже, чтобы быть в курсе новых разработок интернационализации!" more_about_diplomat: "Узнать больше о том, как стать Дипломатом" diplomat_subscribe_desc: "Получать email-ы о i18n разработках и уровнях для перевода." ambassador_summary: "Мы пытаемся создать сообщество, и каждое сообщество нуждается в службе поддержки, когда есть проблемы. У нас есть чаты, электронная почта и социальные сети, чтобы наши пользователи могли познакомиться с игрой. Если вы хотите помочь людям втянуться, получать удовольствие и учиться программированию, этот класс для вас." @@ -587,10 +593,10 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi to_battle: "В бой, разработчики!" modern_day_sorcerer: "Вы знаете, как программировать? Это круто. Вы волшебник наших дней! Разве не время, чтобы вы использовали свои магические силы программирования для управления миньонами в эпичной битве? И мы не говорим здесь роботы." arenas_are_here: "Мультиплеерные арены CodeCombat на равных уже здесь." - ladder_explanation: "Выбирайте своих героев, зачаровывайте свои армии людей или огров, и взберитесь через поверженных коллег-Волшебников на вершину ладдеров–затем бросьте вызов своим друзьям в наших славных, асинхронно-мультиплеерных аренах прогрммирования. Если вы ощущаете себя творческим, можете даже" - fork_our_arenas: "сделать форк наших арен" + ladder_explanation: "Выбирайте своих героев, зачаровывайте свои армии людей или огров, и взберитесь через поверженных коллег-Волшебников на вершину ладдеров – затем бросьте вызов своим друзьям в наших славных, асинхронно-мультиплеерных аренах прогрммирования. Если вы ощущаете себя творческим, можете даже" + fork_our_arenas: "сделать модификации наших арен" create_worlds: "и создавать свои собственные миры." javascript_rusty: "Подзабыли JavaScript? Не беспокойтесь; есть" tutorial: "обучение" new_to_programming: ". Новичок в программировании? Пройдите нашу кампанию для новичков, чтобы повысить навык." - so_ready: "Я полностью готов для этого" + so_ready: "Я полностью готов(а) для этого" diff --git a/app/locale/sk.coffee b/app/locale/sk.coffee index 4c58049a7..70214b991 100644 --- a/app/locale/sk.coffee +++ b/app/locale/sk.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", sending: "Odosiela sa..." cancel: "Zruš" save: "Ulož" +# create: "Create" delay_1_sec: "1 sekunda" delay_3_sec: "3 sekundy" delay_5_sec: "5 sekúnd" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", login: sign_up: "Vytvor účet" log_in: "Prihlás sa" +# logging_in: "Logging In" log_out: "Odhlás sa" recover: "obnov" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak", # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/sl.coffee b/app/locale/sl.coffee index 56cbd080b..4815699e8 100644 --- a/app/locale/sl.coffee +++ b/app/locale/sl.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/sr.coffee b/app/locale/sr.coffee index 0437de30c..ba3d37cf9 100644 --- a/app/locale/sr.coffee +++ b/app/locale/sr.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian sending: "Шаље се..." cancel: "Откажи" # save: "Save" +# create: "Create" delay_1_sec: "1 секунда" delay_3_sec: "3 секунде" delay_5_sec: "5 секунди" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian login: sign_up: "Направи Налог" log_in: "Улогуј Се" +# logging_in: "Logging In" log_out: "Излогуј Се" recover: "Поврати налог" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/sv.coffee b/app/locale/sv.coffee index 577ffb5bc..9da2588d2 100644 --- a/app/locale/sv.coffee +++ b/app/locale/sv.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr sending: "Skickar..." cancel: "Avbryt" save: "Spara" +# create: "Create" delay_1_sec: "1 sekund" delay_3_sec: "3 sekunder" delay_5_sec: "5 sekunder" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr login: sign_up: "Skapa konto" log_in: "Logga in" +# logging_in: "Logging In" log_out: "Logga ut" recover: "glömt lösenord" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr skip_tutorial: "Hoppa över (esc)" editor_config: "Ställ in redigerare" editor_config_title: "Redigerarinställningar" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." editor_config_keybindings_label: "Kortkommandon" editor_config_keybindings_default: "Standard (Ace)" editor_config_keybindings_description: "Lägger till ytterligare kortkommandon kända från vanliga redigerare." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr more_about_archmage: "Lär dig mer om att bli en huvudmagiker" archmage_subscribe_desc: "Få mail om nya kodmöjligheter och tillkännagivanden." artisan_summary_pref: "Vill du designa nivåer och utvidga CodeCombats arsenal? Folk spelar igenom vårt innehåll snabbare än vi kan bygga! För tillfället är vår nivåredigerare ganska mager, så var uppmärksam. Att skapa nivåer kommer att vara lite utmanande och buggigt. Om du har visioner av kampanjer som sträcker sig från for-loopar till" - artisan_summary_suf: "är den här klassen för dig." + artisan_summary_suf: ", är den här klassen för dig." artisan_introduction_pref: "Vi måste bygga fler nivåer! Människor kräver mer innehåll, och vi kan bara bygga en viss mängd själva. Just nu är arbetsstation nivå ett; vår nivåredigerare är knappt användbar ens av dess skapare, så var uppmärksam. Om du har visioner av kampanjer som sträcker sig från for-loopar till" - artisan_introduction_suf: "är den här klassen kanske något för dig." + artisan_introduction_suf: ", är den här klassen kanske något för dig." artisan_attribute_1: "Någon erfarenhet av att bygga liknande innehåll vore bra, som till exempel Blizzards nivåredigerare. Det är dock inget krav!" artisan_attribute_2: "En vilja att göra en hel del testande och upprepning. För att göra bra nivåer, måste du ta dem till andra och se dem spela den, och vara beredd på att hitta många saker att laga." artisan_attribute_3: "För tillfället, uthållighet i klass med en äventyrare. Vår nivåredigerare är väldigt preliminär och frustrerande att använda. Du är varnad!" diff --git a/app/locale/th.coffee b/app/locale/th.coffee index f7155c267..f5806b980 100644 --- a/app/locale/th.coffee +++ b/app/locale/th.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # sending: "Sending..." cancel: "ยกเลิก" # save: "Save" +# create: "Create" delay_1_sec: "1 วินาที" delay_3_sec: "3 วินาที" delay_5_sec: "5 วินาที" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra login: sign_up: "ลงทะเบียนใหม่" log_in: "ลงชื่อเข้าใช้" +# logging_in: "Logging In" log_out: "ลงชื่ื่อออก" recover: "กู้บัญชีการใช้งาน" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/tr.coffee b/app/locale/tr.coffee index e1cc00b36..f72b6e2a0 100644 --- a/app/locale/tr.coffee +++ b/app/locale/tr.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t sending: "Gönderiliyor..." cancel: "İptal" save: "Kaydet" +# create: "Create" delay_1_sec: "1 saniye" delay_3_sec: "3 saniye" delay_5_sec: "5 saniye" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t login: sign_up: "Kaydol" log_in: "Giriş Yap" +# logging_in: "Logging In" log_out: "Çıkış Yap" recover: "şifrenizi sıfırlayabilirsiniz." @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/uk.coffee b/app/locale/uk.coffee index c0c9b4076..dd8967069 100644 --- a/app/locale/uk.coffee +++ b/app/locale/uk.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "українська мова", englishDesc sending: "Надсилання..." cancel: "Відміна" save: "Зберегти" +# create: "Create" delay_1_sec: "1 секунда" delay_3_sec: "3 секунди" delay_5_sec: "5 секунд" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "українська мова", englishDesc login: sign_up: "створити акаунт" log_in: "Увійти" +# logging_in: "Logging In" log_out: "Вийти" recover: "відновити акаунт" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "українська мова", englishDesc skip_tutorial: "Пропустити (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" editor_config_keybindings_default: "За замовчуванням (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "українська мова", englishDesc # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -356,36 +362,36 @@ module.exports = nativeDescription: "українська мова", englishDesc about: who_is_codecombat: "Хто є CodeCombat?" why_codecombat: "Чому CodeCombat?" - who_description_prefix: "Взагалом розпочався CodeCombat у 2013. Ми також створили " -# who_description_suffix: "in 2008, growing it to the #1 web and iOS application for learning to write Chinese and Japanese characters." + who_description_prefix: "разом започаткували CodeCombat у 2013. Ми також створили " + who_description_suffix: "у 2008 і вивели його на перше місце серед web та iOS додаткив, що навчають писати китайською та японською." who_description_ending: "Зараз час вчити людей писати код." -# why_paragraph_1: "When making Skritter, George didn't know how to program and was constantly frustrated by his inability to implement his ideas. Afterwards, he tried learning, but the lessons were too slow. His housemate, wanting to reskill and stop teaching, tried Codecademy, but \"got bored.\" Each week another friend started Codecademy, then dropped off. We realized it was the same problem we'd solved with Skritter: people learning a skill via slow, intensive lessons when what they need is fast, extensive practice. We know how to fix that." -# why_paragraph_2: "Need to learn to code? You don't need lessons. You need to write a lot of code and have a great time doing it." -# why_paragraph_3_prefix: "That's what programming is about. It's gotta be fun. Not fun like" -# why_paragraph_3_italic: "yay a badge" -# why_paragraph_3_center: "but fun like" + why_paragraph_1: "Створюючи Skritter, George не знав програмування й постійно засмучувався через неможливість самостійно втілити власні ідеї. Зрештою він спробував вивчитися, але навчання йшло надто повільною Сусід Джорджа, бажаючи оновити знання, спробував Codecademy, але \"стало нудно.\" Щотижня хтось з друзів починав навчання у Codecademy, але кидав. Ми зрозуміли, що зіткнулися з тією ж проблемою. що під час створення Skritter: люди набувають навичок через повільні, інтенсивні лекції, тоді як усе, чого вони потребують, це швидка, екстенсивна практика. І ми знаємо, як це полагодити." + why_paragraph_2: "Хочете навчитися писати код? Вам не потрібні уроки. Вам потрібно писати багато коду і добре розважитись у цей час. " + why_paragraph_3_prefix: "Ось що таке програмування насправді. Це має бути весело. Не просто кумедно штибу" + why_paragraph_3_italic: "дивіться, я маю бейджик, " + why_paragraph_3_center: "а весело - штибу" why_paragraph_3_italic_caps: "НІ, МАМО, Я МАЮ ПРОЙТИ РІВЕНЬ!" -# why_paragraph_3_suffix: "That's why CodeCombat is a multiplayer game, not a gamified lesson course. We won't stop until you can't stop--but this time, that's a good thing." -# why_paragraph_4: "If you're going to get addicted to some game, get addicted to this one and become one of the wizards of the tech age." -# why_ending: "And hey, it's free. " -# why_ending_url: "Start wizarding now!" -# george_description: "CEO, business guy, web designer, game designer, and champion of beginning programmers everywhere." -# scott_description: "Programmer extraordinaire, software architect, kitchen wizard, and master of finances. Scott is the reasonable one." -# nick_description: "Programming wizard, eccentric motivation mage, and upside-down experimenter. Nick can do anything and chooses to build CodeCombat." -# jeremy_description: "Customer support mage, usability tester, and community organizer; you've probably already spoken with Jeremy." -# michael_description: "Programmer, sys-admin, and undergrad technical wunderkind, Michael is the person keeping our servers online." -# glen_description: "Programmer and passionate game developer, with the motivation to make this world a better place, by developing things that matter. The word impossible can't be found in his dictionary. Learning new skills is his joy!" + why_paragraph_3_suffix: "Ось чому CodeCombat - мультиплеєрна гра, а не гейміфікований курс уроків. Ми не зупинимося, доки ви не включитеся на повну, і це чудово. " + why_paragraph_4: "Якщо ви плануєте бути залежним від якоїсь гри, оберіть цю - і перетворіться на одного з чарівників ери інформаційних технологій." + why_ending: "І так, це безкоштовно. " + why_ending_url: "Починаймо чародійства прямо зараз!" + george_description: "CEO, знавець бізнесу, веб-дизайнер, гейм-дизайнер і ватажок програмістів-початківців з усього світу." + scott_description: "Екстраординарний програміст, архітектор програмного забезпечення, кулінарний чарівник та майстер фінансів. Скотт - розсудливий." + nick_description: "Чарівник програмування, ексцентричний маг мотивації та непересічний експериментатор. Нік здатен зробити будь-що, і він обрав зробити CodeCombat." + jeremy_description: "Чарівник підтримки користувачів, тестер юзабіліті та організатор спільноти; ви ймовірно вже спілкувались з Джеремі." + michael_description: "Програміст, адмін та загадковий технічний вундеркінд, Майкл - та людина, що утримує наші сервери онлайн." + glen_description: "Програміст та натхненний розробник ігор, що мріє зробити цей світ краще, створюючи дійсно значущі речі. Ніколи не вживає слова \"неможливо\". Дізнаватися нове - для нього найбільша насолода!" legal: - page_title: "Юридичні нотатки" -# opensource_intro: "CodeCombat is free to play and completely open source." -# opensource_description_prefix: "Check out " - github_url: "наш GitHub" -# opensource_description_center: "and help out if you like! CodeCombat is built on dozens of open source projects, and we love them. See " -# archmage_wiki_url: "our Archmage wiki" -# opensource_description_suffix: "for a list of the software that makes this game possible." -# practices_title: "Respectful Best Practices" -# practices_description: "These are our promises to you, the player, in slightly less legalese." + page_title: "Юридична інформація" + opensource_intro: "CodeCombat - безкоштовна гра з повністю відкритим кодом." + opensource_description_prefix: "Завітайте" + github_url: "на наш GitHub" + opensource_description_center: "та долучайтесь, якщо хочете! CodeCombat побудовано на десятках проектів із вікритим кодом. і ми любимо їх. Перегляньте " + archmage_wiki_url: "нашу wiki для Архімагів," + opensource_description_suffix: "щоб побачити списки ПЗ, яке робить цю гру можливою." + practices_title: "Шановні найкращі гравці" +# practices_description: "These are our promi ses to you, the player, in slightly less legalese." # privacy_title: "Privacy" # privacy_description: "We will not sell any of your personal information. We intend to make money through recruitment eventually, but rest assured we will not distribute your personal information to interested companies without your explicit consent." # security_title: "Security" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "українська мова", englishDesc # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/ur.coffee b/app/locale/ur.coffee index 923fb3fe4..3af879f81 100644 --- a/app/locale/ur.coffee +++ b/app/locale/ur.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # sending: "Sending..." # cancel: "Cancel" # save: "Save" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # login: # sign_up: "Create Account" # log_in: "Log In" +# logging_in: "Logging In" # log_out: "Log Out" # recover: "recover account" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu", # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/vi.coffee b/app/locale/vi.coffee index d5d563f7a..b8a3dfbf5 100644 --- a/app/locale/vi.coffee +++ b/app/locale/vi.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn sending: "Gởi..." cancel: "Hủy" save: "Lưu" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn login: sign_up: "Tạo tài khoản" log_in: "Đăng nhập" +# logging_in: "Logging In" log_out: "Đăng xuất" recover: "Khôi phục tài khoản" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/zh-HANS.coffee b/app/locale/zh-HANS.coffee index 946a003a9..36b055bd1 100644 --- a/app/locale/zh-HANS.coffee +++ b/app/locale/zh-HANS.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese sending: "发送中……" cancel: "取消" save: "保存" +# create: "Create" delay_1_sec: "1 秒" delay_3_sec: "3 秒" delay_5_sec: "5 秒" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese login: sign_up: "注册" log_in: "登录" +# logging_in: "Logging In" log_out: "登出" recover: "找回账户" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese skip_tutorial: "跳过(esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -468,7 +474,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese artisan_summary_pref: "想要设计 CodeCombat 的关卡吗?人们玩的比我们做的快多了!现在我们的关卡编辑器还很基本,所以做起关卡来会有点麻烦,还会有bug。只要你有制作关卡的灵感,不管是简单的for循环还是" artisan_summary_suf: "这种东西,这个职业都很适合你。" # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/zh-HANT.coffee b/app/locale/zh-HANT.coffee index 8c761d5a3..82ee4eee3 100644 --- a/app/locale/zh-HANT.coffee +++ b/app/locale/zh-HANT.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese sending: "發送中...." cancel: "取消" save: "存檔" +# create: "Create" delay_1_sec: "1 秒" delay_3_sec: "3 秒" delay_5_sec: "5 秒" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese login: sign_up: "註冊" log_in: "登入" +# logging_in: "Logging In" log_out: "登出" recover: "找回帳號" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/locale/zh.coffee b/app/locale/zh.coffee index b6e955925..9aafa1d91 100644 --- a/app/locale/zh.coffee +++ b/app/locale/zh.coffee @@ -5,6 +5,7 @@ module.exports = nativeDescription: "中文", englishDescription: "Chinese", tra sending: "在发送中。。。" cancel: "退出" save: "保存" +# create: "Create" # delay_1_sec: "1 second" # delay_3_sec: "3 seconds" # delay_5_sec: "5 seconds" @@ -52,6 +53,7 @@ module.exports = nativeDescription: "中文", englishDescription: "Chinese", tra login: sign_up: "注册" log_in: "登录" +# logging_in: "Logging In" log_out: "登出" recover: "找回账户" @@ -224,6 +226,8 @@ module.exports = nativeDescription: "中文", englishDescription: "Chinese", tra # skip_tutorial: "Skip (esc)" # editor_config: "Editor Config" # editor_config_title: "Editor Configuration" +# editor_config_language_label: "Programming Language" +# editor_config_language_description: "Define the programming language you want to code in." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -260,6 +264,8 @@ module.exports = nativeDescription: "中文", englishDescription: "Chinese", tra # tip_patience: "Patience you must have, young Padawan. - Yoda" # tip_documented_bug: "A documented bug is not a bug; it is a feature." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" +# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" +# tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" # time_current: "Now:" # time_total: "Max:" # time_goto: "Go to:" @@ -466,9 +472,9 @@ module.exports = nativeDescription: "中文", englishDescription: "Chinese", tra # more_about_archmage: "Learn More About Becoming an Archmage" # archmage_subscribe_desc: "Get emails on new coding opportunities and announcements." # artisan_summary_pref: "Want to design levels and expand CodeCombat's arsenal? People are playing through our content at a pace faster than we can build! Right now, our level editor is barebone, so be wary. Making levels will be a little challenging and buggy. If you have visions of campaigns spanning for-loops to" -# artisan_summary_suf: "then this class is for you." +# artisan_summary_suf: ", then this class is for you." # artisan_introduction_pref: "We must construct additional levels! People be clamoring for more content, and we can only build so many ourselves. Right now your workstation is level one; our level editor is barely usable even by its creators, so be wary. If you have visions of campaigns spanning for-loops to" -# artisan_introduction_suf: "then this class might be for you." +# artisan_introduction_suf: ", then this class might be for you." # artisan_attribute_1: "Any experience in building content like this would be nice, such as using Blizzard's level editors. But not required!" # artisan_attribute_2: "A hankering to do a whole lot of testing and iteration. To make good levels, you need to take it to others and watch them play it, and be prepared to find a lot of things to fix." # artisan_attribute_3: "For the time being, endurance en par with an Adventurer. Our Level Editor is super preliminary and frustrating to use. You have been warned!" diff --git a/app/models/CocoModel.coffee b/app/models/CocoModel.coffee index c0014deab..9f4a88556 100644 --- a/app/models/CocoModel.coffee +++ b/app/models/CocoModel.coffee @@ -59,10 +59,12 @@ class CocoModel extends Backbone.Model loadSchema: -> return if @constructor.schema.loading @constructor.schema.fetch() - @constructor.schema.once 'sync', => - @constructor.schema.loaded = true - @addSchemaDefaults() - @trigger 'schema-loaded' + @listenToOnce(@constructor.schema, 'sync', @onConstructorSync) + + onConstructorSync: -> + @constructor.schema.loaded = true + @addSchemaDefaults() + @trigger 'schema-loaded' @hasSchema: -> return @schema?.loaded schema: -> return @constructor.schema diff --git a/app/styles/base.sass b/app/styles/base.sass index 166fd23e3..30980c1fb 100644 --- a/app/styles/base.sass +++ b/app/styles/base.sass @@ -1,5 +1,6 @@ @import "bootstrap/variables" @import "bootstrap/mixins" +@import "bootstrap/variables" html background-color: #2f261d @@ -166,7 +167,15 @@ a[data-toggle="modal"] width: 50% margin: 0 25% .progress-bar - width: 100% + width: 0% + transition: width 0.1s ease + + .errors .alert + padding: 5px + display: block + margin: 10px auto + .btn + margin-left: 10px .modal .wait @@ -191,3 +200,36 @@ table.table .flag-cursor cursor: crosshair + + +// Fonts + +.header-font + font-family: $headings-font-family + +body[lang='ru'], body[lang|='zh'], body[lang='ja'], 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'], + h1, h2, h3, h4, h5, h6 + font-family: 'Open Sans Condensed', Impact, "Arial Narrow", "Arial", sans-serif + text-transform: uppercase + letter-spacing: -1px !important + + .header-font + font-family: 'Open Sans Condensed', Impact, "Arial Narrow", "Arial", sans-serif !important + text-transform: uppercase + letter-spacing: -1px !important + +@media only screen and (max-width: 800px) + .main-content-area + width: 100% + .content + width: 100% + + .footer-link-text a + font-size: 17px + margin-left: 3px + margin-right: 3px + + .share-buttons + margin-bottom: 20px + .partner-badges + display: none diff --git a/app/styles/bootstrap/_bootswatch.scss b/app/styles/bootstrap/_bootswatch.scss index 3f82b5882..263da36b2 100644 --- a/app/styles/bootstrap/_bootswatch.scss +++ b/app/styles/bootstrap/_bootswatch.scss @@ -7,6 +7,7 @@ // ----------------------------------------------------- @import url(//fonts.googleapis.com/css?family=Bangers); +@import url(//fonts.googleapis.com/css?family=Open+Sans+Condensed:700&subset=latin,latin-ext,cyrillic-ext,greek-ext,greek,vietnamese,cyrillic); // SCAFFOLDING // ----------------------------------------------------- diff --git a/app/styles/common/top_nav.sass b/app/styles/common/top_nav.sass index 1e82a8f14..9a41771fe 100644 --- a/app/styles/common/top_nav.sass +++ b/app/styles/common/top_nav.sass @@ -6,7 +6,6 @@ margin-left: -20px .navbuttontext, .fancy-select .trigger - font-family: 'Bangers', cursive font-size: 20px font-weight: 400 letter-spacing: 1px @@ -22,7 +21,6 @@ height: 18px .nav.navbar-link-text, .nav.navbar-link-text > li > a - font-family: 'Bangers', cursive font-weight: normal font-size: 25px letter-spacing: 2px @@ -97,3 +95,33 @@ li color: #ebebeb padding: 8px 20px + + +#mobile-nav + display: none +@media only screen and (max-width: 800px) + #top-nav + display: none + #mobile-nav + display: inline + a.navbar-brand + padding: 4px 20px 0px 20px + + button.navbar-toggle + background: #483a2d + border: 2px solid #2f261d + span.icon-bar + background: #F9E612 + + ul li + font-family: 'Bangers', cursive + font-weight: normal + color: #fff + font-size: 25px + margin-top: 5px + margin-bottom: 5px + .header-font + color: #fff + .footer-link-text + width: 100% + display: ineline diff --git a/app/styles/home.sass b/app/styles/home.sass index c239a916c..e2ba1fdb0 100644 --- a/app/styles/home.sass +++ b/app/styles/home.sass @@ -92,3 +92,38 @@ width: 660px height: 382px pointer-events: none +#mobile-trailer-wrapper + display: none + +@media only screen and (max-width: 800px) + #home-view + #site-slogan + font-size: 30px + #trailer-wrapper + display: none + #mobile-trailer-wrapper + display: inline-block + + width: 100% + iframe + display: block + margin: 0 auto + .game-mode-wrapper + width: 100% + img + width: 100% + .play-text + position: absolute + right: 45px + bottom: 0px + color: $yellow + font-size: 50px + font-family: Bangers + @include transition(color .10s linear) + + + + + h1 + text-align: center + margin-top: 0 diff --git a/app/styles/play.sass b/app/styles/play.sass index 83611f8b8..e3e31d8fa 100644 --- a/app/styles/play.sass +++ b/app/styles/play.sass @@ -15,6 +15,14 @@ a[disabled] .level opacity: 0.7 + a.complete h3:after + content: " - Complete!" + color: green + + a.started h3:after + content: " - Started" + color: desaturate(green, 50%) + .level @include box-sizing(border-box) border: 1px solid transparent @@ -40,4 +48,4 @@ .alert-warning h2 color: black - text-align: center \ No newline at end of file + text-align: center diff --git a/app/styles/play/ladder.sass b/app/styles/play/ladder.sass index e1df78f63..149caeac1 100644 --- a/app/styles/play/ladder.sass +++ b/app/styles/play/ladder.sass @@ -70,3 +70,8 @@ #must-log-in button margin-right: 10px + +@media only screen and (max-width: 800px) + #ladder-view + #level-column img + width: 100% \ No newline at end of file diff --git a/app/styles/play/ladder/ladder_tab.sass b/app/styles/play/ladder/ladder_tab.sass new file mode 100644 index 000000000..d4878511a --- /dev/null +++ b/app/styles/play/ladder/ladder_tab.sass @@ -0,0 +1,6 @@ +#ladder-tab-view + .name-col-cell + max-width: 150px + white-space: nowrap + overflow: hidden + text-overflow: ellipsis \ No newline at end of file diff --git a/app/styles/play/ladder/my_matches_tab.sass b/app/styles/play/ladder/my_matches_tab.sass new file mode 100644 index 000000000..3483dcf38 --- /dev/null +++ b/app/styles/play/ladder/my_matches_tab.sass @@ -0,0 +1,13 @@ +#my-matches-tab-view + .axis path, .axis line + fill: none + stroke: #000 + shape-rendering: crispEdges + .x.axis.path + display: none + + .line + fill: none + stroke: steelblue + stroke-width: 1.5px + diff --git a/app/templates/base.jade b/app/templates/base.jade index 981c15a72..3aec9624e 100644 --- a/app/templates/base.jade +++ b/app/templates/base.jade @@ -1,6 +1,28 @@ body #fb-root block header + .nav.navbar.navbar-fixed-top#mobile-nav + .content.clearfix + .navbar-header + button.navbar-toggle(type="button" data-toggle="collapse" data-target="#collapsible-navbar") + span.sr-only Toggle navigation + span.icon-bar + span.icon-bar + span.icon-bar + + a.navbar-brand(href='/') + img(src="/images/pages/base/logo.png", title="CodeCombat - Learn how to code by playing a game", alt="CodeCombat") + .collapse.navbar-collapse#collapsible-navbar + ul.nav.navbar-nav + li.play + a.header-font(href='/play', data-i18n="nav.play") Levels + li.editor + a.header-font(href='/editor', data-i18n="nav.editor") Editor + li.blog + a.header-font(href='http://blog.codecombat.com/', data-i18n="nav.blog") Blog + li.forum + a.header-font(href='http://discourse.codecombat.com/', data-i18n="nav.forum") Forum + .nav.navbar.navbar-fixed-top#top-nav .content.clearfix .navbar-header @@ -10,28 +32,32 @@ body select.language-dropdown if me.get('anonymous') === false - button.btn.btn-primary.navbuttontext#logout-button(data-i18n="login.log_out") Log Out - a.btn.btn-primary.navbuttontext(href="/account/profile/#{me.id}") + button.btn.btn-primary.navbuttontext.header-font#logout-button(data-i18n="login.log_out") Log Out + a.btn.btn-primary.navbuttontext.header-font(href="/account/profile/#{me.id}") div.navbuttontext-user-name | #{me.displayName()} i.icon-cog.icon-white.big else - button.btn.btn-primary.navbuttontext(data-toggle="coco-modal", data-target="modal/signup", data-i18n="login.sign_up") Create Account - button.btn.btn-primary.navbuttontext(data-toggle="coco-modal", data-target="modal/login", data-i18n="login.log_in") Log In + button.btn.btn-primary.navbuttontext.header-font(data-toggle="coco-modal", data-target="modal/signup", data-i18n="login.sign_up") Create Account + button.btn.btn-primary.navbuttontext.header-font(data-toggle="coco-modal", data-target="modal/login", data-i18n="login.log_in") Log In ul(class='navbar-link-text').nav.navbar-nav.pull-right li.play - a(href='/play', data-i18n="nav.navbar-nav.play") Levels + a.header-font(href='/play', data-i18n="nav.play") Levels li.editor - a(href='/editor', data-i18n="nav.navbar-nav.editor") Editor + a.header-font(href='/editor', data-i18n="nav.editor") Editor li.blog - a(href='http://blog.codecombat.com/', data-i18n="nav.navbar-nav.blog") Blog + a.header-font(href='http://blog.codecombat.com/', data-i18n="nav.blog") Blog li.forum - a(href='http://discourse.codecombat.com/', data-i18n="nav.navbar-nav.forum") Forum + a.header-font(href='http://discourse.codecombat.com/', data-i18n="nav.forum") Forum if me.isAdmin() li.admin - a(href='/admin', data-i18n="nav.navbar-nav.admin") Admin + a.header-font(href='/admin', data-i18n="nav.admin") Admin + + + + block outer_content #outer-content-wrapper @@ -63,4 +89,4 @@ body a.mixpanel-badge(href="https://mixpanel.com/f/partner") img(src="//cdn.mxpnl.com/site_media/images/partner/badge_light.png", alt="Mobile Analytics") a.firebase-bade(href="https://www.firebase.com/") - img(src="/images/pages/base/firebase.png", alt="Powered by Firebase") \ No newline at end of file + img(src="/images/pages/base/firebase.png", alt="Powered by Firebase") diff --git a/app/templates/contribute/artisan.jade b/app/templates/contribute/artisan.jade index da7a274d4..9e6d1320d 100644 --- a/app/templates/contribute/artisan.jade +++ b/app/templates/contribute/artisan.jade @@ -24,10 +24,9 @@ block content | If you have visions of campaigns spanning for-loops to span a(href="http://stackoverflow.com/questions/758088/seeking-contrived-example-code-continuations/758105#758105") - | Mondo Bizzaro - span + | Mondo Bizzaro span(data-i18n="contribute.artisan_introduction_suf") - | to then this class might be for you. + | , then this class might be for you. h4(data-i18n="contribute.class_attributes") Class Attributes ul diff --git a/app/templates/contribute/contribute.jade b/app/templates/contribute/contribute.jade index 4d19f5c86..ffb7045a6 100644 --- a/app/templates/contribute/contribute.jade +++ b/app/templates/contribute/contribute.jade @@ -94,10 +94,9 @@ block content | of campaigns spanning for-loops to span a(href="http://stackoverflow.com/questions/758088/seeking-contrived-example-code-continuations/758105#758105") - | Mondo Bizzaro - span + | Mondo Bizzaro span(data-i18n="contribute.artisan_summary_suf") - | then this class is for you. + | , then this class is for you. a(href="/contribute/artisan") p.lead(data-i18n="contribute.more_about_artisan") diff --git a/app/templates/editor/level/thangs_tab.jade b/app/templates/editor/level/thangs_tab.jade index f70446bd6..b0b86868c 100644 --- a/app/templates/editor/level/thangs_tab.jade +++ b/app/templates/editor/level/thangs_tab.jade @@ -17,6 +17,11 @@ .world-container.thangs-column h3(data-i18n="editor.level_tab_thangs_conditions") Starting Conditions #canvas-wrapper + ul.dropdown-menu#contextmenu + li#delete + a Delete + li#duplicate + a Duplicate canvas(width=1848, height=1178)#surface #canvas-left-gradient.gradient #canvas-top-gradient.gradient diff --git a/app/templates/home.jade b/app/templates/home.jade index 9e5d3be94..376ea27fb 100644 --- a/app/templates/home.jade +++ b/app/templates/home.jade @@ -7,7 +7,8 @@ block content #trailer-wrapper img(src="/images/pages/home/video_border.png") - + #mobile-trailer-wrapper + hr .alert.alert-danger.lt-ie10 @@ -21,7 +22,7 @@ block content strong(data-i18n="home.old_browser") Uh oh, your browser is too old to run CodeCombat. Sorry! br span(data-i18n="home.old_browser_suffix") You can try anyway, but it probably won't work. - + a#beginner-campaign(href="/play/level/rescue-mission") div.game-mode-wrapper if isEnglish diff --git a/app/templates/loading.jade b/app/templates/loading.jade index 3844fa3cf..df2fc0eb5 100644 --- a/app/templates/loading.jade +++ b/app/templates/loading.jade @@ -1,8 +1,6 @@ -extends /templates/base - -block content - - .loading-screen - h1(data-i18n="common.loading") Loading... - .progress.progress-striped.active - .progress-bar \ No newline at end of file +.loading-screen + h1(data-i18n="common.loading") Loading... + .progress + .progress-bar + + .errors \ No newline at end of file diff --git a/app/templates/loading_error.jade b/app/templates/loading_error.jade new file mode 100644 index 000000000..b56ede4ac --- /dev/null +++ b/app/templates/loading_error.jade @@ -0,0 +1,31 @@ +.alert.alert-danger.loading-error-alert + span(data-i18n="loading_error.could_not_load") Error loading from server + span ( + span(data-i18n="resources.#{name}") + span ) + if !responseText + strong(data-i18n="loading_error.connection_failure") Connection failed. + else if status === 401 + strong(data-i18n="loading_error.unauthorized") You need to be signed in. Do you have cookies disabled? + else if status === 403 + strong(data-i18n="loading_error.forbidden") You do not have the permissions. + else if status === 404 + strong(data-i18n="loading_error.not_found") Not found. + else if status === 405 + strong(data-i18n="loading_error.not_allowed") Method not allowed. + else if status === 408 + strong(data-i18n="loading_error.timeout") Server timeout. + else if status === 409 + strong(data-i18n="loading_error.conflict") Resource conflict. + else if status === 422 + strong(data-i18n="loading_error.bad_input") Bad input. + else if status >= 500 + strong(data-i18n="loading_error.server_error") Server error. + else + strong(data-i18n="loading_error.unknown") Unknown error. + + if resourceIndex !== undefined + button.btn.btn-sm.retry-loading-resource(data-i18n="common.retry", data-resource-index=resourceIndex) Retry + if requestIndex !== undefined + button.btn.btn-sm.retry-loading-request(data-i18n="common.retry", data-request-index=requestIndex) Retry + \ No newline at end of file diff --git a/app/templates/play.jade b/app/templates/play.jade index 6f3a77edd..911f14c92 100644 --- a/app/templates/play.jade +++ b/app/templates/play.jade @@ -22,7 +22,7 @@ block content a(href="/play/#{campaign.levels[0].levelPath || 'level'}/#{campaign.levels[0].id}", data-i18n="play.campaign_#{campaign.id}")= campaign.name p.campaign-description(data-i18n="[html]play.campaign_#{campaign.id}_description")!= campaign.description each level in campaign.levels - a(href=level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled) + a(href=level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled, class=levelStatusMap[level.id] || '') .level.row if level.image img.level-image(src="#{level.image}", alt="#{level.name}") diff --git a/app/templates/play/ladder/ladder_tab.jade b/app/templates/play/ladder/ladder_tab.jade index 16ab8e17e..1b7d7351e 100644 --- a/app/templates/play/ladder/ladder_tab.jade +++ b/app/templates/play/ladder/ladder_tab.jade @@ -1,6 +1,7 @@ div#columns.row for team in teams div.column.col-md-4 + div(id="histogram-display-#{team.name}", class="histogram-display",data-team-name=team.name) table.table.table-bordered.table-condensed.table-hover tr th diff --git a/app/templates/play/ladder/my_matches_tab.jade b/app/templates/play/ladder/my_matches_tab.jade index 6b235148a..4975fa963 100644 --- a/app/templates/play/ladder/my_matches_tab.jade +++ b/app/templates/play/ladder/my_matches_tab.jade @@ -11,14 +11,14 @@ div#columns.row tr th(colspan=4, style="color: #{team.primaryColor}") - span(data-i18n="ladder.summary_your") Your + span(data-i18n="ladder.summary_your") Your |#{team.name} | - span(data-i18n="ladder.summary_matches") Matches - + span(data-i18n="ladder.summary_matches") Matches - |#{team.wins} - span(data-i18n="ladder.summary_wins") Wins, + span(data-i18n="ladder.summary_wins") Wins, |#{team.losses} - span(data-i18n="ladder.summary_losses") Losses + span(data-i18n="ladder.summary_losses") Losses if team.session tr @@ -34,7 +34,9 @@ div#columns.row if team.chartData tr th(colspan=4, style="color: #{team.primaryColor}") - img(src="https://chart.googleapis.com/chart?chs=450x125&cht=lxy&chco=#{team.chartColor}&chtt=Score%3A+#{team.currentScore}&chts=#{team.chartColor},16,r&chf=a,s,000000FF&chls=2&chm=o,#{team.chartColor},0,4&chd=t:#{team.chartData}&chxt=y&chxr=0,#{team.minScore},#{team.maxScore}") + div(class="score-chart-wrapper", data-team-name=team.name, id="score-chart-#{team.name}") + + tr th(data-i18n="general.result") Result diff --git a/app/templates/play/level/level_loading.jade b/app/templates/play/level/level_loading.jade index 66e42995b..cfd949909 100644 --- a/app/templates/play/level/level_loading.jade +++ b/app/templates/play/level/level_loading.jade @@ -35,6 +35,8 @@ strong.tip.rare(data-i18n='play_level.tip_no_try') Do. Or do not. There is no try. - Yoda strong.tip.rare(data-i18n='play_level.tip_patience') Patience you must have, young Padawan. - Yoda strong.tip.rare(data-i18n='play_level.tip_documented_bug') A documented bug is not a bug; it is a feature. + strong.tip.rare(data-i18n='play_level.tip_talk_is_cheap') Talk is cheap. Show me the code. - Linus Torvalds + strong.tip.rare(data-i18n='play_level.tip_first_language') The most disastrous thing that you can ever learn is your first programming language. - Alan Kay strong.tip.rare span(data-i18n='play_level.tip_harry') Yer a Wizard, span= me.get('name') || 'Anoner' diff --git a/app/templates/play/level/modal/editor_config.jade b/app/templates/play/level/modal/editor_config.jade index 761616ab3..8353d82b6 100644 --- a/app/templates/play/level/modal/editor_config.jade +++ b/app/templates/play/level/modal/editor_config.jade @@ -5,9 +5,15 @@ block modal-header-content block modal-body-content .form + .form-group.select-group + label.control-label(for="tome-language" data-i18n="play_level.editor_config_language_label") Programming Language + select#tome-language(name="language") + option(value="javascript" selected=(language === "javascript")) JavaScript + option(value="coffeescript" selected=(language === "coffeescript")) CoffeeScript + span.help-block(data-i18n="play_level.editor_config_language_description") Define the programming language you want to code in. .form-group.select-group label.control-label(for="tome-key-bindings" data-i18n="play_level.editor_config_keybindings_label") Key Bindings - select#tome-key-bindings(name="keyBindings", type="checkbox", checked=multiplayer) + select#tome-key-bindings(name="keyBindings") option(value="default" selected=(keyBindings === "default") data-i18n="play_level.editor_config_keybindings_default") Default (Ace) option(value="vim" selected=(keyBindings === "vim")) Vim option(value="emacs" selected=(keyBindings === "emacs")) Emacs @@ -27,7 +33,6 @@ block modal-body-content input#tome-behaviors(name="behaviors", type="checkbox", checked=behaviors) span(data-i18n="play_level.editor_config_behaviors_label") Smart Behaviors span.help-block(data-i18n="play_level.editor_config_behaviors_description") Autocompletes brackets, braces, and quotes. - + block modal-footer-content a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="modal.close").btn.btn-primary Close - diff --git a/app/views/editor/article/edit.coffee b/app/views/editor/article/edit.coffee index 5dfa85e41..875dc6113 100644 --- a/app/views/editor/article/edit.coffee +++ b/app/views/editor/article/edit.coffee @@ -21,20 +21,21 @@ module.exports = class ArticleEditView extends View @article = new Article(_id: @articleID) @article.saveBackups = true - @listenToOnce(@article, 'error', - () => + @listenToOnce(@article, 'error', + () => @hideLoading() # Hack: editor components appear after calling insertSubView. - # So we need to hide them first. + # So we need to hide them first. $(@$el).find('.main-content-area').children('*').not('#error-view').remove() @insertSubView(new ErrorView()) ) @article.fetch() + @article.loadSchema() @listenToOnce(@article, 'sync', @onArticleSync) - @listenTo(@article, 'schema-loaded', @buildTreema) + @listenToOnce(@article, 'schema-loaded', @buildTreema) @pushChangesToPreview = _.throttle(@pushChangesToPreview, 500) onArticleSync: -> @@ -74,6 +75,11 @@ module.exports = class ArticleEditView extends View context.authorized = me.isAdmin() or @article.hasWriteAccess(me) context + afterRender: -> + super() + return if @startsLoading + @showReadOnly() unless me.isAdmin() or @article.hasWriteAccess(me) + openPreview: => @preview = window.open('/editor/article/x/preview', 'preview', 'height=800,width=600') @preview.focus() if window.focus diff --git a/app/views/editor/components/main.coffee b/app/views/editor/components/main.coffee index 4b0a3276d..7b813595b 100644 --- a/app/views/editor/components/main.coffee +++ b/app/views/editor/components/main.coffee @@ -21,7 +21,8 @@ module.exports = class ThangComponentEditView extends CocoView render: => return if @destroyed for model in [Level, LevelComponent] - (new model()).on 'schema-loaded', @render unless model.schema?.loaded + temp = new model() + @listenToOnce temp, 'schema-loaded', @render unless model.schema?.loaded if not @componentCollection @componentCollection = @supermodel.getCollection new ComponentsCollection() unless @componentCollection.loaded @@ -105,7 +106,7 @@ module.exports = class ThangComponentEditView extends CocoView toRemoveTreema = [] dependent_class = 'treema-dependent' - try + try for index, child of @extantComponentsTreema.childrenTreemas $(child.$el).removeClass(dependent_class) @@ -158,7 +159,7 @@ module.exports = class ThangComponentEditView extends CocoView @reportChanges() onAddComponentEnterPressed: (node) => - extantSystems = + extantSystems = (@supermodel.getModelByOriginalAndMajorVersion LevelSystem, sn.original, sn.majorVersion).attributes.name.toLowerCase() for idx, sn of @level.get('systems') requireSystem = node.data.system.toLowerCase() @@ -169,7 +170,7 @@ module.exports = class ThangComponentEditView extends CocoView layout: 'bottomLeft', type: 'warning' }) - + currentSelection = @addComponentsTreema?.getLastSelectedTreema()?.data._id id = node.data._id diff --git a/app/views/editor/level/edit.coffee b/app/views/editor/level/edit.coffee index 313308895..b685d457f 100644 --- a/app/views/editor/level/edit.coffee +++ b/app/views/editor/level/edit.coffee @@ -45,8 +45,8 @@ module.exports = class EditorLevelView extends View @level = new Level _id: @levelID @listenToOnce(@level, 'sync', @onLevelLoaded) - @listenToOnce(@supermodel, 'error', - () => + @listenToOnce(@supermodel, 'error', + () => @hideLoading() @insertSubView(new ErrorView()) ) @@ -88,6 +88,7 @@ module.exports = class EditorLevelView extends View @componentsTab = @insertSubView new ComponentsTabView supermodel: @supermodel @systemsTab = @insertSubView new SystemsTabView supermodel: @supermodel Backbone.Mediator.publish 'level-loaded', level: @level + @showReadOnly() unless me.isAdmin() or @level.hasWriteAccess(me) onPlayLevel: (e) -> sendLevel = => @@ -115,4 +116,4 @@ module.exports = class EditorLevelView extends View showVersionHistory: (e) -> versionHistoryView = new VersionHistoryView level:@level, @levelID @openModalView versionHistoryView - Backbone.Mediator.publish 'level:view-switched', e \ No newline at end of file + Backbone.Mediator.publish 'level:view-switched', e diff --git a/app/views/editor/level/thangs_tab_view.coffee b/app/views/editor/level/thangs_tab_view.coffee index 72f245a7f..243b1e540 100644 --- a/app/views/editor/level/thangs_tab_view.coffee +++ b/app/views/editor/level/thangs_tab_view.coffee @@ -48,6 +48,8 @@ module.exports = class ThangsTabView extends View events: 'click #extant-thangs-filter button': 'onFilterExtantThangs' + 'click #delete': 'onDeleteClicked' + 'click #duplicate': 'onDuplicateClicked' shortcuts: 'esc': 'selectAddThang' @@ -61,6 +63,7 @@ module.exports = class ThangsTabView extends View @thangTypes = @supermodel.getCollection new ThangTypeSearchCollection() # should load depended-on Components, too @listenToOnce(@thangTypes, 'sync', @onThangTypesLoaded) @thangTypes.fetch() + $(document).bind 'contextmenu', @preventDefaultContextMenu # just loading all Components for now: https://github.com/codecombat/codecombat/issues/405 @componentCollection = @supermodel.getCollection new ComponentsCollection() @@ -185,11 +188,14 @@ module.exports = class ThangsTabView extends View onSpriteMouseDown: (e) -> # Sprite clicks happen after stage clicks, but we need to know whether a sprite is being clicked. clearTimeout @backgroundAddClickTimeout + if e.originalEvent.nativeEvent.button == 2 + @onSpriteContextMenu e onStageMouseDown: (e) -> if @addThangSprite # If we click on the background, we need to add @addThangSprite, but not if onSpriteMouseDown will fire. @backgroundAddClickTimeout = _.defer => @onExtantThangSelected {} + $('#contextmenu').hide() onSpriteDragged: (e) -> return unless @selectedExtantThang and e.thang?.id is @selectedExtantThang?.id @@ -418,7 +424,29 @@ module.exports = class ThangsTabView extends View @editThangView = null @onThangsChanged() @$el.find('.thangs-column').show() - + + preventDefaultContextMenu: (e) -> + e.preventDefault() + + onSpriteContextMenu: (e) -> + {clientX, clientY} = e.originalEvent.nativeEvent + if @addThangType + $('#duplicate a').html 'Stop Duplicate' + else + $('#duplicate a').html 'Duplicate' + $('#contextmenu').css { position: 'fixed', left: clientX, top: clientY } + $('#contextmenu').show() + + onDeleteClicked: (e) -> + $('#contextmenu').hide() + @deleteSelectedExtantThang e + + onDuplicateClicked: (e) -> + $('#contextmenu').hide() + if !@addThangType + thang = @selectedExtantThang.spriteName + e.target = $(".add-thang-palette-icon[data-thang-type='" + thang + "']").get 0 + @selectAddThang e class ThangsNode extends TreemaNode.nodeMap.array valueClass: 'treema-array-replacement' diff --git a/app/views/editor/thang/colors_tab_view.coffee b/app/views/editor/thang/colors_tab_view.coffee index ed438fb46..a858f4385 100644 --- a/app/views/editor/thang/colors_tab_view.coffee +++ b/app/views/editor/thang/colors_tab_view.coffee @@ -21,6 +21,10 @@ module.exports = class ColorsTabView extends CocoView @interval = setInterval f, 1000 super options + destroy: -> + clearInterval @interval + super() + afterRender: -> super() @createShapeButtons() diff --git a/app/views/editor/thang/edit.coffee b/app/views/editor/thang/edit.coffee index c467e04c0..660280e54 100644 --- a/app/views/editor/thang/edit.coffee +++ b/app/views/editor/thang/edit.coffee @@ -45,12 +45,12 @@ module.exports = class ThangTypeEditView extends View @thangType = new ThangType(_id: @thangTypeID) @thangType.saveBackups = true - @listenToOnce(@thangType, 'error', - () => + @listenToOnce(@thangType, 'error', + () => @hideLoading() # Hack: editor components appear after calling insertSubView. - # So we need to hide them first. + # So we need to hide them first. $(@$el).find('.main-content-area').children('*').not('#error-view').remove() @insertSubView(new ErrorView()) @@ -90,6 +90,7 @@ module.exports = class ThangTypeEditView extends View @initSliders() @initComponents() @insertSubView(new ColorsTabView(@thangType)) + @showReadOnly() unless me.isAdmin() or @thangType.hasWriteAccess(me) initComponents: => options = diff --git a/app/views/kinds/CocoView.coffee b/app/views/kinds/CocoView.coffee index 780743391..768072a26 100644 --- a/app/views/kinds/CocoView.coffee +++ b/app/views/kinds/CocoView.coffee @@ -2,6 +2,7 @@ SuperModel = require 'models/SuperModel' utils = require 'lib/utils' CocoClass = require 'lib/CocoClass' loadingScreenTemplate = require 'templates/loading' +loadingErrorTemplate = require 'templates/loading_error' visibleModal = null waitingModal = null @@ -18,13 +19,26 @@ module.exports = class CocoView extends Backbone.View 'click a': 'toggleModal' 'click button': 'toggleModal' 'click li': 'toggleModal' + 'click .retry-loading-resource': 'onRetryResource' + 'click .retry-loading-request': 'onRetryRequest' subscriptions: {} shortcuts: {} + # load progress properties + loadProgress: + num: 0 + denom: 0 + showing: false + resources: [] # models and collections + requests: [] # jqxhr's + somethings: [] # everything else + progress: 0 + # Setup, Teardown constructor: (options) -> + @loadProgress = _.cloneDeep @loadProgress @supermodel ?= options?.supermodel or new SuperModel() @options = options @subscriptions = utils.combineAncestralObject(@, 'subscriptions') @@ -33,6 +47,7 @@ module.exports = class CocoView extends Backbone.View @shortcuts = utils.combineAncestralObject(@, 'shortcuts') @subviews = {} @listenToShortcuts() + @updateProgressBar = _.debounce @updateProgressBar, 100 # Backbone.Mediator handles subscription setup/teardown automatically super options @@ -47,6 +62,7 @@ module.exports = class CocoView extends Backbone.View @destroyed = true @off = doNothing @destroy = doNothing + $.noty.closeAll() afterInsert: -> @@ -56,6 +72,7 @@ module.exports = class CocoView extends Backbone.View @hidden = true @stopListeningToShortcuts() view.willDisappear() for id, view of @subviews + $.noty.closeAll() didReappear: -> # the router brings back this view from the cache @@ -72,7 +89,7 @@ module.exports = class CocoView extends Backbone.View return @template if _.isString(@template) @$el.html @template(@getRenderData()) @afterRender() - @showLoading() if @startsLoading + @showLoading() if @startsLoading or @loading() # TODO: Remove startsLoading entirely @$el.i18n() @ @@ -87,6 +104,101 @@ module.exports = class CocoView extends Backbone.View context afterRender: -> + + # Resource and request loading management for any given view + + addResourceToLoad: (modelOrCollection, name, value=1) -> + @loadProgress.resources.push {resource:modelOrCollection, value:value, name:name} + @listenToOnce modelOrCollection, 'sync', @updateProgress + @listenTo modelOrCollection, 'error', @onResourceLoadFailed + @updateProgress() + + addRequestToLoad: (jqxhr, name, retryFunc, value=1) -> + @loadProgress.requests.push {request:jqxhr, value:value, name: name, retryFunc: retryFunc} + jqxhr.done @updateProgress + jqxhr.fail @onRequestLoadFailed + + addSomethingToLoad: (name, value=1) -> + @loadProgress.somethings.push {loaded: false, name: name, value: value} + @updateProgress() + + somethingLoaded: (name) -> + r = _.find @loadProgress.somethings, {name: name} + return console.error 'Could not find something called', name if not r + r.loaded = true + @updateProgress(name) + + loading: -> + return false if @loaded + for r in @loadProgress.resources + return true if not r.resource.loaded + for r in @loadProgress.requests + return true if not r.request.status + for r in @loadProgress.somethings + return true if not r.loaded + return false + + updateProgress: => + console.debug 'Loaded', r.name if arguments[0] and r = _.find @loadProgress.resources, {resource:arguments[0]} + console.debug 'Loaded', r.name if arguments[2] and r = _.find @loadProgress.requests, {request:arguments[2]} + console.debug 'Loaded', r.name if arguments[0] and r = _.find @loadProgress.somethings, {name:arguments[0]} + + denom = 0 + denom += r.value for r in @loadProgress.resources + denom += r.value for r in @loadProgress.requests + denom += r.value for r in @loadProgress.somethings + num = @loadProgress.num + num += r.value for r in @loadProgress.resources when r.resource.loaded + num += r.value for r in @loadProgress.requests when r.request.status + num += r.value for r in @loadProgress.somethings when r.loaded + #console.log 'update progress', @, num, denom, arguments + + progress = if denom then num / denom else 0 + # sometimes the denominator isn't known from the outset, so make sure the overall progress only goes up + @loadProgress.progress = progress if progress > @loadProgress.progress + @updateProgressBar() + if num is denom and not @loaded + @loaded = true + @onLoaded() + + updateProgressBar: => + prog = "#{parseInt(@loadProgress.progress*100)}%" + @$el.find('.loading-screen .progress-bar').css('width', prog) + + onLoaded: -> + @render() + + # Error handling for loading + + onResourceLoadFailed: (resource, jqxhr) -> + for r, index in @loadProgress.resources + break if r.resource is resource + @$el.find('.loading-screen .errors').append(loadingErrorTemplate({ + status:jqxhr.status, + name: r.name + resourceIndex: index, + responseText: jqxhr.responseText + })).i18n() + + onRetryResource: (e) -> + r = @loadProgress.resources[$(e.target).data('resource-index')] + r.resource.fetch() + $(e.target).closest('.loading-error-alert').remove() + + onRequestLoadFailed: (jqxhr) => + for r, index in @loadProgress.requests + break if r.request is jqxhr + @$el.find('.loading-screen .errors').append(loadingErrorTemplate({ + status:jqxhr.status, + name: r.name + requestIndex: index, + responseText: jqxhr.responseText + })) + + onRetryRequest: (e) -> + r = @loadProgress.requests[$(e.target).data('request-index')] + @[r.retryFunc]?() + $(e.target).closest('.loading-error-alert').remove() # Modals @@ -134,9 +246,7 @@ module.exports = class CocoView extends Backbone.View showLoading: ($el=@$el) -> $el.find('>').addClass('hidden') - $el.append($('
') - .append('

Loading

') - .append('
')) + $el.append loadingScreenTemplate() @_lastLoading = $el hideLoading: -> @@ -145,6 +255,11 @@ module.exports = class CocoView extends Backbone.View @_lastLoading.find('>').removeClass('hidden') @_lastLoading = null + showReadOnly: -> + return if me.isAdmin() + warning = $.i18n.t 'editor.read_only_warning', defaultValue: "Note: you can't save any edits here, because you're not logged in as an admin." + noty text: warning, layout: 'center', type: 'information', killer: true, timeout: 5000 + # Loading ModalViews enableModalInProgress: (modal) -> diff --git a/app/views/kinds/RootView.coffee b/app/views/kinds/RootView.coffee index 87752cebf..2cbcf098c 100644 --- a/app/views/kinds/RootView.coffee +++ b/app/views/kinds/RootView.coffee @@ -62,7 +62,8 @@ module.exports = class RootView extends CocoView for code, localeInfo of locale when not (code in genericCodes) or code is preferred $select.append( $("").val(code).text(localeInfo.nativeDescription)) - $select.val(preferred).fancySelect() + $select.val(preferred).fancySelect().parent().find('.trigger').addClass('header-font') + $('body').attr('lang', preferred) onLanguageChanged: -> newLang = $(".language-dropdown").val() @@ -72,6 +73,7 @@ module.exports = class RootView extends CocoView @buildLanguages() unless newLang.split('-')[0] is "en" @openModalView(application.router.getView("modal/diplomat_suggestion", "_modal")) + $('body').attr('lang', newLang) saveLanguage: (newLang) -> me.set('preferredLanguage', newLang) diff --git a/app/views/modal/signup_modal.coffee b/app/views/modal/signup_modal.coffee index 8a39d0dca..5ecbc07c5 100644 --- a/app/views/modal/signup_modal.coffee +++ b/app/views/modal/signup_modal.coffee @@ -37,7 +37,7 @@ module.exports = class SignupModalView extends View checkAge: (e) -> $("#signup-button", @$el).prop 'disabled', not $(e.target).prop('checked') - + getRenderData: -> c = super() c.showRequiredError = @options.showRequiredError @@ -61,4 +61,4 @@ module.exports = class SignupModalView extends View return forms.applyErrorsToForm(@$el, res.errors) unless res.valid window.tracker?.trackEvent 'Finished Signup' @enableModalInProgress(@$el) - createUser(userObject) + createUser userObject, null, window.nextLevelURL diff --git a/app/views/play/ladder/ladder_tab.coffee b/app/views/play/ladder/ladder_tab.coffee index db4eff8ad..ae8c92259 100644 --- a/app/views/play/ladder/ladder_tab.coffee +++ b/app/views/play/ladder/ladder_tab.coffee @@ -1,4 +1,5 @@ CocoView = require 'views/kinds/CocoView' +CocoClass = require 'lib/CocoClass' Level = require 'models/Level' LevelSession = require 'models/LevelSession' CocoCollection = require 'models/CocoCollection' @@ -18,7 +19,6 @@ class LevelSessionsCollection extends CocoCollection module.exports = class LadderTabView extends CocoView id: 'ladder-tab-view' template: require 'templates/play/ladder/ladder_tab' - startsLoading: true events: 'click .connect-facebook': 'onConnectFacebook' @@ -32,6 +32,7 @@ module.exports = class LadderTabView extends CocoView constructor: (options, @level, @sessions) -> super(options) + @addSomethingToLoad("social_network_apis") @teams = teamDataFromLevel @level @leaderboards = {} @refreshLadder() @@ -39,15 +40,16 @@ module.exports = class LadderTabView extends CocoView checkFriends: -> return if @checked or (not window.FB) or (not window.gapi) + @somethingLoaded("social_network_apis") @checked = true - - @loadingFacebookFriends = true + + @addSomethingToLoad("facebook_status") FB.getLoginStatus (response) => @facebookStatus = response.status - if @facebookStatus is 'connected' then @loadFacebookFriendSessions() else @loadingFacebookFriends = false + @somethingLoaded("facebook_status") + @loadFacebookFriends() if @facebookStatus is 'connected' if application.gplusHandler.loggedIn is undefined - @loadingGPlusFriends = true @listenToOnce(application.gplusHandler, 'checked-state', @gplusSessionStateLoaded) else @gplusSessionStateLoaded() @@ -60,16 +62,24 @@ module.exports = class LadderTabView extends CocoView onConnectedWithFacebook: -> location.reload() if @connecting + loadFacebookFriends: -> + @addSomethingToLoad("facebook_friends") + FB.api '/me/friends', @onFacebookFriendsLoaded + + onFacebookFriendsLoaded: (response) => + @somethingLoaded("facebook_friends") + @facebookData = response.data + @loadFacebookFriendSessions() + loadFacebookFriendSessions: -> - FB.api '/me/friends', (response) => - @facebookData = response.data - levelFrag = "#{@level.get('original')}.#{@level.get('version').major}" - url = "/db/level/#{levelFrag}/leaderboard_facebook_friends" - $.ajax url, { - data: { friendIDs: (f.id for f in @facebookData) } - method: 'POST' - success: @onFacebookFriendSessionsLoaded - } + levelFrag = "#{@level.get('original')}.#{@level.get('version').major}" + url = "/db/level/#{levelFrag}/leaderboard_facebook_friends" + jqxhr = $.ajax url, { + data: { friendIDs: (f.id for f in @facebookData) } + method: 'POST' + success: @onFacebookFriendSessionsLoaded + } + @addRequestToLoad(jqxhr, 'facebook_friend_sessions', 'loadFacebookFriendSessions') onFacebookFriendSessionsLoaded: (result) => friendsMap = {} @@ -79,9 +89,7 @@ module.exports = class LadderTabView extends CocoView friend.otherTeam = if friend.team is 'humans' then 'ogres' else 'humans' friend.imageSource = "http://graph.facebook.com/#{friend.facebookID}/picture" @facebookFriendSessions = result - @loadingFacebookFriends = false - @renderMaybe() - + # GOOGLE PLUS onConnectGPlus: -> @@ -93,21 +101,23 @@ module.exports = class LadderTabView extends CocoView gplusSessionStateLoaded: -> if application.gplusHandler.loggedIn - @loadingGPlusFriends = true + @addSomethingToLoad("gplus_friends") application.gplusHandler.loadFriends @gplusFriendsLoaded - else - @loadingGPlusFriends = false - @renderMaybe() gplusFriendsLoaded: (friends) => + @somethingLoaded("gplus_friends") @gplusData = friends.items + @loadGPlusFriendSessions() + + loadGPlusFriendSessions: -> levelFrag = "#{@level.get('original')}.#{@level.get('version').major}" url = "/db/level/#{levelFrag}/leaderboard_gplus_friends" - $.ajax url, { + jqxhr = $.ajax url, { data: { friendIDs: (f.id for f in @gplusData) } method: 'POST' success: @onGPlusFriendSessionsLoaded } + @addRequestToLoad(jqxhr, 'gplus_friend_sessions', 'loadGPlusFriendSessions') onGPlusFriendSessionsLoaded: (result) => friendsMap = {} @@ -117,29 +127,15 @@ module.exports = class LadderTabView extends CocoView friend.otherTeam = if friend.team is 'humans' then 'ogres' else 'humans' friend.imageSource = friendsMap[friend.gplusID].image.url @gplusFriendSessions = result - @loadingGPlusFriends = false - @renderMaybe() # LADDER LOADING refreshLadder: -> - promises = [] for team in @teams - @leaderboards[team.id]?.off 'sync' + @leaderboards[team.id]?.destroy() teamSession = _.find @sessions.models, (session) -> session.get('team') is team.id @leaderboards[team.id] = new LeaderboardData(@level, team.id, teamSession) - promises.push @leaderboards[team.id].promise - @loadingLeaderboards = true - $.when(promises...).then(@leaderboardsLoaded) - - leaderboardsLoaded: => - @loadingLeaderboards = false - @renderMaybe() - - renderMaybe: -> - return if @loadingFacebookFriends or @loadingLeaderboards or @loadingGPlusFriends - @startsLoading = false - @render() + @addResourceToLoad @leaderboards[team.id], 'leaderboard', 3 getRenderData: -> ctx = super() @@ -160,9 +156,16 @@ module.exports = class LadderTabView extends CocoView sessions.reverse() sessions -class LeaderboardData +class LeaderboardData extends CocoClass + ### + Consolidates what you need to load for a leaderboard into a single Backbone Model-like object. + ### + constructor: (@level, @team, @session) -> - _.extend @, Backbone.Events + super() + @fetch() + + fetch: -> @topPlayers = new LeaderboardCollection(@level, {order:-1, scoreOffset: HIGHEST_SCORE, team: @team, limit: 20}) promises = [] promises.push @topPlayers.fetch() @@ -173,18 +176,24 @@ class LeaderboardData promises.push @playersAbove.fetch() @playersBelow = new LeaderboardCollection(@level, {order:-1, scoreOffset: score, limit: 4, team: @team}) promises.push @playersBelow.fetch() - level = "#{level.get('original')}.#{level.get('version').major}" + level = "#{@level.get('original')}.#{@level.get('version').major}" success = (@myRank) => promises.push $.ajax "/db/level/#{level}/leaderboard_rank?scoreOffset=#{@session.get('totalScore')}&team=#{@team}", {success} @promise = $.when(promises...) @promise.then @onLoad + @promise.fail @onFail @promise onLoad: => + return if @destroyed @loaded = true - @trigger 'sync' + @trigger 'sync', @ # TODO: cache user ids -> names mapping, and load them here as needed, # and apply them to sessions. Fetching each and every time is too costly. + + onFail: (resource, jqxhr) => + return if @destroyed + @trigger 'error', @, jqxhr inTopSessions: -> return me.id in (session.attributes.creator for session in @topPlayers.models) @@ -201,3 +210,7 @@ class LeaderboardData startRank = @myRank - 4 session.rank = startRank + i for session, i in l l + + allResources: -> + resources = [@topPlayers, @playersAbove, @playersBelow] + return (r for r in resources when r) \ No newline at end of file diff --git a/app/views/play/ladder/my_matches_tab.coffee b/app/views/play/ladder/my_matches_tab.coffee index ac8223442..94e4f4731 100644 --- a/app/views/play/ladder/my_matches_tab.coffee +++ b/app/views/play/ladder/my_matches_tab.coffee @@ -48,6 +48,8 @@ module.exports = class MyMatchesTabView extends CocoView @startsLoading = false @render() + + getRenderData: -> ctx = super() ctx.level = @level @@ -80,7 +82,9 @@ module.exports = class MyMatchesTabView extends CocoView team.losses = _.filter(team.matches, {state: 'loss'}).length scoreHistory = team.session?.get('scoreHistory') if scoreHistory?.length > 1 + team.scoreHistory = scoreHistory scoreHistory = _.last scoreHistory, 100 # Chart URL needs to be under 2048 characters for GET + team.currentScore = Math.round scoreHistory[scoreHistory.length - 1][1] * 100 team.chartColor = team.primaryColor.replace '#', '' #times = (s[0] for s in scoreHistory) @@ -109,7 +113,69 @@ module.exports = class MyMatchesTabView extends CocoView else if session.get 'isRanking' rankingState = 'ranking' @setRankingButtonText button, rankingState + + @$el.find('.score-chart-wrapper').each (i, el) => + scoreWrapper = $(el) + team = _.find @teams, name: scoreWrapper.data('team-name') + @generateScoreLineChart(scoreWrapper.attr('id'), team.scoreHistory) + + generateScoreLineChart: (wrapperID, scoreHistory) => + + + margin = + top: 20 + right: 20 + bottom: 30 + left: 50 + + width = 450 - margin.left - margin.right + height = 125 + x = d3.time.scale().range([0,width]) + y = d3.scale.linear().range([height,0]) + + xAxis = d3.svg.axis().scale(x).orient("bottom").ticks(4).outerTickSize(0) + yAxis = d3.svg.axis().scale(y).orient("left").ticks(4).outerTickSize(0) + + line = d3.svg.line().x(((d) -> x(d.date))).y((d) -> y(d.close)) + selector = "#" + wrapperID + + svg = d3.select(selector).append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.top + margin.bottom) + .append("g") + .attr("transform","translate(#{margin.left},#{margin.top})") + time = 0 + data = scoreHistory.map (d) -> + time +=1 + return { + date: time + close: d[1] * 100 + } + + x.domain(d3.extent(data, (d) -> d.date)) + y.domain(d3.extent(data, (d) -> d.close)) + + + + svg.append("g") + .attr("class", "y axis") + .call(yAxis) + .append("text") + .attr("transform", "rotate(-90)") + .attr("y",4) + .attr("dy", ".75em") + .style("text-anchor","end") + .text("Score") + + svg.append("path") + .datum(data) + .attr("class","line") + .attr("d",line) + + + + readyToRank: (session) -> return false unless session?.get('levelID') # If it hasn't been denormalized, then it's not ready. return false unless c1 = session.get('code') diff --git a/app/views/play/ladder_view.coffee b/app/views/play/ladder_view.coffee index 6d1e90313..58366fa58 100644 --- a/app/views/play/ladder_view.coffee +++ b/app/views/play/ladder_view.coffee @@ -24,7 +24,6 @@ class LevelSessionsCollection extends CocoCollection module.exports = class LadderView extends RootView id: 'ladder-view' template: require 'templates/play/ladder' - startsLoading: true subscriptions: 'application:idle-changed': 'onIdleChanged' @@ -38,18 +37,18 @@ module.exports = class LadderView extends RootView constructor: (options, @levelID) -> super(options) @level = new Level(_id:@levelID) - p1 = @level.fetch() + @level.fetch() @sessions = new LevelSessionsCollection(levelID) - p2 = @sessions.fetch({}) + @sessions.fetch({}) + @addResourceToLoad(@sessions, 'your_sessions') + @addResourceToLoad(@level, 'level') @simulator = new Simulator() @listenTo(@simulator, 'statusUpdate', @updateSimulationStatus) @teams = [] - $.when(p1, p2).then @onLoaded - onLoaded: => + onLoaded: -> @teams = teamDataFromLevel @level - @startsLoading = false - @render() + super() getRenderData: -> ctx = super() @@ -63,7 +62,7 @@ module.exports = class LadderView extends RootView afterRender: -> super() - return if @startsLoading + return if @loading() @insertSubView(@ladderTab = new LadderTabView({}, @level, @sessions)) @insertSubView(@myMatchesTab = new MyMatchesTabView({}, @level, @sessions)) @refreshInterval = setInterval(@fetchSessionsAndRefreshViews.bind(@), 10 * 1000) @@ -72,7 +71,7 @@ module.exports = class LadderView extends RootView @showPlayModal(hash) if @sessions.loaded fetchSessionsAndRefreshViews: -> - return if @destroyed or application.userIsIdle or @$el.find('#simulate.active').length or (new Date() - 2000 < @lastRefreshTime) or @startsLoading + return if @destroyed or application.userIsIdle or @$el.find('#simulate.active').length or (new Date() - 2000 < @lastRefreshTime) or @loading() @sessions.fetch({"success": @refreshViews}) refreshViews: => diff --git a/app/views/play/level/modal/editor_config_modal.coffee b/app/views/play/level/modal/editor_config_modal.coffee index 044a4dfaa..6be98b44d 100644 --- a/app/views/play/level/modal/editor_config_modal.coffee +++ b/app/views/play/level/modal/editor_config_modal.coffee @@ -8,14 +8,16 @@ module.exports = class EditorConfigModal extends View aceConfig: {} defaultConfig: + language: 'javascript' keyBindings: 'default' invisibles: false indentGuides: false behaviors: false events: - 'change #tome-invisibles': 'updateInvisiblesSelection' - 'change #tome-key-bindings': 'updateKeyBindingsSelection' + 'change #tome-invisibles': 'updateInvisibles' + 'change #tome-language': 'updateLanguage' + 'change #tome-key-bindings': 'updateKeyBindings' 'change #tome-indent-guides': 'updateIndentGuides' 'change #tome-behaviors': 'updateBehaviors' @@ -26,16 +28,20 @@ module.exports = class EditorConfigModal extends View @aceConfig = _.cloneDeep me.get('aceConfig') ? {} @aceConfig = _.defaults @aceConfig, @defaultConfig c = super() + c.language = @aceConfig.language c.keyBindings = @aceConfig.keyBindings c.invisibles = @aceConfig.invisibles c.indentGuides = @aceConfig.indentGuides c.behaviors = @aceConfig.behaviors c - updateInvisiblesSelection: -> + updateLanguage: -> + @aceConfig.language = @$el.find('#tome-language').val() + + updateInvisibles: -> @aceConfig.invisibles = @$el.find('#tome-invisibles').prop('checked') - updateKeyBindingsSelection: -> + updateKeyBindings: -> @aceConfig.keyBindings = @$el.find('#tome-key-bindings').val() updateIndentGuides: -> @@ -48,12 +54,15 @@ module.exports = class EditorConfigModal extends View super() onHidden: -> + oldLanguage = @aceConfig.language + @aceConfig.language = @$el.find('#tome-language').val() @aceConfig.invisibles = @$el.find('#tome-invisibles').prop('checked') @aceConfig.keyBindings = @$el.find('#tome-key-bindings').val() @aceConfig.indentGuides = @$el.find('#tome-indent-guides').prop('checked') @aceConfig.behaviors = @$el.find('#tome-behaviors').prop('checked') me.set 'aceConfig', @aceConfig - Backbone.Mediator.publish 'change:editor-config' + Backbone.Mediator.publish 'tome:change-config' + Backbone.Mediator.publish 'tome:change-language' unless @aceConfig.language isnt oldLanguage me.save() destroy: -> diff --git a/app/views/play/level/modal/victory_modal.coffee b/app/views/play/level/modal/victory_modal.coffee index 3eb7d21f5..3fe539b99 100644 --- a/app/views/play/level/modal/victory_modal.coffee +++ b/app/views/play/level/modal/victory_modal.coffee @@ -78,7 +78,7 @@ module.exports = class VictoryModal extends View c = super() c.body = @body c.me = me - c.hasNextLevel = _.isObject(@level.get('nextLevel')) and (@level.get('name') isnt "Mobile Artillery") + c.hasNextLevel = _.isObject(@level.get('nextLevel')) c.levelName = utils.i18n @level.attributes, 'name' c.level = @level if c.level.get('type') is 'ladder' diff --git a/app/views/play/level/playback_view.coffee b/app/views/play/level/playback_view.coffee index 43b744255..4a3e4d359 100644 --- a/app/views/play/level/playback_view.coffee +++ b/app/views/play/level/playback_view.coffee @@ -44,7 +44,6 @@ module.exports = class PlaybackView extends View '⌘+[, ctrl+[': 'onScrubBack' '⌘+], ctrl+]': 'onScrubForward' - # popover that shows at the current mouse position on the progressbar, using the bootstrap popover. # Could make this into a jQuery plugins itself theoretically. class HoverPopup extends $.fn.popover.Constructor diff --git a/app/views/play/level/tome/spell.coffee b/app/views/play/level/tome/spell.coffee index deaf856f8..a0cb680cb 100644 --- a/app/views/play/level/tome/spell.coffee +++ b/app/views/play/level/tome/spell.coffee @@ -85,11 +85,13 @@ module.exports = class Spell aether.hasChangedSignificantly (newSource ? @originalSource), (currentSource ? @source), true, true createAether: (thang) -> + aceConfig = me.get('aceConfig') ? {} aetherOptions = problems: jshint_W040: {level: "ignore"} jshint_W030: {level: "ignore"} # aether_NoEffect instead aether_MissingThis: {level: (if thang.requiresThis then 'error' else 'warning')} + language: aceConfig.language ? 'javascript' functionName: @name functionParameters: @parameters yieldConditionally: thang.plan? @@ -107,5 +109,12 @@ module.exports = class Spell aether = new Aether aetherOptions aether + updateLanguageAether: -> + aceConfig = me.get('aceConfig') ? {} + for thangId, spellThang of @thangs + spellThang.aether?.setLanguage (aceConfig.language ? 'javascript') + spellThang.castAether = null + @transpile() + toString: -> "" diff --git a/app/views/play/level/tome/spell_view.coffee b/app/views/play/level/tome/spell_view.coffee index e55e03210..4951b6915 100644 --- a/app/views/play/level/tome/spell_view.coffee +++ b/app/views/play/level/tome/spell_view.coffee @@ -15,6 +15,10 @@ module.exports = class SpellView extends View eventsSuppressed: true writable: true + editModes: + 'javascript': 'ace/mode/javascript' + 'coffeescript': 'ace/mode/coffee' + keyBindings: 'default': null 'vim': 'ace/keyboard/vim' @@ -34,8 +38,9 @@ module.exports = class SpellView extends View 'modal-closed': 'focus' 'focus-editor': 'focus' 'tome:spell-statement-index-updated': 'onStatementIndexUpdated' + 'tome:change-language': 'onChangeLanguage' + 'tome:change-config': 'onChangeEditorConfig' 'spell-beautify': 'onSpellBeautify' - 'change:editor-config': 'onChangeEditorConfig' events: 'mouseout': 'onMouseOut' @@ -58,7 +63,7 @@ module.exports = class SpellView extends View @createFirepad() else # needs to happen after the code generating this view is complete - setTimeout @onLoaded, 1 + setTimeout @onAllLoaded, 1 createACE: -> # Test themes and settings here: http://ace.ajax.org/build/kitchen-sink.html @@ -67,7 +72,7 @@ module.exports = class SpellView extends View @aceSession = @ace.getSession() @aceDoc = @aceSession.getDocument() @aceSession.setUseWorker false - @aceSession.setMode 'ace/mode/javascript' + @aceSession.setMode @editModes[aceConfig.language ? 'javascript'] @aceSession.setWrapLimitRange null @aceSession.setUseWrapMode true @aceSession.setNewLineMode "unix" @@ -173,9 +178,9 @@ module.exports = class SpellView extends View else @ace.setValue @previousSource @ace.clearSelection() - @onLoaded() + @onAllLoaded() - onLoaded: => + onAllLoaded: => @spell.transpile @spell.source @spell.loaded = true Backbone.Mediator.publish 'tome:spell-loaded', spell: @spell @@ -562,10 +567,15 @@ module.exports = class SpellView extends View @ace.setValue pretty onChangeEditorConfig: (e) -> - aceConfig = me.get 'aceConfig' - @ace.setDisplayIndentGuides (aceConfig.indentGuides || false) - @ace.setShowInvisibles (aceConfig.invisibles || false) - @ace.setKeyboardHandler (@keyBindings[aceConfig.keyBindings] || null) + aceConfig = me.get('aceConfig') ? {} + @ace.setDisplayIndentGuides aceConfig.indentGuides # default false + @ace.setShowInvisibles aceConfig.invisibles # default false + @ace.setKeyboardHandler @keyBindings[aceConfig.keyBindings ? 'default'] + # @aceSession.setMode @editModes[aceConfig.language ? 'javascript'] + + onChangeLanguage: (e) -> + aceConfig = me.get('aceConfig') ? {} + @aceSession.setMode @editModes[aceConfig.language ? 'javascript'] dismiss: -> @recompile() if @spell.hasChangedSignificantly @getSource() diff --git a/app/views/play/level/tome/tome_view.coffee b/app/views/play/level/tome/tome_view.coffee index a60179969..e7cc1d7e8 100644 --- a/app/views/play/level/tome/tome_view.coffee +++ b/app/views/play/level/tome/tome_view.coffee @@ -48,6 +48,7 @@ module.exports = class TomeView extends View 'tome:spell-loaded': "onSpellLoaded" 'tome:cast-spell': "onCastSpell" 'tome:toggle-spell-list': 'onToggleSpellList' + 'tome:change-language': 'updateLanguageForAllSpells' 'surface:sprite-selected': 'onSpriteSelected' 'god:new-world-created': 'onNewWorld' @@ -215,6 +216,9 @@ module.exports = class TomeView extends View spell.view.reloadCode false for spellKey, spell of @spells when spell.team is me.team Backbone.Mediator.publish 'tome:cast-spells', spells: @spells + updateLanguageForAllSpells: -> + spell.updateLanguageAether() for spellKey, spell of @spells + destroy: -> spell.destroy() for spellKey, spell of @spells @worker?._close() diff --git a/app/views/play/level_view.coffee b/app/views/play/level_view.coffee index 083d99cb0..bd60b867f 100644 --- a/app/views/play/level_view.coffee +++ b/app/views/play/level_view.coffee @@ -274,10 +274,12 @@ module.exports = class PlayLevelView extends View setTimeout(@preloadNextLevel, 3000) showVictory: -> - options = {level: @level, supermodel: @supermodel, session:@session} + options = {level: @level, supermodel: @supermodel, session: @session} docs = new VictoryModal(options) @openModalView(docs) window.tracker?.trackEvent 'Saw Victory', level: @world.name, label: @world.name + if me.get('anonymous') + window.nextLevelURL = @getNextLevelID() # Signup will go here on completion instead of reloading. onRestartLevel: -> @tome.reloadAllCode() @@ -294,11 +296,10 @@ module.exports = class PlayLevelView extends View window.tracker?.trackEvent 'Saw Initial Infinite Loop', level: @world.name, label: @world.name onPlayNextLevel: -> - nextLevel = @getNextLevel() - nextLevelID = nextLevel.get('slug') or nextLevel.id - url = "/play/level/#{nextLevelID}" + nextLevelID = @getNextLevelID() + nextLevelURL = @getNextLevelURL() Backbone.Mediator.publish 'router:navigate', { - route: url, + route: nextLevelURL, viewClass: PlayLevelView, viewArgs: [{supermodel:@supermodel}, nextLevelID]} @@ -307,6 +308,12 @@ module.exports = class PlayLevelView extends View levels = @supermodel.getModels(Level) return l for l in levels when l.get('original') is nextLevelOriginal + getNextLevelID: -> + nextLevel = @getNextLevel() + nextLevelID = nextLevel.get('slug') or nextLevel.id + + getNextLevelURL: -> "/play/level/#{@getNextLevelID()}" + onHighlightDom: (e) -> if e.delay delay = e.delay @@ -471,5 +478,6 @@ module.exports = class PlayLevelView extends View clearInterval(@pointerInterval) @bus?.destroy() #@instance.save() unless @instance.loading + delete window.nextLevelURL console.profileEnd?() if PROFILE_ME super() diff --git a/app/views/play_view.coffee b/app/views/play_view.coffee index 6a92978e3..349f900c7 100644 --- a/app/views/play_view.coffee +++ b/app/views/play_view.coffee @@ -1,10 +1,32 @@ View = require 'views/kinds/RootView' template = require 'templates/play' +LevelSession = require 'models/LevelSession' +CocoCollection = require 'models/CocoCollection' + +class LevelSessionsCollection extends CocoCollection + url: '' + model: LevelSession + + constructor: (model) -> + super() + @url = "/db/user/#{me.id}/level.sessions?project=state.complete,levelID" module.exports = class PlayView extends View id: "play-view" template: template + constructor: (options) -> + super options + @levelStatusMap = {} + @sessions = new LevelSessionsCollection() + @sessions.fetch() + @listenToOnce @sessions, 'sync', @onSessionsLoaded + + onSessionsLoaded: (e) -> + for session in @sessions.models + @levelStatusMap[session.get('levelID')] = if session.get('state')?.complete then 'complete' else 'started' + @render() + getRenderData: (context={}) -> context = super(context) context.home = true @@ -198,7 +220,7 @@ module.exports = class PlayView extends View {id: "dev", name: "Random Harder Levels", description: "... in which you learn the interface while doing something a little harder.", levels: experienced} {id: "player_created", name: "Player-Created", description: "... in which you battle against the creativity of your fellow Artisan Wizards.", levels: playerCreated} ] - + context.levelStatusMap = @levelStatusMap context afterRender: -> diff --git a/bower.json b/bower.json index b499ee391..e73834bc5 100644 --- a/bower.json +++ b/bower.json @@ -32,10 +32,11 @@ "firepad": "~0.1.2", "marked": "~0.3.0", "moment": "~2.5.0", - "aether": "~0.1.14", + "aether": "~0.1.18", "underscore.string": "~2.3.3", "firebase": "~1.0.2", - "catiline": "~2.9.3" + "catiline": "~2.9.3", + "d3": "~3.4.4" }, "overrides": { "backbone": { diff --git a/config.coffee b/config.coffee index f64a3d7ac..1a860cb76 100644 --- a/config.coffee +++ b/config.coffee @@ -65,6 +65,7 @@ exports.config = # Aether before box2d for some strange Object.defineProperty thing 'bower_components/aether/build/aether.js' + 'bower_components/d3/d3.min.js' ] stylesheets: defaultExtension: 'sass' diff --git a/scripts/devSetup/ruby.py b/scripts/devSetup/ruby.py index 09174a8f4..410ec6ead 100644 --- a/scripts/devSetup/ruby.py +++ b/scripts/devSetup/ruby.py @@ -34,7 +34,7 @@ class Ruby(dependency.Dependency): elif operating_system == u"mac": raise errors.CoCoError(u"Ruby should be installed with Mac OSX machines. Please install Ruby.") elif operating_system == u"linux": - raise errors.CoCoError(u"Please install Ruby (try 'sudo apt-get install ruby').\nIf you are not using Ubuntu then please see your Linux Distribution's documentation for help installing ruby."") + raise errors.CoCoError(u"Please install Ruby (try 'sudo apt-get install ruby').\nIf you are not using Ubuntu then please see your Linux Distribution's documentation for help installing ruby.") def install_ruby_on_windows(self): raise NotImplementedError diff --git a/scripts/windows/coco-dev-setup/batch/config/config.coco b/scripts/windows/coco-dev-setup/batch/config/config.coco index 3ce86efa4..eba46b0f4 100755 --- a/scripts/windows/coco-dev-setup/batch/config/config.coco +++ b/scripts/windows/coco-dev-setup/batch/config/config.coco @@ -1,3 +1,8 @@ -version=1.0 -author=GlenDC -copyright=CodeCombat.com 2013-2014 \ No newline at end of file + + + 1.2 + GlenDC + CodeCombat.com 2013-2014 + https://github.com/codecombat/codecombat.git + git@github.com:codecombat/codecombat.git + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/config/downloads.coco b/scripts/windows/coco-dev-setup/batch/config/downloads.coco index 47253f152..771189954 100755 --- a/scripts/windows/coco-dev-setup/batch/config/downloads.coco +++ b/scripts/windows/coco-dev-setup/batch/config/downloads.coco @@ -1,21 +1,38 @@ -[general] - [32] - nodejs=http://nodejs.org/dist/v0.10.25/node-v0.10.25-x86.msi - ruby=http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.0.0-p353.exe?direct - python=http://www.python.org/ftp/python/2.7.6/python-2.7.6.msi - [64] - nodejs=http://nodejs.org/dist/v0.10.25/x64/node-v0.10.25-x64.msi - ruby=http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.0.0-p353-x64.exe?direct - python=http://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi - [general] - gitbash=https://msysgit.googlecode.com/files/Git-1.8.5.2-preview20131230.exe -[win7] - [32] - mongodb=http://fastdl.mongodb.org/win32/mongodb-win32-i386-2.5.4.zip - [64] - mongodb=http://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-2.5.4.zip -[vista] - [64] - mongodb=http://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2.5.4.zip - [32] - mongodb=http://fastdl.mongodb.org/win32/mongodb-win32-i386-2.5.4.zip \ No newline at end of file + + + + + http://nodejs.org/dist/v0.10.25/node-v0.10.25-x86.msi + http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.0.0-p353.exe?direct + http://s3.amazonaws.com/CodeCombatLargeFiles/python-32.msi + http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe + + + http://nodejs.org/dist/v0.10.25/x64/node-v0.10.25-x64.msi + http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.0.0-p353-x64.exe?direct + http://s3.amazonaws.com/CodeCombatLargeFiles/python-64.msi + http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe + http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe + + + https://msysgit.googlecode.com/files/Git-1.8.5.2-preview20131230.exe + http://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe + + + + + http://fastdl.mongodb.org/win32/mongodb-win32-i386-2.5.4.zip + + + http://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-2.5.4.zip + + + + + http://fastdl.mongodb.org/win32/mongodb-win32-i386-2.5.4.zip + + + http://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2.5.4.zip + + + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/config/finished_header.coco b/scripts/windows/coco-dev-setup/batch/config/finished_header.coco new file mode 100644 index 000000000..9163183ca --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/config/finished_header.coco @@ -0,0 +1,7 @@ + ______ _____ _ _ _____ _____ _ _ ___________ + | ___|_ _| \ | |_ _/ ___| | | || ___| _ \ + | |_ | | | \| | | | \ `--.| |_| || |__ | | | | + | _| | | | . ` | | | `--. \ _ || __|| | | | + | | _| |_| |\ |_| |_/\__/ / | | || |___| |/ / + \_| \___/\_| \_/\___/\____/\_| |_/\____/|___/ + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/config/github_header.coco b/scripts/windows/coco-dev-setup/batch/config/github_header.coco new file mode 100644 index 000000000..ce71943fc --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/config/github_header.coco @@ -0,0 +1,7 @@ + _____ _____ _____ _ _ _ _______ + | __ \_ _|_ _| | | | | | | ___ \ + | | \/ | | | | | |_| | | | | |_/ / + | | __ | | | | | _ | | | | ___ \ + | |_\ \_| |_ | | | | | | |_| | |_/ / + \____/\___/ \_/ \_| |_/\___/\____/ + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/config/info.coco b/scripts/windows/coco-dev-setup/batch/config/info.coco deleted file mode 100755 index 66ee83329..000000000 --- a/scripts/windows/coco-dev-setup/batch/config/info.coco +++ /dev/null @@ -1,9 +0,0 @@ -====================================================================== - _____ _ _____ _ _ - / __ \ | | / __ \ | | | | - | / \/ ___ __| | ___ | / \/ ___ _ __ ___ | |__ __ _| |_ - | | / _ \ / _` |/ _ \ | | / _ \| '_ ` _ \| '_ \ / _` | __| - | \__/\ (_) | (_| | __/ | \__/\ (_) | | | | | | |_) | (_| | |_ - \____/\___/ \__,_|\___| \____/\___/|_| |_| |_|_.__/ \__,_|\__| - -====================================================================== \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/config/install_header.coco b/scripts/windows/coco-dev-setup/batch/config/install_header.coco new file mode 100644 index 000000000..e99e50e70 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/config/install_header.coco @@ -0,0 +1,7 @@ + _____ ___________ _____ _ _ ___ ______ _____ + / ___|| _ | ___|_ _| | | |/ _ \ | ___ \ ___| + \ `--. | | | | |_ | | | | | / /_\ \| |_/ / |__ + `--. \| | | | _| | | | |/\| | _ || /| __| + /\__/ /\ \_/ / | | | \ /\ / | | || |\ \| |___ + \____/ \___/\_| \_/ \/ \/\_| |_/\_| \_\____/ + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/config/npm_and_brunch_header.coco b/scripts/windows/coco-dev-setup/batch/config/npm_and_brunch_header.coco new file mode 100644 index 000000000..53a47af88 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/config/npm_and_brunch_header.coco @@ -0,0 +1,7 @@ + _ _ _________ ___ ____________ _ _ _ _ _____ _ _ + | \ | || ___ \ \/ | | ___ \ ___ \ | | | \ | / __ \| | | | + | \| || |_/ / . . | ______ | |_/ / |_/ / | | | \| | / \/| |_| | + | . ` || __/| |\/| | |______| | ___ \ /| | | | . ` | | | _ | + | |\ || | | | | | | |_/ / |\ \| |_| | |\ | \__/\| | | | + \_| \_/\_| \_| |_/ \____/\_| \_|\___/\_| \_/\____/\_| |_/ + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/config/readme.coco b/scripts/windows/coco-dev-setup/batch/config/readme.coco new file mode 100644 index 000000000..ccce0d398 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/config/readme.coco @@ -0,0 +1,29 @@ + _____ _ _____ _ _ + / __ \ | | / __ \ | | | | + | / \/ ___ __| | ___ | / \/ ___ _ __ ___ | |__ __ _| |_ + | | / _ \ / _` |/ _ \ | | / _ \| '_ ` _ \| '_ \ / _` | __| + | \__/\ (_) | (_| | __/ | \__/\ (_) | | | | | | |_) | (_| | |_ + \____/\___/ \__,_|\___| \____/\___/|_| |_| |_|_.__/ \__,_|\__| + +============================================================================= + +Congratulations, you are now part of the CodeCombat community. +Now that your Develop Environment has been setup, you are ready to start +contributing and help us make this world a better place. + +Do you have questions or would you like to meet us? +Talk with us on hipchat @ https://www.hipchat.com/g3plnOKqa + +Another way to reach is, is by visiting our forum. +You can find it @ http://discourse.codecombat.com/ + +You can read about the latest developments on our blog site. +This one can be found @ http://blog.codecombat.com/ + +Last but not least, you can find most of our documentation +and information on our wiki @ https://github.com/codecombat/codecombat/wiki + +We hope you'll enjoy yourself within our community, just as much as us. + + + - Nick, George, Scott, Michael, Jeremy and Glen diff --git a/scripts/windows/coco-dev-setup/batch/config/tips.coco b/scripts/windows/coco-dev-setup/batch/config/tips.coco index b15f7d6e2..896086692 100755 --- a/scripts/windows/coco-dev-setup/batch/config/tips.coco +++ b/scripts/windows/coco-dev-setup/batch/config/tips.coco @@ -1,5 +1,7 @@ - 1) This program is all about automating the setup of the CoCo environment - 2) When there is a question, please answer carefull and correct - 3) This setup is still in beta and may contain bugs - 4) You can report bugs @ 'https://github.com/codecombat/codecombat/issues' - 5) Having questions/suggestions? Talk with us on HipChat via CodeCombat.com \ No newline at end of file + 1) When there is a question, please answer carefull and correct + 2) This setup is still in beta and may contain bugs + 3) You can report bugs @ 'https://github.com/codecombat/codecombat/issues' + 4) Having questions/suggestions? Talk with us on HipChat via CodeCombat.com + + You can find a step-by-step guide for this installation on our wiki. + github.com/codecombat/codecombat/wiki/Setup-on-Windows:-a-step-by-step-guide \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/get_config.bat b/scripts/windows/coco-dev-setup/batch/get_config.bat deleted file mode 100755 index ccd995c70..000000000 --- a/scripts/windows/coco-dev-setup/batch/get_config.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -setlocal EnableDelayedExpansion -get_var config/config.coco %1 -endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/get_download.bat b/scripts/windows/coco-dev-setup/batch/get_download.bat deleted file mode 100755 index 38f745faf..000000000 --- a/scripts/windows/coco-dev-setup/batch/get_download.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -setlocal EnableDelayedExpansion -get_var config/downloads.coco %1 -endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/get_text.bat b/scripts/windows/coco-dev-setup/batch/get_text.bat deleted file mode 100755 index e7a5d399b..000000000 --- a/scripts/windows/coco-dev-setup/batch/get_text.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -setlocal EnableDelayedExpansion -get_var localisation/%1.coco %2 -endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/get_var.exe b/scripts/windows/coco-dev-setup/batch/get_var.exe deleted file mode 100755 index e07a3cf14ad077979999ff908ee47bce7e5a5133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28160 zcmeHwe_T}8weJ}ibkxxq6EN72hz3)y7(2rN&M*TE$RH}{ATVhBF(S-35Cp=^_#;)L z9cZ0y=hmB~x3*1NjcJ>k_Vp&MjkL{8Kn!4F4O*|UjcvUt%{>%eLVna>LY?7t3*+8YLR#xHeqrunXtEei}yej5$A_ z!5yFS%eif;;$O}!_tpB7o0=Q9Hdk#+uC8imXbdE8@gz3~8)Kf6wDWzcsbhKEnBN95@{uSFDQT-uUO#G8yIy7o(b{n#yrD)GQWjd+fOCQJnN_ z7w=;@E{;=C#psngf(HoE1sTS2_Wc4N^`p+hb@W1&+%uabl>0dDxQI%qA3Yu7xbirT z8!F|vq|wToZw`ZcyRzEJaqSb~lVBDHJUaupZ?fVyn@SA(KB>_EA=*;C&L z!1BpxIE11>@uDaWJICcK9{+LscSxXHWh=9D(fLo6+PO10D%hZlz0*BOs7;{Ss}7AS zFx3@Jcm@xlQ)ZCZBruB3nKALdEY3Ewo15=rv^{|*aRkT-xWE|75 zQZ*}xF{62k(44P{UXk%QOQQ(~G0@M+8JSLpPHDW>le(|A%k7}AF6#5GuyZv>iEU?S z&~`Mj$Kh~q+}Lc?pJZ;_G$tX}HFmUU_^B|*{)2?MB(X5{ zY$-b%akNp_a{^A>SuX}Qg!Uw9nx`|2H7YpM>!#D)jwDj-@Ww=MxI`1$8?W&vvO;~N zoQqil!d!rUQV_FtU^1Hlknr8ir4LsCC_d~+3UAVfH^qncoFUvLZIG2TDWH}M?cu4q z;=-EIYLWTY$Z@&!rYwKtgZ|ia9UrRM$qs%_?8)%P=YuJx z)8VE1((a}4BoW`>gV3&?DEr78p2j~H4;jyci(roSP*-0#*kigH+8M722TwJ}FwPnI zsunD*;TzBu^GyDZwNe!;QnQ286LEL7W0J0=1r4V2Yosx{m+J96Zm8S&l^BXegubQf zNNWIH!2@9oJ9@fX5~$@MOe7LX5}HQHaq%7~2FZME)Pyt8`0!)X2|f}bG|_|rs`}Rh z7fpO0vDxjof-{H7??v}mkXtu3a!}|LO*js4-HF~c5rGwFq@q!P86Z|hG z5&NYt2x{+-pI{EA@!hw9f<1ktJS2Eh;@&YOHnoR?ecrI6_kd$0BFvN|MgCy`vrdH? zyEn0tL8$S91!#a8*JTTW`C2TDT2z_HP8GiZBr(U8)NUtxm32lcdihz9+;{>Y&rvHf zotI|M8?NX*P%+ZK9sEf?PxMEN#_XfiRVf*V!Y)*i2Ys09aB!%*z<5|tr&Ui$4vL=* za&S)?!(4~ibW$XiuMQU*4zshO5{+l^2Kx;44Z}oFuTYriJ_tsn;#9aGWoMa8(EDgJ&~QvJ-PA6Qvas#& z4WnSRMZn4N|27NqXc0ytZ5TMzMnssd!e11m)Pw^mo4w)U6sH72=4d*PmLjwic*Er> z>0M&yShh^fdLrv$yliHuBgSjJ82oeUE9b72g12&hDMn$-GyvE&4&YT0z|7AB08l2P zB%vgS29wwbP#?#D>Tpep!PMTpOz>Ud9eNkx^oA#w!i7aPq}cfPbwK|SUvdqT`m4~X zq%{P9mL~q`58;eYshvReI8enM6(q+mox^d0P)T~vr|d&h^9)v;Qa`4L=$^>4nS$Jl z&1wmE{q3nTz8@1OuHs=V~d3duNe;y-&ZJzN$TMZ&rtM${jd@Z%hP*Vg*G&( zfvO@d_$(U^MODqopH!EwPVw{VX51l=R*Q*^H++Y4;6AzIuZYsmt7#-vo0p~)o4N!_3OToODK|J z_JsK>bFrW%)TKAQUdgUoHkAj}rs%*t_B-B*xoBw*#+ah4up9<542-aBC?cv%ud}lU zHaQP$l1ZFSB!)MYhgTJcHx*bv3f@lcSI<_c%Ro?%ND!=1)+CV(QQlu4lXq#E>*n?4 z9a>ogshD05ZyW)Ufn>HyA8{2~W(H?5myH$L!!y~c#?C;C+Z|*L99P?-rg#{xoC!g$5Um2A7EE zmCt;?fi$=eUP0O=tQ@e5v(i{~b|{P#r0a3BwGGUe?wB z2CYD!FXwbEzrr0`s%KneWs$WbIFl{4vof30xrV(GO(>!{{Coiyyq7I4cOvVdWaMWw ztdNRy=uUL$TK|mF{B1?-Qp~oZ((r_f8NRI;FP`>00|o`vG~^(iJL8MUSra=csMHs%x#KK%=BD zbS+sIdJ%PSda36^A8K@8{2rbn4{Ac!uj{__4cuF=`ebru(aGu zSb9Y=DlWi3s%M4^W~z~d=mCL<4b(a=bg2zo|Np)ojkaD5oM9_#|CpC zX@*!=^=>q(JF!OtlZtzhBo2x3yRm?JS@*!b^w20gI5Y!^z9B>p(S&wLj2c{M5Orfr z5ouu)a+*64l8icN=o|7|R+!AVO14J>-OPfaSX6$Kka2pguLUM~EjzCV?_q_8D95%Z zhbCQTC%x9;z!cqyZnu#8x=roE6&3>o`GR_Qt*-{mp}o+Y1ZQP5p#`%cU=-BmWH27a z7bz^Vr~n(!CPiAk|*fNO8bk*7wSin{%GZm{eu&I&w zA`E{ATV{Zj0YD>K8B_Jw!W=C-%5^R4$u5_Xg{>AXY?+-^3Kj;xOBQC?Q4pNZmXXsu z1VQOev4f<@PqGwH{;yenhn2dYKRmxTuM3#|3AC?T-0uo@* zd$&N{b*-uNw5Kmd_l0K(m*awEBQF?BT@0mXIAi-nkjkE37&Phk_N#&w^iM`tGT~w} zKEcXFvSDa2s7ll#-?5ay*h7SRBT>vcLLU)p@D*?!L*T^P<&R-Q;5(h2qqaCmguR^F z<&3?!29Y9dKoGwr7gD=Ir?e!Eu!GFG1m>*bCYXTMhhfS@=h;6;qXU~2#>s*bcfkv( z!85TzNPF*H?5+beM8z4lx?J}{!K~=2QfCxFvZnRw!~O68y@VhMt&3;)RwVdvz5t_rA4kviz@h;(4KfzFkbNVGmrzZpgz=nJ#;ZT zFbTJm6bVbkqmUwBi=eutUDxtO66tHxE(Rx2=fEAz5fAU{bX9_~02sntA;zeNH;a^~ z=+|Htn}k|8nP3T9smItDc^1|htTJ@!h-cj4B7}9D!g_QJ7ZIQYMm_}oPUIidQXr#+7)laN z=i&VH$Px6&q~a}Qu-QWxhTl6$WOY9t6nqR~G@73F-~;UJv{wTOtgO6FRq28ujxp|p zFpvuBDcKlfJd0H%vCeQ=G5;>acndCz^k7utG8tJNfs3pf1wIX%z-rj32|Ec;;4*o9 zxF+pivQ_1k@R;|r3QBNW&j)9)?r9EvaB>@ob0Egl9viK6lClp8tkJ~X$M%-9vt5Nw z)mT_5#%z1b-3Z#`n3A?XwVb#FXgT=j(B5(`u!uad)w+4$Szr0k4iL^{DZecK*J0!@^Qeovd!)`fjf?*e1X({P z7i@9GBQczT#PBR)4^=o%jr3C3lR(21HmS?5;aFGafkF+=5^lO+S(2BD9n%z!%7x{E zb@Trr*m}T(ZL^;X*eYolVeiZvPAWpCZ$XWgO*WnPhU1%9H$P4B-W}224P9U#@GryWSf}YU-+`M=tQ!dcNbly;L{e4* zU7J8kUOe_br&yMaQiO~-l9X8%(Uz7v`R@uFFIw931C`BsiNx43i~^aX&yq|qKa?3G z@fJu9>Jg|--DGMP=2FWcF{gYyoef(**s-_`%MUWn*x`xta=q@v?JPQBa;_DUbM`CN zgGFcNCrr(?+-PbJkGv5%y)r>Z{y)$P9?IBk2wI)`-UK;w<^JnMkEBf5KFyaXOaVoU zY?mhWBN6uP*w^G8>B88P)}iflS?{?&y|^4*Qa`i~`_-oQffzKq=pN;KA2q<(rz(Qqu7@zF>{Jp*&#?I#B+f=ivmd@J_a~+EpMSW|6haAXj*$eC0od` z#$k)4h$`5d`mQ2TD=S}fQ=;~@Q7S|pDBhs>4(o`JqK#%|-$8?%nGuj8GkY3KnwTU~ zTDF*ajwOo~eSbAG`%uixu*EViGy8)S&P4}^!-1(JxA$=Wj7m9k*lVX(M$f|?Q_!Vw zrlh#i!JPU?QITb8Fp(A6U98C#PGipG@Kk0uq@F%^Ej(V^;h&v)7fVAI>pOvjaFdNS z8CYf|+nLOABk4QBO?Ef>3J7`$#ktVQ73V$->ql)y)StG(QG1zSw%n)!ZhdH2BQ6K)y?$~x`L~V(vmpUWb6$s9ROr%f`a#Fj=v4#uv>)~8y2rF40 z>vDHu^{0hcxEIFXfBj}L6~$Z6`r}!Vz7#ADAgMI9Tf6Z7>{2HdJ6*U*PZNUIiiAo( z+9t9k>QnDnd?oHt-?Rl6_6%WLVUK2il-7^&OU^1y>Wm3qf zUNxJA9p|2~V~~$d!*t}ZRq7jFqW-31U=HH(*xx{)v#7@;zJ@%>tg-b3vl!97gi0>8 zhdBl#@dqN>-wKbfgk2guhF$9LB!xapVYeFdKZw*tdR;)$pxSsfDj?P@kO@LA@LZ~MX1Pe1*^o9vZy{pbE< zeR=!sZJ6$r$a<#)Tc)fs#nc zU}>b}a<_xtXJaqvhiLb4>#(6zad}O*<1&2#!B-@ZL1-gIDi9QQ@U#WZAAkx0MO&WH z&UF%rL7r{Y!}dM{tI^BmU*@FkXMQ>`i1tM9QFI_g5-nQ0CUfD*;T`d0q}TOO!Qn3T z9OY)JG%1L~umdf=iBZgP9d^8x?_%mWyp7?Xz{_2Ewq$v?E9H$m@a7m|oV+JXR`gdz z{_r@FKdcaW;(mCp=)*hWV^5EhyP91Za7HQy*F;LLOdxj06(?To3S$4=?c>C*6~tbJ z6&zO4)|MuVUCTBidetM-OA@@EPpAI)hfknE&j6@a!mBX9rQgk2&V!Xi}zn6->~D(i29d;C3eKN z!{aG5Gx$%Dk`XB7(CGT4P|6`F<&Yqq_S?Xjw9TQwZzD~gp_DlAIYzM0JQ2QcQQBV04RDMQ*bxbIt{nsh=G3n#<5zDeeYl?>V3`U$Wktb6~XkMm4=#R}- zyvsd_*BB0-5^pstPD^10Y00gpch7m4Y<#x$)!hjX<2wj``;1fvf9I?08oLzU(>E}g z-jMXMk63w{IUKx%k0qwC81^!7MDdzm{A6env#Ue94O$L~M}ffxba+o3O{hnJKs&2q zo9?lW1LQu0w`nb>gIcIGmSC=*f;v)Ibd8@+-{OUa?SVXr{?_Pj0| za)X@}8_dwn%|NdVSzCVyM4^&F?5PiO!NtPJv=_{d(^nCc95MnkV*y88NO!TuxP1X|9rr%!jVk=%iXKEv|h?pBNkrx4Tq zSpX%B6@AfxpJ6!@UX|6U>eTYPGKr_Qo=oxwK~4YN=ppLYLZyCvtiKcV3)HODVaX z6Q05izA2n+ZPNPhVc5jgKHGXac-Ow2@m%1JXu@SQQ`2qCsbT3q9++f0J@5zi4noj1 zEQsCs;L3<&s1mbr5P*p8@PSq^$+rkm2$sue!U$@8J!^%hQvN@*n9vf0oZ;yL71t0f z1E7+B0YjWBxmo_e#<#5cGtYH^Izc^?T6?@{(>20~&hK98Hg36)q$s|3J( zd*0@PvA_>HR;cT^GWlx*j7JlKPtQgN5k#YcMnuow@GS!Ei(s!wl>bl1@{frYOZHCW zp?K5lWG|6rgI0$o5U{=%@Qr?XgU?10o>+$h6%)km=cPbK0Gbub)zG`W5j*8#s|QQ* z23-CiRl_O=!?VKfK{O*1W4iDvM6M&@IoQs^_k#m1Hz=9F0ru@jKL&;i$Ncw1Z|h`& zpVsi?L)XD`>e+NnGt5YX3b3%2uo4)3V&L_)?&Zi8dF5bsif|wSdh-S2q2g%@wmWz1DMkcR~1~t)yB!I3P zsHxNNB>-GU?26C=Tr^`JI@0Zx2%_eQqtA(6EW;)sa`LyM58~di<8n0E7rl6lhKUBR z;Ewu14Jk+BK`j=A%X|)?J2BF0;2s}n(9{4MzXmYEXQr3d6>WsvIDrSXaMs}L`*11v zAoh>0C9LX{6o@^VQI3aWbnA#xstf+tke56@N9e| zD8OdsT|0pyIIXO#PK9?3dN76k$eN?ro1pKC5xu<_000ajnxI7^wj5{UgAk4BY9aQq z2J}828Fe&4gQkJspz>%FpaC$oZVvxC@i<@=s-Pi@!Wq=)yF&b2z=?0bCj2^5$vY%5 zwc(8p*H5W)IAakAm$BXH>!nWZ)X5}t>W(8^@V}g8V_#5H2J+OP!E)DbR0n4J=)xBh z!$3b3AN_zisyj+@V$;pQ6jntu=qZ{(VvA;w-1ylS>4QP-u?2Xr+?9lLa0!-)bigB5 zhbx(a5CxxJmJ)B6Ko8z(UlE{5mIC}_z%K&4$Mz6L{0Fwp|$|7Gqztaowgj{ajW}k2kWR) z9iw5R3FR1NT^-gS(o8meGq@F0P|(PuPPB$KM~iV`(>I_ktl{k-gTDg=gt8Yk*)gEj z_l$#36%i`_Kfz-tdjVRa!6}5efT~UHo&1|<>Ho=JppNsksB_jtGcXez-biXwYf`k( zmhb|`%lkIb;E3dnM}IFc?mJ>J`zsZ#VgKL)P<71g2Zhtq>6~Do^IePRoUwq;*(o@C z4<QCP6ge*2}ceB&0y-$MylJPQ`B_ z<*0)klTqo5Uqd2I!fhy<0JxwAFgXO{Bizx1M6^L^;&D0M38%Gy?DJI!RB%Nl`kh&D z)u|;~{6ryI5kK(1p^0!{^w|J{p({|p{pM=_wkv^Y*h!&zfTQW;{{S&UJte*4Uqby! zJy)mo6%qCa1?+v;>(H_;-M>5ZD(pm(7*UY_2K@ehfp@L2^H zoQdCSM1y+KmGX8-0^Umxorunl7tV<|%NeO}9lV&NEBLNiAFfZ)M^I9)$P2B}F=Bej z8TRne;4pKL+K~4QJBAUiiJwtJbB5#}Qn<%yj*=2zOg1D>YYqS3F_7b_#EqhQQCPu= z;tDPd?bOExQ3M+`t zPX=!+>T3HT7MU05gbi7|!P2qGa5^#3-cYyNdcFA_H{M$U>Nr8s>0_ay^9>4VVSk>M z2h4=zDOBVoz(<}fwqw6p@DOjC&PzU`C{g#=Np@24YZAFXI4-iq_UKOJA(+&icyJOv zNQe|@60wPXCw+}kq_tkdTimsp*k4;eYMz=OYF}Wz*vy;SA>DE4M0)D3`+U$KaW0QS z73gO{^eM4m?ncKjCUA7NFq4==0`iep;}>E!5ivtN<(P^41WzZnIE5DR8!>wdez@{M zZ|DkzoTLECITzDk!5N#*?r&3IND|CgwL%Khk1zYtJRj1{22tw+J%`+#0Y&`yG$Gaef9kmW#B z842z(!F@0+VI6J1g!Y-#?pu%c*W`A*+Urm3Rg8BEaQ*M2V#NsVeviAh$Ee45#U3OL zGw7qMK}jc#|13d|5cCcu{Y_xDK^;ob0Jse^WSV?sL0i`|+p~G4ND<`nK zWyF%qm}3YwscX^0IzpbI>u^n>4qtSB04U&>@t}{+_Ypo)1Oc&7*?;W3f+*6t_mOS3 z9i}mU{=wLkfSyqQS_y?LYa;0-0zXCIOaTu4JR{J9{2cV0xz2*m_w#2-jf7t=^`ChK z!?Y_Df{rMmVb9oy z8%9zes`B$Gi!693q~`Pj^EA{XeCy;_cG{mgD_T2-m~? z-=OQa1gNh-a3sJlp-LFw3jy-XUv3g*I1k7}?Qkh1#snJaAdU1otU%J9GiT}&+L90q z{fvHo$basQXw+v|iMy+SUf1dK(*2)=d#Oh#n?t;$Y1SR39&nb=z>Q(~K&~A}E%;~$ zG1>^)=~Bz>!dP^it>d^$C~u$)qFhCZe}LoCQC6Wepge-|ILgx~KSp^T!ejjB2Wfb|y%CU2It+aC-73r8^w{z`F$DZYSy2^j^AO`n9 z$6YByS&F}hP;TcEv+W#Z7?gSVxB&h&aar8w@Nb9kZ!x!(Ys9~;Ts`N(A4#ajy`%<& z8hZ>?E&dE48;abhr;wSvO@LYvbj~>;yt4FOL*8r}KTmxFXxD&D73QqvE5&q>| z0nWS7KZt7;*DTc12#wqWz}5gd32!4>77O(G1I@J!TayEgjmh**U%5&ZR^4bQIuu^SvlZcCHC! zAIi|(c5cLG=Z?(5J<3(w520L{hjNdd>rJt9_W6KCc?_~|$CVDKK362%eYz8cWljW7 zcx}(EDJv*D{ajXx>fG^VFUD^E$ z@}a^_6P|aj5JlG*+^r58<6?eC1fwcOCp_xDYyu(vPxm8GJ0tVU%{1 zD<~Qmw;jcY@^zHIpe$O>aR*R-iqeZRg0gT0U{Fq@+<1@-_7&PW+7}?Y+7z@aVP%>r zWu^Kv(p7%eNd8NHMk*k{(en$rcJ4e19df&}e^I`jdk}>Vx&4BoKh>Yjx6@^`{gR@6 zr2}ar3LWyCpjjASi@KU@J2i2~rTJ2}Edbp#w?~lox1i9mSmNb*>6zw?4rMgbTKcHv1p%`=Uc$v4t&rtvYwShAd+l;|d(6~H~o@VEkwu>Y;J zeBU^pmV59_c$M>$jO_=EnuC1rK48525=?1_enTtJpL9qs6QRgppUG-BuAR-MH}tZ zbkiZrh8pBPb_LXJhOsAtrLq&a2ruc15BF4e;0F9M-XV#8dTze~235i#!zQl~>7I|P zjDPSJeVl-$V=bi-MdaAbB-IW!&Db>EJW_O^usy5(9g$Qal+Vi+?fTH}og4KnEQh)b~eCW0+H`l#H z##DPtOak$l`F8AH0AFEkW0R*rCexW$;jV4m67<^b&U|-e5lLwJq}*UbbyaYyFW~m< ztoAff<|}t_uL9c#iEAW?TLV6~r@6VYS#FiMR;hDqYwTbQf7P*idjL!o6p0{dE`ub} zH1PLwT&}+<7-#^fC>D_yBIn};BhRLL1ySr?0gC5C%C$A%O2$*$NRs?G(TW)I9Uu#x zxe9Qz+V9;t+WXd%Bh#>!bl^isb$J8yOdkCcbFnWmO?@ z@MvtVw?63ijVjG2*Z#abm*@tM2>R;}R0TYvXg-MvLj8*b@na8B$-%AVFH@g2DR<|m zbRi{BwJ{gMEg?*>pD`!$iOpEV1Tz$z5%(iV!`HZDTUEoZPcfweGR$cQur%P0vVIB_ zFrsC^@DwnBp-+#13n^#i6N^Khn;(noX>}EO#+#Rdvb^QaJZHYkTUG4|$O~;6mLXSq znw{+84qAu&zFP0Z{o%8U^74wDc?HHitjy%fd37$WwG)jdLu1Jxa9q&EBzNS}uwv27 z-%RFcM`4)!0&=%PKf!qaB__A3en-_Vzq_Hay0KxqT|(f-dM3pJKp-rd+_xc*0#9|b z$7>(Qv%HwVa~ac2bHl<9VPqGoAaqfE!!)+#_+Q4A9*`9B#HFz~FYp zc?G|RcUy7Z>iR}MdM6Mc*v@y;cD@*}kf6j+j*FkTH7{Rcavj=@<9kbDoUY2<;e#36 zDCB$xPz!VEb}!wzvk-qC+f!84P*d+|Hi@&iW^@)KGSA$4mD`PpZG?BI4RH5}lHpFr zx}}u<22Oj{!=B=-b*L)JmOP1sfy z@F7gZU)Uf>s80=K?Z8Zlci#~q-BnFZ?!c}lw0#7)=777#vn9B7tEbuRYivaR7Ng3g z(ZL3m8PZ8e?kz4?=mXlkjqVz}o53BR8mj8u+dKhZV~w3q3e7?eAjDg9iEj#Q-9Ay; z=^|YXTpMw=z3~B$dq-8kj~71N+X8oi=Eiz&6Y2V&I7b5+xwBCihau!|rwK3P6|GAfw>4EYdq#n{U&R!8s+!6?f#u+a#73{2xOR29 z%r@S*RD1lOqFuGj6IdE-ZpOPAx$;-)iUyG%8dnV4r77jUs|MDOZ;oB=FOY=oZ1(tp zl>2^cY0%TW%jszrNNK3{ENu)DXWXMP7`wc-`T?PW<6ctGQZA^#@)~6Bidu<6RPUm` zWxMl&_VnAw5Owl&rNYJZ}e|Lwk<45kE->0 z`~ep}OTc=VJ0 zWBc4F?(v;R@hc#18r}A}akSb#H_9}++de1DGY7d;UO~a~Rm;{QRu^vmo@e?$K%T7Xe&eP{aP z>33xmW>jPZG9Jx%BI9(%>lytS@tMmrAIc0Z`RMWfD(ktdlUY4kA7&L>J=O=T%=$g+PpxOHGi@ohg|>WKo$Vpp7j0j)>9gl%AIyF^ zyDjI1oVB@EbGc-^BLbQ@x~mN$rw1&4cFkmi?CRS&mzNZTYk1 zBa1#OCCi*uob|6+-_4q5^;=ikN^KWyf3QVu)3Se@-Il#Rrz+=LIls>Nea^kP=G=9; z?%Z>^AP7cbgWe|^@(tS!2Mm8QOf~9^pE25ue&bJ#ZyJY4vWEJv*cS=TIwv1T8>!$&GIA5Nz2QYKUlO`w`JW6 zK6YpQAnOlV$yS@S$m$bh{Gs(8o5vQmeZzLl_7mGF+ke{Lw7qK^wq3WWv*WWDWP7vg zv;En7vs<#imi@!*6WPDa{$uvr*$ZW-)kaHmCt2s~P zJeTug&Tn%1az4mW#@f1m!B^qCoVWbDmo$#_2F_ZfrGATCpr8K0S*>Bw|ux-vIpZprjzHbA2u%52U2 zX6DP8f6V+S)3#*ylBbuPU-Isf6!RK$i}|bOADAzh|7d>8tg|ezHU4Z?oQQO|xcM^Q^^Im$k~e)e60G;yXmh=9IC=c*b}Md}!13Y4PB} zY_gf`rXo|Z$!RJ#tu<{hZ8p`Ie5QKv5-{yF?KbU$mK}hVUI15X(>J8or#Hb~52YVT ze=_}edRzMQ>Fw#Kz-MndpFW&E0&7ucXfpH}3o;gE6l4@-Y|dzcRqxE$4elS$_+iE~ z8OI@o3mJVGe8y0QCR3Z4lDQz$4mp%()<6pNkix;t$1{&)K9$*?*_(MGvk!VZnE8ID zc1hBb?FOS~o7Vz(4q>ft{QS{}DNV|m_k%5vG#XBmNxCuc3nN{6kk%{r3xOxCHaOIdwc zgISB9?M`crwaL2EddT{?^?Bt8%I?h`${x;E=cME;%E1?YIh%8QIZZh`bM`^&AIrf + + + Deutsch + Ab jetzt senden wir unser Feedback in Englisch! + + + + -Bit System erkannt. + Es wurde das Betriebssystem + erkannt. + Windows XP wird nicht unterstützt. Installation abgebrochen. + + + Sind die für CodeCombat benötigten Programme bereits installiert? + Wir empfehlen Ihnen, mit „Nein“ zu antorten, falls Sie unsicher sind. + Überspringe Installation der Programme... + Ohne Software von Drittanbietern könnte CodeCombat nicht entwickelt werden. + Aus diesem Grund müssen Sie diese Software installieren, + um sich in der Community zu engagieren. + Wenn Sie ein Programm bereits installiert haben, brechen Sie die Installation bitte ab. + Make sure to select the option that adds the application to your Windows Path, if the option is available. + Haben Sie bereits die aktuellste Version von + installiert? + wird heruntergeladen... + wird installiert... + wird entpackt... + wird aufgeräumt... + Bitte geben Sie den kompletten Pfad an, an dem MongoDB installiert werden soll + + + + + Wie Du bereits weißt, ist CodeCombat Open Source. + Unser Quellcode ist komplett auf Github. + Wenn Du möchtest, kannst du das komplette Git Repository selbst herunterladen und nach deinen wünschen einrichten. + Allerdings empfehlen wir, dass du den Prozess statt dessen uns überlässt. + + + Willst du das lokale Git Setup selbst vornehmen? + Bit vergewissere dich, dass das Repository korrekt heruntergeladen wurde, bevor du fortfährst. + Bitte schließe dieses Fenster nicht. + Wenn du fertig bist, drücke eine beliebige Taste zum Fortfahren... + + + Gebe bitte den kompletten Pfad zu deinem CodeCombat Git Repository ein: + Bitte gib den kompletten Pfad ein, an dem du die CodeCombat Umgebung einrichten willst + Diese Installation benötigt die Git Bash. + Die Git Bash ist standardmäßig in 'C:\Program Files (x86)\Git' installiert. + Die Git Bash ist standardmäßig in 'C:\Program Files\Git' installiert. + Bitte gebe den kompletten Pfad zur Git Bash ein, oder drücke Enter, um den Standardpfad zu verwenden + Willst du das Repository via SSH auschecken? + + + + Installing bower, brunch, nodemon and sendwithus... + Installing bower packages... + Installing sass... + Installing npm... + Starting brunch.... + Setting up a MongoDB database for you... + Downloading the last version of the CodeCombat database... + + + + Dieser Pfad existiert bereits. Willst du ihn wirklich überschreiben? + Dieser Pfad exisitert nicht. Bitte versuche es erneut... + + + Die CodeCombat Entwicklungsumgebung wurde erfoglreich installiert. + Vielen Dank für die Unterstützung und bis bald. + Willst du das README lesen, um weitere Informationen zu erhalten? + + + Von nun an kannst du die Entwicklungsumgebung starten unter + einmal mit der Maus klicken. + 1) Einfach Doppelklicken + und warten bis die Entwicklungsumgebung fertig geladen hat. + 2) Jetzt 'localhost:3000' in deinem bevorzugten Browser aufrufen. + Fertig. Du bist nun bereit, bei CodeCombat mitzuarbeiten! + + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/localisation/en.coco b/scripts/windows/coco-dev-setup/batch/localisation/en.coco index 03442cea3..947890ee8 100755 --- a/scripts/windows/coco-dev-setup/batch/localisation/en.coco +++ b/scripts/windows/coco-dev-setup/batch/localisation/en.coco @@ -1,41 +1,82 @@ -[global] - native=English - bye=Bye Bye! -[install] - begin=Installation has begun, this can take a while... Please stay tuned... - close=Don't close any windows please, unless specified explicitly. -[dai] - title=[DOWNLOADING AND INSTALLING 3RD PARTY SOFTWARE] - downloading=downloading: - installing=installing: - cancel=Download and Installation cancelled... - software=Software has been installed... - devenv=Installation of the Developers Environment is complete! - stop=Installation has been stopped... - unpacking=unpacking and moving: - bower=Installing bower, brunch, nodemon and sendwithus... -[git] - stored=CodeCombat is safely stored on a git repository. - clapp=Therefore you need a git command-line application (Git-bash). - examples=Examples: git-bash, CygWin, ... - question=Do you already have git-bash? - path=Enter the path to where you installed Git-bash - checkout=Checking out the Git Repository... - username=Please enter your github username: -[nodejs] - question=Do you already have the latest version of node-js installed? - path=Please enter the full path of the location you installed nodejs to: -[ruby] - question=Do you already have the latest version of ruby installed? -[mongodb] - question=Do you already have the latest version of mongo-db installed? - path=Enter the path where you would like to install MongoDB: -[python] - question=Do you already have the latest version of python installed? -[error] - xp=Sadly we can't support Windows XP... Please upgrade your OS! - os=Machine OS cannot be determined... - osreport=Report your OS to the developers @ CodeCombat.com... - nocleaning=... Cleaning up has been disabled... Terminating Script! - git_app_path=The path to your git application is incorrect, please try again... - invalid_path=The path you entered is invalid, please try again... \ No newline at end of file + + + + English + From now on we'll send our feedback in English! + + + + -bit computer detected. + The operating system + was detected. + We don't support Windows XP, installation cancelled. + + + Have you already installed all the software needed for CodeCombat? + We recommand that you reply negative in case you're not sure. + Skipping the installation of the software... + CodeCombat couldn't be developed without third-party software. + That's why you'll need to install this software, + in order to start contributing to our community. + Cancel the installation if you already have the application. + Make sure to select the option that adds the application to your Windows Path, if the option is available. + Do you already have the latest version of + installed? + is downloading... + is installing... + is unzipping... + is cleaning... + Please define the full path where mongodb should be installed + + + + + CodeCombat is opensource, like you already know. + All our sourcecode can be found online at Github. + You can choose to do the entire Git setup yourself. + However we recommend that you instead let us handle it instead. + + + Do you want to do the Local Git setup manually yourself? + Make sure you have correctly setup your repository before processing. + Do not close this window please. + When you're ready, press any key to continue... + + + Please give the full path of your CodeCombat git repository: + Please enter the full path where you want to install your CodeCombat environment + This installation requires Git Bash. + Git bash is by default installed at 'C:\Program Files (x86)\Git'. + Git bash is by default installed at 'C:\Program Files\Git'. + Please enter the full path where git bash is installed or just press enter if it's in the default location + Do you want to checkout the repository via ssh? + + + + Installing bower, brunch, nodemon and sendwithus... + Installing bower packages... + Installing sass... + Installing npm... + Starting brunch.... + Setting up a MongoDB database for you... + Downloading the last version of the CodeCombat database... + + + + That path already exists, are you sure you want to overwrite it? + That path doesn't exist. Please try again... + + + The setup of the CodeCombat Dev. Environment was succesfull. + Thank you already for your contribution and see you soon. + Do you want to read the README for more information? + + + From now on you can start the dev. environment at + the touch of a single mouse click. + 1) Just double click + and let the environment start up. + 2) Now just open 'localhost:3000' in your prefered browser. + That's it, you're now ready to start working on CodeCombat! + + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/localisation/fr.coco b/scripts/windows/coco-dev-setup/batch/localisation/fr.coco new file mode 100644 index 000000000..9dfac45b6 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/localisation/fr.coco @@ -0,0 +1,82 @@ + + + + français + From now on we'll send our feedback in English! + + + + -bit computer detected. + The operating system + was detected. + We don't support Windows XP, installation cancelled. + + + Have you already installed all the software needed for CodeCombat? + We recommand that you reply negative in case you're not sure. + Skipping the installation of the software... + CodeCombat couldn't be developed without third-party software. + That's why you'll need to install this software, + in order to start contributing to our community. + Cancel the installation if you already have the application. + Make sure to select the option that adds the application to your Windows Path, if the option is available. + Do you already have the latest version of + installed? + is downloading... + is installing... + is unzipping... + is cleaning... + Please define the full path where mongodb should be installed + + + + + CodeCombat is opensource, like you already know. + All our sourcecode can be found online at Github. + You can choose to do the entire Git setup yourself. + However we recommend that you instead let us handle it instead. + + + Do you want to do the Local Git setup manually yourself? + Make sure you have correctly setup your repository before processing. + Do not close this window please. + When you're ready, press any key to continue... + + + Please give the full path of your CodeCombat git repository: + Please enter the full path where you want to install your CodeCombat environment + This installation requires Git Bash. + Git bash is by default installed at 'C:\Program Files (x86)\Git'. + Git bash is by default installed at 'C:\Program Files\Git'. + Please enter the full path where git bash is installed or just press enter if it's in the default location + Do you want to checkout the repository via ssh? + + + + Installing bower, brunch, nodemon and sendwithus... + Installing bower packages... + Installing sass... + Installing npm... + Starting brunch.... + Setting up a MongoDB database for you... + Downloading the last version of the CodeCombat database... + + + + That path already exists, are you sure you want to overwrite it? + That path doesn't exist. Please try again... + + + The setup of the CodeCombat Dev. Environment was succesfull. + Thank you already for your contribution and see you soon. + Do you want to read the README for more information? + + + From now on you can start the dev. environment at + the touch of a single mouse click. + 1) Just double click + and let the environment start up. + 2) Now just open 'localhost:3000' in your prefered browser. + That's it, you're now ready to start working on CodeCombat! + + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/localisation/languages.coco b/scripts/windows/coco-dev-setup/batch/localisation/languages.coco new file mode 100644 index 000000000..6acbda23b --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/localisation/languages.coco @@ -0,0 +1,7 @@ +en +nl +de +fr +zh +zh-HANT +zh-HANS \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/localisation/nl.coco b/scripts/windows/coco-dev-setup/batch/localisation/nl.coco index a5f9a1abe..654d45c97 100755 --- a/scripts/windows/coco-dev-setup/batch/localisation/nl.coco +++ b/scripts/windows/coco-dev-setup/batch/localisation/nl.coco @@ -1,41 +1,82 @@ -[global] - native=English - bye=Bye Bye! -[install] - begin=De installatie is begonnen, dit kan een tijdje duren. Geduld alsjeblieft... - close=Don't close any windows please, unless specified explicitly. -[dai] - title=[DOWNLOADING AND INSTALLING 3RD PARTY SOFTWARE] - downloading=downloading: - installing=installing: - cancel=Download and Installation cancelled... - software=Software has been installed... - devenv=Installation of the Developers Environment is complete! - stop=Installation has been stopped... - unpacking=unpacking and moving: - bower=Installing bower, brunch, nodemon and sendwithus... -[git] - stored=CodeCombat is safely stored on a git repository. - clapp=Therefore you need a git command-line application (Git-bash). - examples=Examples: git-bash, CygWin, ... - question=Do you already have git-bash? - path=Enter the path to where you installed Git-bash - checkout=Checking out the Git Repository... - username=Please enter your github username: -[nodejs] - question=Do you already have the latest version of node-js installed? - path=Please enter the full path of the location you installed nodejs to: -[ruby] - question=Do you already have the latest version of ruby installed? -[mongodb] - question=Do you already have the latest version of mongo-db installed? - path=Enter the path where you would like to install MongoDB: -[python] - question=Do you already have the latest version of python installed? -[error] - xp=Sadly we can't support Windows XP... Please upgrade your OS! - os=Machine OS cannot be determined... - osreport=Report your OS to the developers @ CodeCombat.com... - nocleaning=... Cleaning up has been disabled... Terminating Script! - git_app_path=The path to your git application is incorrect, please try again... - invalid_path=The path you entered is invalid, please try again... \ No newline at end of file + + + + Nederlands + Vanaf nu geven we onze feedback in het Nederlands! + + + + -bit computer gedetecteerd. + Het besturingsysteem + is gedetecteerd. + Wij ondersteunen Windows XP niet, installatie geanulleerd. + + + Heb je alle benodige software al geinstalleerd? + We raden aan dat je negatief antwoord indien je niet zeker bent. + De installatie van software wordt geanulleerd... + CodeCombat kon niet worden ontwikkeld zonder third-party software. + Dat is waarom je deze software moet installeren, + zodat je je kan beginnen met het bijdragen tot onze gemeenschap. + Annuleer de installatie als je de applicatie al hebt. + Zorg er zeker voor dat je de optie selecteert dat de applicatie aan je Windows Path toevoegt, als de optie beschikbaar is. + Heb je al de laatste versie van + geinstalleerd? + is aan het downloaden... + is aan het installeren... + is aan het uitpakken... + is aan het opkuisen... + Geef het volledige pad op, waar mongodb mag worden geinstalleerd + + + + + CodeCombat is opensource, zoals je waarschijnlijk wel al weet. + Je kan al onze sourcecode vinden op Github. + Indien je wil, kan je de Git setup manueel doen. + Maar wij raden aan dat je ons dit automatisch laat afhandellen. + + + Wil je de lokale Git setup manueel doen? + Zorg er zeker voor dat jouw git repository correct is. + Sluit dit venster niet alsjeblieft. + Wanneer je klaar bent, druk dan eender welke toets om verder te gaan... + + + Geef alsjeblieft het volledige pad van je CodeCombat git repository: + Geef alsjeblieft het volledige pad waar je de CodeCombat Ontwikkelings omgeving will installeren + Deze installatie maakt gebruik van Git Bash. + Git bash is normaal geinstalleerd in 'C:\Program Files (x86)\Git'. + Git bash is normaal geinstalleerd in 'C:\Program Files\Git'. + Geef alsjeblieft het volledige pad op van Git Bash of druk gewoon op enter indien je het pad niet gewijzigd heeft + Wil je het git project downloaden via ssh? + + + + Installing bower, brunch, nodemon and sendwithus... + Installing bower packages... + Installing sass... + Installing npm... + Starting brunch.... + Setting up a MongoDB database for you... + Downloading the last version of the CodeCombat database... + + + + Dat pad bestaat al, ben je zeker dat je het wil overschrijven? + Dat pad bestaat niet, probeer alsjeblieft opnieuw... + + + De installatie van de CodeCombat-Ontwikkelings omgeving was succesvol. + Alvast bedankt voor al je werk en tot binnenkort. + Wil je de LEESMIJ lezen voor meer informatie? + + + Vanaf nu kan je de ontwikkelings omgeving opstarten + met het gemak van een enkele muisklik. + 1) Dubbelklik op + en laat de omgeving opstarten. + 2) Nu kan je 'localhost:3000' openen in je browser naar voorkeur. + Dat is het, je bent nu klaar om te starten met je werk aan CodeCombat. + + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/localisation/zh-HANS.coco b/scripts/windows/coco-dev-setup/batch/localisation/zh-HANS.coco new file mode 100644 index 000000000..18fb9c839 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/localisation/zh-HANS.coco @@ -0,0 +1,82 @@ + + + + 简体中文 + From now on we'll send our feedback in English! + + + + -bit computer detected. + The operating system + was detected. + We don't support Windows XP, installation cancelled. + + + Have you already installed all the software needed for CodeCombat? + We recommand that you reply negative in case you're not sure. + Skipping the installation of the software... + CodeCombat couldn't be developed without third-party software. + That's why you'll need to install this software, + in order to start contributing to our community. + Cancel the installation if you already have the application. + Make sure to select the option that adds the application to your Windows Path, if the option is available. + Do you already have the latest version of + installed? + is downloading... + is installing... + is unzipping... + is cleaning... + Please define the full path where mongodb should be installed + + + + + CodeCombat is opensource, like you already know. + All our sourcecode can be found online at Github. + You can choose to do the entire Git setup yourself. + However we recommend that you instead let us handle it instead. + + + Do you want to do the Local Git setup manually yourself? + Make sure you have correctly setup your repository before processing. + Do not close this window please. + When you're ready, press any key to continue... + + + Please give the full path of your CodeCombat git repository: + Please enter the full path where you want to install your CodeCombat environment + This installation requires Git Bash. + Git bash is by default installed at 'C:\Program Files (x86)\Git'. + Git bash is by default installed at 'C:\Program Files\Git'. + Please enter the full path where git bash is installed or just press enter if it's in the default location + Do you want to checkout the repository via ssh? + + + + Installing bower, brunch, nodemon and sendwithus... + Installing bower packages... + Installing sass... + Installing npm... + Starting brunch.... + Setting up a MongoDB database for you... + Downloading the last version of the CodeCombat database... + + + + That path already exists, are you sure you want to overwrite it? + That path doesn't exist. Please try again... + + + The setup of the CodeCombat Dev. Environment was succesfull. + Thank you already for your contribution and see you soon. + Do you want to read the README for more information? + + + From now on you can start the dev. environment at + the touch of a single mouse click. + 1) Just double click + and let the environment start up. + 2) Now just open 'localhost:3000' in your prefered browser. + That's it, you're now ready to start working on CodeCombat! + + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/localisation/zh-HANT.coco b/scripts/windows/coco-dev-setup/batch/localisation/zh-HANT.coco new file mode 100644 index 000000000..3ef2d22d7 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/localisation/zh-HANT.coco @@ -0,0 +1,82 @@ + + + + 繁体中文 + From now on we'll send our feedback in English! + + + + -bit computer detected. + The operating system + was detected. + We don't support Windows XP, installation cancelled. + + + Have you already installed all the software needed for CodeCombat? + We recommand that you reply negative in case you're not sure. + Skipping the installation of the software... + CodeCombat couldn't be developed without third-party software. + That's why you'll need to install this software, + in order to start contributing to our community. + Cancel the installation if you already have the application. + Make sure to select the option that adds the application to your Windows Path, if the option is available. + Do you already have the latest version of + installed? + is downloading... + is installing... + is unzipping... + is cleaning... + Please define the full path where mongodb should be installed + + + + + CodeCombat is opensource, like you already know. + All our sourcecode can be found online at Github. + You can choose to do the entire Git setup yourself. + However we recommend that you instead let us handle it instead. + + + Do you want to do the Local Git setup manually yourself? + Make sure you have correctly setup your repository before processing. + Do not close this window please. + When you're ready, press any key to continue... + + + Please give the full path of your CodeCombat git repository: + Please enter the full path where you want to install your CodeCombat environment + This installation requires Git Bash. + Git bash is by default installed at 'C:\Program Files (x86)\Git'. + Git bash is by default installed at 'C:\Program Files\Git'. + Please enter the full path where git bash is installed or just press enter if it's in the default location + Do you want to checkout the repository via ssh? + + + + Installing bower, brunch, nodemon and sendwithus... + Installing bower packages... + Installing sass... + Installing npm... + Starting brunch.... + Setting up a MongoDB database for you... + Downloading the last version of the CodeCombat database... + + + + That path already exists, are you sure you want to overwrite it? + That path doesn't exist. Please try again... + + + The setup of the CodeCombat Dev. Environment was succesfull. + Thank you already for your contribution and see you soon. + Do you want to read the README for more information? + + + From now on you can start the dev. environment at + the touch of a single mouse click. + 1) Just double click + and let the environment start up. + 2) Now just open 'localhost:3000' in your prefered browser. + That's it, you're now ready to start working on CodeCombat! + + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/localisation/zh.coco b/scripts/windows/coco-dev-setup/batch/localisation/zh.coco new file mode 100644 index 000000000..6cada7324 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/localisation/zh.coco @@ -0,0 +1,82 @@ + + + + 中文 + From now on we'll send our feedback in English! + + + + -bit computer detected. + The operating system + was detected. + We don't support Windows XP, installation cancelled. + + + Have you already installed all the software needed for CodeCombat? + We recommand that you reply negative in case you're not sure. + Skipping the installation of the software... + CodeCombat couldn't be developed without third-party software. + That's why you'll need to install this software, + in order to start contributing to our community. + Cancel the installation if you already have the application. + Make sure to select the option that adds the application to your Windows Path, if the option is available. + Do you already have the latest version of + installed? + is downloading... + is installing... + is unzipping... + is cleaning... + Please define the full path where mongodb should be installed + + + + + CodeCombat is opensource, like you already know. + All our sourcecode can be found online at Github. + You can choose to do the entire Git setup yourself. + However we recommend that you instead let us handle it instead. + + + Do you want to do the Local Git setup manually yourself? + Make sure you have correctly setup your repository before processing. + Do not close this window please. + When you're ready, press any key to continue... + + + Please give the full path of your CodeCombat git repository: + Please enter the full path where you want to install your CodeCombat environment + This installation requires Git Bash. + Git bash is by default installed at 'C:\Program Files (x86)\Git'. + Git bash is by default installed at 'C:\Program Files\Git'. + Please enter the full path where git bash is installed or just press enter if it's in the default location + Do you want to checkout the repository via ssh? + + + + Installing bower, brunch, nodemon and sendwithus... + Installing bower packages... + Installing sass... + Installing npm... + Starting brunch.... + Setting up a MongoDB database for you... + Downloading the last version of the CodeCombat database... + + + + That path already exists, are you sure you want to overwrite it? + That path doesn't exist. Please try again... + + + The setup of the CodeCombat Dev. Environment was succesfull. + Thank you already for your contribution and see you soon. + Do you want to read the README for more information? + + + From now on you can start the dev. environment at + the touch of a single mouse click. + 1) Just double click + and let the environment start up. + 2) Now just open 'localhost:3000' in your prefered browser. + That's it, you're now ready to start working on CodeCombat! + + \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/print_header.bat b/scripts/windows/coco-dev-setup/batch/print_header.bat deleted file mode 100755 index cf538540d..000000000 --- a/scripts/windows/coco-dev-setup/batch/print_header.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -setlocal EnableDelayedExpansion -print_file config/header.coco -endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/print_info.bat b/scripts/windows/coco-dev-setup/batch/print_info.bat deleted file mode 100755 index 76a3a6117..000000000 --- a/scripts/windows/coco-dev-setup/batch/print_info.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -setlocal EnableDelayedExpansion -print_file config/info.coco -endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/print_license.bat b/scripts/windows/coco-dev-setup/batch/print_license.bat deleted file mode 100755 index 37ab5110f..000000000 --- a/scripts/windows/coco-dev-setup/batch/print_license.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -setlocal EnableDelayedExpansion -print_file config/license.coco -endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/print_tips.bat b/scripts/windows/coco-dev-setup/batch/print_tips.bat deleted file mode 100755 index 1be9a8691..000000000 --- a/scripts/windows/coco-dev-setup/batch/print_tips.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -setlocal EnableDelayedExpansion -print_file config/tips.coco -endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/ask_question.bat b/scripts/windows/coco-dev-setup/batch/scripts/ask_question.bat new file mode 100644 index 000000000..6633ba71d --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/ask_question.bat @@ -0,0 +1,5 @@ +set /p res="%1 [Y/N]: " +set "result=unset" +if "%res%"=="Y" (set "result=true") +if "%res%"=="y" (set "result=true") +if "%result%"=="unset" (set "result=false") \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/download_and_install_app.bat b/scripts/windows/coco-dev-setup/batch/scripts/download_and_install_app.bat new file mode 100644 index 000000000..a81c90363 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/download_and_install_app.bat @@ -0,0 +1,68 @@ +set "temp_directory=c:\.coco\" +set "curl_app=..\utilities\curl.exe" +set "zu_app=..\utilities\7za.exe" + +if NOT exist "%temp_directory%" ( + md %temp_directory% +) + +call get_local_text install_process_prefix install process prefix +call get_local_text install_process_sufix install process sufix + +call ask_question "!install_process_prefix! %1 !install_process_sufix!" + +if "%result%"=="true" ( + goto:exit_installation +) + +call print_dashed_seperator + +call get_extension %2 download_extension +call get_local_text install_process_downloading install process downloading +echo %1 !install_process_downloading! +set "install_file=!temp_directory!%1.!download_extension!" +%curl_app% -k %2 -o !install_file! + +if "%download_extension%"=="zip" ( + set "package_path=!temp_directory!%1\" + + %zu_app% x !install_file! -o!package_path! -y + + for /f "delims=" %%a in ('dir !package_path! /on /ad /b') do @set mongodb_original_directory=%%a + + call print_dashed_seperator + goto:get_mongodb_path + + :get_mongodb_path + call get_local_text install_process_mongodbpath install process mongodbpath + set /p "mongodb_path=!install_process_mongodbpath!: " + if exist "%mongodb_path%" ( + call get_local_text error_path error path + call ask_question "!error_path!" + if "!result!"=="false" ( + call print_dashed_seperator + goto:get_mongodb_path + ) else ( + rmdir /s /q %mongodb_path% + ) + ) + md %mongodb_path% + + %systemroot%\System32\xcopy !package_path!!mongodb_original_directory! !mongodb_path! /r /h /s /e /y + goto:clean_up +) + +call get_local_text install_process_installing install process installing +echo %1 !install_process_installing! +echo. +start /WAIT !install_file! +goto:clean_up + +:clean_up + call get_local_text install_process_cleaning install process cleaning + echo %1 !install_process_cleaning! + rmdir /s /q "!temp_directory!" + goto:exit_installation + +:exit_installation + call print_dashed_seperator \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/download_and_install_applications.bat b/scripts/windows/coco-dev-setup/batch/scripts/download_and_install_applications.bat new file mode 100644 index 000000000..defdc10f8 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/download_and_install_applications.bat @@ -0,0 +1,53 @@ +call print_install_header +call print_dashed_seperator + +call get_local_text install_process_sks install process sks +echo !install_process_sks! + +call get_local_text install_process_skq install process skq +call ask_question "!install_process_skq!" + +call print_dashed_seperator + +if "%result%"=="true" ( + call get_local_text install_process_skc install process skc + echo !install_process_skc! + call print_dashed_seperator + goto:exit_setup +) + +call get_system_information +call print_dashed_seperator + +if %system_info_os% == XP ( + call get_local_text install_system_xp install system xp + echo !install_system_xp! + call print_exit +) + +call get_variables ..\\config\\downloads.coco downloads download_names downloads_count 0 general general +call get_variables ..\\config\\downloads.coco downloads download_names downloads_count 2 %system_info_os% b%system_info_bit% +call get_variables ..\\config\\downloads.coco downloads download_names downloads_count 3 general b%system_info_bit% + +call get_local_text install_process_s1 install process s1 +call get_local_text install_process_s2 install process s2 +call get_local_text install_process_s3 install process s3 +call get_local_text install_process_s4 install process s4 +call get_local_text install_process_winpath install process winpath + +echo !install_process_s1! +echo !install_process_s2! +echo !install_process_s3! +echo !install_process_s4! +echo. +echo !install_process_winpath! + +call print_dashed_seperator + +for /l %%i in (1, 1, !downloads_count!) do ( + call download_and_install_app !download_names[%%i]! !downloads[%%i]! +) + +goto:exit_setup + +:exit_setup \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_array.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_array.bat new file mode 100644 index 000000000..a11f2375e --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_array.bat @@ -0,0 +1,6 @@ +set "file=%1" +set /a %3=0 +for /F "usebackq delims=" %%a in ("%file%") do ( + set /A %3+=1 + call set %2[%%%3%%]=%%a +) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_config.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_config.bat new file mode 100644 index 000000000..c335263d6 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_config.bat @@ -0,0 +1,3 @@ +for /F "delims=" %%F in ('call run_script .\\get_var.ps1 ..\\config\\config.coco %1') do ( + set "%1=%%F" +) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_download.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_download.bat new file mode 100644 index 000000000..1b81e6a0c --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_download.bat @@ -0,0 +1,3 @@ +for /F "delims=" %%F in ('call run_script .\\get_var.ps1 ..\\config\\downloads.coco %2 %3 %4 %5') do ( + set "%1=%%F" +) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_extension.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_extension.bat new file mode 100644 index 000000000..71b381ebb --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_extension.bat @@ -0,0 +1,3 @@ +for /F "delims=" %%F in ('call run_script .\\get_extension.ps1 %1') do ( + set "%2=%%F" +) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_extension.ps1 b/scripts/windows/coco-dev-setup/batch/scripts/get_extension.ps1 new file mode 100644 index 000000000..631132f74 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_extension.ps1 @@ -0,0 +1,18 @@ +$url = ($args[0].ToLower()) + +if($url.Contains("zip")) +{ + Write-Host "zip" +} +elseif($url.Contains("exe")) +{ + Write-Host "exe" +} +elseif($url.Contains("msi")) +{ + Write-Host "msi" +} +elseif($url.Contains("tar.gz")) +{ + Write-Host "tar.gz" +} \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_language.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_language.bat new file mode 100644 index 000000000..ce3446b5e --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_language.bat @@ -0,0 +1,36 @@ +echo Some feedback is sent in your system's language +echo but most feedback is sent and localised by us. +echo Here is a list of languages: +call print_dashed_seperator + +call get_array ..\\localisation\\languages.coco languages language_count +for /l %%i in (1,1,%language_count%) do ( + call get_text !languages[%%i]! global_native global native + echo [%%i] !global_native! +) + +goto:get_localisation_id + +:get_localisation_id + call print_dashed_seperator + set /p "localisation_id=Enter the language ID of your preference and press : " + goto:validation_check + +:validation_check + set "localisation_is_false=" + set /a local_id = %localisation_id% + if !local_id! EQU 0 set localisation_is_false=1 + if !local_id! LSS 1 set localisation_is_false=1 + if !local_id! GTR !language_count! set localisation_is_false=1 + if defined localisation_is_false ( + echo The id you entered is invalid, please try again... + goto:get_localisation_id + ) else ( + set language_id=!languages[%local_id%]! + call get_text !language_id! global_native global native + call print_dashed_seperator + echo You have choosen !global_native! as your language. + call get_text !language_id! global_intro global intro + echo !global_intro! + call print_seperator + ) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_local_text.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_local_text.bat new file mode 100644 index 000000000..9a54a78c5 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_local_text.bat @@ -0,0 +1 @@ +call get_text !language_id! %1 %2 %3 %4 %5 \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_path_safe.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_path_safe.bat new file mode 100644 index 000000000..c76707670 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_path_safe.bat @@ -0,0 +1,10 @@ +goto:get_safe_path + +:get_safe_path + set /p "tmp_safe_path=%1" + if not exist "%tmp_safe_path%" ( + call get_local_text error-exist + echo !error_exist! + call print_dashed_seperator + goto:get_safe_path + ) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_system_information.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_system_information.bat new file mode 100644 index 000000000..6921cb56a --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_system_information.bat @@ -0,0 +1,31 @@ +if exist "%PROGRAMFILES(X86)%" ( + call:set_bit 64 +) else ( + call:set_bit 32 +) + +for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j +if "%version%" == "5.2" ( call:set_os XP ) +if "%version%" == "6.0" ( call:set_os Vista ) +if "%version%" == "6.1" ( call:set_os Win7 ) +:: we handle win8.0 as win7 +if "%version%" == "6.2" ( call:set_os Win7 ) +:: we handle win8.1 as win7 +if "%version%" == "6.3" ( call:set_os Win7 ) + +goto:end + +:set_bit + call get_local_text install_system_bit install system bit + set system_info_bit=%~1 + echo %system_info_bit%%install_system_bit% +goto:eof + +:set_os + set system_info_os=%~1 + call get_local_text install_system_prefix install system prefix + call get_local_text install_system_sufix install system sufix + echo %install_system_prefix% %system_info_os% %install_system_sufix% +goto:eof + +:end diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_text.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_text.bat new file mode 100644 index 000000000..9bd888e0e --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_text.bat @@ -0,0 +1,3 @@ +for /F "delims=" %%F in ('call run_script .\\get_var.ps1 ..\\localisation\\%1.coco %3 %4 %5 %6') do ( + set "%2=%%F" +) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_var.ps1 b/scripts/windows/coco-dev-setup/batch/scripts/get_var.ps1 new file mode 100644 index 000000000..5e63443fb --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_var.ps1 @@ -0,0 +1,27 @@ +$xml_file = [xml](get-content $args[0]) +if($args.count -eq 2) +{ + $var_output = ($xml_file.variables.($args[1])) +} +elseif($args.count -eq 3) +{ + $var_output = ($xml_file.variables.($args[1]).($args[2])) +} +elseif($args.count -eq 4) +{ + $var_output = ($xml_file.variables.($args[1]).($args[2]).($args[3])) +} +elseif($args.count -eq 5) +{ + $var_output = ($xml_file.variables.($args[1]).($args[2]).($args[3]).($args[4])) +} +elseif($args.count -eq 6) +{ + $var_output = ($xml_file.variables.($args[1]).($args[2]).($args[3]).($args[4]).($args[5])) +} +elseif($args.count -eq 7) +{ + $var_output = ($xml_file.variables.($args[1]).($args[2]).($args[3]).($args[4]).($args[5]).($args[6])) +} + +Write-Host "$var_output" \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_variables.bat b/scripts/windows/coco-dev-setup/batch/scripts/get_variables.bat new file mode 100644 index 000000000..f46c187bc --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_variables.bat @@ -0,0 +1,4 @@ +set count=0 +for /F "delims=" %%F in ('call run_script.bat .\\get_variables.ps1 %*') do ( + %%F +) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/get_variables.ps1 b/scripts/windows/coco-dev-setup/batch/scripts/get_variables.ps1 new file mode 100644 index 000000000..38fa11b7c --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/get_variables.ps1 @@ -0,0 +1,33 @@ +$xml_file = [xml](get-content $args[0]) +$arr_value = $args[1] +$arr_name = $args[2] +$arr_counter = $args[3] +$counter = $args[4] + +if($args.count -eq 6) +{ + $root = $xml_file.variables.($args[5]) +} +elseif($args.count -eq 7) +{ + $root = $xml_file.variables.($args[5]).($args[6]) +} +elseif($args.count -eq 8) +{ + $root = $xml_file.variables.($args[5]).($args[6]).($args[7]) +} +elseif($args.count -eq 9) +{ + $nodes = $xml_file.variables.($args[5]).($args[6]).($args[7]).($args[8]) +} + +foreach ($node in $root.ChildNodes) +{ + $counter += 1 + $value = $node.InnerText + $name = $node.Name + Write-Host set "$arr_value[$counter]=$value" + Write-Host set "$arr_name[$counter]=$name" +} + +Write-Host set "$arr_counter=$counter" \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/github_setup.bat b/scripts/windows/coco-dev-setup/batch/scripts/github_setup.bat new file mode 100644 index 000000000..deb1334cc --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/github_setup.bat @@ -0,0 +1,115 @@ +call print_github_header +call print_dashed_seperator + +call get_local_text github_intro_opensource github intro opensource +call get_local_text github_intro_online github intro online +call get_local_text github_intro_manual github intro manual +call get_local_text github_intro_norec github intro norec + +echo !github_intro_opensource! +echo !github_intro_online! +echo !github_intro_manual! +echo !github_intro_norec! + +call print_dashed_seperator + +call get_local_text github_skip_question github skip question +call ask_question "!github_skip_question!" +call print_dashed_seperator + +if "%result%"=="true" ( + call get_local_text github_skip_consequence github skip consequence + echo !github_skip_consequence! + + call get_local_text github_skip_donotclose github skip donotclose + echo !github_skip_donotclose! + + call get_local_text github_skip_wait github skip wait + set /p "github_skip_wait=!github_skip_wait!" + + call print_dashed_seperator + + call get_local_text github_process_path github process path + call get_path_safe "!github_process_path!" + set "repository_path=!tmp_safe_path!" + + goto:exit_git_setup +) + +goto:get_bash_path + +:get_bash_path + call get_local_text github_process_bashi github process bashi + echo !github_process_bashi! + + if not defined install_system_bit ( + call print_dashed_seperator + call get_system_information + call print_dashed_seperator + ) + + if "%system_info_bit%"=="64" ( + call get_local_text github_process_bashp64 github process bashp64 + echo !github_process_bashp64! + ) else ( + call get_local_text github_process_bashp32 github process bashp32 + echo !github_process_bashp32! + ) + + call get_local_text github_process_bashq github process bashq + set /p "git_bash_path=!github_process_bashq!: " + + if not defined git_bash_path ( + if "%system_info_bit%"=="64" ( + set "git_bash_path=C:\Program Files (x86)\Git" + ) else ( + set "git_bash_path=C:\Program Files\Git" + ) + goto:get_git_path + ) + + if not exist "%git_bash_path%" ( + call get_local_text error_exist error exist + echo !error_exist! + call print_dashed_seperator + goto:get_bash_path + ) else ( + goto:get_git_path + ) +goto:eof + +:get_git_path + call print_dashed_seperator + call get_local_text github_process_checkout github process checkout + set /p "repository_path=!github_process_checkout!: " + if exist !repository_path! ( + call get_local_text error_path error path + call ask_question "!error_path!" + if "!result!"=="false" ( + call print_dashed_seperator + goto:get_git_path + ) else ( + rmdir /s /q %repository_path% + goto:git_checkout + ) + ) else ( + goto:git_checkout + ) +goto:eof + +:git_checkout + md "%repository_path%" + set "repository_path=%repository_path%\coco" + + call print_dashed_seperator + set "git_app_path=%git_bash_path%\bin\git.exe" + + call get_config github_url + "%git_app_path%" clone "!github_url!" "%repository_path%" + + goto:exit_git_setup +goto:eof + +:exit_git_setup + call print_dashed_seperator +goto:eof \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/npm_and_brunch_setup.bat b/scripts/windows/coco-dev-setup/batch/scripts/npm_and_brunch_setup.bat new file mode 100644 index 000000000..c54b2d205 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/npm_and_brunch_setup.bat @@ -0,0 +1,89 @@ +call print_npm_and_brunch_header +call print_dashed_seperator + +set work_directory=%CD% + +set "curl_app=..\utilities\curl.exe" +set "zu_app=..\utilities\7za.exe" +set "keystuff=..\utilities\keystuff.exe" + +set "coco_root=!repository_path!\coco" + +goto:automatic_script + +call get_local_text npm-install +echo !npm_install! + +cd !coco_root! +start /wait cmd /c "echo !npm_install! & npm install -g bower brunch nodemon sendwithus" +cd !work_directory! + +call print_dashed_seperator +call get_local_text npm-binstall +echo !npm_binstall! + +cd "!coco_root!" +start /wait cmd /c "echo !npm_binstall! & bower install" +cd "!work_directory!" + +call print_dashed_seperator +call get_local_text npm-sass +echo !npm_sass! + +cd "!coco_root!" +start /wait cmd /c "echo !npm_sass! & gem install sass" +cd "!work_directory!" + +call print_dashed_seperator +call get_local_text npm-npm +echo !npm_npm! + +cd "!coco_root!" +start /wait cmd /c "echo !npm_npm! & npm install" +cd "!work_directory!" + +:: --- MONGODB + +:mongodb +call print_dashed_seperator +call get_local_text npm-mongodb +echo !npm_mongodb! + +set "mdb_directory=!repository_path!\cocodb" + +if exist mdb_directory ( + rmdir /s /q "!mdb_directory!" +) + +md !mdb_directory! + +call print_dashed_seperator +call get_local_text npm-db +echo !npm_db! + +call get_config database_backup + +cd !mdb_directory! + +start cmd /c "%work_directory%\%keystuff% Alt-Tab && mongod --setParameter textSearchEnabled=true --dbpath !mdb_directory!" + +%curl_app% -k !database_backup! -o dump.tar.gz + +start /wait cmd /c "%work_directory%\%keystuff% Alt-Tab && %zu_app% e dump.tar.gz && del dump.tar.gz && %zu_app% x dump.tar && del dump.tar" + +start /wait cmd /c "mongorestore dump" + +rmdir /s /q db + +:: --- AUTOMATIC SCRIPT + +::automatic_script +call print_dashed_seperator +call get_local_text npm-script +echo !npm_script! + +:: --- END + +call print_dashed_seperator + +pause \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/open_readme.bat b/scripts/windows/coco-dev-setup/batch/scripts/open_readme.bat new file mode 100644 index 000000000..484f3dd75 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/open_readme.bat @@ -0,0 +1 @@ +call open_text_file ..\\config\\readme.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/open_text_file.bat b/scripts/windows/coco-dev-setup/batch/scripts/open_text_file.bat new file mode 100644 index 000000000..6271391d8 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/open_text_file.bat @@ -0,0 +1 @@ +start notepad.exe %1 \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_dashed_seperator.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_dashed_seperator.bat new file mode 100644 index 000000000..cd9f23c7d --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_dashed_seperator.bat @@ -0,0 +1,3 @@ +echo. +echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +echo. \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_exit.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_exit.bat new file mode 100644 index 000000000..1e6a5e14f --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_exit.bat @@ -0,0 +1,2 @@ +set /p res="Press any key to exit..." +exit \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/print_file.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_file.bat old mode 100755 new mode 100644 similarity index 58% rename from scripts/windows/coco-dev-setup/batch/print_file.bat rename to scripts/windows/coco-dev-setup/batch/scripts/print_file.bat index 7857ee47d..de46b68ee --- a/scripts/windows/coco-dev-setup/batch/print_file.bat +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_file.bat @@ -1,7 +1,4 @@ -@echo off -setlocal EnableDelayedExpansion -set "file=%1" -for /f "usebackq tokens=* delims=;" %%a in ("%file%") do ( - echo.%%a -) -endlocal \ No newline at end of file +set "file=%1" +for /f "usebackq tokens=* delims=;" %%a in ("%file%") do ( + echo.%%a +) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_finished_header.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_finished_header.bat new file mode 100644 index 000000000..d7b5572c8 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_finished_header.bat @@ -0,0 +1 @@ +call print_file ..\\config\\finished_header.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_github_header.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_github_header.bat new file mode 100644 index 000000000..d5cbe3e95 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_github_header.bat @@ -0,0 +1 @@ +call print_file ..\\config\\github_header.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_header.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_header.bat new file mode 100644 index 000000000..328405e67 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_header.bat @@ -0,0 +1 @@ +call print_file ..\\config\\header.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_info.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_info.bat new file mode 100644 index 000000000..7af731410 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_info.bat @@ -0,0 +1 @@ +print_file ..\\config\\info.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_install_header.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_install_header.bat new file mode 100644 index 000000000..0d430ad8c --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_install_header.bat @@ -0,0 +1 @@ +call print_file ..\\config\\install_header.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_license.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_license.bat new file mode 100644 index 000000000..a208ca559 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_license.bat @@ -0,0 +1 @@ +print_file ..\\config\\license.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_npm_and_brunch_header.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_npm_and_brunch_header.bat new file mode 100644 index 000000000..9f9ea2164 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_npm_and_brunch_header.bat @@ -0,0 +1 @@ +call print_file ..\\config\\npm_and_brunch_header.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_seperator.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_seperator.bat new file mode 100644 index 000000000..cf145cb6d --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_seperator.bat @@ -0,0 +1,3 @@ +echo. +echo ----------------------------------------------------------------------------- +echo. \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/print_tips.bat b/scripts/windows/coco-dev-setup/batch/scripts/print_tips.bat new file mode 100644 index 000000000..c00833574 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/print_tips.bat @@ -0,0 +1 @@ +print_file ..\\config\\tips.coco \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/run_script.bat b/scripts/windows/coco-dev-setup/batch/scripts/run_script.bat new file mode 100644 index 000000000..c18af72b7 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/run_script.bat @@ -0,0 +1,2 @@ +@echo off +PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& "%*" \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/setup.bat b/scripts/windows/coco-dev-setup/batch/scripts/setup.bat new file mode 100644 index 000000000..df03a45d7 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/setup.bat @@ -0,0 +1,67 @@ +@echo off +setlocal EnableDelayedExpansion + +Color 0A +mode con: cols=79 lines=55 + +call print_header +call print_dashed_seperator + +call get_config.bat version +call get_config.bat author +call get_config.bat copyright +echo Welcome to the automated Installation of the CodeCombat Dev. Environment! +echo v%version% authored by %author% and published by %copyright%. +call print_seperator + +echo Before we start the installation, here are some tips: +call print_tips +call print_seperator + +call sign_license + +call get_language + +call download_and_install_applications + +call github_setup + +:: This will be available in v2.0 +::call npm_and_brunch_setup + +call print_finished_header +call print_dashed_seperator + +call get_local_text end_succesfull end succesfull +call get_local_text end_thankyou end thankyou +echo %end_succesfull% +echo %end_thankyou% + +call print_dashed_seperator + +call get_local_text start_s1 start s1 +call get_local_text start_s2 start s2 +call get_local_text start_s3 start s3 +call get_local_text start_s4 start s4 +call get_local_text start_s5 start s5 +call get_local_text start_s6 start s6 + +echo !start_s1! +echo !start_s2! +echo. +echo !start_s3! '!repository_path!\coco\SCOCODE.bat' +echo !start_s4! +echo !start_s5! +echo. +echo !start_s6! + +call print_dashed_seperator + +call get_local_text end_readme end readme +call ask_question "!end_readme!" + +if "%result%"=="true" ( + call open_readme +) + +endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/scripts/sign_license.bat b/scripts/windows/coco-dev-setup/batch/scripts/sign_license.bat new file mode 100644 index 000000000..e1c2c2c47 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/scripts/sign_license.bat @@ -0,0 +1,15 @@ +echo In order to continue the installation of the developers environment +echo you will have to read and agree with the following license: +call print_dashed_seperator + +call print_license +call print_dashed_seperator + +call ask_question "Have you read the license and do you agree with it?" +call print_dashed_seperator + +if "%result%"=="false" ( + echo This setup can't happen without an agreement. + echo Installation and Setup of the CodeCombat environment is cancelled. + call print_exit +) \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/setup.bat b/scripts/windows/coco-dev-setup/batch/setup.bat new file mode 100644 index 000000000..1246a77c1 --- /dev/null +++ b/scripts/windows/coco-dev-setup/batch/setup.bat @@ -0,0 +1,2 @@ +cd scripts +setup.bat \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/dev-setup-packer.bat b/scripts/windows/coco-dev-setup/dev-setup-packer.bat index 8c8d74d8a..49ba67cdf 100755 --- a/scripts/windows/coco-dev-setup/dev-setup-packer.bat +++ b/scripts/windows/coco-dev-setup/dev-setup-packer.bat @@ -5,26 +5,11 @@ setlocal EnableDelayedExpansion set "ZU-app=batch\utilities\7za.exe" set "title=coco-dev-win-setup" -call:parse_file_new "batch\config\config" cnfg n -set "sf=%cnfg[1]%" +cd batch\\scripts\\ +call get_config version +cd ..\\..\\ -%ZU-app% a "%title%-%sf%.zip" .\batch\* - - -:: ================= FUNCTIONS ========================= - -:parse_file - set "file=%~1" - for /F "usebackq delims=" %%a in ("%file%") do ( - set /A %~3+=1 - call set %~2[%%%~3%%]=%%a - ) -goto:eof - -:parse_file_new - set /A %~3=0 - call:parse_file %~1 %~2 %~3 -goto:eof +%ZU-app% a "%title%-%version%.zip" .\batch\* :: =================== EOF ============================= diff --git a/scripts/windows/coco-dev-setup/batch/recycle_bin/dev-setup.bat b/scripts/windows/coco-dev-setup/recycle_bin/dev-setup.bat old mode 100755 new mode 100644 similarity index 95% rename from scripts/windows/coco-dev-setup/batch/recycle_bin/dev-setup.bat rename to scripts/windows/coco-dev-setup/recycle_bin/dev-setup.bat index 97e7d1ee2..c7447cade --- a/scripts/windows/coco-dev-setup/batch/recycle_bin/dev-setup.bat +++ b/scripts/windows/coco-dev-setup/recycle_bin/dev-setup.bat @@ -1,533 +1,533 @@ -@echo off -setlocal EnableDelayedExpansion - -Color 0A - -mode con: cols=78 lines=60 - -:: Global Variables -set "temp-dir=C:\Coco-Temp" -set install-log=%temp-dir%\coco-dev-install-log.txt - -:: set correct curl app -IF EXIST "%PROGRAMFILES(X86)%" ( - (set "curl-app=utilities\curl\64bit\curl.exe") -) ELSE ( - set "curl-app=utilities\curl\32bit\curl.exe" -) - -set "ZU-app=utilities\7za.exe" - -:: BUGS: - :: + DEBUG ALL STEPS UNTILL NOW DONE - - -:: TODO: -:: + Write code to install vs if it's not yet installed on users pc - -:: + Configuraton and installation checklist: -:: 1) cd codecombat -:: 2) npm install -g bower brunch nodemon sendwithus -:: 3) bower install -:: 4) gem install sass -:: 5) npm install -:: 6) brunch -w -:: Extra... @ Fail run npm install - -:: + Copy the automated dev batch file to root folder -:: => Let user define mongo-db directory -:: + Start the dev environment - -:: Create The Temporary Directory -IF EXIST %temp-dir% rmdir %temp-dir% /s /q -mkdir %temp-dir% - -:: Create Log File -copy /y nul %install-log% > nul - -call:parse_aa_and_draw "config\header" -call:draw_dss - -call:parse_file_new "config\config" cnfg n - -call:log "Welcome to the automated Installation of the CodeCombat Dev. Environment!" -call:log_sse "v%%cnfg[1]%% authored by %%cnfg[2]%% and published by %%cnfg[3]%%." - -:: Language Agreement Stuff - -call:log "In order to continue the installation of the developers environment" -call:log "you will have to read and agree with the following license: -call:draw_dss -echo. -call:parse_aa_and_draw "license.txt" -echo. -call:draw_dss -call:strict_user_yn_question "Have you read the license and do you agree with it?" - -if "%res%"=="false" ( - call:log "Sorry to hear that, have a good day..." - call:log_sse "Installation and Setup of the CodeCombat environment is cancelled." - GOTO:END -) - -:: Tips -call:log "Before we start the installation, here are some tips:" -echo. - -call:parse_aa_and_draw "config\tips" - -call:draw_ss - -:: Read Language Index -call:parse_file_new "localisation\languages" lang lang_c - -:: Read Download URLs -call:parse_file_new "config\downloads" downloads n -call:parse_file_new "config\downloads_32" downloads_32 n -call:parse_file_new "config\downloads_64" downloads_64 n -call:parse_file_new "config\downloads_vista_32" downloads_vista_32 n -call:parse_file_new "config\downloads_vista_64" downloads_vista_64 n -call:parse_file_new "config\downloads_7_32" downloads_7_32 n -call:parse_file_new "config\downloads_7_64" downloads_7_64 n - -:: Parse all Localisation Files -for /L %%i in (1,1,%lang_c%) do ( - call:parse_file "localisation\%%lang[%%i]%%" languages languages_c -) - -set /A "wc = %languages_c% / %lang_c%" - -:: Start install with language question (Localisation) -call:log "Which language do you prefer?" - -set /A c=0 -for /L %%i in (1,%wc%,%languages_c%) do ( - set /A "n = %%i - 1" - call:log " [%%c%%] %%languages[%%i]%%" - set /A c+=1 -) - -set "lang_id=-1" -call:user_enter_language_id -goto:user_pick_language - -:user_enter_language_id - set /p lang_id= "Enter the language ID and press : " -goto:eof - -:user_pick_language - set res=false - if %lang_id% LSS 0 set res=true - if %lang_id% GEQ %lang_c% set res=true - if "%res%"=="true" ( - call:log "Invalid id! Please enter a correct id from the numbers listed above..." - call:draw_dss - call:user_enter_language_id - goto:user_pick_language - ) - -call:get_lw word 0 -call:log_ds "You choose '%word%', from now on all feedback will be logged in it." - -call:log_lw 1 -call:log_lw_sse 2 - -:: downloads for all version... - -:: [TODO] The choice between Cygwin && Git ?! Is => HAVE EXTERNAL GIT APPLICATION LIST!!! - -call:log_lw_sse 3 - -call:log_lw 6 -call:log_lw 7 -call:log_lw 8 -call:install_software_o "git" "%%downloads[1]%%" exe 9 -call:draw_dss -call:get_lw word 11 - -:: [TODO] Add downloads for windows visual studio ?! - -call:user_set_git_path - -:user_set_git_path_fail - if not exist "%git_exe_path%" ( - call:log_lw 27 - call:draw_dss - call:user_set_git_path - ) - :: architecture specific downloads... - IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT) -goto:eof - -:user_set_git_path - set /p git_exe_path="%word%: " - call:user_set_git_path_fail -goto:eof - -:go_to_platform - call:log_ds "Windows %~1 detected..." - GOTO %~2 -goto:eof - -:64BIT - call:log_ds "64-bit computer detected..." - - call:install_software_o "node-js" "%%downloads_64[1]%%" msi 12 - call:draw_dss - - call:get_path_from_user 41 42 - set "node_js_path=%user_tmp_path%" - Call:draw_dss - - call:install_software_o "ruby" "%%downloads_64[2]%%" exe 13 - call:draw_dss - call:install_software_o "python" "%%downloads_64[3]%%" msi 26 - - :: Some installations require specific windows versions - for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j - if "%version%" == "5.2" ( call:go_to_platform "XP" ver_XP_64 ) - if "%version%" == "6.0" ( call:go_to_platform "Vista" ver_Vista_64 ) - if "%version%" == "6.1" ( call:go_to_platform "7" ver_Win7_8_64 ) - if "%version%" == "6.2" ( call:go_to_platform "8.0" ver_Win7_8_64 ) - if "%version%" == "6.3" ( call:go_to_platform "8.1" ver_Win7_8_64 ) - GOTO warn_and_exit -GOTO END - -:32BIT - call:log_ds "32-bit computer detected..." - - call:install_software_o "node-js" "%%downloads_32[1]%%" msi 12 - call:draw_dss - - call:get_path_from_user 41 42 - set "node_js_path=%user_tmp_path%" - Call:draw_dss - - call:install_software_o "ruby" "%%downloads_32[2]%%" exe 13 - call:draw_dss - call:install_software_o "python" "%%downloads_32[3]%%" msi 26 - - :: Some installations require specific windows versions - for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j - if "%version%" == "5.2" ( call:go_to_platform "XP" ver_XP_32 ) - if "%version%" == "6.0" ( call:go_to_platform "Vista" ver_Vista_32 ) - if "%version%" == "6.1" ( call:go_to_platform "7" ver_Win7_8_32 ) - if "%version%" == "6.2" ( call:go_to_platform "8.0" ver_Win7_8_32 ) - if "%version%" == "6.3" ( call:go_to_platform "8.1" ver_Win7_8_32 ) - GOTO warn_and_exit -GOTO END - -:ver_Win7_8_32 - call:install_packed_software_o "mongo-db" "%%downloads_7_32[1]%%" 25 14 - set "mong-db-path = %packed_software_path%" -goto git_rep_checkout - -:ver_Vista_32 - call:install_packed_software_o "mongo-db" "%%downloads_vista_32[1]%%" 25 14 - set "mong-db-path = %packed_software_path%" -goto git_rep_checkout - -:ver_XP_32 - call:log_lw_ds 15 -goto END - -:ver_Win7_8_64 - call:install_packed_software_o "mongo-db" "%%downloads_7_64[1]%%" 25 14 - set "mong-db-path = %packed_software_path%" -goto git_rep_checkout - -:ver_Vista_64 - call:install_packed_software_o "mongo-db" "%%downloads_vista_64[1]%%" 25 14 - set "mong-db-path = %packed_software_path%" -goto git_rep_checkout - -:ver_XP_64 - call:log_lw_ds 15 -goto END - -:git_rep_checkout - call:log_lw_ss 16 - call:log_lw_sse 17 - - set "PATH=%PATH%;%git_exe_path%\bin;%git_exe_path%\cmd" /M - - call:log_lw 36 - call:log_lw 37 - call:log_lw 38 - - call:draw_dss - - call:get_lw word 39 - set /p git_username="%word% " - - call:draw_dss - - call:get_empty_path_from_user 32 - set "git_repository_path=%user_tmp_path%" - -goto:git_rep_checkout_auto - -:git_rep_checkout_auto - git clone https://github.com/%git_username%/codecombat.git "%git_repository_path%" -goto:git_repo_configuration - -:git_repo_configuration - call:log_lw_ss 35 - call:log_lw_sse 36 - - SET "PATH=%PATH%;%node_js_path%" /M - setx -m git "%git_exe_path%\bin" - - call:log_lw 40 - start cmd /k "npm install -g bower brunch nodemon sendwithus & exit" - -goto report_ok - -:report_ok - call:log_lw 18 - call:log_lw_sse 19 - - :: Open README file - call:open_readme - -goto clean_up - -:open_readme - call:open_txt_file "config/info" -goto:eof - -:warn_and_exit - call:log_lw_ss 20 - call:log_lw_sse 21 -goto error_report - -:error_report - call:log_lw_ds 22 -goto END - -:clean_up - call:log_lw_sse 23 - rmdir %temp-dir% /s /q -goto END - -:: ============================ INSTALL SOFTWARE FUNCTIONS ====================== - -:download_software - call:get_lw word 4 - call:log "%word% %~1..." - %curl-app% -sS -k %~2 -o %temp-dir%\%~1-setup.%~3 -goto:eof - -:install_software - call:download_software %~1 %~2 %~3 - call:get_lw word 5 - call:log "%word% %~1..." - START /WAIT %temp-dir%\%~1-setup.%~3 -goto:eof - -:install_software_o - call:get_lw word %~4 - call:user_yn_question "%word%" - if "%res%"=="true" ( - call:install_software %~1 %~2 %~3 - ) else ( - call:log_lw 10 - ) -goto:eof - -:install_packed_software - call:download_software %~1 %~2 zip - - call:draw_dss - - call:get_lw word %~3 - - set /p packed_software_path="%word% " - - :: remove chosen directory of user if it already exists (to prevent a window from popping up) - IF EXIST %packed_software_path% rmdir %packed_software_path% /s /q - - %ZU-app% x %temp-dir%\%~1-setup.zip -o%packed_software_path% - - call:draw_dss - - for /f "delims=" %%a in ('dir "%packed_software_path%\" /on /ad /b') do @set temp_dir=%%a - for /f "delims=" %%a in ('dir "%packed_software_path%\%temp_dir%\" /on /ad /b') do ( - xcopy %packed_software_path%\%temp_dir% %packed_software_path%\ /S /E - ) - - call:draw_dss - rmdir %packed_software_path%\%temp_dir%\ /s /q -goto:eof - -:user_yn_question - set /p result="%~1 [Y/N]: " - call:draw_dss - set "res=false" - if "%result%"=="N" (set "res=true") - if "%result%"=="n" (set "res=true") -goto:eof - -:strict_user_yn_question - set /p result="%~1 [Y/N]: " - call:draw_dss - set "res=unset" - if "%result%"=="N" (set "res=false") - if "%result%"=="n" (set "res=false") - if "%result%"=="Y" (set "res=true") - if "%result%"=="y" (set "res=true") - - if "%res%"=="unset" ( - call:log "Please answer the question with either Y or N..." - call:draw_dss - call:strict_user_yn_question "%~1" - ) -goto:eof - -:install_packed_software_o - call:get_lw word %~4 - call:user_yn_question "%word%" - if "%res%"=="true" ( - call:install_packed_software %~1 %~2 %~3 - ) else ( - call:log_lw 10 - ) -goto:eof - -:: ===================== USER - INTERACTION - FUNCTIONS ======================== - -:get_path_from_user - call:get_lw word %~1 - set /p user_tmp_path="%word% " - if not exist "%user_tmp_path%" ( - call:log_lw 43 - call:draw_dss - call:get_path_from_user %~1 %~2 - ) -goto:eof - -:get_empty_path_from_user - call:get_lw word %~1 - set /p user_tmp_path="%word% " - if exist "%user_tmp_path%" ( - call:log_lw 33 - call:draw_dss - call:get_path_from_user %~1 - ) -goto:eof - -:: ============================== FUNCTIONS ==================================== - -:log - echo %~1 - echo %~1 >> %install-log% -goto:eof - -:draw_ss - echo. - call:log "-----------------------------------------------------------------------------" - echo. -goto:eof - -:draw_dss - echo. - call:log "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" - echo. -goto:eof - -:draw_seperator - echo. - echo + + + + + + + + - echo. -goto:eof - -:log_ss - call:draw_ss - call:log "%~1" -goto:eof - -:log_sse - call:log "%~1" - call:draw_ss -goto:eof - -:log_ds - call:log_ss "%~1" - call:draw_ss -goto:eof - -:: ============================== IO FUNCTIONS ==================================== - -:open_txt_file - start "" notepad.exe %~1 -goto:eof - -:parse_aa_and_draw - set "file=%~1" - for /f "usebackq tokens=* delims=;" %%a in ("%file%") do ( - echo.%%a - ) -goto:eof - -:parse_file - set "file=%~1" - for /F "usebackq delims=" %%a in ("%file%") do ( - set /A %~3+=1 - call set %~2[%%%~3%%]=%%a - ) -goto:eof - -:parse_file_new - set /A %~3=0 - call:parse_file %~1 %~2 %~3 -goto:eof - -:: ============================== LOCALISATION FUNCTIONS ================ - -:get_lw - call:get_lw_id %~1 %lang_id% %~2 -goto:eof - -:get_lw_id - set /A count = %~2 * %wc% + %~3 + 1 - set "%~1=!languages[%count%]!" -goto:eof - -:log_lw - call:get_lw str %~1 - call:log "%str%" -goto:eof - -:log_lw_prfx - call:get_lw str %~1 - call:log "%~2%str%" -goto:eof - -:log_lw_ss - call:get_lw str %~1 - call:log_ss "%str%" -goto:eof - -:log_lw_ds - call:get_lw str %~1 - call:log_ds "%str%" -goto:eof - -:log_lw_sse - call:get_lw str %~1 - call:log_sse "%str%" -goto:eof - -:: ============================== WINDOWS FUNCTIONS ====================== - -:set_env_var - setx -m %~1 %~2 -goto:eof - -:: ============================== EOF ==================================== - -:END - exit -goto:eof - +@echo off +setlocal EnableDelayedExpansion + +Color 0A + +mode con: cols=78 lines=60 + +:: Global Variables +set "temp-dir=C:\Coco-Temp" +set install-log=%temp-dir%\coco-dev-install-log.txt + +:: set correct curl app +IF EXIST "%PROGRAMFILES(X86)%" ( + (set "curl-app=utilities\curl\64bit\curl.exe") +) ELSE ( + set "curl-app=utilities\curl\32bit\curl.exe" +) + +set "ZU-app=utilities\7za.exe" + +:: BUGS: + :: + DEBUG ALL STEPS UNTILL NOW DONE + + +:: TODO: +:: + Write code to install vs if it's not yet installed on users pc + +:: + Configuraton and installation checklist: +:: 1) cd codecombat +:: 2) npm install -g bower brunch nodemon sendwithus +:: 3) bower install +:: 4) gem install sass +:: 5) npm install +:: 6) brunch -w +:: Extra... @ Fail run npm install + +:: + Copy the automated dev batch file to root folder +:: => Let user define mongo-db directory +:: + Start the dev environment + +:: Create The Temporary Directory +IF EXIST %temp-dir% rmdir %temp-dir% /s /q +mkdir %temp-dir% + +:: Create Log File +copy /y nul %install-log% > nul + +call:parse_aa_and_draw "config\header" +call:draw_dss + +call:parse_file_new "config\config" cnfg n + +call:log "Welcome to the automated Installation of the CodeCombat Dev. Environment!" +call:log_sse "v%%cnfg[1]%% authored by %%cnfg[2]%% and published by %%cnfg[3]%%." + +:: Language Agreement Stuff + +call:log "In order to continue the installation of the developers environment" +call:log "you will have to read and agree with the following license: +call:draw_dss +echo. +call:parse_aa_and_draw "license.txt" +echo. +call:draw_dss +call:strict_user_yn_question "Have you read the license and do you agree with it?" + +if "%res%"=="false" ( + call:log "Sorry to hear that, have a good day..." + call:log_sse "Installation and Setup of the CodeCombat environment is cancelled." + GOTO:END +) + +:: Tips +call:log "Before we start the installation, here are some tips:" +echo. + +call:parse_aa_and_draw "config\tips" + +call:draw_ss + +:: Read Language Index +call:parse_file_new "localisation\languages" lang lang_c + +:: Read Download URLs +call:parse_file_new "config\downloads" downloads n +call:parse_file_new "config\downloads_32" downloads_32 n +call:parse_file_new "config\downloads_64" downloads_64 n +call:parse_file_new "config\downloads_vista_32" downloads_vista_32 n +call:parse_file_new "config\downloads_vista_64" downloads_vista_64 n +call:parse_file_new "config\downloads_7_32" downloads_7_32 n +call:parse_file_new "config\downloads_7_64" downloads_7_64 n + +:: Parse all Localisation Files +for /L %%i in (1,1,%lang_c%) do ( + call:parse_file "localisation\%%lang[%%i]%%" languages languages_c +) + +set /A "wc = %languages_c% / %lang_c%" + +:: Start install with language question (Localisation) +call:log "Which language do you prefer?" + +set /A c=0 +for /L %%i in (1,%wc%,%languages_c%) do ( + set /A "n = %%i - 1" + call:log " [%%c%%] %%languages[%%i]%%" + set /A c+=1 +) + +set "lang_id=-1" +call:user_enter_language_id +goto:user_pick_language + +:user_enter_language_id + set /p lang_id= "Enter the language ID and press : " +goto:eof + +:user_pick_language + set res=false + if %lang_id% LSS 0 set res=true + if %lang_id% GEQ %lang_c% set res=true + if "%res%"=="true" ( + call:log "Invalid id! Please enter a correct id from the numbers listed above..." + call:draw_dss + call:user_enter_language_id + goto:user_pick_language + ) + +call:get_lw word 0 +call:log_ds "You choose '%word%', from now on all feedback will be logged in it." + +call:log_lw 1 +call:log_lw_sse 2 + +:: downloads for all version... + +:: [TODO] The choice between Cygwin && Git ?! Is => HAVE EXTERNAL GIT APPLICATION LIST!!! + +call:log_lw_sse 3 + +call:log_lw 6 +call:log_lw 7 +call:log_lw 8 +call:install_software_o "git" "%%downloads[1]%%" exe 9 +call:draw_dss +call:get_lw word 11 + +:: [TODO] Add downloads for windows visual studio ?! + +call:user_set_git_path + +:user_set_git_path_fail + if not exist "%git_exe_path%" ( + call:log_lw 27 + call:draw_dss + call:user_set_git_path + ) + :: architecture specific downloads... + IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT) +goto:eof + +:user_set_git_path + set /p git_exe_path="%word%: " + call:user_set_git_path_fail +goto:eof + +:go_to_platform + call:log_ds "Windows %~1 detected..." + GOTO %~2 +goto:eof + +:64BIT + call:log_ds "64-bit computer detected..." + + call:install_software_o "node-js" "%%downloads_64[1]%%" msi 12 + call:draw_dss + + call:get_path_from_user 41 42 + set "node_js_path=%user_tmp_path%" + Call:draw_dss + + call:install_software_o "ruby" "%%downloads_64[2]%%" exe 13 + call:draw_dss + call:install_software_o "python" "%%downloads_64[3]%%" msi 26 + + :: Some installations require specific windows versions + for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j + if "%version%" == "5.2" ( call:go_to_platform "XP" ver_XP_64 ) + if "%version%" == "6.0" ( call:go_to_platform "Vista" ver_Vista_64 ) + if "%version%" == "6.1" ( call:go_to_platform "7" ver_Win7_8_64 ) + if "%version%" == "6.2" ( call:go_to_platform "8.0" ver_Win7_8_64 ) + if "%version%" == "6.3" ( call:go_to_platform "8.1" ver_Win7_8_64 ) + GOTO warn_and_exit +GOTO END + +:32BIT + call:log_ds "32-bit computer detected..." + + call:install_software_o "node-js" "%%downloads_32[1]%%" msi 12 + call:draw_dss + + call:get_path_from_user 41 42 + set "node_js_path=%user_tmp_path%" + Call:draw_dss + + call:install_software_o "ruby" "%%downloads_32[2]%%" exe 13 + call:draw_dss + call:install_software_o "python" "%%downloads_32[3]%%" msi 26 + + :: Some installations require specific windows versions + for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j + if "%version%" == "5.2" ( call:go_to_platform "XP" ver_XP_32 ) + if "%version%" == "6.0" ( call:go_to_platform "Vista" ver_Vista_32 ) + if "%version%" == "6.1" ( call:go_to_platform "7" ver_Win7_8_32 ) + if "%version%" == "6.2" ( call:go_to_platform "8.0" ver_Win7_8_32 ) + if "%version%" == "6.3" ( call:go_to_platform "8.1" ver_Win7_8_32 ) + GOTO warn_and_exit +GOTO END + +:ver_Win7_8_32 + call:install_packed_software_o "mongo-db" "%%downloads_7_32[1]%%" 25 14 + set "mong-db-path = %packed_software_path%" +goto git_rep_checkout + +:ver_Vista_32 + call:install_packed_software_o "mongo-db" "%%downloads_vista_32[1]%%" 25 14 + set "mong-db-path = %packed_software_path%" +goto git_rep_checkout + +:ver_XP_32 + call:log_lw_ds 15 +goto END + +:ver_Win7_8_64 + call:install_packed_software_o "mongo-db" "%%downloads_7_64[1]%%" 25 14 + set "mong-db-path = %packed_software_path%" +goto git_rep_checkout + +:ver_Vista_64 + call:install_packed_software_o "mongo-db" "%%downloads_vista_64[1]%%" 25 14 + set "mong-db-path = %packed_software_path%" +goto git_rep_checkout + +:ver_XP_64 + call:log_lw_ds 15 +goto END + +:git_rep_checkout + call:log_lw_ss 16 + call:log_lw_sse 17 + + set "PATH=%PATH%;%git_exe_path%\bin;%git_exe_path%\cmd" /M + + call:log_lw 36 + call:log_lw 37 + call:log_lw 38 + + call:draw_dss + + call:get_lw word 39 + set /p git_username="%word% " + + call:draw_dss + + call:get_empty_path_from_user 32 + set "git_repository_path=%user_tmp_path%" + +goto:git_rep_checkout_auto + +:git_rep_checkout_auto + git clone https://github.com/%git_username%/codecombat.git "%git_repository_path%" +goto:git_repo_configuration + +:git_repo_configuration + call:log_lw_ss 35 + call:log_lw_sse 36 + + SET "PATH=%PATH%;%node_js_path%" /M + setx -m git "%git_exe_path%\bin" + + call:log_lw 40 + start cmd /k "npm install -g bower brunch nodemon sendwithus & exit" + +goto report_ok + +:report_ok + call:log_lw 18 + call:log_lw_sse 19 + + :: Open README file + call:open_readme + +goto clean_up + +:open_readme + call:open_txt_file "config/info" +goto:eof + +:warn_and_exit + call:log_lw_ss 20 + call:log_lw_sse 21 +goto error_report + +:error_report + call:log_lw_ds 22 +goto END + +:clean_up + call:log_lw_sse 23 + rmdir %temp-dir% /s /q +goto END + +:: ============================ INSTALL SOFTWARE FUNCTIONS ====================== + +:download_software + call:get_lw word 4 + call:log "%word% %~1..." + %curl-app% -sS -k %~2 -o %temp-dir%\%~1-setup.%~3 +goto:eof + +:install_software + call:download_software %~1 %~2 %~3 + call:get_lw word 5 + call:log "%word% %~1..." + START /WAIT %temp-dir%\%~1-setup.%~3 +goto:eof + +:install_software_o + call:get_lw word %~4 + call:user_yn_question "%word%" + if "%res%"=="true" ( + call:install_software %~1 %~2 %~3 + ) else ( + call:log_lw 10 + ) +goto:eof + +:install_packed_software + call:download_software %~1 %~2 zip + + call:draw_dss + + call:get_lw word %~3 + + set /p packed_software_path="%word% " + + :: remove chosen directory of user if it already exists (to prevent a window from popping up) + IF EXIST %packed_software_path% rmdir %packed_software_path% /s /q + + %ZU-app% x %temp-dir%\%~1-setup.zip -o%packed_software_path% + + call:draw_dss + + for /f "delims=" %%a in ('dir "%packed_software_path%\" /on /ad /b') do @set temp_dir=%%a + for /f "delims=" %%a in ('dir "%packed_software_path%\%temp_dir%\" /on /ad /b') do ( + xcopy %packed_software_path%\%temp_dir% %packed_software_path%\ /S /E + ) + + call:draw_dss + rmdir %packed_software_path%\%temp_dir%\ /s /q +goto:eof + +:user_yn_question + set /p result="%~1 [Y/N]: " + call:draw_dss + set "res=false" + if "%result%"=="N" (set "res=true") + if "%result%"=="n" (set "res=true") +goto:eof + +:strict_user_yn_question + set /p result="%~1 [Y/N]: " + call:draw_dss + set "res=unset" + if "%result%"=="N" (set "res=false") + if "%result%"=="n" (set "res=false") + if "%result%"=="Y" (set "res=true") + if "%result%"=="y" (set "res=true") + + if "%res%"=="unset" ( + call:log "Please answer the question with either Y or N..." + call:draw_dss + call:strict_user_yn_question "%~1" + ) +goto:eof + +:install_packed_software_o + call:get_lw word %~4 + call:user_yn_question "%word%" + if "%res%"=="true" ( + call:install_packed_software %~1 %~2 %~3 + ) else ( + call:log_lw 10 + ) +goto:eof + +:: ===================== USER - INTERACTION - FUNCTIONS ======================== + +:get_path_from_user + call:get_lw word %~1 + set /p user_tmp_path="%word% " + if not exist "%user_tmp_path%" ( + call:log_lw 43 + call:draw_dss + call:get_path_from_user %~1 %~2 + ) +goto:eof + +:get_empty_path_from_user + call:get_lw word %~1 + set /p user_tmp_path="%word% " + if exist "%user_tmp_path%" ( + call:log_lw 33 + call:draw_dss + call:get_path_from_user %~1 + ) +goto:eof + +:: ============================== FUNCTIONS ==================================== + +:log + echo %~1 + echo %~1 >> %install-log% +goto:eof + +:draw_ss + echo. + call:log "-----------------------------------------------------------------------------" + echo. +goto:eof + +:draw_dss + echo. + call:log "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" + echo. +goto:eof + +:draw_seperator + echo. + echo + + + + + + + + + echo. +goto:eof + +:log_ss + call:draw_ss + call:log "%~1" +goto:eof + +:log_sse + call:log "%~1" + call:draw_ss +goto:eof + +:log_ds + call:log_ss "%~1" + call:draw_ss +goto:eof + +:: ============================== IO FUNCTIONS ==================================== + +:open_txt_file + start "" notepad.exe %~1 +goto:eof + +:parse_aa_and_draw + set "file=%~1" + for /f "usebackq tokens=* delims=;" %%a in ("%file%") do ( + echo.%%a + ) +goto:eof + +:parse_file + set "file=%~1" + for /F "usebackq delims=" %%a in ("%file%") do ( + set /A %~3+=1 + call set %~2[%%%~3%%]=%%a + ) +goto:eof + +:parse_file_new + set /A %~3=0 + call:parse_file %~1 %~2 %~3 +goto:eof + +:: ============================== LOCALISATION FUNCTIONS ================ + +:get_lw + call:get_lw_id %~1 %lang_id% %~2 +goto:eof + +:get_lw_id + set /A count = %~2 * %wc% + %~3 + 1 + set "%~1=!languages[%count%]!" +goto:eof + +:log_lw + call:get_lw str %~1 + call:log "%str%" +goto:eof + +:log_lw_prfx + call:get_lw str %~1 + call:log "%~2%str%" +goto:eof + +:log_lw_ss + call:get_lw str %~1 + call:log_ss "%str%" +goto:eof + +:log_lw_ds + call:get_lw str %~1 + call:log_ds "%str%" +goto:eof + +:log_lw_sse + call:get_lw str %~1 + call:log_sse "%str%" +goto:eof + +:: ============================== WINDOWS FUNCTIONS ====================== + +:set_env_var + setx -m %~1 %~2 +goto:eof + +:: ============================== EOF ==================================== + +:END + exit +goto:eof + endlocal \ No newline at end of file diff --git a/scripts/windows/coco-dev-setup/batch/recycle_bin/git-test.bat b/scripts/windows/coco-dev-setup/recycle_bin/git-test.bat old mode 100755 new mode 100644 similarity index 95% rename from scripts/windows/coco-dev-setup/batch/recycle_bin/git-test.bat rename to scripts/windows/coco-dev-setup/recycle_bin/git-test.bat index adee59c3e..4fc84019c --- a/scripts/windows/coco-dev-setup/batch/recycle_bin/git-test.bat +++ b/scripts/windows/coco-dev-setup/recycle_bin/git-test.bat @@ -1,50 +1,50 @@ -@echo off -setlocal EnableDelayedExpansion - -:: + Configuraton and installation checklist: -:: 1) cd codecombat -:: 2) npm install -g bower brunch nodemon sendwithus -:: 3) bower install -:: 4) gem install sass -:: 5) npm install -:: 6) brunch -w -:: Extra... @ Fail run npm install - -echo "Moving to your git repository..." -C: -cd C:\CodeCombat - -PAUSE - -SET "PATH=%PATH%;C:\Program Files\Nodejs" /M -setx -m git "C:\Program Files (x86)\Git\bin" -SET "PATH=%PATH%;C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\cmd" /M - -PAUSE - -echo "Installing bower, brunch, nodemon and sendwithus..." -start cmd /k "npm install -g bower brunch nodemon sendwithus & exit" - -PAUSE - -echo "running npm install..." -start cmd /k "npm install & exit" - -PAUSE - -echo "Activating bower install..." -start cmd /k "bower install & PAUSE & exit" - -PAUSE - -echo "Installing sass via gem..." -start cmd /k "install sass & PAUSE & exit" - -PAUSE - -echo "comping repository via brunch..." -start cmd /k "brunch -w & exit" - -PAUSE - +@echo off +setlocal EnableDelayedExpansion + +:: + Configuraton and installation checklist: +:: 1) cd codecombat +:: 2) npm install -g bower brunch nodemon sendwithus +:: 3) bower install +:: 4) gem install sass +:: 5) npm install +:: 6) brunch -w +:: Extra... @ Fail run npm install + +echo "Moving to your git repository..." +C: +cd C:\CodeCombat + +PAUSE + +SET "PATH=%PATH%;C:\Program Files\Nodejs" /M +setx -m git "C:\Program Files (x86)\Git\bin" +SET "PATH=%PATH%;C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\cmd" /M + +PAUSE + +echo "Installing bower, brunch, nodemon and sendwithus..." +start cmd /k "npm install -g bower brunch nodemon sendwithus & exit" + +PAUSE + +echo "running npm install..." +start cmd /k "npm install & exit" + +PAUSE + +echo "Activating bower install..." +start cmd /k "bower install & PAUSE & exit" + +PAUSE + +echo "Installing sass via gem..." +start cmd /k "install sass & PAUSE & exit" + +PAUSE + +echo "comping repository via brunch..." +start cmd /k "brunch -w & exit" + +PAUSE + endlocal \ No newline at end of file diff --git a/server/commons/Handler.coffee b/server/commons/Handler.coffee index 2f11b5dbf..f38885fd9 100644 --- a/server/commons/Handler.coffee +++ b/server/commons/Handler.coffee @@ -5,7 +5,7 @@ errors = require './errors' log = require 'winston' PROJECT = {original:1, name:1, version:1, description: 1, slug:1, kind: 1} -FETCH_LIMIT = 150 +FETCH_LIMIT = 200 module.exports = class Handler # subclasses should override these properties @@ -47,7 +47,9 @@ module.exports = class Handler sendNotFoundError: (res) -> errors.notFound(res) sendMethodNotAllowed: (res) -> errors.badMethod(res) sendBadInputError: (res, message) -> errors.badInput(res, message) - sendDatabaseError: (res, err) -> errors.serverError(res, 'Database error, ' + err) + sendDatabaseError: (res, err) -> + log.error "Database error, #{err}" + errors.serverError(res, 'Database error, ' + err) sendError: (res, code, message) -> errors.custom(res, code, message) @@ -110,8 +112,7 @@ module.exports = class Handler log.warn "Whoa, we haven't yet thought about public properties for User projection yet." else projection = {} - for field in req.query.project.split(',') - projection[field] = 1 + projection[field] = 1 for field in req.query.project.split(',') for filter in filters callback = (err, results) => return @sendDatabaseError(res, err) if err @@ -251,9 +252,13 @@ module.exports = class Handler return @sendDatabaseError(res, err) if err return @sendNotFoundError(res) unless parentDocument? return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, parentDocument) + editableProperties = @getEditableProperties req, parentDocument updatedObject = parentDocument.toObject() - changes = _.pick req.body, @getEditableProperties(req, parentDocument) - _.extend updatedObject, changes + for prop in editableProperties + if (val = req.body[prop])? + updatedObject[prop] = val + else if updatedObject[prop]? + delete updatedObject[prop] delete updatedObject._id major = req.body.version?.major @@ -303,8 +308,12 @@ module.exports = class Handler done(err, document) saveChangesToDocument: (req, document, done) -> - for prop in @getEditableProperties(req, document) - document.set(prop, req.body[prop]) if req.body[prop]? + for prop in @getEditableProperties req, document + if (val = req.body[prop])? + document.set prop, val + # Hold on, gotta think about that one + #else if document.get(prop)? and req.method isnt 'PATCH' + # document.set prop, 'undefined' obj = document.toObject() # Hack to get saving of Users to work. Probably should replace these props with strings diff --git a/server/levels/sessions/level_session_handler.coffee b/server/levels/sessions/level_session_handler.coffee index d3ab07830..ca8680a17 100644 --- a/server/levels/sessions/level_session_handler.coffee +++ b/server/levels/sessions/level_session_handler.coffee @@ -1,5 +1,6 @@ LevelSession = require('./LevelSession') Handler = require('../../commons/Handler') +log = require 'winston' TIMEOUT = 1000 * 30 # no activity for 30 seconds means it's not active @@ -10,7 +11,11 @@ class LevelSessionHandler extends Handler 'chat', 'teamSpells', 'submitted', 'unsubscribed'] getByRelationship: (req, res, args...) -> - return @sendNotFoundError(res) unless args.length is 2 and args[1] is 'active' + return @getActiveSessions req, res if args.length is 2 and args[1] is 'active' + return @sendNotFoundError(res) + + getActiveSessions: (req, res) -> + return @sendUnauthorizedError(res) unless req.user.isAdmin() start = new Date() start = new Date(start.getTime() - TIMEOUT) query = @modelClass.find({'changed': {$gt: start}}) diff --git a/server/queues/scoring.coffee b/server/queues/scoring.coffee index 327abf949..cd4670708 100644 --- a/server/queues/scoring.coffee +++ b/server/queues/scoring.coffee @@ -43,17 +43,17 @@ module.exports.addPairwiseTaskToQueueFromRequest = (req, res) -> addPairwiseTaskToQueue = (taskPair, cb) -> LevelSession.findOne(_id:taskPair[0]).lean().exec (err, firstSession) => - if err? then return cb err, false + if err? then return cb err LevelSession.find(_id:taskPair[1]).exec (err, secondSession) => - if err? then return cb err, false + if err? then return cb err try taskPairs = generateTaskPairs(secondSession, firstSession) catch e - if e then return cb e, false + if e then return cb e sendEachTaskPairToTheQueue taskPairs, (taskPairError) -> - if taskPairError? then return cb taskPairError,false - cb null, true + if taskPairError? then return cb taskPairError + cb null module.exports.resimulateAllSessions = (req, res) -> unless isUserAdmin req then return errors.unauthorized res, "Unauthorized. Even if you are authorized, you shouldn't do this" @@ -68,8 +68,8 @@ module.exports.resimulateAllSessions = (req, res) -> majorVersion: levelMajorVersion query = LevelSession - .find(findParameters) - .lean() + .find(findParameters) + .lean() query.exec (err, result) -> if err? then return errors.serverError res, err @@ -100,14 +100,12 @@ resimulateSession = (originalLevelID, levelMajorVersion, session, cb) => cb null - - module.exports.createNewTask = (req, res) -> requestSessionID = req.body.session originalLevelID = req.body.originalLevelID currentLevelID = req.body.levelID requestLevelMajorVersion = parseInt(req.body.levelMajorVersion) - + async.waterfall [ validatePermissions.bind(@,req,requestSessionID) fetchAndVerifyLevelType.bind(@,currentLevelID) @@ -115,12 +113,12 @@ module.exports.createNewTask = (req, res) -> updateSessionToSubmit fetchInitialSessionsToRankAgainst.bind(@, requestLevelMajorVersion, originalLevelID) generateAndSendTaskPairsToTheQueue - + ], (err, successMessageObject) -> if err? then return errors.serverError res, "There was an error submitting the game to the queue:#{err}" sendResponseObject req, res, successMessageObject - + validatePermissions = (req,sessionID, callback) -> if isUserAnonymous req then return callback "You are unauthorized to submit that game to the simulator" if isUserAdmin req then return callback null @@ -136,7 +134,7 @@ validatePermissions = (req,sessionID, callback) -> query.exec (err, retrievedSession) -> if err? then return callback err userHasPermissionToSubmitCode = retrievedSession.creator is req.user?.id and - not _.isEqual(retrievedSession.code, retrievedSession.submittedCode) + not _.isEqual(retrievedSession.code, retrievedSession.submittedCode) unless userHasPermissionToSubmitCode then return callback "You are unauthorized to submit that game to the simulator" callback null @@ -209,7 +207,7 @@ generateAndSendTaskPairsToTheQueue = (sessionToRankAgainst,submittedSession, cal sendEachTaskPairToTheQueue taskPairs, (taskPairError) -> if taskPairError? then return callback taskPairError callback null, {"message": "All task pairs were succesfully sent to the queue"} - + module.exports.dispatchTaskToConsumer = (req, res) -> async.waterfall [ @@ -221,7 +219,7 @@ module.exports.dispatchTaskToConsumer = (req, res) -> constructTaskLogObject.bind(@, getUserIDFromRequest(req)) processTaskObject ], (err, taskObjectToSend) -> - if err? + if err? if typeof err is "string" and err.indexOf "No more games in the queue" isnt -1 res.send(204, "No games to score.") return res.end() @@ -229,16 +227,16 @@ module.exports.dispatchTaskToConsumer = (req, res) -> return errors.serverError res, "There was an error dispatching the task: #{err}" sendResponseObject req, res, taskObjectToSend - - + + checkSimulationPermissions = (req, cb) -> - if isUserAnonymous req + if isUserAnonymous req cb "You need to be logged in to simulate games" else cb null - + receiveMessageFromSimulationQueue = (cb) -> - scoringTaskQueue.receiveMessage (err, message) -> + scoringTaskQueue.receiveMessage (err, message) -> if err? then return cb "No more games in the queue, error:#{err}" if messageIsInvalid(message) then return cb "Message received from queue is invalid" cb null, message @@ -292,90 +290,190 @@ processTaskObject = (taskObject,taskLogObject, message, cb) -> cb null, taskObject getSessionInformation = (sessionIDString, callback) -> - findParameters = + findParameters = _id: sessionIDString selectString = 'submitDate team submittedCode teamSpells levelID creator creatorName' query = LevelSession - .findOne(findParameters) - .select(selectString) - .lean() - + .findOne(findParameters) + .select(selectString) + .lean() + query.exec (err, session) -> if err? then return callback err, {"error":"There was an error retrieving the session."} callback null, session module.exports.processTaskResult = (req, res) -> - clientResponseObject = verifyClientResponse req.body, res + async.waterfall [ + verifyClientResponse.bind(@,req.body) + fetchTaskLog.bind(@) + checkTaskLog.bind(@) + deleteQueueMessage.bind(@) + fetchLevelSession.bind(@) + checkSubmissionDate.bind(@) + logTaskComputation.bind(@) + updateSessions.bind(@) + indexNewScoreArray.bind(@) + addMatchToSessions.bind(@) + updateUserSimulationCounts.bind(@, req.user._id) + determineIfSessionShouldContinueAndUpdateLog.bind(@) + findNearestBetterSessionID.bind(@) + addNewSessionsToQueue.bind(@) + ], (err, results) -> + if err is "shouldn't continue" + sendResponseObject req, res, {"message":"The scores were updated successfully, person lost so no more games are being inserted!"} + else if err is "no session was found" + sendResponseObject req, res, {"message":"There were no more games to rank (game is at top)!"} + else if err? + errors.serverError res, "There was an error:#{err}" + else + sendResponseObject req, res, {"message":"The scores were updated successfully and more games were sent to the queue!"} - return unless clientResponseObject? - TaskLog.findOne {_id: clientResponseObject.taskID}, (err, taskLog) -> - return errors.serverError res, "There was an error retrieiving the task log object" if err? +verifyClientResponse = (responseObject, callback) -> + #TODO: better verification + unless typeof responseObject is "object" + callback "The response to that query is required to be a JSON object." + else + @clientResponseObject = responseObject + log.info "Verified client response!" + callback null, responseObject - taskLogJSON = taskLog.toObject() +fetchTaskLog = (responseObject, callback) -> + findParameters = + _id: responseObject.taskID + query = TaskLog + .findOne(findParameters) + query.exec (err, taskLog) => + @taskLog = taskLog + log.info "Fetched task log!" + callback err, taskLog.toObject() - return errors.badInput res, "That computational task has already been performed" if taskLogJSON.calculationTimeMS - return handleTimedOutTask req, res, clientResponseObject if hasTaskTimedOut taskLogJSON.sentDate +checkTaskLog = (taskLog, callback) -> + if taskLog.calculationTimeMS then return callback "That computational task has already been performed" + if hasTaskTimedOut taskLog.sentDate then return callback "The task has timed out" + log.info "Checked task log" + callback null - scoringTaskQueue.deleteMessage clientResponseObject.receiptHandle, (err) -> - console.log "Deleted message." - if err? then return errors.badInput res, "The queue message is already back in the queue, rejecting results." +deleteQueueMessage = (callback) -> + scoringTaskQueue.deleteMessage @clientResponseObject.receiptHandle, (err) -> + log.info "Deleted queue message" + callback err - LevelSession.findOne(_id: clientResponseObject.originalSessionID).lean().exec (err, levelSession) -> - if err? then return errors.serverError res, "There was a problem finding the level session:#{err}" - - supposedSubmissionDate = new Date(clientResponseObject.sessions[0].submitDate) - - if Number(supposedSubmissionDate) isnt Number(levelSession.submitDate) - return sendResponseObject req, res, {"message":"The game has been resubmitted. Removing from queue..."} - - logTaskComputation clientResponseObject, taskLog, (logErr) -> - if logErr? then return errors.serverError res, "There as a problem logging the task computation: #{logErr}" - - updateSessions clientResponseObject, (updateError, newScoreArray) -> - if updateError? then return errors.serverError res, "There was an error updating the scores.#{updateError}" - - newScoresObject = _.indexBy newScoreArray, 'id' - - addMatchToSessions clientResponseObject, newScoresObject, (err, data) -> - if err? then return errors.serverError res, "There was an error updating the sessions with the match! #{JSON.stringify err}" - - incrementUserSimulationCount req.user._id, 'simulatedBy' - incrementUserSimulationCount levelSession.creator, 'simulatedFor' - - originalSessionID = clientResponseObject.originalSessionID - originalSessionTeam = clientResponseObject.originalSessionTeam - originalSessionRank = parseInt clientResponseObject.originalSessionRank - - determineIfSessionShouldContinueAndUpdateLog originalSessionID, originalSessionRank, (err, sessionShouldContinue) -> - if err? then return errors.serverError res, "There was an error determining if the session should continue, #{err}" - - if sessionShouldContinue - opposingTeam = calculateOpposingTeam(originalSessionTeam) - opponentID = _.pull(_.keys(newScoresObject), originalSessionID) - sessionNewScore = newScoresObject[originalSessionID].totalScore - opponentNewScore = newScoresObject[opponentID].totalScore - - levelOriginalID = levelSession.level.original - levelOriginalMajorVersion = levelSession.level.majorVersion - findNearestBetterSessionID levelOriginalID, levelOriginalMajorVersion, originalSessionID, sessionNewScore, opponentNewScore, opponentID, opposingTeam, (err, opponentSessionID) -> - if err? then return errors.serverError res, "There was an error finding the nearest sessionID!" - if opponentSessionID - addPairwiseTaskToQueue [originalSessionID, opponentSessionID], (err, success) -> - if err? then return errors.serverError res, "There was an error sending the pairwise tasks to the queue!" - sendResponseObject req, res, {"message":"The scores were updated successfully and more games were sent to the queue!"} - else - LevelSession.update {_id: originalSessionID}, {isRanking: false}, {multi: false}, (err, affected) -> - if err? then return errors.serverError res, "There was an error marking the victorious session as not being ranked." - return sendResponseObject req, res, {"message":"There were no more games to rank (game is at top)!"} - else - console.log "Player lost, achieved rank #{originalSessionRank}" - LevelSession.update {_id: originalSessionID}, {isRanking: false}, {multi: false}, (err, affected) -> - if err? then return errors.serverError res, "There was an error marking the completed session as not being ranked." - sendResponseObject req, res, {"message":"The scores were updated successfully, person lost so no more games are being inserted!"} +fetchLevelSession = (callback) -> + findParameters = + _id: @clientResponseObject.originalSessionID + query = LevelSession + .findOne(findParameters) + .lean() + query.exec (err, session) => + @levelSession = session + log.info "Fetched level session" + callback err -determineIfSessionShouldContinueAndUpdateLog = (sessionID, sessionRank, cb) -> +checkSubmissionDate = (callback) -> + supposedSubmissionDate = new Date(@clientResponseObject.sessions[0].submitDate) + if Number(supposedSubmissionDate) isnt Number(@levelSession.submitDate) + callback "The game has been resubmitted. Removing from queue..." + else + log.info "Checked submission date" + callback null + +logTaskComputation = (callback) -> + @taskLog.set('calculationTimeMS',@clientResponseObject.calculationTimeMS) + @taskLog.set('sessions') + @taskLog.calculationTimeMS = @clientResponseObject.calculationTimeMS + @taskLog.sessions = @clientResponseObject.sessions + @taskLog.save (err, saved) -> + log.info "Logged task computation" + callback err + +updateSessions = (callback) -> + sessionIDs = _.pluck @clientResponseObject.sessions, 'sessionID' + + async.map sessionIDs, retrieveOldSessionData, (err, oldScores) => + if err? then callback err, {"error": "There was an error retrieving the old scores"} + + oldScoreArray = _.toArray putRankingFromMetricsIntoScoreObject @clientResponseObject, oldScores + newScoreArray = bayes.updatePlayerSkills oldScoreArray + saveNewScoresToDatabase newScoreArray, callback + + +saveNewScoresToDatabase = (newScoreArray, callback) -> + async.eachSeries newScoreArray, updateScoreInSession, (err) -> + log.info "Saved new scores to database" + callback err,newScoreArray + + +updateScoreInSession = (scoreObject,callback) -> + LevelSession.findOne {"_id": scoreObject.id}, (err, session) -> + if err? then return callback err, null + + session = session.toObject() + newTotalScore = scoreObject.meanStrength - 1.8 * scoreObject.standardDeviation + scoreHistoryAddition = [Date.now(), newTotalScore] + updateObject = + meanStrength: scoreObject.meanStrength + standardDeviation: scoreObject.standardDeviation + totalScore: newTotalScore + $push: {scoreHistory: {$each: [scoreHistoryAddition], $slice: -1000}} + + LevelSession.update {"_id": scoreObject.id}, updateObject, callback + log.info "New total score for session #{scoreObject.id} is #{updateObject.totalScore}" + +indexNewScoreArray = (newScoreArray, callback) -> + newScoresObject = _.indexBy newScoreArray, 'id' + @newScoresObject = newScoresObject + callback null, newScoresObject + +addMatchToSessions = (newScoreObject, callback) -> + matchObject = {} + matchObject.date = new Date() + matchObject.opponents = {} + for session in @clientResponseObject.sessions + sessionID = session.sessionID + matchObject.opponents[sessionID] = {} + matchObject.opponents[sessionID].sessionID = sessionID + matchObject.opponents[sessionID].userID = session.creator + matchObject.opponents[sessionID].metrics = {} + matchObject.opponents[sessionID].metrics.rank = Number(newScoreObject[sessionID].gameRanking) + + log.info "Match object computed, result: #{matchObject}" + log.info "Writing match object to database..." + #use bind with async to do the writes + sessionIDs = _.pluck @clientResponseObject.sessions, 'sessionID' + async.each sessionIDs, updateMatchesInSession.bind(@,matchObject), (err) -> callback err + +updateMatchesInSession = (matchObject, sessionID, callback) -> + currentMatchObject = {} + currentMatchObject.date = matchObject.date + currentMatchObject.metrics = matchObject.opponents[sessionID].metrics + opponentsClone = _.cloneDeep matchObject.opponents + opponentsClone = _.omit opponentsClone, sessionID + opponentsArray = _.toArray opponentsClone + currentMatchObject.opponents = opponentsArray + + sessionUpdateObject = + $push: {matches: {$each: [currentMatchObject], $slice: -200}} + log.info "Updating session #{sessionID}" + LevelSession.update {"_id":sessionID}, sessionUpdateObject, callback + +updateUserSimulationCounts = (reqUserID,callback) -> + incrementUserSimulationCount reqUserID, 'simulatedBy', (err) => + if err? then return callback err + incrementUserSimulationCount @levelSession.creator, 'simulatedFor', callback + +incrementUserSimulationCount = (userID, type, callback) => + inc = {} + inc[type] = 1 + User.update {_id: userID}, {$inc: inc}, (err, affected) -> + log.error "Error incrementing #{type} for #{userID}: #{err}" if err + callback err + +determineIfSessionShouldContinueAndUpdateLog = (cb) -> + sessionID = @clientResponseObject.originalSessionID + sessionRank = parseInt @clientResponseObject.originalSessionRank + queryParameters = _id: sessionID @@ -394,18 +492,26 @@ determineIfSessionShouldContinueAndUpdateLog = (sessionID, sessionRank, cb) -> totalNumberOfGamesPlayed = updatedSession.numberOfWinsAndTies + updatedSession.numberOfLosses if totalNumberOfGamesPlayed < 10 console.log "Number of games played is less than 10, continuing..." - cb null, true + cb null else ratio = (updatedSession.numberOfLosses) / (totalNumberOfGamesPlayed) if ratio > 0.33 - cb null, false + cb "shouldn't continue" console.log "Ratio(#{ratio}) is bad, ending simulation" else console.log "Ratio(#{ratio}) is good, so continuing simulations" - cb null, true + cb null -findNearestBetterSessionID = (levelOriginalID, levelMajorVersion, sessionID, sessionTotalScore, opponentSessionTotalScore, opponentSessionID, opposingTeam, cb) -> +findNearestBetterSessionID = (cb) -> + levelOriginalID = @levelSession.level.original + levelMajorVersion = @levelSession.level.majorVersion + sessionID = @clientResponseObject.originalSessionID + sessionTotalScore = @newScoresObject[sessionID].totalScore + opponentSessionID = _.pull(_.keys(@newScoresObject), sessionID) + opponentSessionTotalScore = @newScoresObject[opponentSessionID].totalScore + opposingTeam = calculateOpposingTeam(@clientResponseObject.originalSessionTeam) + retrieveAllOpponentSessionIDs sessionID, (err, opponentSessionIDs) -> if err? then return cb err, null @@ -434,23 +540,23 @@ findNearestBetterSessionID = (levelOriginalID, levelMajorVersion, sessionID, ses selectString = '_id totalScore' query = LevelSession.findOne(queryParameters) - .sort(sortParameters) - .limit(limitNumber) - .select(selectString) - .lean() + .sort(sortParameters) + .limit(limitNumber) + .select(selectString) + .lean() console.log "Finding session with score near #{opponentSessionTotalScore}" query.exec (err, session) -> if err? then return cb err, session - unless session then return cb err, null + unless session then return cb "no session was found" console.log "Found session with score #{session.totalScore}" cb err, session._id retrieveAllOpponentSessionIDs = (sessionID, cb) -> query = LevelSession.findOne({"_id":sessionID}) - .select('matches.opponents.sessionID matches.date submitDate') - .lean() + .select('matches.opponents.sessionID matches.date submitDate') + .lean() query.exec (err, session) -> if err? then return cb err, null opponentSessionIDs = (match.opponents[0].sessionID for match in session.matches when match.date > session.submitDate) @@ -462,56 +568,15 @@ calculateOpposingTeam = (sessionTeam) -> opposingTeams = _.pull teams, sessionTeam return opposingTeams[0] -incrementUserSimulationCount = (userID, type) -> - inc = {} - inc[type] = 1 - User.update {_id: userID}, {$inc: inc}, (err, affected) -> - log.error "Error incrementing #{type} for #{userID}: #{err}" if err - - -addMatchToSessions = (clientResponseObject, newScoreObject, callback) -> - matchObject = {} - matchObject.date = new Date() - matchObject.opponents = {} - for session in clientResponseObject.sessions - sessionID = session.sessionID - matchObject.opponents[sessionID] = {} - matchObject.opponents[sessionID].sessionID = sessionID - matchObject.opponents[sessionID].userID = session.creator - matchObject.opponents[sessionID].metrics = {} - matchObject.opponents[sessionID].metrics.rank = Number(newScoreObject[sessionID].gameRanking) - - log.info "Match object computed, result: #{matchObject}" - log.info "Writing match object to database..." - #use bind with async to do the writes - sessionIDs = _.pluck clientResponseObject.sessions, 'sessionID' - async.each sessionIDs, updateMatchesInSession.bind(@,matchObject), (err) -> callback err, null - -updateMatchesInSession = (matchObject, sessionID, callback) -> - currentMatchObject = {} - currentMatchObject.date = matchObject.date - currentMatchObject.metrics = matchObject.opponents[sessionID].metrics - opponentsClone = _.cloneDeep matchObject.opponents - opponentsClone = _.omit opponentsClone, sessionID - opponentsArray = _.toArray opponentsClone - currentMatchObject.opponents = opponentsArray - - sessionUpdateObject = - $push: {matches: {$each: [currentMatchObject], $slice: -200}} - log.info "Updating session #{sessionID}" - LevelSession.update {"_id":sessionID}, sessionUpdateObject, callback - +addNewSessionsToQueue = (sessionID, callback) -> + sessions = [@clientResponseObject.originalSessionID, sessionID] + addPairwiseTaskToQueue sessions, callback messageIsInvalid = (message) -> (not message?) or message.isEmpty() sendEachTaskPairToTheQueue = (taskPairs, callback) -> async.each taskPairs, sendTaskPairToQueue, callback - - - - - generateTaskPairs = (submittedSessions, sessionToScore) -> taskPairs = [] for session in submittedSessions @@ -532,10 +597,6 @@ isUserAnonymous = (req) -> if req.user? then return req.user.get('anonymous') el isUserAdmin = (req) -> return Boolean(req.user?.isAdmin()) - - - - sendResponseObject = (req,res,object) -> res.setHeader('Content-Type', 'application/json') res.send(object) @@ -545,51 +606,6 @@ hasTaskTimedOut = (taskSentTimestamp) -> taskSentTimestamp + scoringTaskTimeoutI handleTimedOutTask = (req, res, taskBody) -> errors.clientTimeout res, "The results weren't provided within the timeout" -verifyClientResponse = (responseObject, res) -> - unless typeof responseObject is "object" - errors.badInput res, "The response to that query is required to be a JSON object." - null - else - responseObject - -logTaskComputation = (taskObject,taskLogObject, callback) -> - taskLogObject.calculationTimeMS = taskObject.calculationTimeMS - taskLogObject.sessions = taskObject.sessions - taskLogObject.save callback - - -updateSessions = (taskObject,callback) -> - sessionIDs = _.pluck taskObject.sessions, 'sessionID' - - async.map sessionIDs, retrieveOldSessionData, (err, oldScores) -> - if err? then callback err, {"error": "There was an error retrieving the old scores"} - - oldScoreArray = _.toArray putRankingFromMetricsIntoScoreObject taskObject, oldScores - newScoreArray = bayes.updatePlayerSkills oldScoreArray - saveNewScoresToDatabase newScoreArray, callback - - -saveNewScoresToDatabase = (newScoreArray, callback) -> - async.eachSeries newScoreArray, updateScoreInSession, (err) -> callback err,newScoreArray - - -updateScoreInSession = (scoreObject,callback) -> - LevelSession.findOne {"_id": scoreObject.id}, (err, session) -> - if err? then return callback err, null - - session = session.toObject() - newTotalScore = scoreObject.meanStrength - 1.8 * scoreObject.standardDeviation - scoreHistoryAddition = [Date.now(), newTotalScore] - updateObject = - meanStrength: scoreObject.meanStrength - standardDeviation: scoreObject.standardDeviation - totalScore: newTotalScore - $push: {scoreHistory: {$each: [scoreHistoryAddition], $slice: -1000}} - - LevelSession.update {"_id": scoreObject.id}, updateObject, callback - log.info "New total score for session #{scoreObject.id} is #{updateObject.totalScore}" - - putRankingFromMetricsIntoScoreObject = (taskObject,scoreObject) -> scoreObject = _.indexBy scoreObject, 'id' scoreObject[session.sessionID].gameRanking = session.metrics.rank for session in taskObject.sessions diff --git a/server/routes/auth.coffee b/server/routes/auth.coffee index dcb8ea12a..76612e2e0 100644 --- a/server/routes/auth.coffee +++ b/server/routes/auth.coffee @@ -71,9 +71,7 @@ module.exports.setup = (app) -> if req.user sendSelf(req, res) else - user = new User({anonymous:true}) - user.set 'testGroupNumber', Math.floor(Math.random() * 256) # also in app/lib/auth - user.set 'preferredLanguage', languages.languageCodeFromAcceptedLanguages req.acceptedLanguages + user = makeNewUser(req) makeNext = (req, res) -> -> sendSelf(req, res) next = makeNext(req, res) loginUser(req, res, user, false, next) @@ -84,21 +82,6 @@ module.exports.setup = (app) -> res.send(UserHandler.formatEntity(req, req.user)) res.end() - loginUser = (req, res, user, send=true, next=null) -> - user.save((err) -> - if err - return @sendDatabaseError(res, err) - - req.logIn(user, (err) -> - if err - return @sendDatabaseError(res, err) - - if send - return @sendSuccess(res, user) - next() if next - ) - ) - app.post('/auth/logout', (req, res) -> req.logout() res.end() @@ -155,6 +138,26 @@ module.exports.setup = (app) -> res.send "Unsubscribed #{req.query.email} from all CodeCombat emails. Sorry to see you go!

Account settings

" res.end() +module.exports.loginUser = loginUser = (req, res, user, send=true, next=null) -> + user.save((err) -> + if err + return @sendDatabaseError(res, err) + + req.logIn(user, (err) -> + if err + return @sendDatabaseError(res, err) + + if send + return @sendSuccess(res, user) + next() if next + ) + ) + +module.exports.makeNewUser = makeNewUser = (req) -> + user = new User({anonymous:true}) + user.set 'testGroupNumber', Math.floor(Math.random() * 256) # also in app/lib/auth + user.set 'preferredLanguage', languages.languageCodeFromAcceptedLanguages req.acceptedLanguages + createMailOptions = (receiver, password) -> # TODO: use email templates here options = @@ -163,4 +166,4 @@ createMailOptions = (receiver, password) -> replyTo: config.mail.username subject: "[CodeCombat] Password Reset" text: "You can log into your account with: #{password}" -# + diff --git a/server/users/user_handler.coffee b/server/users/user_handler.coffee index 174445436..168f10d91 100644 --- a/server/users/user_handler.coffee +++ b/server/users/user_handler.coffee @@ -7,6 +7,8 @@ mongoose = require 'mongoose' config = require '../../server_config' errors = require '../commons/errors' async = require 'async' +log = require 'winston' +LevelSession = require('../levels/sessions/LevelSession') serverProperties = ['passwordHash', 'emailLower', 'nameLower', 'passwordReset'] privateProperties = [ @@ -55,7 +57,8 @@ UserHandler = class UserHandler extends Handler fbAT = req.query.facebookAccessToken return callback(null, req, user) unless fbID and fbAT url = "https://graph.facebook.com/me?access_token=#{fbAT}" - request(url, (error, response, body) -> + request(url, (err, response, body) -> + log.warn "Error grabbing FB token: #{err}" if err body = JSON.parse(body) emailsMatch = req.body.email is body.email return callback(res:'Invalid Facebook Access Token.', code:422) unless emailsMatch @@ -68,7 +71,8 @@ UserHandler = class UserHandler extends Handler gpAT = req.query.gplusAccessToken return callback(null, req, user) unless gpID and gpAT url = "https://www.googleapis.com/oauth2/v2/userinfo?access_token=#{gpAT}" - request(url, (error, response, body) -> + request(url, (err, response, body) -> + log.warn "Error grabbing G+ token: #{err}" if err body = JSON.parse(body) emailsMatch = req.body.email is body.email return callback(res:'Invalid G+ Access Token.', code:422) unless emailsMatch @@ -81,6 +85,7 @@ UserHandler = class UserHandler extends Handler emailLower = req.body.email.toLowerCase() return callback(null, req, user) if emailLower is user.get('emailLower') User.findOne({emailLower:emailLower}).exec (err, otherUser) -> + log.error "Database error setting user email: #{err}" if err return callback(res:'Database error.', code:500) if err if (req.query.gplusID or req.query.facebookID) and otherUser @@ -100,6 +105,7 @@ UserHandler = class UserHandler extends Handler nameLower = req.body.name?.toLowerCase() return callback(null, req, user) if nameLower is user.get('nameLower') User.findOne({nameLower:nameLower}).exec (err, otherUser) -> + log.error "Database error setting user name: #{err}" if err return callback(res:'Database error.', code:500) if err r = {message:'is already used by another account', property:'name'} return callback({res:r, code:409}) if otherUser @@ -164,6 +170,7 @@ UserHandler = class UserHandler extends Handler return @avatar(req, res, args[0]) if args[1] is 'avatar' return @getNamesByIds(req, res) if args[1] is 'names' return @nameToID(req, res, args[0]) if args[1] is 'nameToID' + return @getLevelSessions(req, res, args[0]) if args[1] is 'level.sessions' return @sendNotFoundError(res) agreeToCLA: (req, res) -> @@ -189,4 +196,17 @@ UserHandler = class UserHandler extends Handler res.redirect(document?.get('photoURL') or '/images/generic-wizard-icon.png') res.end() + getLevelSessions: (req, res, userID) -> + return @sendUnauthorizedError(res) unless req.user._id+'' is userID or req.user.isAdmin() + query = {'creator': userID} + projection = null + if req.query.project + projection = {} + projection[field] = 1 for field in req.query.project.split(',') + LevelSession.find(query).select(projection).exec (err, documents) => + return @sendDatabaseError(res, err) if err + documents = (@formatEntity(req, doc) for doc in documents) + @sendSuccess(res, documents) + + module.exports = new UserHandler() diff --git a/server/users/user_schema.coffee b/server/users/user_schema.coffee index c6399576f..18d526de5 100644 --- a/server/users/user_schema.coffee +++ b/server/users/user_schema.coffee @@ -47,6 +47,7 @@ UserSchema = c.object {}, colorConfig: c.object {additionalProperties: c.colorConfig()} aceConfig: c.object {}, + language: {type: 'string', 'default': 'javascript', 'enum': ['javascript', 'coffeescript']} keyBindings: {type: 'string', 'default': 'default', 'enum': ['default', 'vim', 'emacs']} invisibles: {type: 'boolean', 'default': false} indentGuides: {type: 'boolean', 'default': false} diff --git a/server_setup.coffee b/server_setup.coffee index e0a72f4dc..c06482a85 100644 --- a/server_setup.coffee +++ b/server_setup.coffee @@ -9,6 +9,8 @@ baseRoute = require './server/routes/base' user = require './server/users/user_handler' logging = require './server/commons/logging' config = require './server_config' +auth = require './server/routes/auth' +UserHandler = require('./server/users/user_handler') ###Middleware setup functions implementation### # 2014-03-03: Try not using this and see if it's still a problem @@ -85,7 +87,19 @@ exports.setupMiddleware = (app) -> setupFallbackRouteToIndex = (app) -> app.all '*', (req, res) -> - res.sendfile path.join(__dirname, 'public', 'index.html') + if req.user + sendMain(req, res) + else + user = auth.makeNewUser(req) + makeNext = (req, res) -> -> sendMain(req, res) + next = makeNext(req, res) + auth.loginUser(req, res, user, false, next) + +sendMain = (req, res) -> + fs.readFile path.join(__dirname, 'public', 'main.html'), 'utf8', (err,data) -> + # insert the user object directly into the html so the application can have it immediately + data = data.replace('"userObjectTag"', JSON.stringify(UserHandler.formatEntity(req, req.user))) + res.send data setupFacebookCrossDomainCommunicationRoute = (app) -> app.get '/channel.html', (req, res) -> From 0911556c39db97a5a1bc5d5276956e17f65a79b2 Mon Sep 17 00:00:00 2001 From: 1c7 <1003211008@qq.com> Date: Sat, 5 Apr 2014 14:10:47 +0800 Subject: [PATCH 011/665] Chinese translate for windows automatic tool --- .../batch/localisation/zh-HANS.coco | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/scripts/windows/coco-dev-setup/batch/localisation/zh-HANS.coco b/scripts/windows/coco-dev-setup/batch/localisation/zh-HANS.coco index 2eca2705c..9ce100631 100755 --- a/scripts/windows/coco-dev-setup/batch/localisation/zh-HANS.coco +++ b/scripts/windows/coco-dev-setup/batch/localisation/zh-HANS.coco @@ -2,81 +2,81 @@ 简体中文 - From now on we'll send our feedback in English! + 目前我们只能用英文给你反馈! - -bit computer detected. - The operating system - was detected. - We don't support Windows XP, installation cancelled. + -位系统. + 操作系统 + 被侦测到. + 我们不支持 Windows XP, 安装取消. - Have you already installed all the software needed for CodeCombat? - We recommand that you reply negative in case you're not sure. - Skipping the installation of the software... - CodeCombat couldn't be developed without third-party software. - That's why you'll need to install this software, - in order to start contributing to our community. - Cancel the installation if you already have the application. + 你是否已经安装好运行 CodeCombat 所需的所有软件? + 如果你不确定的话请回答 No. + 正在跳过此软件的安装... + CodeCombat 无法在不使用第三方服务的情况下开发. + 这就是为什么你需要安装这些软件, + 为了开始给我们的开源社区做贡献. + 如果你已经有了这些软件 请取消安装. Make sure to select the option that adds the application to your Windows Path, if the option is available. - Do you already have the latest version of - installed? - is downloading... - is installing... - is unzipping... - is cleaning... - Please define the full path where mongodb should be installed + 你是否已经安装了最新版本的 + ? + 正在下载... + 正在安装... + 正在解压... + 正在清理... + 请输入你希望安装 mongodb 的文件夹的全路径 - CodeCombat is opensource, like you already know. - All our sourcecode can be found online at Github. - You can choose to do the entire Git setup yourself. - However we recommend that you instead let us handle it instead. + CodeCombat 是开源的. + 我们的所有源代码都放在了 Github. + 你可以选择自己手工安装 Git. + 但我们仍然建议让程序自动替你完成. - Do you want to do the Local Git setup manually yourself? - Make sure you have correctly setup your repository before processing. - Do not close this window please. - When you're ready, press any key to continue... + 你是否想自己手工安装本地 Git 安装? + 请确保在开始处理前, 你有正确设置好你的库. + 请不要关闭此窗口. + 如果你准备好了, 请按任意键继续... - Please give the full path of your CodeCombat git repository: - Please enter the full path where you want to install your CodeCombat environment - This installation requires Git Bash. - Git bash is by default installed at 'C:\Program Files (x86)\Git'. - Git bash is by default installed at 'C:\Program Files\Git'. - Please enter the full path where git bash is installed or just press enter if it's in the default location - Do you want to checkout the repository via ssh? + 请输入你 CodeCombat git库的全路径: + 请输入你想安装 CodeCombat 环境的全路径 + 这项安装需要 Git Bash. + Git bash 默认安装在 'C:\Program Files (x86)\Git'. + Git bash 默认安装在 'C:\Program Files\Git'. + 请输入 git bash 的安装全路径, 如果你安装的是默认路径, 那么直接输入回车即可 + 你是否想使用 ssh 来检出(checkout)库(repository)? - Installing bower, brunch, nodemon and sendwithus... - Installing bower packages... - Installing sass... - Installing npm... - Starting brunch.... - Setting up a MongoDB database for you... - Downloading the last version of the CodeCombat database... + 正在安装 bower, brunch, nodemon 和 sendwithus... + 正在用 bower 安装依赖包... + 正在安装 sass... + 正在安装 npm... + 正在开启 brunch.... + 正在为你设置 MongoDB 数据库... + 正在下载 CodeCombat 数据库的最新版本... - That path already exists, are you sure you want to overwrite it? - That path doesn't exist. Please try again... + 这个路径已经存在, 你想要覆盖它吗? + 这个路径不存在, 请再次尝试... - The setup of the CodeCombat Dev. Environment was succesfull. - Thank you already for your contribution and see you soon. - Do you want to read the README for more information? + CodeCombat 开发环境的搭建已成功. + 感谢~ 我们会很快再次见面的 :) + 你是否想阅读 README 文件以了解更多信息? From now on you can start the dev. environment at the touch of a single mouse click. - 1) Just double click - and let the environment start up. - 2) Now just open 'localhost:3000' in your prefered browser. - That's it, you're now ready to start working on CodeCombat! + 1) 双击文件 + 启动开发环境. + 2) 在浏览器里访问 'localhost:3000' + 好了,你现在可以开始开发 CodeCombat 了! - \ No newline at end of file + From 51142627d453baee8da7ed9fc944884459be5bb1 Mon Sep 17 00:00:00 2001 From: 1c7 <1003211008@qq.com> Date: Sat, 5 Apr 2014 14:34:21 +0800 Subject: [PATCH 012/665] translate app/locale/zh-HANS.coffee --- app/locale/zh-HANS.coffee | 122 +++++++++++++++++++------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/app/locale/zh-HANS.coffee b/app/locale/zh-HANS.coffee index 36b055bd1..b8ff24575 100644 --- a/app/locale/zh-HANS.coffee +++ b/app/locale/zh-HANS.coffee @@ -5,7 +5,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese sending: "发送中……" cancel: "取消" save: "保存" -# create: "Create" + create: "创建" delay_1_sec: "1 秒" delay_3_sec: "3 秒" delay_5_sec: "5 秒" @@ -13,13 +13,13 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese fork: "派生" play: "开始" -# units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + units: + second: "秒" + seconds: "秒" + minute: "分钟" + minutes: "分钟" + hour: "小时" + hours: "小时" modal: close: "关闭" @@ -53,7 +53,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese login: sign_up: "注册" log_in: "登录" -# logging_in: "Logging In" + logging_in: "正在登录" log_out: "登出" recover: "找回账户" @@ -98,7 +98,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese campaign_player_created_description: "……在这里你可以与你的小伙伴的创造力战斗 技术指导." level_difficulty: "难度:" # play_as: "Play As" -# spectate: "Spectate" + spectate: "旁观他人的游戏" contact: contact_us: "联系我们" @@ -115,8 +115,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese title: "帮我们翻译 CodeCombat" sub_heading: "我们需要您的语言技能" pitch_body: "我们开发了 CodeCombat 的英文版,但是现在我们的玩家遍布全球。很多人英语不熟练,所以很想玩简体中文版的游戏,所以如果你中英文都很熟练,请考虑参加我们的翻译工作,帮忙把 CodeCombat 网站还有所有的关卡翻译成简体中文。" - missing_translations: "未翻译的文本将显示为英文。" - learn_more: "了解更多有关成为翻译人员的说明" + missing_translations: "没被翻译的文字将以英文显示。" + learn_more: "了解更多成为翻译人员的说明" subscribe_as_diplomat: "提交翻译人员申请" wizard_settings: @@ -125,10 +125,10 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese clothes: "衣服" trim: "条纹" cloud: "云" - spell: "法力球" + spell: "魔法球" boots: "鞋子" - hue: "色彩" - saturation: "饱和" + hue: "颜色" + saturation: "饱和度" lightness: "亮度" account_settings: @@ -140,18 +140,18 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese wizard_tab: "巫师" password_tab: "密码" emails_tab: "邮件" -# admin: "Admin" - gravatar_select: "选择使用 Gravatar 照片" - gravatar_add_photos: "添加小图和照片到一个 Gravatar 账户供你选择。" - gravatar_add_more_photos: "添加更多照片到你的 Gravatar 账户并查看。" + admin: "管理" + gravatar_select: "选择一张 Gravatar 图片" + gravatar_add_photos: "添加小图和图片到一个 Gravatar 账户供你选择。" + gravatar_add_more_photos: "去 Gravatar 添加图片, 然后回来这里查看。" wizard_color: "巫师 衣服 颜色" new_password: "新密码" new_password_verify: "核实" email_subscriptions: "邮箱验证" email_announcements: "通知" -# email_notifications: "Notifications" + email_notifications: "通知" email_notifications_description: "接收来自你的账户的定期通知。" - email_announcements_description: "接收关于 CodeCombat 最近的新闻和发展的邮件。" + email_announcements_description: "接收关于 CodeCombat 的邮件。" contributor_emails: "贡献者通知" contribute_prefix: "我们在寻找志同道合的人!请到" contribute_page: "贡献页面" @@ -198,7 +198,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese victory_sign_up_poke: "想保存你的代码?创建一个免费账户吧!" victory_rate_the_level: "评估关卡:" # victory_rank_my_game: "Rank My Game" -# victory_ranking_game: "Submitting..." + victory_ranking_game: "正在提交..." # victory_return_to_ladder: "Return to Ladder" victory_play_next_level: "下一关" victory_go_home: "返回主页" @@ -224,10 +224,10 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese hud_continue: "继续(按 Shift-空格)" spell_saved: "咒语已保存" skip_tutorial: "跳过(esc)" -# editor_config: "Editor Config" -# editor_config_title: "Editor Configuration" -# editor_config_language_label: "Programming Language" -# editor_config_language_description: "Define the programming language you want to code in." + editor_config: "编辑器配置" + editor_config_title: "编辑器配置" + editor_config_language_label: "编程语言" + editor_config_language_description: "请输入你想写的编程语言." # editor_config_keybindings_label: "Key Bindings" # editor_config_keybindings_default: "Default (Ace)" # editor_config_keybindings_description: "Adds additional shortcuts known from the common editors." @@ -239,12 +239,12 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese # editor_config_behaviors_description: "Autocompletes brackets, braces, and quotes." # loading_ready: "Ready!" # 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_toggle_play: "用 Ctrl+P 来暂停或继续" # tip_scrub_shortcut: "Ctrl+[ and Ctrl+] rewind and fast-forward." # tip_guide_exists: "Click the guide at the top of the page for useful info." -# tip_open_source: "CodeCombat is 100% open source!" + tip_open_source: "CodeCombat 是 100% 开源的!" # tip_beta_launch: "CodeCombat launched its beta in October, 2013." -# tip_js_beginning: "JavaScript is just the beginning." + tip_js_beginning: "JavaScript 仅仅只是个开始." # tip_autocast_setting: "Adjust autocast settings by clicking the gear on the cast button." # think_solution: "Think of the solution, not the problem." # tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra" @@ -258,17 +258,17 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese # tip_harry: "Yer a Wizard, " # tip_great_responsibility: "With great coding skill comes great debug responsibility." # tip_munchkin: "If you don't eat your vegetables, a munchkin will come after you while you're asleep." -# tip_binary: "There are only 10 types of people in the world: those who understand binary, and those who don't." + tip_binary: "这个世界上只有 10 种人: 那些懂二进制的, 还有那些不懂二进制的." # tip_commitment_yoda: "A programmer must have the deepest commitment, the most serious mind. ~ Yoda" # tip_no_try: "Do. Or do not. There is no try. - Yoda" # tip_patience: "Patience you must have, young Padawan. - Yoda" -# tip_documented_bug: "A documented bug is not a bug; it is a feature." + tip_documented_bug: "一个写在文档里的漏洞不算漏洞, 那是个功能." # tip_impossible: "It always seems impossible until it's done. - Nelson Mandela" -# tip_talk_is_cheap: "Talk is cheap. Show me the code. - Linus Torvalds" + tip_talk_is_cheap: "多说无用, 亮出你的代码. - Linus Torvalds" # tip_first_language: "The most disastrous thing that you can ever learn is your first programming language. - Alan Kay" -# time_current: "Now:" -# time_total: "Max:" -# time_goto: "Go to:" + time_current: "现在:" + time_total: "最大:" + time_goto: "跳到:" admin: av_title: "管理员视图" @@ -294,8 +294,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese contact_us: "联系我们!" hipchat_prefix: "你也可以在这里找到我们" hipchat_url: "HipChat 房间。" -# revert: "Revert" -# revert_models: "Revert Models" + revert: "还原" + revert_models: "还原模式" level_some_options: "有哪些选项?" level_tab_thangs: "物体" level_tab_scripts: "脚本" @@ -315,7 +315,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese level_components_type: "类型" level_component_edit_title: "编辑组件" # level_component_config_schema: "Config Schema" -# level_component_settings: "Settings" + level_component_settings: "设置" level_system_edit_title: "编辑系统" create_system_title: "创建新的系统" new_component_title: "创建新的组件" @@ -325,7 +325,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese # new_level_title: "Create a New Level" # article_search_title: "Search Articles Here" # thang_search_title: "Search Thang Types Here" -# level_search_title: "Search Levels Here" + level_search_title: "在这里搜索关卡" article: edit_btn_preview: "预览" @@ -337,27 +337,27 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese body: "正文" version: "版本" commit_msg: "提交信息" -# history: "History" + history: "历史" version_history_for: "版本历史: " -# result: "Result" + result: "结果" results: "结果" description: "描述" or: "或" email: "邮件" -# password: "Password" + password: "密码" message: "消息" # code: "Code" # ladder: "Ladder" # when: "When" -# opponent: "Opponent" + opponent: "对手" # rank: "Rank" # score: "Score" -# win: "Win" -# loss: "Loss" + win: "胜利" + loss: "失败" # tie: "Tie" -# easy: "Easy" -# medium: "Medium" -# hard: "Hard" + easy: "容易" + medium: "中等" + hard: "困难" about: who_is_codecombat: "什么是 CodeCombat?" @@ -451,7 +451,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese introduction_desc_github_url: "我们把 CodeCombat 完全开源" introduction_desc_suf: ",而且我们希望提供尽可能多的方法让你来参加这个项目,与我们一起创造。" introduction_desc_ending: "我们希望你也会加入进来!" -# introduction_desc_signature: "- Nick, George, Scott, Michael, Jeremy and Glen" + introduction_desc_signature: "- Nick, George, Scott, Michael, Jeremy 以及 Glen" alert_account_message_intro: "你好!" alert_account_message_pref: "要订阅贡献者邮件,你得先" alert_account_message_suf: "。" @@ -553,8 +553,8 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese counselor_title: "顾问" counselor_title_description: "(专家/导师)" -# ladder: -# please_login: "Please log in first before playing a ladder game." + ladder: + please_login: "请在对奕之前先登录." # my_matches: "My Matches" # simulate: "Simulate" # simulation_explanation: "By simulating games you can get your game ranked faster!" @@ -566,26 +566,26 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese # battle_as: "Battle as " # summary_your: "Your " # summary_matches: "Matches - " -# summary_wins: " Wins, " -# summary_losses: " Losses" + summary_wins: " 胜利, " + summary_losses: " 失败" # rank_no_code: "No New Code to Rank" # rank_my_game: "Rank My Game!" -# rank_submitting: "Submitting..." + rank_submitting: "正在提交..." # rank_submitted: "Submitted for Ranking" -# rank_failed: "Failed to Rank" + rank_failed: "评分失败" # rank_being_ranked: "Game Being Ranked" # code_being_simulated: "Your new code is being simulated by other players for ranking. This will refresh as new matches come in." # no_ranked_matches_pre: "No ranked matches for the " # no_ranked_matches_post: " team! Play against some competitors and then come back here to get your game ranked." -# choose_opponent: "Choose an Opponent" -# tutorial_play: "Play Tutorial" + choose_opponent: "选择一个对手" + tutorial_play: "玩教程" # tutorial_recommended: "Recommended if you've never played before" -# tutorial_skip: "Skip Tutorial" + tutorial_skip: "跳过教材" # tutorial_not_sure: "Not sure what's going on?" -# tutorial_play_first: "Play the Tutorial first." -# simple_ai: "Simple AI" + tutorial_play_first: "先玩一次教材." + simple_ai: "简单电脑" # warmup: "Warmup" -# vs: "VS" + vs: "对决" # multiplayer_launch: # introducing_dungeon_arena: "Introducing Dungeon Arena" From 8fe568d3a42c069ec827ec28fa91901d1459d3b7 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Sat, 5 Apr 2014 11:48:21 -0700 Subject: [PATCH 013/665] Fixed schema loading. --- app/models/CocoModel.coffee | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/models/CocoModel.coffee b/app/models/CocoModel.coffee index 9f4a88556..862ba72fd 100644 --- a/app/models/CocoModel.coffee +++ b/app/models/CocoModel.coffee @@ -23,8 +23,7 @@ class CocoModel extends Backbone.Model if @constructor.schema?.loaded @addSchemaDefaults() else - {me} = require 'lib/auth' - @loadSchema() if me?.loaded + @loadSchema() @once 'sync', @onLoaded, @ @saveBackup = _.debounce(@saveBackup, 500) From af887fd4b87ceb9bdeebd897f7d39478935933c2 Mon Sep 17 00:00:00 2001 From: Evelyn Solorzano Date: Sat, 5 Apr 2014 18:21:05 -0500 Subject: [PATCH 014/665] Update es-419.coffee Translated some commented lines up to play: category --- app/locale/es-419.coffee | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/locale/es-419.coffee b/app/locale/es-419.coffee index a09319212..8483f5bfd 100644 --- a/app/locale/es-419.coffee +++ b/app/locale/es-419.coffee @@ -4,8 +4,8 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip saving: "Guardando..." sending: "Enviando..." cancel: "Cancelar" -# save: "Save" -# create: "Create" + save: "Guardar" + create: "Crear" delay_1_sec: "1 segundo" delay_3_sec: "3 segundos" delay_5_sec: "5 segundos" @@ -14,19 +14,19 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip # play: "Play" # units: -# second: "second" -# seconds: "seconds" -# minute: "minute" -# minutes: "minutes" -# hour: "hour" -# hours: "hours" + second: "segundo" + seconds: "segundos" + minute: "minuto" + minutes: "minutos" + hour: "hora" + hours: "horas" modal: close: "Cerrar" okay: "OK" not_found: - page_not_found: "Pagina no encontrada" + page_not_found: "Página no encontrada" nav: play: "Jugar" @@ -40,11 +40,11 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip about: "Sobre" contact: "Contacto" twitter_follow: "Seguir" -# employers: "Employers" + employers: "Empleados" -# versions: -# save_version_title: "Save New Version" -# new_major_version: "New Major Version" + versions: + save_version_title: "Guardar nueva versión" + new_major_version: "Nueva Gran Versión" # cla_prefix: "To save changes, first you must agree to our" # cla_url: "CLA" # cla_suffix: "." @@ -53,7 +53,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip login: sign_up: "Crear Cuenta" log_in: "Entrar" -# logging_in: "Logging In" + logging_in: "Entrando" log_out: "Salir" recover: "recuperar cuenta" @@ -76,7 +76,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip 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" -# old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!" + old_browser: "¡Oh! ¡Oh! Tu navegador es muy antiguo para correr CodeCombat. ¡Lo Sentimos!" # old_browser_suffix: "You can try anyway, but it probably won't work." # campaign: "Campaign" # for_beginners: "For Beginners" @@ -98,7 +98,7 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip campaign_player_created_description: "... en los que luchas contra la creatividad de tus compañeros Hechiceros Artesanales." level_difficulty: "Dificultad: " play_as: "Jugar Como " -# spectate: "Spectate" + spectate: "Observar" contact: contact_us: "Contacta a CodeCombat" From 5c8c7fff1d9b93d24e6a29b05e3d2d1080866c58 Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Sat, 5 Apr 2014 17:05:03 -0700 Subject: [PATCH 015/665] Starting work on simple recruitment listings. Moved Treema and the JS parts of Bootstrap to bower. --- app/locale/en.coffee | 5 +- app/styles/account/settings.sass | 5 +- app/styles/employers.sass | 15 + app/templates/account/job_profile.jade | 8 + app/templates/account/settings.jade | 6 + app/templates/employers.jade | 26 + app/views/account/job_profile_view.coffee | 53 + app/views/account/settings_view.coffee | 21 +- app/views/editor/level/home.coffee | 4 +- app/views/employers_view.coffee | 46 + app/views/kinds/SearchView.coffee | 2 +- bower.json | 24 +- config.coffee | 14 +- package.json | 1 - server/commons/schemas.coffee | 3 + server/users/user_handler.coffee | 4 +- server/users/user_schema.coffee | 35 + server_setup.coffee | 4 +- vendor/scripts/bootstrap/affix.js | 126 - vendor/scripts/bootstrap/alert.js | 98 - vendor/scripts/bootstrap/bootstrap.js | 12 - vendor/scripts/bootstrap/button.js | 115 - vendor/scripts/bootstrap/carousel.js | 217 -- vendor/scripts/bootstrap/collapse.js | 179 -- vendor/scripts/bootstrap/dropdown.js | 154 - vendor/scripts/bootstrap/modal.js | 246 -- vendor/scripts/bootstrap/popover.js | 117 - vendor/scripts/bootstrap/scrollspy.js | 158 - vendor/scripts/bootstrap/tab.js | 135 - vendor/scripts/bootstrap/tooltip.js | 386 --- vendor/scripts/bootstrap/transition.js | 56 - vendor/scripts/treema.js | 3430 --------------------- vendor/styles/treema.css | 299 -- 33 files changed, 250 insertions(+), 5754 deletions(-) create mode 100644 app/styles/employers.sass create mode 100644 app/templates/account/job_profile.jade create mode 100644 app/views/account/job_profile_view.coffee delete mode 100644 vendor/scripts/bootstrap/affix.js delete mode 100644 vendor/scripts/bootstrap/alert.js delete mode 100644 vendor/scripts/bootstrap/bootstrap.js delete mode 100644 vendor/scripts/bootstrap/button.js delete mode 100644 vendor/scripts/bootstrap/carousel.js delete mode 100644 vendor/scripts/bootstrap/collapse.js delete mode 100644 vendor/scripts/bootstrap/dropdown.js delete mode 100644 vendor/scripts/bootstrap/modal.js delete mode 100644 vendor/scripts/bootstrap/popover.js delete mode 100644 vendor/scripts/bootstrap/scrollspy.js delete mode 100644 vendor/scripts/bootstrap/tab.js delete mode 100644 vendor/scripts/bootstrap/tooltip.js delete mode 100644 vendor/scripts/bootstrap/transition.js delete mode 100644 vendor/scripts/treema.js delete mode 100644 vendor/styles/treema.css diff --git a/app/locale/en.coffee b/app/locale/en.coffee index 7d35d42aa..cd6367464 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -616,7 +616,7 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr bad_input: "Bad input." server_error: "Server error." unknown: "Unknown error." - + resources: your_sessions: "Your Sessions" level: "Level" @@ -626,4 +626,5 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr facebook_friend_sessions: "Facebook Friend Sessions" gplus_friends: "G+ Friends" gplus_friend_sessions: "G+ Friend Sessions" - leaderboard: 'leaderboard' \ No newline at end of file + leaderboard: "Leaderboard" + user_schema: "User Schema" diff --git a/app/styles/account/settings.sass b/app/styles/account/settings.sass index 8751e59ef..7c41cf895 100644 --- a/app/styles/account/settings.sass +++ b/app/styles/account/settings.sass @@ -37,4 +37,7 @@ font-size: 12px .form - max-width: 600px \ No newline at end of file + max-width: 600px + + #job-profile-treema + background-color: white diff --git a/app/styles/employers.sass b/app/styles/employers.sass new file mode 100644 index 000000000..a95b126dc --- /dev/null +++ b/app/styles/employers.sass @@ -0,0 +1,15 @@ +#employers-view + .tablesorter + //img + // display: none + + .tablesorter-header + cursor: pointer + &:hover + color: black + + .tablesorter-headerAsc + background-color: #cfc + + .tablesorter-headerDesc + background-color: #ccf diff --git a/app/templates/account/job_profile.jade b/app/templates/account/job_profile.jade new file mode 100644 index 000000000..74b9f61c4 --- /dev/null +++ b/app/templates/account/job_profile.jade @@ -0,0 +1,8 @@ +h3(data-i18n="account_settings.job_profile") Job Profile + +if me.get('jobProfileApproved') + p.lead(data-i18n="account_settings.job_profile_approved") Your job profile has been approved by CodeCombat. +else + p.lead(data-i18n="account_settings.job_profile_explanation") Fill this out, and we will try to find you a job, and stuff. + +#job-profile-treema \ No newline at end of file diff --git a/app/templates/account/settings.jade b/app/templates/account/settings.jade index 91b533b1b..435e140dc 100644 --- a/app/templates/account/settings.jade +++ b/app/templates/account/settings.jade @@ -21,6 +21,9 @@ block content a(href="#password-pane", data-toggle="tab", data-i18n="account_settings.password_tab") Password li a(href="#email-pane", data-toggle="tab", data-i18n="account_settings.emails_tab") Emails + if me.isAdmin() + li + a(href="#job-profile-pane", data-toggle="tab", data-i18n="account_settings.job_profile_tab") Job Profile .tab-content#settings-panes #general-pane.tab-pane @@ -153,3 +156,6 @@ block content span(data-i18n="contribute.ambassador_subscribe_desc").help-block Get emails on support updates and multiplayer developments. button.btn#toggle-all-button(data-i18n="account_settings.email_toggle") Toggle All + + #job-profile-pane.tab-pane + #job-profile-view diff --git a/app/templates/employers.jade b/app/templates/employers.jade index 485d21622..e22a05cfb 100644 --- a/app/templates/employers.jade +++ b/app/templates/employers.jade @@ -32,3 +32,29 @@ block content h4 Skill: from interns and entry level to senior developers and management h4 Technologies: just about everything h4 Countries: USA, Canada, Australia, and many more + + p If you click on a profile, you can see: + ul + li extra links + li extra skill tags + li self description + li work experience description: list of company name, job title, dates + li educational experience: list of school name, degree & major, dates + li our notes + li links to CodeCombat code in action + li contact modal link + li visa needs + li more location + li projects: list of pic, name, description, link (like http://www.folyo.me/designers/stanislav-udotov) + + table.table.table-condensed.table-hover.table-responsive.tablesorter + thead + tr + th Name + th Location + th Looking For + // Remote, Full-time, Part-time, Contracting, Internship + th Top 5 Skills + th Yrs Exp + th Last Updated + th Current Job diff --git a/app/views/account/job_profile_view.coffee b/app/views/account/job_profile_view.coffee new file mode 100644 index 000000000..0658f58fc --- /dev/null +++ b/app/views/account/job_profile_view.coffee @@ -0,0 +1,53 @@ +CocoView = require 'views/kinds/CocoView' +template = require 'templates/account/job_profile' +{me} = require('lib/auth') + +module.exports = class JobProfileView extends CocoView + id: 'job-profile-view' + template: template + + editableSettings: [ + 'lookingFor', 'active', 'name', 'city', 'country', 'skills', 'experience', 'shortDescription', 'longDescription', + 'work', 'education', 'visa', 'projects', 'links' + ] + readOnlySettings: [ + 'updated' + ] + + constructor: (options) -> + super options + unless me.schema().loaded + @addSomethingToLoad("user_schema") + @listenToOnce me, 'schema-loaded', => @somethingLoaded 'user_schema' + + afterRender: -> + super() + return if @loading() + @buildJobProfileTreema() + + buildJobProfileTreema: -> + visibleSettings = @editableSettings.concat @readOnlySettings + data = _.pick (me.get('jobProfile') ? {}), (value, key) => key in visibleSettings + data.name ?= (me.get('firstName') + ' ' + me.get('lastName')).trim() if me.get('firstName') + schema = _.cloneDeep me.schema().get('properties').jobProfile + schema.properties = _.pick schema.properties, (value, key) => key in visibleSettings + schema.required = _.intersection schema.required, visibleSettings + for prop in @readOnlySettings + schema.properties[prop].readOnly = true + treemaOptions = + filePath: "db/user/#{me.id}" + schema: schema + data: data + callbacks: {change: @onJobProfileChanged} + + @jobProfileTreema = @$el.find('#job-profile-treema').treema treemaOptions + @jobProfileTreema.build() + @jobProfileTreema.open() + + onJobProfileChanged: (e) => + @hasEditedProfile = true + @trigger 'change' + + getData: -> + return {} unless me.get('jobProfile') or @hasEditedProfile + _.pick @jobProfileTreema.data, (value, key) => key in @editableSettings diff --git a/app/views/account/settings_view.coffee b/app/views/account/settings_view.coffee index df815b3cb..274773ed2 100644 --- a/app/views/account/settings_view.coffee +++ b/app/views/account/settings_view.coffee @@ -5,6 +5,7 @@ forms = require('lib/forms') User = require('models/User') WizardSettingsView = require './wizard_settings_view' +JobProfileView = require './job_profile_view' module.exports = class SettingsView extends View id: 'account-settings-view' @@ -45,9 +46,14 @@ module.exports = class SettingsView extends View ) @chooseTab(location.hash.replace('#','')) - WizardSettingsView = new WizardSettingsView() - @listenTo(WizardSettingsView, 'change', @save) - @insertSubView WizardSettingsView + + wizardSettingsView = new WizardSettingsView() + @listenTo wizardSettingsView, 'change', @save + @insertSubView wizardSettingsView + + @jobProfileView = new JobProfileView() + @listenTo @jobProfileView, 'change', @save + @insertSubView @jobProfileView chooseTab: (category) -> id = "##{category}-pane" @@ -129,3 +135,12 @@ module.exports = class SettingsView extends View permissions = [] permissions.push 'admin' if adminCheckbox.prop('checked') me.set('permissions', permissions) + + jobProfile = me.get('jobProfile') ? {} + updated = false + for key, val of @jobProfileView.getData() + updated = updated or jobProfile[key] isnt val + jobProfile[key] = val + if updated + jobProfile.updated = new Date() # doesn't work + me.set 'jobProfile', jobProfile diff --git a/app/views/editor/level/home.coffee b/app/views/editor/level/home.coffee index ffb1a5ac9..247c9d3ff 100644 --- a/app/views/editor/level/home.coffee +++ b/app/views/editor/level/home.coffee @@ -1,8 +1,8 @@ SearchView = require 'views/kinds/SearchView' -module.exports = class ThangTypeHomeView extends SearchView +module.exports = class EditorSearchView extends SearchView id: "editor-level-home-view" modelLabel: 'Level' model: require 'models/Level' modelURL: '/db/level' - tableTemplate: require 'templates/editor/level/table' \ No newline at end of file + tableTemplate: require 'templates/editor/level/table' diff --git a/app/views/employers_view.coffee b/app/views/employers_view.coffee index d5e2eeb2a..331e0f36e 100644 --- a/app/views/employers_view.coffee +++ b/app/views/employers_view.coffee @@ -4,3 +4,49 @@ template = require 'templates/employers' module.exports = class EmployersView extends View id: "employers-view" template: template + + afterRender: -> + @sortTable() + super() + + sortTable: -> + # http://mottie.github.io/tablesorter/docs/example-widget-bootstrap-theme.html + $.extend $.tablesorter.themes.bootstrap, + # these classes are added to the table. To see other table classes available, + # look here: http://twitter.github.com/bootstrap/base-css.html#tables + table: "table table-bordered" + caption: "caption" + header: "bootstrap-header" # give the header a gradient background + footerRow: "" + footerCells: "" + icons: "" # add "icon-white" to make them white; this icon class is added to the in the header + sortNone: "bootstrap-icon-unsorted" + sortAsc: "icon-chevron-up" # glyphicon glyphicon-chevron-up" # we are still using v2 icons + sortDesc: "icon-chevron-down" # glyphicon-chevron-down" # we are still using v2 icons + active: "" # applied when column is sorted + hover: "" # use custom css here - bootstrap class may not override it + filterRow: "" # filter row class + even: "" # odd row zebra striping + odd: "" # even row zebra striping + + # call the tablesorter plugin and apply the uitheme widget + @$el.find(".tablesorter").tablesorter( + theme: "bootstrap" + widthFixed: true + headerTemplate: "{content} {icon}" + # widget code contained in the jquery.tablesorter.widgets.js file + # use the zebra stripe widget if you plan on hiding any rows (filter widget) + widgets: [ + "uitheme" + "zebra" + ] + widgetOptions: + # using the default zebra striping class name, so it actually isn't included in the theme variable above + # this is ONLY needed for bootstrap theming if you are using the filter widget, because rows are hidden + zebra: [ + "even" + "odd" + ] + # reset filters button + filter_reset: ".reset" + ) diff --git a/app/views/kinds/SearchView.coffee b/app/views/kinds/SearchView.coffee index f49eb4994..5f93924c3 100644 --- a/app/views/kinds/SearchView.coffee +++ b/app/views/kinds/SearchView.coffee @@ -8,7 +8,7 @@ class SearchCollection extends Backbone.Collection @url = "#{modelURL}/search?project=true" @url += "&term=#{term}" if @term -module.exports = class ThangTypeHomeView extends View +module.exports = class SearchView extends View template: template className: 'search-view' diff --git a/bower.json b/bower.json index e73834bc5..c0a2fa27d 100644 --- a/bower.json +++ b/bower.json @@ -36,7 +36,10 @@ "underscore.string": "~2.3.3", "firebase": "~1.0.2", "catiline": "~2.9.3", - "d3": "~3.4.4" + "d3": "~3.4.4", + "jquery.tablesorter": "~2.15.13", + "treema": "~0.0.1", + "bootstrap": "~3.1.1" }, "overrides": { "backbone": { @@ -50,6 +53,25 @@ }, "underscore.string": { "main": "lib/underscore.string.js" + }, + "jquery.tablesorter": { + "main": [ + "js/jquery.tablesorter.js", + "js/jquery.tablesorter.widgets.js", + "css/theme.bootstrap.css" + ] + }, + "bootstrap": { + "main": [ + "./dist/js/bootstrap.js", + "./dist/fonts/glyphicons-halflings-regular.eot", + "./dist/fonts/glyphicons-halflings-regular.svg", + "./dist/fonts/glyphicons-halflings-regular.ttf", + "./dist/fonts/glyphicons-halflings-regular.woff" + ] } + }, + "resolutions": { + "jquery": "~2.0.3" } } diff --git a/config.coffee b/config.coffee index 1a860cb76..7e600735e 100644 --- a/config.coffee +++ b/config.coffee @@ -45,17 +45,7 @@ exports.config = 'bower_components/lodash/dist/lodash.js' 'bower_components/backbone/backbone.js' # Twitter Bootstrap jquery plugins - 'vendor/scripts/bootstrap/transition.js' - 'vendor/scripts/bootstrap/affix.js' - 'vendor/scripts/bootstrap/alert.js' - 'vendor/scripts/bootstrap/button.js' - 'vendor/scripts/bootstrap/carousel.js' - 'vendor/scripts/bootstrap/collapse.js' - 'vendor/scripts/bootstrap/dropdown.js' - 'vendor/scripts/bootstrap/modal.js' - 'vendor/scripts/bootstrap/scrollspy.js' - 'vendor/scripts/bootstrap/tab.js' - 'vendor/scripts/bootstrap/tooltip.js' + 'bower_components/bootstrap/dist/bootstrap.js' # CreateJS dependencies 'vendor/scripts/easeljs-NEXT.combined.js' 'vendor/scripts/preloadjs-NEXT.combined.js' @@ -70,7 +60,7 @@ exports.config = stylesheets: defaultExtension: 'sass' joinTo: - 'stylesheets/app.css': /^(app|vendor)/ + 'stylesheets/app.css': /^(app|vendor|bower_components)/ order: before: ['app/styles/bootstrap.scss'] templates: diff --git a/package.json b/package.json index 665ac0131..fc229cd02 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,6 @@ "css-brunch": "> 1.0 < 1.8", "jade-brunch": "> 1.0 < 1.8", "uglify-js-brunch": "~1.7.4", - "clean-css-brunch": "> 1.0 < 1.8", "auto-reload-brunch": "> 1.0 < 1.8", "brunch": "~1.7.4", "jasmine-node": "1.13.x", diff --git a/server/commons/schemas.coffee b/server/commons/schemas.coffee index 060ff8348..e249ef757 100644 --- a/server/commons/schemas.coffee +++ b/server/commons/schemas.coffee @@ -8,6 +8,8 @@ combine = (base, ext) -> return base unless ext? return _.extend(base, ext) +urlPattern = '^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-‌​\.\?\,\'\/\\\+&%\$#_]*)?$' + # Common schema properties me.object = (ext, props) -> combine {type: 'object', additionalProperties: false, properties: props or {}}, ext me.array = (ext, items) -> combine {type: 'array', items: items or {}}, ext @@ -16,6 +18,7 @@ me.pct = (ext) -> combine({type: 'number', maximum: 1.0, minimum: 0.0}, ext) me.date = (ext) -> combine({type: 'string', format: 'date-time'}, ext) # should just be string (Mongo ID), but sometimes mongoose turns them into objects representing those, so we are lenient me.objectId = (ext) -> schema = combine({type: ['object', 'string'] }, ext) +me.url = (ext) -> combine({type: 'string', format: 'url', pattern: urlPattern}, ext) PointSchema = me.object {title: "Point", description: "An {x, y} coordinate point.", format: "point2d", required: ["x", "y"]}, x: {title: "x", description: "The x coordinate.", type: "number", "default": 15} diff --git a/server/users/user_handler.coffee b/server/users/user_handler.coffee index 168f10d91..c654ce71f 100644 --- a/server/users/user_handler.coffee +++ b/server/users/user_handler.coffee @@ -13,7 +13,7 @@ LevelSession = require('../levels/sessions/LevelSession') serverProperties = ['passwordHash', 'emailLower', 'nameLower', 'passwordReset'] privateProperties = [ 'permissions', 'email', 'firstName', 'lastName', 'gender', 'facebookID', - 'gplusID', 'music', 'volume', 'aceConfig' + 'gplusID', 'music', 'volume', 'aceConfig', 'jobProfile', 'jobProfileApproved' ] UserHandler = class UserHandler extends Handler @@ -23,7 +23,7 @@ UserHandler = class UserHandler extends Handler 'name', 'photoURL', 'password', 'anonymous', 'wizardColor1', 'volume', 'firstName', 'lastName', 'gender', 'facebookID', 'gplusID', 'emailSubscriptions', 'testGroupNumber', 'music', 'hourOfCode', 'hourOfCodeComplete', 'preferredLanguage', - 'wizard', 'aceConfig', 'autocastDelay', 'lastLevel' + 'wizard', 'aceConfig', 'autocastDelay', 'lastLevel', 'jobProfile' ] jsonSchema: schema diff --git a/server/users/user_schema.coffee b/server/users/user_schema.coffee index 18d526de5..52259cfc9 100644 --- a/server/users/user_schema.coffee +++ b/server/users/user_schema.coffee @@ -56,6 +56,41 @@ UserSchema = c.object {}, simulatedBy: {type: 'integer', minimum: 0, default: 0} simulatedFor: {type: 'integer', minimum: 0, default: 0} + jobProfile: c.object {title: 'Job Profile', required: ['lookingFor', 'active', 'name', 'city', 'country', 'skills', 'experience', 'shortDescription', 'longDescription', 'visa', 'work', 'education', 'projects', 'links']}, + lookingFor: {title: 'Looking For', type: 'string', enum: ['Full-time', 'Part-time', 'Remote', 'Contracting', 'Internship'], default: 'Full-time', description: 'What kind of developer position do you want?'} + active: {title: 'Active', type: 'boolean', description: 'Want interview offers right now?'} + updated: c.date {title: 'Last Updated', description: 'How fresh your profile appears to employers. The fresher, the better. Profiles go inactive after 30 days.'} + name: c.shortString {title: 'Name', description: 'Name you want employers to see, like "Nick Winter".'} + city: c.shortString {title: 'City', description: 'City you want to work in (or live in now), like "San Francisco" or "Lubbock, TX".', default: 'Defaultsville, CA'} + country: c.shortString {title: 'Country', description: 'Country you want to work in (or live in now), like "USA" or "France".', default: 'USA'} + skills: c.array {title: 'Skills', description: 'Tag relevant developer skills in order of proficiency. Employers will see the first five at a glance.', default: ['javascript'], minItems: 1, maxItems: 30, uniqueItems: true}, + {type: 'string', minLength: 1, maxLength: 20, description: 'Ex.: "objective-c", "mongodb", "rails", "android", "javascript"'} + experience: {type: 'integer', title: 'Years of Experience', minimum: 0, description: 'How many years of professional experience (getting paid) developing software do you have?'} + shortDescription: {type: 'string', maxLength: 140, title: 'Short Description', description: 'Who are you, and what are you looking for? 140 characters max.', default: 'Programmer seeking to build great software.'} + longDescription: {type: 'string', maxLength: 2000, title: 'Long Description', description: 'Give employeers more details. Highlight your stunning personality. Markdown okay. 2000 characters max.', format: 'markdown', default: '* I write great code.\n* You need great code?\n* Great!'} + visa: c.shortString {title: 'US Work Status', description: 'Are you authorized to work in the US, or do you need visa sponsorship?', enum: ['Authorized to work in the US', 'Need visa sponsorship'], default: 'Authorized to work in the US'} + work: c.array {title: 'Work Experience', description: 'List your relevant work experience.'}, + c.object {title: 'Job', description: 'Some work experience you had.', required: ['employer', 'role', 'duration']}, + employer: c.shortString {title: 'Employer', description: 'Name of your employer.'} + role: c.shortString {title: 'Job Title', description: 'What was your job title or role?'} + duration: c.shortString {title: 'Duration', description: 'When did you hold this gig? Ex.: "Feb 2013 - present".'} + education: c.array {title: 'Education', description: 'List your academic ordeals.'}, + c.object {title: 'Ordeal', description: 'Some education that befell you.', required: ['school', 'degree', 'duration']}, + school: c.shortString {title: 'School', description: 'Name of your school.'} + degree: c.shortString {title: 'Degree', description: 'What was your degree and field of study? Ex. Ph.D. Human-Computer Interaction (incomplete)'} + duration: c.shortString {title: 'Duration', description: 'When? Ex.: "Aug 2004 - May 2008".'} + projects: c.array {title: 'Projects', description: 'Highlight your projects to amaze employers.'}, + c.object {title: 'Project', description: 'A project you created.', required: ['name', 'description', 'picture', 'link']}, + name: c.shortString {title: 'Project Name', description: 'What was the project called?'} + description: {type: 'string', title: 'Description', description: 'Briefly describe the project.', maxLength: 400, format: 'markdown'} + picture: {type: 'string', title: 'Picture', format: 'image-file', description: 'Upload a 300x225px or larger image showing off the project.'} + link: c.url {title: 'Link', description: 'Link to the project.', default: 'http://codecombat.com'} + links: c.array {title: 'Links', description: 'Link any other sites or profiles you want to highlight, like your GitHub, your LinkedIn, or your blog.'}, + c.object {title: 'Link', description: 'A link to another site you want to highlight, like your GitHub, your LinkedIn, or your blog.', required: ['name', 'link']}, + name: {type: 'string', maxLength: 30, title: 'Link Name', description: 'What are you linking to? Ex: "Personal Website", "Twitter"'} + link: c.url {title: 'Link', description: 'The URL.', default: 'http://codecombat.com'} + jobProfileApproved: {title: 'Job Profile Approved', type: 'boolean', description: 'Whether your profile has been approved by CodeCombat.'} + c.extendBasicProperties UserSchema, 'user' module.exports = UserSchema diff --git a/server_setup.coffee b/server_setup.coffee index c06482a85..d8dcd1c03 100644 --- a/server_setup.coffee +++ b/server_setup.coffee @@ -3,6 +3,7 @@ path = require 'path' authentication = require 'passport' useragent = require 'express-useragent' fs = require 'graceful-fs' +log = require('winston') database = require './server/commons/database' baseRoute = require './server/routes/base' @@ -96,7 +97,8 @@ setupFallbackRouteToIndex = (app) -> auth.loginUser(req, res, user, false, next) sendMain = (req, res) -> - fs.readFile path.join(__dirname, 'public', 'main.html'), 'utf8', (err,data) -> + fs.readFile path.join(__dirname, 'public', 'main.html'), 'utf8', (err, data) -> + log.error "Error modifying main.html: #{err}" if err # insert the user object directly into the html so the application can have it immediately data = data.replace('"userObjectTag"', JSON.stringify(UserHandler.formatEntity(req, req.user))) res.send data diff --git a/vendor/scripts/bootstrap/affix.js b/vendor/scripts/bootstrap/affix.js deleted file mode 100644 index 552bffa3f..000000000 --- a/vendor/scripts/bootstrap/affix.js +++ /dev/null @@ -1,126 +0,0 @@ -/* ======================================================================== - * Bootstrap: affix.js v3.0.3 - * http://getbootstrap.com/javascript/#affix - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // AFFIX CLASS DEFINITION - // ====================== - - var Affix = function (element, options) { - this.options = $.extend({}, Affix.DEFAULTS, options) - this.$window = $(window) - .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) - - this.$element = $(element) - this.affixed = - this.unpin = null - - this.checkPosition() - } - - Affix.RESET = 'affix affix-top affix-bottom' - - Affix.DEFAULTS = { - offset: 0 - } - - Affix.prototype.checkPositionWithEventLoop = function () { - setTimeout($.proxy(this.checkPosition, this), 1) - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - var scrollTop = this.$window.scrollTop() - var position = this.$element.offset() - var offset = this.options.offset - var offsetTop = offset.top - var offsetBottom = offset.bottom - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : - offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : - offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false - - if (this.affixed === affix) return - if (this.unpin) this.$element.css('top', '') - - this.affixed = affix - this.unpin = affix == 'bottom' ? position.top - scrollTop : null - - this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : '')) - - if (affix == 'bottom') { - this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() }) - } - } - - - // AFFIX PLUGIN DEFINITION - // ======================= - - var old = $.fn.affix - - $.fn.affix = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.affix') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix - - - // AFFIX NO CONFLICT - // ================= - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - // AFFIX DATA-API - // ============== - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - var data = $spy.data() - - data.offset = data.offset || {} - - if (data.offsetBottom) data.offset.bottom = data.offsetBottom - if (data.offsetTop) data.offset.top = data.offsetTop - - $spy.affix(data) - }) - }) - -}(jQuery); diff --git a/vendor/scripts/bootstrap/alert.js b/vendor/scripts/bootstrap/alert.js deleted file mode 100644 index 695ad74d0..000000000 --- a/vendor/scripts/bootstrap/alert.js +++ /dev/null @@ -1,98 +0,0 @@ -/* ======================================================================== - * Bootstrap: alert.js v3.0.3 - * http://getbootstrap.com/javascript/#alerts - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent.trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one($.support.transition.end, removeElement) - .emulateTransitionEnd(150) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(jQuery); diff --git a/vendor/scripts/bootstrap/bootstrap.js b/vendor/scripts/bootstrap/bootstrap.js deleted file mode 100644 index fee1bda9d..000000000 --- a/vendor/scripts/bootstrap/bootstrap.js +++ /dev/null @@ -1,12 +0,0 @@ -//= require affix -//= require alert -//= require button -//= require carousel -//= require collapse -//= require dropdown -//= require tab -//= require transition -//= require scrollspy -//= require modal -//= require tooltip -//= require popover diff --git a/vendor/scripts/bootstrap/button.js b/vendor/scripts/bootstrap/button.js deleted file mode 100644 index c9fdde5e4..000000000 --- a/vendor/scripts/bootstrap/button.js +++ /dev/null @@ -1,115 +0,0 @@ -/* ======================================================================== - * Bootstrap: button.js v3.0.3 - * http://getbootstrap.com/javascript/#buttons - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - } - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state = state + 'Text' - - if (!data.resetText) $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d); - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons"]') - var changed = true - - if ($parent.length) { - var $input = this.$element.find('input') - if ($input.prop('type') === 'radio') { - // see if clicking on current one - if ($input.prop('checked') && this.$element.hasClass('active')) - changed = false - else - $parent.find('.active').removeClass('active') - } - if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') - } - - if (changed) this.$element.toggleClass('active') - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - e.preventDefault() - }) - -}(jQuery); diff --git a/vendor/scripts/bootstrap/carousel.js b/vendor/scripts/bootstrap/carousel.js deleted file mode 100644 index 6391a36df..000000000 --- a/vendor/scripts/bootstrap/carousel.js +++ /dev/null @@ -1,217 +0,0 @@ -/* ======================================================================== - * Bootstrap: carousel.js v3.0.3 - * http://getbootstrap.com/javascript/#carousel - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null - - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.DEFAULTS = { - interval: 5000 - , pause: 'hover' - , wrap: true - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getActiveIndex = function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - - return this.$items.index(this.$active) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getActiveIndex() - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - this.sliding = true - - isCycling && this.pause() - - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid.bs.carousel', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) - }) - .emulateTransitionEnd(600) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid.bs.carousel') - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - $carousel.carousel($carousel.data()) - }) - }) - -}(jQuery); diff --git a/vendor/scripts/bootstrap/collapse.js b/vendor/scripts/bootstrap/collapse.js deleted file mode 100644 index 1a079938e..000000000 --- a/vendor/scripts/bootstrap/collapse.js +++ /dev/null @@ -1,179 +0,0 @@ -/* ======================================================================== - * Bootstrap: collapse.js v3.0.3 - * http://getbootstrap.com/javascript/#collapse - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing') - [dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('in') - [dimension]('auto') - this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - $target.collapse(option) - }) - -}(jQuery); diff --git a/vendor/scripts/bootstrap/dropdown.js b/vendor/scripts/bootstrap/dropdown.js deleted file mode 100644 index 13352ef7c..000000000 --- a/vendor/scripts/bootstrap/dropdown.js +++ /dev/null @@ -1,154 +0,0 @@ -/* ======================================================================== - * Bootstrap: dropdown.js v3.0.3 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $('