Merge branch 'develop' into api-v3
@@ -130,12 +130,6 @@
|
|||||||
width: 100px;
|
width: 100px;
|
||||||
height: 137px;
|
height: 137px;
|
||||||
}
|
}
|
||||||
.customize-option.promo_haunted_hair {
|
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
|
||||||
background-position: -1372px -209px;
|
|
||||||
width: 60px;
|
|
||||||
height: 60px;
|
|
||||||
}
|
|
||||||
.promo_item_notif {
|
.promo_item_notif {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -1190px -91px;
|
background-position: -1190px -91px;
|
||||||
@@ -334,12 +328,6 @@
|
|||||||
width: 330px;
|
width: 330px;
|
||||||
height: 83px;
|
height: 83px;
|
||||||
}
|
}
|
||||||
.customize-option.promo_shimmer_hair {
|
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
|
||||||
background-position: -356px -998px;
|
|
||||||
width: 60px;
|
|
||||||
height: 60px;
|
|
||||||
}
|
|
||||||
.promo_splashyskins {
|
.promo_splashyskins {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: -1190px -823px;
|
background-position: -1190px -823px;
|
||||||
@@ -412,12 +400,6 @@
|
|||||||
width: 152px;
|
width: 152px;
|
||||||
height: 75px;
|
height: 75px;
|
||||||
}
|
}
|
||||||
.customize-option.promo_winteryhair {
|
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
|
||||||
background-position: -1215px -1021px;
|
|
||||||
width: 60px;
|
|
||||||
height: 60px;
|
|
||||||
}
|
|
||||||
.avatar_variety {
|
.avatar_variety {
|
||||||
background-image: url(spritesmith-largeSprites-0.png);
|
background-image: url(spritesmith-largeSprites-0.png);
|
||||||
background-position: 0px -525px;
|
background-position: 0px -525px;
|
||||||
|
|||||||
5948
common/dist/sprites/spritesmith-main-1.css
vendored
BIN
common/dist/sprites/spritesmith-main-1.png
vendored
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 60 KiB |
6596
common/dist/sprites/spritesmith-main-2.css
vendored
BIN
common/dist/sprites/spritesmith-main-2.png
vendored
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
3452
common/dist/sprites/spritesmith-main-3.css
vendored
BIN
common/dist/sprites/spritesmith-main-3.png
vendored
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 137 KiB |
622
common/dist/sprites/spritesmith-main-4.css
vendored
BIN
common/dist/sprites/spritesmith-main-4.png
vendored
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 130 KiB |
752
common/dist/sprites/spritesmith-main-5.css
vendored
BIN
common/dist/sprites/spritesmith-main-5.png
vendored
|
Before Width: | Height: | Size: 320 KiB After Width: | Height: | Size: 321 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
BIN
common/img/sprites/spritesmith/customize/chairs/chair_black.png
Normal file
|
After Width: | Height: | Size: 891 B |
@@ -34,6 +34,7 @@
|
|||||||
"beard": "Beard",
|
"beard": "Beard",
|
||||||
"mustache": "Mustache",
|
"mustache": "Mustache",
|
||||||
"flower": "Flower",
|
"flower": "Flower",
|
||||||
|
"wheelchair": "Wheelchair",
|
||||||
"basicSkins": "Basic Skins",
|
"basicSkins": "Basic Skins",
|
||||||
"rainbowSkins": "Rainbow Skins",
|
"rainbowSkins": "Rainbow Skins",
|
||||||
"pastelSkins": "Pastel Skins",
|
"pastelSkins": "Pastel Skins",
|
||||||
|
|||||||
6
common/script/content/appearance/chair.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import prefill from './prefill.js';
|
||||||
|
|
||||||
|
export default prefill({
|
||||||
|
none: {},
|
||||||
|
black: {},
|
||||||
|
});
|
||||||
@@ -3,6 +3,7 @@ import shirts from './shirt.js';
|
|||||||
import skins from './skin.js';
|
import skins from './skin.js';
|
||||||
import sizes from './size.js';
|
import sizes from './size.js';
|
||||||
import backgrounds from './backgrounds.js';
|
import backgrounds from './backgrounds.js';
|
||||||
|
import chairs from './chair.js';
|
||||||
import {forOwn, clone} from 'lodash';
|
import {forOwn, clone} from 'lodash';
|
||||||
|
|
||||||
let reorderedBgs = {};
|
let reorderedBgs = {};
|
||||||
@@ -25,6 +26,7 @@ let appearances = {
|
|||||||
shirt: shirts,
|
shirt: shirts,
|
||||||
size: sizes,
|
size: sizes,
|
||||||
skin: skins,
|
skin: skins,
|
||||||
|
chair: chairs,
|
||||||
background: reorderedBgs,
|
background: reorderedBgs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ module.exports = function(user, options) {
|
|||||||
}
|
}
|
||||||
user.auth.timestamps.loggedin = new Date();
|
user.auth.timestamps.loggedin = new Date();
|
||||||
user.lastCron = now;
|
user.lastCron = now;
|
||||||
|
if (_.isFinite(+user.preferences.timezoneOffset)) {
|
||||||
|
user.preferences.timezoneOffsetAtLastCron = user.preferences.timezoneOffset;
|
||||||
|
}
|
||||||
if (user.items.lastDrop.count > 0) {
|
if (user.items.lastDrop.count > 0) {
|
||||||
user.items.lastDrop.count = 0;
|
user.items.lastDrop.count = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ function calculateImgDimensions(img, addPadding) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function checkForSpecialTreatment(name) {
|
function checkForSpecialTreatment(name) {
|
||||||
let regex = /hair|skin|beard|mustach|shirt|flower|^headAccessory_special_\w+Ears/;
|
let regex = /^hair|skin|beard|mustach|shirt|flower|^headAccessory_special_\w+Ears/;
|
||||||
return name.match(regex) || name === 'head_0';
|
return name.match(regex) || name === 'head_0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,6 @@ describe('shared.ops.buy', () => {
|
|||||||
|
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ let beforeAfter = (options = {}) => {
|
|||||||
before.preferences.dayStart = after.preferences.dayStart = options.dayStart;
|
before.preferences.dayStart = after.preferences.dayStart = options.dayStart;
|
||||||
}
|
}
|
||||||
before.preferences.timezoneOffset = after.preferences.timezoneOffset = options.timezoneOffset || moment().zone();
|
before.preferences.timezoneOffset = after.preferences.timezoneOffset = options.timezoneOffset || moment().zone();
|
||||||
|
before.preferences.timezoneOffsetAtLastCron = after.preferences.timezoneOffsetAtLastCron = before.preferences.timezoneOffset;
|
||||||
if (options.limitOne) {
|
if (options.limitOne) {
|
||||||
before[`${options.limitOne}s`] = [before[`${options.limitOne}s`][0]];
|
before[`${options.limitOne}s`] = [before[`${options.limitOne}s`][0]];
|
||||||
after[`${options.limitOne}s`] = [after[`${options.limitOne}s`][0]];
|
after[`${options.limitOne}s`] = [after[`${options.limitOne}s`][0]];
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ describe('Challenges Controller', function() {
|
|||||||
expect(scope.filterChallenges(notOwnNotMem)).to.eql(true);
|
expect(scope.filterChallenges(notOwnNotMem)).to.eql(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('it filters challenges to a single group when group id filter is set', inject(function($controller) {
|
it('filters challenges to a single group when group id filter is set', inject(function($controller) {
|
||||||
scope.search = { };
|
scope.search = { };
|
||||||
scope.groups = {
|
scope.groups = {
|
||||||
0: specHelper.newGroup({_id: 'group-one'}),
|
0: specHelper.newGroup({_id: 'group-one'}),
|
||||||
|
|||||||
@@ -308,6 +308,7 @@ let requiresPurchase = {
|
|||||||
'preferences.shirt': 'shirt',
|
'preferences.shirt': 'shirt',
|
||||||
'preferences.size': 'size',
|
'preferences.size': 'size',
|
||||||
'preferences.skin': 'skin',
|
'preferences.skin': 'skin',
|
||||||
|
'preferences.chair': 'chair',
|
||||||
'preferences.hair.bangs': 'hair.bangs',
|
'preferences.hair.bangs': 'hair.bangs',
|
||||||
'preferences.hair.base': 'hair.base',
|
'preferences.hair.base': 'hair.base',
|
||||||
'preferences.hair.beard': 'hair.beard',
|
'preferences.hair.beard': 'hair.beard',
|
||||||
|
|||||||
@@ -400,6 +400,8 @@ export let schema = new Schema({
|
|||||||
shirt: {type: String, default: 'blue'},
|
shirt: {type: String, default: 'blue'},
|
||||||
timezoneOffset: Number,
|
timezoneOffset: Number,
|
||||||
sound: {type: String, default: 'off', enum: ['off', 'danielTheBard', 'gokulTheme', 'luneFoxTheme', 'wattsTheme']},
|
sound: {type: String, default: 'off', enum: ['off', 'danielTheBard', 'gokulTheme', 'luneFoxTheme', 'wattsTheme']},
|
||||||
|
chair: {type: String, default: 'none'},
|
||||||
|
timezoneOffsetAtLastCron: Number,
|
||||||
language: String,
|
language: String,
|
||||||
automaticAllocation: Boolean,
|
automaticAllocation: Boolean,
|
||||||
allocationMode: {type: String, enum: ['flat', 'classbased', 'taskbased'], default: 'flat'},
|
allocationMode: {type: String, enum: ['flat', 'classbased', 'taskbased'], default: 'flat'},
|
||||||
|
|||||||
@@ -68,6 +68,13 @@ mixin customizeProfile(mobile)
|
|||||||
popover-placement='right', popover-append-to-body='true',
|
popover-placement='right', popover-append-to-body='true',
|
||||||
ng-click='user.items.gear.owned[item.key] ? equip(item.key) : purchase(item.type,item)')
|
ng-click='user.items.gear.owned[item.key] ? equip(item.key) : purchase(item.type,item)')
|
||||||
|
|
||||||
|
// Wheelchair
|
||||||
|
li.customize-menu
|
||||||
|
menu(label=env.t('wheelchair'))
|
||||||
|
button.customize-option(ng-repeat='item in ::["black"]', class='button_chair_{{::item}}',
|
||||||
|
ng-class="{selectableInventory: user.preferences.chair == item}",
|
||||||
|
ng-click='user.preferences.chair != item ? set({"preferences.chair":item}) : set({"preferences.chair":"none"})')
|
||||||
|
|
||||||
.col-md-4
|
.col-md-4
|
||||||
h3(class=mobile?'item item-divider':'')=env.t('bodyHead')
|
h3(class=mobile?'item item-divider':'')=env.t('bodyHead')
|
||||||
menu(type='list')
|
menu(type='list')
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ mixin costumeSetting(type, options)
|
|||||||
|
|
||||||
mixin generatedAvatar(options)
|
mixin generatedAvatar(options)
|
||||||
- options = options || {}
|
- options = options || {}
|
||||||
|
span(class='chair_{{profile.preferences.chair}}')
|
||||||
+costumeSetting('back')
|
+costumeSetting('back')
|
||||||
if options.sleep
|
if options.sleep
|
||||||
span(ng-class="'skin_' + profile.preferences.skin + '_sleep'")
|
span(ng-class="'skin_' + profile.preferences.skin + '_sleep'")
|
||||||
|
|||||||
@@ -1,5 +1,29 @@
|
|||||||
h2 3/24/2016 - MARCH SUBSCRIBER ITEMS, SPRING AVATAR CUSTOMIZATIONS, ANDROID UPDATE, AND SPRING PLOT-LINE CONTINUES!
|
h2 3/30/2016 - LAST CHANCE FOR MARCH SUBSCRIBER ITEMS! ALSO, EQUIPMENT SORTING AND WHEELCHAIRS FOR AVATARS
|
||||||
hr
|
hr
|
||||||
|
tr
|
||||||
|
td
|
||||||
|
.promo_mystery_201603.pull-right
|
||||||
|
h3 Last Chance for March Subscriber Items
|
||||||
|
p Reminder: this is the final day to <a href='/#/options/settings/subscription'>subscribe</a> and receive the Lucky Set! If you want the Lucky Suit or the Lucky Hat, now's the time! Thanks so much for your support -- we really do appreciate it.
|
||||||
|
p.small.muted by Lemoness
|
||||||
|
tr
|
||||||
|
td
|
||||||
|
h3 Equipment Sorting
|
||||||
|
p Now you can sort your <a href='/#/options/inventory/equipment'>equipment</a> on the website by set or by stat, so that you can choose the best pieces to wear. Enjoy the added organization!
|
||||||
|
p.small.muted by qrry and Blade
|
||||||
|
tr
|
||||||
|
td
|
||||||
|
.chair_black.pull-right
|
||||||
|
h3 Wheelchairs for Avatars
|
||||||
|
p There is a new free <a href='/#/options/profile/avatar'>avatar customization</a> option on the website: a wheelchair! We hope that our wheelchair-using Habiticans will appreciate this avatar option.
|
||||||
|
p.small.muted by Balduranne, Sinble, and Blade
|
||||||
|
|
||||||
|
if menuItem !== 'oldNews'
|
||||||
|
hr
|
||||||
|
a(href='/static/old-news', target='_blank') Read older news
|
||||||
|
|
||||||
|
mixin oldNews
|
||||||
|
h2 3/24/2016 - MARCH SUBSCRIBER ITEMS, SPRING AVATAR CUSTOMIZATIONS, ANDROID UPDATE, AND SPRING PLOT-LINE CONTINUES!
|
||||||
tr
|
tr
|
||||||
td
|
td
|
||||||
.promo_mystery_201603.pull-right
|
.promo_mystery_201603.pull-right
|
||||||
@@ -27,12 +51,6 @@ h2 3/24/2016 - MARCH SUBSCRIBER ITEMS, SPRING AVATAR CUSTOMIZATIONS, ANDROID UPD
|
|||||||
br
|
br
|
||||||
p Well, it probably won’t hurt to keep celebrating until April First. It’s only one day, after all...
|
p Well, it probably won’t hurt to keep celebrating until April First. It’s only one day, after all...
|
||||||
p.small.muted by Lemoness
|
p.small.muted by Lemoness
|
||||||
|
|
||||||
if menuItem !== 'oldNews'
|
|
||||||
hr
|
|
||||||
a(href='/static/old-news', target='_blank') Read older news
|
|
||||||
|
|
||||||
mixin oldNews
|
|
||||||
h2 3/18/2016 - SPRING FLING BEGINS! LIMITED EDITION EQUIPMENT, SEASONAL SHOP OPENS, AND SPRING MYSTERY PLOT CONTINUES
|
h2 3/18/2016 - SPRING FLING BEGINS! LIMITED EDITION EQUIPMENT, SEASONAL SHOP OPENS, AND SPRING MYSTERY PLOT CONTINUES
|
||||||
tr
|
tr
|
||||||
td
|
td
|
||||||
|
|||||||