diff --git a/TODO.md b/TODO.md index e97df70..0a32adf 100644 --- a/TODO.md +++ b/TODO.md @@ -4,7 +4,6 @@ - [ ] create a 500/400/loading system messages - [ ] slide top menu on page load too -- [ ] allow user to close topbar messages - [ ] deal with Firebase timing out, are we still logged-in? - [ ] on system-wide notifications show a button that takes us to the index unless we are on index - [ ] mediator `!app/notify/edit` will edit the current notification @@ -32,6 +31,7 @@ - [ ] show logged-in state only after it is known - [ ] trigger success topbar when we have completed a milestone on chart page; show plain when we are behind - [ ] on chart page show a little progress bar in the title +- [ ] use tap plugin for Ractive ##Future Releases diff --git a/public/css/app.bundle.css b/public/css/app.bundle.css index 25a5fb0..5f2d561 100644 --- a/public/css/app.bundle.css +++ b/public/css/app.bundle.css @@ -449,11 +449,13 @@ ul{list-style-type:none;margin:0;padding:0;} ul li{display:inline-block} .wrap{width:800px;margin:0 auto} #notify{position:fixed;top:-68px;z-index:1;width:100%;background:#fcfcfc;color:#aaafbf;border-top:3px solid #aaafbf;border-bottom:1px solid #f3f4f8;} +#notify .close{float:right;font-size:16px;padding:22px;cursor:pointer;} +#notify .close:before{content:"\d7";display:block} #notify.system{top:0%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-o-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);width:500px;} #notify.system p{padding-top:20px} -#notify.success{border-top-color:#00b361;color:#00b361} -#notify.warn{border-top-color:#ea9712;color:#ea9712} -#notify.alert{border-top-color:#c1041c;color:#c1041c} +#notify.success,#notify.ok,#notify.good{border-top-color:#00b361;color:#00b361} +#notify.warn,#notify.trouble{border-top-color:#ea9712;color:#ea9712} +#notify.alert,#notify.bad,#notify.fucked{border-top-color:#c1041c;color:#c1041c} #notify .icon,#notify p{display:block} #notify .icon{font-size:26px;padding:18px;width:38px;float:left} #notify p{padding:22px 20px 20px 74px;text-align:justify} diff --git a/public/css/app.css b/public/css/app.css index 4a7a6bf..17f4a8a 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -42,11 +42,13 @@ ul{list-style-type:none;margin:0;padding:0;} ul li{display:inline-block} .wrap{width:800px;margin:0 auto} #notify{position:fixed;top:-68px;z-index:1;width:100%;background:#fcfcfc;color:#aaafbf;border-top:3px solid #aaafbf;border-bottom:1px solid #f3f4f8;} +#notify .close{float:right;font-size:16px;padding:22px;cursor:pointer;} +#notify .close:before{content:"\d7";display:block} #notify.system{top:0%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-o-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);width:500px;} #notify.system p{padding-top:20px} -#notify.success{border-top-color:#00b361;color:#00b361} -#notify.warn{border-top-color:#ea9712;color:#ea9712} -#notify.alert{border-top-color:#c1041c;color:#c1041c} +#notify.success,#notify.ok,#notify.good{border-top-color:#00b361;color:#00b361} +#notify.warn,#notify.trouble{border-top-color:#ea9712;color:#ea9712} +#notify.alert,#notify.bad,#notify.fucked{border-top-color:#c1041c;color:#c1041c} #notify .icon,#notify p{display:block} #notify .icon{font-size:26px;padding:18px;width:38px;float:left} #notify p{padding:22px 20px 20px 74px;text-align:justify} diff --git a/public/js/app.bundle.js b/public/js/app.bundle.js index 8ce764a..07f5ce6 100644 --- a/public/js/app.bundle.js +++ b/public/js/app.bundle.js @@ -41246,8 +41246,7 @@ Router.prototype.mount = function(routes, path) { done = system.async(); mediator.fire('!app/notify', { 'text': 'You have some interesting news in your inbox. Go check it out now.', - 'type': 'warn', - 'system': true + 'type': 'warn' }); window.location.hash = '#'; return _.delay(done, 3e3); @@ -41289,7 +41288,7 @@ Router.prototype.mount = function(routes, path) { // notify.mustache root.require.register('burnchart/src/templates/notify.js', function(exports, require, module) { - module.exports = ["{{#text}}"," {{#system}}","
"," ","

{{text}}

","
"," {{else}}","
"," ","

{{text}}

","
"," {{/system}}","{{/text}}"].join("\n"); + module.exports = ["{{#text}}"," {{#system}}","
"," ","

{{text}}

","
"," {{else}}","
"," "," ","

{{text}}

","
"," {{/system}}","{{/text}}"].join("\n"); }); // chart.mustache @@ -41565,8 +41564,9 @@ Router.prototype.mount = function(routes, path) { 'top': HEIGHT }, init: function() { - var defaults, hide, show, + var defaults, hidden, hide, show, _this = this; + hidden = true; defaults = { 'text': '', 'type': '', @@ -41576,8 +41576,8 @@ Router.prototype.mount = function(routes, path) { }; show = function(opts) { var pos; - opts = _.defaults(opts, defaults); - _this.set(opts); + hidden = false; + _this.set(opts = _.defaults(opts, defaults)); pos = [0, 50][+opts.system]; _this.animate('top', pos, { 'easing': d3.ease('bounce'), @@ -41589,6 +41589,10 @@ Router.prototype.mount = function(routes, path) { return _.delay(hide, opts.ttl); }; hide = function() { + if (hidden) { + return; + } + hidden = true; return _this.animate('top', HEIGHT, { 'easing': d3.ease('back'), 'complete': function() { @@ -41597,7 +41601,8 @@ Router.prototype.mount = function(routes, path) { }); }; mediator.on('!app/notify', show); - return mediator.on('!app/notify/hide', hide); + mediator.on('!app/notify/hide', hide); + return this.on('close', hide); }, 'components': { Icons: Icons diff --git a/public/js/app.js b/public/js/app.js index ef0c0f8..2d160de 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -793,8 +793,7 @@ done = system.async(); mediator.fire('!app/notify', { 'text': 'You have some interesting news in your inbox. Go check it out now.', - 'type': 'warn', - 'system': true + 'type': 'warn' }); window.location.hash = '#'; return _.delay(done, 3e3); @@ -836,7 +835,7 @@ // notify.mustache root.require.register('burnchart/src/templates/notify.js', function(exports, require, module) { - module.exports = ["{{#text}}"," {{#system}}","
"," ","

{{text}}

","
"," {{else}}","
"," ","

{{text}}

","
"," {{/system}}","{{/text}}"].join("\n"); + module.exports = ["{{#text}}"," {{#system}}","
"," ","

{{text}}

","
"," {{else}}","
"," "," ","

{{text}}

","
"," {{/system}}","{{/text}}"].join("\n"); }); // chart.mustache @@ -1112,8 +1111,9 @@ 'top': HEIGHT }, init: function() { - var defaults, hide, show, + var defaults, hidden, hide, show, _this = this; + hidden = true; defaults = { 'text': '', 'type': '', @@ -1123,8 +1123,8 @@ }; show = function(opts) { var pos; - opts = _.defaults(opts, defaults); - _this.set(opts); + hidden = false; + _this.set(opts = _.defaults(opts, defaults)); pos = [0, 50][+opts.system]; _this.animate('top', pos, { 'easing': d3.ease('bounce'), @@ -1136,6 +1136,10 @@ return _.delay(hide, opts.ttl); }; hide = function() { + if (hidden) { + return; + } + hidden = true; return _this.animate('top', HEIGHT, { 'easing': d3.ease('back'), 'complete': function() { @@ -1144,7 +1148,8 @@ }); }; mediator.on('!app/notify', show); - return mediator.on('!app/notify/hide', hide); + mediator.on('!app/notify/hide', hide); + return this.on('close', hide); }, 'components': { Icons: Icons diff --git a/src/modules/router.coffee b/src/modules/router.coffee index 8d93fb6..24a812a 100644 --- a/src/modules/router.coffee +++ b/src/modules/router.coffee @@ -21,9 +21,8 @@ module.exports = window.router = router = Router done = do system.async mediator.fire '!app/notify', - 'text': 'You have some interesting news in your inbox. Go check it out now.' - 'type': 'warn' - 'system': yes + 'text': 'You have some interesting news in your inbox. Go check it out now.' + 'type': 'warn' window.location.hash = '#' _.delay done, 3e3 \ No newline at end of file diff --git a/src/styles/app.styl b/src/styles/app.styl index b491ab9..d176893 100644 --- a/src/styles/app.styl +++ b/src/styles/app.styl @@ -40,6 +40,16 @@ ul border-top: 3px solid #AAAFBF border-bottom: 1px solid #F3F4F8 + .close + float: right + font-size: 16px + padding: 22px + cursor: pointer + + &:before + content: "\d7" + display: block + // system-wide notification &.system top: 0% // hide from view @@ -50,15 +60,15 @@ ul p padding-top: 20px - &.success + &.success, &.ok, &.good border-top-color: #00B361 color: #00B361 - &.warn + &.warn, &.trouble border-top-color: #EA9712 color: #EA9712 - &.alert + &.alert, &.bad, &.fucked border-top-color: $strong_color color: $strong_color diff --git a/src/templates/notify.mustache b/src/templates/notify.mustache index c0fe1b5..16bd5df 100644 --- a/src/templates/notify.mustache +++ b/src/templates/notify.mustache @@ -6,6 +6,7 @@ {{else}}
+

{{text}}

diff --git a/src/views/notify.coffee b/src/views/notify.coffee index 4432b13..0eac2b2 100644 --- a/src/views/notify.coffee +++ b/src/views/notify.coffee @@ -11,6 +11,8 @@ module.exports = Ractive.extend 'top': HEIGHT init: -> + hidden = yes + defaults = 'text': '' 'type': '' @@ -19,13 +21,11 @@ module.exports = Ractive.extend 'ttl': 5e3 # Show a notification. - # type: alert/warn/success - # system: yes/no show = (opts) => - opts = _.defaults opts, defaults - - # Set the text. - @set opts + hidden = no + + # Set the opts. + @set opts = _.defaults opts, defaults # Which position to slide to? pos = [ 0, 50 ][ +opts.system ] # 0px or 50% from top # Slide into view. @@ -41,6 +41,9 @@ module.exports = Ractive.extend # Hide a notification. hide = => + return if hidden + hidden = yes + @animate 'top', HEIGHT, 'easing': d3.ease('back') 'complete': => @@ -51,6 +54,9 @@ module.exports = Ractive.extend mediator.on '!app/notify', show mediator.on '!app/notify/hide', hide + # Close us prematurely... + @on 'close', hide + 'components': { Icons } 'adapt': [ Ractive.adaptors.Ractive ] \ No newline at end of file