mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-27 17:45:40 -05:00
Fixed #278
This commit is contained in:
parent
9c7ac3dfdc
commit
d6e21192f5
12 changed files with 200 additions and 204 deletions
|
@ -4,12 +4,39 @@
|
|||
h1 h2 h3 h4
|
||||
letter-spacing: 2px
|
||||
|
||||
#widget-bounds
|
||||
display: none
|
||||
#top-nav
|
||||
a.navbar-brand
|
||||
padding: 4px 20px 0px 20px
|
||||
margin-left: -20px
|
||||
|
||||
.navbar a.navbar-brand
|
||||
padding: 4px 20px 0px 20px
|
||||
margin-left: -20px
|
||||
.navbuttontext, .fancy-select .trigger
|
||||
font-family: 'Bangers', cursive
|
||||
font-size: 20px
|
||||
font-weight: 400
|
||||
letter-spacing: 1px
|
||||
|
||||
.navbuttontext-user-name
|
||||
max-width: 125px
|
||||
overflow: hidden
|
||||
text-overflow: ellipsis
|
||||
white-space: nowrap
|
||||
display: inline-block
|
||||
padding: 0 5px 0 0
|
||||
margin: 0
|
||||
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
|
||||
color: $white
|
||||
&:hover
|
||||
color: #f8e413
|
||||
|
||||
.navbar-link-text a:hover
|
||||
background: darken($body-bg, 3%)
|
||||
|
||||
|
||||
.main-content-area
|
||||
position: relative
|
||||
|
@ -19,31 +46,6 @@ h1 h2 h3 h4
|
|||
padding: 14px 12px 5px 12px
|
||||
@include box-sizing(border-box)
|
||||
|
||||
.navbuttontext, .fancy-select .trigger
|
||||
font-family: 'Bangers', cursive
|
||||
font-size: 20px
|
||||
font-weight: 400
|
||||
letter-spacing: 1px
|
||||
|
||||
.navbuttontext-user-name
|
||||
max-width: 125px
|
||||
overflow: hidden
|
||||
text-overflow: ellipsis
|
||||
white-space: nowrap
|
||||
display: inline-block
|
||||
padding: 0
|
||||
margin: 0
|
||||
height: 18px
|
||||
|
||||
.navbar .nav.navbar-link-text, .navbar .nav.navbar-link-text > li > a
|
||||
font-family: 'Bangers', cursive
|
||||
font-weight: normal
|
||||
font-size: 25px
|
||||
letter-spacing: 2px
|
||||
color: $white
|
||||
&:hover
|
||||
color: #f8e413
|
||||
|
||||
.navbar .btn, .navbar .btn-group, .navbar .fancy-select
|
||||
margin-top: 13px
|
||||
|
||||
|
|
|
@ -343,7 +343,7 @@ $navbar-inverse-toggle-border-color: #333 !default;
|
|||
// -------------------------
|
||||
|
||||
$nav-link-padding: 10px 15px !default;
|
||||
$nav-link-hover-bg: lighten(#948754, 8%);
|
||||
$nav-link-hover-bg: lighten($brand-primary, 8%);
|
||||
$nav-link-hover-color: #f8e413;
|
||||
|
||||
$nav-disabled-link-color: $gray-light !default;
|
||||
|
@ -356,12 +356,12 @@ $nav-tabs-border-color: #ddd !default;
|
|||
|
||||
$nav-tabs-link-hover-border-color: $gray-lighter !default;
|
||||
|
||||
$nav-tabs-active-link-hover-bg: $body-bg !default;
|
||||
$nav-tabs-active-link-hover-color: $gray !default;
|
||||
$nav-tabs-active-link-hover-bg: $brand-primary !default;
|
||||
$nav-tabs-active-link-hover-color: $gray-darker !default;
|
||||
$nav-tabs-active-link-hover-border-color: #ddd !default;
|
||||
|
||||
$nav-tabs-justified-link-border-color: #ddd !default;
|
||||
$nav-tabs-justified-active-link-border-color: $body-bg !default;
|
||||
$nav-tabs-justified-active-link-border-color: $brand-primary !default;
|
||||
|
||||
// Pills
|
||||
$nav-pills-border-radius: $border-radius-base !default;
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
margin-right: 5px
|
||||
|
||||
ul
|
||||
margin-left: 5px
|
||||
padding-left: 0
|
||||
margin-bottom: 0
|
||||
color: black
|
||||
|
||||
|
|
|
@ -10,4 +10,7 @@
|
|||
padding: 5px
|
||||
text-align: center
|
||||
height: 30px
|
||||
font-size: 11px
|
||||
font-size: 11px
|
||||
|
||||
.form
|
||||
margin-left: 20px
|
|
@ -33,10 +33,9 @@ block content
|
|||
label.control-label(for="email", data-i18n="general.email") Email
|
||||
input#email.form-control(name="email", type="text", value="#{me.get('email')}")
|
||||
if !isProduction
|
||||
.form-group
|
||||
div.checkbox
|
||||
label(for="email", data-i18n="forms.admin") Admin
|
||||
input#admin(name="admin", type="checkbox", checked=me.get('permissions').indexOf('admin')>-1))
|
||||
.form-group.checkbox
|
||||
label(for="email", data-i18n="forms.admin") Admin
|
||||
input#admin(name="admin", type="checkbox", checked=me.get('permissions').indexOf('admin')>-1))
|
||||
|
||||
|
||||
#picture-pane.tab-pane
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
.modal.hide.fade#modal-error
|
||||
.modal-header
|
||||
.button.close(type="button", data-dismiss="modal", aria-hidden="true") ×
|
||||
h3 Error #{status}: #{statusText}
|
||||
.modal-body
|
||||
p #{message}
|
||||
.modal.fade#modal-error
|
||||
.modal-dialog
|
||||
.modal-header
|
||||
.button.close(type="button", data-dismiss="modal", aria-hidden="true") ×
|
||||
h3 Error #{status}: #{statusText}
|
||||
.modal-body
|
||||
p #{message}
|
||||
|
|
|
@ -1,46 +1,44 @@
|
|||
extends /templates/modal/modal_base
|
||||
|
||||
.modal-dialog
|
||||
block modal-header-content
|
||||
h3(data-i18n="signup.create_account_title") Create Account to Save Progress
|
||||
|
||||
block modal-body-content
|
||||
.modal-content
|
||||
block modal-header-content
|
||||
h3(data-i18n="signup.create_account_title") Create Account to Save Progress
|
||||
.modal-body
|
||||
p(data-i18n="signup.description") It's free. Just need a couple things and you'll be good to go:
|
||||
.form-inline
|
||||
.form-group
|
||||
label.control-label(for="signup-email", data-i18n="general.email") Email
|
||||
input#signup-email.form-control.input-large(name="email", type="email")
|
||||
.control-group
|
||||
label.control-label(for="signup-password", data-i18n="forms.password") Password
|
||||
input#signup-password.input-large.form-control(name="password", type="password")
|
||||
hr
|
||||
.control-group
|
||||
label.checkbox.control-label(for="signup-subscribe")
|
||||
input#signup-subscribe(name="subscribe", type="checkbox", checked='checked')
|
||||
span(data-i18n="signup.email_announcements") Receive announcements by email
|
||||
.control-group
|
||||
label.checkbox.control-label(for="signup-confirm-age")
|
||||
input#signup-confirm-age(name="confirm-age", type="checkbox", checked='checked')
|
||||
span(data-i18n="signup.coppa") 13+ or non-USA
|
||||
a(href="http://en.wikipedia.org/wiki/Children's_Online_Privacy_Protection_Act", data-i18n="signup.coppa_why", target="_blank") (Why?)
|
||||
|
||||
block modal-body-content
|
||||
.modal-content
|
||||
.modal-body
|
||||
p(data-i18n="signup.description") It's free. Just need a couple things and you'll be good to go:
|
||||
.form-inline
|
||||
.form-group
|
||||
label.control-label(for="signup-email", data-i18n="general.email") Email
|
||||
input#signup-email.form-control.input-large(name="email", type="email")
|
||||
.control-group
|
||||
label.control-label(for="signup-password", data-i18n="forms.password") Password
|
||||
input#signup-password.input-large.form-control(name="password", type="password")
|
||||
hr
|
||||
.control-group
|
||||
label.checkbox.control-label(for="signup-subscribe")
|
||||
input#signup-subscribe(name="subscribe", type="checkbox", checked='checked')
|
||||
span(data-i18n="signup.email_announcements") Receive announcements by email
|
||||
.control-group
|
||||
label.checkbox.control-label(for="signup-confirm-age")
|
||||
input#signup-confirm-age(name="confirm-age", type="checkbox", checked='checked')
|
||||
span(data-i18n="signup.coppa") 13+ or non-USA
|
||||
a(href="http://en.wikipedia.org/wiki/Children's_Online_Privacy_Protection_Act", data-i18n="signup.coppa_why", target="_blank") (Why?)
|
||||
block modal-body-wait-content
|
||||
h3(data-i18n="signup.creating") Creating Account...
|
||||
|
||||
block modal-body-wait-content
|
||||
h3(data-i18n="signup.creating") Creating Account...
|
||||
|
||||
block modal-footer
|
||||
.modal-footer
|
||||
button.btn.btn-primary.btn-large#signup-button(data-i18n="signup.sign_up") Sign Up
|
||||
|
||||
.modal-footer.network-logins
|
||||
div
|
||||
.fb-login-button(data-show-faces="false", data-width="200", data-max-rows="1", data-scope="email")
|
||||
div
|
||||
.gplus-login-button#gplus-login-button
|
||||
// TODO does not work; the events (clicks, submissions) in new modal do not fire
|
||||
div
|
||||
span(data-i18n="general.or") or
|
||||
span
|
||||
a(data-toggle="coco-modal", data-target="modal/login", data-i18n="signup.log_in")#link-to-login log in with password
|
||||
block modal-footer
|
||||
.modal-footer
|
||||
button.btn.btn-primary.btn-large#signup-button(data-i18n="signup.sign_up") Sign Up
|
||||
|
||||
.modal-footer.network-logins
|
||||
div
|
||||
.fb-login-button(data-show-faces="false", data-width="200", data-max-rows="1", data-scope="email")
|
||||
div
|
||||
.gplus-login-button#gplus-login-button
|
||||
// TODO does not work; the events (clicks, submissions) in new modal do not fire
|
||||
div
|
||||
span(data-i18n="general.or") or
|
||||
span
|
||||
a(data-toggle="coco-modal", data-target="modal/login", data-i18n="signup.log_in")#link-to-login log in with password
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
// TODO: refactor to be like other modals
|
||||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3(data-i18n="play_level.guide_title") Guide
|
||||
|
||||
.modal-body
|
||||
ul.nav.nav-tabs
|
||||
for doc in docs
|
||||
li
|
||||
a(data-target="#docs_tab_#{doc.slug}", data-toggle="tab") #{doc.name}
|
||||
div.tab-content
|
||||
for doc in docs
|
||||
div.tab-pane(id="docs_tab_#{doc.slug}")!= doc.html
|
||||
|
||||
.modal-footer
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="modal.close").btn.btn-primary Close
|
||||
.modal-dialog
|
||||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3(data-i18n="play_level.guide_title") Guide
|
||||
|
||||
.modal-body
|
||||
ul.nav.nav-tabs
|
||||
for doc in docs
|
||||
li
|
||||
a(data-target="#docs_tab_#{doc.slug}", data-toggle="tab") #{doc.name}
|
||||
div.tab-content
|
||||
for doc in docs
|
||||
div.tab-pane(id="docs_tab_#{doc.slug}")!= doc.html
|
||||
|
||||
.modal-footer
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="modal.close").btn.btn-primary Close
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3(data-i18n="play_level.infinite_loop_title") Infinite Loop Detected
|
||||
|
||||
.modal-body
|
||||
p(data-i18n="play_level.infinite_loop_explanation") The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know.
|
||||
|
||||
.modal-footer
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="play_level.infinite_loop_wait").btn#restart-level-infinite-loop-retry-button Try Again
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="play_level.infinite_loop_reload").btn.btn-primary#restart-level-infinite-loop-confirm-button Reset Level
|
||||
.modal-dialog
|
||||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3(data-i18n="play_level.infinite_loop_title") Infinite Loop Detected
|
||||
|
||||
.modal-body
|
||||
p(data-i18n="play_level.infinite_loop_explanation") The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know.
|
||||
|
||||
.modal-footer
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="play_level.infinite_loop_wait").btn#restart-level-infinite-loop-retry-button Try Again
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="play_level.infinite_loop_reload").btn.btn-primary#restart-level-infinite-loop-confirm-button Reset Level
|
||||
|
|
|
@ -1,40 +1,29 @@
|
|||
// TODO: refactor to be like other modals
|
||||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3(data-i18n="play_level.multiplayer_title") Multiplayer Settings
|
||||
|
||||
.modal-body
|
||||
// This section is for later
|
||||
.modal-dialog
|
||||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3(data-i18n="play_level.multiplayer_title") Multiplayer Settings
|
||||
|
||||
.form-horizontal
|
||||
.form-group
|
||||
label.control-label(for="multiplayer") Multiplayer
|
||||
.control
|
||||
input#multiplayer.input-large.form-control(name="multiplayer", type="checkbox", checked=multiplayer)
|
||||
span.help-inline Enable others to join your game.
|
||||
|
||||
hr
|
||||
|
||||
div#link-area
|
||||
p(data-i18n="play_level.multiplayer_link_description") Give this link to anyone to have them join you.
|
||||
|
||||
textarea.well#multiplayer-join-link(readonly=true)= joinLink
|
||||
|
||||
p
|
||||
strong(data-i18n="play_level.multiplayer_hint_label") Hint:
|
||||
span(data-i18n="play_level.multiplayer_hint") Click the link to select all, then press ⌘-C or Ctrl-C to copy the link.
|
||||
.modal-body
|
||||
.form-horizontal.form
|
||||
.form-group.checkbox
|
||||
label.control-label(for="multiplayer")
|
||||
input#multiplayer(name="multiplayer", type="checkbox", checked=multiplayer)
|
||||
| Multiplayer
|
||||
span.help-block Enable others to join your game.
|
||||
|
||||
hr
|
||||
|
||||
p(data-i18n="play_level.multiplayer_coming_soon") More multiplayer features to come!
|
||||
|
||||
//#multiplayer-team-selection.hide
|
||||
// h4 Multiplayer Team Selection
|
||||
// form
|
||||
// label.radio
|
||||
// input(type="radio", name="team-selection", value="humans")
|
||||
// span Red Team
|
||||
// label.radio
|
||||
// input(type="radio", name="team-selection", value="ogres")
|
||||
// span Blue Team
|
||||
|
||||
.modal-footer
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="modal.close").btn.btn-primary Close
|
||||
div#link-area
|
||||
p(data-i18n="play_level.multiplayer_link_description") Give this link to anyone to have them join you.
|
||||
|
||||
textarea.well#multiplayer-join-link(readonly=true)= joinLink
|
||||
|
||||
p
|
||||
strong(data-i18n="play_level.multiplayer_hint_label") Hint:
|
||||
span(data-i18n="play_level.multiplayer_hint") Click the link to select all, then press ⌘-C or Ctrl-C to copy the link.
|
||||
|
||||
p(data-i18n="play_level.multiplayer_coming_soon") More multiplayer features to come!
|
||||
|
||||
.modal-footer
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="modal.close").btn.btn-primary Close
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3(data-i18n="play_level.reload_title") Reload All Code?
|
||||
|
||||
.modal-body
|
||||
p(data-i18n="play_level.reload_really") Are you sure you want to reload this level back to the beginning?
|
||||
|
||||
.modal-footer
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="modal.close").btn Close
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="play_level.reload_confirm").btn.btn-primary#restart-level-confirm-button Reload All
|
||||
.modal-dialog
|
||||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3(data-i18n="play_level.reload_title") Reload All Code?
|
||||
|
||||
.modal-body
|
||||
p(data-i18n="play_level.reload_really") Are you sure you want to reload this level back to the beginning?
|
||||
|
||||
.modal-footer
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="modal.close").btn Close
|
||||
a(href='#', data-dismiss="modal", aria-hidden="true", data-i18n="play_level.reload_confirm").btn.btn-primary#restart-level-confirm-button Reload All
|
||||
|
|
|
@ -1,47 +1,48 @@
|
|||
// TODO: refactor to be like other modals
|
||||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3
|
||||
span(data-i18n="play_level.victory_title_prefix")
|
||||
span= levelName
|
||||
span(data-i18n="play_level.victory_title_suffix") Complete
|
||||
|
||||
.modal-body!= body
|
||||
|
||||
.modal-footer
|
||||
if me.get('anonymous')
|
||||
p.sign-up-poke
|
||||
button.btn.btn-success.sign-up-button.btn-large(data-toggle="coco-modal", data-target="modal/signup", data-i18n="play_level.victory_sign_up") Sign Up to Save Progress
|
||||
span(data-i18n="play_level.victory_sign_up_poke") Want to save your code? Create a free account!
|
||||
else
|
||||
div.rating.hide
|
||||
span(data-i18n="play_level.victory_rate_the_level") Rate the level:
|
||||
i.icon-star-empty
|
||||
i.icon-star-empty
|
||||
i.icon-star-empty
|
||||
i.icon-star-empty
|
||||
i.icon-star-empty
|
||||
if hasNextLevel
|
||||
if nextLevelText
|
||||
button.btn.btn-primary.next-level-button(data-dismiss="modal")= nextLevelText
|
||||
else
|
||||
button.btn.btn-primary.next-level-button(data-dismiss="modal", data-i18n="play_level.victory_play_next_level") Play Next Level
|
||||
else
|
||||
a.btn.btn-primary(href="/", data-dismiss="modal", data-i18n="play_level.victory_go_home") Go Home
|
||||
if !me.get('anonymous')
|
||||
div.review.hide
|
||||
span(data-i18n="play_level.victory_review") Tell us more!
|
||||
br
|
||||
textarea
|
||||
div.share-buttons
|
||||
.g-plusone(data-href="http://codecombat.com", data-size="medium")
|
||||
.fb-like(data-href="https://www.facebook.com/codecombat", data-send="false", data-layout="button_count", data-width="350", data-show-faces="true", data-ref="coco_victory_#{fbRef}")
|
||||
a.twitter-follow-button(href="https://twitter.com/CodeCombat", data-show-count="true", data-show-screen-name="false", data-dnt="true", data-align="right", data-i18n="nav.twitter_follow") Follow
|
||||
iframe.github-star-button(src="http://ghbtns.com/github-btn.html?user=codecombat&repo=codecombat&type=watch&count=true", allowtransparency="true", frameborder="0", scrolling="0", width="110", height="20")
|
||||
|
||||
if showHourOfCodeDoneButton
|
||||
.modal-dialog
|
||||
.modal-header
|
||||
button(type='button', data-dismiss="modal", aria-hidden="true").close ×
|
||||
h3
|
||||
span(data-i18n="play_level.victory_title_prefix")
|
||||
span= levelName
|
||||
span(data-i18n="play_level.victory_title_suffix") Complete
|
||||
|
||||
.modal-body!= body
|
||||
|
||||
.modal-footer
|
||||
h3.pull-left(data-i18n="play_level.victory_hour_of_code_done") Are You Done?
|
||||
a(href="http://code.org/api/hour/finish")
|
||||
strong(data-i18n="play_level.victory_hour_of_code_done_yes") Yes, I'm finished with my Hour of Code!
|
||||
img(src="/images/level/csedweek-logo-final-small.jpg", alt="CS Ed Week Hour of Code", title="I'm finished with my Hour of Code", width=80)
|
||||
if me.get('anonymous')
|
||||
p.sign-up-poke
|
||||
button.btn.btn-success.sign-up-button.btn-large(data-toggle="coco-modal", data-target="modal/signup", data-i18n="play_level.victory_sign_up") Sign Up to Save Progress
|
||||
span(data-i18n="play_level.victory_sign_up_poke") Want to save your code? Create a free account!
|
||||
else
|
||||
div.rating.hide
|
||||
span(data-i18n="play_level.victory_rate_the_level") Rate the level:
|
||||
i.icon-star-empty
|
||||
i.icon-star-empty
|
||||
i.icon-star-empty
|
||||
i.icon-star-empty
|
||||
i.icon-star-empty
|
||||
if hasNextLevel
|
||||
if nextLevelText
|
||||
button.btn.btn-primary.next-level-button(data-dismiss="modal")= nextLevelText
|
||||
else
|
||||
button.btn.btn-primary.next-level-button(data-dismiss="modal", data-i18n="play_level.victory_play_next_level") Play Next Level
|
||||
else
|
||||
a.btn.btn-primary(href="/", data-dismiss="modal", data-i18n="play_level.victory_go_home") Go Home
|
||||
if !me.get('anonymous')
|
||||
div.review.hide
|
||||
span(data-i18n="play_level.victory_review") Tell us more!
|
||||
br
|
||||
textarea
|
||||
div.share-buttons
|
||||
.g-plusone(data-href="http://codecombat.com", data-size="medium")
|
||||
.fb-like(data-href="https://www.facebook.com/codecombat", data-send="false", data-layout="button_count", data-width="350", data-show-faces="true", data-ref="coco_victory_#{fbRef}")
|
||||
a.twitter-follow-button(href="https://twitter.com/CodeCombat", data-show-count="true", data-show-screen-name="false", data-dnt="true", data-align="right", data-i18n="nav.twitter_follow") Follow
|
||||
iframe.github-star-button(src="http://ghbtns.com/github-btn.html?user=codecombat&repo=codecombat&type=watch&count=true", allowtransparency="true", frameborder="0", scrolling="0", width="110", height="20")
|
||||
|
||||
if showHourOfCodeDoneButton
|
||||
.modal-footer
|
||||
h3.pull-left(data-i18n="play_level.victory_hour_of_code_done") Are You Done?
|
||||
a(href="http://code.org/api/hour/finish")
|
||||
strong(data-i18n="play_level.victory_hour_of_code_done_yes") Yes, I'm finished with my Hour of Code!
|
||||
img(src="/images/level/csedweek-logo-final-small.jpg", alt="CS Ed Week Hour of Code", title="I'm finished with my Hour of Code", width=80)
|
||||
|
|
Loading…
Reference in a new issue