From 02eb6cad6cb848c5a7b5e99f48bafbde5bb04f64 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Thu, 14 Apr 2016 19:49:19 -0700 Subject: [PATCH] Refactor announcement feature --- client/main.js | 27 ++++++++++++ common/models/flyer.json | 34 +++++++++++++++ server/model-config.json | 4 ++ server/views/account/show.jade | 3 +- server/views/challenges/showBonfire.jade | 1 + server/views/challenges/showHTML.jade | 1 + server/views/challenges/showJS.jade | 1 + server/views/challenges/showStep.jade | 1 + server/views/challenges/showVideo.jade | 1 + .../challenges/showZiplineOrBasejump.jade | 1 + server/views/layout.jade | 2 +- server/views/partials/flash.jade | 41 ++++++++++--------- server/views/partials/flyer.jade | 8 ++++ 13 files changed, 103 insertions(+), 22 deletions(-) create mode 100644 common/models/flyer.json create mode 100644 server/views/partials/flyer.jade diff --git a/client/main.js b/client/main.js index b7ed7c9bd0..69f8b67abe 100644 --- a/client/main.js +++ b/client/main.js @@ -612,4 +612,31 @@ $(document).ready(function() { // Repo window.location = 'https://github.com/freecodecamp/freecodecamp/'; }); + + (function getFlyer() { + const flyerKey = '__flyerId__'; + $.ajax({ + url: '/api/flyers/findOne', + method: 'GET', + dataType: 'JSON', + data: { filter: { order: 'id DESC' } } + }) + // log error + .fail(err => console.error(err)) + .done(flyer => { + const lastFlyerId = localStorage.getItem(flyerKey); + if ( + !flyer || + !flyer.isActive || + lastFlyerId === flyer.id + ) { + return; + } + $('#dismiss-bill').on('click', () => { + localStorage.setItem(flyerKey, flyer.id); + }); + $('#bill-content').html(flyer.message); + $('#bill-board').fadeIn(); + }); + }()); }); diff --git a/common/models/flyer.json b/common/models/flyer.json new file mode 100644 index 0000000000..67f3e41a92 --- /dev/null +++ b/common/models/flyer.json @@ -0,0 +1,34 @@ +{ + "name": "flyer", + "base": "PersistedModel", + "idInjection": true, + "trackChanges": false, + "properties": { + "message": { + "type": "string" + }, + "isActive": { + "type": "boolean", + "default": true + } + }, + "validations": [], + "relations": { + + }, + "acls": [ + { + "accessType": "*", + "principalType": "ROLE", + "principalId": "$everyone", + "permission": "DENY" + }, + { + "accessType": "READ", + "principalType": "ROLE", + "principalId": "$everyone", + "permission": "ALLOW" + } + ], + "methods": [] +} diff --git a/server/model-config.json b/server/model-config.json index 1b9d552ab9..60800cf81b 100644 --- a/server/model-config.json +++ b/server/model-config.json @@ -66,5 +66,9 @@ "userIdentity": { "dataSource": "db", "public": true + }, + "flyer": { + "dataSource": "db", + "public": true } } diff --git a/server/views/account/show.jade b/server/views/account/show.jade index df88282365..568fd5ea4d 100644 --- a/server/views/account/show.jade +++ b/server/views/account/show.jade @@ -1,5 +1,6 @@ extends ../layout block content + include ../partials/flyer script(src="/bower_components/cal-heatmap/cal-heatmap.min.js") script. var challengeName = 'Profile View'; @@ -170,4 +171,4 @@ block content if (challenge.solution) a(href='/challenges/' + removeOldTerms(challenge.name) + '?solution=' + encodeURIComponent(encodeFcc(challenge.solution)), target='_blank')= removeOldTerms(challenge.name) else - a(href='/challenges/' + removeOldTerms(challenge.name))= removeOldTerms(challenge.name) \ No newline at end of file + a(href='/challenges/' + removeOldTerms(challenge.name))= removeOldTerms(challenge.name) diff --git a/server/views/challenges/showBonfire.jade b/server/views/challenges/showBonfire.jade index 8ab0684c4a..6bb918d579 100644 --- a/server/views/challenges/showBonfire.jade +++ b/server/views/challenges/showBonfire.jade @@ -4,6 +4,7 @@ block content link(rel='stylesheet', href='/bower_components/CodeMirror/addon/lint/lint.css') link(rel='stylesheet', href='/bower_components/CodeMirror/theme/monokai.css') link(rel='stylesheet', href='/css/ubuntu.css') + include ../partials/flyer .row .col-md-4.col-lg-3 .scroll-locker(id = "scroll-locker") diff --git a/server/views/challenges/showHTML.jade b/server/views/challenges/showHTML.jade index 0d08346825..7835148327 100644 --- a/server/views/challenges/showHTML.jade +++ b/server/views/challenges/showHTML.jade @@ -4,6 +4,7 @@ block content link(rel='stylesheet', href='/bower_components/CodeMirror/addon/lint/lint.css') link(rel='stylesheet', href='/bower_components/CodeMirror/theme/monokai.css') link(rel='stylesheet', href='/css/ubuntu.css') + include ../partials/flyer .row .col-md-3.col-lg-3 .scroll-locker(id = "scroll-locker") diff --git a/server/views/challenges/showJS.jade b/server/views/challenges/showJS.jade index eae63ab02a..3939b29bed 100644 --- a/server/views/challenges/showJS.jade +++ b/server/views/challenges/showJS.jade @@ -4,6 +4,7 @@ block content link(rel='stylesheet', href='/bower_components/CodeMirror/addon/lint/lint.css') link(rel='stylesheet', href='/bower_components/CodeMirror/theme/monokai.css') link(rel='stylesheet', href='/css/ubuntu.css') + include ../partials/flyer .row .col-md-4.col-lg-3 .scroll-locker(id = "scroll-locker") diff --git a/server/views/challenges/showStep.jade b/server/views/challenges/showStep.jade index 1249b842a2..d276c836c8 100644 --- a/server/views/challenges/showStep.jade +++ b/server/views/challenges/showStep.jade @@ -1,5 +1,6 @@ extends ../layout-wide block content + include ../partials/flyer .row .col-md-8.col-md-offset-2 for step, index in description diff --git a/server/views/challenges/showVideo.jade b/server/views/challenges/showVideo.jade index bf3d45636b..f29911013e 100644 --- a/server/views/challenges/showVideo.jade +++ b/server/views/challenges/showVideo.jade @@ -1,5 +1,6 @@ extends ../layout-wide block content + include ../partials/flyer .row .col-xs-12.col-sm-12.col-md-4 h4.text-center.challenge-instructions-title= name diff --git a/server/views/challenges/showZiplineOrBasejump.jade b/server/views/challenges/showZiplineOrBasejump.jade index 19197c1795..5c3639a8d6 100644 --- a/server/views/challenges/showZiplineOrBasejump.jade +++ b/server/views/challenges/showZiplineOrBasejump.jade @@ -1,5 +1,6 @@ extends ../layout-wide block content + include ../partials/flyer .row .col-md-4 h4.text-center.challenge-instructions-title= name diff --git a/server/views/layout.jade b/server/views/layout.jade index f64024fdf9..eefd4090e0 100644 --- a/server/views/layout.jade +++ b/server/views/layout.jade @@ -6,7 +6,7 @@ html(lang='en') body.top-and-bottom-margins include partials/scripts include partials/navbar + include partials/flash .container - include partials/flash block content include partials/footer diff --git a/server/views/partials/flash.jade b/server/views/partials/flash.jade index e76ab6edf4..8668a4174d 100644 --- a/server/views/partials/flash.jade +++ b/server/views/partials/flash.jade @@ -1,20 +1,21 @@ -.row.flashMessage - .col-xs-12 - if (messages.errors || messages.error) - .alert.alert-danger.fade.in - button.close(type='button', data-dismiss='alert') - span.ion-close-circled - for error in (messages.errors || messages.error) - div!= error.msg || error - if messages.info - .alert.alert-info.fade.in - button.close(type='button', data-dismiss='alert') - span.ion-close-circled - for info in messages.info - div!= info.msg - if messages.success - .alert.alert-success.fade.in - button.close(type='button', data-dismiss='alert') - span.ion-close-circled - for success in messages.success - div!= success.msg +.container + .row.flashMessage.negative-30 + .col-xs-12 + if (messages.errors || messages.error) + .alert.alert-danger.fade.in + button.close(type='button', data-dismiss='alert') + span.ion-close-circled + for error in (messages.errors || messages.error) + div!= error.msg || error + if messages.info + .alert.alert-info.fade.in + button.close(type='button', data-dismiss='alert') + span.ion-close-circled + for info in messages.info + div!= info.msg + if messages.success + .alert.alert-success.fade.in + button.close(type='button', data-dismiss='alert') + span.ion-close-circled + for success in messages.success + div!= success.msg diff --git a/server/views/partials/flyer.jade b/server/views/partials/flyer.jade new file mode 100644 index 0000000000..07cb9471b2 --- /dev/null +++ b/server/views/partials/flyer.jade @@ -0,0 +1,8 @@ +if (user && user.points > 5) + .container + .row.flashMessage.negative-30 + .col-xs-12 + #bill-board.alert.alert-info.fade.in(style='display: none;') + button.close(type='button', data-dismiss='alert') + span.ion-close-circled#dismiss-bill + #bill-content