Update private clans preview image and copy

This commit is contained in:
Matt Lott 2015-07-02 18:44:13 -07:00
parent 6a53237e65
commit 8d258c6943
8 changed files with 71 additions and 24 deletions

Binary file not shown.

Before

(image error) Size: 103 KiB

After

(image error) Size: 192 KiB

Before After
Before After

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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')

View file

@ -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