diff --git a/public/css/shared.styl b/public/css/shared.styl index d05ebcbb95..50f270cc0c 100644 --- a/public/css/shared.styl +++ b/public/css/shared.styl @@ -38,6 +38,10 @@ a.hint:hover .vertical-20 vertical-align: 20% +.popover + hr + margin: 10px 0 + @media (max-width: 768px) .container-fluid padding-right: 5px diff --git a/public/js/controllers/inventoryCtrl.js b/public/js/controllers/inventoryCtrl.js index 47795e030c..219c8618e0 100644 --- a/public/js/controllers/inventoryCtrl.js +++ b/public/js/controllers/inventoryCtrl.js @@ -159,6 +159,33 @@ habitrpg.controller("InventoryCtrl", User.user.ops.equip({params:{type: 'mount', key: egg + '-' + potion}}); } + $scope.questPopover = function(quest) { + // The popover gets parsed as markdown (hence the double \n for line breaks + var text = ''; + if(quest.boss) { + text += '**' + window.env.t('bossHP') + ':** ' + quest.boss.hp + '\n\n'; + text += '**' + window.env.t('bossStrength') + ':** ' + quest.boss.str + '\n\n'; + } else if(quest.collect) { + var count = 0; + for (var key in quest.collect) { + text += '**' + window.env.t('collect') + ':** ' + quest.collect[key].count + ' ' + quest.collect[key].text() + '\n\n'; + } + } + text += '---\n\n'; + text += '**' + window.env.t('rewards') + ':**\n\n'; + if(quest.drop.items) { + for (var item in quest.drop.items) { + text += quest.drop.items[item].text() + '\n\n'; + } + } + if(quest.drop.exp) + text += quest.drop.exp + ' ' + window.env.t('experience') + '\n\n'; + if(quest.drop.gp) + text += quest.drop.gp + ' ' + window.env.t('gold') + '\n\n'; + + return text; + } + $scope.showQuest = function(quest) { var item = Content.quests[quest]; var completedPrevious = !item.previous || (User.user.achievements.quests && User.user.achievements.quests[item.previous]); diff --git a/views/options/inventory/inventory.jade b/views/options/inventory/inventory.jade index e5d14cc347..5fc6dc9de5 100644 --- a/views/options/inventory/inventory.jade +++ b/views/options/inventory/inventory.jade @@ -2,13 +2,13 @@ script(type='text/ng-template', id='partials/options.inventory.equipment.html') .container-fluid .row .col-md-6.border-right - h3.equipment-title.hint(popover-trigger='mouseenter', popover-placement='top', popover=env.t('battleGearText'))=env.t('battleGear') + h3.equipment-title.hint(popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', popover=env.t('battleGearText'))=env.t('battleGear') li.customize-menu.inventory-gear menu.pets-menu(label='{{::label}}', ng-repeat='(klass,label) in {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer"), special:env.t("special"), mystery:env.t("mystery")}', ng-show='gear[klass]') div(ng-repeat='item in gear[klass]') - button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='user.ops.equip({params:{key:item.key}})', class='shop_{{::item.key}}', ng-class='{selectableInventory: user.items.gear.equipped[item.type] == item.key}') + button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='user.ops.equip({params:{key:item.key}})', class='shop_{{::item.key}}', ng-class='{selectableInventory: user.items.gear.equipped[item.type] == item.key}') .col-md-6 - h3.equipment-title.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('costumeText'))=env.t('costume') + h3.equipment-title.hint(popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', popover=env.t('costumeText'))=env.t('costume') .checkbox.equipment-title label input(type="checkbox", ng-model="user.preferences.costume", ng-change='set({"preferences.costume":user.preferences.costume ? true : false})') @@ -17,7 +17,7 @@ script(type='text/ng-template', id='partials/options.inventory.equipment.html') li.customize-menu(ng-if='user.preferences.costume') menu.pets-menu(label='{{::label}}', ng-repeat='(klass,label) in {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer"), special:env.t("special"), mystery:env.t("mystery")}', ng-show='gear[klass]') div(ng-repeat='item in gear[klass]') - button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='user.ops.equip({params:{type:"costume", key:item.key}})', class='shop_{{::item.key}}', ng-class='{selectableInventory: user.items.gear.costume[item.type] == item.key}') + button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='user.ops.equip({params:{type:"costume", key:item.key}})', class='shop_{{::item.key}}', ng-class='{selectableInventory: user.items.gear.costume[item.type] == item.key}') script(type='text/ng-template', id='partials/options.inventory.seasonalshop.html') .container-fluid @@ -39,24 +39,24 @@ script(type='text/ng-template', id='partials/options.inventory.seasonalshop.html // they have each have a value of false. The item can be purchased for gold in the rewards column, // not the seasonal shop. This makes that more clear. div(ng-repeat='item in ::getSeasonalShopArray(set)' ng-class="{transparent: user.items.gear.owned[item.key] === true ||user.items.gear.owned[item.key] === false}") - button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='purchase(item.type,item)', class='shop_{{::item.key}}') + button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='purchase(item.type,item)', class='shop_{{::item.key}}') .text-center | {{((item.specialClass == "wizard") && (item.type == "weapon")) + 1}}  span.Pet_Currency_Gem1x.inline-gems menu.pets-menu(label=env.t('quests')) div(ng-repeat='quest in ::getSeasonalShopQuests()') - button.customize-option(popover="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='buyQuest(quest.key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"') + button.customize-option(data-popover-html="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : questPopover(quest) | markdown}}", popover-append-to-body='true', popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='buyQuest(quest.key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"') p | {{::quest.value}}  span.Pet_Currency_Gem1x.inline-gems menu.pets-menu(label=env.t('seasonalItems')) div - button.customize-option(popover='{{::Content.spells.special.snowball.notes()}}', popover-title='{{::Content.spells.special.snowball.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='purchase("special", Content.spells.special.snowball)', class='inventory_special_snowball') + button.customize-option(popover='{{::Content.spells.special.snowball.notes()}}', popover-title='{{::Content.spells.special.snowball.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='purchase("special", Content.spells.special.snowball)', class='inventory_special_snowball') p | {{::Content.spells.special.snowball.value}} span(class='shop_gold') // div - button.customize-option(popover='{{::Content.spells.special.nye.notes()}}', popover-title='{{::Content.spells.special.nye.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='castStart(Content.spells.special.nye)', class='inventory_special_nye') + button.customize-option(popover='{{::Content.spells.special.nye.notes()}}', popover-title='{{::Content.spells.special.nye.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='castStart(Content.spells.special.nye)', class='inventory_special_nye') p | {{Content.spells.special.nye.value}} span(class='shop_gold') @@ -89,7 +89,7 @@ script(type='text/ng-template', id='partials/options.inventory.timetravelers.htm li.customize-menu.inventory-gear menu.pets-menu(label='{{::set.text}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') div(ng-repeat='item in set.items') - button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='user.ops.buyMysterySet({params:{key:set.key}})', class='shop_{{::item.key}}') + button.customize-option(popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='user.ops.buyMysterySet({params:{key:set.key}})', class='shop_{{::item.key}}') script(type='text/ng-template', id='partials/options.inventory.drops.html') .container-fluid @@ -104,7 +104,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') p.muted(ng-show='eggCount < 1')=env.t('noEggs') div(ng-repeat='(egg,points) in ownedItems(user.items.eggs)') //TODO move positioning this styling to css - button.customize-option(popover='{{::Content.eggs[egg].notes()}}', popover-title!=env.t("egg", {eggType: "{{::Content.eggs[egg].text()}}"}), popover-trigger='mouseenter', popover-placement='right', ng-click='chooseEgg(egg)', class='Pet_Egg_{{::egg}}', ng-class='{selectableInventory: selectedPotion && !(user.items.pets[egg+"-"+selectedPotion.key]>0)}') + button.customize-option(popover='{{::Content.eggs[egg].notes()}}', popover-title!=env.t("egg", {eggType: "{{::Content.eggs[egg].text()}}"}), popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='chooseEgg(egg)', class='Pet_Egg_{{::egg}}', ng-class='{selectableInventory: selectedPotion && !(user.items.pets[egg+"-"+selectedPotion.key]>0)}') .badge.badge-info.stack-count {{points}} //-p {{Content.eggs[egg].text()}} @@ -112,7 +112,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') menu.hatchingPotion-menu(label=(env.t('hatchingPotions') + ' ({{potCount}})')) p.muted(ng-show='potCount < 1')=env.t('noHatchingPotions') div(ng-repeat='(pot,points) in ownedItems(user.items.hatchingPotions)') - button.customize-option(popover='{{::Content.hatchingPotions[pot].notes()}}', popover-title!=env.t("potion", {potionType: "{{::Content.hatchingPotions[pot].text()}}"}), popover-trigger='mouseenter', popover-placement='right', ng-click='choosePotion(pot)', class='Pet_HatchingPotion_{{::pot}}', ng-class='{selectableInventory: selectedEgg && !(user.items.pets[selectedEgg.key+"-"+pot]>0)}') + button.customize-option(popover='{{::Content.hatchingPotions[pot].notes()}}', popover-title!=env.t("potion", {potionType: "{{::Content.hatchingPotions[pot].text()}}"}), popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='choosePotion(pot)', class='Pet_HatchingPotion_{{::pot}}', ng-class='{selectableInventory: selectedEgg && !(user.items.pets[selectedEgg.key+"-"+pot]>0)}') .badge.badge-info.stack-count {{points}} li.customize-menu @@ -120,14 +120,14 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') p.muted(ng-show='questCount < 1')=env.t('noScrolls') p.muted!=env.t('scrollsText1') + ' ' + env.t('scrollsText2') + '' div(ng-repeat='(quest_key,points) in ownedItems(user.items.quests)', ng-init='quest = Content.quests[quest_key]') - button.customize-option(popover="{{:: quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='showQuest(quest_key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"') + button.customize-option(data-popover-html="{{:: quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : questPopover(quest) | markdown}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='showQuest(quest_key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"') .badge.badge-info.stack-count {{points}} li.customize-menu menu.pets-menu(label=env.t('food') + ' ({{foodCount}})') p.muted(ng-show='foodCount < 1')=env.t('noFood') div(ng-repeat='(food,points) in ownedItems(user.items.food)') - button.customize-option(popover='{{::Content.food[food].notes()}}', popover-title='{{::Content.food[food].text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='chooseFood(food)', class='Pet_Food_{{::food}}') + button.customize-option(popover='{{::Content.food[food].notes()}}', popover-title='{{::Content.food[food].text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='chooseFood(food)', class='Pet_Food_{{::food}}') .badge.badge-info.stack-count {{points}} @@ -135,25 +135,25 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') menu.pets-menu(label=env.t('special')) mixin specialItem(k) div(ng-if='user.items.special.#{k}') - button.customize-option(popover='{{::Content.special.#{k}.notes()}}', popover-title='{{::Content.special.#{k}.text()}}', popover-trigger='mouseenter', popover-placement='right', ng-click='castStart(Content.special.#{k})', class='inventory_special_#{k}') + button.customize-option(popover='{{::Content.special.#{k}.notes()}}', popover-title='{{::Content.special.#{k}.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='castStart(Content.special.#{k})', class='inventory_special_#{k}') .badge.badge-info.stack-count {{user.items.special.#{k}}} +specialItem('snowball') +specialItem('spookDust') div(ng-if='user.items.special.valentineReceived[0]') - button.customize-option(popover="Valentine's Day Card from {{User.user.items.special.valentineReceived[0]}}", popover-trigger='mouseenter', popover-placement='right', ng-click='openModal("valentine")', class='inventory_special_valentine') + button.customize-option(popover="Valentine's Day Card from {{User.user.items.special.valentineReceived[0]}}", popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='openModal("valentine")', class='inventory_special_valentine') .badge.badge-info.stack-count {{user.items.special.valentineReceived.length}} div(ng-if='user.purchased.plan.customerId || user.purchased.plan.mysteryItems.length') - button.customize-option(popover=env.t('subscriberItemText'), popover-trigger='mouseenter', popover-placement='right', class='inventory_present', ng-click="user.ops.openMysteryItem({})") + button.customize-option(popover=env.t('subscriberItemText'), popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', class='inventory_present', ng-click="user.ops.openMysteryItem({})") .badge.badge-info.stack-count {{user.purchased.plan.mysteryItems.length}} div(ng-if='user.purchased.plan.consecutive.trinkets') - button.customize-option(popover=env.t('mysticHourglassPopover'), popover-trigger='mouseenter', popover-placement='right', class='inventory_special_trinket', ng-click="$state.go('options.inventory.timetravelers')") + button.customize-option(popover=env.t('mysticHourglassPopover'), popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', class='inventory_special_trinket', ng-click="$state.go('options.inventory.timetravelers')") .badge.badge-info.stack-count {{user.purchased.plan.consecutive.trinkets}} div(ng-if='user.items.special.nyeReceived[0]') - button.customize-option(popover="New Year's Card from {{User.user.items.special.nyeReceived[0]}}", popover-trigger='mouseenter', popover-placement='right', ng-click='openModal("nye")', class='inventory_special_nye') + button.customize-option(popover="New Year's Card from {{User.user.items.special.nyeReceived[0]}}", popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='openModal("nye")', class='inventory_special_nye') .badge.badge-info.stack-count {{user.items.special.nyeReceived.length}} .col-md-6.border-left @@ -178,19 +178,19 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') li.customize-menu menu.pets-menu(label=env.t('eggs')) div(ng-repeat='egg in Content.eggs', ng-if='egg.canBuy') - button.customize-option(popover='{{::egg.notes()}}', popover-title!=env.t("egg", {eggType: "{{::egg.text()}}"}), popover-trigger='mouseenter', popover-placement='top', ng-click='purchase("eggs", egg)', class='Pet_Egg_{{::egg.key}}') + button.customize-option(popover='{{::egg.notes()}}', popover-title!=env.t("egg", {eggType: "{{::egg.text()}}"}), popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='purchase("eggs", egg)', class='Pet_Egg_{{::egg.key}}') p | {{::egg.value}}  span.Pet_Currency_Gem1x.inline-gems //- buyable quest eggs each egg,quest in {gryphon:'Gryphon',hedgehog:'Hedgehog',ghost_stag:'Deer',rat:'Rat',octopus:'Octopus',dilatory_derby:'Seahorse',harpy:'Parrot',rooster:'Rooster',spider:'Spider',owl:'Owl',penguin:'Penguin'} div(ng-show='user.achievements.quests.#{quest} > 1') - button.customize-option(popover='{{::Content.eggs.#{egg}.notes()}}', popover-title!=env.t("egg", {eggType: "{{::Content.eggs.#{egg}.text()}}"}), popover-trigger='mouseenter', popover-placement='top', ng-click='purchase("eggs", Content.eggs.#{egg})', class='Pet_Egg_#{egg}') + button.customize-option(popover='{{::Content.eggs.#{egg}.notes()}}', popover-title!=env.t("egg", {eggType: "{{::Content.eggs.#{egg}.text()}}"}), popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='purchase("eggs", Content.eggs.#{egg})', class='Pet_Egg_#{egg}') p | {{::Content.eggs.#{egg}.value}}  span.Pet_Currency_Gem1x.inline-gems div(ng-show='(user.achievements.quests.trex + user.achievements.quests.trex_undead) > 1') - button.customize-option(popover='{{::Content.eggs.TRex.notes()}}', popover-title!=env.t("egg", {eggType: "{{Content.eggs.TRex.text()}}"}), popover-trigger='mouseenter', popover-placement='top', ng-click='purchase("eggs", Content.eggs.TRex)', class='Pet_Egg_TRex') + button.customize-option(popover='{{::Content.eggs.TRex.notes()}}', popover-title!=env.t("egg", {eggType: "{{Content.eggs.TRex.text()}}"}), popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='purchase("eggs", Content.eggs.TRex)', class='Pet_Egg_TRex') p | {{::Content.eggs.TRex.value}}  span.Pet_Currency_Gem1x.inline-gems @@ -198,7 +198,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') li.customize-menu menu.pets-menu(label=env.t('hatchingPotions')) div(ng-repeat='pot in Content.hatchingPotions') - button.customize-option(popover='{{::pot.notes()}}', popover-title!=env.t("potion", {potionType: "{{::pot.text()}}"}), popover-trigger='mouseenter', popover-placement='top', ng-click='purchase("hatchingPotions", pot)', class='Pet_HatchingPotion_{{::pot.key}}') + button.customize-option(popover='{{::pot.notes()}}', popover-title!=env.t("potion", {potionType: "{{::pot.text()}}"}), popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='purchase("hatchingPotions", pot)', class='Pet_HatchingPotion_{{::pot.key}}') p | {{::pot.value}}  span.Pet_Currency_Gem1x.inline-gems @@ -206,7 +206,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') li.customize-menu menu.pets-menu(label=env.t('food')) div(ng-repeat='food in Content.food', ng-if='food.canBuy') - button.customize-option(popover='{{::food.notes()}}', popover-title='{{::food.text()}}', popover-trigger='mouseenter', popover-placement='top', ng-click='purchase("food", food)', class='Pet_Food_{{::food.key}}') + button.customize-option(popover='{{::food.notes()}}', popover-title='{{::food.text()}}', popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='purchase("food", food)', class='Pet_Food_{{::food.key}}') p | {{::food.value}}  span.Pet_Currency_Gem1x.inline-gems @@ -215,7 +215,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') menu.pets-menu(label=env.t('quests')) p.muted!=env.t('scrollsText1') + ' ' + env.t('scrollsText2') + '' div(ng-repeat='quest in Content.quests', ng-if='quest.canBuy') - button.customize-option(popover="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : quest.notes() | htmlDecode}}", popover-title='{{::quest.text()}}', popover-trigger='mouseenter', popover-placement='top', ng-click='buyQuest(quest.key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"') + button.customize-option(data-popover-html="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : questPopover(quest) | markdown}}", popover-title='{{::quest.text()}}', popover-append-to-body="true", popover-trigger='mouseenter', ng-click='buyQuest(quest.key)', ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"') p | {{::quest.value}}  span.Pet_Currency_Gem1x.inline-gems @@ -223,22 +223,22 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html') li.customize-menu menu.pets-menu(label=env.t('special')) div - button.customize-option(popover=env.t('fortifyPop'), popover-title=env.t('fortifyName'), popover-trigger='mouseenter', popover-placement='top', ng-click='openModal("reroll")', class='inventory_special_fortify') + button.customize-option(popover=env.t('fortifyPop'), popover-title=env.t('fortifyName'), popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='openModal("reroll")', class='inventory_special_fortify') p | 4  span.Pet_Currency_Gem1x.inline-gems div(ng-show='user.flags.rebirthEnabled') - button.customize-option(popover=env.t('rebirthPop'), popover-title=env.t('rebirthName'), popover-trigger='mouseenter', popover-placement='top', ng-click='openModal("rebirth")', class='rebirth_orb') + button.customize-option(popover=env.t('rebirthPop'), popover-title=env.t('rebirthName'), popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='openModal("rebirth")', class='rebirth_orb') p(ng-show='user.stats.lvl < 100') | 8  span.Pet_Currency_Gem1x.inline-gems div(ng-show='petCount >= 90 || mountCount >= 90') - button.customize-option(popover=env.t('petKeyPop'), popover-title=env.t('petKeyName'), popover-trigger='mouseenter', popover-placement='top', ng-click='openModal("pet-key", {size:"lg"})', class='pet_key') + button.customize-option(popover=env.t('petKeyPop'), popover-title=env.t('petKeyName'), popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='openModal("pet-key", {size:"lg"})', class='pet_key') p | 4  span.Pet_Currency_Gem1x.inline-gems div(ng-if='user.purchased.plan.customerId', ng-class='::{transparent:(Shared.planGemLimits.convCap + User.user.purchased.plan.consecutive.gemCapExtra - User.user.purchased.plan.gemsBought) < 1}') - button.customize-option(popover=env.t('subGemPop'), popover-title=env.t('subGemName'), popover-trigger='mouseenter', popover-placement='top',ng-click='user.ops.purchase({params:{type:"gems",key:"gem"}})') + button.customize-option(popover=env.t('subGemPop'), popover-title=env.t('subGemName'), popover-trigger='mouseenter', popover-placement='top', popover-append-to-body='true', ng-click='user.ops.purchase({params:{type:"gems",key:"gem"}})') span.Pet_Currency_Gem.inline-gems .badge.badge-success.stack-count {{Shared.planGemLimits.convCap + User.user.purchased.plan.consecutive.gemCapExtra - User.user.purchased.plan.gemsBought}} p diff --git a/views/shared/modals/quests.jade b/views/shared/modals/quests.jade index 6ccf0dd06f..d0ec6ae203 100644 --- a/views/shared/modals/quests.jade +++ b/views/shared/modals/quests.jade @@ -5,7 +5,7 @@ script(type='text/ng-template', id='modals/questCompleted.html') h4 "{{::Content.quests[user.party.quest.completed].text()}}" =env.t('completed') .modal-body - div(ng-class='::Content.quests[user.party.quest.completed].completion() ? "pull-right-sm" : ""', class='col-centered quest_{{user.party.quest.completed}}') + .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 @@ -13,11 +13,25 @@ script(type='text/ng-template', id='modals/questCompleted.html') script(type='text/ng-template', id='modals/showQuest.html') .modal-header - h4 {{selectedQuest.text()}} + h4 {{::selectedQuest.text()}} .modal-body - .pull-right(class='quest_{{selectedQuest.key}}') - div(ng-bind-html='selectedQuest.notes()') - quest-rewards(key='{{selectedQuest.key}}') + .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}}') hr .npc_ian.pull-left p=env.t('questSend') @@ -28,11 +42,24 @@ script(type='text/ng-template', id='modals/showQuest.html') script(type='text/ng-template', id='modals/buyQuest.html') .modal-header - h4 {{selectedQuest.text()}} + h4 {{::selectedQuest.text()}} .modal-body - .pull-right(class='quest_{{selectedQuest.key}}') - div(ng-bind-html='selectedQuest.notes()') - quest-rewards(key='{{selectedQuest.key}}') + .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}}') .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') @@ -40,10 +67,24 @@ script(type='text/ng-template', id='modals/buyQuest.html') script(type='text/ng-template', id='modals/questInvitation.html') .modal-header h4=env.t('questInvitation') - | {{Content.quests[party.quest.key].text()}} + | {{::Content.quests[party.quest.key].text()}} .modal-body - div(ng-bind-html='Content.quests[party.quest.key].notes()') - quest-rewards(key='{{party.quest.key}}') + .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}}') .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') diff --git a/views/shared/tasks/task.jade b/views/shared/tasks/task.jade index 988402a6be..b50c04460c 100644 --- a/views/shared/tasks/task.jade +++ b/views/shared/tasks/task.jade @@ -1,4 +1,4 @@ -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}}", data-popover-placement="top", ng-show='shouldShow(task, list, user.preferences)') +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