From a27c5ccdd23c11841c6565ad6166a937dd0c18fe Mon Sep 17 00:00:00 2001 From: benmcmahon100 Date: Tue, 12 Apr 2016 01:02:17 +0100 Subject: [PATCH] Ground work for the bill board announcement feature --- client/main.js | 34 ++++++++++++++++++++++++++++++++ common/models/BillBoard.json | 34 ++++++++++++++++++++++++++++++++ server/boot/randomAPIs.js | 21 ++++++++++++++++++++ server/model-config.json | 4 ++++ server/views/partials/flash.jade | 6 ++++++ 5 files changed, 99 insertions(+) create mode 100644 common/models/BillBoard.json diff --git a/client/main.js b/client/main.js index b7ed7c9bd09..7a969d8c950 100644 --- a/client/main.js +++ b/client/main.js @@ -612,4 +612,38 @@ $(document).ready(function() { // Repo window.location = 'https://github.com/freecodecamp/freecodecamp/'; }); + + function getCurrentBillBoard(cb) { + $.ajax({ + url: '/billboard', + method: 'GET', + dataType: 'JSON' + }).done((resp) => { + cb(resp); + }); + } + + function handleNewBillBoard(message) { + const seen = typeof localStorage.getItem('billboardSeen') !== "undefined" ? localStorage.getItem('billboardSeen') : 'false'; + let old = typeof localStorage.getItem('billboard') !== "undefined" ? localStorage.getItem('billboard') : 'false'; + if(seen !== 'true') { + old = null; + } + if(message.data !== old) { + if(!message.err) { + $('#billContent').text(message.data); + localStorage.setItem('billboard', message.data) + } else { + console.error(message.err); + } + } + } + + getCurrentBillBoard(handleNewBillBoard); + + $('#dismissBill').on('click', () => { + console.log("test"); + localStorage.setItem('billboardSeen', 'true'); + }); + }); diff --git a/common/models/BillBoard.json b/common/models/BillBoard.json new file mode 100644 index 00000000000..6647dab585b --- /dev/null +++ b/common/models/BillBoard.json @@ -0,0 +1,34 @@ +{ + "name": "BillBoard", + "base": "PersistedModel", + "idInjection": true, + "trackChanges": false, + "properties": { + "message": { + "type": "string" + }, + "active": { + "type": "boolean", + "default": false + } + }, + "validations": [], + "relations": { + + }, + "acls": [ + { + "accessType": "*", + "principalType": "ROLE", + "principalId": "$everyone", + "permission": "DENY" + }, + { + "accessType": "READ", + "principalType": "ROLE", + "principalId": "$everyone", + "permission": "ALLOW" + } + ], + "methods": [] +} diff --git a/server/boot/randomAPIs.js b/server/boot/randomAPIs.js index 3fd3f953bd2..66c44d13315 100644 --- a/server/boot/randomAPIs.js +++ b/server/boot/randomAPIs.js @@ -7,6 +7,7 @@ import secrets from '../../config/secrets'; module.exports = function(app) { const router = app.loopback.Router(); const User = app.models.User; + const BillBoard = app.models.BillBoard; router.get('/api/github', githubCalls); router.get('/api/blogger', bloggerCalls); router.get('/api/trello', trelloCalls); @@ -38,6 +39,7 @@ module.exports = function(app) { '/the-fastest-web-page-on-the-internet', theFastestWebPageOnTheInternet ); + router.get('/billBoard', billBoard); app.use(router); @@ -82,6 +84,25 @@ module.exports = function(app) { }); } + function billBoard(req, res) { + if(req.user && typeof req.user.currentChallenge.challengeId !== "undefined"){ + BillBoard.findOne({}, function(err, data){ + if(err){ + res.send({err: {type: "Error", message: "Database Error"}, data: null}); + } else { + if (data.active) { + res.send({err: null, data: data.message}); + } else { + res.send({err: {type: "warning", message: "Bill Board is not active"}, data: null}); + } + } + }); + } + else { + res.send({err: {type: "warning", message: "User Not Signed In"}, data: null}); + } + } + function theFastestWebPageOnTheInternet(req, res) { res.render('resources/the-fastest-web-page-on-the-internet', { title: 'This is the fastest web page on the internet' diff --git a/server/model-config.json b/server/model-config.json index 1b9d552ab96..30e527c45da 100644 --- a/server/model-config.json +++ b/server/model-config.json @@ -66,5 +66,9 @@ "userIdentity": { "dataSource": "db", "public": true + }, + "BillBoard": { + "dataSource": "db", + "public": true } } diff --git a/server/views/partials/flash.jade b/server/views/partials/flash.jade index e76ab6edf4c..2888e97d6cf 100644 --- a/server/views/partials/flash.jade +++ b/server/views/partials/flash.jade @@ -18,3 +18,9 @@ span.ion-close-circled for success in messages.success div!= success.msg +.row.flashMessage + .col-xs-12 + .alert.alert-success.fade.in + button.close(type='button', data-dismiss='alert') + span.ion-close-circled#dismissBill + #billContent \ No newline at end of file