49db610602
into minimum allowable depth in HTML hierachy at which it's required. Still trying to put my finger on it, but I'm getting close
185 lines
8.6 KiB
HTML
185 lines
8.6 KiB
HTML
<modals:>
|
|
<app:modals:modal modalId="avatar-modal">
|
|
{#if _profileActiveMain}
|
|
<ul class="nav nav-tabs">
|
|
<li class="active"><a data-toggle='tab' href="#profileCustomize">Avatar</a></li>
|
|
<li><a data-toggle='tab' href="#profileEdit">Profile</a></li>
|
|
</ul>
|
|
|
|
<div class="tab-content">
|
|
<div class="tab-pane active" id="profileCustomize">
|
|
<app:avatar:customize />
|
|
</div>
|
|
|
|
<div class="tab-pane" id="profileEdit"><app:avatar:profile user="{_user}" main="true" /></div>
|
|
</div>
|
|
{else}
|
|
<app:avatar:profile profile={_profileActive} />
|
|
{/}
|
|
<@footer>
|
|
<button data-dismiss="modal" class="btn btn-success">Ok</button>
|
|
</@footer>
|
|
</app:modals:modal>
|
|
|
|
<avatar:>
|
|
<div class="avatar {{#if @main}}main-avatar{{/}} {{#if @party}}party-avatar{{/}}" data-toggle='modal' data-target='#avatar-modal' data-uid="{@profile.id}" x-bind="click:profileChangeActive">
|
|
|
|
{#if and(@profile.items.pet, not(@minimal))}
|
|
<img src='/img/sprites/{@profile.items.pet.icon}' />
|
|
{/}
|
|
|
|
{#with @profile.preferences as :p}
|
|
<div class='character-sprites'>
|
|
<span class='{:p.gender}_skin_{:p.skin}'></span>
|
|
<span class='{:p.gender}_hair_{:p.hair}'></span>
|
|
<span class="{equipped(@profile, 'armor')}"></span>
|
|
{#if :p.showHelm}
|
|
<span class="{equipped(@profile, 'head')}"></span>
|
|
{else}
|
|
<span class="{:p.gender}_head_0"></span>
|
|
{/}
|
|
<span class='{:p.gender}_shield_{@profile.items.shield}'></span>
|
|
<span class='{:p.gender}_weapon_{@profile.items.weapon}'></span>
|
|
</div>
|
|
{/}
|
|
|
|
{{#unless @minimal}}
|
|
<div class="lvl"><span class="badge badge-info">Lvl {@profile.stats.lvl}</span></div>
|
|
{{/}}
|
|
</div>
|
|
|
|
<customize:>
|
|
<!-- user avatar preview -->
|
|
<figure class="avatar-window">
|
|
<app:avatar:avatar profile={_user} minimal="true" />
|
|
<figcaption class="char-name">{username(_user.auth)}</figcaption>
|
|
</figure>
|
|
|
|
<!-- customization options -->
|
|
{#with _user.preferences as :p}
|
|
<menu type="list">
|
|
<!-- gender -->
|
|
<li class="customize-menu">
|
|
<menu label="Head">
|
|
<button type="button" class="m_head_0 customize-option" data-value="m" x-bind="click:customizeGender"></button>
|
|
<button type="button" class="f_head_0 customize-option" data-value="f" x-bind="click:customizeGender"></button>
|
|
</menu>
|
|
<label class="checkbox">
|
|
<input type=checkbox checked="{_user.preferences.showHelm}" /> Show Helm
|
|
</label>
|
|
|
|
</li>
|
|
|
|
<!-- hair -->
|
|
<li class="customize-menu">
|
|
<menu label="Hair">
|
|
<button type="button" class="{:p.gender}_hair_blond customize-option" data-value="blond" x-bind="click:customizeHair"></button>
|
|
<button type="button" class="{:p.gender}_hair_black customize-option" data-value="black" x-bind="click:customizeHair"></button>
|
|
<button type="button" class="{:p.gender}_hair_brown customize-option" data-value="brown" x-bind="click:customizeHair"></button>
|
|
<button type="button" class="{:p.gender}_hair_white customize-option" data-value="white" x-bind="click:customizeHair"></button>
|
|
</menu>
|
|
</li>
|
|
|
|
<!-- skin -->
|
|
<li class="customize-menu">
|
|
<menu label="Skin">
|
|
<button type="button" class='{:p.gender}_skin_dead customize-option' data-value="dead" x-bind="click:customizeSkin"></button>
|
|
<button type="button" class='{:p.gender}_skin_orc customize-option' data-value="orc" x-bind="click:customizeSkin"></button>
|
|
<button type="button" class='{:p.gender}_skin_asian customize-option' data-value="asian" x-bind="click:customizeSkin"></button>
|
|
<button type="button" class='{:p.gender}_skin_black customize-option' data-value="black" x-bind="click:customizeSkin"></button>
|
|
<button type="button" class='{:p.gender}_skin_white customize-option' data-value="white" x-bind="click:customizeSkin"></button>
|
|
</menu>
|
|
</li>
|
|
</menu>
|
|
|
|
{#if equal(_user.preferences.gender, 'f')} <!-- Sorry boys -->
|
|
<menu type="list">
|
|
<li class="customize-menu">
|
|
<menu label="Clothing">
|
|
<button type="button" class="f_armor_0_v1 customize-option" data-value="v1" x-bind="click:customizeArmorSet"></button>
|
|
<button type="button" class="f_armor_0_v2 customize-option" data-value="v2" x-bind="click:customizeArmorSet"></button>
|
|
</menu>
|
|
</li>
|
|
</menu>
|
|
{/}
|
|
{/}
|
|
|
|
<profile:>
|
|
<div class='row-fluid'>
|
|
<div class='span6 well'>
|
|
{#if and(_profileEditing, _profileActiveMain)}
|
|
<a class='btn btn-success' x-bind="click:profileSave">Save</a>
|
|
<!-- TODO use photo-upload instead: https://groups.google.com/forum/?fromgroups=#!topic/derbyjs/xMmADvxBOak -->
|
|
<div class="control-group">
|
|
<label class="control-label" for="profileImageUrl">Photo Url</label>
|
|
<div class="controls">
|
|
<input type="url" id="profileImageUrl" value="{_user.profile.imageUrl}" placeholder="Image Url"/>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label class="control-label" for="profileFullName">Full Name</label>
|
|
<div class="controls">
|
|
<input type="text" id="profileFullName" placeholder="Full Name" value="{_user.profile.name}" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label class="control-label" for="profileBlurb">Blurb</label>
|
|
<div class="controls">
|
|
<textarea id="profileBlurb" placeholder="Blurb" >{_user.profile.blurb}</textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label class="control-label" for="profileWebsite">Websites</label>
|
|
<div class="controls">
|
|
<form x-bind="submit:profileAddWebsite">
|
|
<input type="url" id="profileWebsite" value="{_newProfileWebsite}" placeholder="Add Website"/>
|
|
</form>
|
|
</div>
|
|
<ul>
|
|
{#each _user.profile.websites as :website}
|
|
<!-- would prefer if there were and index in #each, instead using data-website to search with indexOf -->
|
|
<li>{:website} <a data-website="{:website}" x-bind="click:profileRemoveWebsite"><i class='icon-remove'></i></a></li>
|
|
{/}
|
|
</ul>
|
|
|
|
</div>
|
|
<a class='btn btn-success' x-bind="click:profileSave">Save</a>
|
|
{else}
|
|
<h3>
|
|
{#if _profileActive.profile.name}
|
|
{_profileActive.profile.name}
|
|
{else}
|
|
{username(_profileActive.auth)}
|
|
{/}
|
|
{#if _profileActiveMain}<a class='btn pull-right' x-bind="click:profileEdit">Edit</a>{/}
|
|
</h3>
|
|
{#if _profileActive.profile.imageUrl}
|
|
<img src="{@user.profile.imageUrl}" />
|
|
{/}
|
|
{#if _profileActive.profile.blurb}
|
|
<p>{_profileActive.profile.blurb}</p>
|
|
{/}
|
|
{#if _profileActive.profile.websites}
|
|
<ul>
|
|
{#each _profileActive.profile.websites as :website}
|
|
<li>{:website}</li>
|
|
{/}
|
|
</ul>
|
|
{/}
|
|
{/}
|
|
</div>
|
|
|
|
<div class='span6'>
|
|
<h3>Achievements</h3>
|
|
<app:avatar:achievements />
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<achievements:>
|
|
<!--TODO replce this in the future with HTML from BrowserQuest's index.html, which properly handles the achievements
|
|
sprite-sheets (see BQ's achievements.css, main.css) -->
|
|
<img src='/img/original_user.png' /> Original User! |