mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-05-03 01:14:46 -04:00
Update private clans preview image and copy
This commit is contained in:
parent
6a53237e65
commit
8d258c6943
8 changed files with 71 additions and 24 deletions
app
assets/images/pages/clans
locale
styles/clans
templates
views/clans
Binary file not shown.
Before ![]() (image error) Size: 103 KiB After ![]() (image error) Size: 192 KiB ![]() ![]() |
|
@ -790,6 +790,7 @@
|
||||||
make_private: "Make clan private"
|
make_private: "Make clan private"
|
||||||
subs_only: "subscribers only"
|
subs_only: "subscribers only"
|
||||||
create_clan: "Create New Clan"
|
create_clan: "Create New Clan"
|
||||||
|
private_preview: "Preview"
|
||||||
public_clans: "Public Clans"
|
public_clans: "Public Clans"
|
||||||
my_clans: "My Clans"
|
my_clans: "My Clans"
|
||||||
clan_name: "Clan Name"
|
clan_name: "Clan Name"
|
||||||
|
|
|
@ -99,9 +99,23 @@
|
||||||
background-color: blanchedalmond
|
background-color: blanchedalmond
|
||||||
font-size: 10pt
|
font-size: 10pt
|
||||||
|
|
||||||
.level-progression-campaign
|
.level-progression-concepts
|
||||||
|
color: #317EAC
|
||||||
font-size: 12pt
|
font-size: 12pt
|
||||||
font-weight: bold
|
font-weight: bold
|
||||||
|
margin-top: 8px
|
||||||
|
margin-bottom: 4px
|
||||||
|
|
||||||
|
.level-progression-levels
|
||||||
|
color: #317EAC
|
||||||
|
font-size: 12pt
|
||||||
|
font-weight: bold
|
||||||
|
margin-top: 8px
|
||||||
|
|
||||||
|
.level-progression-campaign
|
||||||
|
font-size: 10pt
|
||||||
|
font-weight: bold
|
||||||
|
margin-bottom: 4px
|
||||||
margin-top: 4px
|
margin-top: 4px
|
||||||
|
|
||||||
.progress-level-cell
|
.progress-level-cell
|
||||||
|
|
|
@ -118,15 +118,15 @@ block content
|
||||||
if isOwner && member.id !== clan.get('ownerID')
|
if isOwner && member.id !== clan.get('ownerID')
|
||||||
button.btn.btn-xs.btn-warning.remove-member-btn(data-id="#{member.id}", data-i18n="clans.rem_hero") Remove Hero
|
button.btn.btn-xs.btn-warning.remove-member-btn(data-id="#{member.id}", data-i18n="clans.rem_hero") Remove Hero
|
||||||
td.progress-cell
|
td.progress-cell
|
||||||
p
|
.level-progression-concepts Concepts
|
||||||
div.level-progression-campaign(style='color:#317EAC;') Concepts
|
each concept in conceptsProgression
|
||||||
each concept in conceptsProgression
|
if userConceptsMap[member.id] && userConceptsMap[member.id][concept] === 'complete'
|
||||||
if userConceptsMap[member.id] && userConceptsMap[member.id][concept] === 'complete'
|
span.spr.progress-level-cell.progress-level-cell-complete(data-i18n="concepts." + concept)
|
||||||
span.spr.progress-level-cell.progress-level-cell-complete(data-i18n="concepts." + concept)
|
else if userConceptsMap[member.id] && userConceptsMap[member.id][concept] === 'started'
|
||||||
else if userConceptsMap[member.id] && userConceptsMap[member.id][concept] === 'started'
|
span.spr.progress-level-cell.progress-level-cell-started(data-i18n="concepts." + concept)
|
||||||
span.spr.progress-level-cell.progress-level-cell-started(data-i18n="concepts." + concept)
|
else
|
||||||
else
|
span.spr.progress-level-cell.progress-level-cell-not-started(data-i18n="concepts." + concept)
|
||||||
span.spr.progress-level-cell.progress-level-cell-not-started(data-i18n="concepts." + concept)
|
.level-progression-levels Levels
|
||||||
each campaign in campaignLevelProgressions
|
each campaign in campaignLevelProgressions
|
||||||
if lastUserCampaignLevelMap[member.id] && lastUserCampaignLevelMap[member.id][campaign.ID]
|
if lastUserCampaignLevelMap[member.id] && lastUserCampaignLevelMap[member.id][campaign.ID]
|
||||||
div.level-progression-campaign= campaign.name
|
div.level-progression-campaign= campaign.name
|
||||||
|
|
|
@ -10,7 +10,7 @@ block content
|
||||||
input(type='checkbox').private-clan-checkbox
|
input(type='checkbox').private-clan-checkbox
|
||||||
span.spl(data-i18n="clans.make_private") Make clan private
|
span.spl(data-i18n="clans.make_private") Make clan private
|
||||||
span.spl (
|
span.spl (
|
||||||
a.private-more-info(data-i18n="clans.subs_only") subscribers only
|
a.private-more-info(data-i18n="clans.private_preview")
|
||||||
span )
|
span )
|
||||||
p
|
p
|
||||||
button.btn.btn-success.create-clan-btn(data-i18n="clans.create_clan") Create New Clan
|
button.btn.btn-success.create-clan-btn(data-i18n="clans.create_clan") Create New Clan
|
||||||
|
|
|
@ -48,11 +48,25 @@ block content
|
||||||
span.spl(data-i18n="teachers.monitor_progress_4")
|
span.spl(data-i18n="teachers.monitor_progress_4")
|
||||||
p(data-i18n="teachers.monitor_progress_5")
|
p(data-i18n="teachers.monitor_progress_5")
|
||||||
h4(data-i18n="teachers.sub_includes_7")
|
h4(data-i18n="teachers.sub_includes_7")
|
||||||
p(data-i18n="teachers.private_clans_1")
|
ul
|
||||||
|
li
|
||||||
|
strong Track concepts
|
||||||
|
span.spl learned by each student
|
||||||
|
li Track levels completed for each student
|
||||||
|
li
|
||||||
|
span See your students'
|
||||||
|
strong.spl solutions
|
||||||
|
li Sort students by name or progress
|
||||||
|
li
|
||||||
|
strong Requires invitation
|
||||||
|
span.spl to join
|
||||||
|
p
|
||||||
|
img(src='/images/pages/clans/dashboard_preview.png' height='400')
|
||||||
p
|
p
|
||||||
span.spr(data-i18n="teachers.private_clans_2")
|
span.spr(data-i18n="teachers.private_clans_2")
|
||||||
a(href='/clans', data-i18n="clans.clan")
|
a(href='/clans', data-i18n="clans.clan")
|
||||||
span(data-i18n="teachers.private_clans_3")
|
span(data-i18n="teachers.private_clans_3")
|
||||||
|
p Private clans require a subscription to create or join.
|
||||||
|
|
||||||
h3(data-i18n="teachers.material_title")
|
h3(data-i18n="teachers.material_title")
|
||||||
if me.get('chinaVersion')
|
if me.get('chinaVersion')
|
||||||
|
@ -78,19 +92,19 @@ block content
|
||||||
tbody
|
tbody
|
||||||
tr
|
tr
|
||||||
td Syntax
|
td Syntax
|
||||||
td If/Else
|
td If Statements
|
||||||
td Arithmetic
|
td Arithmetic
|
||||||
td Object Literals
|
td Object Literals
|
||||||
tr
|
tr
|
||||||
td Methods
|
td Methods
|
||||||
td Relational Operators
|
td Relational Operators
|
||||||
td While-loops
|
td While Loops
|
||||||
td Remote Method Invocation
|
td Remote Method Invocation
|
||||||
tr
|
tr
|
||||||
td Parameters
|
td Parameters
|
||||||
td Object Properties
|
td Object Properties
|
||||||
td Break
|
td Break Statements
|
||||||
td For-Loops
|
td For Loops
|
||||||
tr
|
tr
|
||||||
td Strings
|
td Strings
|
||||||
td Input Handling
|
td Input Handling
|
||||||
|
|
|
@ -133,22 +133,34 @@ module.exports = class ClanDetailsView extends RootView
|
||||||
@memberSessions.fetch cache: false
|
@memberSessions.fetch cache: false
|
||||||
|
|
||||||
sortMembers: (highestUserLevelCountMap, userConceptsMap) ->
|
sortMembers: (highestUserLevelCountMap, userConceptsMap) ->
|
||||||
# Progress sort precedence: most concepts, most levels, name sort
|
# Progress sort precedence: most completed concepts, most started concepts, most levels, name sort
|
||||||
return unless @members? and @memberSort?
|
return unless @members? and @memberSort?
|
||||||
switch @memberSort
|
switch @memberSort
|
||||||
when "nameDesc"
|
when "nameDesc"
|
||||||
@members.comparator = (a, b) -> return (b.get('name') or 'Anoner').localeCompare(a.get('name') or 'Anoner')
|
@members.comparator = (a, b) -> return (b.get('name') or 'Anoner').localeCompare(a.get('name') or 'Anoner')
|
||||||
when "progressAsc"
|
when "progressAsc"
|
||||||
@members.comparator = (a, b) ->
|
@members.comparator = (a, b) ->
|
||||||
if Object.keys(userConceptsMap[a.id]).length < Object.keys(userConceptsMap[b.id]).length then return -1
|
aComplete = (concept for concept, state of userConceptsMap[a.id] when state is 'complete')
|
||||||
else if Object.keys(userConceptsMap[a.id]).length > Object.keys(userConceptsMap[b.id]).length then return 1
|
bComplete = (concept for concept, state of userConceptsMap[b.id] when state is 'complete')
|
||||||
|
aStarted = (concept for concept, state of userConceptsMap[a.id] when state is 'started')
|
||||||
|
bStarted = (concept for concept, state of userConceptsMap[b.id] when state is 'started')
|
||||||
|
if aComplete < bComplete then return -1
|
||||||
|
else if aComplete > bComplete then return 1
|
||||||
|
else if aStarted < bStarted then return -1
|
||||||
|
else if aStarted > bStarted then return 1
|
||||||
if highestUserLevelCountMap[a.id] < highestUserLevelCountMap[b.id] then return -1
|
if highestUserLevelCountMap[a.id] < highestUserLevelCountMap[b.id] then return -1
|
||||||
else if highestUserLevelCountMap[a.id] > highestUserLevelCountMap[b.id] then return 1
|
else if highestUserLevelCountMap[a.id] > highestUserLevelCountMap[b.id] then return 1
|
||||||
(a.get('name') or 'Anoner').localeCompare(b.get('name') or 'Anoner')
|
(a.get('name') or 'Anoner').localeCompare(b.get('name') or 'Anoner')
|
||||||
when "progressDesc"
|
when "progressDesc"
|
||||||
@members.comparator = (a, b) ->
|
@members.comparator = (a, b) ->
|
||||||
if Object.keys(userConceptsMap[a.id]).length > Object.keys(userConceptsMap[b.id]).length then return -1
|
aComplete = (concept for concept, state of userConceptsMap[a.id] when state is 'complete')
|
||||||
else if Object.keys(userConceptsMap[a.id]).length < Object.keys(userConceptsMap[b.id]).length then return 1
|
bComplete = (concept for concept, state of userConceptsMap[b.id] when state is 'complete')
|
||||||
|
aStarted = (concept for concept, state of userConceptsMap[a.id] when state is 'started')
|
||||||
|
bStarted = (concept for concept, state of userConceptsMap[b.id] when state is 'started')
|
||||||
|
if aComplete > bComplete then return -1
|
||||||
|
else if aComplete < bComplete then return 1
|
||||||
|
else if aStarted > bStarted then return -1
|
||||||
|
else if aStarted < bStarted then return 1
|
||||||
if highestUserLevelCountMap[a.id] > highestUserLevelCountMap[b.id] then return -1
|
if highestUserLevelCountMap[a.id] > highestUserLevelCountMap[b.id] then return -1
|
||||||
else if highestUserLevelCountMap[a.id] < highestUserLevelCountMap[b.id] then return 1
|
else if highestUserLevelCountMap[a.id] < highestUserLevelCountMap[b.id] then return 1
|
||||||
(b.get('name') or 'Anoner').localeCompare(a.get('name') or 'Anoner')
|
(b.get('name') or 'Anoner').localeCompare(a.get('name') or 'Anoner')
|
||||||
|
|
|
@ -73,9 +73,15 @@ module.exports = class ClansView extends RootView
|
||||||
|
|
||||||
setupPrivateInfoPopover: ->
|
setupPrivateInfoPopover: ->
|
||||||
popoverTitle = "<h3>Private Clans</h3>"
|
popoverTitle = "<h3>Private Clans</h3>"
|
||||||
popoverContent = "<p>Invite only</p>"
|
popoverContent = "<ul>"
|
||||||
popoverContent += "<p>Detailed dashboard:</p>"
|
popoverContent += "<li><span style='font-weight:bold;'>Track concepts</span> learned by each member"
|
||||||
popoverContent += "<p><img src='/images/pages/clans/dashboard_preview.png' width='700'></p>"
|
popoverContent += "<li>Track levels completed for each member"
|
||||||
|
popoverContent += "<li>See your members' <span style='font-weight:bold;'>solutions</span>"
|
||||||
|
popoverContent += "<li>Sort members by name or progress"
|
||||||
|
popoverContent += "<li><span style='font-weight:bold;'>Requires invitation</span> to join"
|
||||||
|
popoverContent += "</ul>"
|
||||||
|
popoverContent += "<p><img src='/images/pages/clans/dashboard_preview.png' height='400'></p>"
|
||||||
|
popoverContent += "<p>Private clans require a subscription to create or join.</p>"
|
||||||
@$el.find('.private-more-info').popover(
|
@$el.find('.private-more-info').popover(
|
||||||
animation: true
|
animation: true
|
||||||
html: true
|
html: true
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue