@hyahfoufi/ng-snotify
Version:
Angular 2+ alternative notifications center
56 lines • 5.79 kB
JavaScript
/**
* Generates random id
* @return number
*/
export function uuid() {
return Math.floor(Math.random() * (Date.now() - 1)) + 1;
}
/**
* Simple is object check.
* @param item Object<any>
* @returns boolean
*/
export function isObject(item) {
return item && typeof item === 'object' && !Array.isArray(item);
}
/**
* Deep merge objects.
* @param sources Array<Object<any>>
* @returns Object<any>
*/
export function mergeDeep(...sources) {
const target = {};
if (!sources.length) {
return target;
}
while (sources.length > 0) {
const source = sources.shift();
if (isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
target[key] = mergeDeep(target[key], source[key]);
}
else {
Object.assign(target, { [key]: source[key] });
}
}
}
}
return target;
}
export function animate(start, duration, callback) {
let endTime;
requestAnimationFrame(timestamp => (endTime = timestamp + duration));
const calculate = () => {
requestAnimationFrame(timestamp => {
const runtime = timestamp - endTime;
const progress = Math.min(runtime / duration, 1) + start;
if (runtime < duration) {
if (callback(+(100 * progress).toFixed(2), progress)) {
calculate();
}
}
});
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zbm90aWZ5L3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLElBQUk7SUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBSTtJQUMzQixPQUFPLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFHLE9BQU87SUFDbEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYSxFQUFFLFFBQWdCLEVBQUUsUUFBd0Q7SUFDL0csSUFBSSxPQUFPLENBQUM7SUFDWixxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTtRQUNyQixxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDekQsSUFBSSxPQUFPLEdBQUcsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ3JELFNBQVMsRUFBRSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZXMgcmFuZG9tIGlkXG4gKiBAcmV0dXJuIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKERhdGUubm93KCkgLSAxKSkgKyAxO1xufVxuXG4vKipcbiAqIFNpbXBsZSBpcyBvYmplY3QgY2hlY2suXG4gKiBAcGFyYW0gaXRlbSBPYmplY3Q8YW55PlxuICogQHJldHVybnMgYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QoaXRlbSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaXRlbSk7XG59XG5cbi8qKlxuICogRGVlcCBtZXJnZSBvYmplY3RzLlxuICogQHBhcmFtIHNvdXJjZXMgQXJyYXk8T2JqZWN0PGFueT4+XG4gKiBAcmV0dXJucyBPYmplY3Q8YW55PlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEZWVwKC4uLnNvdXJjZXMpIHtcbiAgY29uc3QgdGFyZ2V0ID0ge307XG4gIGlmICghc291cmNlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChpc09iamVjdChzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IG1lcmdlRGVlcCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB7IFtrZXldOiBzb3VyY2Vba2V5XSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5pbWF0ZShzdGFydDogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyLCBjYWxsYmFjazogKGN1cnJlbnRWYWx1ZTogbnVtYmVyLCBwcm9ncmVzczogbnVtYmVyKSA9PiB7fSkge1xuICBsZXQgZW5kVGltZTtcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpbWVzdGFtcCA9PiAoZW5kVGltZSA9IHRpbWVzdGFtcCArIGR1cmF0aW9uKSk7XG4gIGNvbnN0IGNhbGN1bGF0ZSA9ICgpID0+IHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGltZXN0YW1wID0+IHtcbiAgICAgIGNvbnN0IHJ1bnRpbWUgPSB0aW1lc3RhbXAgLSBlbmRUaW1lO1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1pbihydW50aW1lIC8gZHVyYXRpb24sIDEpICsgc3RhcnQ7XG4gICAgICBpZiAocnVudGltZSA8IGR1cmF0aW9uKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaygrKDEwMCAqIHByb2dyZXNzKS50b0ZpeGVkKDIpLCBwcm9ncmVzcykpIHtcbiAgICAgICAgICBjYWxjdWxhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuIl19