##// END OF EJS Templates
bower: bump requirements
bower: bump requirements

File last commit:

r3149:a1e63a84 default
r3150:747e1809 default
Show More
rhodecode-toast.html
123 lines | 4.3 KiB | text/html | HtmlLexer
components: reorganize build pipeline to have nice separation of html/js/css
r703 <link rel="import" href="../../../../../../bower_components/paper-button/paper-button.html">
toasts: hide messages on escape.
r1486 <link rel="import" href="../../../../../../bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
components: reorganize build pipeline to have nice separation of html/js/css
r703 <link rel="import" href="../rhodecode-unsafe-html/rhodecode-unsafe-html.html">
<dom-module id="rhodecode-toast">
<template>
notifications: make styling match the design
r704 <style include="shared-styles"></style>
components: reorganize build pipeline to have nice separation of html/js/css
r703 <link rel="stylesheet" href="rhodecode-toast.css">
notifications: different approach with fixed/standard container
r1483 <template is="dom-if" if="[[hasToasts]]">
rhodecode-toast: css improvements.
r1484 <div class$="container toast-message-holder [[conditionalClass(isFixed)]]">
notifications: different approach with fixed/standard container
r1483 <template is="dom-repeat" items="[[toasts]]">
<div class$="alert alert-[[item.level]]">
rhodecode-toasts: allow removing single elements from toast queue.
r1513 <div on-tap="dismissNotification" class="toast-close" index-pos="[[index]]">
<span>[[_gettext('Close')]]</span>
</div>
notifications: different approach with fixed/standard container
r1483 <rhodecode-unsafe-html text="[[item.message]]"></rhodecode-unsafe-html>
components: reorganize build pipeline to have nice separation of html/js/css
r703 </div>
</template>
</div>
notifications: different approach with fixed/standard container
r1483 </template>
components: reorganize build pipeline to have nice separation of html/js/css
r703 </template>
polymer: prepare for 3.x migration
r3149 <script>
Polymer({
is: 'rhodecode-toast',
properties: {
toasts: {
type: Array,
value: function(){
return []
}
},
isFixed: {
type: Boolean,
value: false
},
hasToasts: {
type: Boolean,
computed: '_computeHasToasts(toasts.*)'
},
keyEventTarget: {
type: Object,
value: function() {
return document.body;
}
}
},
behaviors: [
Polymer.IronA11yKeysBehavior
],
observers: [
'_changedToasts(toasts.splices)'
],
keyBindings: {
'esc:keyup': '_hideOnEsc'
},
_hideOnEsc: function (event) {
return this.dismissNotifications();
},
_computeHasToasts: function(){
return this.toasts.length > 0;
},
_debouncedCalc: function(){
// calculate once in a while
this.debounce('debouncedCalc', this.toastInWindow, 25);
},
conditionalClass: function(){
return this.isFixed ? 'fixed': '';
},
toastInWindow: function() {
if (!this._headerNode){
return true
}
var headerHeight = this._headerNode.offsetHeight;
var scrollPosition = window.scrollY;
if (this.isFixed){
this.isFixed = 1 <= scrollPosition;
}
else{
this.isFixed = headerHeight <= scrollPosition;
}
},
attached: function(){
this._headerNode = document.querySelector('.header', document);
this.listen(window,'scroll', '_debouncedCalc');
this.listen(window,'resize', '_debouncedCalc');
this._debouncedCalc();
},
_changedToasts: function(newValue, oldValue){
$.Topic('/favicon/update').publish({count: this.toasts.length});
},
dismissNotification: function(e) {
$.Topic('/favicon/update').publish({count: this.toasts.length-1});
var idx = e.target.parentNode.indexPos
this.splice('toasts', idx, 1);
},
dismissNotifications: function(){
$.Topic('/favicon/update').publish({count: 0});
this.splice('toasts', 0);
},
handleNotification: function(data){
if (!templateContext.rhodecode_user.notification_status && !data.message.force) {
// do not act if notifications are disabled
return
}
this.push('toasts',{
level: data.message.level,
message: data.message.message
});
},
_gettext: _gettext
});
</script>
components: reorganize build pipeline to have nice separation of html/js/css
r703 </dom-module>