1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- Object.defineProperty(Object.prototype, "Error", {
- value: null,
- enumerable: false,
- });
- const NotifyBuild = (function () {
- // локальная область видимости (приватные поля и методы)
- /**
- * Задержка в миллисекундах перед удалением элемента (сообщения) при клике (должен совпадать с классом removing, в котором происходит анимация исчезновения (transition opacity))
- */
- const HARDREMOVE_TIME = 100;
- /**
- * Задержка в миллисекундах перед удалением элемента (сообщения) при автоматическом исчезновении (должен совпадать с классом removing-long, в котором происходит анимация исчезновения (transition opacity))
- */
- const AUTOREMOVE_TIME = 2000;
- const REMOVING_SHORT = "short";
- const REMOVING_LONG = "long";
- /**
- * Счётчик ID для создаваемых сообщений
- */
- let MESSAGE_COUNTER = -1;
- /**
- * Удаляет сообщение (или другой элемент, к которому было привязано данное событие)
- * @param {Number} time время, через которое сообщение будет удалено из DOM (в миллисекундах)
- */
- const removeMessage = function (time = HARDREMOVE_TIME, transition = REMOVING_SHORT) {
- this.classList.add("removing", transition);
- setTimeout(
- function ($elem) {
- $elem.remove();
- },
- time,
- this
- );
- };
- /**
- * Для автоматического удаления сообщений, вызывается в setTimeout во время создания текущего сообщения
- */
- const autoRemoveMessage = function () {
- if (this instanceof HTMLElement) {
- removeMessage.call(this, AUTOREMOVE_TIME, REMOVING_LONG);
- }
- };
- /**
- * Класс создания всплывающих сообщений. Конструктор создаёт элемент-контейнер для помещения элементов-сообщений и добавляет его в конец BODY. Класс имеет один метод - Show - показать сообщение (создать элемент-сообщение и поместить в элемент-контейнер на указанное время жизни (аргумент time))
- */
- return class Messenger {
- /**
- * Конструктор сообщений
- */
- constructor() {
- this.$message = document.createElement("div");
- this.$message.classList.add("messenger");
- this.$message.id = "idMessenger";
- document.body.appendChild(this.$message);
- }
- /**
- * Вывести сообщение одного из трёх типов. Выводит в прямоугольной области в нижнем правом углу экрана. А также дублируется в лог консоли.
- * @param {String} msg текст сообщения, допускается HTML формат
- * @param {MESSAGE_TYPE} type тип отображения сообщения (ошибка, предупреждение, информация)
- * @param {Number} time время отображения сообщения в миллисекундах
- */
- Show(msg, type = "info", time = 10000) {
- let message = document.createElement("div");
- message.id = `idMsg${++MESSAGE_COUNTER}`;
- message.innerHTML = msg;
- message.classList.add(type);
- let close = document.createElement("div");
- close.classList.add("close");
- close.onclick = removeMessage.bind(message);
- message.append(close);
- this.$message.appendChild(message);
- setTimeout(autoRemoveMessage.bind(message), time);
- }
- }
- })();
- var Notify = new NotifyBuild();
|