Merge pull request #8124 from BerkeleyTrue/feature/re-add-announcement

(Re)add announcement/flyer
pull/8220/head
Quincy Larson 2016-04-20 14:48:05 -07:00
commit be27deaa4c
13 changed files with 103 additions and 22 deletions

View File

@ -625,4 +625,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();
});
}());
});

34
common/models/flyer.json Normal file
View File

@ -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": []
}

View File

@ -66,5 +66,9 @@
"userIdentity": {
"dataSource": "db",
"public": true
},
"flyer": {
"dataSource": "db",
"public": true
}
}

View File

@ -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)
a(href='/challenges/' + removeOldTerms(challenge.name))= removeOldTerms(challenge.name)

View File

@ -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")

View File

@ -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")

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -1,5 +1,6 @@
extends ../layout-wide
block content
include ../partials/flyer
.row
.col-md-4
h4.text-center.challenge-instructions-title= name

View File

@ -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

View File

@ -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

View File

@ -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