PHP Classes

File: public/js/snackbar.js

Recommend this page to a friend!
  Classes of Edward Paul   PHP Job Board   public/js/snackbar.js   Download  
File: public/js/snackbar.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Job Board
Manage job postings via Web pages or an API
Author: By
Last change:
Date: 1 year ago
Size: 5,847 bytes
 

Contents

Class file image Download
/*! * Snackbar v0.1.10 * http://polonel.com/Snackbar * * Copyright 2018 Chris Brame and other contributors * Released under the MIT license * https://github.com/polonel/Snackbar/blob/master/LICENSE */ (function(root, factory) { 'use strict'; if (typeof define === 'function' && define.amd) { define([], function() { return (root.Snackbar = factory()); }); } else if (typeof module === 'object' && module.exports) { module.exports = root.Snackbar = factory(); } else { root.Snackbar = factory(); } })(this, function() { var Snackbar = {}; Snackbar.current = null; var $defaults = { text: 'Default Text', width: 'auto', showAction: false, showSecondButton: false, secondButtonText: '', pos: 'bottom-center', duration: 3000, customClass: '', onActionClick: function(element) { element.style.opacity = 0; }, onSecondButtonClick: function(element) {}, onClose: function(element) {} }; Snackbar.show = function($options) { var options = Extend(true, $defaults, $options); if (Snackbar.current) { Snackbar.current.style.opacity = 0; setTimeout( function() { var $parent = this.parentElement; if ($parent) // possible null if too many/fast Snackbars $parent.removeChild(this); }.bind(Snackbar.current), 500 ); } Snackbar.snackbar = document.createElement('div'); Snackbar.snackbar.className = 'snackbar-container ' + options.customClass; Snackbar.snackbar.style.width = options.width; var $p = document.createElement('p'); $p.style.margin = 0; $p.style.padding = 0; $p.style.color = options.textColor; $p.style.fontSize = 'inherit'; $p.style.fontWeight = 300; $p.style.lineHeight = '1em'; $p.innerHTML = options.text; Snackbar.snackbar.appendChild($p); Snackbar.snackbar.style.background = options.backgroundColor; if (options.showSecondButton) { var secondButton = document.createElement('button'); secondButton.className = 'action'; secondButton.innerHTML = options.secondButtonText; secondButton.style.color = options.secondButtonTextColor; secondButton.addEventListener('click', function() { options.onSecondButtonClick(Snackbar.snackbar); }); Snackbar.snackbar.appendChild(secondButton); } if (options.showAction) { var actionButton = document.createElement('button'); actionButton.className = 'action'; actionButton.innerHTML = options.actionText; actionButton.style.color = options.actionTextColor; actionButton.addEventListener('click', function() { options.onActionClick(Snackbar.snackbar); }); Snackbar.snackbar.appendChild(actionButton); } if (options.duration) { setTimeout( function() { if (Snackbar.current === this) { Snackbar.current.style.opacity = 0; // When natural remove event occurs let's move the snackbar to its origins Snackbar.current.style.top = '-100px'; Snackbar.current.style.bottom = '-100px'; } }.bind(Snackbar.snackbar), options.duration ); } Snackbar.snackbar.addEventListener( 'transitionend', function(event, elapsed) { if (event.propertyName === 'opacity' && this.style.opacity === '0') { if (typeof(options.onClose) === 'function') options.onClose(this); this.parentElement.removeChild(this); if (Snackbar.current === this) { Snackbar.current = null; } } }.bind(Snackbar.snackbar) ); Snackbar.current = Snackbar.snackbar; document.body.appendChild(Snackbar.snackbar); var $bottom = getComputedStyle(Snackbar.snackbar).bottom; var $top = getComputedStyle(Snackbar.snackbar).top; Snackbar.snackbar.style.opacity = 1; Snackbar.snackbar.className = 'snackbar-container ' + options.customClass + ' snackbar-pos ' + options.pos; }; Snackbar.close = function() { if (Snackbar.current) { Snackbar.current.style.opacity = 0; } }; // Pure JS Extend // http://gomakethings.com/vanilla-javascript-version-of-jquery-extend/ var Extend = function() { var extended = {}; var deep = false; var i = 0; var length = arguments.length; if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') { deep = arguments[0]; i++; } var merge = function(obj) { for (var prop in obj) { if (Object.prototype.hasOwnProperty.call(obj, prop)) { if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') { extended[prop] = extend(true, extended[prop], obj[prop]); } else { extended[prop] = obj[prop]; } } } }; for (; i < length; i++) { var obj = arguments[i]; merge(obj); } return extended; }; return Snackbar; });