mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-01 07:21:15 +00:00
Merge branch 'develop' into zakkain-ui-tweaks
Conflicts: styles/app/index.styl styles/app/tasks.styl views/app/alerts.html views/app/avatar.html views/app/header.html views/app/index.html Merge branch 'develop' into zakkain-ui-tweaks Conflicts: styles/app/index.styl styles/app/tasks.styl views/app/alerts.html views/app/avatar.html views/app/header.html views/app/index.html by popular demand, we're dropping the crosshatched square and going blank Conflicts: styles/app/tasks.styl
This commit is contained in:
commit
fa89b20dd5
32 changed files with 1355 additions and 257 deletions
12
.gitmodules
vendored
12
.gitmodules
vendored
|
|
@ -1,18 +1,6 @@
|
|||
[submodule "public/vendor/bootstrap-datepicker"]
|
||||
path = public/vendor/bootstrap-datepicker
|
||||
url = https://github.com/eternicode/bootstrap-datepicker.git
|
||||
[submodule "public/vendor/bootstrap-growl"]
|
||||
path = public/vendor/bootstrap-growl
|
||||
url = https://github.com/ifightcrime/bootstrap-growl.git
|
||||
[submodule "public/vendor/bootstrap"]
|
||||
path = public/vendor/bootstrap
|
||||
url = https://github.com/twitter/bootstrap.git
|
||||
[submodule "public/vendor/github-buttons"]
|
||||
path = public/vendor/github-buttons
|
||||
url = https://github.com/mdo/github-buttons.git
|
||||
[submodule "public/vendor/jquery-cookie"]
|
||||
path = public/vendor/jquery-cookie
|
||||
url = https://github.com/carhartl/jquery-cookie.git
|
||||
[submodule "public/vendor/jquery-ui"]
|
||||
path = public/vendor/jquery-ui
|
||||
url = https://github.com/jquery/jquery-ui.git
|
||||
|
|
|
|||
|
|
@ -1,2 +1,9 @@
|
|||
3/3/2013
|
||||
## 3/21/2013
|
||||
* New Design: https://github.com/lefnire/habitrpg/issues/585
|
||||
* Toggle helm visible: https://trello.com/card/toggle-helm-visible/50e5d3684fe3a7266b0036d6/153
|
||||
* Toggle Header: https://trello.com/card/toggle-header/50e5d3684fe3a7266b0036d6/241
|
||||
* Deletable Accounts: https://trello.com/card/deletable-accounts/50e5d3684fe3a7266b0036d6/69
|
||||
* Undo Button: https://trello.com/card/undo-button/50e5d3684fe3a7266b0036d6/20
|
||||
|
||||
## 3/3/2013
|
||||
* Add custom day start: https://trello.com/card/custom-day-start/50e5d3684fe3a7266b0036d6/15
|
||||
1067
public/css/docs.css
Normal file
1067
public/css/docs.css
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
Before Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.4 KiB |
BIN
public/img/sprites/Mount-SpriteSheet.png
Normal file
BIN
public/img/sprites/Mount-SpriteSheet.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.1 KiB |
11
public/img/sprites/Mounts.css
Normal file
11
public/img/sprites/Mounts.css
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
Mount_Head_Lion, Mount_Body_Lion, Mount_Head_PolarBear, Mount_Body_PolarBear, Mount_Head_Panda, Mount_Body_Panda, Mount_Head_Tiger, Mount_Body_Tiger, Mount_Head_Bear, Mount_Body_Bear {background: url(Mount-SpriteSheet.png) no-repeat}
|
||||
Mount_Head_Lion {background-position: 0 0; width: 105px; height: 123px}
|
||||
Mount_Body_Lion {background-position: -105 0; width: 105px; height: 123px}
|
||||
Mount_Head_PolarBear {background-position: -210 0; width: 105px; height: 123px}
|
||||
Mount_Body_PolarBear {background-position: -315 0; width: 105px; height: 123px}
|
||||
Mount_Head_Panda {background-position: -420 0; width: 105px; height: 123px}
|
||||
Mount_Body_Panda {background-position: -525 0; width: 105px; height: 123px}
|
||||
Mount_Head_Tiger {background-position: -630 0; width: 105px; height: 123px}
|
||||
Mount_Body_Tiger {background-position: -735 0; width: 105px; height: 123px}
|
||||
Mount_Head_Bear {background-position: -840 0; width: 105px; height: 123px}
|
||||
Mount_Body_Bear {background-position: -945 0; width: 105px; height: 123px}
|
||||
|
|
@ -1,17 +1,10 @@
|
|||
#PetEggs {
|
||||
/* egg sprite size */
|
||||
width: 48px;
|
||||
height: 51px;
|
||||
/* link to sprite sheet image */
|
||||
background-image: url(Egg_Sprite_Sheet.png);
|
||||
}
|
||||
/* defines where in the sheet the eggs are */
|
||||
.WolfEgg{background-position: 0px 0px;}
|
||||
.TigerEgg{background-position: 0px -51px;}
|
||||
.PolarBearEgg{background-position: 0px -102px;}
|
||||
.PandaEgg{background-position: 0px -153px;}
|
||||
.LionEgg{background-position: 0px -204px;}
|
||||
.FlyingPigEgg{background-position: 0px -255px;}
|
||||
.DrakeEgg{background-position: 0px -306px;}
|
||||
.CactusEgg{background-position: 0px -357px;}
|
||||
.BearEgg{background-position: 0px -408px;}
|
||||
Pet_Egg_Wolf, Pet_Egg_Tiger, Pet_Egg_PolarBear, Pet_Egg_Panda, Pet_Egg_Lion, Pet_Egg_FlyingPig, Pet_Egg_Drake, Pet_Egg_Cactus, Pet_Egg_Bear {background: url(Egg_Sprite_Sheet.png) no-repeat}
|
||||
Pet_Egg_Wolf {background-position: 0 0; width: 48px; height: 51px}
|
||||
Pet_Egg_Tiger {background-position: 0 -51; width: 48px; height: 51px}
|
||||
Pet_Egg_PolarBear{background-position: 0 -102; width: 48px; height: 51px}
|
||||
Pet_Egg_Panda {background-position: 0 -153; width: 48px; height: 51px}
|
||||
Pet_Egg_Lion {background-position: 0 -204; width: 48px; height: 51px}
|
||||
Pet_Egg_FlyingPig {background-position: 0 -255; width: 48px; height: 51px}
|
||||
Pet_Egg_Drake {background-position: 0 -306; width: 48px; height: 51px}
|
||||
Pet_Egg_Cactus {background-position: 0 -357; width: 48px; height: 51px}
|
||||
Pet_Egg_Bear {background-position: 0 -408; width: 48px; height: 51px}
|
||||
1
public/vendor/bootstrap
vendored
1
public/vendor/bootstrap
vendored
|
|
@ -1 +0,0 @@
|
|||
Subproject commit eb24718add4dd36fe92fdbdb79e6ff4ce5919300
|
||||
1
public/vendor/bootstrap-datepicker
vendored
1
public/vendor/bootstrap-datepicker
vendored
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 3f12c74bcd5a0d6763951ce14450c8727b661bc9
|
||||
1
public/vendor/bootstrap-growl
vendored
1
public/vendor/bootstrap-growl
vendored
|
|
@ -1 +0,0 @@
|
|||
Subproject commit c033de329bb1b21e4175e2a53efd844b664d27c8
|
||||
1
public/vendor/jquery-cookie
vendored
1
public/vendor/jquery-cookie
vendored
|
|
@ -1 +0,0 @@
|
|||
Subproject commit cefb0c399960553edae76f91f9fc5470a1c3bc04
|
||||
|
|
@ -61,14 +61,8 @@ module.exports.app = (appExports, model) ->
|
|||
batch.commit()
|
||||
browser.resetDom(model)
|
||||
|
||||
appExports.closeAlgosNotification = (e, el) ->
|
||||
user.set('flags.algosNotification', 'hide')
|
||||
|
||||
appExports.closeOnliesNotification = (e, el) ->
|
||||
user.set('flags.onliesNotification', 'hide')
|
||||
|
||||
appExports.closePriorityNotification = (e, el) ->
|
||||
user.set('flags.priorityNotification', 'hide')
|
||||
appExports.closeNewStuff = (e, el) ->
|
||||
user.set('flags.newStuff', 'hide')
|
||||
|
||||
appExports.customizeGender = (e, el) ->
|
||||
user.set 'preferences.gender', $(el).attr('data-value')
|
||||
|
|
|
|||
|
|
@ -20,6 +20,6 @@ module.exports.app = (appExports, model) ->
|
|||
appExports.profileChangeActive = (e, el) ->
|
||||
uid = $(el).attr('data-uid')
|
||||
model.ref '_profileActive', model.at("users.#{uid}")
|
||||
model.set '_profileActiveMain', model.get('_user.id') == uid
|
||||
model.set '_profileActiveMain', user.get('id') is uid
|
||||
model.set '_profileActiveUsername', character.username model.get('_profileActive.auth')
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,9 @@ router.get '/user', auth, (req, res) ->
|
|||
user.stats.maxHealth = 50
|
||||
|
||||
delete user.apiToken
|
||||
if user.auth
|
||||
delete user.auth.hashed_password
|
||||
delete user.auth.salt
|
||||
|
||||
res.json user
|
||||
|
||||
|
|
@ -184,8 +187,12 @@ scoreTask = (req, res, next) ->
|
|||
delta = scoring.score(model, taskId, direction)
|
||||
result = model.get ('_user.stats')
|
||||
result.delta = delta
|
||||
res.send(result)
|
||||
res.json result
|
||||
|
||||
###
|
||||
POST /user/tasks/:taskId/:direction
|
||||
###
|
||||
router.post '/user/task/:taskId/:direction', auth, scoreTask
|
||||
router.post '/user/tasks/:taskId/:direction', auth, scoreTask
|
||||
|
||||
module.exports = router
|
||||
|
|
|
|||
|
|
@ -1,3 +1,19 @@
|
|||
.new-stuff
|
||||
position: fixed
|
||||
text-align: center
|
||||
top: 0
|
||||
left: 0
|
||||
width: 100%
|
||||
height: 0
|
||||
z-index: 1010
|
||||
|
||||
.new-stuff> .alert
|
||||
border-top: 0
|
||||
border-radius: 0 0 4px 4px
|
||||
padding-right: 14px
|
||||
display: inline-block
|
||||
|
||||
|
||||
// variables
|
||||
|
||||
gpColor = #FBEFC0
|
||||
|
|
|
|||
|
|
@ -10,10 +10,8 @@
|
|||
@import "./helpers.styl";
|
||||
@import "./responsive.styl";
|
||||
@import "./header.styl";
|
||||
|
||||
@import "./scrollbars.styl";
|
||||
|
||||
@import "../../public/vendor/bootstrap-datepicker/css/datepicker.css";
|
||||
|
||||
// fix exploding to very wide for some reason
|
||||
.datepicker
|
||||
|
|
|
|||
|
|
@ -271,3 +271,16 @@ describe 'API', ->
|
|||
expect(res.statusCode).to.be 400
|
||||
expect(res.body.err).to.be 'No task found.'
|
||||
done()
|
||||
|
||||
it 'POST /api/v1/user/task/:id/up', (done) ->
|
||||
tid = currentUser.habitIds[0]
|
||||
request.post("#{baseURL}/user/task/#{tid}/up")
|
||||
.set('Accept', 'application/json')
|
||||
.set('X-API-User', currentUser.id)
|
||||
.set('X-API-Key', currentUser.apiToken)
|
||||
.send({})
|
||||
.end (res) ->
|
||||
expect(res.body.err).to.be undefined
|
||||
expect(res.statusCode).to.be 200
|
||||
expect(res.body).to.eql { gp: 1, exp: 7.5, lvl: 1, hp: 50, delta: 1 }
|
||||
done()
|
||||
|
|
|
|||
|
|
@ -1,32 +1,16 @@
|
|||
<alerts:>
|
||||
<newStuff:>
|
||||
{#if equal(_user.flags.newStuff,'show')}
|
||||
<div class='new-stuff'>
|
||||
<p class='alert alert-success'>
|
||||
<a href="https://github.com/lefnire/habitrpg/blob/develop/CHANGELOG.md#3212013" target="_blank">New Stuff!</a> <a x-bind="click:closeNewStuff"><i class='icon-remove'></i></a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
{/}
|
||||
|
||||
<flash:>
|
||||
{#if _flash.error}
|
||||
<ul class="unstyled alert alert-error">
|
||||
{#each _flash.error as :error}<li>{:error}</li>{/}
|
||||
</ul>
|
||||
{/}
|
||||
|
||||
{#if equal(_user.flags.algosNotification,'show')}
|
||||
<div class='alert alert-success'>
|
||||
<a x-bind="click:closeAlgosNotification" class=pull-right>✕</a>
|
||||
<p>New features! Custom day start, new and better algorithms, authentication enhancements. See <a target="_blank" href="http://habitrpg.tumblr.com/post/44468869138/custom-day-start-better-algorithms-auth-enhancements">details here.</a>
|
||||
"Hey, I had more Exp before this roll-out!" <a data-target="#restore-modal" data-toggle=modal>Restore your Exp here.</a></p>
|
||||
</div>
|
||||
{/}
|
||||
|
||||
{#if equal(_user.flags.onliesNotification, 'show')}
|
||||
<div class='alert alert-success'>
|
||||
<a x-bind="click:closeOnliesNotification " class=pull-right>✕</a>
|
||||
<p>
|
||||
"Onlies" now gain / lose value just like other habits, and are reset back to 0 at the beginning of each day.
|
||||
See <a target="_blank" href="https://trello.com/card/shading-onlies/50e5d3684fe3a7266b0036d6/67">details here</a>, and
|
||||
chime in with your recommendations on this mechanic.
|
||||
</p>
|
||||
</div>
|
||||
{/}
|
||||
|
||||
{#if equal(_user.flags.priorityNotification, 'show')}
|
||||
<div class='alert alert-success'>
|
||||
<a x-bind="click:closePriorityNotification" class=pull-right>✕</a>
|
||||
<p>New Feature: Priority Multiplier! You can now multiply "more important" tasks on a 1x, 1.5x, or 2x scale. <a target="_blank" href="https://trello.com/card/priority-multiplier/50e5d3684fe3a7266b0036d6/17">See details</a>.</p>
|
||||
</div>
|
||||
{/}
|
||||
|
|
@ -1,20 +1,18 @@
|
|||
<modals:>
|
||||
<app:modals:modal modalId="avatar-modal">
|
||||
{#if _profileActiveMain}
|
||||
{#with _user.preferences}
|
||||
<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>
|
||||
<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 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} />
|
||||
{/}
|
||||
|
|
@ -29,9 +27,20 @@
|
|||
data-level="{@profile.stats.lvl}"
|
||||
data-checkpet="{#if @profile.items.pet}hasPet{/}"
|
||||
data-checkuser="{#if equal(@profile.id, _user.id)}isUser{/}"
|
||||
data-toggle='modal' data-target='#avatar-modal' data-uid="{@profile.id}" x-bind="click:profileChangeActive">
|
||||
data-toggle='modal' data-target='#avatar-modal' data-uid="{@profile.id}" x-bind="click:profileChangeActive"
|
||||
rel="popover" data-title="{{username(@profile.auth)}}" data-placement="bottom" data-trigger="hover" data-html="true" data-content="
|
||||
<div>
|
||||
<div class='progress progress-danger' style='height:5px;'>
|
||||
<div class='bar' style='height: 5px; width: {percent(@profile.stats.hp, 50)}%;'></div>
|
||||
</div>
|
||||
<div class='progress progress-warning' style='height:5px;'>
|
||||
<div class='bar' style='height: 5px; width: {percent(@profile.stats.exp, tnl(@profile.stats.lvl))}%;'></div>
|
||||
</div>
|
||||
<div>GP: {{floor(@profile.stats.gp)}}</div>
|
||||
</div>
|
||||
">
|
||||
<div class='character-sprites'>
|
||||
{#unless @minimal}{#if @profile.items.pet}<img class="pet" src='img/sprites/{@profile.items.pet.icon}' />{/}{/}
|
||||
{#if and(@profile.items.pet, not(@minimal))}<img class="pet" src='img/sprites/{@profile.items.pet.icon}' />{/}
|
||||
{#with @profile.preferences as :p}
|
||||
<span class='{:p.gender}_skin_{:p.skin}'></span>
|
||||
<span class='{:p.gender}_hair_{:p.hair}'></span>
|
||||
|
|
@ -45,8 +54,6 @@
|
|||
<span class='{:p.gender}_weapon_{@profile.items.weapon}'></span>
|
||||
{/}
|
||||
</div>
|
||||
{{#unless @minimal}}
|
||||
{{/}}
|
||||
</figure>
|
||||
|
||||
<customize:>
|
||||
|
|
@ -56,101 +63,103 @@
|
|||
</figure>
|
||||
|
||||
<!-- customization options -->
|
||||
<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="{.gender}_hair_blond customize-option" data-value="blond" x-bind="click:customizeHair"></button>
|
||||
<button type="button" class="{.gender}_hair_black customize-option" data-value="black" x-bind="click:customizeHair"></button>
|
||||
<button type="button" class="{.gender}_hair_brown customize-option" data-value="brown" x-bind="click:customizeHair"></button>
|
||||
<button type="button" class="{.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='{.gender}_skin_dead customize-option' data-value="dead" x-bind="click:customizeSkin"></button>
|
||||
<button type="button" class='{.gender}_skin_orc customize-option' data-value="orc" x-bind="click:customizeSkin"></button>
|
||||
<button type="button" class='{.gender}_skin_asian customize-option' data-value="asian" x-bind="click:customizeSkin"></button>
|
||||
<button type="button" class='{.gender}_skin_black customize-option' data-value="black" x-bind="click:customizeSkin"></button>
|
||||
<button type="button" class='{.gender}_skin_white customize-option' data-value="white" x-bind="click:customizeSkin"></button>
|
||||
</menu>
|
||||
</li>
|
||||
</menu>
|
||||
|
||||
{#if equal(_user.preferences.gender, 'f')} <!-- Sorry boys -->
|
||||
{#with _user.preferences as :p}
|
||||
<menu type="list">
|
||||
<!-- gender -->
|
||||
<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 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 _profileEditing}
|
||||
{#if _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>
|
||||
{#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 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 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 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>
|
||||
<a class='btn btn-success' x-bind="click:profileSave">Save</a>
|
||||
{/}
|
||||
<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 _profileActive.profile.name}
|
||||
{_profileActive.profile.name}
|
||||
{else}
|
||||
{username(_profileActive.auth)}
|
||||
{/}
|
||||
{#if _profileActiveMain}<a class='btn pull-right' x-bind="click:profileEdit">Edit</a>{/}
|
||||
</h3>
|
||||
|
|
@ -163,7 +172,7 @@
|
|||
{#if _profileActive.profile.websites}
|
||||
<ul>
|
||||
{#each _profileActive.profile.websites as :website}
|
||||
<li>{:website}</li>
|
||||
<li>{:website}</li>
|
||||
{/}
|
||||
</ul>
|
||||
{/}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
<ul class='unstyled'>
|
||||
<li><a href="/static/privacy">Privacy</a></li>
|
||||
<li><a href="/static/terms">Terms</a></li>
|
||||
<li><strong>© 2012 OCDevel LLC</strong></li>
|
||||
<li><strong>© 2013 OCDevel LLC</strong></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -41,5 +41,6 @@
|
|||
</div>
|
||||
{{/}}
|
||||
{{/}}
|
||||
|
||||
</header>
|
||||
{/}
|
||||
|
|
@ -21,10 +21,13 @@
|
|||
<!-- CDN -->
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap-responsive.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.0.0/css/datepicker.css" rel="stylesheet">
|
||||
|
||||
|
||||
<Header:>
|
||||
<app:modals:modals />
|
||||
<ui:connectionAlert>
|
||||
<app:alerts:newStuff />
|
||||
<div class="header-wrap">
|
||||
|
||||
{#if _undo}<a x-bind="click:undo" class='label undo-button'>Undo</a>{/}
|
||||
|
|
@ -37,7 +40,7 @@
|
|||
<br/>
|
||||
<div id="notification-area"></div>
|
||||
<div id="wrap">
|
||||
<app:alerts:alerts />
|
||||
<app:alerts:flash />
|
||||
<div id=main class="grid">
|
||||
<app:tasks:taskLists />
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,87 @@
|
|||
<rewardsColumn:>
|
||||
<div class="module">
|
||||
<div class="task-column rewards">
|
||||
<!-- cash or tokens -->
|
||||
<span class='option-box pull-right wallet'>
|
||||
{#unless _view.activeTabPets}
|
||||
<div class="money">
|
||||
{gold(_user.stats.gp)}
|
||||
<span class='shop_gold' rel='tooltip' title='Gold'></span>
|
||||
</div>
|
||||
<div class="money">
|
||||
{silver(_user.stats.gp)}
|
||||
<span class='shop_silver' rel='tooltip' title='Silver'></span>
|
||||
</div>
|
||||
<!-- <div class="money">
|
||||
{copper(_user.stats.gp)}
|
||||
<span class='shop_copper' rel='tooltip' title='Copper'></span>
|
||||
</div> -->
|
||||
{else}
|
||||
<app:rewards:userTokens />
|
||||
{/}
|
||||
</span>
|
||||
<h2 class="task-column_title">Rewards</h2>
|
||||
|
||||
<!-- if pets are enabled, make tabs -->
|
||||
{#if equal(_user.flags.petsEnabled,true)}
|
||||
<div class='tabbable tabs-below'>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="rewards-tab">
|
||||
<app:rewards:rewardsTab />
|
||||
</div>
|
||||
|
||||
<!-- pets pane -->
|
||||
<div class="tab-pane pet-grid" id="pets-tab">
|
||||
{#with _view.items.pets as :pets}
|
||||
<table>
|
||||
<tr>
|
||||
{#with :pets[0]}<app:rewards:pet />{/}
|
||||
{#with :pets[1]}<app:rewards:pet />{/}
|
||||
{#with :pets[2]}<app:rewards:pet />{/}
|
||||
{#with :pets[3]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
<tr>
|
||||
{#with :pets[4]}<app:rewards:pet />{/}
|
||||
{#with :pets[5]}<app:rewards:pet />{/}
|
||||
{#with :pets[6]}<app:rewards:pet />{/}
|
||||
{#with :pets[7]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
<tr>
|
||||
{#with :pets[8]}<app:rewards:pet />{/}
|
||||
{#with :pets[9]}<app:rewards:pet />{/}
|
||||
{#with :pets[10]}<app:rewards:pet />{/}
|
||||
{#with :pets[11]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
<tr>
|
||||
{#with :pets[12]}<app:rewards:pet />{/}
|
||||
{#with :pets[13]}<app:rewards:pet />{/}
|
||||
{#with :pets[14]}<app:rewards:pet />{/}
|
||||
{#with :pets[15]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
<tr>
|
||||
{#with :pets[16]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
</table>
|
||||
{/}
|
||||
</div>
|
||||
<!--<div class="tab-pane" id="mounts-tab">...</div>-->
|
||||
</div>
|
||||
|
||||
<ul class="nav nav-tabs" id="rewardsTabs">
|
||||
<li class="active"><a href="#rewards-tab" data-toggle="tab" x-bind="click:activateRewardsTab">Rewards</a></li>
|
||||
<li><a href="#pets-tab" data-toggle="tab" x-bind='click:activatePetsTab'>Pets</a></li>
|
||||
<!--<li><a href="#mounts-tab" data-toggle="tab">Mounts</a></li>-->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- if pets are disabled, just do rewards tab -->
|
||||
{else}
|
||||
<app:rewards:rewardsTab />
|
||||
{/}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<rewardsTab:>
|
||||
<!-- add new reward -->
|
||||
<app:tasks:newTask type="reward" inputValue="{_newReward}" placeHolder="New Reward" />
|
||||
|
|
@ -21,7 +105,7 @@
|
|||
{/}
|
||||
|
||||
<pet:>
|
||||
<td class="{{#if _user.items.pets[.name]}}active-pet{{/}}">
|
||||
<td class="{#if _user.items.pets[.name]}active-pet{/}">
|
||||
<img rel=tooltip title="{.text} - {.value} Tokens" x-bind="click:selectPet" data-pet='{.name}' src='img/sprites/{.icon}'/>
|
||||
</td>
|
||||
|
||||
|
|
@ -35,8 +119,7 @@
|
|||
|
||||
|
||||
<item:>
|
||||
{#unless :item.hide}
|
||||
<li class="task reward-item">
|
||||
<li class="task reward-item {#if :item.hide}hide{/}">
|
||||
<!-- right-hand side control buttons -->
|
||||
<div class="task-meta-controls">
|
||||
<span rel="popover" data-trigger="hover" data-placement="left" data-content="{:item.notes}" data-original-title="{:item.text}" class='task-notes'><i class="icon-comment"></i></span>
|
||||
|
|
@ -56,5 +139,4 @@
|
|||
<!-- main content -->
|
||||
<span class="shop_{:item.classes} shop-sprite item-img"></span>
|
||||
<p class="task-text">{:item.text}</p>
|
||||
</li>
|
||||
{/}
|
||||
</li>
|
||||
|
|
@ -149,4 +149,4 @@
|
|||
</li>
|
||||
</ul>
|
||||
{/}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -54,87 +54,8 @@
|
|||
</div>
|
||||
|
||||
<!-- Rewards Column -->
|
||||
<div class="module">
|
||||
<div class="task-column rewards">
|
||||
<!-- cash or tokens -->
|
||||
<span class='option-box pull-right wallet'>
|
||||
{#unless _view.activeTabPets}
|
||||
<div class="money">
|
||||
{gold(_user.stats.gp)}
|
||||
<span class='shop_gold' rel='tooltip' title='Gold'></span>
|
||||
</div>
|
||||
<div class="money">
|
||||
{silver(_user.stats.gp)}
|
||||
<span class='shop_silver' rel='tooltip' title='Silver'></span>
|
||||
</div>
|
||||
<!-- <div class="money">
|
||||
{copper(_user.stats.gp)}
|
||||
<span class='shop_copper' rel='tooltip' title='Copper'></span>
|
||||
</div> -->
|
||||
{else}
|
||||
<app:rewards:userTokens />
|
||||
{/}
|
||||
</span>
|
||||
<h2 class="task-column_title">Rewards</h2>
|
||||
<app:rewards:rewardsColumn />
|
||||
|
||||
<!-- if pets are enabled, make tabs -->
|
||||
{#if equal(_user.flags.petsEnabled,true)}
|
||||
<div class='tabbable tabs-below'>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="rewards-tab">
|
||||
<app:rewards:rewardsTab />
|
||||
</div>
|
||||
|
||||
<!-- pets pane -->
|
||||
<div class="tab-pane pet-grid" id="pets-tab">
|
||||
{#with _view.items.pets as :pets}
|
||||
<table>
|
||||
<tr>
|
||||
{#with :pets[0]}<app:rewards:pet />{/}
|
||||
{#with :pets[1]}<app:rewards:pet />{/}
|
||||
{#with :pets[2]}<app:rewards:pet />{/}
|
||||
{#with :pets[3]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
<tr>
|
||||
{#with :pets[4]}<app:rewards:pet />{/}
|
||||
{#with :pets[5]}<app:rewards:pet />{/}
|
||||
{#with :pets[6]}<app:rewards:pet />{/}
|
||||
{#with :pets[7]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
<tr>
|
||||
{#with :pets[8]}<app:rewards:pet />{/}
|
||||
{#with :pets[9]}<app:rewards:pet />{/}
|
||||
{#with :pets[10]}<app:rewards:pet />{/}
|
||||
{#with :pets[11]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
<tr>
|
||||
{#with :pets[12]}<app:rewards:pet />{/}
|
||||
{#with :pets[13]}<app:rewards:pet />{/}
|
||||
{#with :pets[14]}<app:rewards:pet />{/}
|
||||
{#with :pets[15]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
<tr>
|
||||
{#with :pets[16]}<app:rewards:pet />{/}
|
||||
</tr>
|
||||
</table>
|
||||
{/}
|
||||
</div>
|
||||
<!--<div class="tab-pane" id="mounts-tab">...</div>-->
|
||||
</div>
|
||||
|
||||
<ul class="nav nav-tabs" id="rewardsTabs">
|
||||
<li class="active"><a href="#rewards-tab" data-toggle="tab" x-bind="click:activateRewardsTab">Rewards</a></li>
|
||||
<li><a href="#pets-tab" id='pets-tab' data-toggle="tab" x-bind='click:activatePetsTab'>Pets</a></li>
|
||||
<!--<li><a href="#mounts-tab" data-toggle="tab">Mounts</a></li>-->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- if pets are disabled, just do rewards tab -->
|
||||
{else}
|
||||
<app:rewards:rewardsTab />
|
||||
{/}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Templates -->
|
||||
<newTask:>
|
||||
|
|
|
|||
|
|
@ -36,8 +36,16 @@
|
|||
<p>Python command line app for HabitRPG (http://habitrpg.com)</p>
|
||||
<h2 id="php-api"><a href="http://github.com/ruddfawcett/HabitRPG_PHP">PHP API</a></h2>
|
||||
<p>A PHP class for the HabitRPG API. Will be expanded when more features become available in the API.</p>
|
||||
|
||||
<h2 id="perl-api"><a href="https://metacpan.org/module/WebService::HabitRPG">WebService::HabitRPG — Perl API</a></h2>
|
||||
<p>A full-featured <a href="https://metacpan.org/module/WebService::HabitRPG">Perl interface</a> for HabitRPG. Development versions are available on <a href="https://github.com/pfenwick/WebService-HabitRPG">github</a>.
|
||||
|
||||
<h2 id="hrpg-cmd"><a href="https://metacpan.org/module/hrpg">hrpg - HabitRPG command line client</a></h2>
|
||||
<p>Command-line client for HabitRPG. Supports viewing status, listing tasks by types, creation of new types, incrementing/decrementing of tasks, API debugging, and more.</p>
|
||||
|
||||
<h2 id="suggest-an-add-on-extension">Suggest an Add-on / Extension</h2>
|
||||
|
||||
<p><a href="mailto:tylerrenelle@gmail.com">Email me</a> to have something listed here</p>
|
||||
</div>
|
||||
</div>
|
||||
<app:footer:footer />
|
||||
<app:footer:footer />
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class='container'>
|
||||
<p style="height:600;"><iframe src="http://player.vimeo.com/video/57639356" width="100%" height="539" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
|
||||
<p style="height:600;"><iframe src="//player.vimeo.com/video/57639356" width="100%" height="539" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap-responsive.min.css" rel="stylesheet">
|
||||
|
||||
<link href="/vendor/bootstrap/docs/assets/css/docs.css" rel="stylesheet">
|
||||
<link href="/css/docs.css" rel="stylesheet">
|
||||
<link href="/css/static-pages.css" rel="stylesheet">
|
||||
<link href="/css/footer.css" rel="stylesheet">
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue