notie.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. (function webpackUniversalModuleDefinition(root, factory) {
  2. if(typeof exports === 'object' && typeof module === 'object')
  3. module.exports = factory();
  4. else if(typeof define === 'function' && define.amd)
  5. define([], factory);
  6. else if(typeof exports === 'object')
  7. exports["notie"] = factory();
  8. else
  9. root["notie"] = factory();
  10. })(this, function() {
  11. return /******/ (function(modules) { // webpackBootstrap
  12. /******/ // The module cache
  13. /******/ var installedModules = {};
  14. /******/ // The require function
  15. /******/ function __webpack_require__(moduleId) {
  16. /******/ // Check if module is in cache
  17. /******/ if(installedModules[moduleId])
  18. /******/ return installedModules[moduleId].exports;
  19. /******/ // Create a new module (and put it into the cache)
  20. /******/ var module = installedModules[moduleId] = {
  21. /******/ i: moduleId,
  22. /******/ l: false,
  23. /******/ exports: {}
  24. /******/ };
  25. /******/ // Execute the module function
  26. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  27. /******/ // Flag the module as loaded
  28. /******/ module.l = true;
  29. /******/ // Return the exports of the module
  30. /******/ return module.exports;
  31. /******/ }
  32. /******/ // expose the modules object (__webpack_modules__)
  33. /******/ __webpack_require__.m = modules;
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/ // identity function for calling harmony imports with the correct context
  37. /******/ __webpack_require__.i = function(value) { return value; };
  38. /******/ // define getter function for harmony exports
  39. /******/ __webpack_require__.d = function(exports, name, getter) {
  40. /******/ if(!__webpack_require__.o(exports, name)) {
  41. /******/ Object.defineProperty(exports, name, {
  42. /******/ configurable: false,
  43. /******/ enumerable: true,
  44. /******/ get: getter
  45. /******/ });
  46. /******/ }
  47. /******/ };
  48. /******/ // getDefaultExport function for compatibility with non-harmony modules
  49. /******/ __webpack_require__.n = function(module) {
  50. /******/ var getter = module && module.__esModule ?
  51. /******/ function getDefault() { return module['default']; } :
  52. /******/ function getModuleExports() { return module; };
  53. /******/ __webpack_require__.d(getter, 'a', getter);
  54. /******/ return getter;
  55. /******/ };
  56. /******/ // Object.prototype.hasOwnProperty.call
  57. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  58. /******/ // __webpack_public_path__
  59. /******/ __webpack_require__.p = "";
  60. /******/ // Load entry module and return exports
  61. /******/ return __webpack_require__(__webpack_require__.s = 0);
  62. /******/ })
  63. /************************************************************************/
  64. /******/ ([
  65. /* 0 */
  66. /***/ (function(module, exports, __webpack_require__) {
  67. "use strict";
  68. Object.defineProperty(exports, "__esModule", {
  69. value: true
  70. });
  71. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  72. var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
  73. function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
  74. // ====================
  75. // options
  76. // ====================
  77. var positions = {
  78. top: 'top',
  79. bottom: 'bottom'
  80. };
  81. var options = {
  82. alertTime: 3,
  83. dateMonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
  84. overlayClickDismiss: true,
  85. overlayOpacity: 0.75,
  86. transitionCurve: 'ease',
  87. transitionDuration: 0.3,
  88. transitionSelector: 'all',
  89. classes: {
  90. container: 'notie-container',
  91. textbox: 'notie-textbox',
  92. textboxInner: 'notie-textbox-inner',
  93. button: 'notie-button',
  94. element: 'notie-element',
  95. elementHalf: 'notie-element-half',
  96. elementThird: 'notie-element-third',
  97. overlay: 'notie-overlay',
  98. backgroundSuccess: 'notie-background-success',
  99. backgroundWarning: 'notie-background-warning',
  100. backgroundError: 'notie-background-error',
  101. backgroundInfo: 'notie-background-info',
  102. backgroundNeutral: 'notie-background-neutral',
  103. backgroundOverlay: 'notie-background-overlay',
  104. alert: 'notie-alert',
  105. inputField: 'notie-input-field',
  106. selectChoiceRepeated: 'notie-select-choice-repeated',
  107. dateSelectorInner: 'notie-date-selector-inner',
  108. dateSelectorUp: 'notie-date-selector-up'
  109. },
  110. ids: {
  111. overlay: 'notie-overlay'
  112. },
  113. positions: {
  114. alert: positions.top,
  115. force: positions.top,
  116. confirm: positions.top,
  117. input: positions.top,
  118. select: positions.bottom,
  119. date: positions.top
  120. }
  121. };
  122. var setOptions = exports.setOptions = function setOptions(newOptions) {
  123. options = _extends({}, options, newOptions, {
  124. classes: _extends({}, options.classes, newOptions.classes),
  125. ids: _extends({}, options.ids, newOptions.ids),
  126. positions: _extends({}, options.positions, newOptions.positions)
  127. });
  128. };
  129. // ====================
  130. // helpers
  131. // ====================
  132. var tick = function tick() {
  133. return new Promise(function (resolve) {
  134. return setTimeout(resolve, 0);
  135. });
  136. };
  137. var wait = function wait(time) {
  138. return new Promise(function (resolve) {
  139. return setTimeout(resolve, time * 1000);
  140. });
  141. };
  142. var blur = function blur() {
  143. document.activeElement && document.activeElement.blur();
  144. };
  145. var generateRandomId = function generateRandomId() {
  146. // RFC4122 version 4 compliant UUID
  147. var id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  148. var r = Math.random() * 16 | 0;
  149. var v = c === 'x' ? r : r & 0x3 | 0x8;
  150. return v.toString(16);
  151. });
  152. return 'notie-' + id;
  153. };
  154. var typeToClassLookup = {
  155. 1: options.classes.backgroundSuccess,
  156. success: options.classes.backgroundSuccess,
  157. 2: options.classes.backgroundWarning,
  158. warning: options.classes.backgroundWarning,
  159. 3: options.classes.backgroundError,
  160. error: options.classes.backgroundError,
  161. 4: options.classes.backgroundInfo,
  162. info: options.classes.backgroundInfo,
  163. 5: options.classes.backgroundNeutral,
  164. neutral: options.classes.backgroundNeutral
  165. };
  166. var getTransition = function getTransition() {
  167. return options.transitionSelector + ' ' + options.transitionDuration + 's ' + options.transitionCurve;
  168. };
  169. var enterClicked = function enterClicked(event) {
  170. return event.keyCode === 13;
  171. };
  172. var escapeClicked = function escapeClicked(event) {
  173. return event.keyCode === 27;
  174. };
  175. var addToDocument = function addToDocument(element, position) {
  176. element.classList.add(options.classes.container);
  177. element.style[position] = '-10000px';
  178. document.body.appendChild(element);
  179. element.style[position] = '-' + element.offsetHeight + 'px';
  180. if (element.listener) window.addEventListener('keydown', element.listener);
  181. tick().then(function () {
  182. element.style.transition = getTransition();
  183. element.style[position] = 0;
  184. });
  185. };
  186. var removeFromDocument = function removeFromDocument(id, position) {
  187. var element = document.getElementById(id);
  188. if (!element) return;
  189. element.style[position] = '-' + element.offsetHeight + 'px';
  190. if (element.listener) window.removeEventListener('keydown', element.listener);
  191. wait(options.transitionDuration).then(function () {
  192. if (element.parentNode) element.parentNode.removeChild(element);
  193. });
  194. };
  195. var addOverlayToDocument = function addOverlayToDocument(owner, position) {
  196. var element = document.createElement('div');
  197. element.id = options.ids.overlay;
  198. element.classList.add(options.classes.overlay);
  199. element.classList.add(options.classes.backgroundOverlay);
  200. element.style.opacity = 0;
  201. if (owner && options.overlayClickDismiss) {
  202. element.onclick = function () {
  203. removeFromDocument(owner.id, position);
  204. removeOverlayFromDocument();
  205. };
  206. }
  207. document.body.appendChild(element);
  208. tick().then(function () {
  209. element.style.transition = getTransition();
  210. element.style.opacity = options.overlayOpacity;
  211. });
  212. };
  213. var removeOverlayFromDocument = function removeOverlayFromDocument() {
  214. var element = document.getElementById(options.ids.overlay);
  215. element.style.opacity = 0;
  216. wait(options.transitionDuration).then(function () {
  217. if (element.parentNode) element.parentNode.removeChild(element);
  218. });
  219. };
  220. var hideAlerts = exports.hideAlerts = function hideAlerts(callback) {
  221. var alertsShowing = document.getElementsByClassName(options.classes.alert);
  222. if (alertsShowing.length) {
  223. for (var i = 0; i < alertsShowing.length; i++) {
  224. var _alert = alertsShowing[i];
  225. removeFromDocument(_alert.id, _alert.position);
  226. }
  227. if (callback) wait(options.transitionDuration).then(function () {
  228. return callback();
  229. });
  230. }
  231. };
  232. // ====================
  233. // exports
  234. // ====================
  235. var alert = exports.alert = function alert(_ref) {
  236. var _ref$type = _ref.type,
  237. type = _ref$type === undefined ? 4 : _ref$type,
  238. text = _ref.text,
  239. _ref$time = _ref.time,
  240. time = _ref$time === undefined ? options.alertTime : _ref$time,
  241. _ref$stay = _ref.stay,
  242. stay = _ref$stay === undefined ? false : _ref$stay,
  243. _ref$position = _ref.position,
  244. position = _ref$position === undefined ? options.positions.alert || position.top : _ref$position;
  245. blur();
  246. hideAlerts();
  247. var element = document.createElement('div');
  248. var id = generateRandomId();
  249. element.id = id;
  250. element.position = position;
  251. element.classList.add(options.classes.textbox);
  252. element.classList.add(typeToClassLookup[type]);
  253. element.classList.add(options.classes.alert);
  254. element.innerHTML = '<div class="' + options.classes.textboxInner + '">' + text + '</div>';
  255. element.onclick = function () {
  256. return removeFromDocument(id, position);
  257. };
  258. element.listener = function (event) {
  259. if (enterClicked(event) || escapeClicked(event)) hideAlerts();
  260. };
  261. addToDocument(element, position);
  262. if (time && time < 1) time = 1;
  263. if (!stay && time) wait(time).then(function () {
  264. return removeFromDocument(id, position);
  265. });
  266. };
  267. var force = exports.force = function force(_ref2, callbackArg) {
  268. var _ref2$type = _ref2.type,
  269. type = _ref2$type === undefined ? 5 : _ref2$type,
  270. text = _ref2.text,
  271. _ref2$buttonText = _ref2.buttonText,
  272. buttonText = _ref2$buttonText === undefined ? 'OK' : _ref2$buttonText,
  273. callback = _ref2.callback,
  274. _ref2$position = _ref2.position,
  275. position = _ref2$position === undefined ? options.positions.force || position.top : _ref2$position;
  276. blur();
  277. hideAlerts();
  278. var element = document.createElement('div');
  279. var id = generateRandomId();
  280. element.id = id;
  281. var elementText = document.createElement('div');
  282. elementText.classList.add(options.classes.textbox);
  283. elementText.classList.add(options.classes.backgroundInfo);
  284. elementText.innerHTML = '<div class="' + options.classes.textboxInner + '">' + text + '</div>';
  285. var elementButton = document.createElement('div');
  286. elementButton.classList.add(options.classes.button);
  287. elementButton.classList.add(typeToClassLookup[type]);
  288. elementButton.innerHTML = buttonText;
  289. elementButton.onclick = function () {
  290. removeFromDocument(id, position);
  291. removeOverlayFromDocument();
  292. if (callback) callback();else if (callbackArg) callbackArg();
  293. };
  294. element.appendChild(elementText);
  295. element.appendChild(elementButton);
  296. element.listener = function (event) {
  297. if (enterClicked(event)) elementButton.click();
  298. };
  299. addToDocument(element, position);
  300. addOverlayToDocument();
  301. };
  302. var confirm = exports.confirm = function confirm(_ref3, submitCallbackArg, cancelCallbackArg) {
  303. var text = _ref3.text,
  304. _ref3$submitText = _ref3.submitText,
  305. submitText = _ref3$submitText === undefined ? 'Yes' : _ref3$submitText,
  306. _ref3$cancelText = _ref3.cancelText,
  307. cancelText = _ref3$cancelText === undefined ? 'Cancel' : _ref3$cancelText,
  308. submitCallback = _ref3.submitCallback,
  309. cancelCallback = _ref3.cancelCallback,
  310. _ref3$position = _ref3.position,
  311. position = _ref3$position === undefined ? options.positions.confirm || position.top : _ref3$position;
  312. blur();
  313. hideAlerts();
  314. var element = document.createElement('div');
  315. var id = generateRandomId();
  316. element.id = id;
  317. var elementText = document.createElement('div');
  318. elementText.classList.add(options.classes.textbox);
  319. elementText.classList.add(options.classes.backgroundInfo);
  320. elementText.innerHTML = '<div class="' + options.classes.textboxInner + '">' + text + '</div>';
  321. var elementButtonLeft = document.createElement('div');
  322. elementButtonLeft.classList.add(options.classes.button);
  323. elementButtonLeft.classList.add(options.classes.elementHalf);
  324. elementButtonLeft.classList.add(options.classes.backgroundSuccess);
  325. elementButtonLeft.innerHTML = submitText;
  326. elementButtonLeft.onclick = function () {
  327. removeFromDocument(id, position);
  328. removeOverlayFromDocument();
  329. if (submitCallback) submitCallback();else if (submitCallbackArg) submitCallbackArg();
  330. };
  331. var elementButtonRight = document.createElement('div');
  332. elementButtonRight.classList.add(options.classes.button);
  333. elementButtonRight.classList.add(options.classes.elementHalf);
  334. elementButtonRight.classList.add(options.classes.backgroundError);
  335. elementButtonRight.innerHTML = cancelText;
  336. elementButtonRight.onclick = function () {
  337. removeFromDocument(id, position);
  338. removeOverlayFromDocument();
  339. if (cancelCallback) cancelCallback();else if (cancelCallbackArg) cancelCallbackArg();
  340. };
  341. element.appendChild(elementText);
  342. element.appendChild(elementButtonLeft);
  343. element.appendChild(elementButtonRight);
  344. element.listener = function (event) {
  345. if (enterClicked(event)) elementButtonLeft.click();else if (escapeClicked(event)) elementButtonRight.click();
  346. };
  347. addToDocument(element, position);
  348. addOverlayToDocument(element, position);
  349. };
  350. var input = function input(_ref4, submitCallbackArg, cancelCallbackArg) {
  351. var text = _ref4.text,
  352. _ref4$submitText = _ref4.submitText,
  353. submitText = _ref4$submitText === undefined ? 'Submit' : _ref4$submitText,
  354. _ref4$cancelText = _ref4.cancelText,
  355. cancelText = _ref4$cancelText === undefined ? 'Cancel' : _ref4$cancelText,
  356. submitCallback = _ref4.submitCallback,
  357. cancelCallback = _ref4.cancelCallback,
  358. _ref4$position = _ref4.position,
  359. position = _ref4$position === undefined ? options.positions.input || position.top : _ref4$position,
  360. settings = _objectWithoutProperties(_ref4, ['text', 'submitText', 'cancelText', 'submitCallback', 'cancelCallback', 'position']);
  361. blur();
  362. hideAlerts();
  363. var element = document.createElement('div');
  364. var id = generateRandomId();
  365. element.id = id;
  366. var elementText = document.createElement('div');
  367. elementText.classList.add(options.classes.textbox);
  368. elementText.classList.add(options.classes.backgroundInfo);
  369. elementText.innerHTML = '<div class="' + options.classes.textboxInner + '">' + text + '</div>';
  370. var elementInput = document.createElement('input');
  371. elementInput.classList.add(options.classes.inputField);
  372. elementInput.setAttribute('autocapitalize', settings.autocapitalize || 'none');
  373. elementInput.setAttribute('autocomplete', settings.autocomplete || 'off');
  374. elementInput.setAttribute('autocorrect', settings.autocorrect || 'off');
  375. elementInput.setAttribute('autofocus', settings.autofocus || 'true');
  376. elementInput.setAttribute('inputmode', settings.inputmode || 'verbatim');
  377. elementInput.setAttribute('max', settings.max || '');
  378. elementInput.setAttribute('maxlength', settings.maxlength || '');
  379. elementInput.setAttribute('min', settings.min || '');
  380. elementInput.setAttribute('minlength', settings.minlength || '');
  381. elementInput.setAttribute('placeholder', settings.placeholder || '');
  382. elementInput.setAttribute('spellcheck', settings.spellcheck || 'default');
  383. elementInput.setAttribute('step', settings.step || 'any');
  384. elementInput.setAttribute('type', settings.type || 'text');
  385. elementInput.value = settings.value || '';
  386. // As-you-type input restrictions
  387. if (settings.allowed) {
  388. elementInput.oninput = function () {
  389. var regex = void 0;
  390. if (Array.isArray(settings.allowed)) {
  391. var regexString = '';
  392. var allowed = settings.allowed;
  393. for (var i = 0; i < allowed.length; i++) {
  394. if (allowed[i] === 'an') regexString += '0-9a-zA-Z';else if (allowed[i] === 'a') regexString += 'a-zA-Z';else if (allowed[i] === 'n') regexString += '0-9';
  395. if (allowed[i] === 's') regexString += ' ';
  396. }
  397. regex = new RegExp('[^' + regexString + ']', 'g');
  398. } else if (_typeof(settings.allowed) === 'object') {
  399. regex = settings.allowed;
  400. }
  401. elementInput.value = elementInput.value.replace(regex, '');
  402. };
  403. }
  404. var elementButtonLeft = document.createElement('div');
  405. elementButtonLeft.classList.add(options.classes.button);
  406. elementButtonLeft.classList.add(options.classes.elementHalf);
  407. elementButtonLeft.classList.add(options.classes.backgroundSuccess);
  408. elementButtonLeft.innerHTML = submitText;
  409. elementButtonLeft.onclick = function () {
  410. removeFromDocument(id, position);
  411. removeOverlayFromDocument();
  412. if (submitCallback) submitCallback(elementInput.value);else if (submitCallbackArg) submitCallbackArg(elementInput.value);
  413. };
  414. var elementButtonRight = document.createElement('div');
  415. elementButtonRight.classList.add(options.classes.button);
  416. elementButtonRight.classList.add(options.classes.elementHalf);
  417. elementButtonRight.classList.add(options.classes.backgroundError);
  418. elementButtonRight.innerHTML = cancelText;
  419. elementButtonRight.onclick = function () {
  420. removeFromDocument(id, position);
  421. removeOverlayFromDocument();
  422. if (cancelCallback) cancelCallback(elementInput.value);else if (cancelCallbackArg) cancelCallbackArg(elementInput.value);
  423. };
  424. element.appendChild(elementText);
  425. element.appendChild(elementInput);
  426. element.appendChild(elementButtonLeft);
  427. element.appendChild(elementButtonRight);
  428. element.listener = function (event) {
  429. if (enterClicked(event)) elementButtonLeft.click();else if (escapeClicked(event)) elementButtonRight.click();
  430. };
  431. addToDocument(element, position);
  432. elementInput.focus();
  433. addOverlayToDocument(element, position);
  434. };
  435. exports.input = input;
  436. var select = exports.select = function select(_ref5, cancelCallbackArg) {
  437. var text = _ref5.text,
  438. _ref5$cancelText = _ref5.cancelText,
  439. cancelText = _ref5$cancelText === undefined ? 'Cancel' : _ref5$cancelText,
  440. cancelCallback = _ref5.cancelCallback,
  441. choices = _ref5.choices,
  442. _ref5$position = _ref5.position,
  443. position = _ref5$position === undefined ? options.positions.select || position.top : _ref5$position;
  444. blur();
  445. hideAlerts();
  446. var element = document.createElement('div');
  447. var id = generateRandomId();
  448. element.id = id;
  449. var elementText = document.createElement('div');
  450. elementText.classList.add(options.classes.textbox);
  451. elementText.classList.add(options.classes.backgroundInfo);
  452. elementText.innerHTML = '<div class="' + options.classes.textboxInner + '">' + text + '</div>';
  453. element.appendChild(elementText);
  454. choices.forEach(function (_ref6, index) {
  455. var _ref6$type = _ref6.type,
  456. type = _ref6$type === undefined ? 1 : _ref6$type,
  457. text = _ref6.text,
  458. handler = _ref6.handler;
  459. var elementChoice = document.createElement('div');
  460. elementChoice.classList.add(typeToClassLookup[type]);
  461. elementChoice.classList.add(options.classes.button);
  462. elementChoice.classList.add(options.classes.selectChoice);
  463. var nextChoice = choices[index + 1];
  464. if (nextChoice && !nextChoice.type) nextChoice.type = 1;
  465. if (nextChoice && nextChoice.type === type) {
  466. elementChoice.classList.add(options.classes.selectChoiceRepeated);
  467. }
  468. elementChoice.innerHTML = text;
  469. elementChoice.onclick = function () {
  470. removeFromDocument(id, position);
  471. removeOverlayFromDocument();
  472. handler();
  473. };
  474. element.appendChild(elementChoice);
  475. });
  476. var elementCancel = document.createElement('div');
  477. elementCancel.classList.add(options.classes.backgroundNeutral);
  478. elementCancel.classList.add(options.classes.button);
  479. elementCancel.innerHTML = cancelText;
  480. elementCancel.onclick = function () {
  481. removeFromDocument(id, position);
  482. removeOverlayFromDocument();
  483. if (cancelCallback) cancelCallback();else if (cancelCallbackArg) cancelCallbackArg();
  484. };
  485. element.appendChild(elementCancel);
  486. element.listener = function (event) {
  487. if (escapeClicked(event)) elementCancel.click();
  488. };
  489. addToDocument(element, position);
  490. addOverlayToDocument(element, position);
  491. };
  492. var date = exports.date = function date(_ref7, submitCallbackArg, cancelCallbackArg) {
  493. var _ref7$value = _ref7.value,
  494. value = _ref7$value === undefined ? new Date() : _ref7$value,
  495. _ref7$submitText = _ref7.submitText,
  496. submitText = _ref7$submitText === undefined ? 'OK' : _ref7$submitText,
  497. _ref7$cancelText = _ref7.cancelText,
  498. cancelText = _ref7$cancelText === undefined ? 'Cancel' : _ref7$cancelText,
  499. submitCallback = _ref7.submitCallback,
  500. cancelCallback = _ref7.cancelCallback,
  501. _ref7$position = _ref7.position,
  502. position = _ref7$position === undefined ? options.positions.date || position.top : _ref7$position;
  503. blur();
  504. hideAlerts();
  505. var arrow = '&#9662';
  506. var elementDateMonth = document.createElement('div');
  507. var elementDateDay = document.createElement('div');
  508. var elementDateYear = document.createElement('div');
  509. var setValueHTML = function setValueHTML(date) {
  510. elementDateMonth.innerHTML = options.dateMonths[date.getMonth()];
  511. elementDateDay.innerHTML = date.getDate();
  512. elementDateYear.innerHTML = date.getFullYear();
  513. };
  514. var handleDayInput = function handleDayInput(event) {
  515. var daysInMonth = new Date(value.getFullYear(), value.getMonth() + 1, 0).getDate();
  516. var day = event.target.textContent.replace(/^0+/, '').replace(/[^\d]/g, '').slice(0, 2);
  517. if (Number(day) > daysInMonth) day = daysInMonth.toString();
  518. event.target.textContent = day;
  519. if (Number(day) < 1) day = '1';
  520. value.setDate(Number(day));
  521. };
  522. var handleYearInput = function handleYearInput(event) {
  523. var year = event.target.textContent.replace(/^0+/, '').replace(/[^\d]/g, '').slice(0, 4);
  524. event.target.textContent = year;
  525. value.setFullYear(Number(year));
  526. };
  527. var handleBlur = function handleBlur(event) {
  528. setValueHTML(value);
  529. };
  530. var updateMonth = function updateMonth(amount) {
  531. var daysInNextMonth = new Date(value.getFullYear(), value.getMonth() + amount + 1, 0).getDate();
  532. if (value.getDate() > daysInNextMonth) value.setDate(daysInNextMonth);
  533. value.setMonth(value.getMonth() + amount);
  534. setValueHTML(value);
  535. };
  536. var updateDay = function updateDay(amount) {
  537. value.setDate(value.getDate() + amount);
  538. setValueHTML(value);
  539. };
  540. var updateYear = function updateYear(amount) {
  541. var nextYear = value.getFullYear() + amount;
  542. if (nextYear < 0) value.setFullYear(0);else value.setFullYear(value.getFullYear() + amount);
  543. setValueHTML(value);
  544. };
  545. var element = document.createElement('div');
  546. var id = generateRandomId();
  547. element.id = id;
  548. var elementDateSelector = document.createElement('div');
  549. elementDateSelector.classList.add(options.classes.backgroundInfo);
  550. var elementDateSelectorInner = document.createElement('div');
  551. elementDateSelectorInner.classList.add(options.classes.dateSelectorInner);
  552. var elementDateUpMonth = document.createElement('div');
  553. elementDateUpMonth.classList.add(options.classes.button);
  554. elementDateUpMonth.classList.add(options.classes.elementThird);
  555. elementDateUpMonth.classList.add(options.classes.dateSelectorUp);
  556. elementDateUpMonth.innerHTML = arrow;
  557. var elementDateUpDay = document.createElement('div');
  558. elementDateUpDay.classList.add(options.classes.button);
  559. elementDateUpDay.classList.add(options.classes.elementThird);
  560. elementDateUpDay.classList.add(options.classes.dateSelectorUp);
  561. elementDateUpDay.innerHTML = arrow;
  562. var elementDateUpYear = document.createElement('div');
  563. elementDateUpYear.classList.add(options.classes.button);
  564. elementDateUpYear.classList.add(options.classes.elementThird);
  565. elementDateUpYear.classList.add(options.classes.dateSelectorUp);
  566. elementDateUpYear.innerHTML = arrow;
  567. elementDateMonth.classList.add(options.classes.element);
  568. elementDateMonth.classList.add(options.classes.elementThird);
  569. elementDateMonth.innerHTML = options.dateMonths[value.getMonth()];
  570. elementDateDay.classList.add(options.classes.element);
  571. elementDateDay.classList.add(options.classes.elementThird);
  572. elementDateDay.setAttribute('contentEditable', true);
  573. elementDateDay.addEventListener('input', handleDayInput);
  574. elementDateDay.addEventListener('blur', handleBlur);
  575. elementDateDay.innerHTML = value.getDate();
  576. elementDateYear.classList.add(options.classes.element);
  577. elementDateYear.classList.add(options.classes.elementThird);
  578. elementDateYear.setAttribute('contentEditable', true);
  579. elementDateYear.addEventListener('input', handleYearInput);
  580. elementDateYear.addEventListener('blur', handleBlur);
  581. elementDateYear.innerHTML = value.getFullYear();
  582. var elementDateDownMonth = document.createElement('div');
  583. elementDateDownMonth.classList.add(options.classes.button);
  584. elementDateDownMonth.classList.add(options.classes.elementThird);
  585. elementDateDownMonth.innerHTML = arrow;
  586. var elementDateDownDay = document.createElement('div');
  587. elementDateDownDay.classList.add(options.classes.button);
  588. elementDateDownDay.classList.add(options.classes.elementThird);
  589. elementDateDownDay.innerHTML = arrow;
  590. var elementDateDownYear = document.createElement('div');
  591. elementDateDownYear.classList.add(options.classes.button);
  592. elementDateDownYear.classList.add(options.classes.elementThird);
  593. elementDateDownYear.innerHTML = arrow;
  594. elementDateUpMonth.onclick = function () {
  595. return updateMonth(1);
  596. };
  597. elementDateUpDay.onclick = function () {
  598. return updateDay(1);
  599. };
  600. elementDateUpYear.onclick = function () {
  601. return updateYear(1);
  602. };
  603. elementDateDownMonth.onclick = function () {
  604. return updateMonth(-1);
  605. };
  606. elementDateDownDay.onclick = function () {
  607. return updateDay(-1);
  608. };
  609. elementDateDownYear.onclick = function () {
  610. return updateYear(-1);
  611. };
  612. var elementButtonLeft = document.createElement('div');
  613. elementButtonLeft.classList.add(options.classes.button);
  614. elementButtonLeft.classList.add(options.classes.elementHalf);
  615. elementButtonLeft.classList.add(options.classes.backgroundSuccess);
  616. elementButtonLeft.innerHTML = submitText;
  617. elementButtonLeft.onclick = function () {
  618. removeFromDocument(id, position);
  619. removeOverlayFromDocument();
  620. if (submitCallback) submitCallback(value);else if (submitCallbackArg) submitCallbackArg(value);
  621. };
  622. var elementButtonRight = document.createElement('div');
  623. elementButtonRight.classList.add(options.classes.button);
  624. elementButtonRight.classList.add(options.classes.elementHalf);
  625. elementButtonRight.classList.add(options.classes.backgroundError);
  626. elementButtonRight.innerHTML = cancelText;
  627. elementButtonRight.onclick = function () {
  628. removeFromDocument(id, position);
  629. removeOverlayFromDocument();
  630. if (cancelCallback) cancelCallback(value);else if (cancelCallbackArg) cancelCallbackArg(value);
  631. };
  632. elementDateSelectorInner.appendChild(elementDateUpMonth);
  633. elementDateSelectorInner.appendChild(elementDateUpDay);
  634. elementDateSelectorInner.appendChild(elementDateUpYear);
  635. elementDateSelectorInner.appendChild(elementDateMonth);
  636. elementDateSelectorInner.appendChild(elementDateDay);
  637. elementDateSelectorInner.appendChild(elementDateYear);
  638. elementDateSelectorInner.appendChild(elementDateDownMonth);
  639. elementDateSelectorInner.appendChild(elementDateDownDay);
  640. elementDateSelectorInner.appendChild(elementDateDownYear);
  641. elementDateSelector.appendChild(elementDateSelectorInner);
  642. element.appendChild(elementDateSelector);
  643. element.appendChild(elementButtonLeft);
  644. element.appendChild(elementButtonRight);
  645. element.listener = function (event) {
  646. if (enterClicked(event)) elementButtonLeft.click();else if (escapeClicked(event)) elementButtonRight.click();
  647. };
  648. addToDocument(element, position);
  649. addOverlayToDocument(element, position);
  650. };
  651. exports.default = {
  652. alert: alert,
  653. force: force,
  654. confirm: confirm,
  655. input: input,
  656. select: select,
  657. date: date,
  658. setOptions: setOptions,
  659. hideAlerts: hideAlerts
  660. };
  661. /***/ })
  662. /******/ ]);
  663. });