移植github修复版本
This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greasyfork.org/scripts/430098/985170/alihesari%27s%20noticejs%20040.js
// ==UserScript== // @license MIT // @original-script https://github.com/alihesari/notice.js // @original-author Toolkito // @original-license MIT // ==/UserScript== // MIT License // Copyright (c) 2018 Toolkito // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("NoticeJs", [], factory); else if(typeof exports === 'object') exports["NoticeJs"] = factory(); else root["NoticeJs"] = factory(); })(typeof self !== 'undefined' ? self : this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "dist/"; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 2); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var noticeJsModalClassName = exports.noticeJsModalClassName = 'noticejs-modal'; var closeAnimation = exports.closeAnimation = 'noticejs-fadeOut'; var Defaults = exports.Defaults = { title: '', text: '', type: 'success', position: 'topRight', timeout: 30, progressBar: true, closeWith: ['button'], animation: null, modal: false, scroll: { maxHeight: 300, showOnHover: true }, rtl: false, callbacks: { beforeShow: [], onShow: [], afterShow: [], onClose: [], afterClose: [], onClick: [], onHover: [], onTemplate: [] } }; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.appendNoticeJs = exports.addListener = exports.CloseItem = exports.AddModal = undefined; exports.getCallback = getCallback; var _api = __webpack_require__(0); var API = _interopRequireWildcard(_api); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var options = API.Defaults; /** * @param {NoticeJs} ref * @param {string} eventName * @return {void} */ function getCallback(ref, eventName) { if (ref.callbacks.hasOwnProperty(eventName)) { ref.callbacks[eventName].forEach(function (cb) { if (typeof cb === 'function') { cb.apply(ref); } }); } } var AddModal = exports.AddModal = function AddModal() { if (document.getElementsByClassName(API.noticeJsModalClassName).length <= 0) { var element = document.createElement('div'); element.classList.add(API.noticeJsModalClassName); element.classList.add('noticejs-modal-open'); document.body.appendChild(element); // Remove class noticejs-modal-open setTimeout(function () { element.className = API.noticeJsModalClassName; }, 200); } }; var CloseItem = exports.CloseItem = function CloseItem(item) { getCallback(options, 'onClose'); // Set animation to close notification item if (options.animation !== null && options.animation.close !== null) { item.className += ' ' + options.animation.close; } setTimeout(function () { item.remove(); }, 200); // Close modal if (options.modal === true && document.querySelectorAll("[noticejs-modal='true']").length >= 1) { document.querySelector('.noticejs-modal').className += ' noticejs-modal-close'; setTimeout(function () { document.querySelector('.noticejs-modal').remove(); }, 500); } // Remove container var position = '.' + item.closest('.noticejs').className.replace('noticejs', '').trim(); setTimeout(function () { if (document.querySelectorAll(position + ' .item').length <= 0) { document.querySelector(position) && document.querySelector(position).remove(); } }, 500); }; var addListener = exports.addListener = function addListener(item) { // Add close button Event if (options.closeWith.includes('button')) { item.querySelector('.close').addEventListener('click', function () { CloseItem(item); }); } // Add close by click Event if (options.closeWith.includes('click')) { item.style.cursor = 'pointer'; item.addEventListener('click', function (e) { if (e.target.className !== 'close') { getCallback(options, 'onClick'); CloseItem(item); } }); } else { item.addEventListener('click', function (e) { if (e.target.className !== 'close') { getCallback(options, 'onClick'); } }); } item.addEventListener('mouseover', function () { getCallback(options, 'onHover'); }); }; var appendNoticeJs = exports.appendNoticeJs = function appendNoticeJs(noticeJsHeader, noticeJsBody, noticeJsProgressBar) { var target_class = '.noticejs-' + options.position; // Create NoticeJs item var noticeJsItem = document.createElement('div'); noticeJsItem.classList.add('item'); noticeJsItem.classList.add(options.type); if (options.rtl === true) { noticeJsItem.classList.add('noticejs-rtl'); } // Add Header if (noticeJsHeader && noticeJsHeader !== '') { noticeJsItem.appendChild(noticeJsHeader); } // Add body noticeJsItem.appendChild(noticeJsBody); // Add progress bar if (noticeJsProgressBar && noticeJsProgressBar !== '') { noticeJsItem.appendChild(noticeJsProgressBar); } // Empty top and bottom container if (['top', 'bottom'].includes(options.position)) { document.querySelector(target_class).innerHTML = ''; } // Add open animation if (options.animation !== null && options.animation.open !== null) { noticeJsItem.className += ' ' + options.animation.open; } // Add Modal if (options.modal === true) { noticeJsItem.setAttribute('noticejs-modal', 'true'); AddModal(); } // Add Listener addListener(noticeJsItem, options.closeWith); getCallback(options, 'beforeShow'); getCallback(options, 'onShow'); document.querySelector(target_class).appendChild(noticeJsItem); getCallback(options, 'afterShow'); return noticeJsItem; }; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _noticejs = __webpack_require__(3); var _noticejs2 = _interopRequireDefault(_noticejs); var _api = __webpack_require__(0); var API = _interopRequireWildcard(_api); var _components = __webpack_require__(4); var _helpers = __webpack_require__(1); var helper = _interopRequireWildcard(_helpers); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var NoticeJs = function () { /** * @param {object} options * @returns {Noty} */ function NoticeJs() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, NoticeJs); this.options = Object.assign(API.Defaults, options); this.component = new _components.Components(); this.on('beforeShow', this.options.callbacks.beforeShow); this.on('onShow', this.options.callbacks.onShow); this.on('afterShow', this.options.callbacks.afterShow); this.on('onClose', this.options.callbacks.onClose); this.on('afterClose', this.options.callbacks.afterClose); this.on('onClick', this.options.callbacks.onClick); this.on('onHover', this.options.callbacks.onHover); return this; } /** * @returns {NoticeJs} */ _createClass(NoticeJs, [{ key: 'show', value: function show() { var container = this.component.createContainer(); if (document.querySelector('.noticejs-' + this.options.position) === null) { document.body.appendChild(container); } var noticeJsHeader = void 0; var noticeJsBody = void 0; var noticeJsProgressBar = void 0; // Create NoticeJs header noticeJsHeader = this.component.createHeader(this.options.title, this.options.closeWith); // Create NoticeJs body noticeJsBody = this.component.createBody(this.options.text); // Create NoticeJs progressBar if (this.options.progressBar === true) { noticeJsProgressBar = this.component.createProgressBar(); } //Append NoticeJs var noticeJs = helper.appendNoticeJs(noticeJsHeader, noticeJsBody, noticeJsProgressBar); return noticeJs; } /** * @param {string} eventName * @param {function} cb * @return {NoticeJs} */ }, { key: 'on', value: function on(eventName) { var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; if (typeof cb === 'function' && this.options.callbacks.hasOwnProperty(eventName)) { this.options.callbacks[eventName].push(cb); } return this; } }]); return NoticeJs; }(); exports.default = NoticeJs; module.exports = exports['default']; /***/ }), /* 3 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Components = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _api = __webpack_require__(0); var API = _interopRequireWildcard(_api); var _helpers = __webpack_require__(1); var helper = _interopRequireWildcard(_helpers); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var options = API.Defaults; var Components = exports.Components = function () { function Components() { _classCallCheck(this, Components); } _createClass(Components, [{ key: 'createContainer', value: function createContainer() { var element_class = 'noticejs-' + options.position; var element = document.createElement('div'); element.classList.add('noticejs'); element.classList.add(element_class); return element; } }, { key: 'createHeader', value: function createHeader() { var element = void 0; if (options.title && options.title !== '') { element = document.createElement('div'); element.setAttribute('class', 'noticejs-heading'); element.textContent = options.title; } // Add close button if (options.closeWith.includes('button')) { var close = document.createElement('div'); close.setAttribute('class', 'close'); close.innerHTML = '×'; if (element) { element.appendChild(close); } else { element = close; } } return element; } }, { key: 'createBody', value: function createBody() { var element = document.createElement('div'); element.setAttribute('class', 'noticejs-body'); var content = document.createElement('div'); content.setAttribute('class', 'noticejs-content'); content.innerHTML = options.text; element.appendChild(content); if (options.scroll !== null && options.scroll.maxHeight !== '') { element.style.overflowY = 'auto'; element.style.maxHeight = options.scroll.maxHeight + 'px'; if (options.scroll.showOnHover === true) { element.style.visibility = 'hidden'; } } return element; } }, { key: 'createProgressBar', value: function createProgressBar() { var element = document.createElement('div'); element.setAttribute('class', 'noticejs-progressbar'); var bar = document.createElement('div'); bar.setAttribute('class', 'noticejs-bar'); element.appendChild(bar); // Progress bar animation if (options.progressBar === true && typeof options.timeout !== 'boolean' && options.timeout !== false) { var frame = function frame() { if (width <= 0) { clearInterval(id); var item = element.closest('div.item'); // Add close animation if (options.animation !== null && options.animation.close !== null) { // Remove open animation class item.className = item.className.replace(new RegExp('(?:^|\\s)' + options.animation.open + '(?:\\s|$)'), ' '); // Add close animation class item.className += ' ' + options.animation.close; // Close notification after 0.5s + timeout var close_time = parseInt(options.timeout) + 500; setTimeout(function () { helper.CloseItem(item); }, close_time); } else { // Close notification when progress bar completed helper.CloseItem(item); } } else { width--; bar.style.width = width + '%'; } }; var width = 100; var id = setInterval(frame, options.timeout); } return element; } }]); return Components; }(); /***/ }) /******/ ]); });