mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-03 08:21:07 +00:00
challenges: move challenge-creation to their respective tabs, instead of separate "create" tab
This commit is contained in:
parent
60bdc3666e
commit
12fccbc99d
2 changed files with 96 additions and 104 deletions
|
|
@ -5,7 +5,8 @@ module.exports.app = (appExports, model) ->
|
|||
browser = require './browser'
|
||||
user = model.at '_user'
|
||||
|
||||
appExports.challengeCreate = ->
|
||||
appExports.challengeCreate = (e,el) ->
|
||||
[type, gid] = [$(el).attr('data-type'), $(el).attr('data-gid')]
|
||||
model.set '_challenge.new',
|
||||
name: ''
|
||||
habits: []
|
||||
|
|
@ -15,23 +16,17 @@ module.exports.app = (appExports, model) ->
|
|||
id: model.id()
|
||||
uid: user.get('id')
|
||||
user: helpers.username(model.get('_user.auth'), model.get('_user.profile.name'))
|
||||
# FIXME group is a stop-gap since derby's not picking up the initial select option `selected={}` until it's changed
|
||||
group: type:'party', id:model.get('_guilds.0.id')
|
||||
group: {type, id:gid}
|
||||
timestamp: +new Date
|
||||
|
||||
model.set '_challenge.creating', true
|
||||
|
||||
appExports.challengeSave = ->
|
||||
gid = switch model.get('_challenge.new.group.type')
|
||||
when 'party' then model.get('_party.id')
|
||||
when 'guild' then model.get('_challenge.new.group.id')
|
||||
when 'public' then 'habitrpg'
|
||||
model.unshift "groups.#{gid}.challenges", model.get('_challenge.new'), challengeDiscard
|
||||
browser.growlNotification('Challenge Created','success')
|
||||
gid = model.get('_challenge.new.group.id')
|
||||
debugger
|
||||
model.unshift "groups.#{gid}.challenges", model.get('_challenge.new'), ->
|
||||
browser.growlNotification('Challenge Created','success')
|
||||
challengeDiscard()
|
||||
|
||||
appExports.challengeDiscard = challengeDiscard = ->
|
||||
model.set '_challenge.new', {}
|
||||
model.set '_challenge.creating', false
|
||||
appExports.challengeDiscard = challengeDiscard = -> model.del '_challenge.new'
|
||||
|
||||
appExports.challengeSubscribe = (e) ->
|
||||
chal = e.get()
|
||||
|
|
@ -65,4 +60,4 @@ module.exports.app = (appExports, model) ->
|
|||
|
||||
appExports.challengeCollapse = (e, el) ->
|
||||
$(el).next().toggle()
|
||||
i = $(el).find('i').toggleClass 'icon-chevron-down'
|
||||
i = $(el).find('i').toggleClass('icon-chevron-right icon-chevron-down')
|
||||
|
|
@ -1,24 +1,6 @@
|
|||
<main:>
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a data-toggle='tab' data-target="#challengesView">Challenges</a></li>
|
||||
<li ><a data-toggle='tab' data-target="#challengesCreate">Create Challenge</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
|
||||
<div class="tab-pane active" id="challengesView">
|
||||
<app:challenges:view />
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="challengesCreate">
|
||||
<app:challenges:create />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<view:>
|
||||
<div>
|
||||
<ul class="nav nav-pills">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a data-toggle='tab' data-target="#challengesViewParty">Party</a></li>
|
||||
<li><a data-toggle='tab' data-target="#challengesViewGuild">Guild</a></li>
|
||||
<li><a data-toggle='tab' data-target="#challengesViewPublic">Public</a></li>
|
||||
|
|
@ -27,24 +9,39 @@
|
|||
<div class="tab-content">
|
||||
|
||||
<div class="tab-pane active" id="challengesViewParty">
|
||||
{#each _party.challenges as :challenge}
|
||||
<app:challenges:listing challenge={:challenge} />
|
||||
{#if _challenge.new}
|
||||
<app:challenges:create-form />
|
||||
{else}
|
||||
<app:challenges:create-button type='party' gid={{_party.id}} text='Party'/>
|
||||
{#each _party.challenges as :challenge}
|
||||
<app:challenges:listing challenge={:challenge} />
|
||||
{/}
|
||||
{/}
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="challengesViewGuild">
|
||||
{#each _guilds as :guild}
|
||||
{{#each _guilds as :guild}}
|
||||
<h3>{:guild.name}</h3>
|
||||
{#each :guild.challenges as :challenge}
|
||||
<app:challenges:listing challenge={:challenge} />
|
||||
{#if _challenge.new}
|
||||
<app:challenges:create-form />
|
||||
{else}
|
||||
<app:challenges:create-button type='guild' gid={{:guild.id}} text='Guild' />
|
||||
{#each :guild.challenges as :challenge}
|
||||
<app:challenges:listing challenge={:challenge} />
|
||||
{/}
|
||||
<hr/>
|
||||
{/}
|
||||
<hr/>
|
||||
{/}
|
||||
{{/}}
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="challengesViewPublic">
|
||||
{#each _habitRPG.challenges as :challenge}
|
||||
<app:challenges:listing challenge={:challenge} />
|
||||
{#if _challenge.new}
|
||||
<app:challenges:create-form />
|
||||
{else}
|
||||
<app:challenges:create-button type='public' gid='habitrpg' text='Public' />
|
||||
{#each _habitRPG.challenges as :challenge}
|
||||
<app:challenges:listing challenge={:challenge} />
|
||||
{/}
|
||||
{/}
|
||||
</div>
|
||||
|
||||
|
|
@ -57,9 +54,9 @@
|
|||
<a x-bind="click:challengeUnsubscribe" class='btn btn-medium btn-danger {#unless indexOf(_user.challenges,@challenge.id)}hidden{/}'><i class='icon-ban-circle'></i> Unsubscribe</a>
|
||||
<a x-bind="click:challengeSubscribe" class='btn btn-medium btn-success {#if indexOf(_user.challenges,@challenge.id)}hidden{/}'><i class='icon-ok'></i> Subscribe</a>
|
||||
</div>
|
||||
<h4 x-bind="click:challengeCollapse"><i class='icon-chevron-down icon-chevron-right'></i> {@challenge.name} (by {@challenge.user})</h4>
|
||||
<h4 x-bind="click:challengeCollapse"><i class='icon-chevron-right'></i> {@challenge.name} (by {@challenge.user})</h4>
|
||||
|
||||
<div class="grid">
|
||||
<div class="grid" style='display:none;'>
|
||||
<app:tasks:task-lists
|
||||
habits={@challenge.habits}
|
||||
dailys={@challenge.dailys}
|
||||
|
|
@ -68,70 +65,70 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<create:>
|
||||
<div>
|
||||
{#unless _challenge.creating}
|
||||
<a x-bind='click:challengeCreate' class='btn btn-large btn-success'>Create New Challenge</a>
|
||||
{else}
|
||||
<create-button:>
|
||||
<a x-bind='click:challengeCreate' class='btn btn-large btn-success' data-type={{@type}} data-gid={{@gid}} >Create {{@text}} Challenge</a>
|
||||
|
||||
<div class="grid">
|
||||
<app:tasks:task-lists
|
||||
habits={_challenge.new.habits}
|
||||
dailys={_challenge.new.dailys}
|
||||
todos={_challenge.new.todos}
|
||||
rewards={_challenge.new.rewards}
|
||||
editable=true />
|
||||
<create-form:>
|
||||
<form x-bind="submit:challengeSave">
|
||||
<div>
|
||||
<input type='submit' class='btn btn-success' value='Save' />
|
||||
<input type='button' x-bind='click:challengeDiscard' class='btn btn-danger' value=Discard />
|
||||
</div>
|
||||
|
||||
<div class='challenge-options'>
|
||||
<input type='text' class='option-content' value={_challenge.new.name} placeholder="Challenge Title" required />
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!--<fieldset>
|
||||
<div>
|
||||
<select>
|
||||
<option selected="{equal('party',_challenge.new.group.type)}" >Party</option>
|
||||
<option selected="{equal('guild',_challenge.new.group.type)}" >Guild</option>
|
||||
<option selected="{equal('public',_challenge.new.group.type)}" >Public</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<form x-bind="submit:challengeSave">
|
||||
|
||||
<input id='newChallengeName' type='text' value={_challenge.new.name} placeholder="Challenge Title" required />
|
||||
|
||||
<fieldset>
|
||||
<div>
|
||||
<select>
|
||||
<option selected="{equal('party',_challenge.new.group.type)}" >Party</option>
|
||||
<option selected="{equal('guild',_challenge.new.group.type)}" >Guild</option>
|
||||
<option selected="{equal('public',_challenge.new.group.type)}" >Public</option>
|
||||
</select>
|
||||
<div>
|
||||
{#if equal(_challenge.new.assignTo,'Party')}
|
||||
<div class='row-fluid'>
|
||||
<div class='span4 well'>
|
||||
<div><input type='radio' name='challenge-party-selection' checked={_challenge.new.partyAssignees} >All Party</input></div>
|
||||
<small>No individual privacy on the challenge, all party members can see progress even if they decline the challenge. Any new party members can subscribe to this challenge.</small>
|
||||
</div>
|
||||
<div class='span8 well'>
|
||||
<div><input type='radio' name='challenge-party-selection' checked={not(_challenge.new.partyAssignees)} >Individual Members</input></div>
|
||||
<div>
|
||||
<select multiple="multiple">
|
||||
{{#each _party.members as :memberId}}
|
||||
<option>{{username(_members[:memberId].auth,_members[:memberId].profile.name)}}</option>
|
||||
{{/}}
|
||||
</select>
|
||||
</div>
|
||||
<div><small>Only the invited party members can subscribe to this challenge. New party joins won't see this challenge.</small></div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<!--{#if equal(_challenge.new.assignTo,'Party')}-->
|
||||
<!--<div class='row-fluid'>-->
|
||||
<!--<div class='span4 well'>-->
|
||||
<!--<div><input type='radio' name='challenge-party-selection' checked={_challenge.new.partyAssignees} >All Party</input></div>-->
|
||||
<!--<small>No individual privacy on the challenge, all party members can see progress even if they decline the challenge. Any new party members can subscribe to this challenge.</small>-->
|
||||
<!--</div>-->
|
||||
<!--<div class='span8 well'>-->
|
||||
<!--<div><input type='radio' name='challenge-party-selection' checked={not(_challenge.new.partyAssignees)} >Individual Members</input></div>-->
|
||||
<!--<div>-->
|
||||
<!--<select multiple="multiple">-->
|
||||
<!--{{#each _party.members as :memberId}}-->
|
||||
<!--<option>{{username(_members[:memberId].auth,_members[:memberId].profile.name)}}</option>-->
|
||||
<!--{{/}}-->
|
||||
<!--</select>-->
|
||||
<!--</div>-->
|
||||
<!--<div><small>Only the invited party members can subscribe to this challenge. New party joins won't see this challenge.</small></div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
|
||||
<!--{/}-->
|
||||
{#if equal(_challenge.new.group.type,'guild')}
|
||||
<select>
|
||||
{{#each _guilds as :guild}}
|
||||
<option selected="{equal(:guild.id,_challenge.new.group.id)}" >{:guild.name}</option>
|
||||
{{/}}
|
||||
</select>
|
||||
{/}
|
||||
</div>
|
||||
</fieldset>
|
||||
{/}
|
||||
{#if equal(_challenge.new.group.type,'guild')}
|
||||
<select>
|
||||
{{#each _guilds as :guild}}
|
||||
<option selected="{equal(:guild.id,_challenge.new.group.id)}" >{:guild.name}</option>
|
||||
{{/}}
|
||||
</select>
|
||||
{/}
|
||||
</div>
|
||||
</fieldset>-->
|
||||
|
||||
<input type='submit' class='btn btn-large btn-success' value='Save' />
|
||||
<input type='button' x-bind='click:challengeDiscard' class='btn btn-large btn-danger' value=Discard />
|
||||
</form>
|
||||
|
||||
|
||||
{/}
|
||||
</form>
|
||||
|
||||
<div class="grid">
|
||||
<app:tasks:task-lists
|
||||
habits={_challenge.new.habits}
|
||||
dailys={_challenge.new.dailys}
|
||||
todos={_challenge.new.todos}
|
||||
rewards={_challenge.new.rewards}
|
||||
editable=true />
|
||||
</div>
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue