Remove localstorage and add notifications (#7588)

* move remaining files frm /common/script/public to website/public

* remove localstorage

* add back noscript template and put all javascript in the footer

* fixes client side tests

* remove double quotes where possible

* simplify jade code and add tests for buildManifest

* loading page with logo and spinner

* better loading screen in landscape mode

* icon on top of text logo

* wip: user.notifications

* notifications: simpler and working code

* finish implementing notifications

* correct loading screen css and re-inline images

* add tests for user notifications

* split User model in multiple files

* remove old comment about missing .catch()

* correctly setup hooks and methods for User model. Cleanup localstorage

* include UserNotificationsService in static page js and split loading-screen css in its own file

* add cron notification and misc fixes

* remove console.log

* fix tests

* fix multiple notifications
This commit is contained in:
Matteo Pagliazzi
2016-06-07 16:14:19 +02:00
parent e0aff79ee4
commit f7be7205e7
49 changed files with 915 additions and 436 deletions

View File

@@ -39,7 +39,7 @@ export function getBuildUrl (url) {
return `/${buildFiles[url] || url}`;
}
export function getManifestFiles (page) {
export function getManifestFiles (page, type) {
let files = manifestFiles[page];
if (!files) throw new Error(`Page "${page}" not found!`);
@@ -47,15 +47,25 @@ export function getManifestFiles (page) {
let htmlCode = '';
if (IS_PROD) {
htmlCode += `<link rel="stylesheet" type="text/css" href="${getBuildUrl(page + '.css')}">`; // eslint-disable-line prefer-template
htmlCode += `<script type="text/javascript" src="${getBuildUrl(page + '.js')}"></script>`; // eslint-disable-line prefer-template
if (type !== 'js') {
htmlCode += `<link rel="stylesheet" type="text/css" href="${getBuildUrl(page + '.css')}">`; // eslint-disable-line prefer-template
}
if (type !== 'css') {
htmlCode += `<script type="text/javascript" src="${getBuildUrl(page + '.js')}"></script>`; // eslint-disable-line prefer-template
}
} else {
files.css.forEach((file) => {
htmlCode += `<link rel="stylesheet" type="text/css" href="${getBuildUrl(file)}">`;
});
files.js.forEach((file) => {
htmlCode += `<script type="text/javascript" src="${getBuildUrl(file)}"></script>`;
});
if (type !== 'js') {
files.css.forEach((file) => {
htmlCode += `<link rel="stylesheet" type="text/css" href="${getBuildUrl(file)}">`;
});
}
if (type !== 'css') {
files.js.forEach((file) => {
htmlCode += `<script type="text/javascript" src="${getBuildUrl(file)}"></script>`;
});
}
}
return htmlCode;

View File

@@ -111,6 +111,9 @@ function performSleepTasks (user, tasksByType, now) {
export function cron (options = {}) {
let {user, tasksByType, analytics, now = new Date(), daysMissed, timezoneOffsetFromUserPrefs} = options;
// Record pre-cron values of HP and MP to show notifications later
let beforeCronStats = _.pick(user.stats, ['hp', 'mp']);
user.preferences.timezoneOffsetAtLastCron = timezoneOffsetFromUserPrefs;
// User is only allowed a certain number of drops a day. This resets the count.
if (user.items.lastDrop.count > 0) user.items.lastDrop.count = 0;
@@ -279,6 +282,25 @@ export function cron (options = {}) {
let _progress = _.cloneDeep(progress);
_.merge(progress, {down: 0, up: 0, collectedItems: 0});
// Send notification for changes in HP and MP
// First remove a possible previous cron notification
// we don't want to flood the users with many cron notifications at once
let oldCronNotif = user.notifications.toObject().find((notif, index) => {
if (notif.type === 'CRON') {
user.notifications.splice(index, 1);
return true;
} else {
return false;
}
});
user.addNotification('CRON', {
hp: user.stats.hp - beforeCronStats.hp - (oldCronNotif ? oldCronNotif.data.hp : 0),
mp: user.stats.mp - beforeCronStats.mp - (oldCronNotif ? oldCronNotif.data.mp : 0),
});
// TODO: Clean PMs - keep 200 for subscribers and 50 for free users. Should also be done while resting in the inn
// let numberOfPMs = Object.keys(user.inbox.messages).length;
// if (numberOfPMs > maxPMs) {