Skip to content

Instantly share code, notes, and snippets.

@TylerJPresley
Created July 10, 2016 20:36
Show Gist options
  • Save TylerJPresley/3359f25efe34fe9340e962941c006c6f to your computer and use it in GitHub Desktop.
Save TylerJPresley/3359f25efe34fe9340e962941c006c6f to your computer and use it in GitHub Desktop.
Toast notificaitons / Aurelia (CLI/RequireJS)
.toast-title { font-weight: bold; }
.toast-message { -ms-word-wrap: break-word; word-wrap: break-word; }
.toast-message a,
.toast-message label { color: #ffffff; }
.toast-message a:hover { color: #cccccc; text-decoration: none; }
.toast-close-button {
position: relative;
right: -0.3em;
top: -0.3em;
float: right;
font-size: 20px;
font-weight: bold;
color: #ffffff;
-webkit-text-shadow: 0 1px 0 #ffffff;
text-shadow: 0 1px 0 #ffffff;
opacity: 0.8;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
filter: alpha(opacity=80);
}
.toast-close-button:hover,
.toast-close-button:focus {
color: #000000;
text-decoration: none;
cursor: pointer;
opacity: 0.4;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
filter: alpha(opacity=40);
}
/*Additional properties for button version
iOS requires the button element instead of an anchor tag.
If you want the anchor version, it requires `href="#"`.*/
button.toast-close-button {
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
}
.toast-top-center {
top: 0;
right: 0;
width: 100%;
}
.toast-bottom-center {
bottom: 0;
right: 0;
width: 100%;
}
.toast-top-full-width {
top: 0;
right: 0;
width: 100%;
}
.toast-bottom-full-width {
bottom: 0;
right: 0;
width: 100%;
}
.toast-top-left {
top: 12px;
left: 12px;
}
.toast-top-right {
top: 12px;
right: 12px;
}
.toast-bottom-right {
right: 12px;
bottom: 12px;
}
.toast-bottom-left {
bottom: 12px;
left: 12px;
}
#toast-container {
position: fixed;
z-index: 999999;
/*overrides*/
}
#toast-container * {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
#toast-container > div {
position: relative;
overflow: hidden;
margin: 0 0 .5rem .5rem;
padding: 1rem;
min-width: 25rem;
-moz-box-shadow: 0 2px 4px rgba(#000000, .2);
-webkit-box-shadow: 0 2px 4px rgba(#000000, .2);
box-shadow: 0 2px 4px rgba(#000000, .2);
color: #ffffff;
}
#toast-container > :hover {
cursor: pointer;
}
#toast-container.toast-top-center > div,
#toast-container.toast-bottom-center > div {
width: 300px;
margin: auto;
}
#toast-container.toast-top-full-width > div,
#toast-container.toast-bottom-full-width > div {
width: 96%;
margin: auto;
}
.toast {
background-color: #030303;
}
.toast-success { background-color: $green-500; color: $green-500-text; }
.toast-error { background-color: $red-500; color: $red-500-text; }
.toast-info { background-color: $grey-800; color: $grey-800-text; }
.toast-warning { background-color: $yellow-500; color: $yellow-500-text; }
.toast-progress {
position: absolute;
left: 0;
bottom: 0;
height: 4px;
background-color: #000000;
opacity: 0.4;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
filter: alpha(opacity=40);
}
/*Responsive Design*/
@media all and (max-width: 240px) {
#toast-container > div {
padding: 8px 8px 8px 50px;
width: 11em;
}
#toast-container .toast-close-button {
right: -0.2em;
top: -0.2em;
}
}
@media all and (min-width: 241px) and (max-width: 480px) {
#toast-container > div {
padding: 8px 8px 8px 50px;
width: 18em;
}
#toast-container .toast-close-button {
right: -0.2em;
top: -0.2em;
}
}
@media all and (min-width: 481px) and (max-width: 768px) {
#toast-container > div {
padding: 15px 15px 15px 50px;
width: 25em;
}
}
/**
* Imports
*/
import {transient, inject} from 'aurelia-framework';
import Toastr from 'toastr';
/**
* Decorators
*/
@inject(Toastr)
/**
* Notification Class
* @class
*/
export class Notification {
/**
* Constructs a ServiceUtility instance
* @param toastr {object} - toastr instance
* @constructor
*/
constructor(toastr) {
this.toastr = toastr;
this.toastr.options = {
'closeButton': false,
'debug': false,
'newestOnTop': false,
'progressBar': false,
'positionClass': 'toast-bottom-left',
'preventDuplicates': false,
'onclick': null,
'showDuration': '300',
'hideDuration': '1000',
'timeOut': '7500',
'extendedTimeOut': '1000',
'showEasing': 'swing',
'hideEasing': 'linear',
'showMethod': 'fadeIn',
'hideMethod': 'fadeOut'
};
}
/**
* Shows an error notification
* @param msg {String} - message to be displayed
*/
showError(msg) {
this.toastr.error(msg, null, { 'timeOut': '12500' });
}
/**
* Shows a success notification
* @param msg {String} - message to be displayed
*/
showSuccess(msg) {
this.toastr.success(msg);
}
/**
* Shows a warning notification
* @param msg {String} - message to be displayed
*/
showWarning(msg) {
this.toastr.warning(msg);
}
/**
* Shows an info notification
* @param msg {String} - message to be displayed
*/
showInfo(msg) {
this.toastr.info(msg);
}
/**
* Handles showing any messages coming back form the server payload
* @param messages {object} - object with message arrays
*/
handleServerMessages(messages) {
for (let message of messages.successes) {
this.showSuccess(message);
}
for (let message of messages.errors) {
this.showError(message);
}
for (let message of messages.infos) {
this.showInfo(message);
}
for (let message of messages.warnings) {
this.showWarning(message);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment