mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-01 19:36:57 -05:00
Merge branch 'master' into production
This commit is contained in:
commit
f96aa20d2c
18 changed files with 728 additions and 182 deletions
|
@ -31,8 +31,7 @@
|
||||||
|
|
||||||
<link rel="shortcut icon" href="/images/favicon.ico">
|
<link rel="shortcut icon" href="/images/favicon.ico">
|
||||||
<link rel="stylesheet" href="/stylesheets/app.css">
|
<link rel="stylesheet" href="/stylesheets/app.css">
|
||||||
<script src="/lib/ace/ace.js"></script>
|
<script src="/lib/ace/ace.js"></script>
|
||||||
|
|
||||||
<!--[if IE 9]> <script src="/javascripts/vendor_with_box2d.js"></script> <![endif]-->
|
<!--[if IE 9]> <script src="/javascripts/vendor_with_box2d.js"></script> <![endif]-->
|
||||||
<!--[if !IE]><!--> <script src="/javascripts/vendor.js"></script> <!--<![endif]-->
|
<!--[if !IE]><!--> <script src="/javascripts/vendor.js"></script> <!--<![endif]-->
|
||||||
<script src="/javascripts/app.js"></script> <!-- it's all Backbone! -->
|
<script src="/javascripts/app.js"></script> <!-- it's all Backbone! -->
|
||||||
|
@ -113,7 +112,14 @@
|
||||||
<header class="header-container" id="header-container"></header>
|
<header class="header-container" id="header-container"></header>
|
||||||
|
|
||||||
<div id="page-container"></div>
|
<div id="page-container"></div>
|
||||||
|
<!--
|
||||||
|
<div class="antiscroll-wrap">
|
||||||
|
<div class="antiscroll-inner">
|
||||||
|
<div id="page-container"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
|
||||||
<div id="modal-wrapper"></div>
|
<div id="modal-wrapper"></div>
|
||||||
|
|
||||||
<!-- begin google api/plus code -->
|
<!-- begin google api/plus code -->
|
||||||
|
|
|
@ -101,6 +101,8 @@ module.exports = class Simulator extends CocoClass
|
||||||
handleTaskResultsTransferSuccess: (result) =>
|
handleTaskResultsTransferSuccess: (result) =>
|
||||||
console.log "Task registration result: #{JSON.stringify result}"
|
console.log "Task registration result: #{JSON.stringify result}"
|
||||||
@trigger 'statusUpdate', 'Results were successfully sent back to server!'
|
@trigger 'statusUpdate', 'Results were successfully sent back to server!'
|
||||||
|
simulatedBy = parseInt($('#simulated-by-you').text(), 10) + 1
|
||||||
|
$('#simulated-by-you').text(simulatedBy)
|
||||||
|
|
||||||
handleTaskResultsTransferError: (error) =>
|
handleTaskResultsTransferError: (error) =>
|
||||||
@trigger 'statusUpdate', 'There was an error sending the results back to the server.'
|
@trigger 'statusUpdate', 'There was an error sending the results back to the server.'
|
||||||
|
|
|
@ -87,7 +87,7 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr
|
||||||
campaign_player_created: "Player-Created"
|
campaign_player_created: "Player-Created"
|
||||||
campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
campaign_player_created_description: "... in which you battle against the creativity of your fellow <a href=\"/contribute#artisan\">Artisan Wizards</a>."
|
||||||
level_difficulty: "Difficulty: "
|
level_difficulty: "Difficulty: "
|
||||||
play_as: "Play As "
|
play_as: "Play As"
|
||||||
spectate: "Spectate"
|
spectate: "Spectate"
|
||||||
|
|
||||||
contact:
|
contact:
|
||||||
|
|
|
@ -50,4 +50,4 @@ module.exports =
|
||||||
uk: require './uk' # українська мова, Ukranian
|
uk: require './uk' # українська мова, Ukranian
|
||||||
hi: require './hi' # मानक हिन्दी, Hindi
|
hi: require './hi' # मानक हिन्दी, Hindi
|
||||||
ur: require './ur' # اُردُو, Urdu
|
ur: require './ur' # اُردُو, Urdu
|
||||||
'ms-BA': require './ms-BA' # Bahasa Melayu, Bahasa Malaysia
|
ms: require './ms' # Bahasa Melayu, Bahasa Malaysia
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa Malaysia", translation:
|
module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa Malaysia", translation:
|
||||||
common:
|
common:
|
||||||
# loading: "Loading..."
|
loading: "Pemuatan..."
|
||||||
# saving: "Saving..."
|
saving: "Menyimpan data..."
|
||||||
# sending: "Sending..."
|
sending: "Menghantar maklumat.."
|
||||||
cancel: "Batal"
|
cancel: "Batal"
|
||||||
# save: "Save"
|
save: "Simpan data"
|
||||||
# delay_1_sec: "1 second"
|
# delay_1_sec: "1 second"
|
||||||
# delay_3_sec: "3 seconds"
|
# delay_3_sec: "3 seconds"
|
||||||
# delay_5_sec: "5 seconds"
|
# delay_5_sec: "5 seconds"
|
||||||
# manual: "Manual"
|
# manual: "Manual"
|
||||||
# fork: "Fork"
|
# fork: "Fork"
|
||||||
play: "bermain"
|
play: "Mula"
|
||||||
|
|
||||||
modal:
|
modal:
|
||||||
close: "Tutup"
|
close: "Tutup"
|
||||||
|
@ -20,36 +20,36 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
|
||||||
page_not_found: "Halaman tidak ditemui"
|
page_not_found: "Halaman tidak ditemui"
|
||||||
|
|
||||||
nav:
|
nav:
|
||||||
play: "bermain"
|
play: "Mula"
|
||||||
# editor: "Editor"
|
# editor: "Editor"
|
||||||
# blog: "Blog"
|
# blog: "Blog"
|
||||||
# forum: "Forum"
|
# forum: "Forum"
|
||||||
# admin: "Admin"
|
# admin: "Admin"
|
||||||
home: "Halaman"
|
home: "Halaman"
|
||||||
contribute: "Sumbangan"
|
contribute: "Sumbangan"
|
||||||
legal: "Undang- undang"
|
legal: "Undang-undang"
|
||||||
about: "Tentang"
|
about: "Tentang"
|
||||||
contact: "Hubungi"
|
contact: "Hubungi"
|
||||||
# twitter_follow: "Follow"
|
twitter_follow: "Ikuti"
|
||||||
# employers: "Employers"
|
employers: "Majikan"
|
||||||
|
|
||||||
# versions:
|
versions:
|
||||||
# save_version_title: "Save New Version"
|
save_version_title: "Simpan versi baru"
|
||||||
# new_major_version: "New Major Version"
|
new_major_version: "Versi utama yang baru"
|
||||||
# cla_prefix: "To save changes, first you must agree to our"
|
cla_prefix: "Untuk menyimpan pengubahsuaian, anda perlu setuju dengan"
|
||||||
# cla_url: "CLA"
|
# cla_url: "CLA"
|
||||||
# cla_suffix: "."
|
# cla_suffix: "."
|
||||||
# cla_agree: "I AGREE"
|
cla_agree: "SAYA SETUJU"
|
||||||
|
|
||||||
login:
|
login:
|
||||||
sign_up: "Buat Akaun"
|
sign_up: "Buat Akaun"
|
||||||
log_in: "Log Masuk"
|
log_in: "Log Masuk"
|
||||||
log_out: "Log Keluar"
|
log_out: "Log Keluar"
|
||||||
recover: "perbaharui akaun"
|
recover: "Perbaharui Akaun"
|
||||||
|
|
||||||
# recover:
|
recover:
|
||||||
# recover_account_title: "Recover Account"
|
recover_account_title: "Dapatkan Kembali Akaun"
|
||||||
# send_password: "Send Recovery Password"
|
send_password: "Hantar kembali kata laluan"
|
||||||
|
|
||||||
signup:
|
signup:
|
||||||
# create_account_title: "Create Account to Save Progress"
|
# create_account_title: "Create Account to Save Progress"
|
||||||
|
@ -57,17 +57,17 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
|
||||||
email_announcements: "Terima pengesahan melalui Emel"
|
email_announcements: "Terima pengesahan melalui Emel"
|
||||||
coppa: "13+ atau bukan- USA"
|
coppa: "13+ atau bukan- USA"
|
||||||
coppa_why: "(Kenapa?)"
|
coppa_why: "(Kenapa?)"
|
||||||
creating: "Membuat Akaun..."
|
creating: "Sedang membuat Akaun..."
|
||||||
sign_up: "Daftar"
|
sign_up: "Daftar"
|
||||||
log_in: "log masuk"
|
log_in: "Log Masuk"
|
||||||
|
|
||||||
# home:
|
home:
|
||||||
# slogan: "Learn to Code JavaScript by Playing a Game"
|
slogan: "Belajar Kod JavaScript Dengan Permainan"
|
||||||
# no_ie: "CodeCombat does not run in Internet Explorer 9 or older. Sorry!"
|
no_ie: "CodeCombat tidak berfungsi dalam Internet Explorer 9 dan terdahulu. Maaf!"
|
||||||
# no_mobile: "CodeCombat wasn't designed for mobile devices and may not work!"
|
no_mobile: "CodeCombat tidak dibangunkan untuk telefon mudah-alih dan tablet dan tidak akan berfungsi!"
|
||||||
# play: "Play"
|
play: "Mula"
|
||||||
# old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!"
|
old_browser: "Uh oh, browser anda terlalu lama untuk CodeCombat berfungsi. Maaf!"
|
||||||
# old_browser_suffix: "You can try anyway, but it probably won't work."
|
old_browser_suffix: "Anda boleh mencuba, tapi mungkin ia tidak akan berfungsi."
|
||||||
# campaign: "Campaign"
|
# campaign: "Campaign"
|
||||||
# for_beginners: "For Beginners"
|
# for_beginners: "For Beginners"
|
||||||
# multiplayer: "Multiplayer"
|
# multiplayer: "Multiplayer"
|
||||||
|
@ -90,23 +90,23 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
|
||||||
# play_as: "Play As "
|
# play_as: "Play As "
|
||||||
# spectate: "Spectate"
|
# spectate: "Spectate"
|
||||||
|
|
||||||
# contact:
|
contact:
|
||||||
# contact_us: "Contact CodeCombat"
|
contact_us: "Hubungi CodeCombat"
|
||||||
# welcome: "Good to hear from you! Use this form to send us email. "
|
welcome: "Kami suka mendengar dari anda! Gunakan form ini dan hantar kami emel. "
|
||||||
# contribute_prefix: "If you're interested in contributing, check out our "
|
contribute_prefix: "Jikalau anda berasa besar hati untuk menyumbang, sila lihat "
|
||||||
# contribute_page: "contribute page"
|
contribute_page: "laman kami untuk menyumbang"
|
||||||
# contribute_suffix: "!"
|
# contribute_suffix: "!"
|
||||||
# forum_prefix: "For anything public, please try "
|
forum_prefix: "Untuk perkara lain, sila cuba "
|
||||||
# forum_page: "our forum"
|
forum_page: "forum kami"
|
||||||
# forum_suffix: " instead."
|
# forum_suffix: "."
|
||||||
# send: "Send Feedback"
|
send: "Hantar Maklumbalas"
|
||||||
|
|
||||||
diplomat_suggestion:
|
diplomat_suggestion:
|
||||||
# title: "Help translate CodeCombat!"
|
title: "Kami perlu menterjemahkan CodeCombat!"
|
||||||
# sub_heading: "We need your language skills."
|
sub_heading: "Kami memerlukan kemahiran bahasa anda."
|
||||||
pitch_body: "We develop CodeCombat in English, but we already have players all over the world. Many of them want to play in Bahasa Melayu but don't speak English, so if you can speak both, please consider signing up to be a Diplomat and help translate both the CodeCombat website and all the levels into Bahasa Melayu."
|
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: "Until we can translate everything into Bahasa Melayu, you'll see English when Bahasa Melayu isn't available."
|
missing_translations: "Sehingga kami dalam menterjemahkan kesemua kepada Bahasa Melayu, anda akan melihat Inggeris apabila Bahasa Melayu tiada dalam penterjemahan."
|
||||||
# learn_more: "Learn more about being a Diplomat"
|
learn_more: "Ketahui lebih lanjut untuk menjadi ahli Diplomat"
|
||||||
# subscribe_as_diplomat: "Subscribe as a Diplomat"
|
# subscribe_as_diplomat: "Subscribe as a Diplomat"
|
||||||
|
|
||||||
# wizard_settings:
|
# wizard_settings:
|
||||||
|
@ -151,21 +151,21 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
|
||||||
# saved: "Changes Saved"
|
# saved: "Changes Saved"
|
||||||
# password_mismatch: "Password does not match."
|
# password_mismatch: "Password does not match."
|
||||||
|
|
||||||
# account_profile:
|
account_profile:
|
||||||
# edit_settings: "Edit Settings"
|
# edit_settings: "Edit Settings"
|
||||||
# profile_for_prefix: "Profile for "
|
profile_for_prefix: "Profil untuk "
|
||||||
# profile_for_suffix: ""
|
# profile_for_suffix: ""
|
||||||
# profile: "Profile"
|
profile: "Profil"
|
||||||
# user_not_found: "No user found. Check the URL?"
|
user_not_found: "Pengguna tiada. Semak kembali URL?"
|
||||||
# gravatar_not_found_mine: "We couldn't find your profile associated with:"
|
gravatar_not_found_mine: "Kami tidak dapat mencari profil anda yang mengenai dengan:"
|
||||||
# gravatar_not_found_email_suffix: "."
|
# gravatar_not_found_email_suffix: "."
|
||||||
# gravatar_signup_prefix: "Sign up at "
|
gravatar_signup_prefix: "Daftar di "
|
||||||
# gravatar_signup_suffix: " to get set up!"
|
gravatar_signup_suffix: " untuk mula!"
|
||||||
# gravatar_not_found_other: "Alas, there's no profile associated with this person's email address."
|
# gravatar_not_found_other: "Alas, there's no profile associated with this person's email address."
|
||||||
# gravatar_contact: "Contact"
|
gravatar_contact: "Hubungi"
|
||||||
# gravatar_websites: "Websites"
|
gravatar_websites: "Lelaman"
|
||||||
# gravatar_accounts: "As Seen On"
|
# gravatar_accounts: "Juga didapati di"
|
||||||
# gravatar_profile_link: "Full Gravatar Profile"
|
gravatar_profile_link: "Profil Penuh Gravatar"
|
||||||
|
|
||||||
# play_level:
|
# play_level:
|
||||||
# level_load_error: "Level could not be loaded: "
|
# level_load_error: "Level could not be loaded: "
|
||||||
|
@ -287,49 +287,49 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
|
||||||
# edit_article_title: "Edit Article"
|
# edit_article_title: "Edit Article"
|
||||||
|
|
||||||
general:
|
general:
|
||||||
# and: "and"
|
and: "dan"
|
||||||
name: "Nama"
|
name: "Nama"
|
||||||
# body: "Body"
|
# body: "Body"
|
||||||
# version: "Version"
|
version: "Versi"
|
||||||
# commit_msg: "Commit Message"
|
commit_msg: "Mesej Commit"
|
||||||
# history: "History"
|
# history: "History"
|
||||||
# version_history_for: "Version History for: "
|
# version_history_for: "Version History for: "
|
||||||
# result: "Result"
|
result: "Keputusan"
|
||||||
# results: "Results"
|
results: "Keputusan-keputusan"
|
||||||
# description: "Description"
|
description: "Deskripsi"
|
||||||
or: "atau"
|
or: "atau"
|
||||||
email: "Emel"
|
email: "Emel"
|
||||||
# password: "Password"
|
password: "Kata Laluan"
|
||||||
message: "Mesej"
|
message: "Mesej"
|
||||||
# code: "Code"
|
code: "Kod"
|
||||||
# ladder: "Ladder"
|
ladder: "Tangga"
|
||||||
# when: "When"
|
when: "Bila"
|
||||||
# opponent: "Opponent"
|
opponent: "Penentang"
|
||||||
# rank: "Rank"
|
# rank: "Rank"
|
||||||
# score: "Score"
|
score: "Mata"
|
||||||
# win: "Win"
|
win: "Menang"
|
||||||
# loss: "Loss"
|
# loss: "Kalah"
|
||||||
# tie: "Tie"
|
tie: "Seri"
|
||||||
# easy: "Easy"
|
# easy: "Easy"
|
||||||
# medium: "Medium"
|
# medium: "Medium"
|
||||||
# hard: "Hard"
|
# hard: "Hard"
|
||||||
|
|
||||||
# about:
|
about:
|
||||||
# who_is_codecombat: "Who is CodeCombat?"
|
who_is_codecombat: "Siapa adalah CodeCombat?"
|
||||||
# why_codecombat: "Why CodeCombat?"
|
why_codecombat: "Kenapa CodeCombat?"
|
||||||
# who_description_prefix: "together started CodeCombat in 2013. We also created "
|
who_description_prefix: "bersama memulai CodeCombat in 2013. Kami juga membuat (mengaturcara) "
|
||||||
# who_description_suffix: "in 2008, growing it to the #1 web and iOS application for learning to write Chinese and Japanese characters."
|
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: "Now it's time to teach people to write code."
|
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_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_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: "That's what programming is about. It's gotta be fun. Not fun like"
|
why_paragraph_3_prefix: "Itulah semua tentang pengaturcaraan. Ia harus membuat anda gembira dan rasa berpuas hati. Tidak seperti"
|
||||||
# why_paragraph_3_italic: "yay a badge"
|
why_paragraph_3_italic: "yay satu badge"
|
||||||
# why_paragraph_3_center: "but fun like"
|
# why_paragraph_3_center: "tapi bersukaria seperti"
|
||||||
# why_paragraph_3_italic_caps: "NO MOM I HAVE TO FINISH THE LEVEL!"
|
why_paragraph_3_italic_caps: "TIDAK MAK SAYA PERLU HABISKAN LEVEL!"
|
||||||
# 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_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_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_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: "And hey, it's free. "
|
why_ending: "Dan ia adalah percuma! "
|
||||||
# why_ending_url: "Start wizarding now!"
|
why_ending_url: "Mulalah bermain sekarang!"
|
||||||
# george_description: "CEO, business guy, web designer, game designer, and champion of beginning programmers everywhere."
|
# 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."
|
# 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."
|
# nick_description: "Programming wizard, eccentric motivation mage, and upside-down experimenter. Nick can do anything and chooses to build CodeCombat."
|
|
@ -66,12 +66,12 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
|
||||||
no_ie: "CodeCombat nie działa na Internet Explorer 9 lub starszym. Przepraszamy!"
|
no_ie: "CodeCombat nie działa na Internet Explorer 9 lub starszym. Przepraszamy!"
|
||||||
no_mobile: "CodeCombat nie został zaprojektowany dla użądzeń przenośnych więc może nie działać!"
|
no_mobile: "CodeCombat nie został zaprojektowany dla użądzeń przenośnych więc może nie działać!"
|
||||||
play: "Graj"
|
play: "Graj"
|
||||||
# old_browser: "Uh oh, your browser is too old to run CodeCombat. Sorry!"
|
old_browser: "Wygląda na to, że twoja przeglądarka jest zbyt stara, by obsłużyć CodeCombat. Wybacz!"
|
||||||
# old_browser_suffix: "You can try anyway, but it probably won't work."
|
old_browser_suffix: "Możesz spróbowac mimo tego, ale prawdopodobnie gra nie będzie działać."
|
||||||
# campaign: "Campaign"
|
campaign: "Kampania"
|
||||||
# for_beginners: "For Beginners"
|
for_beginners: "Dla początkujących"
|
||||||
# multiplayer: "Multiplayer"
|
# multiplayer: "Multiplayer"
|
||||||
# for_developers: "For Developers"
|
for_developers: "Dla developerów"
|
||||||
|
|
||||||
play:
|
play:
|
||||||
choose_your_level: "Wybierz poziom"
|
choose_your_level: "Wybierz poziom"
|
||||||
|
@ -88,7 +88,7 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
|
||||||
campaign_player_created_description: "... w których walczysz przeciwko dziełom <a href=\"/contribute#artisan\">Czarodziejów Rękodzielnictwa</a>"
|
campaign_player_created_description: "... w których walczysz przeciwko dziełom <a href=\"/contribute#artisan\">Czarodziejów Rękodzielnictwa</a>"
|
||||||
level_difficulty: "Poziom trudności: "
|
level_difficulty: "Poziom trudności: "
|
||||||
play_as: "Graj jako "
|
play_as: "Graj jako "
|
||||||
# spectate: "Spectate"
|
spectate: "Oglądaj"
|
||||||
|
|
||||||
contact:
|
contact:
|
||||||
contact_us: "Kontakt z CodeCombat"
|
contact_us: "Kontakt z CodeCombat"
|
||||||
|
@ -540,16 +540,16 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
|
||||||
warmup: "Rozgrzewka"
|
warmup: "Rozgrzewka"
|
||||||
# vs: "VS"
|
# vs: "VS"
|
||||||
|
|
||||||
# multiplayer_launch:
|
multiplayer_launch:
|
||||||
# introducing_dungeon_arena: "Introducing Dungeon Arena"
|
introducing_dungeon_arena: "Oto Dungeon Arena"
|
||||||
# new_way: "March 17, 2014: The new way to compete with code."
|
new_way: "17. marca 2014: Nowy sposób, by współzawodniczyć dzięki programowaniu."
|
||||||
# to_battle: "To Battle, Developers!"
|
to_battle: "Do broni, developerzy!"
|
||||||
# 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: "Wiesz, jak programować? Super. Jesteś współczesnym czarodziejem. Czy nie najwyższy czas, aby użyć swoich mocy, by dowodzić jednostkami w epickiej batalii? I nie mamy tutaj na myśli robotów."
|
||||||
# arenas_are_here: "CodeCombat head-to-head multiplayer arenas are here."
|
arenas_are_here: "Areny wieloosobowych potyczek CodeCombat właśnie nastały."
|
||||||
# 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"
|
ladder_explanation: "Wybierz swoich herosów, ulepsz swą armię ludzi lub ogrów i wespnij się po pokonanych Czarodziejach, by osiągnąć szczyty rankingów - wówczas, wyzwij swoich przyjaciół w naszych wspaniałych, asynchronicznych arenach programowania multiplayer. Jeśli czujesz w sobie moc twórczą, możesz nawet"
|
||||||
# fork_our_arenas: "fork our arenas"
|
fork_our_arenas: "forkować nasze areny"
|
||||||
# create_worlds: "and create your own worlds."
|
create_worlds: "i tworzyć swoje własne światy."
|
||||||
# javascript_rusty: "JavaScript a bit rusty? Don't worry; there's a"
|
javascript_rusty: "JavaScript wyleciała ci z głowy? Nie martw się, czeka na ciebie"
|
||||||
# tutorial: "tutorial"
|
tutorial: "samouczek"
|
||||||
# new_to_programming: ". New to programming? Hit our beginner campaign to skill up."
|
new_to_programming: ". Jesteś nowy w świecie programowania? Zagraj w naszą kampanię dla początkujących, aby zyskać nowe umiejętności."
|
||||||
# so_ready: "I Am So Ready for This"
|
so_ready: "Już nie mogę się doczekać"
|
||||||
|
|
|
@ -315,26 +315,26 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
|
||||||
hard: "Сложно"
|
hard: "Сложно"
|
||||||
|
|
||||||
about:
|
about:
|
||||||
who_is_codecombat: "Кто есть CodeCombat?"
|
who_is_codecombat: "Кто стоит за CodeCombat?"
|
||||||
why_codecombat: "Почему CodeCombat?"
|
why_codecombat: "Почему CodeCombat?"
|
||||||
who_description_prefix: "вместе начали CodeCombat in 2013. Также мы создали "
|
who_description_prefix: "вместе начали CodeCombat в 2013 году. Также мы создали "
|
||||||
who_description_suffix: "в 2008, вывели его на первую строчку среди web и iOS приложений для обучения письму китайскими и японскими иероглифами."
|
who_description_suffix: "в 2008 году, вывели его на первую строчку среди web и iOS приложений для обучения письму китайскими и японскими иероглифами."
|
||||||
who_description_ending: "Теперь пришло время научить людей написанию кода."
|
who_description_ending: "Теперь пришло время научить людей написанию кода."
|
||||||
why_paragraph_1: "При создании Skritter, Джордж не знал, как программировать и постоянно расстраивался из-за того, что не мог реализовать свои идеи. После этого он пытался учиться, но уроки были слишком медленными. Его сосед по дому, желая переквалифицироваться и прекратить преподавать, пробовал Codecademy, но \"наскучивало.\" Каждую неделю другой друг начинал Codecademy, затем бросал. Мы поняли, что это была та же проблема, которую мы решали со Skritter: люди получают навык через медленные, интенсивные уроки, когда то, что им нужно - быстрая, обширная практика. Мы знаем, как это исправить."
|
why_paragraph_1: "При создании Skritter, Джордж не знал, как программировать и постоянно расстраивался из-за того, что не мог реализовать свои идеи. После этого он пытался учиться, но уроки были слишком медленными. Его сосед, желая переквалифицироваться и прекратить преподавать, пробовал Codecademy, но \"потерял интерес.\" Каждую неделю очередной товарищ начинал Codecademy, затем бросал. Мы поняли, что это была та же проблема, которую мы решили со Skritter: люди получают навык через медленные, интенсивные уроки, в то время как то, что им нужно - быстрая, обширная практика. Мы знаем, как это исправить."
|
||||||
why_paragraph_2: "Нужно научиться программировать? Вам не нужны уроки. Вам нужно написать много кода и прекрасно провести время, делая это."
|
why_paragraph_2: "Нужно научиться программировать? Вам не нужны уроки. Вам нужно написать много кода и прекрасно провести время, делая это."
|
||||||
why_paragraph_3_prefix: "Вот, о чём программирование. Это должно быть весело. Не вроде"
|
why_paragraph_3_prefix: "Вот где программирование. Это должно быть весело. Не забавно, вроде"
|
||||||
why_paragraph_3_italic: "вау, значок,"
|
why_paragraph_3_italic: "вау, значок,"
|
||||||
why_paragraph_3_center: "а"
|
why_paragraph_3_center: "а"
|
||||||
why_paragraph_3_italic_caps: "НЕТ, МАМ, Я ДОЛЖЕН ПРОЙТИ УРОВЕНЬ!"
|
why_paragraph_3_italic_caps: "НЕТ, МАМ, Я ДОЛЖЕН ПРОЙТИ УРОВЕНЬ!"
|
||||||
why_paragraph_3_suffix: "Вот, почему CodeCombat - мультиплеерная игра, а не курс уроков в игровой форме. Мы не остановимся, пока вы не сможете остановиться--в данном случае, это хорошо."
|
why_paragraph_3_suffix: "Вот, почему CodeCombat - мультиплеерная игра, а не курс уроков в игровой форме. Мы не остановимся, пока вы не потеряете голову - в данном случае, это хорошо."
|
||||||
why_paragraph_4: "Если вы собираетесь увлечься какой-нибудь игрой, увлекитесь этой и станьте одним из волшебников века информационных технологий."
|
why_paragraph_4: "Если вы собираетесь увлечься какой-нибудь игрой, увлекитесь этой и станьте одним из волшебников века информационных технологий."
|
||||||
why_ending: "Эй, это бесплатно. "
|
why_ending: "И да, это бесплатно. "
|
||||||
why_ending_url: "Начни волшебство сейчас!"
|
why_ending_url: "Начни волшебство сейчас!"
|
||||||
george_description: "Генеральный директор, бизнес-парень, веб-дизайнер, геймдизайнер, и чемпион начинающих программистов во всём мире."
|
george_description: "Генеральный директор, бизнес-парень, веб-дизайнер, геймдизайнер и чемпион начинающих программистов во всём мире."
|
||||||
scott_description: "Экстраординарный программист, архитектор программного обеспечения, кухонный волшебник, и мастер финансов. Скотт является разумным."
|
scott_description: "Экстраординарный программист, архитектор программного обеспечения, кухонный волшебник и мастер финансов. Скотт рассудителен."
|
||||||
nick_description: "Маг программирования, эксцентрично мотивированный волшебник, и экспериментатор вверх ногами. Ник может делать всё и хочет построить CodeCombat."
|
nick_description: "Маг программирования, мудрец эксцентричного мотивирования и чудаковатый экспериментатор. Ник может всё и хочет построить CodeCombat."
|
||||||
jeremy_description: "Маг клиентской поддержки, юзабилити-тестер, и организатор сообщества; вы наверняка уже говорили с Джереми."
|
jeremy_description: "Маг клиентской поддержки, юзабилити-тестер, и организатор сообщества; вы наверняка уже говорили с Джереми."
|
||||||
michael_description: "Программист, сисадмин и непризнанный технический гений, Михаэль является лицом, поддерживающим наши серверы онлайн."
|
michael_description: "Программист, сисадмин и непризнанный технический гений, Михаэль является лицом, поддерживающим наши серверы в доступности."
|
||||||
glen_description: "Программист и страстный разработчик игр, с мотивацией сделать этот мир лучше путём разработки действительно значащих вещей. Слова \"невозможно\" нет в его словаре. Освоение новых навыков его развлечение!"
|
glen_description: "Программист и страстный разработчик игр, с мотивацией сделать этот мир лучше путём разработки действительно значащих вещей. Слова \"невозможно\" нет в его словаре. Освоение новых навыков его развлечение!"
|
||||||
|
|
||||||
legal:
|
legal:
|
||||||
|
@ -343,26 +343,26 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
|
||||||
opensource_description_prefix: "Посмотрите "
|
opensource_description_prefix: "Посмотрите "
|
||||||
github_url: "наш GitHub"
|
github_url: "наш GitHub"
|
||||||
opensource_description_center: "и посодействуйте, если вам понравилось! CodeCombat построен на десятках проектов с открытым кодом, и мы любим их. Загляните в "
|
opensource_description_center: "и посодействуйте, если вам понравилось! CodeCombat построен на десятках проектов с открытым кодом, и мы любим их. Загляните в "
|
||||||
archmage_wiki_url: "нашу вики Архимагов"
|
archmage_wiki_url: "наш вики-портал для Архимагов"
|
||||||
opensource_description_suffix: ", чтобы увидеть список программного обеспечения, делающего игру возможной."
|
opensource_description_suffix: ", чтобы увидеть список программного обеспечения, делающего игру возможной."
|
||||||
practices_title: "Лучшие уважаемые практики"
|
practices_title: "Почтительные лучшие практики"
|
||||||
practices_description: "Это наши обещания тебе, игрок, менее юридическим языком."
|
practices_description: "Это наши обещания тебе, игроку, менее юридическим языком."
|
||||||
privacy_title: "Конфиденциальность"
|
privacy_title: "Конфиденциальность"
|
||||||
privacy_description: "Мы не будем продавать какой-либо личной информации. Мы намерены заработать деньги с помощью рекрутинга в конечном счёте, но будьте уверены, мы не будем распространять вашу личную информацию заинтересованным компаниям без вашего явного согласия."
|
privacy_description: "Мы не будем продавать какой-либо личной информации. Мы намерены заработать деньги с помощью рекрутинга в конечном счёте, но будьте уверены, мы не будем распространять вашу личную информацию заинтересованным компаниям без вашего явного согласия."
|
||||||
security_title: "Безопасность"
|
security_title: "Безопасность"
|
||||||
security_description: "Мы стремимся сохранить вашу личную информацию в безопасности. Как проект с открытым исходным кодом, наш сайт в свободном доступе для всех для пересмотра и совершенствования систем безопасности."
|
security_description: "Мы стремимся сохранить вашу личную информацию в безопасности. Как проект с открытым исходным кодом, наш сайт открыт для всех в вопросах пересмотра и совершенствования систем безопасности."
|
||||||
email_title: "Email"
|
email_title: "Email"
|
||||||
email_description_prefix: "Мы не наводним вас спамом. Через"
|
email_description_prefix: "Мы не наводним вас спамом. Через"
|
||||||
email_settings_url: "ваши email настройки"
|
email_settings_url: "ваши email настройки"
|
||||||
email_description_suffix: "или через ссылки в email-ах, которые мы отправляем, вы можете изменить предпочтения и легко отписаться в любой момент."
|
email_description_suffix: "или через ссылки в email-ах, которые мы отправляем, вы можете изменить предпочтения и легко отписаться в любой момент."
|
||||||
cost_title: "Стоимость"
|
cost_title: "Стоимость"
|
||||||
cost_description: "В настоящее время, CodeCombat 100% бесплатен! Одной из наших главных целей является сохранить его таким, так, чтобы как можно больше людей могли играть, независимо от места в жизни. Если небо потемнеет, мы, возможно, введём подписки, возможно, только на некоторый контент, но нам не хотелось бы. Если повезёт, мы сможем поддерживать компанию, используя"
|
cost_description: "В настоящее время, CodeCombat 100% бесплатен! Одной из наших главных целей является сохранить его таким, чтобы как можно больше людей могли играть, независимо от места в жизни. Если небо потемнеет, мы, возможно, введём подписки, возможно, только на некоторый контент, но нам не хотелось бы. Если повезёт, мы сможем поддерживать компанию, используя"
|
||||||
recruitment_title: "Рекрутинг"
|
recruitment_title: "Рекрутинг"
|
||||||
recruitment_description_prefix: "Здесь, в CodeCombat, вы собираетесь стать могущественным волшебником не только в игре, но и в реальной жизни."
|
recruitment_description_prefix: "Здесь, в CodeCombat, вы собираетесь стать могущественным волшебником не только в игре, но и в реальной жизни."
|
||||||
url_hire_programmers: "Никто не может нанять программистов достаточно быстро"
|
url_hire_programmers: "Никто не может нанять программистов достаточно быстро"
|
||||||
recruitment_description_suffix: "поэтому, как только вы улучшите свои навыки и будете согласны, мы начнём демонстрировать ваши лучшие программистские достижения тысячам работодателей, пускающих слюни на возможность нанять вас. Они платят нам немного, они платят вам"
|
recruitment_description_suffix: "поэтому, как только вы улучшите свои навыки и будете согласны, мы начнём демонстрировать ваши лучшие программистские достижения тысячам работодателей, пускающих слюни на возможность нанять вас. Они платят нам немного, они платят вам"
|
||||||
recruitment_description_italic: "много"
|
recruitment_description_italic: "много"
|
||||||
recruitment_description_ending: ", сайт остаётся бесплатным и все счастливы. Таков план."
|
recruitment_description_ending: "сайт остаётся бесплатным и все счастливы. Таков план."
|
||||||
copyrights_title: "Авторские права и лицензии"
|
copyrights_title: "Авторские права и лицензии"
|
||||||
contributor_title: "Лицензионное соглашение соавторов"
|
contributor_title: "Лицензионное соглашение соавторов"
|
||||||
contributor_description_prefix: "Все вклады, как на сайте, так и на нашем репозитории GitHub, подпадают под наше"
|
contributor_description_prefix: "Все вклады, как на сайте, так и на нашем репозитории GitHub, подпадают под наше"
|
||||||
|
@ -395,7 +395,7 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
|
||||||
rights_media: "Медиа (звуки, музыка) и любой другой творческий контент, созданный специально для этого уровня и не являющийся общедоступным при создании уровней."
|
rights_media: "Медиа (звуки, музыка) и любой другой творческий контент, созданный специально для этого уровня и не являющийся общедоступным при создании уровней."
|
||||||
rights_clarification: "Чтобы уточнить, всё, что становится доступным в Редакторе уровней для целей создания уровней под CC, в то время как контент, созданный с помощью Редактора уровней или загруженный в ходе создания уровней - нет."
|
rights_clarification: "Чтобы уточнить, всё, что становится доступным в Редакторе уровней для целей создания уровней под CC, в то время как контент, созданный с помощью Редактора уровней или загруженный в ходе создания уровней - нет."
|
||||||
nutshell_title: "В двух словах"
|
nutshell_title: "В двух словах"
|
||||||
nutshell_description: "Любые ресурсы, которые мы предоставляем в Редакторе уровней можно свободно использовать как вам нравится для создания уровней. Но мы оставляем за собой право ограничивать распространение уровней самих по себе (которые создаются на codecombat.com), чтобы за них могла взиматься плата в будущем, если это то, что в конечном итоге происходит."
|
nutshell_description: "Любые ресурсы, которые мы предоставляем в Редакторе уровней можно свободно использовать как вам нравится для создания уровней. Но мы оставляем за собой право ограничивать распространение уровней самих по себе (которые создаются на codecombat.com), чтобы за них могла взиматься плата в будущем, если до этого дойдёт."
|
||||||
canonical: "Английская версия этого документа является определяющей и канонической. Если есть какие-либо расхождения между переводами, документ на английском имеет приоритет."
|
canonical: "Английская версия этого документа является определяющей и канонической. Если есть какие-либо расхождения между переводами, документ на английском имеет приоритет."
|
||||||
|
|
||||||
contribute:
|
contribute:
|
||||||
|
|
|
@ -42,9 +42,9 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
cla_agree: "JAG GODKÄNNER"
|
cla_agree: "JAG GODKÄNNER"
|
||||||
|
|
||||||
login:
|
login:
|
||||||
sign_up: "Skapa Konto"
|
sign_up: "Skapa konto"
|
||||||
log_in: "Logga In"
|
log_in: "Logga in"
|
||||||
log_out: "Logga Ut"
|
log_out: "Logga ut"
|
||||||
recover: "glömt lösenord"
|
recover: "glömt lösenord"
|
||||||
|
|
||||||
recover:
|
recover:
|
||||||
|
@ -56,15 +56,15 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
description: "Det är gratis. Vi behöver bara lite information och sen är du redo att börja:"
|
description: "Det är gratis. Vi behöver bara lite information och sen är du redo att börja:"
|
||||||
email_announcements: "Mottag nyheter via e-post"
|
email_announcements: "Mottag nyheter via e-post"
|
||||||
coppa: "13+ eller ej i USA"
|
coppa: "13+ eller ej i USA"
|
||||||
coppa_why: "(Varför?)"
|
coppa_why: " (Varför?)"
|
||||||
creating: "Skapar Konto..."
|
creating: "Skapar konto..."
|
||||||
sign_up: "Skapa Konto"
|
sign_up: "Skapa konto"
|
||||||
log_in: "logga in med lösenord"
|
log_in: "logga in med lösenord"
|
||||||
|
|
||||||
home:
|
home:
|
||||||
slogan: "Lär dig att koda Javascript genom att spela ett spel."
|
slogan: "Lär dig att koda Javascript genom att spela ett spel."
|
||||||
no_ie: "CodeCombat fungerar tyvärr inte i IE8 eller äldre."
|
no_ie: "CodeCombat fungerar tyvärr inte i IE8 eller äldre."
|
||||||
no_mobile: "CodeCombat är inte designat för mobila enhter och kanske inte fungerar!"
|
no_mobile: "CodeCombat är inte designat för mobila enhter och fungerar kanske inte!"
|
||||||
play: "Spela"
|
play: "Spela"
|
||||||
old_browser: "Oj då, din webbläsare är för gammal för att köra CodeCombat. Förlåt!"
|
old_browser: "Oj då, din webbläsare är för gammal för att köra CodeCombat. Förlåt!"
|
||||||
old_browser_suffix: "Du kan försöka ändå, men det kommer nog inte fungera."
|
old_browser_suffix: "Du kan försöka ändå, men det kommer nog inte fungera."
|
||||||
|
@ -80,23 +80,23 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
adventurer_suffix: "."
|
adventurer_suffix: "."
|
||||||
campaign_beginner: "Nybörjarkampanj"
|
campaign_beginner: "Nybörjarkampanj"
|
||||||
campaign_beginner_description: "... i vilken du lär dig programmerandets magi."
|
campaign_beginner_description: "... i vilken du lär dig programmerandets magi."
|
||||||
campaign_dev: "Slumpmässig Svårare Nivå"
|
campaign_dev: "Slumpad svårare nivå"
|
||||||
campaign_dev_description: "... där du lär dig att hantera gränssnittet medan du gör något lite svårare."
|
campaign_dev_description: "... där du lär dig att hantera gränssnittet medan du gör något lite svårare."
|
||||||
campaign_multiplayer: "Flerspelararenor"
|
campaign_multiplayer: "Flerspelararenor"
|
||||||
campaign_multiplayer_description: "... i vilken du tävlar i kodande mot andra spelare"
|
campaign_multiplayer_description: "... i vilken du tävlar i kodande mot andra spelare"
|
||||||
campaign_player_created: "Spelarskapade"
|
campaign_player_created: "Spelarskapade"
|
||||||
campaign_player_created_description: "... i vilken du tävlar mot kreativiteten hos andra <a href=\"/contribute#artisan\">Hantverkartrollkarlar</a>."
|
campaign_player_created_description: "... i vilken du tävlar mot kreativiteten hos andra <a href=\"/contribute#artisan\">Hantverkare</a>."
|
||||||
level_difficulty: "Svårighetsgrad: "
|
level_difficulty: "Svårighetsgrad: "
|
||||||
play_as: "Spela som "
|
play_as: "Spela som "
|
||||||
spectate: "Titta på"
|
spectate: "Titta på"
|
||||||
|
|
||||||
contact:
|
contact:
|
||||||
contact_us: "Kontakta CodeCombat"
|
contact_us: "Kontakta CodeCombat"
|
||||||
welcome: "Kul att höra från dig! Använd formuläret för att skicka e-post till oss."
|
welcome: "Kul att höra från dig! Använd formuläret för att skicka e-post till oss. "
|
||||||
contribute_prefix: "Om du är intresserad av att bidra, koll in vår "
|
contribute_prefix: "Om du är intresserad av att bidra, koll in vår "
|
||||||
contribute_page: "bidragarsida"
|
contribute_page: "bidragarsida"
|
||||||
contribute_suffix: "!"
|
contribute_suffix: "!"
|
||||||
forum_prefix: "För någonting offentlig, var vänlig testa "
|
forum_prefix: "För någonting offentligt, var vänlig testa "
|
||||||
forum_page: "vårt forum"
|
forum_page: "vårt forum"
|
||||||
forum_suffix: " istället."
|
forum_suffix: " istället."
|
||||||
send: "Skicka Feedback"
|
send: "Skicka Feedback"
|
||||||
|
@ -124,40 +124,40 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
account_settings:
|
account_settings:
|
||||||
title: "Kontoinställningar"
|
title: "Kontoinställningar"
|
||||||
not_logged_in: "Logga in eller skapa ett konto för att ändra dina inställningar."
|
not_logged_in: "Logga in eller skapa ett konto för att ändra dina inställningar."
|
||||||
autosave: "Ändringar Sparas Automatiskt"
|
autosave: "Ändringar sparas automatiskt"
|
||||||
me_tab: "Jag"
|
me_tab: "Jag"
|
||||||
picture_tab: "Profilbild"
|
picture_tab: "Profilbild"
|
||||||
wizard_tab: "Trollkarl"
|
wizard_tab: "Trollkarl"
|
||||||
password_tab: "Lösenord"
|
password_tab: "Lösenord"
|
||||||
emails_tab: "E-postadresser"
|
emails_tab: "E-postadresser"
|
||||||
admin: "Administratör"
|
admin: "Administratör"
|
||||||
gravatar_select: "Välj ett Gravatar foto att använda"
|
gravatar_select: "Välj ett Gravatar-foto att använda"
|
||||||
gravatar_add_photos: "Lägg till miniatyrbilder och fotografier i ett Gravatar konto kopplat till din mail för att välja profilbild."
|
gravatar_add_photos: "Lägg till miniatyrbilder och fotografier i ett Gravatar-konto kopplat till din e-postadress för att välja profilbild."
|
||||||
gravatar_add_more_photos: "Lägg till mer fotografier till i ditt Gravatar konto för att använda dem här."
|
gravatar_add_more_photos: "Lägg till mer fotografier till i ditt Gravatar-konto för att använda dem här."
|
||||||
wizard_color: "Trollkarlens Klädfärg"
|
wizard_color: "Trollkarlens klädfärg"
|
||||||
new_password: "Nytt Lösenord"
|
new_password: "Nytt lösenord"
|
||||||
new_password_verify: "Verifiera"
|
new_password_verify: "Verifiera"
|
||||||
email_subscriptions: "E-post Prenumerationer"
|
email_subscriptions: "E-postsprenumerationer"
|
||||||
email_announcements: "Meddelanden"
|
email_announcements: "Meddelanden"
|
||||||
email_notifications: "Påminnelser"
|
email_notifications: "Påminnelser"
|
||||||
email_notifications_description: "Få periodiska påminnelser för ditt konto."
|
email_notifications_description: "Få periodiska påminnelser för ditt konto."
|
||||||
email_announcements_description: "Få e-post med de senaste nyheterna och utvecklingen på CodeCombat."
|
email_announcements_description: "Få e-post med de senaste nyheterna och utvecklingen på CodeCombat."
|
||||||
contributor_emails: "Bidragarmail"
|
contributor_emails: "E-post för bidragare"
|
||||||
contribute_prefix: "Vi söker mer folk som vill var med och hjälpa till! Kolla in "
|
contribute_prefix: "Vi söker mer folk som vill var med och hjälpa till! Kolla in "
|
||||||
contribute_page: "bidragarsida"
|
contribute_page: " bidragarsidan "
|
||||||
contribute_suffix: " tför att få veta mer."
|
contribute_suffix: " för att få veta mer."
|
||||||
email_toggle: "Växla Alla"
|
email_toggle: "Växla alla"
|
||||||
error_saving: "Ett Fel Uppstod Vid Sparningen"
|
error_saving: "Ett fel uppstod när ändringarna skulle sparas"
|
||||||
saved: "Ändringar Sparade"
|
saved: "Ändringar sparade"
|
||||||
password_mismatch: "De angivna lösenorden stämmer inte överens."
|
password_mismatch: "De angivna lösenorden stämmer inte överens."
|
||||||
|
|
||||||
account_profile:
|
account_profile:
|
||||||
edit_settings: "Ändra Inställningar"
|
edit_settings: "Ändra inställningar"
|
||||||
profile_for_prefix: "Profil för "
|
profile_for_prefix: "Profil för "
|
||||||
# profile_for_suffix: ""
|
# profile_for_suffix: ""
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
user_not_found: "Användaren du söker verkar inte finnas. Kolla adressen?"
|
user_not_found: "Användaren du söker verkar inte finnas. Stämmer adressen?"
|
||||||
gravatar_not_found_mine: "Vi kunde inte hitta en profil associerad med:"
|
gravatar_not_found_mine: "Vi kunde inte hitta en profil associerad med: "
|
||||||
# gravatar_not_found_email_suffix: "."
|
# gravatar_not_found_email_suffix: "."
|
||||||
gravatar_signup_prefix: "Registrera dig på "
|
gravatar_signup_prefix: "Registrera dig på "
|
||||||
gravatar_signup_suffix: " för att komma igång!"
|
gravatar_signup_suffix: " för att komma igång!"
|
||||||
|
@ -165,13 +165,13 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
gravatar_contact: "Kontakt"
|
gravatar_contact: "Kontakt"
|
||||||
gravatar_websites: "Hemsidor"
|
gravatar_websites: "Hemsidor"
|
||||||
# gravatar_accounts: "As Seen On"
|
# gravatar_accounts: "As Seen On"
|
||||||
gravatar_profile_link: "Hela Gravatar profilen"
|
gravatar_profile_link: "Hela Gravatar-profilen"
|
||||||
|
|
||||||
play_level:
|
play_level:
|
||||||
level_load_error: "Nivån kunde inte laddas: "
|
level_load_error: "Nivån kunde inte laddas: "
|
||||||
done: "Klar"
|
done: "Klar"
|
||||||
grid: "Rutnät"
|
grid: "Rutnät"
|
||||||
customize_wizard: "Finjustera Trollkarl"
|
customize_wizard: "Skräddarsy trollkarl"
|
||||||
home: "Hem"
|
home: "Hem"
|
||||||
guide: "Guide"
|
guide: "Guide"
|
||||||
multiplayer: "Flerspelareläge"
|
multiplayer: "Flerspelareläge"
|
||||||
|
@ -185,32 +185,32 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
# victory_title_prefix: ""
|
# victory_title_prefix: ""
|
||||||
victory_title_suffix: " Genomförd"
|
victory_title_suffix: " Genomförd"
|
||||||
victory_sign_up: "Registrera dig för att få uppdateringar"
|
victory_sign_up: "Registrera dig för att få uppdateringar"
|
||||||
victory_sign_up_poke: "Vill du ha de senaste nyheterna vi e-post? Skapa ett gratiskonto så håller vi dig informerad!"
|
victory_sign_up_poke: "Vill du ha de senaste nyheterna via e-post? Skapa ett gratiskonto så håller vi dig informerad!"
|
||||||
victory_rate_the_level: "Betygsätt nivån: "
|
victory_rate_the_level: "Betygsätt nivån: "
|
||||||
victory_rank_my_game: "Ranka min match"
|
victory_rank_my_game: "Ranka min match"
|
||||||
victory_ranking_game: "Skickar..."
|
victory_ranking_game: "Skickar..."
|
||||||
victory_return_to_ladder: "Gå tillbaka till stegen"
|
victory_return_to_ladder: "Gå tillbaka till stegen"
|
||||||
victory_play_next_level: "Spela Nästa Nivå"
|
victory_play_next_level: "Spela nästa nivå"
|
||||||
victory_go_home: "Gå Hem"
|
victory_go_home: "Gå hem"
|
||||||
victory_review: "Berätta mer!"
|
victory_review: "Berätta mer!"
|
||||||
victory_hour_of_code_done: "Är Du Klar?"
|
victory_hour_of_code_done: "Är du klar?"
|
||||||
victory_hour_of_code_done_yes: "Ja, jag är klar med min Hour of Code!"
|
victory_hour_of_code_done_yes: "Ja, jag är klar med min Hour of Code!"
|
||||||
multiplayer_title: "Flerspelarinställningar"
|
multiplayer_title: "Flerspelarinställningar"
|
||||||
multiplayer_link_description: "Dela den här länken med alla som du vill spela med."
|
multiplayer_link_description: "Dela den här länken med alla som du vill spela med."
|
||||||
multiplayer_hint_label: "Tips:"
|
multiplayer_hint_label: "Tips:"
|
||||||
multiplayer_hint: " Klicka på länken för att välja allt, tryck sedan på Cmd-C eller Ctrl-C för att kopiera länken."
|
multiplayer_hint: " Klicka på länken för att välja allt, tryck sedan på Cmd-C eller Ctrl-C för att kopiera länken."
|
||||||
multiplayer_coming_soon: "Mer flerspelarlägen kommer!"
|
multiplayer_coming_soon: "Fler flerspelarlägen kommer!"
|
||||||
guide_title: "Guide"
|
guide_title: "Guide"
|
||||||
tome_minion_spells: "Dina Soldaters Förmågor"
|
tome_minion_spells: "Dina soldaters förmågor"
|
||||||
tome_read_only_spells: "Skrivskyddade Förmågor"
|
tome_read_only_spells: "Skrivskyddade förmågor"
|
||||||
tome_other_units: "Andra Enheter"
|
tome_other_units: "Andra enheter"
|
||||||
tome_cast_button_castable: "Använd besvärjelse"
|
tome_cast_button_castable: "Använd besvärjelse"
|
||||||
tome_cast_button_casting: "Besvärjer"
|
tome_cast_button_casting: "Besvärjer"
|
||||||
tome_cast_button_cast: "Besvärjelse använd"
|
tome_cast_button_cast: "Besvärjelse använd"
|
||||||
tome_autocast_delay: "Autoanvändningsfördröjning"
|
tome_autocast_delay: "Autoanvändningsfördröjning"
|
||||||
tome_select_spell: "Välj en Förmåga"
|
tome_select_spell: "Välj en förmåga"
|
||||||
tome_select_a_thang: "Välj Någon för "
|
tome_select_a_thang: "Välj någon för "
|
||||||
tome_available_spells: "Tillgängliga Förmågor"
|
tome_available_spells: "Tillgängliga förmågor"
|
||||||
hud_continue: "Fortsätt (skift+mellanslag)"
|
hud_continue: "Fortsätt (skift+mellanslag)"
|
||||||
spell_saved: "Besvärjelse sparad"
|
spell_saved: "Besvärjelse sparad"
|
||||||
skip_tutorial: "Hoppa över (esc)"
|
skip_tutorial: "Hoppa över (esc)"
|
||||||
|
@ -237,7 +237,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
lg_title: "Senaste matcher"
|
lg_title: "Senaste matcher"
|
||||||
|
|
||||||
editor:
|
editor:
|
||||||
main_title: "CodeCombatredigerar"
|
main_title: "CodeCombatredigerare"
|
||||||
main_description: "Bygg dina egna banor, kampanjer, enheter och undervisningsinnehåll. Vi tillhandahåller alla verktyg du behöver!"
|
main_description: "Bygg dina egna banor, kampanjer, enheter och undervisningsinnehåll. Vi tillhandahåller alla verktyg du behöver!"
|
||||||
article_title: "Artikelredigerare"
|
article_title: "Artikelredigerare"
|
||||||
article_description: "Skriv artiklar som ger spelare en överblick över programmeringskoncept som kan användas i många olika nivåer och kampanjer."
|
article_description: "Skriv artiklar som ger spelare en överblick över programmeringskoncept som kan användas i många olika nivåer och kampanjer."
|
||||||
|
@ -298,7 +298,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
results: "Resultat"
|
results: "Resultat"
|
||||||
description: "Beskrivning"
|
description: "Beskrivning"
|
||||||
or: "eller"
|
or: "eller"
|
||||||
email: "Email"
|
email: "E-post"
|
||||||
password: "Lösenord"
|
password: "Lösenord"
|
||||||
message: "Meddelande"
|
message: "Meddelande"
|
||||||
code: "Kod"
|
code: "Kod"
|
||||||
|
@ -549,7 +549,7 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
||||||
ladder_explanation: "Välj dina hjältar, förtrolla dina människo- eller orch-arméer och klättra över besegrade trollkarlar, för att nå toppen av stegen - och utmana sedan dina vänner i våra ärorika, asynkrona flerspelararenor. Om du känner dig kreativ kan du till och med"
|
ladder_explanation: "Välj dina hjältar, förtrolla dina människo- eller orch-arméer och klättra över besegrade trollkarlar, för att nå toppen av stegen - och utmana sedan dina vänner i våra ärorika, asynkrona flerspelararenor. Om du känner dig kreativ kan du till och med"
|
||||||
fork_our_arenas: "förgrena våra arenor"
|
fork_our_arenas: "förgrena våra arenor"
|
||||||
create_worlds: "och skapa dina egna världer."
|
create_worlds: "och skapa dina egna världer."
|
||||||
javascript_rusty: "JavaScript lite rostigt? Oroa dig inte, det finns en"
|
javascript_rusty: "Är din JavaScript lite rostigt? Oroa dig inte, det finns en"
|
||||||
tutorial: "tutorial"
|
tutorial: "tutorial"
|
||||||
new_to_programming: ". Ny till programmering? Gå till vår nybörjarkampanj för att öva upp dina färdigheter."
|
new_to_programming: ". Ny på programmering? Gå till vår nybörjarkampanj för att öva upp dina färdigheter."
|
||||||
so_ready: "Jag är så redo för det här."
|
so_ready: "Jag är så redo för det här."
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
.column
|
.column
|
||||||
position: absolute
|
position: absolute
|
||||||
top: 0
|
top: 0
|
||||||
bottom: 0
|
bottom: 0
|
||||||
padding: 5px
|
padding: 5px
|
||||||
box-sizing: border-box
|
box-sizing: border-box
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
.treema
|
.treema
|
||||||
position: absolute
|
position: absolute
|
||||||
top: 70px
|
top: 80px
|
||||||
left: 0
|
left: 0
|
||||||
right: 10px
|
right: 10px
|
||||||
bottom: 0
|
bottom: 0
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
.treema
|
.treema
|
||||||
position: absolute
|
position: absolute
|
||||||
top: 70px
|
top: 75px
|
||||||
left: 10px
|
left: 10px
|
||||||
right: 0px
|
right: 0px
|
||||||
bottom: 0
|
bottom: 0
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
|
|
||||||
#thang-components-edit-view
|
#thang-components-edit-view
|
||||||
position: absolute
|
position: absolute
|
||||||
top: 130px
|
top: 200px
|
||||||
bottom: 0
|
bottom: 0
|
||||||
|
|
||||||
.treema-root
|
.treema-root
|
||||||
|
|
|
@ -13,7 +13,7 @@ block content
|
||||||
img#portrait.img-thumbnail
|
img#portrait.img-thumbnail
|
||||||
|
|
||||||
button.btn.btn-secondary#history-button(data-i18n="general.history") History
|
button.btn.btn-secondary#history-button(data-i18n="general.history") History
|
||||||
button.btn.btn-primary#save-button(data-toggle="coco-modal", data-target="modal/save_version", disabled=authorized === true ? undefined : "true") Save
|
button.btn.btn-primary#save-button(data-toggle="coco-modal", data-target="modal/save_version", data-i18n="common.save", disabled=authorized === true ? undefined : "true") Save
|
||||||
button.btn.btn-primary#revert-button(data-toggle="coco-modal", data-target="modal/revert", data-i18n="editor.revert", disabled=authorized === true ? undefined : "true") Revert
|
button.btn.btn-primary#revert-button(data-toggle="coco-modal", data-target="modal/revert", data-i18n="editor.revert", disabled=authorized === true ? undefined : "true") Revert
|
||||||
|
|
||||||
h3 Edit Thang Type: "#{thangType.attributes.name}"
|
h3 Edit Thang Type: "#{thangType.attributes.name}"
|
||||||
|
|
|
@ -13,6 +13,7 @@ block content
|
||||||
div.column.col-md-4
|
div.column.col-md-4
|
||||||
a(style="background-color: #{team.primaryColor}", data-team=team.id).play-button.btn.btn-danger.btn-block.btn-lg
|
a(style="background-color: #{team.primaryColor}", data-team=team.id).play-button.btn.btn-danger.btn-block.btn-lg
|
||||||
span(data-i18n="play.play_as") Play As
|
span(data-i18n="play.play_as") Play As
|
||||||
|
|
|
||||||
span= team.name
|
span= team.name
|
||||||
div.column.col-md-2
|
div.column.col-md-2
|
||||||
|
|
||||||
|
@ -54,6 +55,6 @@ block content
|
||||||
span#simulated-by-you= me.get('simulatedBy') || 0
|
span#simulated-by-you= me.get('simulatedBy') || 0
|
||||||
|
|
||||||
p.simulation-count
|
p.simulation-count
|
||||||
span(data-i18n="ladder.games_simulated_by") Games simulated for you:
|
span(data-i18n="ladder.games_simulated_for") Games simulated for you:
|
||||||
|
|
|
|
||||||
span#simulated-for-you= me.get('simulatedFor') || 0
|
span#simulated-for-you= me.get('simulatedFor') || 0
|
|
@ -27,7 +27,7 @@ div#columns.row
|
||||||
a(href="/play/level/#{level.get('slug') || level.id}/?team=#{team.otherTeam}&opponent=#{session.id}")
|
a(href="/play/level/#{level.get('slug') || level.id}/?team=#{team.otherTeam}&opponent=#{session.id}")
|
||||||
span(data-i18n="ladder.fight") Fight!
|
span(data-i18n="ladder.fight") Fight!
|
||||||
|
|
||||||
if !inTheTop
|
if !inTheTop && team.leaderboard.nearbySessions().length
|
||||||
tr(class="active")
|
tr(class="active")
|
||||||
td(colspan=4).ellipsis-row ...
|
td(colspan=4).ellipsis-row ...
|
||||||
for session in team.leaderboard.nearbySessions()
|
for session in team.leaderboard.nearbySessions()
|
||||||
|
|
|
@ -230,7 +230,9 @@ module.exports = class ThangsTabView extends View
|
||||||
@selectedExtantThangClickTime = new Date()
|
@selectedExtantThangClickTime = new Date()
|
||||||
treemaThang = _.find @thangsTreema.childrenTreemas, (treema) => treema.data.id is @selectedExtantThang.id
|
treemaThang = _.find @thangsTreema.childrenTreemas, (treema) => treema.data.id is @selectedExtantThang.id
|
||||||
if treemaThang
|
if treemaThang
|
||||||
treemaThang.select() unless treemaThang.isSelected()
|
if not treemaThang.isSelected()
|
||||||
|
treemaThang.select()
|
||||||
|
@thangsTreema.$el.scrollTop(@thangsTreema.$el.find('.treema-children .treema-selected')[0].offsetTop)
|
||||||
else if @addThangSprite
|
else if @addThangSprite
|
||||||
# We clicked on the background when we had an add Thang selected, so add it
|
# We clicked on the background when we had an add Thang selected, so add it
|
||||||
@addThang @addThangType, @addThangSprite.thang.pos
|
@addThang @addThangType, @addThangSprite.thang.pos
|
||||||
|
|
|
@ -38,7 +38,8 @@ module.exports = class RootView extends CocoView
|
||||||
location.hash = ''
|
location.hash = ''
|
||||||
location.hash = hash
|
location.hash = hash
|
||||||
@buildLanguages()
|
@buildLanguages()
|
||||||
|
#@$('.antiscroll-wrap').antiscroll() # not yet, buggy
|
||||||
|
|
||||||
afterRender: ->
|
afterRender: ->
|
||||||
super(arguments...)
|
super(arguments...)
|
||||||
@chooseTab(location.hash.replace('#','')) if location.hash
|
@chooseTab(location.hash.replace('#','')) if location.hash
|
||||||
|
|
|
@ -69,7 +69,7 @@ class LeaderboardData
|
||||||
level = "#{level.get('original')}.#{level.get('version').major}"
|
level = "#{level.get('original')}.#{level.get('version').major}"
|
||||||
success = (@myRank) =>
|
success = (@myRank) =>
|
||||||
promises.push $.ajax "/db/level/#{level}/leaderboard_rank?scoreOffset=#{@session.get('totalScore')}&team=#{@team}", {success}
|
promises.push $.ajax "/db/level/#{level}/leaderboard_rank?scoreOffset=#{@session.get('totalScore')}&team=#{@team}", {success}
|
||||||
|
|
||||||
$.when(promises...).then @onLoad
|
$.when(promises...).then @onLoad
|
||||||
|
|
||||||
onLoad: =>
|
onLoad: =>
|
||||||
|
@ -77,12 +77,12 @@ class LeaderboardData
|
||||||
@trigger 'sync'
|
@trigger 'sync'
|
||||||
# TODO: cache user ids -> names mapping, and load them here as needed,
|
# 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.
|
# and apply them to sessions. Fetching each and every time is too costly.
|
||||||
|
|
||||||
inTopSessions: ->
|
inTopSessions: ->
|
||||||
return me.id in (session.attributes.creator for session in @topPlayers.models)
|
return me.id in (session.attributes.creator for session in @topPlayers.models)
|
||||||
|
|
||||||
nearbySessions: ->
|
nearbySessions: ->
|
||||||
return unless @session
|
return [] unless @session
|
||||||
l = []
|
l = []
|
||||||
above = @playersAbove.models
|
above = @playersAbove.models
|
||||||
above.reverse()
|
above.reverse()
|
||||||
|
@ -92,4 +92,4 @@ class LeaderboardData
|
||||||
if @myRank
|
if @myRank
|
||||||
startRank = @myRank - 4
|
startRank = @myRank - 4
|
||||||
session.rank = startRank + i for session, i in l
|
session.rank = startRank + i for session, i in l
|
||||||
l
|
l
|
||||||
|
|
471
vendor/scripts/antiscroll.js
vendored
Normal file
471
vendor/scripts/antiscroll.js
vendored
Normal file
|
@ -0,0 +1,471 @@
|
||||||
|
(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 = $('<div class="antiscroll-scrollbar antiscroll-scrollbar-horizontal"/>', 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 = $('<div class="antiscroll-scrollbar antiscroll-scrollbar-vertical"/>', 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 = $(
|
||||||
|
'<div class="antiscroll-inner" style="width:50px;height:50px;overflow-y:scroll;'
|
||||||
|
+ 'position:absolute;top:-200px;left:-200px;"><div style="height:100px;width:100%"/>'
|
||||||
|
+ '</div>'
|
||||||
|
);
|
||||||
|
|
||||||
|
$('body').append(div);
|
||||||
|
var w1 = $(div).innerWidth();
|
||||||
|
var w2 = $('div', div).innerWidth();
|
||||||
|
$(div).remove();
|
||||||
|
|
||||||
|
size = w1 - w2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return size;
|
||||||
|
};
|
||||||
|
|
||||||
|
})(jQuery);
|
63
vendor/styles/antiscroll.css
vendored
Normal file
63
vendor/styles/antiscroll.css
vendored
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
.antiscroll-wrap {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.antiscroll-scrollbar {
|
||||||
|
background: gray;
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
-webkit-border-radius: 7px;
|
||||||
|
-moz-border-radius: 7px;
|
||||||
|
border-radius: 7px;
|
||||||
|
-webkit-box-shadow: 0 0 1px #fff;
|
||||||
|
-moz-box-shadow: 0 0 1px #fff;
|
||||||
|
box-shadow: 0 0 1px #fff;
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||||
|
-webkit-transition: linear 300ms opacity;
|
||||||
|
-moz-transition: linear 300ms opacity;
|
||||||
|
-o-transition: linear 300ms opacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
.antiscroll-scrollbar-shown {
|
||||||
|
opacity: 1;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||||
|
}
|
||||||
|
|
||||||
|
.antiscroll-scrollbar-horizontal {
|
||||||
|
height: 7px;
|
||||||
|
margin-left: 2px;
|
||||||
|
bottom: 2px;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.antiscroll-scrollbar-vertical {
|
||||||
|
width: 7px;
|
||||||
|
margin-top: 2px;
|
||||||
|
right: 2px;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.antiscroll-inner {
|
||||||
|
overflow: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** A bug in Chrome 25 on Lion requires each selector to have their own
|
||||||
|
blocks. E.g. the following:
|
||||||
|
|
||||||
|
.antiscroll-inner::-webkit-scrollbar, .antiscroll-inner::scrollbar {...}
|
||||||
|
|
||||||
|
causes the width and height rules to be ignored by the browser resulting
|
||||||
|
in both native and antiscroll scrollbars appearing at the same time.
|
||||||
|
*/
|
||||||
|
.antiscroll-inner::-webkit-scrollbar {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.antiscroll-inner::scrollbar {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
Loading…
Reference in a new issue