From daa008fbad0a5eaff97175abc42ba7c6995c916c Mon Sep 17 00:00:00 2001 From: rheber Date: Sat, 15 Sep 2018 18:10:07 +1000 Subject: [PATCH] Extract repeatedly used elements --- dist/notie.js | 285 ++++++++++++++++------------------------ dist/notie.min.js | 2 +- src/notie.js | 324 ++++++++++++++++++++++------------------------ 3 files changed, 266 insertions(+), 345 deletions(-) diff --git a/dist/notie.js b/dist/notie.js index 0b1d1f4..a161b50 100644 --- a/dist/notie.js +++ b/dist/notie.js @@ -205,6 +205,16 @@ var escapeClicked = function escapeClicked(event) { return event.keyCode === 27; }; +var makeElement = function makeElement(elemType, classes) { + var element = document.createElement(elemType); + if (classes) { + classes.forEach(function (c) { + return element.classList.add(c); + }); + } + return element; +}; + var addToDocument = function addToDocument(element, position) { element.classList.add(options.classes.container); element.style[position] = '-10000px'; @@ -232,10 +242,8 @@ var removeFromDocument = function removeFromDocument(id, position) { }; var addOverlayToDocument = function addOverlayToDocument(owner, position) { - var element = document.createElement('div'); + var element = makeElement('div', [options.classes.overlay, options.classes.backgroundOverlay]); element.id = options.ids.overlay; - element.classList.add(options.classes.overlay); - element.classList.add(options.classes.backgroundOverlay); element.style.opacity = 0; if (owner && options.overlayClickDismiss) { element.onclick = function () { @@ -273,6 +281,29 @@ var hideAlerts = exports.hideAlerts = function hideAlerts(callback) { } }; +// ==================== +// shared elements +// ==================== + +var div = function div(classes) { + var element = makeElement('div', classes); + element.id = generateRandomId(); + return element; +}; + +var button = function button(innerHTML, classes, onclick) { + var element = makeElement('div', classes); + element.innerHTML = innerHTML; + element.onclick = onclick; + return element; +}; + +var textbox = function textbox(text, classes) { + var element = div(classes); + element.innerHTML = '
' + text + '
'; + return element; +}; + // ==================== // exports // ==================== @@ -291,16 +322,10 @@ var alert = exports.alert = function alert(_ref) { blur(); hideAlerts(); - var element = document.createElement('div'); - var id = generateRandomId(); - element.id = id; + var element = textbox(text, [options.classes.textbox, typeToClassLookup[type], options.classes.alert]); element.position = position; - element.classList.add(options.classes.textbox); - element.classList.add(typeToClassLookup[type]); - element.classList.add(options.classes.alert); - element.innerHTML = '
' + text + '
'; element.onclick = function () { - return removeFromDocument(id, position); + return removeFromDocument(element.id, position); }; element.listener = function (event) { @@ -311,7 +336,7 @@ var alert = exports.alert = function alert(_ref) { if (time && time < 1) time = 1; if (!stay && time) wait(time).then(function () { - return removeFromDocument(id, position); + return removeFromDocument(element.id, position); }); }; @@ -328,24 +353,15 @@ var force = exports.force = function force(_ref2, callbackArg) { blur(); hideAlerts(); - var element = document.createElement('div'); - var id = generateRandomId(); - element.id = id; - - var elementText = document.createElement('div'); - elementText.classList.add(options.classes.textbox); - elementText.classList.add(options.classes.backgroundInfo); - elementText.innerHTML = '
' + text + '
'; - - var elementButton = document.createElement('div'); - elementButton.classList.add(options.classes.button); - elementButton.classList.add(typeToClassLookup[type]); - elementButton.innerHTML = buttonText; - elementButton.onclick = function () { - removeFromDocument(id, position); + var element = div(); + + var elementText = textbox(text, [options.classes.textbox, options.classes.backgroundInfo]); + + var elementButton = button(buttonText, [options.classes.button, typeToClassLookup[type]], function () { + removeFromDocument(element.id, position); removeOverlayFromDocument(); if (callback) callback();else if (callbackArg) callbackArg(); - }; + }); element.appendChild(elementText); element.appendChild(elementButton); @@ -373,36 +389,21 @@ var confirm = exports.confirm = function confirm(_ref3, submitCallbackArg, cance blur(); hideAlerts(); - var element = document.createElement('div'); - var id = generateRandomId(); - element.id = id; - - var elementText = document.createElement('div'); - elementText.classList.add(options.classes.textbox); - elementText.classList.add(options.classes.backgroundInfo); - elementText.innerHTML = '
' + text + '
'; - - var elementButtonLeft = document.createElement('div'); - elementButtonLeft.classList.add(options.classes.button); - elementButtonLeft.classList.add(options.classes.elementHalf); - elementButtonLeft.classList.add(options.classes.backgroundSuccess); - elementButtonLeft.innerHTML = submitText; - elementButtonLeft.onclick = function () { - removeFromDocument(id, position); + var element = div(); + + var elementText = textbox(text, [options.classes.textbox, options.classes.backgroundInfo]); + + var elementButtonLeft = button(submitText, [options.classes.button, options.classes.elementHalf, options.classes.backgroundSuccess], function () { + removeFromDocument(element.id, position); removeOverlayFromDocument(); if (submitCallback) submitCallback();else if (submitCallbackArg) submitCallbackArg(); - }; + }); - var elementButtonRight = document.createElement('div'); - elementButtonRight.classList.add(options.classes.button); - elementButtonRight.classList.add(options.classes.elementHalf); - elementButtonRight.classList.add(options.classes.backgroundError); - elementButtonRight.innerHTML = cancelText; - elementButtonRight.onclick = function () { - removeFromDocument(id, position); + var elementButtonRight = button(cancelText, [options.classes.button, options.classes.elementHalf, options.classes.backgroundError], function () { + removeFromDocument(element.id, position); removeOverlayFromDocument(); if (cancelCallback) cancelCallback();else if (cancelCallbackArg) cancelCallbackArg(); - }; + }); element.appendChild(elementText); element.appendChild(elementButtonLeft); @@ -432,17 +433,11 @@ var input = function input(_ref4, submitCallbackArg, cancelCallbackArg) { blur(); hideAlerts(); - var element = document.createElement('div'); - var id = generateRandomId(); - element.id = id; + var element = div(); - var elementText = document.createElement('div'); - elementText.classList.add(options.classes.textbox); - elementText.classList.add(options.classes.backgroundInfo); - elementText.innerHTML = '
' + text + '
'; + var elementText = textbox(text, [options.classes.textbox, options.classes.backgroundInfo]); - var elementInput = document.createElement('input'); - elementInput.classList.add(options.classes.inputField); + var elementInput = makeElement('input', [options.classes.inputField]); elementInput.setAttribute('autocapitalize', settings.autocapitalize || 'none'); elementInput.setAttribute('autocomplete', settings.autocomplete || 'off'); @@ -479,27 +474,17 @@ var input = function input(_ref4, submitCallbackArg, cancelCallbackArg) { }; } - var elementButtonLeft = document.createElement('div'); - elementButtonLeft.classList.add(options.classes.button); - elementButtonLeft.classList.add(options.classes.elementHalf); - elementButtonLeft.classList.add(options.classes.backgroundSuccess); - elementButtonLeft.innerHTML = submitText; - elementButtonLeft.onclick = function () { - removeFromDocument(id, position); + var elementButtonLeft = button(submitText, [options.classes.button, options.classes.elementHalf, options.classes.backgroundSuccess], function () { + removeFromDocument(element.id, position); removeOverlayFromDocument(); if (submitCallback) submitCallback(elementInput.value);else if (submitCallbackArg) submitCallbackArg(elementInput.value); - }; + }); - var elementButtonRight = document.createElement('div'); - elementButtonRight.classList.add(options.classes.button); - elementButtonRight.classList.add(options.classes.elementHalf); - elementButtonRight.classList.add(options.classes.backgroundError); - elementButtonRight.innerHTML = cancelText; - elementButtonRight.onclick = function () { - removeFromDocument(id, position); + var elementButtonRight = button(cancelText, [options.classes.button, options.classes.elementHalf, options.classes.backgroundError], function () { + removeFromDocument(element.id, position); removeOverlayFromDocument(); if (cancelCallback) cancelCallback(elementInput.value);else if (cancelCallbackArg) cancelCallbackArg(elementInput.value); - }; + }); element.appendChild(elementText); element.appendChild(elementInput); @@ -530,14 +515,9 @@ var select = exports.select = function select(_ref5, cancelCallbackArg) { blur(); hideAlerts(); - var element = document.createElement('div'); - var id = generateRandomId(); - element.id = id; + var element = div(); - var elementText = document.createElement('div'); - elementText.classList.add(options.classes.textbox); - elementText.classList.add(options.classes.backgroundInfo); - elementText.innerHTML = '
' + text + '
'; + var elementText = textbox(text, [options.classes.textbox, options.classes.backgroundInfo]); element.appendChild(elementText); @@ -547,10 +527,7 @@ var select = exports.select = function select(_ref5, cancelCallbackArg) { text = _ref6.text, handler = _ref6.handler; - var elementChoice = document.createElement('div'); - elementChoice.classList.add(typeToClassLookup[type]); - elementChoice.classList.add(options.classes.button); - elementChoice.classList.add(options.classes.selectChoice); + var elementChoice = div([typeToClassLookup[type], options.classes.button, options.classes.selectChoice]); var nextChoice = choices[index + 1]; if (nextChoice && !nextChoice.type) nextChoice.type = 1; @@ -560,7 +537,7 @@ var select = exports.select = function select(_ref5, cancelCallbackArg) { elementChoice.innerHTML = text; elementChoice.onclick = function () { - removeFromDocument(id, position); + removeFromDocument(element.id, position); removeOverlayFromDocument(); handler(); }; @@ -568,15 +545,11 @@ var select = exports.select = function select(_ref5, cancelCallbackArg) { element.appendChild(elementChoice); }); - var elementCancel = document.createElement('div'); - elementCancel.classList.add(options.classes.backgroundNeutral); - elementCancel.classList.add(options.classes.button); - elementCancel.innerHTML = cancelText; - elementCancel.onclick = function () { - removeFromDocument(id, position); + var elementCancel = button(cancelText, [options.classes.backgroundNeutral, options.classes.button], function () { + removeFromDocument(element.id, position); removeOverlayFromDocument(); if (cancelCallback) cancelCallback();else if (cancelCallbackArg) cancelCallbackArg(); - }; + }); element.appendChild(elementCancel); @@ -606,9 +579,13 @@ var date = exports.date = function date(_ref7, submitCallbackArg, cancelCallback var arrow = '▾'; - var elementDateMonth = document.createElement('div'); - var elementDateDay = document.createElement('div'); - var elementDateYear = document.createElement('div'); + var elementDateThird = function elementDateThird() { + return div([options.classes.element, options.classes.elementThird]); + }; + + var elementDateMonth = elementDateThird(); + var elementDateDay = elementDateThird(); + var elementDateYear = elementDateThird(); var setValueHTML = function setValueHTML(date) { elementDateMonth.innerHTML = options.dateMonths[date.getMonth()]; @@ -653,107 +630,63 @@ var date = exports.date = function date(_ref7, submitCallbackArg, cancelCallback setValueHTML(value); }; - var element = document.createElement('div'); - var id = generateRandomId(); - element.id = id; - - var elementDateSelector = document.createElement('div'); - elementDateSelector.classList.add(options.classes.backgroundInfo); - - var elementDateSelectorInner = document.createElement('div'); - elementDateSelectorInner.classList.add(options.classes.dateSelectorInner); + var element = div(); + var elementDateSelector = div([options.classes.backgroundInfo]); + var elementDateSelectorInner = div([options.classes.dateSelectorInner]); - var elementDateUpMonth = document.createElement('div'); - elementDateUpMonth.classList.add(options.classes.button); - elementDateUpMonth.classList.add(options.classes.elementThird); - elementDateUpMonth.classList.add(options.classes.dateSelectorUp); - elementDateUpMonth.innerHTML = arrow; + var downButton = function downButton(onclick) { + return button(arrow, [options.classes.button, options.classes.elementThird], onclick); + }; - var elementDateUpDay = document.createElement('div'); - elementDateUpDay.classList.add(options.classes.button); - elementDateUpDay.classList.add(options.classes.elementThird); - elementDateUpDay.classList.add(options.classes.dateSelectorUp); - elementDateUpDay.innerHTML = arrow; + var upButton = function upButton(onclick) { + var element = downButton(onclick); + element.classList.add(options.classes.dateSelectorUp); + return element; + }; - var elementDateUpYear = document.createElement('div'); - elementDateUpYear.classList.add(options.classes.button); - elementDateUpYear.classList.add(options.classes.elementThird); - elementDateUpYear.classList.add(options.classes.dateSelectorUp); - elementDateUpYear.innerHTML = arrow; + var elementDateUpMonth = upButton(function () { + return updateMonth(1); + }); + var elementDateUpDay = upButton(function () { + return updateDay(1); + }); + var elementDateUpYear = upButton(function () { + return updateYear(1); + }); - elementDateMonth.classList.add(options.classes.element); - elementDateMonth.classList.add(options.classes.elementThird); elementDateMonth.innerHTML = options.dateMonths[value.getMonth()]; - elementDateDay.classList.add(options.classes.element); - elementDateDay.classList.add(options.classes.elementThird); elementDateDay.setAttribute('contentEditable', true); elementDateDay.addEventListener('input', handleDayInput); elementDateDay.addEventListener('blur', handleBlur); elementDateDay.innerHTML = value.getDate(); - elementDateYear.classList.add(options.classes.element); - elementDateYear.classList.add(options.classes.elementThird); elementDateYear.setAttribute('contentEditable', true); elementDateYear.addEventListener('input', handleYearInput); elementDateYear.addEventListener('blur', handleBlur); elementDateYear.innerHTML = value.getFullYear(); - var elementDateDownMonth = document.createElement('div'); - elementDateDownMonth.classList.add(options.classes.button); - elementDateDownMonth.classList.add(options.classes.elementThird); - elementDateDownMonth.innerHTML = arrow; - - var elementDateDownDay = document.createElement('div'); - elementDateDownDay.classList.add(options.classes.button); - elementDateDownDay.classList.add(options.classes.elementThird); - elementDateDownDay.innerHTML = arrow; - - var elementDateDownYear = document.createElement('div'); - elementDateDownYear.classList.add(options.classes.button); - elementDateDownYear.classList.add(options.classes.elementThird); - elementDateDownYear.innerHTML = arrow; - - elementDateUpMonth.onclick = function () { - return updateMonth(1); - }; - elementDateUpDay.onclick = function () { - return updateDay(1); - }; - elementDateUpYear.onclick = function () { - return updateYear(1); - }; - elementDateDownMonth.onclick = function () { + var elementDateDownMonth = downButton(function () { return updateMonth(-1); - }; - elementDateDownDay.onclick = function () { + }); + var elementDateDownDay = downButton(function () { return updateDay(-1); - }; - elementDateDownYear.onclick = function () { + }); + var elementDateDownYear = downButton(function () { return updateYear(-1); - }; + }); - var elementButtonLeft = document.createElement('div'); - elementButtonLeft.classList.add(options.classes.button); - elementButtonLeft.classList.add(options.classes.elementHalf); - elementButtonLeft.classList.add(options.classes.backgroundSuccess); - elementButtonLeft.innerHTML = submitText; - elementButtonLeft.onclick = function () { - removeFromDocument(id, position); + var elementButtonLeft = button(submitText, [options.classes.button, options.classes.elementHalf, options.classes.backgroundSuccess], function () { + removeFromDocument(element.id, position); removeOverlayFromDocument(); if (submitCallback) submitCallback(value);else if (submitCallbackArg) submitCallbackArg(value); - }; + }); - var elementButtonRight = document.createElement('div'); - elementButtonRight.classList.add(options.classes.button); - elementButtonRight.classList.add(options.classes.elementHalf); - elementButtonRight.classList.add(options.classes.backgroundError); - elementButtonRight.innerHTML = cancelText; - elementButtonRight.onclick = function () { - removeFromDocument(id, position); + var elementButtonRight = button(cancelText, [options.classes.button, options.classes.elementHalf, options.classes.backgroundError], function () { + removeFromDocument(element.id, position); removeOverlayFromDocument(); if (cancelCallback) cancelCallback(value);else if (cancelCallbackArg) cancelCallbackArg(value); - }; + }); elementDateSelectorInner.appendChild(elementDateUpMonth); elementDateSelectorInner.appendChild(elementDateUpDay); diff --git a/dist/notie.min.js b/dist/notie.min.js index 1f6cd08..44731ba 100644 --- a/dist/notie.min.js +++ b/dist/notie.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.notie=t():e.notie=t()}(this,function(){return function(e){function t(s){if(n[s])return n[s].exports;var a=n[s]={i:s,l:!1,exports:{}};return e[s].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,s){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:s})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=1)}([function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";(function(e){var n,s,a,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(c,o){"object"===i(t)&&"object"===i(e)?e.exports=o():(s=[],n=o,a="function"==typeof n?n.apply(t,s):n,!(void 0!==a&&(e.exports=a)))}(void 0,function(){return function(e){function t(s){if(n[s])return n[s].exports;var a=n[s]={i:s,l:!1,exports:{}};return e[s].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,s){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:s})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,n){function s(e,t){var n={};for(var s in e)t.indexOf(s)>=0||Object.prototype.hasOwnProperty.call(e,s)&&(n[s]=e[s]);return n}Object.defineProperty(t,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return"undefined"==typeof e?"undefined":i(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":"undefined"==typeof e?"undefined":i(e)},c=Object.assign||function(e){for(var t=1;t'+s+"",v.onclick=function(){return L(g,d)},v.listener=function(e){(b(e)||x(e))&&k()},y(v,d),i&&i<1&&(i=1),!o&&i&&u(i).then(function(){return L(g,d)})},E=t.force=function(e,t){var n=e.type,s=void 0===n?5:n,a=e.text,i=e.buttonText,c=void 0===i?"OK":i,o=e.callback,l=e.position,d=void 0===l?r.positions.force||d.top:l;p(),k();var u=document.createElement("div"),v=f();u.id=v;var x=document.createElement("div");x.classList.add(r.classes.textbox),x.classList.add(r.classes.backgroundInfo),x.innerHTML='
'+a+"
";var C=document.createElement("div");C.classList.add(r.classes.button),C.classList.add(m[s]),C.innerHTML=c,C.onclick=function(){L(v,d),h(),o?o():t&&t()},u.appendChild(x),u.appendChild(C),u.listener=function(e){b(e)&&C.click()},y(u,d),g()},T=t.confirm=function(e,t,n){var s=e.text,a=e.submitText,i=void 0===a?"Yes":a,c=e.cancelText,o=void 0===c?"Cancel":c,l=e.submitCallback,d=e.cancelCallback,u=e.position,m=void 0===u?r.positions.confirm||m.top:u;p(),k();var v=document.createElement("div"),C=f();v.id=C;var E=document.createElement("div");E.classList.add(r.classes.textbox),E.classList.add(r.classes.backgroundInfo),E.innerHTML='
'+s+"
";var T=document.createElement("div");T.classList.add(r.classes.button),T.classList.add(r.classes.elementHalf),T.classList.add(r.classes.backgroundSuccess),T.innerHTML=i,T.onclick=function(){L(C,m),h(),l?l():t&&t()};var M=document.createElement("div");M.classList.add(r.classes.button),M.classList.add(r.classes.elementHalf),M.classList.add(r.classes.backgroundError),M.innerHTML=o,M.onclick=function(){L(C,m),h(),d?d():n&&n()},v.appendChild(E),v.appendChild(T),v.appendChild(M),v.listener=function(e){b(e)?T.click():x(e)&&M.click()},y(v,m),g(v,m)},M=function(e,t,n){var i=e.text,c=e.submitText,o=void 0===c?"Submit":c,l=e.cancelText,d=void 0===l?"Cancel":l,u=e.submitCallback,m=e.cancelCallback,v=e.position,C=void 0===v?r.positions.input||C.top:v,E=s(e,["text","submitText","cancelText","submitCallback","cancelCallback","position"]);p(),k();var T=document.createElement("div"),M=f();T.id=M;var H=document.createElement("div");H.classList.add(r.classes.textbox),H.classList.add(r.classes.backgroundInfo),H.innerHTML='
'+i+"
";var S=document.createElement("input");S.classList.add(r.classes.inputField),S.setAttribute("autocapitalize",E.autocapitalize||"none"),S.setAttribute("autocomplete",E.autocomplete||"off"),S.setAttribute("autocorrect",E.autocorrect||"off"),S.setAttribute("autofocus",E.autofocus||"true"),S.setAttribute("inputmode",E.inputmode||"verbatim"),S.setAttribute("max",E.max||""),S.setAttribute("maxlength",E.maxlength||""),S.setAttribute("min",E.min||""),S.setAttribute("minlength",E.minlength||""),S.setAttribute("placeholder",E.placeholder||""),S.setAttribute("spellcheck",E.spellcheck||"default"),S.setAttribute("step",E.step||"any"),S.setAttribute("type",E.type||"text"),S.value=E.value||"",E.allowed&&(S.oninput=function(){var e=void 0;if(Array.isArray(E.allowed)){for(var t="",n=E.allowed,s=0;s'+n+"",d.appendChild(v),c.forEach(function(e,t){var n=e.type,s=void 0===n?1:n,a=e.text,i=e.handler,o=document.createElement("div");o.classList.add(m[s]),o.classList.add(r.classes.button),o.classList.add(r.classes.selectChoice);var p=c[t+1];p&&!p.type&&(p.type=1),p&&p.type===s&&o.classList.add(r.classes.selectChoiceRepeated),o.innerHTML=a,o.onclick=function(){L(u,l),h(),i()},d.appendChild(o)});var b=document.createElement("div");b.classList.add(r.classes.backgroundNeutral),b.classList.add(r.classes.button),b.innerHTML=a,b.onclick=function(){L(u,l),h(),i?i():t&&t()},d.appendChild(b),d.listener=function(e){x(e)&&b.click()},y(d,l),g(d,l)},S=t.date=function(e,t,n){var s=e.value,a=void 0===s?new Date:s,i=e.submitText,c=void 0===i?"OK":i,o=e.cancelText,l=void 0===o?"Cancel":o,d=e.submitCallback,u=e.cancelCallback,m=e.position,v=void 0===m?r.positions.date||v.top:m;p(),k();var C="▾",E=document.createElement("div"),T=document.createElement("div"),M=document.createElement("div"),H=function(e){E.innerHTML=r.dateMonths[e.getMonth()],T.innerHTML=e.getDate(),M.innerHTML=e.getFullYear()},S=function(e){var t=new Date(a.getFullYear(),a.getMonth()+1,0).getDate(),n=e.target.textContent.replace(/^0+/,"").replace(/[^\d]/g,"").slice(0,2);Number(n)>t&&(n=t.toString()),e.target.textContent=n,Number(n)<1&&(n="1"),a.setDate(Number(n))},w=function(e){var t=e.target.textContent.replace(/^0+/,"").replace(/[^\d]/g,"").slice(0,4);e.target.textContent=t,a.setFullYear(Number(t))},O=function(e){H(a)},A=function(e){var t=new Date(a.getFullYear(),a.getMonth()+e+1,0).getDate();a.getDate()>t&&a.setDate(t),a.setMonth(a.getMonth()+e),H(a)},D=function(e){a.setDate(a.getDate()+e),H(a)},I=function(e){var t=a.getFullYear()+e;t<0?a.setFullYear(0):a.setFullYear(a.getFullYear()+e),H(a)},j=document.createElement("div"),N=f();j.id=N;var P=document.createElement("div");P.classList.add(r.classes.backgroundInfo);var F=document.createElement("div");F.classList.add(r.classes.dateSelectorInner);var Y=document.createElement("div");Y.classList.add(r.classes.button),Y.classList.add(r.classes.elementThird),Y.classList.add(r.classes.dateSelectorUp),Y.innerHTML=C;var _=document.createElement("div");_.classList.add(r.classes.button),_.classList.add(r.classes.elementThird),_.classList.add(r.classes.dateSelectorUp),_.innerHTML=C;var z=document.createElement("div");z.classList.add(r.classes.button),z.classList.add(r.classes.elementThird),z.classList.add(r.classes.dateSelectorUp),z.innerHTML=C,E.classList.add(r.classes.element),E.classList.add(r.classes.elementThird),E.innerHTML=r.dateMonths[a.getMonth()],T.classList.add(r.classes.element),T.classList.add(r.classes.elementThird),T.setAttribute("contentEditable",!0),T.addEventListener("input",S),T.addEventListener("blur",O),T.innerHTML=a.getDate(),M.classList.add(r.classes.element),M.classList.add(r.classes.elementThird),M.setAttribute("contentEditable",!0),M.addEventListener("input",w),M.addEventListener("blur",O),M.innerHTML=a.getFullYear();var U=document.createElement("div");U.classList.add(r.classes.button),U.classList.add(r.classes.elementThird),U.innerHTML=C;var B=document.createElement("div");B.classList.add(r.classes.button),B.classList.add(r.classes.elementThird),B.innerHTML=C;var J=document.createElement("div");J.classList.add(r.classes.button),J.classList.add(r.classes.elementThird),J.innerHTML=C,Y.onclick=function(){return A(1)},_.onclick=function(){return D(1)},z.onclick=function(){return I(1)},U.onclick=function(){return A(-1)},B.onclick=function(){return D(-1)},J.onclick=function(){return I(-1)};var R=document.createElement("div");R.classList.add(r.classes.button),R.classList.add(r.classes.elementHalf),R.classList.add(r.classes.backgroundSuccess),R.innerHTML=c,R.onclick=function(){L(N,v),h(),d?d(a):t&&t(a)};var W=document.createElement("div");W.classList.add(r.classes.button),W.classList.add(r.classes.elementHalf),W.classList.add(r.classes.backgroundError),W.innerHTML=l,W.onclick=function(){L(N,v),h(),u?u(a):n&&n(a)},F.appendChild(Y),F.appendChild(_),F.appendChild(z),F.appendChild(E),F.appendChild(T),F.appendChild(M),F.appendChild(U),F.appendChild(B),F.appendChild(J),P.appendChild(F),j.appendChild(P),j.appendChild(R),j.appendChild(W),j.listener=function(e){b(e)?R.click():x(e)&&W.click()},y(j,v),g(j,v)};t.default={alert:C,force:E,confirm:T,input:M,select:H,date:S,setOptions:l,hideAlerts:k}}])})}).call(t,n(0)(e))}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.notie=t():e.notie=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=1)}([function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";(function(e){var n,o,r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(a,s){"object"===i(t)&&"object"===i(e)?e.exports=s():(o=[],n=s,r="function"==typeof n?n.apply(t,o):n,!(void 0!==r&&(e.exports=r)))}(void 0,function(){return function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,n){function o(e,t){var n={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"===i(Symbol.iterator)?function(e){return"undefined"==typeof e?"undefined":i(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":"undefined"==typeof e?"undefined":i(e)},a=Object.assign||function(e){for(var t=1;t'+e+"",n},O=t.alert=function(e){var t=e.type,n=void 0===t?4:t,o=e.text,r=e.time,i=void 0===r?c.alertTime:r,a=e.stay,s=void 0!==a&&a,l=e.position,u=void 0===l?c.positions.alert||u.top:l;p(),S();var f=M(o,[c.classes.textbox,b[n],c.classes.alert]);f.position=u,f.onclick=function(){return h(f.id,u)},f.listener=function(e){(m(e)||y(e))&&S()},g(f,u),i&&i<1&&(i=1),!s&&i&&d(i).then(function(){return h(f.id,u)})},A=t.force=function(e,t){var n=e.type,o=void 0===n?5:n,r=e.text,i=e.buttonText,a=void 0===i?"OK":i,s=e.callback,l=e.position,u=void 0===l?c.positions.force||u.top:l;p(),S();var d=T(),f=M(r,[c.classes.textbox,c.classes.backgroundInfo]),v=w(a,[c.classes.button,b[o]],function(){h(d.id,u),C(),s?s():t&&t()});d.appendChild(f),d.appendChild(v),d.listener=function(e){m(e)&&v.click()},g(d,u),k()},E=t.confirm=function(e,t,n){var o=e.text,r=e.submitText,i=void 0===r?"Yes":r,a=e.cancelText,s=void 0===a?"Cancel":a,l=e.submitCallback,u=e.cancelCallback,d=e.position,f=void 0===d?c.positions.confirm||f.top:d;p(),S();var b=T(),v=M(o,[c.classes.textbox,c.classes.backgroundInfo]),x=w(i,[c.classes.button,c.classes.elementHalf,c.classes.backgroundSuccess],function(){h(b.id,f),C(),l?l():t&&t()}),O=w(s,[c.classes.button,c.classes.elementHalf,c.classes.backgroundError],function(){h(b.id,f),C(),u?u():n&&n()});b.appendChild(v),b.appendChild(x),b.appendChild(O),b.listener=function(e){m(e)?x.click():y(e)&&O.click()},g(b,f),k(b,f)},D=function(e,t,n){var i=e.text,a=e.submitText,s=void 0===a?"Submit":a,l=e.cancelText,u=void 0===l?"Cancel":l,d=e.submitCallback,f=e.cancelCallback,b=e.position,v=void 0===b?c.positions.input||v.top:b,O=o(e,["text","submitText","cancelText","submitCallback","cancelCallback","position"]);p(),S();var A=T(),E=M(i,[c.classes.textbox,c.classes.backgroundInfo]),D=x("input",[c.classes.inputField]);D.setAttribute("autocapitalize",O.autocapitalize||"none"),D.setAttribute("autocomplete",O.autocomplete||"off"),D.setAttribute("autocorrect",O.autocorrect||"off"),D.setAttribute("autofocus",O.autofocus||"true"),D.setAttribute("inputmode",O.inputmode||"verbatim"),D.setAttribute("max",O.max||""),D.setAttribute("maxlength",O.maxlength||""),D.setAttribute("min",O.min||""),D.setAttribute("minlength",O.minlength||""),D.setAttribute("placeholder",O.placeholder||""),D.setAttribute("spellcheck",O.spellcheck||"default"),D.setAttribute("step",O.step||"any"),D.setAttribute("type",O.type||"text"),D.value=O.value||"",O.allowed&&(D.oninput=function(){var e=void 0;if(Array.isArray(O.allowed)){for(var t="",n=O.allowed,o=0;ot&&(n=t.toString()),e.target.textContent=n,Number(n)<1&&(n="1"),r.setDate(Number(n))},L=function(e){var t=e.target.textContent.replace(/^0+/,"").replace(/[^\d]/g,"").slice(0,4);e.target.textContent=t,r.setFullYear(Number(t))},H=function(e){E(r)},j=function(e){var t=new Date(r.getFullYear(),r.getMonth()+e+1,0).getDate();r.getDate()>t&&r.setDate(t),r.setMonth(r.getMonth()+e),E(r)},I=function(e){r.setDate(r.getDate()+e),E(r)},N=function(e){var t=r.getFullYear()+e;t<0?r.setFullYear(0):r.setFullYear(r.getFullYear()+e),E(r)},P=T(),F=T([c.classes.backgroundInfo]),Y=T([c.classes.dateSelectorInner]),_=function(e){return w(v,[c.classes.button,c.classes.elementThird],e)},z=function(e){var t=_(e);return t.classList.add(c.classes.dateSelectorUp),t},B=z(function(){return j(1)}),J=z(function(){return I(1)}),R=z(function(){return N(1)});M.innerHTML=c.dateMonths[r.getMonth()],O.setAttribute("contentEditable",!0),O.addEventListener("input",D),O.addEventListener("blur",H),O.innerHTML=r.getDate(),A.setAttribute("contentEditable",!0),A.addEventListener("input",L),A.addEventListener("blur",H),A.innerHTML=r.getFullYear();var W=_(function(){return j(-1)}),K=_(function(){return I(-1)}),U=_(function(){return N(-1)}),Z=w(a,[c.classes.button,c.classes.elementHalf,c.classes.backgroundSuccess],function(){h(P.id,b),C(),u?u(r):t&&t(r)}),q=w(l,[c.classes.button,c.classes.elementHalf,c.classes.backgroundError],function(){h(P.id,b),C(),d?d(r):n&&n(r)});Y.appendChild(B),Y.appendChild(J),Y.appendChild(R),Y.appendChild(M),Y.appendChild(O),Y.appendChild(A),Y.appendChild(W),Y.appendChild(K),Y.appendChild(U),F.appendChild(Y),P.appendChild(F),P.appendChild(Z),P.appendChild(q),P.listener=function(e){m(e)?Z.click():y(e)&&q.click()},g(P,b),k(P,b)};t.default={alert:O,force:A,confirm:E,input:D,select:L,date:H,setOptions:l,hideAlerts:S}}])})}).call(t,n(0)(e))}])}); \ No newline at end of file diff --git a/src/notie.js b/src/notie.js index 03d1d27..641eacc 100644 --- a/src/notie.js +++ b/src/notie.js @@ -101,6 +101,14 @@ const getTransition = () => ( const enterClicked = event => event.keyCode === 13 const escapeClicked = event => event.keyCode === 27 +const makeElement = (elemType, classes) => { + const element = document.createElement(elemType) + if (classes) { + classes.forEach(c => element.classList.add(c)) + } + return element +} + const addToDocument = (element, position) => { element.classList.add(options.classes.container) element.style[position] = '-10000px' @@ -128,10 +136,11 @@ const removeFromDocument = (id, position) => { } const addOverlayToDocument = (owner, position) => { - const element = document.createElement('div') + const element = makeElement('div', [ + options.classes.overlay, + options.classes.backgroundOverlay + ]) element.id = options.ids.overlay - element.classList.add(options.classes.overlay) - element.classList.add(options.classes.backgroundOverlay) element.style.opacity = 0 if (owner && options.overlayClickDismiss) { element.onclick = () => { @@ -167,6 +176,29 @@ export const hideAlerts = callback => { } } +// ==================== +// shared elements +// ==================== + +const div = classes => { + const element = makeElement('div', classes) + element.id = generateRandomId() + return element +} + +const button = (innerHTML, classes, onclick) => { + const element = makeElement('div', classes) + element.innerHTML = innerHTML + element.onclick = onclick + return element +} + +const textbox = (text, classes) => { + const element = div(classes) + element.innerHTML = `
${text}
` + return element +} + // ==================== // exports // ==================== @@ -181,15 +213,13 @@ export const alert = ({ blur() hideAlerts() - const element = document.createElement('div') - const id = generateRandomId() - element.id = id + const element = textbox(text, [ + options.classes.textbox, + typeToClassLookup[type], + options.classes.alert + ]) element.position = position - element.classList.add(options.classes.textbox) - element.classList.add(typeToClassLookup[type]) - element.classList.add(options.classes.alert) - element.innerHTML = `
${text}
` - element.onclick = () => removeFromDocument(id, position) + element.onclick = () => removeFromDocument(element.id, position) element.listener = event => { if (enterClicked(event) || escapeClicked(event)) hideAlerts() @@ -198,7 +228,7 @@ export const alert = ({ addToDocument(element, position) if (time && time < 1) time = 1 - if (!stay && time) wait(time).then(() => removeFromDocument(id, position)) + if (!stay && time) wait(time).then(() => removeFromDocument(element.id, position)) } export const force = ({ @@ -211,25 +241,22 @@ export const force = ({ blur() hideAlerts() - const element = document.createElement('div') - const id = generateRandomId() - element.id = id - - const elementText = document.createElement('div') - elementText.classList.add(options.classes.textbox) - elementText.classList.add(options.classes.backgroundInfo) - elementText.innerHTML = `
${text}
` - - const elementButton = document.createElement('div') - elementButton.classList.add(options.classes.button) - elementButton.classList.add(typeToClassLookup[type]) - elementButton.innerHTML = buttonText - elementButton.onclick = () => { - removeFromDocument(id, position) + const element = div() + + const elementText = textbox(text, [ + options.classes.textbox, + options.classes.backgroundInfo + ]) + + const elementButton = button(buttonText, [ + options.classes.button, + typeToClassLookup[type] + ], () => { + removeFromDocument(element.id, position) removeOverlayFromDocument() if (callback) callback() else if (callbackArg) callbackArg() - } + }) element.appendChild(elementText) element.appendChild(elementButton) @@ -254,38 +281,34 @@ export const confirm = ({ blur() hideAlerts() - const element = document.createElement('div') - const id = generateRandomId() - element.id = id - - const elementText = document.createElement('div') - elementText.classList.add(options.classes.textbox) - elementText.classList.add(options.classes.backgroundInfo) - elementText.innerHTML = `
${text}
` - - const elementButtonLeft = document.createElement('div') - elementButtonLeft.classList.add(options.classes.button) - elementButtonLeft.classList.add(options.classes.elementHalf) - elementButtonLeft.classList.add(options.classes.backgroundSuccess) - elementButtonLeft.innerHTML = submitText - elementButtonLeft.onclick = () => { - removeFromDocument(id, position) + const element = div() + + const elementText = textbox(text, [ + options.classes.textbox, + options.classes.backgroundInfo + ]) + + const elementButtonLeft = button(submitText, [ + options.classes.button, + options.classes.elementHalf, + options.classes.backgroundSuccess + ], () => { + removeFromDocument(element.id, position) removeOverlayFromDocument() if (submitCallback) submitCallback() else if (submitCallbackArg) submitCallbackArg() - } + }) - const elementButtonRight = document.createElement('div') - elementButtonRight.classList.add(options.classes.button) - elementButtonRight.classList.add(options.classes.elementHalf) - elementButtonRight.classList.add(options.classes.backgroundError) - elementButtonRight.innerHTML = cancelText - elementButtonRight.onclick = () => { - removeFromDocument(id, position) + const elementButtonRight = button(cancelText, [ + options.classes.button, + options.classes.elementHalf, + options.classes.backgroundError + ], () => { + removeFromDocument(element.id, position) removeOverlayFromDocument() if (cancelCallback) cancelCallback() else if (cancelCallbackArg) cancelCallbackArg() - } + }) element.appendChild(elementText) element.appendChild(elementButtonLeft) @@ -313,17 +336,16 @@ export const input = ({ blur() hideAlerts() - const element = document.createElement('div') - const id = generateRandomId() - element.id = id + const element = div() - const elementText = document.createElement('div') - elementText.classList.add(options.classes.textbox) - elementText.classList.add(options.classes.backgroundInfo) - elementText.innerHTML = `
${text}
` + const elementText = textbox(text, [ + options.classes.textbox, + options.classes.backgroundInfo + ]) - const elementInput = document.createElement('input') - elementInput.classList.add(options.classes.inputField) + const elementInput = makeElement('input', [ + options.classes.inputField + ]) elementInput.setAttribute('autocapitalize', settings.autocapitalize || 'none') elementInput.setAttribute('autocomplete', settings.autocomplete || 'off') @@ -362,29 +384,27 @@ export const input = ({ } } - const elementButtonLeft = document.createElement('div') - elementButtonLeft.classList.add(options.classes.button) - elementButtonLeft.classList.add(options.classes.elementHalf) - elementButtonLeft.classList.add(options.classes.backgroundSuccess) - elementButtonLeft.innerHTML = submitText - elementButtonLeft.onclick = () => { - removeFromDocument(id, position) + const elementButtonLeft = button(submitText, [ + options.classes.button, + options.classes.elementHalf, + options.classes.backgroundSuccess + ], () => { + removeFromDocument(element.id, position) removeOverlayFromDocument() if (submitCallback) submitCallback(elementInput.value) else if (submitCallbackArg) submitCallbackArg(elementInput.value) - } + }) - const elementButtonRight = document.createElement('div') - elementButtonRight.classList.add(options.classes.button) - elementButtonRight.classList.add(options.classes.elementHalf) - elementButtonRight.classList.add(options.classes.backgroundError) - elementButtonRight.innerHTML = cancelText - elementButtonRight.onclick = () => { - removeFromDocument(id, position) + const elementButtonRight = button(cancelText, [ + options.classes.button, + options.classes.elementHalf, + options.classes.backgroundError + ], () => { + removeFromDocument(element.id, position) removeOverlayFromDocument() if (cancelCallback) cancelCallback(elementInput.value) else if (cancelCallbackArg) cancelCallbackArg(elementInput.value) - } + }) element.appendChild(elementText) element.appendChild(elementInput) @@ -413,22 +433,21 @@ export const select = ({ blur() hideAlerts() - const element = document.createElement('div') - const id = generateRandomId() - element.id = id + const element = div() - const elementText = document.createElement('div') - elementText.classList.add(options.classes.textbox) - elementText.classList.add(options.classes.backgroundInfo) - elementText.innerHTML = `
${text}
` + const elementText = textbox(text, [ + options.classes.textbox, + options.classes.backgroundInfo + ]) element.appendChild(elementText) choices.forEach(({ type = 1, text, handler }, index) => { - const elementChoice = document.createElement('div') - elementChoice.classList.add(typeToClassLookup[type]) - elementChoice.classList.add(options.classes.button) - elementChoice.classList.add(options.classes.selectChoice) + const elementChoice = div([ + typeToClassLookup[type], + options.classes.button, + options.classes.selectChoice + ]) const nextChoice = choices[index + 1] if (nextChoice && !nextChoice.type) nextChoice.type = 1 @@ -438,7 +457,7 @@ export const select = ({ elementChoice.innerHTML = text elementChoice.onclick = () => { - removeFromDocument(id, position) + removeFromDocument(element.id, position) removeOverlayFromDocument() handler() } @@ -446,16 +465,15 @@ export const select = ({ element.appendChild(elementChoice) }) - const elementCancel = document.createElement('div') - elementCancel.classList.add(options.classes.backgroundNeutral) - elementCancel.classList.add(options.classes.button) - elementCancel.innerHTML = cancelText - elementCancel.onclick = () => { - removeFromDocument(id, position) + const elementCancel = button(cancelText, [ + options.classes.backgroundNeutral, + options.classes.button + ], () => { + removeFromDocument(element.id, position) removeOverlayFromDocument() if (cancelCallback) cancelCallback() else if (cancelCallbackArg) cancelCallbackArg() - } + }) element.appendChild(elementCancel) @@ -481,9 +499,14 @@ export const date = ({ const arrow = '▾' - const elementDateMonth = document.createElement('div') - const elementDateDay = document.createElement('div') - const elementDateYear = document.createElement('div') + const elementDateThird = () => div([ + options.classes.element, + options.classes.elementThird + ]) + + const elementDateMonth = elementDateThird() + const elementDateDay = elementDateThird() + const elementDateYear = elementDateThird() const setValueHTML = date => { elementDateMonth.innerHTML = options.dateMonths[date.getMonth()] @@ -543,97 +566,62 @@ export const date = ({ setValueHTML(value) } - const element = document.createElement('div') - const id = generateRandomId() - element.id = id - - const elementDateSelector = document.createElement('div') - elementDateSelector.classList.add(options.classes.backgroundInfo) - - const elementDateSelectorInner = document.createElement('div') - elementDateSelectorInner.classList.add(options.classes.dateSelectorInner) + const element = div() + const elementDateSelector = div([options.classes.backgroundInfo]) + const elementDateSelectorInner = div([options.classes.dateSelectorInner]) - const elementDateUpMonth = document.createElement('div') - elementDateUpMonth.classList.add(options.classes.button) - elementDateUpMonth.classList.add(options.classes.elementThird) - elementDateUpMonth.classList.add(options.classes.dateSelectorUp) - elementDateUpMonth.innerHTML = arrow + const downButton = onclick => button(arrow, [ + options.classes.button, + options.classes.elementThird + ], onclick) - const elementDateUpDay = document.createElement('div') - elementDateUpDay.classList.add(options.classes.button) - elementDateUpDay.classList.add(options.classes.elementThird) - elementDateUpDay.classList.add(options.classes.dateSelectorUp) - elementDateUpDay.innerHTML = arrow + const upButton = onclick => { + const element = downButton(onclick) + element.classList.add(options.classes.dateSelectorUp) + return element + } - const elementDateUpYear = document.createElement('div') - elementDateUpYear.classList.add(options.classes.button) - elementDateUpYear.classList.add(options.classes.elementThird) - elementDateUpYear.classList.add(options.classes.dateSelectorUp) - elementDateUpYear.innerHTML = arrow + const elementDateUpMonth = upButton(() => updateMonth(1)) + const elementDateUpDay = upButton(() => updateDay(1)) + const elementDateUpYear = upButton(() => updateYear(1)) - elementDateMonth.classList.add(options.classes.element) - elementDateMonth.classList.add(options.classes.elementThird) elementDateMonth.innerHTML = options.dateMonths[value.getMonth()] - elementDateDay.classList.add(options.classes.element) - elementDateDay.classList.add(options.classes.elementThird) elementDateDay.setAttribute('contentEditable', true) elementDateDay.addEventListener('input', handleDayInput) elementDateDay.addEventListener('blur', handleBlur) elementDateDay.innerHTML = value.getDate() - elementDateYear.classList.add(options.classes.element) - elementDateYear.classList.add(options.classes.elementThird) elementDateYear.setAttribute('contentEditable', true) elementDateYear.addEventListener('input', handleYearInput) elementDateYear.addEventListener('blur', handleBlur) elementDateYear.innerHTML = value.getFullYear() - const elementDateDownMonth = document.createElement('div') - elementDateDownMonth.classList.add(options.classes.button) - elementDateDownMonth.classList.add(options.classes.elementThird) - elementDateDownMonth.innerHTML = arrow - - const elementDateDownDay = document.createElement('div') - elementDateDownDay.classList.add(options.classes.button) - elementDateDownDay.classList.add(options.classes.elementThird) - elementDateDownDay.innerHTML = arrow - - const elementDateDownYear = document.createElement('div') - elementDateDownYear.classList.add(options.classes.button) - elementDateDownYear.classList.add(options.classes.elementThird) - elementDateDownYear.innerHTML = arrow - - elementDateUpMonth.onclick = () => updateMonth(1) - elementDateUpDay.onclick = () => updateDay(1) - elementDateUpYear.onclick = () => updateYear(1) - elementDateDownMonth.onclick = () => updateMonth(-1) - elementDateDownDay.onclick = () => updateDay(-1) - elementDateDownYear.onclick = () => updateYear(-1) - - const elementButtonLeft = document.createElement('div') - elementButtonLeft.classList.add(options.classes.button) - elementButtonLeft.classList.add(options.classes.elementHalf) - elementButtonLeft.classList.add(options.classes.backgroundSuccess) - elementButtonLeft.innerHTML = submitText - elementButtonLeft.onclick = () => { - removeFromDocument(id, position) + const elementDateDownMonth = downButton(() => updateMonth(-1)) + const elementDateDownDay = downButton(() => updateDay(-1)) + const elementDateDownYear = downButton(() => updateYear(-1)) + + const elementButtonLeft = button(submitText, [ + options.classes.button, + options.classes.elementHalf, + options.classes.backgroundSuccess + ], () => { + removeFromDocument(element.id, position) removeOverlayFromDocument() if (submitCallback) submitCallback(value) else if (submitCallbackArg) submitCallbackArg(value) - } + }) - const elementButtonRight = document.createElement('div') - elementButtonRight.classList.add(options.classes.button) - elementButtonRight.classList.add(options.classes.elementHalf) - elementButtonRight.classList.add(options.classes.backgroundError) - elementButtonRight.innerHTML = cancelText - elementButtonRight.onclick = () => { - removeFromDocument(id, position) + const elementButtonRight = button(cancelText, [ + options.classes.button, + options.classes.elementHalf, + options.classes.backgroundError + ], () => { + removeFromDocument(element.id, position) removeOverlayFromDocument() if (cancelCallback) cancelCallback(value) else if (cancelCallbackArg) cancelCallbackArg(value) - } + }) elementDateSelectorInner.appendChild(elementDateUpMonth) elementDateSelectorInner.appendChild(elementDateUpDay)