Merge branch 'develop' of github.com:HabitRPG/habitrpg into mountmaster
|
|
@ -12,6 +12,8 @@
|
|||
margin-right:0px
|
||||
.npc_bailey
|
||||
float:left
|
||||
.npc_bailey_broken
|
||||
float:left
|
||||
.npc_bailey_head
|
||||
position: absolute
|
||||
top: -17px
|
||||
|
|
@ -22,6 +24,10 @@
|
|||
float: left
|
||||
margin-right: 5px
|
||||
margin-bottom: 5px
|
||||
.npc_justin_broken.float-left
|
||||
float: left
|
||||
margin-right: 5px
|
||||
margin-bottom: 5px
|
||||
|
||||
.static-popover
|
||||
z-index 0
|
||||
|
|
|
|||
|
|
@ -74,7 +74,11 @@ angular.module('guideServices', []).
|
|||
}
|
||||
];
|
||||
_.each(tourSteps, function(step){
|
||||
step.content = "<div><div class='npc_justin float-left'></div>" + step.content + "</div>"; // add Justin NPC img
|
||||
if (env.worldDmg.guide) {
|
||||
step.content = "<div><div class='npc_justin_broken float-left'></div>" + step.content + "</div>";
|
||||
} else {
|
||||
step.content = "<div><div class='npc_justin float-left'></div>" + step.content + "</div>";
|
||||
}
|
||||
});
|
||||
$('.main-herobox').popover('destroy');
|
||||
var tour = new Tour({
|
||||
|
|
@ -104,7 +108,11 @@ angular.module('guideServices', []).
|
|||
if (!placement) placement = 'bottom';
|
||||
$(selector).popover('destroy');
|
||||
var button = "<button class='btn btn-sm btn-default' onClick=\"$('" + selector + "').popover('hide');return false;\">" + window.env.t('close') + "</button>";
|
||||
html = "<div><div class='npc_justin float-left'></div>" + html + '<br/>' + button + '</div>';
|
||||
if (env.worldDmg.guide) {
|
||||
html = "<div><div class='npc_justin_broken float-left'></div>" + html + '<br/>' + button + '</div>';
|
||||
} else {
|
||||
html = "<div><div class='npc_justin float-left'></div>" + html + '<br/>' + button + '</div>';
|
||||
}
|
||||
$(selector).popover({
|
||||
title: title,
|
||||
placement: placement,
|
||||
|
|
@ -186,7 +194,11 @@ angular.module('guideServices', []).
|
|||
}
|
||||
];
|
||||
_.each(tourSteps, function(step){
|
||||
step.content = "<div><div class='npc_justin float-left'></div>" + step.content + "</div>"; // add Justin NPC img
|
||||
if (env.worldDmg.guide) {
|
||||
step.content = "<div><div class='npc_justin_broken float-left'></div>" + step.content + "</div>";
|
||||
} else {
|
||||
step.content = "<div><div class='npc_justin float-left'></div>" + step.content + "</div>";
|
||||
}
|
||||
});
|
||||
$('.allocate-stats').popover('destroy');
|
||||
var tour = new Tour({
|
||||
|
|
|
|||
BIN
public/presskit/Challenges Sample Screen.png
Executable file
|
After Width: | Height: | Size: 54 KiB |
BIN
public/presskit/Equipment Sample Screen.png
Executable file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/presskit/Guilds Sample Screen.png
Executable file
|
After Width: | Height: | Size: 171 KiB |
BIN
public/presskit/HabitRPGPromoPostCard6.png
Executable file
|
After Width: | Height: | Size: 495 KiB |
BIN
public/presskit/HabitRPGPromoThin.png
Executable file
|
After Width: | Height: | Size: 28 KiB |
BIN
public/presskit/HabitRPGdevices.png
Executable file
|
After Width: | Height: | Size: 197 KiB |
BIN
public/presskit/Laundromancer_by_Arcosine.png
Executable file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
public/presskit/Market Sample Screen.png
Executable file
|
After Width: | Height: | Size: 169 KiB |
BIN
public/presskit/PROMOdevices2.png
Executable file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/presskit/SnackLessMonster_by_Arcosine.png
Executable file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/presskit/habitrpg_pixel.png
Executable file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
public/presskit/presskit.zip
Normal file
BIN
public/presskit/promo mobile inventorySTILL1.png
Executable file
|
After Width: | Height: | Size: 71 KiB |
BIN
public/presskit/promo mobile inventorySTILL2.png
Executable file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/presskit/stag_battle_by_leephon.png
Executable file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/presskit/stagnant_dishes_by_kiwibot.png
Executable file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/presskit/vice_reborn_by_baconsaur.png
Executable file
|
After Width: | Height: | Size: 7.7 KiB |
|
|
@ -256,7 +256,7 @@ GroupSchema.statics.tavernBoss = function(user,progress) {
|
|||
|
||||
var quest = shared.content.quests[tavern.quest.key];
|
||||
if (tavern.quest.progress.hp <= 0) {
|
||||
tavern.sendChat(quest.completion('en'));
|
||||
tavern.sendChat(quest.completionChat('en'));
|
||||
tavern.finishQuest(quest, function(){});
|
||||
tavern.save(cb);
|
||||
module.exports.tavern = undefined;
|
||||
|
|
@ -269,13 +269,15 @@ GroupSchema.statics.tavernBoss = function(user,progress) {
|
|||
if (tavern.quest.progress.rage >= quest.boss.rage.value) {
|
||||
if (!tavern.quest.extra.worldDmg) tavern.quest.extra.worldDmg = {};
|
||||
var wd = tavern.quest.extra.worldDmg;
|
||||
var scene = wd.tavern ? wd.stables ? wd.market ? false : 'market' : 'stables' : 'tavern';
|
||||
// var scene = wd.tavern ? wd.stables ? wd.market ? false : 'market' : 'stables' : 'tavern'; // Dilatory attacks tavern, stables, market
|
||||
var scene = wd.stables ? wd.bailey ? wd.guide ? false : 'guide' : 'bailey' : 'stables'; // Stressbeast attacks stables, Bailey, Justin
|
||||
if (!scene) {
|
||||
tavern.sendChat('`'+quest.boss.name('en')+' tries to unleash '+quest.boss.rage.title('en')+', but is too tired.`');
|
||||
tavern.quest.progress.rage = 0 //quest.boss.rage.value;
|
||||
} else {
|
||||
tavern.sendChat(quest.boss.rage[scene]('en'));
|
||||
tavern.quest.extra.worldDmg[scene] = true;
|
||||
tavern.quest.extra.worldDmg.recent = scene;
|
||||
tavern.markModified('quest.extra.worldDmg');
|
||||
tavern.quest.progress.rage = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ router.get('/', i18n.getUserLanguage, middleware.locals, function(req, res) {
|
|||
|
||||
// -------- Marketing --------
|
||||
|
||||
var pages = ['front', 'privacy', 'terms', 'api', 'features', 'videos', 'contact', 'plans', 'new-stuff', 'community-guidelines', 'old-news'];
|
||||
var pages = ['front', 'privacy', 'terms', 'api', 'features', 'videos', 'contact', 'plans', 'new-stuff', 'community-guidelines', 'old-news', 'press-kit'];
|
||||
|
||||
_.each(pages, function(name){
|
||||
router.get('/static/' + name, i18n.getUserLanguage, middleware.locals, function(req, res) {
|
||||
|
|
|
|||
|
|
@ -7,12 +7,11 @@ utils.setupConfig();
|
|||
var logging = require('./logging');
|
||||
var isProd = nconf.get('NODE_ENV') === 'production';
|
||||
var isDev = nconf.get('NODE_ENV') === 'development';
|
||||
var cores = +nconf.get("CORES");
|
||||
|
||||
if (cluster.isMaster && (isDev || isProd)) {
|
||||
if (cores!==0 && cluster.isMaster && (isDev || isProd)) {
|
||||
// Fork workers. If config.json has CORES=x, use that - otherwise, use all cpus-1 (production)
|
||||
var cpus = require('os').cpus(),
|
||||
cores = +nconf.get("CORES");
|
||||
_.times(cores || cpus.length-1, cluster.fork);
|
||||
_.times(cores || require('os').cpus().length-1, cluster.fork);
|
||||
|
||||
cluster.on('disconnect', function(worker, code, signal) {
|
||||
var w = cluster.fork(); // replace the dead worker
|
||||
|
|
|
|||
|
|
@ -36,7 +36,10 @@ mixin boss(tavern, mobile)
|
|||
|
||||
div(ng-if='group.quest.active==true')
|
||||
div(ng-if='::Content.quests[group.quest.key].boss',ng-init='boss=Content.quests[group.quest.key].boss;progress=group.quest.progress')
|
||||
div(class="quest_{{::group.quest.key}}")
|
||||
if tavern
|
||||
div(class="quest_{{group.quest.key}} quest_{{group.quest.key}}_#{env.worldDmg.recent}")
|
||||
else
|
||||
div(class="quest_{{::group.quest.key}}")
|
||||
//-
|
||||
.progress
|
||||
.bar(style='width: {{Shared.percent(group.quest.hp, Content.quests[group.quest.key].hp)}}%;')
|
||||
|
|
@ -85,8 +88,8 @@ mixin boss(tavern, mobile)
|
|||
// =env.t('questOwnerNotInRunningQuest')
|
||||
// span(ng-if=':: ! group.quest.leader || ! isMemberOfGroup(group.quest.leader,group)')
|
||||
// =env.t('questOwnerNotInRunningQuestParty')
|
||||
|
||||
quest-rewards(key='{{::group.quest.key}}')
|
||||
unless tavern
|
||||
quest-rewards(key='{{::group.quest.key}}')
|
||||
|
||||
div(ng-if='::Content.quests[group.quest.key].boss')
|
||||
.npc_ian.pull-left
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ div.chat-form.guidelines-not-accepted(ng-if='!user.flags.communityGuidelinesAcce
|
|||
|
||||
form.chat-form(ng-if='user.flags.communityGuidelinesAccepted' ng-submit='postChat(group,message.content)')
|
||||
div(ng-controller='AutocompleteCtrl')
|
||||
textarea.form-control(rows=4, ui-keypress='{13:"postChat(group,message.content)"}', ng-model='message.content', updateinterval='250', flag='@', at-user, auto-complete)
|
||||
textarea.form-control(rows=4, ui-keydown='{"meta-enter":"postChat(group,message.content)"}', ui-keypress='{13:"postChat(group,message.content)"}', ng-model='message.content', updateinterval='250', flag='@', at-user, auto-complete)
|
||||
span.user-list(ng-show='!isAtListHidden')
|
||||
ul.list-at-user
|
||||
li(ng-repeat='user in response | filter:query.text | limitTo: 5', ng-click='autoComplete(user)')
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
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')
|
||||
|
|
@ -47,7 +47,7 @@ script(id='modals/achievements/contributor.html', type='text/ng-template')
|
|||
.modal-header
|
||||
h4=env.t('modalContribAchievement')
|
||||
.modal-body
|
||||
.npc_justin.float-left
|
||||
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')
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ 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',ng-model='_message')
|
||||
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')
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ script(type='text/ng-template', id='modals/newStuff.html')
|
|||
| #{env.t('newStuff')} by
|
||||
a(target='_blank', href='https://twitter.com/Mihakuu') Bailey
|
||||
.modal-body.new-stuff-modal.modal-fixed-height
|
||||
.npc_bailey
|
||||
div(class="#{env.worldDmg.bailey ? 'npc_bailey_broken' : 'npc_bailey'}")
|
||||
br
|
||||
br
|
||||
include ../new-stuff
|
||||
|
|
|
|||
|
|
@ -1,24 +1,41 @@
|
|||
h5 JANUARY BACKGROUNDS, TESTING CRON BUG FIX, AND DATE FORMAT ADJUSTMENT!
|
||||
h5 WORLD BOSS BATTLE BEGINS!
|
||||
tr
|
||||
td
|
||||
h5 January Backgrounds
|
||||
p There are three new avatar backgrounds in the <a href='https://habitrpg.com/#/options/profile/backgrounds' target='_blank'>Background Shop</a>! Now your avatar can summit a Frigid Peak, shiver in an Ice Cave, or wander through the Snowy Pines!
|
||||
p.small.muted by Kiwibot, Sunstroke, and Rattify
|
||||
h5 World Boss: The Abominable Stressbeast!
|
||||
.quest_stressbeast.pull-right
|
||||
p A new World Boss has appeared in the <a href='https://habitrpg.com/#/options/groups/tavern' target='_blank'>Tavern</a>! All of the completed Dailies and To-Dos of Habiticans damage the World Boss. Incomplete Dailies fill the Stress Strike Bar. When the Stress Strike bar is full, the World Boss will attack an NPC.
|
||||
p A World Boss will never damage individual players or accounts in any way. Only active accounts who are not resting in the inn will have their incomplete Dailies tallied. Read on for the details!
|
||||
tr
|
||||
td
|
||||
h5 Testing Fix for Cron Bug
|
||||
p Today we will be testing a possible fix for a bug that sometimes causes Dailies to not reset correctly on the following day. It's a big change, so we will be keeping a close watch on the site to make sure that it doesn't break anything. If you experience any problems with day start or Dailies reseting in the next few days, please let us know immediately on <a href='https://github.com/HabitRPG/habitrpg/issues/1057' target='_blank'>GitHub</a>. Thanks!
|
||||
tr
|
||||
td
|
||||
h5 Date Format Adjustment
|
||||
p There's a new option under <a href='https://habitrpg.com/#/options/settings/settings' target='_blank'>Settings</a> that lets you adjust the date format. Now you can list dates as MM/DD/YYYY, DD/MM/YYYY, or YYYY/MM/DD.
|
||||
p.small.muted by Verabird
|
||||
h5 Winter Plot-Line: The Abominable Stressbeast Attacks!
|
||||
p The first thing we hear are the footsteps, slower and more thundering than the stampede. One by one, Habiticans look outside their doors, and words fail us.
|
||||
p We've all seen Stressbeasts before, of course - tiny vicious creatures that attack during difficult times. But this? This towers taller than the buildings, with paws that could crush a dragon with ease. Frost swings from its stinking fur, and as it roars, the icy blast rips the roofs off our houses. A monster of this magnitude has never been mentioned outside of distant legend.
|
||||
p "Beware, Habiticans!" SabreCat cries. "Barricade yourselves indoors - this is the Abominable Stressbeast itself!"
|
||||
p "That thing must be made of centuries of stress!" Kiwibot says, locking the Tavern door tightly and shuttering the windows.
|
||||
p "The Stoïkalm Steppes," Lemoness says, face grim. "All this time, we thought they were placid and untroubled, but they must have been secretly hiding their stress somewhere. Over generations, it grew into this, and now it's broken free and attacked them - and us!"
|
||||
p There's only one way to drive away a Stressbeast, Abominable or otherwise, and that's to attack it with completed Dailies and To-Dos! Let's all band together and fight off this fearsome foe - but be sure not to slack on your tasks, or our undone Dailies may enrage it so much that it lashes out...
|
||||
p.small.muted by Lemoness, Kiwibot, and SabreCat
|
||||
|
||||
hr
|
||||
a(href='/static/old-news', target='_blank') Read older news
|
||||
|
||||
mixin oldNews
|
||||
h5 1/3/2015 - January Mystery Items, Spread the Word Challenge, Winter Plot-Line Continued
|
||||
h5 1/5/2015
|
||||
tr
|
||||
td
|
||||
h5 January Backgrounds
|
||||
p There are three new avatar backgrounds in the <a href='https://habitrpg.com/#/options/profile/backgrounds' target='_blank'>Background Shop</a>! Now your avatar can summit a Frigid Peak, shiver in an Ice Cave, or wander through the Snowy Pines!
|
||||
p.small.muted by Kiwibot, Sunstroke, and Rattify
|
||||
tr
|
||||
td
|
||||
h5 Testing Fix for Cron Bug
|
||||
p Today we will be testing a possible fix for a bug that sometimes causes Dailies to not reset correctly on the following day. It's a big change, so we will be keeping a close watch on the site to make sure that it doesn't break anything. If you experience any problems with day start or Dailies reseting in the next few days, please let us know immediately on <a href='https://github.com/HabitRPG/habitrpg/issues/1057' target='_blank'>GitHub</a>. Thanks!
|
||||
tr
|
||||
td
|
||||
h5 Date Format Adjustment
|
||||
p There's a new option under <a href='https://habitrpg.com/#/options/settings/settings' target='_blank'>Settings</a> that lets you adjust the date format. Now you can list dates as MM/DD/YYYY, DD/MM/YYYY, or YYYY/MM/DD.
|
||||
p.small.muted by Verabird
|
||||
h5 1/3/2015
|
||||
tr
|
||||
td
|
||||
h5 January Mystery Item Set
|
||||
|
|
@ -36,7 +53,7 @@ mixin oldNews
|
|||
p A thundering herd of mammoths charges past, sabertooths roar, and dinosaurs both feathery and scaly slither by at top speed. Habiticans stare open-mouthed, but before anyone can react, the stampede has swept through Habit City and is gone into the distance, leaving only pawprints in the snow, the howling wind, and some trampled New Year's cards.
|
||||
p Habiticans are advised to keep calm and not give in to stress during this confusing and difficult time. We've sent SabreCat after the frightened animals from the Stoïkalm Steppes, and he is working to calm them down so that we can bring them back to the safety of the Stables. We hope to have an explanation for this strangeness soon. In the meantime, keep all of your own pets and mounts indoors.
|
||||
p.small.muted Read the previous installments of the Winter Plot-Line <a href='http://habitrpg.wikia.com/wiki/Winter_Wonderland#Winter_Mystery_Plot' target='_blank'>here</a>!
|
||||
h5 12/31/2014 - New Year's Eve Celebration
|
||||
h5 12/31/2014
|
||||
tr
|
||||
td
|
||||
h5 Party Hats
|
||||
|
|
@ -55,7 +72,7 @@ mixin oldNews
|
|||
.inventory_special_snowball.pull-right
|
||||
p The <a href='https://habitrpg.com/#/options/inventory/seasonalshop' target='_blank'>Seasonal Shop</a> is also stocking Snowballs for gold! Throw them at your friends to have an exciting effect. Anyone hit with a snowball earns the Annoying Friends badge. The results of being hit with a Snowball will last until the end of your day, but you can also reverse them early by buying Salt from the Rewards column. Snowballs are available until January 31st.
|
||||
p.small.muted by Shaner, Lemoness, and SabreCat
|
||||
h5 12/25/2014 - December Subscriber Item Set and Seasonal Shop! Plus, Flagging Posts and Winter Plot-Line Continues
|
||||
h5 12/25/2014
|
||||
tr
|
||||
td
|
||||
h5 December Subscriber Item Set
|
||||
|
|
|
|||
|
|
@ -180,7 +180,6 @@ div(ng-if='::profile.achievements.quests.dilatory')
|
|||
=env.t('achievementDilatoryText')
|
||||
hr
|
||||
|
||||
//- FIXME add these strings to locales
|
||||
div(ng-if='::profile.achievements.costumeContest')
|
||||
.achievement.achievement-costumeContest
|
||||
h5=env.t('costumeContest')
|
||||
|
|
@ -194,3 +193,10 @@ div(ng-if='::profile.achievements.nye')
|
|||
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
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ html(ng-app='habitrpgStatic')
|
|||
a(href='http://blog.habitrpg.com/')=env.t('companyBlog')
|
||||
li(class='#{menuItem=="plans" ? "active" : ""}')
|
||||
a(href='/static/plans')=env.t('groupPlans')
|
||||
li(class='#{menuItem=="pressKit" ? "active" : ""}')
|
||||
a(href='/static/press-kit') Press Kit
|
||||
li(class='#{menuItem=="contact" ? "active" : ""}')
|
||||
a(href='/static/contact')=env.t('contactUs')
|
||||
|
||||
|
|
|
|||
41
views/static/press-kit.jade
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
extends ./layout
|
||||
|
||||
block vars
|
||||
- var layoutEnv = env
|
||||
- var menuItem = 'pressKit'
|
||||
|
||||
block title
|
||||
title Press Kit
|
||||
|
||||
block extraHead
|
||||
style.
|
||||
.press-img {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
block content
|
||||
h2 Press Kit
|
||||
p Thanks for your interest in HabitRPG! The following images can be used for articles or videos about HabitRPG. For more information, please contact Siena Leslie at leslie@habitrpg.com.
|
||||
p Download all image: <a class='btn btn-success' href='/presskit/presskit.zip'>presskit.zip</a>
|
||||
- var imgs = ['habitrpg_pixel', 'HabitRPGdevices', 'Market Sample Screen', 'Challenges Sample Screen', 'Equipment Sample Screen', 'Guilds Sample Screen', 'HabitRPGPromoPostCard6', 'HabitRPGPromoThin', 'Laundromancer_by_Arcosine', 'promo mobile inventorySTILL1', 'promo mobile inventorySTILL2', 'PROMOdevices2', 'SnackLessMonster_by_Arcosine', 'stag_battle_by_leephon', 'stagnant_dishes_by_kiwibot', 'vice_reborn_by_baconsaur']
|
||||
|
||||
//-#carousel.carousel.slide(data-ride='carousel')
|
||||
ol.carousel-indicators
|
||||
each img, i in imgs
|
||||
li(class=i==0?'active':'', data-target='#carousel', data-slide-to=i)
|
||||
.carousel-inner(role='listbox')
|
||||
each img, i in imgs
|
||||
.item(class=i==0?'active':'')
|
||||
img(src="/presskit/#{img}.png")
|
||||
//.carousel-caption=img
|
||||
a.left.carousel-control(href='#carousel', role='button', data-slide='prev')
|
||||
span.glyphicon.glyphicon-chevron-left(aria-hidden='true')
|
||||
span.sr-only Previous
|
||||
a.right.carousel-control(href='#carousel', role='button', data-slide='next')
|
||||
span.glyphicon.glyphicon-chevron-right(aria-hidden='true')
|
||||
span.sr-only Next
|
||||
|
||||
ul.list-unstyled
|
||||
each img in imgs
|
||||
li
|
||||
img.press-img(src="/presskit/#{img}.png")
|
||||