Moved folders to website directory

This commit is contained in:
Blade Barringer
2015-02-03 14:10:55 -06:00
parent 576eec77f7
commit 8a8ce8d80d
92 changed files with 1 additions and 1 deletions
+92
View File
@@ -0,0 +1,92 @@
footer.footer(ng-controller='FooterCtrl')
.container
.row
.col-sm-3
h4=env.t('footerMobile')
ul.list-unstyled
li
a(href='https://itunes.apple.com/us/app/habitrpg/id689569235?mt=8', target='_blank')=env.t('mobileIOS')
li
a(href='https://play.google.com/store/apps/details?id=com.ocdevel.habitrpg', target='_blank')=env.t('mobileAndroid')
if env.isStaticPage
h4=env.t('language')
select(ng-change='changeLang()', ng-model='selectedLanguage', ng-options='language.name for language in languages')
.col-sm-3
h4=env.t('footerCompany')
ul.list-unstyled
if (!env.isStaticPage)
li
.btn.btn-sm.btn-success(ng-click='openModal("buyGems",{track:"Gems > Donate"})')
span.glyphicon.glyphicon-heart
| 
=env.t('companyDonate')
li
a(href='/static/features')=env.t('companyAbout')
li
a(target='_blank', href='http://blog.habitrpg.com/')=env.t('companyBlog')
li
a(href='http://habitrpg.wikia.com/wiki/App_and_Extension_Integrations', target='_blank')=env.t('companyExtensions')
li
a(target='_blank', href='http://habitrpg.wikia.com/wiki/FAQ')=env.t('FAQ')
li
a(href='/static/privacy')=env.t('companyPrivacy')
li
a(href='/static/terms')=env.t('companyTerms')
li
a(href='/static/contact')=env.t('contactUs')
.col-sm-3
h4=env.t('footerCommunity')
ul.list-unstyled
li
a(target='_blank', href='/static/community-guidelines')=env.t('communityGuidelines')
li
a(target='_blank', href='https://github.com/HabitRPG/habitrpg/issues/2760')=env.t('communityBug')
li
a(target='_blank', href='https://trello.com/c/odmhIqyW/440-read-first-table-of-contents')=env.t('communityFeature')
li
a(target='_blank', href='https://habitrpg.com/static/api')=env.t('API')
li
a(href='http://habitrpg.wikia.com/wiki/App_and_Extension_Integrations', target='_blank')=env.t('communityExtensions')
li
a(target='_blank', href='http://habitrpg.wikia.com/wiki/Special:Forum')=env.t('communityForum')
li
a(target='_blank', href='http://www.kickstarter.com/projects/lefnire/habitrpg-mobile')=env.t('communityKickstarter')
li
a(target='_blank', href='https://www.facebook.com/Habitrpg')=env.t('communityFacebook')
li
a(target='_blank', href='http://www.reddit.com/r/habitrpg/')=env.t('communityReddit')
.col-sm-3
if (env.NODE_ENV == 'production' && !env.IS_MOBILE)
h4=env.t('footerSocial')
.addthis_toolbox.addthis_default_style(addthis:url='https://habitrpg.com', addthis:title=env.t('socialTitle'))
table
tr
td
a.addthis_button_facebook_like(fb:like:layout='button_count')
tr
td
a.addthis_button_tweet(tw:via='habitrpg')
tr
td
iframe(src='/bower_components/github-buttons/github-btn.html?user=lefnire&repo=habitrpg&type=watch&count=true', allowtransparency='true', frameborder='0', scrolling='0', width='85px', height='20px')
tr
td
a.addthis_button_google_plusone(g:plusone:size='medium')
else if (env.NODE_ENV==='development' || env.NODE_ENV==='test') && !env.isStaticPage
h4 Debug
.btn-group-vertical
a.btn.btn-default(ng-click='setHealthLow()') Health = 1
a.btn.btn-default(ng-click='addMissedDay()') +1 Missed Day
a.btn.btn-default(ng-click='addTenGems()') +10 Gems
a.btn.btn-default(ng-click='addGold()') +GP
a.btn.btn-default(ng-click='addLevelsAndGold()') +Exp +GP +MP
a.btn.btn-default(ng-click='addOneLevel()') +1 Level
a.btn.btn-default(ng-click='addBossQuestProgressUp()') +1000 Boss Quest Progress Up
div(ng-init='deferredScripts()')
// Load audio last
audio#sound(autoplay)
source#oggSource(type="audio/ogg")
source#mp3Source(type="audio/mp3")
@@ -0,0 +1,2 @@
small
a(target='_blank', href='http://habitrpg.wikia.com/wiki/Markdown_Cheat_Sheet')=env.t('formattingMarkdown')
+93
View File
@@ -0,0 +1,93 @@
//- FIXME the commented-out figure.herobox used to have a functioning popover, but angular-ui-bootstrap doesn't support
html in popovers. Figure out what to do here. Also, {isUser:..} class seems to bring the user too far down with mounts.
Removing it will remove the user's name, but will allow more room for mounts & helms. IMO this is the lesser of two evils, revisit
//-figure.herobox(ng-click='clickMember(profile._id)', data-name='{{profile.profile.name}}', ng-class='{isUser: profile.id==user.id, hasPet: profile.items.currentPet}', data-level='{{profile.stats.lvl}}', data-uid='{{profile.id}}', rel='popover', data-placement='bottom', data-trigger='hover', data-html='true', data-content="<div ng-hide='profile.id == user.id'> <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>Level: {{profile.stats.lvl}}</div> <div>GP: {{profile.stats.gp | number:0}}</div> <div>{{count(profile.items.pets)}} / 90 Pets Found</div> </div>")
mixin avatar(opts)
.character-sprites
.addthis_native_toolbox(ng-if='profile._id==user._id', data-url="#{env.BASE_URL}/static/front/#?memberId={{profile._id}}", data-title="Check out my HabitRPG progress!")
// Mount Body
if !opts.minimal
span(ng-if='profile.items.currentMount', class='Mount_Body_{{profile.items.currentMount}}')
span(ng-if='profile.stats.buffs.snowball')
span.snowman
span(ng-if='profile.stats.buffs.spookDust')
span.spookman
span(ng-if='!profile.stats.buffs.snowball && !profile.stats.buffs.spookDust')
// Back Accessory
span(class='{{profile.items.gear.equipped.back}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.back}}', ng-if='profile.preferences.costume')
// Avatar
span(class='skin_{{profile.preferences.skin}}', ng-if='!profile.preferences.sleep')
span(class='skin_{{profile.preferences.skin}}_sleep', ng-if='profile.preferences.sleep')
// Shirt
span(class='{{profile.preferences.size}}_shirt_{{profile.preferences.shirt}}')
// Armor
span(class='{{profile.preferences.size}}_{{profile.items.gear.equipped.armor}}', ng-if='!profile.preferences.costume')
span(class='{{profile.preferences.size}}_{{profile.items.gear.costume.armor}}', ng-if='profile.preferences.costume')
//- Cape collar
span(class='{{profile.items.gear.equipped.back}}_collar', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.back}}_collar', ng-if='profile.preferences.costume')
// Body
span(class='{{profile.items.gear.equipped.body}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.body}}', ng-if='profile.preferences.costume')
// Hair
span(class='head_0')
span(class='hair_base_{{profile.preferences.hair.base}}_{{profile.preferences.hair.color}}')
span(class='hair_bangs_{{profile.preferences.hair.bangs}}_{{profile.preferences.hair.color}}')
span(class='hair_mustache_{{profile.preferences.hair.mustache}}_{{profile.preferences.hair.color}}')
span(class='hair_beard_{{profile.preferences.hair.beard}}_{{profile.preferences.hair.color}}')
// Eyewear
span(class='{{profile.items.gear.equipped.eyewear}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.eyewear}}', ng-if='profile.preferences.costume')
// Helm
span(class='{{profile.items.gear.equipped.head}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.head}}', ng-if='profile.preferences.costume')
// Head Accessory
span(class='{{profile.items.gear.equipped.headAccessory}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.headAccessory}}', ng-if='profile.preferences.costume')
// Flower
span(class='hair_flower_{{profile.preferences.hair.flower}}')
// Shield
span(class='{{profile.items.gear.equipped.shield}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.shield}}', ng-if='profile.preferences.costume')
// Weapon
span(class='{{profile.items.gear.equipped.weapon}}', ng-if='!profile.preferences.costume')
span(class='{{profile.items.gear.costume.weapon}}', ng-if='profile.preferences.costume')
// Mount Head
if !opts.minimal
span.current-mount(ng-if='profile.items.currentMount', class='Mount_Head_{{profile.items.currentMount}}')
// Resting
span(ng-class='{zzz:profile.preferences.sleep}')
if !opts.minimal
span.current-pet(class='Pet-{{profile.items.currentPet}}', ng-show='profile.items.currentPet')
mixin herobox(opts)
- if (!opts) {opts = {minimal:false,main:false}}
figure.herobox(ng-click='spell ? castEnd(profile, "user", $event) : clickMember(profile._id)', data-name='{{profile.profile.name}}', class='background_{{profile.preferences.background}} #{opts.main ? "isUser" : ""} #{opts.minimal ? "minimal" : ""}', ng-class='{hasPet: (#{!opts.minimal} && profile.items.currentPet), hasMount: (#{!opts.minimal} && profile.items.currentMount), noBackgroundImage: !profile.preferences.background, "cast-target": applyingAction, isLeader: party.leader==profile._id}')
.avatar-name(ng-class='userLevelStyle(profile)')
|{{profile.profile.name}}
+avatar(opts)
.avatar-level(ng-class='userLevelStyle(profile)')
span.glyphicon.glyphicon-circle-arrow-up(ng-show='profile.stats.buffs.str || profile.stats.buffs.per || profile.stats.buffs.con || profile.stats.buffs.int || profile.stats.buffs.stealth', tooltip=env.t('buffed'), tooltip-append-to-body="true")
span(tooltip=env.t('level'), tooltip-append-to-body="true") {{profile.stats.lvl}}
span.glyphicon.glyphicon-plus-sign(ng-show='profile.achievements.rebirths', tooltip=env.t('reborn', {reLevel: "{{profile.achievements.rebirthLevel}}"}), tooltip-append-to-body="true")
+36
View File
@@ -0,0 +1,36 @@
.header-wrap(ng-controller='HeaderCtrl')
a.label.label-default.undo-button(x-bind='click:undo', ng-show='_undo')=env.t('undo')
header.site-header(ng-hide='user.preferences.hideHeader', role='banner', data-partysize='{{party.members.length>1 ? truarr(party.members.length) : 0}}')
// avatar
.herobox-wrap.main-herobox(ng-controller='UserCtrl')
+herobox({main:1})
// stat bars
.hero-stats
.meter-label(tooltip=env.t('health'))
span.glyphicon.glyphicon-heart
.meter.health(tooltip='{{Math.round(user.stats.hp * 100) / 100}}')
.bar(style='width: {{Shared.percent(user.stats.hp, 50)}}%;')
span.meter-text.value
| {{Math.ceil(user.stats.hp)}} / 50
.meter-label(tooltip=env.t('experience'))
span.glyphicon.glyphicon-star
.meter.experience(tooltip='{{Math.round(user.stats.exp * 100) / 100}}')
.bar(style='width: {{Shared.percent(user.stats.exp,Shared.tnl(user.stats.lvl))}}%;')
span.meter-text.value
span(ng-show='user.history.exp', tooltip=env.t('progress'))
a(ng-click='toggleChart("exp")').glyphicon.glyphicon-signal
span
| {{Math.floor(user.stats.exp) | number:0}} / {{Shared.tnl(user.stats.lvl) | number:0}}
.meter-label(tooltip='Mana', ng-if='user.flags.classSelected && !user.preferences.disableClasses')
span.glyphicon.glyphicon-fire
.meter.mana(ng-if='user.flags.classSelected && !user.preferences.disableClasses', tooltip='{{Math.round(user.stats.mp * 100) / 100}}')
.bar(style='width: {{user.stats.mp / user._statsComputed.maxMP * 100}}%;')
span.meter-text.value
span
| {{Math.floor(user.stats.mp)}} / {{user._statsComputed.maxMP}}
// party
span(ng-controller='PartyCtrl')
.herobox-wrap(ng-repeat='profile in partyMinusSelf')
+herobox()
+267
View File
@@ -0,0 +1,267 @@
nav.toolbar(ng-controller='AuthCtrl', ng-class='{active: isToolbarHidden}')
button.toolbar-toggle(ng-click='isToolbarHidden = !isToolbarHidden', ng-class='{active: isToolbarHidden}')
span.glyphicon.glyphicon-remove-circle
span.toggle-text.toggle-close=env.t('close')
span.toggle-text.toggle-open=env.t('menu')
.toolbar-container(ng-if='!isToolbarHidden')
ul.toolbar-mobile-nav
li.toolbar-mobile
a(ng-click='expandMenu("mobile")', ng-class='{active: _expandedMenu=="mobile"}')
span &#9776;
div(ng-if='_expandedMenu=="mobile"', ng-click='expandMenu(null)')
h4=env.t('menu')
div
ul.toolbar-submenu
li
a(ui-sref='tasks')=env.t('tasks')
ul.toolbar-submenu
li
a(ui-sref='options.profile.avatar')=env.t('avatar')
li
a(ui-sref='options.profile.backgrounds')=env.t('backgrounds')
li
a(ui-sref='options.profile.stats')=env.t('stats')
li
a(ui-sref='options.profile.profile')=env.t('profile')
ul.toolbar-submenu
li
a(ui-sref='options.social.inbox')
=env.t("inbox")
| &nbsp;
span.badge.badge-danger(ng-if='user.inbox.newMessages') {{user.inbox.newMessages}}
li
a(ui-sref='options.social.tavern')=env.t('tavern')
li
a(ui-sref='options.social.party')=env.t('party')
li
a(ui-sref='options.social.guilds.public')=env.t('guilds')
li
a(ui-sref='options.social.challenges')=env.t('challenges')
li
a(ui-sref='options.social.hall.heroes')=env.t('hall')
ul.toolbar-submenu
li
a(ui-sref='options.inventory.drops')=env.t('market')
li
a(ui-sref='options.inventory.pets')=env.t('pets')
li
a(ui-sref='options.inventory.mounts')=env.t('mounts')
li
a(ui-sref='options.inventory.equipment')=env.t('equipment')
li
a(ui-sref='options.inventory.timetravelers')=env.t('timeTravelers')
li
a(ui-sref='options.inventory.seasonalshop')=env.t('seasonalShop')
ul.toolbar-submenu
li
a(target="_blank" ng-href='http://data.habitrpg.com?uuid={{user._id}}')=env.t('dataTool')
li
a(ui-sref='options.settings.export')=env.t('exportData')
ul.toolbar-submenu
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/FAQ')=env.t('FAQ')
li
a(target="_blank" href='https://github.com/HabitRPG/habitrpg/issues/2760')=env.t('reportBug')
li
a(target="_blank" href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a')=env.t('askQuestion')
li
a(target="_blank" href='https://trello.com/c/odmhIqyW/440-read-first-table-of-contents')=env.t('requestAF')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG')=env.t('contributeToHRPG')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/')=env.t('overview')
ul.toolbar-controls
li.toolbar-subscribe-button
button(ng-if='!user.purchased.plan.customerId',ui-sref='options.settings.subscription',popover-trigger='mouseenter',popover-placement='bottom',popover-title=env.t('subscriptions'),popover=env.t('subDescription'),popover-append-to-body='true')=env.t('subscribe')
li.toolbar-controls-button
a(ng-click='expandMenu(null)')=env.t('close')
ul.toolbar-nav
li.toolbar-button
a(ui-sref='tasks')
span=env.t('tasks')
li.toolbar-button-dropdown
a(ui-sref='options.profile.avatar')
span=env.t('user')
a(ng-click='expandMenu("avatar")', ng-class='{active: _expandedMenu == "avatar"}')
span &#9776;
div(ng-if='_expandedMenu == "avatar"')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(ui-sref='options.profile.avatar')=env.t('avatar')
li
a(ui-sref='options.profile.backgrounds')=env.t('backgrounds')
li
a(ui-sref='options.profile.stats')=env.t('stats')
li
a(ui-sref='options.profile.profile')=env.t('profile')
li.toolbar-button-dropdown
a(ui-sref='options.social.tavern')
span=env.t('social')
span.badge.badge-danger(ng-if='user.inbox.newMessages') {{user.inbox.newMessages}}
a(ng-click='expandMenu("social")', ng-class='{active: _expandedMenu == "social"}')
span &#9776;
div(ng-if='_expandedMenu == "social"')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(ui-sref='options.social.inbox')
=env.t("inbox")
| &nbsp;
span.badge.badge-danger(ng-if='user.inbox.newMessages') {{user.inbox.newMessages}}
li
a(ui-sref='options.social.tavern')=env.t('tavern')
li
a(ui-sref='options.social.party')=env.t('party')
li
a(ui-sref='options.social.guilds.public')=env.t('guilds')
li
a(ui-sref='options.social.challenges')=env.t('challenges')
li
a(ui-sref='options.social.hall.heroes')=env.t('hall')
li.toolbar-button-dropdown
a(ui-sref='options.inventory.drops')
span=env.t('inventory')
a(ng-click='expandMenu("inventory")', ng-class='{active: _expandedMenu == "inventory"}')
span &#9776;
div(ng-if='_expandedMenu == "inventory"')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(ui-sref='options.inventory.drops')=env.t('market')
li
a(ui-sref='options.inventory.pets')=env.t('pets')
li
a(ui-sref='options.inventory.mounts')=env.t('mounts')
li
a(ui-sref='options.inventory.equipment')=env.t('equipment')
li
a(ui-sref='options.inventory.timetravelers')=env.t('timeTravelers')
li
a(ui-sref='options.inventory.seasonalshop')=env.t('seasonalShop')
li.toolbar-button-dropdown
a(target="_blank" ng-href='http://data.habitrpg.com?uuid={{user._id}}')
span=env.t('data')
a(ng-click='expandMenu("data")', ng-class='{active: _expandedMenu == "data"}')
span &#9776;
div(ng-if='_expandedMenu == "data"')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(target="_blank" ng-href='http://data.habitrpg.com?uuid={{user._id}}')=env.t('dataTool')
li
a(ui-sref='options.settings.export')=env.t('exportData')
li.toolbar-button-dropdown
a(target="_blank" href='http://habitrpg.wikia.com/wiki/')
span=env.t('help')
a(ng-click='expandMenu("help")', ng-class='{active: _expandedMenu == "help"}')
span &#9776;
div(ng-if='_expandedMenu == "help"')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/FAQ')=env.t('FAQ')
li
a(target="_blank" href='https://github.com/HabitRPG/habitrpg/issues/2760')=env.t('reportBug')
li
a(target="_blank" href='https://habitrpg.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a')=env.t('askQuestion')
li
a(target="_blank" href='https://trello.com/c/odmhIqyW/440-read-first-table-of-contents')=env.t('requestAF')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG')=env.t('contributeToHRPG')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/')=env.t('overview')
li(ng-controller='SettingsCtrl')
a(ng-click='showTour()', popover-placement='right', popover-trigger='mouseenter', popover=env.t('restartTour'))= env.t('showTour')
ul.toolbar-subscribe(ng-if='!user.purchased.plan.customerId')
li.toolbar-subscribe-button
button(ui-sref='options.settings.subscription',popover-trigger='mouseenter',popover-placement='bottom',popover-title=env.t('subscriptions'),popover=env.t('subDescription'),popover-append-to-body='true')=env.t('subscribe')
ul.toolbar-options
li.toolbar-notifs
a(ng-click='expandMenu("notifs")')
span.glyphicon(ng-class='iconClasses()')
div(ng-if='_expandedMenu=="notifs"')
h4=env.t('notifications')
div
ul.toolbar-notifs-notifs
li.toolbar-notifs-no-messages(ng-if='hasNoNotifications()')=env.t('noNotifications')
li(ng-if='user.purchased.plan.mysteryItems.length')
a(ng-click='$state.go("options.inventory.drops"); expandMenu(null)')
span.glyphicon.glyphicon-gift
span=env.t('newSubscriberItem')
li(ng-if='user.invitations.party.id')
a(ui-sref='options.social.party', ng-click='expandMenu(null)')
span.glyphicon.glyphicon-user
span=env.t('invitedTo', {name: '{{user.invitations.party.name}}'})
li(ng-repeat='guild in user.invitations.guilds')
a(ui-sref='options.social.guilds', ng-click='expandMenu(null)')
span.glyphicon.glyphicon-user
span=env.t('invitedTo', {name: '{{guild.name}}'})
li(ng-if='user.flags.classSelected && !user.preferences.disableClasses && user.stats.points')
a(ui-sref='options.profile.stats', ng-click='expandMenu(null)')
span.glyphicon.glyphicon-plus-sign
span=env.t('haveUnallocated', {points: '{{user.stats.points}}'})
li(ng-repeat='(k,v) in user.newMessages', ng-if='v.value')
a(ng-click='k==party._id ? $state.go("options.social.party") : $state.go("options.social.guilds.detail",{gid:k}); expandMenu(null)')
span.glyphicon.glyphicon-comment
span {{v.name}}
a(ng-click='Groups.seenMessage(k)', popover=env.t('clear'),popover-placement='right',popover-trigger='mouseenter',popover-append-to-body='true')
span.glyphicon.glyphicon-remove-circle
ul.toolbar-controls
//-li
//-a(ng-click='') Clear all
li.toolbar-controls-button
a(ng-click='expandMenu(null)')=env.t('close')
li.toolbar-audio
a(ng-click='expandMenu("audio")')
span.glyphicon(ng-class="{'glyphicon-volume-off':user.preferences.sound=='off', 'glyphicon-volume-up':user.preferences.sound!='off'}")
div(ng-if='_expandedMenu=="audio"',style='min-width:150px')
h4=env.t('audioTheme')
div
ul.toolbar-submenu(ng-click='expandMenu(null)')
// Using [{k,v}] instead of {k:v,k:v} to maintain order ('off' at top)
for theme in ['off','danielTheBard', 'wattsTheme']
li
a(ng-class="{'bg-primary':user.preferences.sound=='#{theme}'}", ng-click="set({'preferences.sound':'#{theme}'})")=env.t('audioTheme_'+theme)
li.toolbar-sync
a(ng-click='User.sync()', popover=env.t('sync'),popover-placement='bottom',popover-trigger='mouseenter')
span.glyphicon.glyphicon-refresh
li.toolbar-settings
a(ng-click='expandMenu("settings")')
span.glyphicon.glyphicon-cog
div(ng-if='_expandedMenu=="settings"')
h4=env.t('settings')
div
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(ng-click='logout()')=env.t('logout')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(ui-sref='options.settings.settings')=env.t('site')
li
a(ui-sref='options.settings.api')=env.t('API')
li
a(ui-sref='options.settings.export')=env.t('export')
li
a(ui-sref='options.settings.coupon') Coupon
li
a(ui-sref='options.settings.subscription')=env.t('subscription')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(href="http://habitrpg.wikia.com/wiki/FAQ", target='_blank')=env.t('FAQ')
li
a(href="https://vimeo.com/57654086", target='_blank')=env.t('tutorials')
ul.toolbar-controls
li.toolbar-controls-button
a(ng-click='expandMenu(null)')=env.t('close')
ul.toolbar-wallet
li.toolbar-gems
a.gem-wallet(ng-click='openModal("buyGems",{track:"Gems > Toolbar"})', popover-trigger='mouseenter', popover-title=env.t('gems'), popover=env.t('gemsWhatFor'), popover-placement='bottom',popover-append-to-body='true')
//-span.task-action-btn.tile.flush.bright.add-gems-btn
span.Pet_Currency_Gem2x.Gems
span.gem-text {{user.balance * 4 | number:0}}
li.toolbar-currency.gold(popover=env.t('gold') + ' ({{Shared.gold(user.stats.gp)}})', popover-placement='bottom',popover-trigger='mouseenter')
span.shop_gold
span {{Shared.gold(user.stats.gp) | goldRoundThousandsToK}}
li.toolbar-currency.silver(popover=env.t('silver'), popover-placement='bottom',popover-trigger='mouseenter')
span.shop_silver
span {{Shared.silver(user.stats.gp)}}
ul.toolbar-bailey(ng-class='{inactive: !_expandedMenu}')
li.toolbar-bailey-container(ng-if='user.flags.newStuff')
.npc_bailey.npc_bailey_head(popover=env.t('psst'), popover-trigger='mouseenter', popover-placement='right', ng-click='openModal("newStuff",{size:"lg"})')
+14
View File
@@ -0,0 +1,14 @@
mixin gemButton(isGemsModal)
a.pull-right.gem-wallet(ng-click=( isGemsModal ? '' : 'openModal("buyGems",{track:"Gems > Wallet"})'), popover-trigger='mouseenter', popover-title=env.t('gems'), popover=env.t('gemsWhatFor'), popover-placement='bottom')
if !isGemsModal
span.task-action-btn.tile.flush.bright.add-gems-btn
span.task-action-btn.tile.flush.neutral
.Pet_Currency_Gem2x.Gems
| {{user.balance * 4 | number:0}}
=env.t('gems')
mixin aLink(url, label)
if mobile
a(href="", ng-click="externalLink('#{url}')")= label
else
a(href='#{url}', target='_blank')= label
@@ -0,0 +1,76 @@
// Streak
script(id='modals/achievements/streak.html', type='text/ng-template')
.modal-header
h4=env.t('modalAchievement')
.modal-body
.achievement.achievement-thermometer
=env.t('streakerAchievement')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('ok')
// Max Gear
script(id='modals/achievements/ultimateGear.html', type='text/ng-template')
.modal-header
h4=env.t('modalAchievement')
.modal-body
.achievement.achievement-armor
=env.t('gearAchievement')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('ok')
// Beast Master
script(id='modals/achievements/beastMaster.html', type='text/ng-template')
.modal-header
h4=env.t('modalAchievement')
.modal-body
p
.achievement.achievement-rat
=env.t('beastAchievement')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('ok')
// Mount Master
script(id='modals/achievements/mountMaster.html', type='text/ng-template')
.modal-header
h4=env.t('modalAchievement')
.modal-body
p
.achievement.achievement-wolf
=env.t('mountAchievement')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('ok')
// Triad Bingo
script(id='modals/achievements/triadBingo.html', type='text/ng-template')
.modal-header
h4=env.t('modalAchievement')
.modal-body
p
.achievement.achievement-triadbingo
=env.t('triadBingoAchievement')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('ok')
// Contributor
// activated by user.flags.contributor
script(id='modals/achievements/contributor.html', type='text/ng-template')
.modal-header
h4=env.t('modalContribAchievement')
.modal-body
div(class="#{env.worldDmg.guide ? 'npc_justin_broken.float-left' : 'npc_justin.float-left'}")
p
!=env.t('contribModal', {name: "{{user.profile.name}}", level: "{{user.contributor.level}}"}) + ' '
a(href='http://habitrpg.wikia.com/wiki/Contributor_Rewards' target='_blank')=env.t('contribLink')
.modal-footer
button.btn.btn-default(ng-click='set({"flags.contributor":false}); $close()')=env.t('ok')
//Rebirth
script(id='modals/achievements/rebirth.html', type='text/ng-template')
.modal-header
h4=env.t('modalAchievement')
.modal-body
.achievement.achievement-sun
=env.t('rebirthAchievement', {number: "{{user.achievements.rebirths}}", level: "{{user.achievements.rebirthLevel}}"})
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('ok')
+29
View File
@@ -0,0 +1,29 @@
script(id='modals/buyGems.html', type='text/ng-template')
.modal-body
.buy-gems
+gemButton(true)
.well
h3=env.t('buyGems')
table.table
tr
td
span.dashed-underline(popover=env.t('donateText1'),popover-trigger='mouseenter',popover-placement='right')
| +20 <span class="Pet_Currency_Gem1x inline-gems"/>
tr
td
span.dashed-underline(popover=env.t('donateText3'),popover-trigger='mouseenter',popover-placement='right')
=env.t('donateText2')
tr
td.alert.alert-info $5&nbsp;
=env.t('USD')
tr
td
p
small.muted=env.t('paymentMethods')
.btn.btn-primary(ng-click='Payments.showStripe({})')=env.t('card')
a.btn.btn-warning(href='/paypal/checkout?_id={{user._id}}&apiToken={{user.apiToken}}') PayPal
div(ng-include="'partials/options.settings.subscription.html'")
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('cancel')
+81
View File
@@ -0,0 +1,81 @@
script(type='text/ng-template', id='modals/chooseClass.html')
.modal-header
h4
|&nbsp;
=env.t('chooseClass1')
|
a(href='http://habitrpg.wikia.com/wiki/Class_System' target='_blank')=env.t('chooseClass2')
|&nbsp;
=env.t('chooseClass3')
.modal-body.select-class
.container-fluid
.row
.col-md-3(ng-click='selectedClass = "warrior"')
h5
a(href='http://habitrpg.wikia.com/wiki/Warrior' target='_blank')=env.t('warrior')
figure.herobox(ng-class='{"selected-class": selectedClass=="warrior"}')
.character-sprites
span(class='skin_{{user.preferences.skin}}')
span(class='{{user.preferences.size}}_armor_warrior_5')
span(class='head_0')
span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}')
span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}')
span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}')
span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}')
span(class='head_warrior_5')
span(class='shield_warrior_5')
span(class='weapon_warrior_6')
.col-md-3(ng-click='selectedClass = "wizard"')
h5
a(href='http://habitrpg.wikia.com/wiki/Mage' target='_blank')=env.t('mage')
figure.herobox(ng-class='{"selected-class": selectedClass=="wizard"}')
.character-sprites
span(class='skin_{{user.preferences.skin}}')
span(class='{{user.preferences.size}}_armor_wizard_5')
span(class='head_0')
span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}')
span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}')
span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}')
span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}')
span(class='head_wizard_5')
span(class='shield_wizard_5')
span(class='weapon_wizard_6')
.col-md-3(ng-click='selectedClass = "rogue"')
h5
a(href='http://habitrpg.wikia.com/wiki/Rogue' target='_blank')=env.t('rogue')
figure.herobox(ng-class='{"selected-class": selectedClass=="rogue"}')
.character-sprites
span(class='skin_{{user.preferences.skin}}')
span(class='{{user.preferences.size}}_armor_rogue_5')
span(class='head_0')
span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}')
span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}')
span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}')
span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}')
span(class='head_rogue_5')
span(class='shield_rogue_6')
span(class='weapon_rogue_6')
.col-md-3(ng-click='selectedClass = "healer"')
h5
a(href='http://habitrpg.wikia.com/wiki/Healer' target='_blank')=env.t('healer')
figure.herobox(ng-class='{"selected-class": selectedClass=="healer"}')
.character-sprites
span(class='skin_{{user.preferences.skin}}')
span(class='{{user.preferences.size}}_armor_healer_5')
span(class='head_0')
span(class='hair_base_{{user.preferences.hair.base}}_{{user.preferences.hair.color}}')
span(class='hair_bangs_{{user.preferences.hair.bangs}}_{{user.preferences.hair.color}}')
span(class='hair_beard_{{user.preferences.hair.beard}}_{{user.preferences.hair.color}}')
span(class='hair_mustache_{{user.preferences.hair.mustache}}_{{user.preferences.hair.color}}')
span(class='head_healer_5')
span(class='shield_healer_5')
span(class='weapon_healer_6')
br
.well(ng-show='selectedClass=="warrior"')=env.t('warriorText')
.well(ng-show='selectedClass=="wizard"')=env.t('mageText')
.well(ng-show='selectedClass=="rogue"')=env.t('rogueText')
.well(ng-show='selectedClass=="healer"')=env.t('healerText')
.modal-footer
button.btn.btn-sm.btn-danger(ng-click='user.ops.disableClasses({}); $close()', popover-placement='top', popover-trigger='mouseenter', popover=env.t('optOutText'))=env.t('optOut')
button.btn.btn-primary(ng-disabled='!selectedClass' ng-click='changeClass(selectedClass); $close()')=env.t('select')
+16
View File
@@ -0,0 +1,16 @@
//div(modal='user.stats.hp <= 0', options='{backdrop:true, keyboard:false, backdropClick:false}')
script(type='text/ng-template', id='modals/death.html')
.modal-body.death-modal
.container-fluid
.row
.col-md-3
figure
.GrimReaper
.col-md-9
h2=env.t('youDied')
.row
.col-md-3
p
a.btn.btn-danger.btn-lg(ng-click='user.ops.revive({}); $close()')=env.t('continue')
.col-md-9
p=env.t('dieText')
+51
View File
@@ -0,0 +1,51 @@
script(type='text/ng-template', id='modals/dropsEnabled.html')
.modal-header
h4=env.t('dropsEnabled')
.modal-body
p
figure
.item-drop-icon(class='Pet_Egg_Wolf')
span!=env.t('firstDrop', {eggText: "{{Content.eggs.Wolf.text()}}", eggNotes: "{{Content.eggs.Wolf.notes()}}"})
br
p
figure
.item-drop-icon(class='Pet_Currency_Gem')
span!=env.t('useGems')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('close')
script(type='text/ng-template', id='modals/pet-key.html')
.modal-header
// Checks if user has 90 pets and 90 mounts. If so, displays "Beast Master/Mount Master".
// Else if user has 90 pets, displays "Beast Master". Else, displays "Mount Master"
- var masterTitle='{{petCount >= 90 && mountCount >= 90 ? env.t("beastMountMasterName") : petCount >= 90 ? env.t("beastMasterName") : env.t("mountMasterName")}}'
h4=env.t('petKeyBegin', {title: masterTitle})
.modal-body
+gemButton
figure
.npc_matt
p=env.t('petKeyInfo')
br
p=env.t('petKeyInfo2')
br
p=env.t('petKeyInfo3')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('petKeyNeverMind')
span(ng-if='user.balance < 1')
a.btn.btn-success(ng-click='openModal("buyGems")')=env.t('buyMoreGems')
span.gem-cost=env.t('notEnoughGems')
span(ng-if='user.balance >= 1 && petCount >= 90', ng-controller='SettingsCtrl')
a.btn.btn-danger(ng-click='$close(); releasePets()')
=env.t('petKeyPets')
| : 4&nbsp;
span.Pet_Currency_Gem1x.inline-gems
span(ng-if='user.balance >= 1 && mountCount >= 90', ng-controller='SettingsCtrl')
a.btn.btn-danger(ng-click='$close(); releaseMounts()')
=env.t('petKeyMounts')
| : 4&nbsp;
span.Pet_Currency_Gem1x.inline-gems
span(ng-if='user.balance >= 1.5 && petCount >= 90 && mountCount >= 90', ng-controller='SettingsCtrl')
a.btn.btn-danger(ng-click='$close(); releaseBoth()')
=env.t('petKeyBoth')
| : 6&nbsp;
span.Pet_Currency_Gem1x.inline-gems
+13
View File
@@ -0,0 +1,13 @@
include ./achievements
include ./reroll
include ./death
include ./new-stuff
include ./buy-gems
include ./members
include ./settings
include ./drops
include ./classes
include ./quests
include ./rebirth
include ./limited
include ./invite-friends
@@ -0,0 +1,48 @@
script(type='text/ng-template', id='modals/invite-friends.html')
.modal-header
h4 Invite Friends
.modal-body
p.alert.alert-info Invite friends by <a href='http://habitrpg.wikia.com/wiki/API_Options' target='_blank'>User ID</a> here.
form.form-inline(ng-submit='invite(party)')
//-.alert.alert-danger(ng-show='_groupError') {{_groupError}}
.form-group
input.form-control(type='text', placeholder=env.t('userId'), ng-model='party.invitee')
|&nbsp;
button.btn.btn-primary(type='submit') Invite Existing User
hr
p.alert.alert-info Invite friends by email. If they join via your email, they'll automatically be invited to your party.
form.form-horizontal(ng-submit='inviteEmails(inviter, emails)')
table.table.table-striped
thead
tr
th Name
th Email
tbody
tr(ng-repeat='email in emails')
td
input.form-control(type='text', ng-model='email.name')
td
input.form-control(type='email', ng-model='email.email')
tr
td(colspan=2)
a.btn.btn-xs.pull-right(ng-click='emails = emails.concat([{name:"",email:""}])')
i.glyphicon.glyphicon-plus
tr
td.form-group(colspan=2)
label.col-sm-1.control-label By:
.col-sm-7
input.form-control(type='text', ng-model='inviter')
.col-sm-4
button.btn.btn-primary(type='submit') Invite New User(s)
//-
hr
p.alert.alert-info Or share this link (copy/paste):
input.form-control(type='text', ng-value='inviteLink({id: party._id, inviter: user._id, name: party.name})')
.modal-footer
button.btn.btn-default(ng-click='$close()') Close
+56
View File
@@ -0,0 +1,56 @@
//Valentine
script(id='modals/valentine.html', type='text/ng-template')
.modal-header
h4
.inventory_special_valentine.pull-right
=env.t('valentineCard')
.modal-body
.bg-info(style='padding:10px')
p To: {{user.profile.name}}, From: {{user.items.special.valentineReceived[0]}}
hr
div(ng-switch='Math.floor(Math.random()*3)')
ul.list-unstyled(ng-switch-when='0')
li "Roses are red
li My Dailies are blue
li I'm happy that I'm
li In a Party with you!"
ul.list-unstyled(ng-switch-when='1')
li "Roses are red
li Violets are nice
li Let's get together
li And fight against Vice!"
ul.list-unstyled(ng-switch-default)
li "Roses are red
li This poem style is old
li I hope that you like this
li Cuz it cost ten gold."
p
small For enduring such a saccharine poem, you both receive the "Adoring Friends" badge!
.modal-footer
button.btn.btn-default(ng-click='user.ops.readValentine({});$close()')=env.t('ok')
// New Year's
script(id='modals/nye.html', type='text/ng-template')
.modal-header
h4
.inventory_special_nye.pull-right
=env.t('nyeCard')
.modal-body
.bg-info(style='padding:10px')
p To: {{user.profile.name}}, From: {{user.items.special.nyeReceived[0]}}
hr
ul.list-unstyled(ng-switch='::Math.floor(Math.random()*5)')
li(ng-switch-when='0')
=env.t('newYear0')
li(ng-switch-when='1')
=env.t('newYear1')
li(ng-switch-when='2')
=env.t('newYear2')
li(ng-switch-when='3')
=env.t('newYear3')
li(ng-switch-default)
=env.t('newYear4')
p
small For celebrating the new year together, you both receive the "Auld Acquaintance" badge!
.modal-footer
button.btn.btn-default(ng-click='user.ops.readNYE({});$close()')=env.t('ok')
+103
View File
@@ -0,0 +1,103 @@
script(type='text/ng-template', id='modals/member.html')
.modal-header
h4
span {{::profile.profile.name}}
span(ng-if='profile.contributor.level') - {{::contribText(profile.contributor, profile.backer)}}
.modal-body
.container-fluid
.row
.col-md-6
img(ng-show='::profile.profile.imageUrl', ng-src='{{::profile.profile.imageUrl}}')
markdown(ng-show='::profile.profile.blurb', text='::profile.profile.blurb')
ul.muted.list-unstyled(ng-if='::profile.auth.timestamps')
li {{profile._id}}
li(ng-show='::profile.auth.timestamps.created')
|&nbsp;
=env.t('memberSince')
|&nbsp;
| {{::profile.auth.timestamps.created | date:user.preferences.dateFormat}} -
li(ng-show='::profile.auth.timestamps.loggedin')
|&nbsp;
=env.t('lastLoggedIn')
|&nbsp;
| {{::profile.auth.timestamps.loggedin | date:user.preferences.dateFormat}} -
h3=env.t('stats')
.label.label-info {{:: {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer")}[profile.stats.class] }}
include ../profiles/stats
.col-md-6
.row
+herobox()
.row
h3=env.t('achievements')
include ../profiles/achievements
.modal-footer
.btn-group.pull-left(ng-if='::user')
button.btn.btn-md.btn-default(ng-show='user.inbox.blocks | contains:profile._id', tooltip=env.t('unblock'), ng-click="user.ops.blockUser({params:{uuid:profile._id}})", tooltip-placement='right')
span.glyphicon.glyphicon-plus
button.btn.btn-md.btn-default(ng-hide='profile._id == user._id || user.inbox.blocks | contains:profile._id', tooltip=env.t('block'), ng-click="user.ops.blockUser({params:{uuid:profile._id}})", tooltip-placement='right')
span.glyphicon.glyphicon-ban-circle
button.btn.btn-md.btn-default(tooltip=env.t('sendPM'), ng-click="openModal('private-message',{controller:'MemberModalCtrl'})", tooltip-placement='right')
span.glyphicon.glyphicon-envelope
button.btn.btn-md.btn-default(tooltip="Send Gift", ng-click="openModal('send-gift',{controller:'MemberModalCtrl'})", tooltip-placement='right')
span.glyphicon.glyphicon-gift
button.btn.btn-default(ng-click='$close()')=env.t('close')
script(type='text/ng-template', id='modals/private-message.html')
.modal-header
h4=env.t('pmHeading', {name: "{{profile.profile.name}}"})
.modal-body
textarea.form-control(type='text',rows='5',ui-keydown='{"meta-enter":"sendPrivateMessage(profile._id, _message)"}',ng-model='_message')
.modal-footer
button.btn.btn-primary(ng-click='sendPrivateMessage(profile._id, _message)')=env.t("send")
button.btn.btn-default(ng-click='$close()')=env.t('cancel')
script(type='text/ng-template', id='modals/send-gift.html')
.modal-header
h4 Send Gift to {{::profile.profile.name}}
.modal-body
.panel.panel-default(class="{{gift.type=='gems' ? 'panel-primary' : 'transparent'}}", ng-click='gift.type="gems"')
.panel-heading
.pull-right
span(ng-show='gift.gems.fromBalance') From {{user.balance*4}} Gems
span(ng-hide='gift.gems.fromBalance') Total: ${{gift.gems.amount/4}} USD
| Gems
.panel-body
.row
.col-md-6
.form-group
input.form-control(type='number', placeholder='Number of Gems', min='0', max='{{gift.gems.fromBalance ? user.balance*4 : ""}}', ng-model='gift.gems.amount')
.col-md-6
.btn-group
a.btn.btn-default(ng-class="{active:gift.gems.fromBalance}", ng-click="gift.gems.fromBalance=true") From Balance
a.btn.btn-default(ng-class="{active:!gift.gems.fromBalance}", ng-click="gift.gems.fromBalance=false") Purchase
.panel.panel-default(class="{{gift.type=='subscription' ? 'panel-primary' : 'transparent'}}", ng-click='gift.type="subscription"')
.panel-heading Subscription
.panel-body
.form-group
.radio(ng-repeat='block in Content.subscriptionBlocks | toArray | omit:"discount==true" | orderBy:"months"')
label
input(type="radio", name="subRadio", ng-value="block.key", ng-model='gift.subscription.key')
| {{block.months}} Month(s): ${{block.price}}
textarea.form-control(rows='3', ng-model='gift.message', placeholder='Personal message (optional)')
.modal-footer
- var fromBal = "gift.type=='gems' && gift.gems.fromBalance"
button.btn.btn-primary(ng-show=fromBal, ng-click='sendGift(profile._id, gift)')=env.t("send")
a.btn.btn-primary(ng-hide=fromBal, ng-click='Payments.showStripe({gift:gift, uuid:profile._id})')=env.t('card')
a.btn.btn-warning(ng-hide=fromBal, href='/paypal/checkout?_id={{::user._id}}&apiToken={{::user.apiToken}}&gift={{Payments.encodeGift(profile._id, gift)}}') PayPal
button.btn.btn-default(ng-click='$close()')=env.t('cancel')
script(type='text/ng-template', id='modals/abuse-flag.html')
.modal-header
h4!=env.t('abuseFlagModalHeading', {name: "<span class='text-danger'>{{profile.profile.name}}</span>"})
.modal-body
blockquote
markdown(text="abuseObject.text")
p!=env.t('abuseFlagModalBody', {firstLinkStart: "<a href='/static/community-guidelines' target='_blank'>", secondLinkStart: "<a href='/static/terms' target='_blank'>", linkEnd: "</a>"})
.modal-footer
button.pull-left.btn.btn-danger(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount >= 2')
| Reset Flag Count
button.btn.btn-primary(ng-click='$close()')=env.t('cancel')
button.btn.btn-default(ng-click='reportAbuse(user, abuseObject, groupId)')=env.t("abuseFlagModalButton")
@@ -0,0 +1,12 @@
script(type='text/ng-template', id='modals/newStuff.html')
.modal-header
| #{env.t('newStuff')} by&nbsp;
a(target='_blank', href='https://twitter.com/Mihakuu') Bailey
.modal-body.new-stuff-modal.modal-fixed-height
div(class="#{env.worldDmg.bailey ? 'npc_bailey_broken' : 'npc_bailey'}")
br
br
include ../new-stuff
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('cool')
button.btn.btn-warning(ng-click='dismissAlert(); $close()')=env.t('dismissAlert')
@@ -0,0 +1,12 @@
script(id='partials/options.social.party.quest-rewards.html', type='text/ng-template')
hr
h5 {{header}}
table.table.table-striped
tr(ng-repeat='drop in quest.drop.items')
td {{drop.text()}}
tr
td {{quest.drop.exp}}
=env.t('experience')
tr
td {{quest.drop.gp}}
=env.t('gold')
+91
View File
@@ -0,0 +1,91 @@
include ./quest-rewards
script(type='text/ng-template', id='modals/questCompleted.html')
.modal-header
h4 "{{::Content.quests[user.party.quest.completed].text()}}"
=env.t('completed')
.modal-body
.col-centered(ng-class='::Content.quests[user.party.quest.completed].completion() ? "pull-right-sm" : ""', class='quest_{{user.party.quest.completed}}')
p(ng-bind-html='::Content.quests[user.party.quest.completed].completion()')
quest-rewards(key='{{user.party.quest.completed}}', header=env.t('youReceived'))
.modal-footer
button.btn.btn-primary(ng-click='set({"party.quest.completed":""}); $close()')=env.t('ok')
script(type='text/ng-template', id='modals/showQuest.html')
.modal-header
h4 {{::selectedQuest.text()}}
.modal-body
.pull-right-sm.text-center
.col-centered(class='quest_{{::selectedQuest.key}}')
div(ng-if='::selectedQuest.boss')
h4 {{::selectedQuest.boss.name()}}
p
strong=env.t('bossHP') + ': '
| {{::selectedQuest.boss.hp}}
p
strong=env.t('bossStrength') + ': '
| {{::selectedQuest.boss.str}}
div(ng-if='::selectedQuest.collect')
p(ng-repeat='(k,v) in ::selectedQuest.collect')
strong=env.t('collect') + ': '
| {{::selectedQuest.collect[k].count}} {{::selectedQuest.collect[k].text()}}
div(ng-bind-html='::selectedQuest.notes()')
quest-rewards(key='{{::selectedQuest.key}}', header=env.t('rewards'))
hr
.npc_ian.pull-left
p=env.t('questSend')
p=env.t('questWarning')
.modal-footer
button.btn.btn-default(ng-click='closeQuest(); $close()')=env.t('cancel')
button.btn.btn-primary(ng-click='questInit(); $close()')=env.t('inviteParty')
script(type='text/ng-template', id='modals/buyQuest.html')
.modal-header
h4 {{::selectedQuest.text()}}
.modal-body
.pull-right-sm.text-center
.col-centered(class='quest_{{::selectedQuest.key}}')
div(ng-if='::selectedQuest.boss')
h4 {{::selectedQuest.boss.name()}}
p
strong=env.t('bossHP') + ': '
| {{::selectedQuest.boss.hp}}
p
strong=env.t('bossStrength') + ': '
| {{::selectedQuest.boss.str}}
div(ng-if='::selectedQuest.collect')
p(ng-repeat='(k,v) in ::selectedQuest.collect')
strong=env.t('collect') + ': '
| {{::selectedQuest.collect[k].count}} {{::selectedQuest.collect[k].text()}}
div(ng-bind-html='::selectedQuest.notes()')
quest-rewards(key='{{::selectedQuest.key}}', header=env.t('rewards'))
.modal-footer
button.btn.btn-default(ng-click='closeQuest(); $close()')=env.t('neverMind')
button.btn.btn-primary(ng-click='purchase("quests", quest); closeQuest(); $close()')=env.t('buyQuest')
script(type='text/ng-template', id='modals/questInvitation.html')
.modal-header
h4=env.t('questInvitation')
|&nbsp;{{::Content.quests[party.quest.key].text()}}
.modal-body
.pull-right-sm.text-center
.col-centered(class='quest_{{::Content.quests[party.quest.key].key}}')
div(ng-if='::Content.quests[party.quest.key].boss')
h4 {{::Content.quests[party.quest.key].boss.name()}}
p
strong=env.t('bossHP') + ': '
| {{::Content.quests[party.quest.key].boss.hp}}
p
strong=env.t('bossStrength') + ': '
| {{::Content.quests[party.quest.key].boss.str}}
div(ng-if='::Content.quests[party.quest.key].collect')
p(ng-repeat='(k,v) in ::Content.quests[party.quest.key].collect')
strong=env.t('collect') + ': '
| {{::Content.quests[party.quest.key].collect[k].count}} {{::Content.quests[party.quest.key].collect[k].text()}}
div(ng-bind-html='::Content.quests[party.quest.key].notes()')
quest-rewards(key='{{::party.quest.key}}', header=env.t('rewards'))
.modal-footer
button.btn.btn-default(ng-click='questHold = true; $close()')=env.t('askLater')
button.btn.btn-default(ng-click='party.$questReject(); $close()')=env.t('reject')
button.btn.btn-primary(ng-click='party.$questAccept(); $close()')=env.t('accept')
+63
View File
@@ -0,0 +1,63 @@
// Created by Sabe on 12/22/13.
script(type='text/ng-template', id='modals/rebirthEnabled.html')
.modal-header
h4=env.t('rebirthNew')
.modal-body
figure
.rebirth_orb
p
span=env.t('rebirthUnlock')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('close')
script(type='text/ng-template', id='modals/rebirth.html')
.modal-header
h4=env.t('rebirthBegin')
.modal-body
span(ng-if='user.stats.lvl < 100')
+gemButton
figure
.rebirth_orb
p=env.t('rebirthStartOver')
br
ul.list-unstyled
li=env.t('rebirthAdvList1')
li=env.t('rebirthAdvList2')
li=env.t('rebirthAdvList3')
li=env.t('rebirthAdvList4')
br
p=env.t('rebirthInherit')
ul.list-unstyled
li=env.t('rebirthInList1')
li=env.t('rebirthInList2')
li=env.t('rebirthInList3')
li=env.t('rebirthInList4')
li=env.t('rebirthInList5')
br
p
span.vertical-align.inline-block.achievement-sun
|&nbsp;
=env.t('rebirthEarnAchievement')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('neverMind')
span(ng-if='user.balance < 2 && user.stats.lvl < 100')
a.btn.btn-success(ng-click='openModal("buyGems",{track:"Gems > Rebirth"})')=env.t('buyMoreGems')
span.gem-cost=env.t('notEnoughGems')
span(ng-if='user.balance >= 2 || user.stats.lvl >= 100', ng-controller='SettingsCtrl')
a.btn.btn-danger(ng-click='$close(); rebirth()')=env.t('beReborn')
span.gem-cost(ng-if='user.stats.lvl < 100')
| 8&nbsp;
=env.t('gems')
script(type='text/ng-template', id='modals/freeRebirth.html')
.modal-header
h4=env.t('welcome100')
figure
.rebirth_orb
p=env.t('intro100')
p=env.t('followup100')
p=env.t('rebirth100Info')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('rebirthWait')
a.btn.btn-danger(ng-click='$close(); rebirth()')=env.t('rebirthNow')
+19
View File
@@ -0,0 +1,19 @@
// Re-Roll modal
script(type='text/ng-template', id='modals/reroll.html')
.modal-header
h4=env.t('fortify')
.modal-body
+gemButton
p=env.t('fortifyText')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('neverMind')
span(ng-if='user.balance < 1')
a.btn.btn-success(ng-click='openModal("buyGems",{track:{"Gems > Reroll"}})')=env.t('buyMoreGems')
span.gem-cost=env.t('notEnoughGems')
span(ng-if='user.balance >= 1', ng-controller='SettingsCtrl')
a.btn.btn-danger(ng-click='$close(); reroll()')=env.t('fortify')
span.gem-cost
| 4&nbsp;
= env.t('gems')
+65
View File
@@ -0,0 +1,65 @@
script(type='text/ng-template', id='modals/reset.html')
.modal-header
h4=env.t('resetAccount')
.modal-body
p=env.t('resetText1')
p=env.t('resetText2')
.modal-footer
button.btn.btn-default(ng-click='$close();')=env.t('neverMind')
button.btn.btn-danger(ng-click='$close(); reset()')=env.t('resetDo')
script(type='text/ng-template', id='modals/restore.html')
.modal-header
h4=env.t('fixValues')
.modal-body
p=env.t('fixValuesText1')
p=env.t('fixValuesText2')
form.form-horizontal
h3=env.t('stats')
.form-group
.col-md-6
input.form-control(type='number', step="any", data-for='stats.hp', ng-model='$parent.restoreValues.stats.hp')
label.control-label=env.t('health')
.form-group
.col-md-6
input.form-control(type='number', step="any", data-for='stats.exp', ng-model='$parent.restoreValues.stats.exp')
label.control-label=env.t('experience')
.form-group
.col-md-6
input.form-control(type='number', step="any", data-for='stats.gp', ng-model='$parent.restoreValues.stats.gp')
//input.form-control(type='number', step="any", data-for='stats.gp', ng-model='restoreValues.stats.gp',disabled)
label.control-label=env.t('gold')
//-p.alert
small=env.t('disabledWinterEvent')
.form-group
.col-md-6
input.form-control(type='number', step="any", data-for='stats.mp', ng-model='$parent.restoreValues.stats.mp')
label.control-label=env.t('mana')
.form-group
.col-md-6
input.form-control(type='number', data-for='stats.lvl', ng-model='$parent.restoreValues.stats.lvl')
label.control-label=env.t('level')
h3=env.t('achievements')
.form-group
.col-md-6
input.form-control(type='number', data-for='achievements.streak', ng-model='$parent.restoreValues.achievements.streak')
label.control-label=env.t('fix21Streaks')
//- This is causing too many problems for users
h3=env.t('other')
a.btn.btn-sm.btn-warning(ng-controller='FooterCtrl', ng-click='addMissedDay()')=env.t('triggerDay')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('discardChanges')
button.btn.btn-primary(ng-click='restore(); $close();')=env.t('saveAndClose')
script(type='text/ng-template', id='modals/delete.html')
.modal-header
h4=env.t('deleteAccount')
.modal-body
p!=env.t('deleteText', {deleteWord: 'DELETE'})
br
.row
.col-md-6
input.form-control(type='text', ng-model='_deleteAccount')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('neverMind')
button.btn.btn-danger(ng-disabled='_deleteAccount != "DELETE"', ng-click='$close(); delete()')=env.t('deleteDo')
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,214 @@
// <div class='achievement achievement-sword'></div>
// <div class='achievement achievement-tree'></div>
// <div class='achievement achievement-comment'></div>
// <div class='achievement achievement-cave'></div>
// <div class='achievement achievement-boot'></div>
// <div class='achievement achievement-coffin'></div>
// <div class='achievement achievement-alien'></div>
// <div class='achievement achievement-ninja'></div>
// <div class='achievement achievement-cactus'></div>
// <div class='achievement achievement-bow'></div>
// <div class='achievement achievement-shield'></div>
// <div class='achievement achievement-karaoke'></div>
if mobile
.item.item-divider=env.t('achievements')
div(ng-if='::profile.backer.npc')
.achievement.achievement-helm
h5
span.label.label-npc
| {{::profile.backer.npc}}
=env.t('npc')
small=env.t('npcText')
hr
div(ng-if='::profile.contributor.level || user._id == profile._id')
.achievement.achievement-firefox(ng-if='::profile.contributor.level')
div(ng-class='::{muted: !profile.contributor.level}')
h5
span.label.label-default(ng-if='::profile.contributor.level', class='label-contributor-{{::profile.contributor.level}}') {{::contribText(profile.contributor, profile.backer)}}
span.label.label-default(ng-if='::!profile.contributor.level')=env.t('contribName')
small
=env.t('contribText')
|&nbsp;
+aLink('http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG', env.t('readMore'))
| .
hr
div(ng-if='::profile.backer.tier')
.achievement.achievement-heart
h5=env.t('kickstartName', {tier: "{{::profile.backer.tier}}"})
small=env.t('kickstartText')
hr
div(ng-if='profile.achievements.streak || user._id == profile._id')
.achievement.achievement-thermometer(ng-show='profile.achievements.streak')
div(ng-class='{muted: !profile.achievements.streak}')
h5(ng-show='profile.achievements.streak > 1 || !profile.achievements.streak')
| {{profile.achievements.streak || 0 }}&nbsp;
=env.t('streakName')
small(ng-show='profile.achievements.streak > 1 || !profile.achievements.streak')=env.t('streakText', {streaks: "{{profile.achievements.streak || 0 }}"})
h5(ng-show='profile.achievements.streak == 1')
=env.t('streakSingular')
small(ng-show='profile.achievements.streak == 1')=env.t('streakSingularText')
hr
div(ng-if='profile.achievements.perfect || user._id == profile._id')
.achievement.achievement-perfect(ng-show='profile.achievements.perfect')
div(ng-class='{muted: !profile.achievements.perfect}')
h5(ng-show='profile.achievements.perfect > 1 || !profile.achievements.perfect')
| {{profile.achievements.perfect || 0 }}&nbsp;
=env.t('perfectName')
small(ng-show='profile.achievements.perfect > 1 || !profile.achievements.perfect')=env.t('perfectText', {perfects: "{{profile.achievements.perfect || 0 }}"})
h5(ng-show='profile.achievements.perfect == 1')
=env.t('perfectSingular')
small(ng-show='profile.achievements.perfect == 1')=env.t('perfectSingularText')
hr
//-div(ng-if='profile.achievements.ultimateGear || user._id == profile._id')
.achievement.achievement-armor(ng-show='profile.achievements.ultimateGear')
div(ng-class='{muted: !profile.achievements.ultimateGear}')
h5=env.t('ultimGearName')
small=env.t('ultimGearText')
hr
// Remove the following when ultimate gear is fixed (https://github.com/HabitRPG/habitrpg/issues/2232):
div(ng-if='::user._id == profile._id')
div.muted
h5=env.t('ultimGearName')
small
+aLink('https://github.com/HabitRPG/habitrpg/issues/2232', 'Returning soon')
hr
div(ng-if='profile.achievements.beastMaster || user._id == profile._id')
.achievement.achievement-rat(ng-show='profile.achievements.beastMaster')
div(ng-class='{muted: !profile.achievements.beastMaster}')
h5=env.t('beastMasterName')
small=env.t('beastMasterText')
small(ng-if='profile.achievements.beastMasterCount')
=env.t('beastMasterText2', {count: "{{profile.achievements.beastMasterCount}}"})
hr
div(ng-if='profile.achievements.mountMaster || user._id == profile._id')
.achievement.achievement-wolf(ng-show='profile.achievements.mountMaster')
div(ng-class='{muted: !profile.achievements.mountMaster}')
h5=env.t('mountMasterName')
small=env.t('mountMasterText')
small(ng-if='profile.achievements.mountMasterCount')
=env.t('mountMasterText2', {count: "{{profile.achievements.mountMasterCount}}"})
hr
div(ng-if='profile.achievements.triadBingo || user._id == profile._id')
.achievement.achievement-triadbingo(ng-show='profile.achievements.triadBingo')
div(ng-class='{muted: !profile.achievements.triadBingo}')
h5=env.t('triadBingoName')
small=env.t('triadBingoText')
small(ng-if='profile.achievements.triadBingoCount')
=env.t('triadBingoText2', {count: "{{profile.achievements.triadBingoCount}}"})
hr
div(ng-if='profile.achievements.rebirths')
.achievement.achievement-sun
h5(ng-if='profile.achievements.rebirths == 1')=env.t('rebirthBegan')
h5(ng-if='profile.achievements.rebirths > 1')
=env.t('rebirthText', {rebirths: "{{profile.achievements.rebirths}}"})
small
=env.t('rebirthOrb')
|&nbsp;{{profile.achievements.rebirthLevel}}.
hr
div(ng-if='::profile.achievements.helpedHabit')
.achievement.achievement-tree
h5=env.t('helped')
small
=env.t('helpedText1')
|&nbsp;
+aLink('http://community.habitrpg.com/node/290', env.t('helpedText2'))
hr
div(ng-if=':: profile.achievements.originalUser || profile.achievements.veteran')
.achievement.achievement-cake
div(ng-if='::profile.achievements.veteran')
h5=env.t('veteran')
small=env.t('veteranText')
div(ng-if='::profile.achievements.originalUser')
h5=env.t('originalUser')
small!=env.t('originalUserText')
hr
div(ng-if='profile.achievements.challenges || user._id == profile._id')
// This is a very strange icon to use. revisit
.achievement.achievement-karaoke(ng-show='profile.achievements.challenges')
div(ng-class='{muted: !profile.achievements.challenges}')
h5=env.t('challengeWinner')
table.table.table-striped
tr(ng-repeat='chal in profile.achievements.challenges track by $index')
td {{::chal}}
hr
div(ng-if='profile.achievements.quests || user._id == profile._id')
.achievement.achievement-alien(ng-show='profile.achievements.quests')
div(ng-class='{muted: !profile.achievements.quests}')
h5=env.t('completedQuests')
table.table.table-striped
tr(ng-repeat='(k,v) in profile.achievements.quests')
td {{::Content.quests[k].text()}}
td x{{v}}
hr
div(ng-if='profile.achievements.snowball')
.achievement.achievement-snowball
h5=env.t('annoyingFriends')
small
=env.t('annoyingFriendsText', {snowballs: "{{profile.achievements.snowball}}"})
hr
div(ng-if='profile.achievements.spookDust')
.achievement.achievement-spookDust
h5=env.t('alarmingFriends')
small
=env.t('alarmingFriendsText', {spookDust: "{{profile.achievements.spookDust}}"})
hr
div(ng-if='::profile.achievements.habitBirthdays')
.achievement.achievement-habitBirthday
h5=env.t('habitBirthday')
small(ng-if='::profile.achievements.habitBirthdays == 1')
=env.t('habitBirthdayText')
small(ng-if='::profile.achievements.habitBirthdays > 1')
=env.t('habitBirthdayPluralText', {number: "{{profile.achievements.habitBirthdays}}"})
hr
div(ng-if='::profile.achievements.valentine')
.achievement.achievement-valentine
h5=env.t('adoringFriends')
small
=env.t('adoringFriendsText', {cards: "{{::profile.achievements.valentine}}"})
hr
div(ng-if='::profile.achievements.quests.dilatory')
.achievement.achievement-dilatory
h5=env.t('achievementDilatory')
small
=env.t('achievementDilatoryText')
hr
div(ng-if='::profile.achievements.costumeContest')
.achievement.achievement-costumeContest
h5=env.t('costumeContest')
small
=env.t('costumeContestText')
hr
div(ng-if='::profile.achievements.nye')
.achievement.achievement-nye
h5=env.t('auldAcquaintance')
small
=env.t('auldAcquaintanceText', {cards: "{{::profile.achievements.nye}}"})
hr
div(ng-if='::profile.achievements.quests.stressbeast')
.achievement.achievement-stoikalm
h5=env.t('achievementStressbeast')
small
=env.t('achievementStressbeastText')
hr
+91
View File
@@ -0,0 +1,91 @@
h4(class=mobile?'item item-divider':'')=env.t('stats')
table.table.table-striped
tr
td
strong=env.t('health')
| : {{profile.stats.hp | number:0}} / 50
tr(ng-if='profile.stats.lvl >= 10 && !profile.preferences.disableClasses')
td
strong=env.t('mana')
| : {{profile.stats.mp | number:0}} / {{profile._statsComputed.maxMP}}
tr
td
strong=env.t('gold')
| : {{profile.stats.gp | number:0}}
tr
td
strong=env.t('level')
| : {{profile.stats.lvl}}
tr
td
strong=env.t('experience')
| : {{profile.stats.exp | number:0}} / {{Shared.tnl(profile.stats.lvl)}}
// FIXME get translations working before can use this
unless mobile
h4.stats-equipment(class=mobile?'item item-divider':'',ng-show='user.flags.itemsEnabled')=env.t('equipment')
table.table.table-striped(ng-show='user.flags.itemsEnabled')
tr(ng-repeat='(k,v) in profile.items.gear.equipped', ng-init='piece=Content.gear.flat[v]', ng-show='piece')
td
strong {{piece.text()}}:&nbsp;
span(ng-repeat='stat in ["str","con","per","int"]', ng-show='piece[stat]') {{piece[stat]}} {{stat.toUpperCase()}}&nbsp;
h4(class=mobile?'item item-divider':'')=env.t('attributes')
table.table.table-striped
each v,k in { str: {title:"strength",popover:'strengthText'},int: {title:"intelligence",popover:'intText'},con: {title:"constitution",popover:'conText'},per: {title:"perception",popover:'perText'} }
tr
td
span.hint(popover-title=env.t(v.title), popover-placement='right', popover=env.t(v.popover), popover-trigger='mouseenter', style='margin-right:3px')
strong=env.t(v.title)
span
strong : {{profile._statsComputed.#{k}}}
td
ul.list-unstyled(ng-init='g=Content.gear.flat;e=profile.items.gear.equipped')
li(ng-show='profile.stats.lvl > 1')
span.hint(popover-title=env.t('levelBonus'), popover-trigger='mouseenter', popover-placement='top', popover=env.t('levelBonusText'))=env.t('level')
|: {{(profile.stats.lvl - 1) / 2}}&nbsp;
li(ng-show='g[e.weapon].#{k} + g[e.armor].#{k} + g[e.head].#{k} + g[e.shield].#{k} > 0')
span.hint(popover-title=env.t('equipment'), popover-trigger='mouseenter', popover-placement='top', popover=env.t('equipmentBonusText'))=env.t('equipment')
|: {{g[e.weapon].#{k} + g[e.armor].#{k} + g[e.head].#{k} + g[e.shield].#{k} || 0}}&nbsp;
li(ng-show='profile._statsComputed.#{k} - profile.stats.buffs.#{k} - ((profile.stats.lvl - 1) / 2) - g[e.weapon].#{k} - g[e.armor].#{k} - g[e.head].#{k} - g[e.shield].#{k} - profile.stats.#{k} > 0')
span.hint(popover-title=env.t('classBonus'), popover-trigger='mouseenter', popover-placement='top', popover=env.t('classBonusText'))=env.t('classEquipBonus')
|: {{profile._statsComputed.#{k} - profile.stats.buffs.#{k} - ((profile.stats.lvl - 1) / 2) - g[e.weapon].#{k} - g[e.armor].#{k} - g[e.head].#{k} - g[e.shield].#{k} - profile.stats.#{k}}}&nbsp;
li(ng-show='profile.stats.#{k} > 0')
span.hint(popover-title=env.t('allocatedPoints'), popover-trigger='mouseenter', popover-placement='top', popover=env.t('allocatedPointsText'))=env.t('allocated')
|: {{profile.stats.#{k} || 0}}&nbsp;
li(ng-show='profile.stats.buffs.#{k} > 0')
span.hint(popover-title=env.t('buffs'), popover-trigger='mouseenter', popover-placement='top', popover=env.t('buffsText'))=env.t('buffs')
|: {{profile.stats.buffs.#{k} || 0}}&nbsp;
tr(ng-if='profile.stats.buffs.stealth')
td
span.hint(popover-title=env.t('stealth'), popover-trigger='mouseenter', popover-placement='right', popover=env.t('stealthNewDay'))
strong
=env.t('stealth')
strong : {{profile.stats.buffs.stealth}}&nbsp;
td
tr(ng-if='profile.stats.buffs.streaks')
td
strong.hint(popover-title=env.t('streaksFrozen'), popover-trigger='mouseenter', popover-placement='right', popover=env.t('streaksFrozenText'))=env.t('streaksFrozen')
td
h4(class=mobile?'item item-divider':'',ng-if='user.flags.dropsEnabled')=env.t('pets')
table.table.table-striped(ng-if='user.flags.dropsEnabled')
tr
td
strong=env.t('petsFound')
| : {{_.size(profile.items.pets)}}
tr
td
strong=env.t('beastMasterProgress')
| : {{profile.petCount}}/90
h4(class=mobile?'item item-divider':'', ng-if='user.flags.dropsEnabled')=env.t('mounts')
table.table.table-striped(ng-if='user.flags.dropsEnabled')
tr
td
strong=env.t('mountsTamed')
| : {{_.size(profile.items.mounts)}}
tr
td
strong=env.t('mountMasterProgress')
| : {{profile.mountCount}}/90
+149
View File
@@ -0,0 +1,149 @@
// Note here, we need this part of Habit to be a directive since we're going to be passing it variables from various
// parts of the app. The alternative would be to create new scopes for different containing sections, but that
// started to get unwieldy
script(id='templates/habitrpg-tasks.html', type="text/ng-template")
.tasks-lists.container-fluid
.row
.col-md-3.col-sm-6(bindonce='lists', ng-repeat='list in lists', ng-class='::{"rewards-module": list.type==="reward"}')
.task-column(class='{{list.type}}s')
// Todos export/graph options
span.option-box.pull-right(ng-if='::main && list.type=="todo"')
a.option-action(ng-show='obj.history.todos', ng-click='toggleChart("todos")', tooltip=env.t('progress'))
span.glyphicon.glyphicon-signal
//a.option-action(ng-href='/v1/users/{{user.id}}/calendar.ics?apiToken={{user.apiToken}}', tooltip='iCal')
a.option-action(ng-click='notPorted()', tooltip='iCal', ng-show='false')
span.glyphicon.glyphicon-calendar
// <a href="https://www.google.com/calendar/render?cid={{encodeiCalLink(_user.id, _user.apiToken)}}" rel=tooltip title="Google Calendar"><i class=icon-calendar></i></a>
// Header
h2.task-column_title {{list.header}}
// Todo Chart
.todos-chart(ng-if='::list.type == "todo"', ng-show='charts.todos')
// Add New
form.task-add(name='new{{list.type}}form', ng-hide='obj._locked', ng-submit='addTask(obj[list.type+"s"],list)')
input(type='text', ng-model='list.newTask', placeholder='{{list.placeHolder}}', required)
button(type='submit', ng-disabled='new{{list.type}}form.$invalid')
span.glyphicon.glyphicon-plus
mixin taskColumnTabs(position)
// Habits Tabs
div(ng-if='::main && list.type=="habit"', class='tabbable tabs-below')
ul.task-filter
li(ng-class='{active: list.view == "all"}')
a(ng-click='list.view = "all"')=env.t('all')
li(ng-class='{active: list.view == "yellowred"}')
a(ng-click='list.view = "yellowred"')=env.t('yellowred')
li(ng-class='{active: list.view == "greenblue"}')
a(ng-click='list.view = "greenblue"')=env.t('greenblue')
// Daily Tabs
div(ng-if='::main && list.type=="daily"', class='tabbable tabs-below')
// remaining/completed tabs
ul.task-filter
li(ng-class='{active: list.view == "all"}')
a(ng-click='list.view = "all"')=env.t('all')
li(ng-class='{active: list.view == "remaining"}')
a(ng-click='list.view = "remaining"')=env.t('due')
li(ng-class='{active: list.view == "complete"}')
a(ng-click='list.view = "complete"')=env.t('grey')
// Todo Tabs
div(ng-if='::main && list.type=="todo"', ng-class='::{"tabbable tabs-below": list.type=="todo"}')
if position=="bottom"
div(ng-show='list.view == "complete"')
.alert
=env.t('lotOfToDos')
button.task-action-btn.tile.spacious.bright(ng-click='user.ops.clearCompleted({})',popover=env.t('deleteToDosExplanation'),popover-trigger='mouseenter')=env.t('clearCompleted')
p!=env.t('beeminderDeleteWarning')
// remaining/completed tabs
ul.task-filter
li(ng-class='{active: list.view == "remaining"}')
a(ng-click='list.view = "remaining"')=env.t('remaining')
li(ng-class='{active: list.view == "dated"}', tooltip=env.t('datedNotSorted'))
a(ng-click='list.view = "dated"')=env.t('dated')
li(ng-class='{active: list.view == "complete"}')
a(ng-click='list.view = "complete"')=env.t('complete')
// Rewards Tabs
div(ng-if='::main && list.type=="reward"', class='tabbable tabs-below')
ul.task-filter
li(ng-class='{active: list.view == "all"}')
a(ng-click='list.view = "all"')=env.t('all')
li(ng-class='{active: list.view == "ingamerewards"}')
a(ng-click='list.view = "ingamerewards"')=env.t('ingamerewards')
+taskColumnTabs('top')
// Actual List
ul(class='{{list.type}}s main-list', ng-show='obj[list.type + "s"].length > 0', hrpg-sort-tasks)
include ./task
// Static Rewards
ul.items.rewards(ng-if='main && list.type=="reward" && user.flags.itemsEnabled')
li.task.reward-item(ng-repeat='item in itemStore',popover-trigger='mouseenter', popover-placement='top', popover='{{item.notes()}}')
// right-hand side control buttons
.task-meta-controls
span.task-notes
span.glyphicon.glyphicon-comment
//left-hand size commands
.task-controls.task-primary
a.money.btn-buy.item-btn(ng-class='{highValue: item.value >= 1000}', ng-click='buy(item)')
span.shop_gold
span.reward-cost {{item.value}}
// main content
span(ng-class='::{"shop_{{item.key}} shop-sprite item-img": true}').reward-img
p.task-text {{item.text()}}
// Events
ul.items.rewards(ng-if='main && list.type=="reward" && (user.items.special.snowball>0 || user.stats.buffs.snowball || user.items.special.spookDust>0 || user.stats.buffs.spookDust)')
mixin specialSpell(k,canceler)
li.task.reward-item(ng-if='#{canceler ? "user.stats.buffs."+canceler : "user.items.special."+k+">0"}',popover-trigger='mouseenter', popover-placement='top', popover='{{Content.spells.special.#{k}.notes()}}')
.task-meta-controls
span.task-notes
span.glyphicon.glyphicon-comment
//left-hand size commands
.task-controls.task-primary
a.money.btn-buy.item-btn(ng-click='castStart(Content.spells.special.#{k})', ng-class='{active: Content.spells.special.#{k}.key == spell.key}')
if canceler
span.shop_gold
span.reward-cost {{Content.spells.special.#{k}.value}}
else
span.shop_spell(class='shop_#{k}')
span.reward-cost {{user.items.special.#{k}}}
// main content
p.task-text {{Content.spells.special.#{k}.text()}}
+specialSpell('snowball')
+specialSpell('spookDust')
+specialSpell('salt','snowball')
+specialSpell('opaquePotion','spookDust')
// Spells
ul.items(ng-if='main && list.type=="reward" && user.stats.class && !user.preferences.disableClasses')
li.task.reward-item(ng-repeat='(k,skill) in Content.spells[user.stats.class]', ng-if='user.stats.lvl >= skill.lvl',popover-trigger='mouseenter', popover-placement='top', popover='{{skill.notes()}}')
.task-meta-controls
span.task-notes
span.glyphicon.glyphicon-comment
//left-hand size commands
.task-controls.task-primary
a.money.btn-buy.item-btn(ng-click='castStart(skill)', ng-class='{active: skill.key == spell.key}')
span.reward-cost
strong {{skill.mana}}
=env.t('mp')
// main content
span(ng-class='{"shop_{{skill.key}} shop-sprite item-img": true}')
p.task-text {{skill.text()}}
br
// Ads
div(ng-if='::main && !user.purchased.ads && !user.purchased.plan.customerId && list.type!="reward"')
span.pull-right
a(ui-sref='options.settings.subscription', popover=env.t('removeAds'), popover-trigger='mouseenter')
span.glyphicon.glyphicon-remove
// Habit3
ins.adsbygoogle(ng-init='initAds()', style='display: inline-block; width: 234px; height: 60px;', data-ad-client='ca-pub-3242350243827794', data-ad-slot='9529624576')
+taskColumnTabs('bottom')
+238
View File
@@ -0,0 +1,238 @@
li(bindonce='list', bo-id='"task-"+task.id', ng-repeat='task in obj[list.type+"s"]', class='task {{Shared.taskClasses(task, user.filters, user.preferences.dayStart, user.lastCron, list.showCompleted, main)}}', ng-click='spell && (list.type != "reward") && castEnd(task, "task", $event)', ng-class='{"cast-target":spell && (list.type != "reward")}', popover-trigger='mouseenter', data-popover-html="{{task.notes | markdown}}", popover-placement="top", popover-append-to-body='true', ng-show='shouldShow(task, list, user.preferences)')
// right-hand side control buttons
.task-meta-controls
// Due Date
span(ng-if='task.type=="todo" && task.date')
span(ng-class='{"label label-danger":(moment(task.date).isBefore(_today, "days") && !task.completed)}') {{task.date | date:(user.preferences.dateFormat.indexOf('yyyy') == 0 ? user.preferences.dateFormat.substr(5) : user.preferences.dateFormat.substr(0,5))}}
// Streak
| &nbsp;
span(ng-show='task.streak') {{task.streak}}&nbsp;
span(tooltip=env.t('streakCounter'))
span.glyphicon.glyphicon-forward
| &nbsp;
// Icons only available if you own the tasks (aka, hidden from challenge stats)
span(ng-if='!obj._locked')
a(ng-click='pushTask(task,$index,"top")', tooltip=env.t('pushTaskToTop'))
span.glyphicon.glyphicon-open
// a(ng-click='pushTask(task,$index,"bottom")', tooltip=env.t('pushTaskToBottom'))
// span.glyphicon.glyphicon-import
// // glyphicon-import or glyphicon-save or glyphicon-sort-by-attributes
a.badge(ng-if='task.checklist[0]', ng-class='{"badge-success":checklistCompletion(task.checklist) == task.checklist.length}', ng-click='collapseChecklist(task)', tooltip=env.t('expandCollapse'))
|{{checklistCompletion(task.checklist)}}/{{task.checklist.length}}
span.glyphicon.glyphicon-tags(tooltip='{{Shared.appliedTags(user.tags, task.tags)}}', ng-hide='Shared.noTags(task.tags)')
// edit
a(ng-hide='task._editing', ng-click='editTask(task)', tooltip=env.t('edit'))
| &nbsp;
span.glyphicon.glyphicon-pencil(ng-hide='task._editing')
| &nbsp;
a(ng-hide='!task._editing', ng-click='editTask(task)', tooltip=env.t('cancel'))
span.glyphicon.glyphicon-remove(ng-hide='!task._editing')
| &nbsp;
// save
a(ng-hide='!task._editing', ng-click='editTask(task);saveTask(task)', tooltip=env.t('save'))
span.glyphicon.glyphicon-ok(ng-hide='!task._editing')
| &nbsp;
//challenges
span(ng-if='task.challenge.id')
span(ng-if='task.challenge.broken')
span.glyphicon.glyphicon-bullhorn(style='background-color:red;', ng-click='task._editing = true', tooltip=env.t('brokenChaLink') tooltip-placement='right')
| &nbsp;
span(ng-if='!task.challenge.broken')
span.glyphicon.glyphicon-bullhorn(tooltip=env.t('challenge'))
| &nbsp;
// delete
a(ng-if='!task.challenge.id', ng-click='removeTask(obj[list.type+"s"], $index)', tooltip=env.t('delete'))
span.glyphicon.glyphicon-trash
| &nbsp;
// chart
a(ng-show='task.history', ng-click='toggleChart(obj._id+task.id, task)', tooltip=env.t('progress'))
span.glyphicon.glyphicon-signal
| &nbsp;
// notes
span.task-notes(ng-show='task.notes && !task._editing')
span.glyphicon.glyphicon-comment
| &nbsp;
// left-hand side checkbox
.task-controls.task-primary(ng-if='!task._editing')
// Habits
.task-actions(ng-if='::task.type=="habit"')
// score() is overridden in challengesCtrl to do nothing
a(ng-if='task.up', ng-click='applyingAction || score(task,"up")')
span.glyphicon.glyphicon-plus
a(ng-if='task.down', ng-click='applyingAction || score(task,"down")')
span.glyphicon.glyphicon-minus
// Rewards
span(ng-show='task.type=="reward"')
a.money.btn-buy(ng-class='{highValue: task.value >= 1000}', ng-click='score(task, "down")')
span.shop_gold
span.reward-cost {{task.value}}
// Daily & Todos
span.task-checker.action-yesno(ng-if='::task.type=="daily" || task.type=="todo"')
input.visuallyhidden.focusable(ng-if='$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox', ng-model='task.completed', ng-change='task.type=="todo" && pushTask(task,$index,"bottom"); changeCheck(task)')
input.visuallyhidden.focusable(ng-if='!$state.includes("tasks")', id='box-{{obj._id}}_{{task.id}}', type='checkbox')
label(for='box-{{obj._id}}_{{task.id}}')
// main content
div.task-text(ng-dblclick='task._editing ? saveTask(task) : editTask(task)')
markdown(text='task.text',target='_blank')
//-| {{task.text}}
div(ng-if='task.checklist && !$state.includes("options.social.challenges") && !task.collapseChecklist && !task._editing')
fieldset.option-group.task-checklist
label.checkbox(ng-repeat='item in task.checklist')
input(type='checkbox',ng-model='item.completed',ng-change='saveTask(task,true)')
markdown(text='item.text',target='_blank')
// edit/options dialog
div(ng-if='task._editing')
.task-options
// Broken Challenge
.well(ng-if='task.challenge.broken')
div(ng-if='task.challenge.broken=="TASK_DELETED"')
p=env.t('brokenTask')
p
a(ng-click='unlink(task, "keep")')=env.t('keepIt')
| &nbsp;&nbsp;
a(ng-click="removeTask(obj[list.type+'s'], $index)")=env.t('removeIt')
div(ng-if='task.challenge.broken=="CHALLENGE_DELETED"')
p
|&nbsp;
=env.t('brokenChallenge')
p
a(ng-click='unlink(task, "keep-all")')=env.t('keepThem')
| &nbsp;|&nbsp;
a(ng-click='unlink(task, "remove-all")')=env.t('removeThem')
div(ng-if='task.challenge.broken=="CHALLENGE_CLOSED"')
p
!=env.t('challengeCompleted', {user: "{{task.challenge.winner}}"})
p
a(ng-click='unlink(task, "keep-all")')=env.t('keepThem')
| &nbsp;|&nbsp;
a(ng-click='unlink(task, "remove-all")')=env.t('removeThem')
//div(ng-if='task.challenge.broken=="UNSUBSCRIBED"')
p=env.t('unsubChallenge')
p
a(ng-click="unlink(task, 'keep-all')")=env.t('keepThem')
| &nbsp;|&nbsp;
a(ng-click="unlink(task, 'remove-all')")=env.t('removeThem')
// Checklists
.task-checklist-edit(ng-if='!$state.includes("options.social.challenges")')
ul
li
button(type='button', ng-if='!task.checklist[0] && (task.type=="daily" || task.type=="todo")',ng-click='addChecklist(task)')
span.glyphicon.glyphicon-tasks
span=env.t('addChecklist')
form.checklist-form(ng-if='task.checklist')
fieldset.option-group(ng-if='!$state.includes("options.social.challenges")')
legend.option-title
span.hint(popover=env.t('checklistText'),popover-trigger='mouseenter',popover-placement='bottom')=env.t('checklist')
ul(hrpg-sort-checklist)
li(ng-repeat='item in task.checklist')
//input(type='checkbox',ng-model='item.completed',ng-change='saveTask(task,true)')
//-,ng-blur='saveTask(task,true)')
span.checklist-icon.glyphicon.glyphicon-resize-vertical()
input(type='text',ng-model='item.text',ui-keydown="{'8 46':'removeChecklistItem(task,$event,$index)'}",ui-keyup="{'13':'addChecklistItem(task,$event,$index)','38 40':'navigateChecklist(task,$index,$event)'}")
a(ng-click='removeChecklistItem(task,$event,$index,true)')
span.glyphicon.glyphicon-trash(tooltip=env.t('delete'))
form(ng-submit='saveTask(task,false,true)')
// text & notes
fieldset.option-group
label.option-title=env.t('text')
input.option-content(type='text', ng-model='task.text', required, ng-disabled='task.challenge.id')
label.option-title=env.t('extraNotes')
textarea.option-content(rows='3', ng-model='task.notes', ng-model-options="{debounce: 1000}")
// if Habit, plus/minus command options
fieldset.option-group.plusminus(ng-if='task.type=="habit" && !task.challenge.id')
legend.option-title=env.t('direction/Actions')
span.task-checker
input.visuallyhidden.focusable(id='{{obj._id}}_{{task.id}}-option-plus', type='checkbox', ng-model='task.up')
label(for='{{obj._id}}_{{task.id}}-option-plus')
span.task-checker
input.visuallyhidden.focusable(id='{{obj._id}}_{{task.id}}-option-minus', type='checkbox', ng-model='task.down')
label(for='{{obj._id}}_{{task.id}}-option-minus')
// if Daily, calendar
fieldset(ng-if='::task.type=="daily"', class="option-group")
legend.option-title=env.t('repeat')
ul.repeat-days(bindonce)
// note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding
li
button(ng-class='{active: task.repeat.su}', type='button', ng-click='task.challenge.id || (task.repeat.su = !task.repeat.su)') {{::moment.weekdaysMin(0)}}
li
button(ng-class='{active: task.repeat.m}', type='button', ng-click='task.challenge.id || (task.repeat.m = !task.repeat.m)') {{::moment.weekdaysMin(1)}}
li
button(ng-class='{active: task.repeat.t}', type='button', ng-click='task.challenge.id || (task.repeat.t = !task.repeat.t)') {{::moment.weekdaysMin(2)}}
li
button(ng-class='{active: task.repeat.w}', type='button', ng-click='task.challenge.id || (task.repeat.w = !task.repeat.w)') {{::moment.weekdaysMin(3)}}
li
button(ng-class='{active: task.repeat.th}', type='button', ng-click='task.challenge.id || (task.repeat.th = !task.repeat.th)') {{::moment.weekdaysMin(4)}}
li
button(ng-class='{active: task.repeat.f}', type='button', ng-click='task.challenge.id || (task.repeat.f= !task.repeat.f)') {{::moment.weekdaysMin(5)}}
li
button(ng-class='{active: task.repeat.s}', type='button', ng-click='task.challenge.id || (task.repeat.s = !task.repeat.s)') {{::moment.weekdaysMin(6)}}
// if Reward, pricing
fieldset.option-group.option-short(ng-if='task.type=="reward" && !task.challenge.id')
legend.option-title=env.t('price')
input.option-content(type='number', size='16', min='0', step="any", ng-model='task.value')
.money.input-suffix
span.shop_gold
// if Todos, the due date
fieldset.option-group(ng-if='task.type=="todo" && !task.challenge.id')
legend.option-title=env.t('dueDate')
input.option-content.datepicker(type='text', datepicker-popup='{{user.preferences.dateFormat}}', ng-model='task.date', is-open='datepickerOpened', ng-click='datepickerOpened = true')
// Tags
fieldset.option-group(ng-if='!$state.includes("options.social.challenges")')
p.option-title.mega(ng-click='task._tags = !task._tags', tooltip=env.t('expandCollapse'))=env.t('tags')
label.checkbox(ng-repeat='tag in user.tags', ng-class="{visuallyhidden: task._tags}")
input(type='checkbox', ng-model='task.tags[tag.id]')
markdown(text='tag.name')
// Advanced Options
span(ng-if='::task.type!="reward"')
p.option-title.mega(ng-click='task._advanced = !task._advanced', tooltip=env.t('expandCollapse'))=env.t('advancedOptions')
fieldset.option-group.advanced-option(ng-class="{visuallyhidden: task._advanced}")
legend.option-title
a.hint.priority-multiplier-help(href='https://trello.com/card/priority-multiplier/50e5d3684fe3a7266b0036d6/17', target='_blank', popover-title=env.t('difficultyHelpTitle'), popover-trigger='mouseenter', popover=env.t('difficultyHelpContent'))=env.t('difficulty')
ul.priority-multiplier
li
button(type='button', ng-class='{active: task.priority==1 || !task.priority}', ng-click='task.challenge.id || (task.priority=1)')=env.t('easy')
li
button(type='button', ng-class='{active: task.priority==1.5}', ng-click='task.challenge.id || (task.priority=1.5)')=env.t('medium')
li
button(type='button', ng-class='{active: task.priority==2}', ng-click='task.challenge.id || (task.priority=2)')=env.t('hard')
//span(ng-if='task.type=="daily" && !task.challenge.id')
span(ng-if='task.type=="daily"')
legend.option-title.pull-left=env.t('restoreStreak')
input.option-content(type='number', ng-model='task.streak')
div(ng-if='(user.preferences.allocationMode == "taskbased" && user.preferences.automaticAllocation) || $state.is("options.social.challenges")')
legend.option-title.pull-left=env.t('attributes')
ul.task-attributes
li
button(type='button', ng-class='{active: task.attribute=="str"}', ng-click='task.attribute="str"')=env.t('physical')
li
button(type='button', ng-class='{active: task.attribute=="int"}', ng-click='task.attribute="int"')=env.t('mental')
li
button(type='button', ng-class='{active: task.attribute=="con"}', ng-click='task.attribute="con"')=env.t('social')
li
button(type='button', ng-class='{active: task.attribute=="per"}', ng-click='task.attribute="per"', popover=env.t('otherExamples'), popover-trigger='mouseenter', popover-placement='top')=env.t('other')
.save-close
button(type='submit')=env.t('saveAndClose')
div(class='{{obj._id}}{{task.id}}-chart', ng-show='charts[obj._id+task.id]')