From a6c9786253c9a9d770aa75da189b21c516f62657 Mon Sep 17 00:00:00 2001 From: Daniel Aristizabal Date: Tue, 20 Aug 2019 17:24:41 -0500 Subject: [PATCH 01/13] =?UTF-8?q?Botones=20a=20espa=C3=B1ol=20y=20agrego?= =?UTF-8?q?=20botones=20AM=20y=20PM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- dist/grudus-timepicker.es5.js | 4 ++-- dist/grudus-timepicker.es5.js.map | 2 +- src/js/meta/clockHtml.js | 6 ++++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 637d92c..dd8b429 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea/ -node_modules/ \ No newline at end of file +node_modules/ +package-lock.json diff --git a/dist/grudus-timepicker.es5.js b/dist/grudus-timepicker.es5.js index ed9ae8e..bf6847e 100644 --- a/dist/grudus-timepicker.es5.js +++ b/dist/grudus-timepicker.es5.js @@ -1,4 +1,4 @@ -/*! grudus-timepicker | (c) 2017-2017 +/*! grudus-timepicker | (c) 2017-2019 grudus | Apache-2.0 license (see LICENSE) */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Timepicker=t()}(this,function(){"use strict";function e(e){if(e){if(e instanceof Date)return i(e);if(r.test(e.hours)&&u.test(e.minutes))return{hours:parseInt(e.hours),minutes:parseInt(e.minutes)};if(a.test(e))return t(e);throw new TypeError("INVALID FORMAT: {"+JSON.stringify(e)+"}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields")}return i(new Date)}function t(e){var t=a.exec(e);return{hours:parseInt(t[1]),minutes:parseInt(t[2])}}function i(e){return{hours:e.getHours(),minutes:e.getMinutes()}}function n(e){return new Promise(function(t){setTimeout(t,e)})}function o(e){document.getElementById(f.headerId).style.background=e.headerBackground,document.getElementById(f.headerId).style.color=e.headerColor,document.getElementById(f.wrapperId).style.background=e.wrapperBackground,document.getElementById(f.clockId).style.background=e.clockBackground,document.getElementById(f.handId).style.background=e.handColor,document.getElementById(f.dotId).style.background=e.handColor,document.getElementById(f.buttonsId).style.background=e.footerBackground,document.getElementById(f.submitId).style.color=e.submitColor,document.getElementById(f.cancelId).style.color=e.cancelColor,s(m.clockItem,e.clockItemColor),s(m.inner,e.clockItemInnerColor),s(m.outer,e.handColor,"borderColor")}function s(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"color",n=Array.from(document.getElementsByClassName(e)),o=!0,s=!1,c=void 0;try{for(var l,r=n[Symbol.iterator]();!(o=(l=r.next()).done);o=!0)l.value.style[i]=t}catch(e){s=!0,c=e}finally{try{!o&&r.return&&r.return()}finally{if(s)throw c}}}function c(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};l();var i=Object.assign({},k.clockConfig,t),n=e(i.time),s=new b(i,n);o(i),s.onStart()}function l(){if(document.getElementById(k.clockId))throw Error("There is already one running grudus-timepicker instance!");var e=document.createElement("div");e.id=k.clockId,e.innerHTML=h,document.body.appendChild(e)}var r=/^([0-1]?[0-9]|2[0-3])$/,u=/^([0-5]?[0-9])$/,a=/^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/,d=function(t){var i=e(t);return(i.hours<10?"0"+i.hours:i.hours)+":"+(i.minutes<10?"0"+i.minutes:i.minutes)},h="
\n
\n
\n 21\n :\n 37\n
\n
\n\n\n
\n
\n
\n
\n
\n
\n\n\n
\n \n \n
\n\n
",m={clock:"g-clock",clockItem:"g-clock-item",inner:"g-clock-inner",outer:"g-clock-outer",item:"g-clock-item",hand:"g-hand-of-a-clock",fadeOut:"g-fade-out",selected:"g-selected",active:"g-active",submit:"g-submit",cancel:"g-cancel",hour:"g-hour",minute:"g-minute"},f={headerId:"g-head",hoursId:"g-hours",minutesId:"g-minutes",clockId:"g-clock",innerId:"g-clock-inner",wrapperId:"g-clock-wrapper",dotId:"g-middle-dot",handId:"g-hand-of-a-clock",buttonsId:"g-buttons",submitId:"g-time-submit",cancelId:"g-time-cancel"},k={clockId:"grudus-clock",clockConfig:{onSubmit:function(){},onCancel:function(){},headerBackground:"#1976D2",headerColor:"#c7d6e1",headerSelected:"#ffffff",wrapperBackground:"#f0fff0",footerBackground:"#f0fff0",submitColor:"#1976D2",cancelColor:"#1976D2",clockBackground:"#CFD8DC",clockItemColor:"#212121",clockItemInnerColor:"#212121",handColor:"#1976D2"},FaceType:{HOURS:"hours",MINUTES:"minutes"}},g=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},p=function(){function e(e,t){for(var i=0;i-1}}]),e}(),I=function(){function e(t,i,n){g(this,e),this.displayed=["12","1","2","3","4","5","6","7","8","9","10","11"],this.displayedInner=["00","13","14","15","16","17","18","19","20","21","22","23"],this.type=k.FaceType.MINUTES,this.selected=void 0,this.options=t.options,this.items=t,this.hours=i,this.updateHours=n}return p(e,[{key:"onEnter",value:function(){this.items.innerClockElem.style.display="block";var e=this.hours<13&&0!==this.hours,t=this.hours%12;this.selected=e?this.items.clockItems[t]:this.items.innerClockItems[t],this.colorSelected(),this.updateHours(this.hours,30*t,e?this.items.radius:this.items.radius-50)}},{key:"onLeave",value:function(){this.items.innerClockElem.style.display="none",this.selected&&(this.removeSelected(),this.selected=void 0)}},{key:"selectTime",value:function(e,t){this.selected&&this.removeSelected();var i=Math.round(e/30)%12;this.selected=(t===this.items.innerClockElem?this.items.innerClockItems:this.items.clockItems)[i],this.colorSelected(),this.hours=parseInt(this.selected.innerText);var n=30*Math.round(e/30);this.updateHours(this.hours,n,t===this.items.innerClockElem?this.items.radius-50:this.items.radius)}},{key:"colorSelected",value:function(){this.selected.style.background=this.options.handColor,this.selected.style.color="#ffffff"}},{key:"removeSelected",value:function(){this.selected.style.background="transparent",this.selected.style.color=this.isInner()?this.options.clockItemInnerColor:this.options.clockItemColor}},{key:"isInner",value:function(){return Array.from(this.items.innerClockItems).indexOf(this.selected)>-1}}]),e}();Promise.delay=function(e,t){return t||(t=e,e=function(){}),n(t).then(e)},Promise.prototype.delay=function(e,t){return this.then(function(){return Promise.delay(e,t)})};var C={toRadians:function(e){return e*(Math.PI/180)},toDegrees:function(e){return e*(180/Math.PI)},findMousePosition:function(e,t){var i=t.getBoundingClientRect();return{x:e.clientX-i.left,y:e.clientY-i.top}}},E=function(){function e(t,i){g(this,e),this.clockElem=t,this.innerClockElem=i,this.size={},this.middle={}}return p(e,[{key:"create",value:function(t,i,n,o){e.doCreate(t,this.clockElem,function(e){return e.classList.add(m.item)}),e.doCreate(i,this.innerClockElem,function(e,t){e.classList.add(m.item,m.inner),e.innerText=o.displayedInner[t]});for(var s=0;s<60;s++){var c=document.createElement("span");c.classList.add(m.outer),n.push(c),this.clockElem.appendChild(c)}}},{key:"calculateSize",value:function(t,i,n){this.size.width=this.clockElem.offsetWidth,this.size.height=this.clockElem.offsetHeight,this.middle.x=this.size.width/2,this.middle.y=this.size.height/2,this.itemsRadius=this.size.width/2-20;var o=this.innerClockElem.offsetWidth/2,s=this.innerClockElem.offsetHeight/2;e.doCalculateSize(this.middle.x,this.middle.y,this.itemsRadius,t),e.doCalculateSize(o,s,this.itemsRadius-40,i),e.doCalculateSize(this.middle.x,this.middle.y,this.itemsRadius,n)}}],[{key:"doCreate",value:function(e,t,i){for(var n=0;n<12;n++){var o=document.createElement("span");i(o,n),e.push(o),t.appendChild(o)}}},{key:"doCalculateSize",value:function(e,t,i,n){for(var o=360/n.length,s=0;s1&&void 0!==arguments[1]?arguments[1]:this.itemsRadius;this.handOfAClock.style.transform="rotate("+(e-90)+"deg)",this.handOfAClock.style.width=t+"px"}},{key:"toggleToHours",value:function(){this.minutesFace.onLeave(),this.toggleTime(this.hoursFace)}},{key:"toggleToMinutes",value:function(){this.hoursFace.onLeave(),this.toggleTime(this.minutesFace)}},{key:"toggleTime",value:function(e){var t=this;this.currentFace!==e&&(this.onEachClockElement(function(e){return e.classList.add(m.fadeOut)}),this.handOfAClock.classList.add(m.fadeOut),Promise.delay(function(){t.onEachClockElement(function(e){return e.classList.remove(m.fadeOut)}),t.handOfAClock.classList.remove(m.fadeOut),t.changeDisplayed(e.displayed),t.currentFace=e,t.onEachClockElement(function(e){return t.removeSelected(e)}),e.onEnter()},300))}},{key:"removeSelected",value:function(e){e.classList.remove(m.selected),e.style.background="transparent",e.style.color=this.options.clockItemColor}}]),e}(),b=function(){function e(t,i){g(this,e),this.options=t,this.initView(),this.time=i,this.initElements()}return p(e,[{key:"initView",value:function(){var t=this;this.submitButton=document.getElementById(f.submitId),this.submitButton.onclick=function(){var i=t.time;i.formatted=function(){return d(i)},t.options.onSubmit(i),e.dispose()},this.cancelButton=document.getElementById(f.cancelId),this.cancelButton.onclick=function(){t.options.onCancel(),e.dispose()}}},{key:"initElements",value:function(){var e=this;this.header=new y({options:this.options,time:this.time,onHourClicked:function(){return e.toggleToHours()},onMinutesClicked:function(){return e.toggleToMinutes()}}),this.clockFace=new T(this.options,this.time,function(t,i){return e.onTimeUpdate(t,i)})}},{key:"onStart",value:function(){this.clockFace.onStart()}},{key:"toggleToHours",value:function(){this.clockFace.toggleToHours()}},{key:"toggleToMinutes",value:function(){this.clockFace.toggleToMinutes()}},{key:"onTimeUpdate",value:function(e,t){this.time=e,this.header.time=e,this.header.updateDisplayedTime(),t===k.FaceType.MINUTES&&this.header.toggleActiveToMinutes()}}],[{key:"dispose",value:function(){document.body.removeChild(document.getElementById(k.clockId))}}]),e}();return{showPicker:function(e){return c(e)},format:function(e){return d(e)}}}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Timepicker=t()}(this,function(){"use strict";var t=/^([0-1]?[0-9]|2[0-3])$/,i=/^([0-5]?[0-9])$/,n=/^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;function s(e){if(e){if(e instanceof Date)return o(e);if(t.test(e.hours)&&i.test(e.minutes))return{hours:parseInt(e.hours),minutes:parseInt(e.minutes)};if(n.test(e))return function(e){var t=n.exec(e);return{hours:parseInt(t[1]),minutes:parseInt(t[2])}}(e);throw new TypeError("INVALID FORMAT: {"+JSON.stringify(e)+"}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields")}return o(new Date)}function o(e){return{hours:e.getHours(),minutes:e.getMinutes()}}function c(e){var t=s(e);return(t.hours<10?"0"+t.hours:t.hours)+":"+(t.minutes<10?"0"+t.minutes:t.minutes)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r="
\n
\n
\n 21\n :\n 37\n \n \n
\n
\n\n\n
\n
\n
\n
\n
\n
\n\n\n
\n \n \n
\n\n
",u={clock:"g-clock",clockItem:"g-clock-item",inner:"g-clock-inner",outer:"g-clock-outer",item:"g-clock-item",hand:"g-hand-of-a-clock",fadeOut:"g-fade-out",selected:"g-selected",active:"g-active",submit:"g-submit",cancel:"g-cancel",hour:"g-hour",minute:"g-minute"},a={headerId:"g-head",hoursId:"g-hours",minutesId:"g-minutes",clockId:"g-clock",innerId:"g-clock-inner",wrapperId:"g-clock-wrapper",dotId:"g-middle-dot",handId:"g-hand-of-a-clock",buttonsId:"g-buttons",submitId:"g-time-submit",cancelId:"g-time-cancel"},d={clockId:"grudus-clock",clockConfig:{onSubmit:function(){},onCancel:function(){},headerBackground:"#1976D2",headerColor:"#c7d6e1",headerSelected:"#ffffff",wrapperBackground:"#f0fff0",footerBackground:"#f0fff0",submitColor:"#1976D2",cancelColor:"#1976D2",clockBackground:"#CFD8DC",clockItemColor:"#212121",clockItemInnerColor:"#212121",handColor:"#1976D2"},FaceType:{HOURS:"hours",MINUTES:"minutes"}},e=function(e,t,i){return t&&h(e.prototype,t),i&&h(e,i),e};function h(e,t){for(var i=0;i\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\" 21\\n\" +\r\n\" :\\n\" +\r\n\" 37\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"\\n\" +\r\n\"
\\n\" +\r\n\"
\" +\r\n\" \\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"\\n\" +\r\n\"
\\n\" +\r\n\" \\n\" +\r\n\" \\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"\";","const clockId = \"grudus-clock\";\r\n\r\nconst defaultConfig = {\r\n onSubmit: () => {\r\n },\r\n onCancel: () => {\r\n },\r\n headerBackground: \"#1976D2\",\r\n headerColor: \"#c7d6e1\",\r\n headerSelected: \"#ffffff\",\r\n wrapperBackground: \"#f0fff0\",\r\n footerBackground: \"#f0fff0\",\r\n submitColor: \"#1976D2\",\r\n cancelColor: \"#1976D2\",\r\n clockBackground: \"#CFD8DC\",\r\n clockItemColor: \"#212121\",\r\n clockItemInnerColor: \"#212121\",\r\n handColor: \"#1976D2\"\r\n};\r\n\r\nconst FaceType = {HOURS: \"hours\", MINUTES: \"minutes\"};\r\n\r\nconst css = {\r\n clock: \"g-clock\",\r\n clockItem: \"g-clock-item\",\r\n inner: \"g-clock-inner\",\r\n outer: \"g-clock-outer\",\r\n item: \"g-clock-item\",\r\n hand: \"g-hand-of-a-clock\",\r\n fadeOut: \"g-fade-out\",\r\n selected: \"g-selected\",\r\n active: \"g-active\",\r\n submit: \"g-submit\",\r\n cancel: \"g-cancel\",\r\n hour: \"g-hour\",\r\n minute: \"g-minute\"\r\n};\r\n\r\nconst DOM = {\r\n headerId: \"g-head\",\r\n hoursId: \"g-hours\",\r\n minutesId: \"g-minutes\",\r\n clockId: \"g-clock\",\r\n innerId: \"g-clock-inner\",\r\n wrapperId: \"g-clock-wrapper\",\r\n dotId: \"g-middle-dot\",\r\n handId: \"g-hand-of-a-clock\",\r\n buttonsId: \"g-buttons\",\r\n submitId: \"g-time-submit\",\r\n cancelId: \"g-time-cancel\"\r\n};\r\n\r\nexport default {clockId, clockConfig: defaultConfig, FaceType};\r\nexport {css, DOM};","import {DOM} from \"./meta/config\";\r\n\r\nexport default class ClockHeader {\r\n\r\n constructor(config) {\r\n this.options = config.options;\r\n this.time = config.time;\r\n this.onHourClicked = config.onHourClicked;\r\n this.onMinutesClicked = config.onMinutesClicked;\r\n\r\n this.initView();\r\n }\r\n\r\n initView() {\r\n this.headerHours = document.getElementById(DOM.hoursId);\r\n this.headerHours.onclick = () => {\r\n this.toggleActiveToHours();\r\n this.onHourClicked();\r\n };\r\n\r\n this.headerMinutes = document.getElementById(DOM.minutesId);\r\n this.headerMinutes.onclick = () => {\r\n this.toggleActiveToMinutes();\r\n this.onMinutesClicked();\r\n };\r\n\r\n this.updateDisplayedTime();\r\n this.toggleActiveToHours();\r\n }\r\n\r\n toggleActiveToMinutes() {\r\n this.toggleActive(this.headerHours, this.headerMinutes);\r\n }\r\n\r\n toggleActiveToHours() {\r\n this.toggleActive(this.headerMinutes, this.headerHours);\r\n }\r\n\r\n toggleActive(objectToRemoveClass, objectToAddClass) {\r\n objectToRemoveClass.style.color = this.options.headerColor;\r\n objectToAddClass.style.color = this.options.headerSelected;\r\n }\r\n\r\n updateDisplayedTime() {\r\n ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours);\r\n ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes);\r\n }\r\n\r\n static doUpdateDisplayedTime(node, value) {\r\n if (value < 10)\r\n node.innerText = \"0\" + value;\r\n else node.innerText = value;\r\n }\r\n}","import Config, {css} from \"../meta/config\";\r\n\r\nexport default class MinutesFace {\r\n\r\n constructor(items, initialMinutes, updateMinutes) {\r\n this.displayed = [\"00\", \"05\", \"10\", \"15\", \"20\", \"25\", \"30\", \"35\", \"40\", \"45\", \"50\", \"55\"];\r\n this.options = items.options;\r\n this.type = Config.FaceType.MINUTES;\r\n this.selected = undefined;\r\n this.items = items;\r\n this.minutes = initialMinutes;\r\n this.updateMinutes = updateMinutes;\r\n }\r\n\r\n onEnter() {\r\n this.selected = this.findSelected(this.minutes);\r\n this.colorSelected();\r\n this.updateMinutes(this.minutes, this.minutes * 6);\r\n }\r\n\r\n onLeave() {\r\n if (this.selected) {\r\n this.removeSelected();\r\n this.selected = undefined;\r\n }\r\n }\r\n\r\n selectTime(angle) {\r\n if (this.selected)\r\n this.removeSelected();\r\n\r\n const minute = Math.round(angle / 6) % 60;\r\n this.selected = this.findSelected(minute);\r\n this.colorSelected();\r\n this.minutes = minute;\r\n this.updateMinutes(this.minutes, angle);\r\n }\r\n\r\n findSelected(minute) {\r\n return (minute % 5 === 0) ? this.items.clockItems[minute / 5] : this.items.outerClockItems[minute];\r\n }\r\n\r\n colorSelected() {\r\n if (this.isOuter()) {\r\n this.selected.classList.add(css.selected);\r\n return;\r\n }\r\n this.selected.style.background = this.options.handColor;\r\n this.selected.style.color = \"whitesmoke\";\r\n }\r\n\r\n removeSelected() {\r\n if (this.isOuter()) {\r\n this.selected.classList.remove(css.selected);\r\n return;\r\n }\r\n this.selected.style.background = \"transparent\";\r\n this.selected.style.color = this.options.clockItemColor;\r\n }\r\n\r\n isOuter() {\r\n return this.items.outerClockItems.indexOf(this.selected) > -1;\r\n }\r\n}","import Config from \"../meta/config\";\r\n\r\nexport default class HoursFace {\r\n\r\n constructor(items, initialHours, updateHours) {\r\n this.displayed = [\"12\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\r\n this.displayedInner = [\"00\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\", \"23\"];\r\n this.type = Config.FaceType.MINUTES;\r\n this.selected = undefined;\r\n this.options = items.options;\r\n\r\n this.items = items;\r\n this.hours = initialHours;\r\n this.updateHours = updateHours;\r\n }\r\n\r\n onEnter() {\r\n this.items.innerClockElem.style.display = \"block\";\r\n const isInnerClock = this.hours < 13 && this.hours !== 0;\r\n const hoursIndex = this.hours % 12;\r\n this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex];\r\n this.colorSelected();\r\n\r\n this.updateHours(this.hours, hoursIndex * 30, isInnerClock ? this.items.radius : this.items.radius - 50);\r\n }\r\n\r\n onLeave() {\r\n this.items.innerClockElem.style.display = \"none\";\r\n if (this.selected) {\r\n this.removeSelected();\r\n this.selected = undefined;\r\n }\r\n }\r\n\r\n selectTime(angle, elem) {\r\n if (this.selected)\r\n this.removeSelected();\r\n\r\n const index = Math.round(angle / 30) % 12;\r\n this.selected = (elem === this.items.innerClockElem\r\n ? this.items.innerClockItems\r\n : this.items.clockItems)[index];\r\n\r\n this.colorSelected();\r\n this.hours = parseInt(this.selected.innerText);\r\n const selectedAngle = Math.round(angle / 30) * 30;\r\n\r\n this.updateHours(this.hours, selectedAngle,\r\n elem === this.items.innerClockElem ? this.items.radius - 50 : this.items.radius);\r\n }\r\n\r\n colorSelected() {\r\n this.selected.style.background = this.options.handColor;\r\n this.selected.style.color = \"#ffffff\";\r\n }\r\n\r\n removeSelected() {\r\n this.selected.style.background = \"transparent\";\r\n this.selected.style.color = this.isInner()\r\n ? this.options.clockItemInnerColor\r\n : this.options.clockItemColor;\r\n }\r\n\r\n isInner() {\r\n return Array.from(this.items.innerClockItems).indexOf(this.selected) > -1;\r\n }\r\n}","import Utils from \"../meta/utils\";\r\nimport {css} from \"../meta/config\";\r\n\r\nexport default class ClockFaceCreator {\r\n\r\n constructor(clockElem, innerClockElem) {\r\n this.clockElem = clockElem;\r\n this.innerClockElem = innerClockElem;\r\n this.size = {};\r\n this.middle = {};\r\n }\r\n\r\n create(clockItems, innerClockItems, outerClockItems, face) {\r\n ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item));\r\n ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => {\r\n span.classList.add(css.item, css.inner);\r\n span.innerText = face.displayedInner[i];\r\n });\r\n\r\n for (let i = 0; i < 60; i++) {\r\n const span = document.createElement(\"span\");\r\n span.classList.add(css.outer);\r\n outerClockItems.push(span);\r\n this.clockElem.appendChild(span);\r\n }\r\n }\r\n\r\n static doCreate(clockItems, clockElem, fun) {\r\n for (let i = 0; i < 12; i++) {\r\n const span = document.createElement(\"span\");\r\n fun(span, i);\r\n clockItems.push(span);\r\n clockElem.appendChild(span);\r\n }\r\n }\r\n\r\n calculateSize(clockItems, innerClockItems, outerClockItems) {\r\n this.size.width = this.clockElem.offsetWidth;\r\n this.size.height = this.clockElem.offsetHeight;\r\n this.middle.x = this.size.width / 2;\r\n this.middle.y = this.size.height / 2;\r\n this.itemsRadius = this.size.width / 2 - 20;\r\n\r\n const innerWidth = this.innerClockElem.offsetWidth;\r\n const innerHeight = this.innerClockElem.offsetHeight;\r\n const middleX = innerWidth / 2;\r\n const middleY = innerHeight / 2;\r\n\r\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems);\r\n ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems);\r\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems);\r\n }\r\n\r\n static doCalculateSize(middleX, middleY, radius, items) {\r\n const angleQuantum = 360 / items.length;\r\n for (let i = 0; i < items.length; i++) {\r\n\r\n const angle = Utils.toRadians(i * angleQuantum);\r\n const item = items[i];\r\n const itemWidth = item.offsetWidth;\r\n const itemHeight = item.offsetHeight;\r\n\r\n item.style.left = ((middleX + Math.sin(angle) * radius) - itemWidth / 2) + \"px\";\r\n item.style.bottom = ((middleY + Math.cos(angle) * radius) - itemHeight / 2) + \"px\";\r\n }\r\n }\r\n}","import MinutesFace from \"./minutesFace\";\r\nimport HoursFace from \"./hoursFace\";\r\nimport Utils from \"../meta/utils\";\r\nimport Config, {css, DOM} from \"../meta/config\";\r\nimport ClockFaceCreator from \"./clockFaceCreator\";\r\n\r\nexport default class ClockFace {\r\n\r\n constructor(options, initialTime, onTimeUpdate) {\r\n this.options = options;\r\n this.time = initialTime;\r\n this.onTimeUpdate = onTimeUpdate;\r\n this.isMouseDown = false;\r\n this.clockItems = [];\r\n this.innerClockItems = [];\r\n this.outerClockItems = [];\r\n this.size = {};\r\n this.middle = {};\r\n\r\n this.initViews();\r\n this.initTimeFaces(initialTime);\r\n this.createFace();\r\n\r\n this.hoursFace.items.radius = this.itemsRadius;\r\n\r\n this.currentFace = this.hoursFace;\r\n this.changeDisplayed(this.currentFace.displayed);\r\n }\r\n\r\n initViews() {\r\n this.clockElem = document.getElementById(DOM.clockId);\r\n this.innerClockElem = document.getElementById(DOM.innerId);\r\n this.handOfAClock = document.getElementById(DOM.handId);\r\n\r\n this.clockElem.onmousedown = () => this.isMouseDown = true;\r\n this.clockElem.onmouseup = () => {this.isMouseDown = false;\r\n this.toggleToMinutes();\r\n };\r\n\r\n this.handOfAClock.onmouseup = (e) => e.stopPropagation();\r\n this.handOfAClock.onmousemove = (e) => e.stopPropagation();\r\n this.handOfAClock.onclick = (e) => e.stopPropagation();\r\n\r\n this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem);\r\n this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem);\r\n\r\n this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem);\r\n this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem);\r\n }\r\n\r\n initTimeFaces(initialTime) {\r\n this.minutesFace = new MinutesFace({\r\n options: this.options,\r\n clockItems: this.clockItems,\r\n outerClockItems: this.outerClockItems\r\n }, initialTime.minutes, (minutes, angle) => this.updateMinutes(minutes, angle));\r\n\r\n this.hoursFace = new HoursFace({\r\n options: this.options,\r\n innerClockItems: this.innerClockItems,\r\n clockItems: this.clockItems,\r\n innerClockElem: this.innerClockElem\r\n }, initialTime.hours, (hours, angle, radius) => this.updateHours(hours, angle, radius));\r\n }\r\n\r\n onStart() {\r\n this.currentFace.onEnter();\r\n }\r\n\r\n createFace() {\r\n const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem);\r\n clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace);\r\n clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems);\r\n\r\n this.size = clockFaceCreator.size;\r\n this.middle = clockFaceCreator.middle;\r\n this.itemsRadius = clockFaceCreator.itemsRadius;\r\n }\r\n\r\n selectTime(event, isMouseDown, elem) {\r\n if (!(isMouseDown || this.isMouseDown))\r\n return;\r\n const mouse = Utils.findMousePosition(event, this.clockElem);\r\n const x = mouse.x - this.middle.x;\r\n const y = this.middle.y - mouse.y;\r\n let angle = 90 - Utils.toDegrees(Math.atan(y / x));\r\n if (x < 0) angle += 180;\r\n\r\n this.currentFace.selectTime(angle, elem);\r\n event.stopPropagation();\r\n }\r\n\r\n changeDisplayed(array) {\r\n for (let i = 0; i < this.clockItems.length; i++)\r\n this.clockItems[i].innerText = array[i];\r\n }\r\n\r\n onEachClockElement(fun) {\r\n [].forEach.call(this.clockItems, c => fun(c));\r\n }\r\n\r\n updateMinutes(minutes, angle) {\r\n this.time.minutes = minutes;\r\n this.calculateHandOfTheClock(angle, this.itemsRadius);\r\n this.onTimeUpdate(this.time, Config.FaceType.MINUTES);\r\n }\r\n\r\n updateHours(hours, angle, radius) {\r\n this.time.hours = hours;\r\n this.calculateHandOfTheClock(angle, radius);\r\n this.onTimeUpdate(this.time, Config.FaceType.HOURS);\r\n }\r\n\r\n calculateHandOfTheClock(angle, size = this.itemsRadius) {\r\n this.handOfAClock.style.transform = `rotate(${angle - 90}deg)`;\r\n this.handOfAClock.style.width = size + \"px\";\r\n }\r\n\r\n toggleToHours() {\r\n this.minutesFace.onLeave();\r\n this.toggleTime(this.hoursFace);\r\n }\r\n\r\n toggleToMinutes() {\r\n this.hoursFace.onLeave();\r\n this.toggleTime(this.minutesFace);\r\n }\r\n\r\n toggleTime(face) {\r\n if (this.currentFace !== face) {\r\n this.onEachClockElement(c => c.classList.add(css.fadeOut));\r\n this.handOfAClock.classList.add(css.fadeOut);\r\n Promise.delay(() => {\r\n this.onEachClockElement(c => c.classList.remove(css.fadeOut));\r\n this.handOfAClock.classList.remove(css.fadeOut);\r\n this.changeDisplayed(face.displayed);\r\n this.currentFace = face;\r\n this.onEachClockElement(c => this.removeSelected(c));\r\n face.onEnter();\r\n }, 300);\r\n }\r\n }\r\n\r\n removeSelected(c) {\r\n c.classList.remove(css.selected);\r\n c.style.background = \"transparent\";\r\n c.style.color = this.options.clockItemColor;\r\n }\r\n}","import ClockHeader from \"./clockHeader\";\r\nimport ClockFace from \"./face/clockFace\";\r\nimport Config, {DOM} from \"./meta/config\";\r\nimport formatTime from \"./timeFormatter\";\r\n\r\nexport default class Clock {\r\n\r\n constructor(options, time) {\r\n this.options = options;\r\n\r\n this.initView();\r\n this.time = time;\r\n this.initElements();\r\n }\r\n\r\n initView() {\r\n this.submitButton = document.getElementById(DOM.submitId);\r\n this.submitButton.onclick = () => {\r\n const time = this.time;\r\n time.formatted = () => formatTime(time);\r\n this.options.onSubmit(time);\r\n Clock.dispose();\r\n };\r\n\r\n this.cancelButton = document.getElementById(DOM.cancelId);\r\n this.cancelButton.onclick = () => {\r\n this.options.onCancel();\r\n Clock.dispose();\r\n };\r\n }\r\n\r\n initElements() {\r\n this.header = new ClockHeader({\r\n options: this.options,\r\n time: this.time,\r\n onHourClicked: () => this.toggleToHours(),\r\n onMinutesClicked: () => this.toggleToMinutes()\r\n });\r\n this.clockFace = new ClockFace(this.options, this.time, (time, type) => this.onTimeUpdate(time, type));\r\n }\r\n\r\n onStart() {\r\n this.clockFace.onStart();\r\n }\r\n\r\n toggleToHours() {\r\n this.clockFace.toggleToHours();\r\n }\r\n\r\n toggleToMinutes() {\r\n this.clockFace.toggleToMinutes();\r\n }\r\n\r\n onTimeUpdate(time, type) {\r\n this.time = time;\r\n this.header.time = time;\r\n this.header.updateDisplayedTime();\r\n if (type === Config.FaceType.MINUTES)\r\n this.header.toggleActiveToMinutes();\r\n\r\n }\r\n\r\n static dispose() {\r\n document.body.removeChild(document.getElementById(Config.clockId));\r\n }\r\n}","import formatTime from \"./timeFormatter\";\r\nimport showPicker from \"./timepickerCreator\";\r\n\r\nexport default {\r\n showPicker: (config) => showPicker(config),\r\n format: (time) => formatTime(time)\r\n};\r\n\r\n"],"names":["extractTime","date","Date","fromDate","hoursRegex","test","hours","minutesRegex","minutes","parseInt","regex","fromRegex","TypeError","JSON","stringify","parsed","exec","getHours","getMinutes","delay","t","Promise","resolve","styleColors","options","getElementById","DOM","headerId","style","background","headerBackground","color","headerColor","wrapperId","wrapperBackground","clockId","clockBackground","handId","handColor","dotId","buttonsId","footerBackground","submitId","submitColor","cancelId","cancelColor","css","clockItem","clockItemColor","inner","clockItemInnerColor","outer","changeColor","className","property","items","Array","from","document","getElementsByClassName","showPicker","config","Object","assign","Config","clockConfig","time","getTime","clock","Clock","onStart","createDom","Error","clockDiv","createElement","id","innerHTML","clockHtml","body","appendChild","extractedTime","FaceType","HOURS","MINUTES","ClockHeader","onHourClicked","onMinutesClicked","initView","headerHours","hoursId","onclick","toggleActiveToHours","headerMinutes","minutesId","toggleActiveToMinutes","updateDisplayedTime","toggleActive","this","objectToRemoveClass","objectToAddClass","headerSelected","doUpdateDisplayedTime","node","value","innerText","MinutesFace","initialMinutes","updateMinutes","displayed","type","selected","undefined","findSelected","colorSelected","removeSelected","angle","minute","Math","round","clockItems","outerClockItems","isOuter","classList","add","remove","indexOf","HoursFace","initialHours","updateHours","displayedInner","innerClockElem","display","isInnerClock","hoursIndex","innerClockItems","radius","elem","index","selectedAngle","isInner","fn","then","prototype","toRadians","PI","toDegrees","findMousePosition","event","object","rect","getBoundingClientRect","clientX","left","clientY","top","clockElem","size","middle","face","doCreate","span","item","i","push","width","offsetWidth","height","offsetHeight","x","y","itemsRadius","middleX","middleY","doCalculateSize","fun","angleQuantum","length","Utils","itemWidth","itemHeight","sin","bottom","cos","ClockFace","initialTime","onTimeUpdate","isMouseDown","initViews","initTimeFaces","createFace","hoursFace","currentFace","changeDisplayed","innerId","handOfAClock","onmousedown","_this","onmouseup","toggleToMinutes","e","stopPropagation","onmousemove","selectTime","minutesFace","_this2","onEnter","clockFaceCreator","ClockFaceCreator","create","calculateSize","mouse","atan","array","forEach","call","c","calculateHandOfTheClock","transform","onLeave","toggleTime","onEachClockElement","fadeOut","_this3","initElements","submitButton","formatted","formatTime","onSubmit","dispose","cancelButton","onCancel","header","toggleToHours","clockFace","removeChild"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"grudus-timepicker.es5.js","sources":["../src/js/timeExtractor.js","../src/js/timeFormatter.js","../src/js/meta/clockHtml.js","../src/js/meta/config.js","../src/js/clockHeader.js","../src/js/face/minutesFace.js","../src/js/face/hoursFace.js","../src/js/meta/utils.js","../src/js/face/clockFaceCreator.js","../src/js/face/clockFace.js","../src/js/clock.js","../src/js/colorStylists.js","../src/js/timepickerCreator.js","../src/js/index.js"],"sourcesContent":["const hoursRegex = /^([0-1]?[0-9]|2[0-3])$/;\nconst minutesRegex = /^([0-5]?[0-9])$/;\nconst regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;\n\nexport default function extractTime(date) {\n if (!date)\n return fromDate(new Date());\n else if (date instanceof Date)\n return fromDate(date);\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes))\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes)};\n else if (regex.test(date))\n return fromRegex(date);\n else\n throw new TypeError(`INVALID FORMAT: {${JSON.stringify(date)}}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields`);\n}\n\nfunction fromRegex(date) {\n const parsed = regex.exec(date);\n return {hours: parseInt(parsed[1]), minutes: parseInt(parsed[2])};\n}\n\nfunction fromDate(date) {\n return {hours: date.getHours(), minutes: date.getMinutes()};\n}","import extractTime from \"./timeExtractor\";\n\nexport default function (time) {\n const extractedTime = extractTime(time);\n return (extractedTime.hours < 10 ? \"0\" + extractedTime.hours : extractedTime.hours)\n + \":\" + (extractedTime.minutes < 10 ? \"0\" + extractedTime.minutes : extractedTime.minutes);\n}","export default \"
\\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\" 21\\n\" +\n\" :\\n\" +\n\" 37\\n\" +\n\" \\n\" +\n\" \\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\"\\n\" +\n\"\\n\" +\n\"
\\n\" +\n\"
\" +\n\" \\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\"\\n\" +\n\"\\n\" +\n\"
\\n\" +\n\" \\n\" +\n\" \\n\" +\n\"
\\n\" +\n\"\\n\" +\n\"
\";","const clockId = \"grudus-clock\";\n\nconst defaultConfig = {\n onSubmit: () => {\n },\n onCancel: () => {\n },\n headerBackground: \"#1976D2\",\n headerColor: \"#c7d6e1\",\n headerSelected: \"#ffffff\",\n wrapperBackground: \"#f0fff0\",\n footerBackground: \"#f0fff0\",\n submitColor: \"#1976D2\",\n cancelColor: \"#1976D2\",\n clockBackground: \"#CFD8DC\",\n clockItemColor: \"#212121\",\n clockItemInnerColor: \"#212121\",\n handColor: \"#1976D2\"\n};\n\nconst FaceType = {HOURS: \"hours\", MINUTES: \"minutes\"};\n\nconst css = {\n clock: \"g-clock\",\n clockItem: \"g-clock-item\",\n inner: \"g-clock-inner\",\n outer: \"g-clock-outer\",\n item: \"g-clock-item\",\n hand: \"g-hand-of-a-clock\",\n fadeOut: \"g-fade-out\",\n selected: \"g-selected\",\n active: \"g-active\",\n submit: \"g-submit\",\n cancel: \"g-cancel\",\n hour: \"g-hour\",\n minute: \"g-minute\"\n};\n\nconst DOM = {\n headerId: \"g-head\",\n hoursId: \"g-hours\",\n minutesId: \"g-minutes\",\n clockId: \"g-clock\",\n innerId: \"g-clock-inner\",\n wrapperId: \"g-clock-wrapper\",\n dotId: \"g-middle-dot\",\n handId: \"g-hand-of-a-clock\",\n buttonsId: \"g-buttons\",\n submitId: \"g-time-submit\",\n cancelId: \"g-time-cancel\"\n};\n\nexport default {clockId, clockConfig: defaultConfig, FaceType};\nexport {css, DOM};","import {DOM} from \"./meta/config\";\n\nexport default class ClockHeader {\n\n constructor(config) {\n this.options = config.options;\n this.time = config.time;\n this.onHourClicked = config.onHourClicked;\n this.onMinutesClicked = config.onMinutesClicked;\n\n this.initView();\n }\n\n initView() {\n this.headerHours = document.getElementById(DOM.hoursId);\n this.headerHours.onclick = () => {\n this.toggleActiveToHours();\n this.onHourClicked();\n };\n\n this.headerMinutes = document.getElementById(DOM.minutesId);\n this.headerMinutes.onclick = () => {\n this.toggleActiveToMinutes();\n this.onMinutesClicked();\n };\n\n this.updateDisplayedTime();\n this.toggleActiveToHours();\n }\n\n toggleActiveToMinutes() {\n this.toggleActive(this.headerHours, this.headerMinutes);\n }\n\n toggleActiveToHours() {\n this.toggleActive(this.headerMinutes, this.headerHours);\n }\n\n toggleActive(objectToRemoveClass, objectToAddClass) {\n objectToRemoveClass.style.color = this.options.headerColor;\n objectToAddClass.style.color = this.options.headerSelected;\n }\n\n updateDisplayedTime() {\n ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours);\n ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes);\n }\n\n static doUpdateDisplayedTime(node, value) {\n if (value < 10)\n node.innerText = \"0\" + value;\n else node.innerText = value;\n }\n}","import Config, {css} from \"../meta/config\";\n\nexport default class MinutesFace {\n\n constructor(items, initialMinutes, updateMinutes) {\n this.displayed = [\"00\", \"05\", \"10\", \"15\", \"20\", \"25\", \"30\", \"35\", \"40\", \"45\", \"50\", \"55\"];\n this.options = items.options;\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.items = items;\n this.minutes = initialMinutes;\n this.updateMinutes = updateMinutes;\n }\n\n onEnter() {\n this.selected = this.findSelected(this.minutes);\n this.colorSelected();\n this.updateMinutes(this.minutes, this.minutes * 6);\n }\n\n onLeave() {\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle) {\n if (this.selected)\n this.removeSelected();\n\n const minute = Math.round(angle / 6) % 60;\n this.selected = this.findSelected(minute);\n this.colorSelected();\n this.minutes = minute;\n this.updateMinutes(this.minutes, angle);\n }\n\n findSelected(minute) {\n return (minute % 5 === 0) ? this.items.clockItems[minute / 5] : this.items.outerClockItems[minute];\n }\n\n colorSelected() {\n if (this.isOuter()) {\n this.selected.classList.add(css.selected);\n return;\n }\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"whitesmoke\";\n }\n\n removeSelected() {\n if (this.isOuter()) {\n this.selected.classList.remove(css.selected);\n return;\n }\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.options.clockItemColor;\n }\n\n isOuter() {\n return this.items.outerClockItems.indexOf(this.selected) > -1;\n }\n}","import Config from \"../meta/config\";\n\nexport default class HoursFace {\n\n constructor(items, initialHours, updateHours) {\n this.displayed = [\"12\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\n this.displayedInner = [\"00\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\", \"23\"];\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.options = items.options;\n\n this.items = items;\n this.hours = initialHours;\n this.updateHours = updateHours;\n }\n\n onEnter() {\n this.items.innerClockElem.style.display = \"block\";\n const isInnerClock = this.hours < 13 && this.hours !== 0;\n const hoursIndex = this.hours % 12;\n this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex];\n this.colorSelected();\n\n this.updateHours(this.hours, hoursIndex * 30, isInnerClock ? this.items.radius : this.items.radius - 50);\n }\n\n onLeave() {\n this.items.innerClockElem.style.display = \"none\";\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle, elem) {\n if (this.selected)\n this.removeSelected();\n\n const index = Math.round(angle / 30) % 12;\n this.selected = (elem === this.items.innerClockElem\n ? this.items.innerClockItems\n : this.items.clockItems)[index];\n\n this.colorSelected();\n this.hours = parseInt(this.selected.innerText);\n const selectedAngle = Math.round(angle / 30) * 30;\n\n this.updateHours(this.hours, selectedAngle,\n elem === this.items.innerClockElem ? this.items.radius - 50 : this.items.radius);\n }\n\n colorSelected() {\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"#ffffff\";\n }\n\n removeSelected() {\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.isInner()\n ? this.options.clockItemInnerColor\n : this.options.clockItemColor;\n }\n\n isInner() {\n return Array.from(this.items.innerClockItems).indexOf(this.selected) > -1;\n }\n}","function toRadians(angle) {\n return angle * (Math.PI / 180);\n}\n\nfunction toDegrees(angle) {\n return angle * (180 / Math.PI);\n}\n\nfunction findMousePosition(event, object) {\n const rect = object.getBoundingClientRect();\n return {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n}\n\nfunction delay(t) {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n}\n\nPromise.delay = function (fn, t) {\n if (!t) {\n t = fn;\n fn = function () {\n };\n }\n return delay(t).then(fn);\n};\n\nPromise.prototype.delay = function (fn, t) {\n return this.then(function () {\n return Promise.delay(fn, t);\n });\n};\n\nexport default {toRadians, toDegrees, findMousePosition};","import Utils from \"../meta/utils\";\nimport {css} from \"../meta/config\";\n\nexport default class ClockFaceCreator {\n\n constructor(clockElem, innerClockElem) {\n this.clockElem = clockElem;\n this.innerClockElem = innerClockElem;\n this.size = {};\n this.middle = {};\n }\n\n create(clockItems, innerClockItems, outerClockItems, face) {\n ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item));\n ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => {\n span.classList.add(css.item, css.inner);\n span.innerText = face.displayedInner[i];\n });\n\n for (let i = 0; i < 60; i++) {\n const span = document.createElement(\"span\");\n span.classList.add(css.outer);\n outerClockItems.push(span);\n this.clockElem.appendChild(span);\n }\n }\n\n static doCreate(clockItems, clockElem, fun) {\n for (let i = 0; i < 12; i++) {\n const span = document.createElement(\"span\");\n fun(span, i);\n clockItems.push(span);\n clockElem.appendChild(span);\n }\n }\n\n calculateSize(clockItems, innerClockItems, outerClockItems) {\n this.size.width = this.clockElem.offsetWidth;\n this.size.height = this.clockElem.offsetHeight;\n this.middle.x = this.size.width / 2;\n this.middle.y = this.size.height / 2;\n this.itemsRadius = this.size.width / 2 - 20;\n\n const innerWidth = this.innerClockElem.offsetWidth;\n const innerHeight = this.innerClockElem.offsetHeight;\n const middleX = innerWidth / 2;\n const middleY = innerHeight / 2;\n\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems);\n ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems);\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems);\n }\n\n static doCalculateSize(middleX, middleY, radius, items) {\n const angleQuantum = 360 / items.length;\n for (let i = 0; i < items.length; i++) {\n\n const angle = Utils.toRadians(i * angleQuantum);\n const item = items[i];\n const itemWidth = item.offsetWidth;\n const itemHeight = item.offsetHeight;\n\n item.style.left = ((middleX + Math.sin(angle) * radius) - itemWidth / 2) + \"px\";\n item.style.bottom = ((middleY + Math.cos(angle) * radius) - itemHeight / 2) + \"px\";\n }\n }\n}","import MinutesFace from \"./minutesFace\";\nimport HoursFace from \"./hoursFace\";\nimport Utils from \"../meta/utils\";\nimport Config, {css, DOM} from \"../meta/config\";\nimport ClockFaceCreator from \"./clockFaceCreator\";\n\nexport default class ClockFace {\n\n constructor(options, initialTime, onTimeUpdate) {\n this.options = options;\n this.time = initialTime;\n this.onTimeUpdate = onTimeUpdate;\n this.isMouseDown = false;\n this.clockItems = [];\n this.innerClockItems = [];\n this.outerClockItems = [];\n this.size = {};\n this.middle = {};\n\n this.initViews();\n this.initTimeFaces(initialTime);\n this.createFace();\n\n this.hoursFace.items.radius = this.itemsRadius;\n\n this.currentFace = this.hoursFace;\n this.changeDisplayed(this.currentFace.displayed);\n }\n\n initViews() {\n this.clockElem = document.getElementById(DOM.clockId);\n this.innerClockElem = document.getElementById(DOM.innerId);\n this.handOfAClock = document.getElementById(DOM.handId);\n\n this.clockElem.onmousedown = () => this.isMouseDown = true;\n this.clockElem.onmouseup = () => {this.isMouseDown = false;\n this.toggleToMinutes();\n };\n\n this.handOfAClock.onmouseup = (e) => e.stopPropagation();\n this.handOfAClock.onmousemove = (e) => e.stopPropagation();\n this.handOfAClock.onclick = (e) => e.stopPropagation();\n\n this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem);\n this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem);\n\n this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem);\n this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem);\n }\n\n initTimeFaces(initialTime) {\n this.minutesFace = new MinutesFace({\n options: this.options,\n clockItems: this.clockItems,\n outerClockItems: this.outerClockItems\n }, initialTime.minutes, (minutes, angle) => this.updateMinutes(minutes, angle));\n\n this.hoursFace = new HoursFace({\n options: this.options,\n innerClockItems: this.innerClockItems,\n clockItems: this.clockItems,\n innerClockElem: this.innerClockElem\n }, initialTime.hours, (hours, angle, radius) => this.updateHours(hours, angle, radius));\n }\n\n onStart() {\n this.currentFace.onEnter();\n }\n\n createFace() {\n const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem);\n clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace);\n clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems);\n\n this.size = clockFaceCreator.size;\n this.middle = clockFaceCreator.middle;\n this.itemsRadius = clockFaceCreator.itemsRadius;\n }\n\n selectTime(event, isMouseDown, elem) {\n if (!(isMouseDown || this.isMouseDown))\n return;\n const mouse = Utils.findMousePosition(event, this.clockElem);\n const x = mouse.x - this.middle.x;\n const y = this.middle.y - mouse.y;\n let angle = 90 - Utils.toDegrees(Math.atan(y / x));\n if (x < 0) angle += 180;\n\n this.currentFace.selectTime(angle, elem);\n event.stopPropagation();\n }\n\n changeDisplayed(array) {\n for (let i = 0; i < this.clockItems.length; i++)\n this.clockItems[i].innerText = array[i];\n }\n\n onEachClockElement(fun) {\n [].forEach.call(this.clockItems, c => fun(c));\n }\n\n updateMinutes(minutes, angle) {\n this.time.minutes = minutes;\n this.calculateHandOfTheClock(angle, this.itemsRadius);\n this.onTimeUpdate(this.time, Config.FaceType.MINUTES);\n }\n\n updateHours(hours, angle, radius) {\n this.time.hours = hours;\n this.calculateHandOfTheClock(angle, radius);\n this.onTimeUpdate(this.time, Config.FaceType.HOURS);\n }\n\n calculateHandOfTheClock(angle, size = this.itemsRadius) {\n this.handOfAClock.style.transform = `rotate(${angle - 90}deg)`;\n this.handOfAClock.style.width = size + \"px\";\n }\n\n toggleToHours() {\n this.minutesFace.onLeave();\n this.toggleTime(this.hoursFace);\n }\n\n toggleToMinutes() {\n this.hoursFace.onLeave();\n this.toggleTime(this.minutesFace);\n }\n\n toggleTime(face) {\n if (this.currentFace !== face) {\n this.onEachClockElement(c => c.classList.add(css.fadeOut));\n this.handOfAClock.classList.add(css.fadeOut);\n Promise.delay(() => {\n this.onEachClockElement(c => c.classList.remove(css.fadeOut));\n this.handOfAClock.classList.remove(css.fadeOut);\n this.changeDisplayed(face.displayed);\n this.currentFace = face;\n this.onEachClockElement(c => this.removeSelected(c));\n face.onEnter();\n }, 300);\n }\n }\n\n removeSelected(c) {\n c.classList.remove(css.selected);\n c.style.background = \"transparent\";\n c.style.color = this.options.clockItemColor;\n }\n}","import ClockHeader from \"./clockHeader\";\nimport ClockFace from \"./face/clockFace\";\nimport Config, {DOM} from \"./meta/config\";\nimport formatTime from \"./timeFormatter\";\n\nexport default class Clock {\n\n constructor(options, time) {\n this.options = options;\n\n this.initView();\n this.time = time;\n this.initElements();\n }\n\n initView() {\n this.submitButton = document.getElementById(DOM.submitId);\n this.submitButton.onclick = () => {\n const time = this.time;\n time.formatted = () => formatTime(time);\n this.options.onSubmit(time);\n Clock.dispose();\n };\n\n this.cancelButton = document.getElementById(DOM.cancelId);\n this.cancelButton.onclick = () => {\n this.options.onCancel();\n Clock.dispose();\n };\n }\n\n initElements() {\n this.header = new ClockHeader({\n options: this.options,\n time: this.time,\n onHourClicked: () => this.toggleToHours(),\n onMinutesClicked: () => this.toggleToMinutes()\n });\n this.clockFace = new ClockFace(this.options, this.time, (time, type) => this.onTimeUpdate(time, type));\n }\n\n onStart() {\n this.clockFace.onStart();\n }\n\n toggleToHours() {\n this.clockFace.toggleToHours();\n }\n\n toggleToMinutes() {\n this.clockFace.toggleToMinutes();\n }\n\n onTimeUpdate(time, type) {\n this.time = time;\n this.header.time = time;\n this.header.updateDisplayedTime();\n if (type === Config.FaceType.MINUTES)\n this.header.toggleActiveToMinutes();\n\n }\n\n static dispose() {\n document.body.removeChild(document.getElementById(Config.clockId));\n }\n}","import {css, DOM} from \"./meta/config\";\n\nexport default function styleColors(options) {\n document.getElementById(DOM.headerId).style.background = options.headerBackground;\n document.getElementById(DOM.headerId).style.color = options.headerColor;\n document.getElementById(DOM.wrapperId).style.background = options.wrapperBackground;\n document.getElementById(DOM.clockId).style.background = options.clockBackground;\n document.getElementById(DOM.handId).style.background = options.handColor;\n document.getElementById(DOM.dotId).style.background = options.handColor;\n document.getElementById(DOM.buttonsId).style.background = options.footerBackground;\n document.getElementById(DOM.submitId).style.color = options.submitColor;\n document.getElementById(DOM.cancelId).style.color = options.cancelColor;\n\n changeColor(css.clockItem, options.clockItemColor);\n changeColor(css.inner, options.clockItemInnerColor);\n changeColor(css.outer, options.handColor, \"borderColor\");\n}\n\nfunction changeColor(className, color, property = \"color\") {\n const items = Array.from(document.getElementsByClassName(className));\n for (const item of items)\n item.style[property] = color;\n}\n","import clockHtml from \"./meta/clockHtml\";\nimport Config from \"./meta/config\";\nimport Clock from \"./clock\";\nimport styleColors from \"./colorStylists\";\nimport getTime from \"./timeExtractor\";\n\n\nexport default function showPicker(config = {}) {\n createDom();\n\n const options = Object.assign({}, Config.clockConfig, config);\n const time = getTime(options.time);\n\n const clock = new Clock(options, time);\n styleColors(options);\n clock.onStart();\n}\n\n\nfunction createDom() {\n if (document.getElementById(Config.clockId))\n throw Error(\"There is already one running grudus-timepicker instance!\");\n\n const clockDiv = document.createElement(\"div\");\n clockDiv.id = Config.clockId;\n clockDiv.innerHTML = clockHtml;\n document.body.appendChild(clockDiv);\n}\n","import formatTime from \"./timeFormatter\";\nimport showPicker from \"./timepickerCreator\";\n\nexport default {\n showPicker: (config) => showPicker(config),\n format: (time) => formatTime(time)\n};\n\n"],"names":["hoursRegex","minutesRegex","regex","extractTime","date","Date","fromDate","test","hours","minutes","parseInt","parsed","exec","fromRegex","TypeError","JSON","stringify","getHours","getMinutes","time","extractedTime","css","DOM","clockId","clockConfig","FaceType","HOURS","MINUTES","ClockHeader","headerHours","document","getElementById","hoursId","onclick","toggleActiveToHours","onHourClicked","headerMinutes","minutesId","toggleActiveToMinutes","onMinutesClicked","updateDisplayedTime","toggleActive","this","objectToRemoveClass","objectToAddClass","style","color","options","headerColor","headerSelected","doUpdateDisplayedTime","node","value","innerText","config","initView","MinutesFace","selected","findSelected","colorSelected","updateMinutes","removeSelected","undefined","angle","minute","Math","round","items","clockItems","outerClockItems","isOuter","classList","add","background","handColor","remove","clockItemColor","indexOf","initialMinutes","displayed","type","Config","HoursFace","innerClockElem","display","isInnerClock","hoursIndex","innerClockItems","updateHours","radius","elem","index","selectedAngle","isInner","clockItemInnerColor","Array","from","initialHours","displayedInner","Promise","delay","fn","t","resolve","then","prototype","toRadians","PI","toDegrees","findMousePosition","event","object","rect","getBoundingClientRect","clientX","left","clientY","top","face","doCreate","clockElem","span","item","i","inner","createElement","outer","push","appendChild","size","width","offsetWidth","height","offsetHeight","middle","x","y","itemsRadius","middleX","middleY","doCalculateSize","fun","angleQuantum","length","Utils","itemWidth","itemHeight","sin","bottom","cos","ClockFace","innerId","handOfAClock","handId","onmousedown","_this","isMouseDown","onmouseup","toggleToMinutes","e","stopPropagation","onmousemove","selectTime","initialTime","minutesFace","_this2","hoursFace","currentFace","onEnter","clockFaceCreator","ClockFaceCreator","create","calculateSize","mouse","atan","array","forEach","call","c","calculateHandOfTheClock","onTimeUpdate","transform","onLeave","toggleTime","onEachClockElement","fadeOut","changeDisplayed","_this3","initViews","initTimeFaces","createFace","Clock","submitButton","submitId","formatted","formatTime","onSubmit","dispose","cancelButton","cancelId","onCancel","header","toggleToHours","clockFace","onStart","body","removeChild","initElements","changeColor","className","property","getElementsByClassName","showPicker","Error","clockDiv","id","innerHTML","clockHtml","Object","assign","getTime","clock","headerId","headerBackground","wrapperId","wrapperBackground","clockBackground","dotId","buttonsId","footerBackground","submitColor","cancelColor","clockItem"],"mappings":"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"} \ No newline at end of file diff --git a/src/js/meta/clockHtml.js b/src/js/meta/clockHtml.js index 0976911..198dad4 100644 --- a/src/js/meta/clockHtml.js +++ b/src/js/meta/clockHtml.js @@ -4,6 +4,8 @@ export default "
\n" + " 21\n" + " :\n" + " 37\n" + +" \n" + +" \n" + "
\n" + " \n" + "\n" + @@ -18,8 +20,8 @@ export default "
\n" + "\n" + "\n" + "
\n" + -" \n" + -" \n" + +" \n" + +" \n" + "
\n" + "\n" + "
"; \ No newline at end of file From b69d9000f6bdf308e71e0778a31bc3cdb37b3272 Mon Sep 17 00:00:00 2001 From: arodrigueze Date: Wed, 21 Aug 2019 17:13:57 -0500 Subject: [PATCH 02/13] add labels --- src/js/meta/config.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/js/meta/config.js b/src/js/meta/config.js index 18ce7f1..d8fa965 100644 --- a/src/js/meta/config.js +++ b/src/js/meta/config.js @@ -15,7 +15,12 @@ const defaultConfig = { clockBackground: "#CFD8DC", clockItemColor: "#212121", clockItemInnerColor: "#212121", - handColor: "#1976D2" + handColor: "#1976D2", + meridiem: true, + labels: { + cancel:"Cancel", + ok:"Ok", + } }; const FaceType = {HOURS: "hours", MINUTES: "minutes"}; From 3a0b7d7dd6ca463e2648d5041ca25e1ca5a92b8f Mon Sep 17 00:00:00 2001 From: arodrigueze Date: Thu, 22 Aug 2019 14:53:39 -0500 Subject: [PATCH 03/13] add meridiem template on clockHtml --- src/js/meta/clockHtml.js | 64 +++++++++++++++++++++---------------- src/js/timepickerCreator.js | 8 ++--- src/styles/index.css | 10 ++++++ 3 files changed, 51 insertions(+), 31 deletions(-) diff --git a/src/js/meta/clockHtml.js b/src/js/meta/clockHtml.js index 198dad4..acf97f9 100644 --- a/src/js/meta/clockHtml.js +++ b/src/js/meta/clockHtml.js @@ -1,27 +1,37 @@ -export default "
\n" + -"
\n" + -"
\n" + -" 21\n" + -" :\n" + -" 37\n" + -" \n" + -" \n" + -"
\n" + -"
\n" + -"\n" + -"\n" + -"
\n" + -"
" + -" \n" + -"
\n" + -"
\n" + -"
\n" + -"
\n" + -"\n" + -"\n" + -"
\n" + -" \n" + -" \n" + -"
\n" + -"\n" + -"
"; \ No newline at end of file + +export default (options) => { + const arrayTemplate = ["
" , + "
" , + "
" , + " 21" , + " :" , + " 37"]; + if (options.meridiem){ + arrayTemplate.push(["
" , + "AM" , + "PM", + "
"].join("\n")); + + } + const nextTemplate = ["
" , + "
" , + "" , + "" , + "
" , + "
" , + " " , + "
" , + "
" , + "
" , + "
" , + "" , + "" , + "
"]; + + nextTemplate.push(` + + + `); + nextTemplate.push("
"); + return arrayTemplate.concat(nextTemplate).join("\n"); +}; \ No newline at end of file diff --git a/src/js/timepickerCreator.js b/src/js/timepickerCreator.js index c2d2e84..16d0d6f 100644 --- a/src/js/timepickerCreator.js +++ b/src/js/timepickerCreator.js @@ -6,9 +6,9 @@ import getTime from "./timeExtractor"; export default function showPicker(config = {}) { - createDom(); - + const options = Object.assign({}, Config.clockConfig, config); + createDom(options); const time = getTime(options.time); const clock = new Clock(options, time); @@ -17,12 +17,12 @@ export default function showPicker(config = {}) { } -function createDom() { +function createDom(options) { if (document.getElementById(Config.clockId)) throw Error("There is already one running grudus-timepicker instance!"); const clockDiv = document.createElement("div"); clockDiv.id = Config.clockId; - clockDiv.innerHTML = clockHtml; + clockDiv.innerHTML = clockHtml(options); document.body.appendChild(clockDiv); } diff --git a/src/styles/index.css b/src/styles/index.css index ad60ae9..19d2d60 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -163,4 +163,14 @@ .g-pointer:hover { cursor: pointer; +} + +.content-meridiem { + display: flex; + flex-direction: column; + justify-content: center; + margin-left: 16px; +} +.item-meridiem { + font-size: 24px; } \ No newline at end of file From 25e8deb4e23e4e187a1845f01c6f102807f27cf8 Mon Sep 17 00:00:00 2001 From: Daniel Aristizabal Date: Thu, 22 Aug 2019 17:25:41 -0500 Subject: [PATCH 04/13] Initial conditions to use meridiem mode --- src/js/face/clockFace.js | 14 ++++++++------ src/js/face/clockFaceCreator.js | 26 +++++++++++++++----------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/js/face/clockFace.js b/src/js/face/clockFace.js index 6326494..385deb6 100644 --- a/src/js/face/clockFace.js +++ b/src/js/face/clockFace.js @@ -17,9 +17,9 @@ export default class ClockFace { this.size = {}; this.middle = {}; - this.initViews(); + this.initViews(options); this.initTimeFaces(initialTime); - this.createFace(); + this.createFace(options); this.hoursFace.items.radius = this.itemsRadius; @@ -29,7 +29,7 @@ export default class ClockFace { initViews() { this.clockElem = document.getElementById(DOM.clockId); - this.innerClockElem = document.getElementById(DOM.innerId); + this.innerClockElem = (this.options.meridiem) ? null : document.getElementById(DOM.innerId); this.handOfAClock = document.getElementById(DOM.handId); this.clockElem.onmousedown = () => this.isMouseDown = true; @@ -44,8 +44,10 @@ export default class ClockFace { this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem); this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem); - this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem); - this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem); + if (!this.options.meridiem) { + this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem); + this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem); + } } initTimeFaces(initialTime) { @@ -68,7 +70,7 @@ export default class ClockFace { } createFace() { - const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem); + const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem, this.options); clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace); clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems); diff --git a/src/js/face/clockFaceCreator.js b/src/js/face/clockFaceCreator.js index f4b1f0b..4133f59 100644 --- a/src/js/face/clockFaceCreator.js +++ b/src/js/face/clockFaceCreator.js @@ -3,19 +3,22 @@ import {css} from "../meta/config"; export default class ClockFaceCreator { - constructor(clockElem, innerClockElem) { + constructor(clockElem, innerClockElem, options) { this.clockElem = clockElem; this.innerClockElem = innerClockElem; this.size = {}; this.middle = {}; + this.options = options } create(clockItems, innerClockItems, outerClockItems, face) { ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item)); - ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => { - span.classList.add(css.item, css.inner); - span.innerText = face.displayedInner[i]; - }); + if (!this.options.meridiem) { + ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => { + span.classList.add(css.item, css.inner); + span.innerText = face.displayedInner[i]; + }); + } for (let i = 0; i < 60; i++) { const span = document.createElement("span"); @@ -41,13 +44,14 @@ export default class ClockFaceCreator { this.middle.y = this.size.height / 2; this.itemsRadius = this.size.width / 2 - 20; - const innerWidth = this.innerClockElem.offsetWidth; - const innerHeight = this.innerClockElem.offsetHeight; - const middleX = innerWidth / 2; - const middleY = innerHeight / 2; - ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems); - ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems); + if (!this.options.meridiem) { + const innerWidth = this.innerClockElem.offsetWidth; + const innerHeight = this.innerClockElem.offsetHeight; + const middleX = innerWidth / 2; + const middleY = innerHeight / 2; + ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems); + } ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems); } From f536691bec9b72c4f170b5b90efab782700a3317 Mon Sep 17 00:00:00 2001 From: arodrigueze Date: Fri, 23 Aug 2019 18:54:19 -0500 Subject: [PATCH 05/13] validate innerClockElem undefined --- src/js/face/clockFace.js | 2 +- src/js/face/clockFaceCreator.js | 2 +- src/js/face/hoursFace.js | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/js/face/clockFace.js b/src/js/face/clockFace.js index 385deb6..7a8a8ae 100644 --- a/src/js/face/clockFace.js +++ b/src/js/face/clockFace.js @@ -17,7 +17,7 @@ export default class ClockFace { this.size = {}; this.middle = {}; - this.initViews(options); + this.initViews(); this.initTimeFaces(initialTime); this.createFace(options); diff --git a/src/js/face/clockFaceCreator.js b/src/js/face/clockFaceCreator.js index 4133f59..327338f 100644 --- a/src/js/face/clockFaceCreator.js +++ b/src/js/face/clockFaceCreator.js @@ -8,7 +8,7 @@ export default class ClockFaceCreator { this.innerClockElem = innerClockElem; this.size = {}; this.middle = {}; - this.options = options + this.options = options; } create(clockItems, innerClockItems, outerClockItems, face) { diff --git a/src/js/face/hoursFace.js b/src/js/face/hoursFace.js index 3b4824e..b76c43d 100644 --- a/src/js/face/hoursFace.js +++ b/src/js/face/hoursFace.js @@ -15,7 +15,9 @@ export default class HoursFace { } onEnter() { - this.items.innerClockElem.style.display = "block"; + + if (this.items.innerClockElem !== null) + this.items.innerClockElem.style.display = "block"; const isInnerClock = this.hours < 13 && this.hours !== 0; const hoursIndex = this.hours % 12; this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex]; @@ -25,7 +27,8 @@ export default class HoursFace { } onLeave() { - this.items.innerClockElem.style.display = "none"; + if (this.items.innerClockElem !== null) + this.items.innerClockElem.style.display = "none"; if (this.selected) { this.removeSelected(); this.selected = undefined; From 5b451b9908e9be2fee66ee90184c2486154230fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Rodriguez=20Escudero?= Date: Mon, 26 Aug 2019 20:53:07 -0500 Subject: [PATCH 06/13] Set a radius half, and setting the hour on the HeaderClock Set a radius half if it has innerClock if not setting a entire Radius --- src/js/clockHeader.js | 5 +++-- src/js/face/hoursFace.js | 16 ++++++++++++---- src/js/meta/config.js | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/js/clockHeader.js b/src/js/clockHeader.js index 26db8bc..0bd4de5 100644 --- a/src/js/clockHeader.js +++ b/src/js/clockHeader.js @@ -42,11 +42,12 @@ export default class ClockHeader { } updateDisplayedTime() { - ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours); + ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours, this.options.meridiem); ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes); } - static doUpdateDisplayedTime(node, value) { + static doUpdateDisplayedTime(node, value, meridiem) { + if (meridiem) value = value % 12; if (value < 10) node.innerText = "0" + value; else node.innerText = value; diff --git a/src/js/face/hoursFace.js b/src/js/face/hoursFace.js index b76c43d..ff6cedf 100644 --- a/src/js/face/hoursFace.js +++ b/src/js/face/hoursFace.js @@ -20,10 +20,17 @@ export default class HoursFace { this.items.innerClockElem.style.display = "block"; const isInnerClock = this.hours < 13 && this.hours !== 0; const hoursIndex = this.hours % 12; - this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex]; + let radius = this.items.radius; + if (this.options.meridiem && !isInnerClock) this.selected = this.items.clockItems[hoursIndex]; + else { + this.selected = isInnerClock ? + this.items.clockItems[hoursIndex] : + this.items.innerClockItems[hoursIndex]; + radius = radius - 50; + } this.colorSelected(); - this.updateHours(this.hours, hoursIndex * 30, isInnerClock ? this.items.radius : this.items.radius - 50); + this.updateHours(this.hours, hoursIndex * 30, radius); } onLeave() { @@ -40,7 +47,8 @@ export default class HoursFace { this.removeSelected(); const index = Math.round(angle / 30) % 12; - this.selected = (elem === this.items.innerClockElem + this.selected = (elem === this.items.innerClockElem + && this.items.innerClockElem!== undefined ? this.items.innerClockItems : this.items.clockItems)[index]; @@ -49,7 +57,7 @@ export default class HoursFace { const selectedAngle = Math.round(angle / 30) * 30; this.updateHours(this.hours, selectedAngle, - elem === this.items.innerClockElem ? this.items.radius - 50 : this.items.radius); + elem === this.items.innerClockElem && this.items.innerClockElem!== undefined ? this.items.radius - 50 : this.items.radius); } colorSelected() { diff --git a/src/js/meta/config.js b/src/js/meta/config.js index d8fa965..1500263 100644 --- a/src/js/meta/config.js +++ b/src/js/meta/config.js @@ -16,7 +16,7 @@ const defaultConfig = { clockItemColor: "#212121", clockItemInnerColor: "#212121", handColor: "#1976D2", - meridiem: true, + meridiem: false, labels: { cancel:"Cancel", ok:"Ok", From 57a757c9232f3196f0fa47e04ccde718be65b7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Rodriguez=20Escudero?= Date: Tue, 27 Aug 2019 19:04:56 -0500 Subject: [PATCH 07/13] validate if is innerClock < that 12 validate if is innerClock when the hour is < that 12 without meridiem --- src/js/face/hoursFace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/face/hoursFace.js b/src/js/face/hoursFace.js index ff6cedf..44feca2 100644 --- a/src/js/face/hoursFace.js +++ b/src/js/face/hoursFace.js @@ -26,7 +26,7 @@ export default class HoursFace { this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex]; - radius = radius - 50; + radius = isInnerClock ? radius : radius - 50; } this.colorSelected(); From 02ee40c09667fd68ad56a23183d178f4b53b4226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Rodriguez=20Escudero?= Date: Tue, 27 Aug 2019 19:07:45 -0500 Subject: [PATCH 08/13] Add am. pm. buttons events click update the time adding meridiem am. and pm. to return the time --- src/js/clockHeader.js | 24 +++++++++++++++++++++++- src/js/meta/config.js | 4 +++- src/js/timeExtractor.js | 9 +++++++-- src/js/timeFormatter.js | 4 +++- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/js/clockHeader.js b/src/js/clockHeader.js index 0bd4de5..804c1c3 100644 --- a/src/js/clockHeader.js +++ b/src/js/clockHeader.js @@ -23,6 +23,20 @@ export default class ClockHeader { this.toggleActiveToMinutes(); this.onMinutesClicked(); }; + if (this.options.meridiem) { + this.headerAm = document.getElementById(DOM.gTimeAmId); + this.headerPm = document.getElementById(DOM.gTimePmId); + this.headerAm.onclick = () => { + this.toogleActiveMeridiemAm(); + this.time.meridiem = "am"; + } + this.headerPm.onclick = () => { + this.toogleActiveMeridiemPm(); + this.time.meridiem = "pm"; + } + if (this.time.meridiem === "am") this.toogleActiveMeridiemAm(); + else if (this.time.meridiem === "pm") this.toogleActiveMeridiemPm(); + } this.updateDisplayedTime(); this.toggleActiveToHours(); @@ -36,6 +50,14 @@ export default class ClockHeader { this.toggleActive(this.headerMinutes, this.headerHours); } + toogleActiveMeridiemAm() { + this.toggleActive(this.headerPm, this.headerAm); + + } + toogleActiveMeridiemPm() { + this.toggleActive(this.headerAm, this.headerPm); + } + toggleActive(objectToRemoveClass, objectToAddClass) { objectToRemoveClass.style.color = this.options.headerColor; objectToAddClass.style.color = this.options.headerSelected; @@ -47,7 +69,7 @@ export default class ClockHeader { } static doUpdateDisplayedTime(node, value, meridiem) { - if (meridiem) value = value % 12; + if (meridiem && value !== 12) value = value % 12; if (value < 10) node.innerText = "0" + value; else node.innerText = value; diff --git a/src/js/meta/config.js b/src/js/meta/config.js index 1500263..3a4a0c8 100644 --- a/src/js/meta/config.js +++ b/src/js/meta/config.js @@ -52,7 +52,9 @@ const DOM = { handId: "g-hand-of-a-clock", buttonsId: "g-buttons", submitId: "g-time-submit", - cancelId: "g-time-cancel" + cancelId: "g-time-cancel", + gTimeAmId: "g-time-am", + gTimePmId: "g-time-pm" }; export default {clockId, clockConfig: defaultConfig, FaceType}; diff --git a/src/js/timeExtractor.js b/src/js/timeExtractor.js index c914ab8..943fa7d 100644 --- a/src/js/timeExtractor.js +++ b/src/js/timeExtractor.js @@ -1,16 +1,21 @@ +import timeFormatter from "./timeFormatter"; + const hoursRegex = /^([0-1]?[0-9]|2[0-3])$/; const minutesRegex = /^([0-5]?[0-9])$/; const regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/; export default function extractTime(date) { + console.log(date) if (!date) return fromDate(new Date()); - else if (date instanceof Date) - return fromDate(date); + else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes) && date.meridiem !== undefined && date.meridiem.length > 0) + return {hours: parseInt(date.hours), minutes: parseInt(date.minutes), meridiem: date.meridiem}; else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes)) return {hours: parseInt(date.hours), minutes: parseInt(date.minutes)}; else if (regex.test(date)) return fromRegex(date); + else if (date instanceof Date) + return fromDate(date); else throw new TypeError(`INVALID FORMAT: {${JSON.stringify(date)}}. Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields`); diff --git a/src/js/timeFormatter.js b/src/js/timeFormatter.js index c1fd476..df020ce 100644 --- a/src/js/timeFormatter.js +++ b/src/js/timeFormatter.js @@ -2,6 +2,8 @@ import extractTime from "./timeExtractor"; export default function (time) { const extractedTime = extractTime(time); + console.log(extractedTime); return (extractedTime.hours < 10 ? "0" + extractedTime.hours : extractedTime.hours) - + ":" + (extractedTime.minutes < 10 ? "0" + extractedTime.minutes : extractedTime.minutes); + + ":" + (extractedTime.minutes < 10 ? "0" + extractedTime.minutes : extractedTime.minutes) + + " "+ (extractedTime.meridiem !== undefined ? extractedTime.meridiem : ""); } \ No newline at end of file From f26bfa8a75ea9a8c37de5494073ae5217c16484f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Rodriguez=20Escudero?= Date: Wed, 28 Aug 2019 14:36:13 -0500 Subject: [PATCH 09/13] add default toogle active meridiem method It's to the case if the meridiem flag is comming in options but the time has not the meridiem value --- src/js/clockHeader.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/js/clockHeader.js b/src/js/clockHeader.js index 804c1c3..eac4ab2 100644 --- a/src/js/clockHeader.js +++ b/src/js/clockHeader.js @@ -36,6 +36,7 @@ export default class ClockHeader { } if (this.time.meridiem === "am") this.toogleActiveMeridiemAm(); else if (this.time.meridiem === "pm") this.toogleActiveMeridiemPm(); + else this.defaultToggleActiveMeridiem(); } this.updateDisplayedTime(); @@ -54,9 +55,15 @@ export default class ClockHeader { this.toggleActive(this.headerPm, this.headerAm); } + toogleActiveMeridiemPm() { this.toggleActive(this.headerAm, this.headerPm); } + + defaultToggleActiveMeridiem() { + if (this.time < 13) this.toogleActiveMeridiemAm(); + else this.toogleActiveMeridiemPm(); + } toggleActive(objectToRemoveClass, objectToAddClass) { objectToRemoveClass.style.color = this.options.headerColor; From 18adc36615e3aa96002832a77ead7234b0a27a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Rodriguez=20Escudero?= Date: Fri, 30 Aug 2019 20:48:15 -0500 Subject: [PATCH 10/13] It was a typo, missing the hours from the time to validate --- src/js/clockHeader.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/js/clockHeader.js b/src/js/clockHeader.js index eac4ab2..4626279 100644 --- a/src/js/clockHeader.js +++ b/src/js/clockHeader.js @@ -29,11 +29,11 @@ export default class ClockHeader { this.headerAm.onclick = () => { this.toogleActiveMeridiemAm(); this.time.meridiem = "am"; - } + }; this.headerPm.onclick = () => { this.toogleActiveMeridiemPm(); this.time.meridiem = "pm"; - } + }; if (this.time.meridiem === "am") this.toogleActiveMeridiemAm(); else if (this.time.meridiem === "pm") this.toogleActiveMeridiemPm(); else this.defaultToggleActiveMeridiem(); @@ -61,7 +61,8 @@ export default class ClockHeader { } defaultToggleActiveMeridiem() { - if (this.time < 13) this.toogleActiveMeridiemAm(); + const { hours } = this.time; + if (hours < 13) this.toogleActiveMeridiemAm(); else this.toogleActiveMeridiemPm(); } From fea54cf1562eaa28d2e29c7f729feeae55e3c1c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Rodriguez=20Escudero?= Date: Fri, 30 Aug 2019 21:04:53 -0500 Subject: [PATCH 11/13] add meridiem parameter to timeExtractor to set AM/PM marker --- src/js/clock.js | 2 +- src/js/timeExtractor.js | 31 ++++++++++++++++++++++--------- src/js/timeFormatter.js | 5 ++--- src/js/timepickerCreator.js | 2 +- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/js/clock.js b/src/js/clock.js index e18ddcb..4884981 100644 --- a/src/js/clock.js +++ b/src/js/clock.js @@ -17,7 +17,7 @@ export default class Clock { this.submitButton = document.getElementById(DOM.submitId); this.submitButton.onclick = () => { const time = this.time; - time.formatted = () => formatTime(time); + time.formatted = () => formatTime(time, this.options.meridiem); this.options.onSubmit(time); Clock.dispose(); }; diff --git a/src/js/timeExtractor.js b/src/js/timeExtractor.js index 943fa7d..6a9703d 100644 --- a/src/js/timeExtractor.js +++ b/src/js/timeExtractor.js @@ -1,21 +1,20 @@ -import timeFormatter from "./timeFormatter"; - const hoursRegex = /^([0-1]?[0-9]|2[0-3])$/; const minutesRegex = /^([0-5]?[0-9])$/; const regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/; -export default function extractTime(date) { - console.log(date) +export default function extractTime(date, hasMeridiem) { if (!date) - return fromDate(new Date()); - else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes) && date.meridiem !== undefined && date.meridiem.length > 0) + return fromDate(new Date(), hasMeridiem); + else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes) + && date.meridiem !== undefined + && date.meridiem.length > 0) return {hours: parseInt(date.hours), minutes: parseInt(date.minutes), meridiem: date.meridiem}; else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes)) return {hours: parseInt(date.hours), minutes: parseInt(date.minutes)}; else if (regex.test(date)) return fromRegex(date); else if (date instanceof Date) - return fromDate(date); + return fromDate(date, hasMeridiem); else throw new TypeError(`INVALID FORMAT: {${JSON.stringify(date)}}. Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields`); @@ -26,6 +25,20 @@ function fromRegex(date) { return {hours: parseInt(parsed[1]), minutes: parseInt(parsed[2])}; } -function fromDate(date) { - return {hours: date.getHours(), minutes: date.getMinutes()}; +function fromDate(date, hasMeridiem) { + if (hasMeridiem !== undefined && !hasMeridiem) return {hours: date.getHours(), minutes: date.getMinutes()}; + return getTimeWithMeridiem(date); + +} + +function getTimeWithMeridiem(date) { + let meridiem = ""; + let hours = date.getHours(); + + if (hours < 13) meridiem = "am"; + else meridiem = "pm"; + + if (hours !== 12) hours = hours % 12; + + return {hours, minutes: date.getMinutes(), meridiem}; } \ No newline at end of file diff --git a/src/js/timeFormatter.js b/src/js/timeFormatter.js index df020ce..c8ef806 100644 --- a/src/js/timeFormatter.js +++ b/src/js/timeFormatter.js @@ -1,8 +1,7 @@ import extractTime from "./timeExtractor"; -export default function (time) { - const extractedTime = extractTime(time); - console.log(extractedTime); +export default function (time, hasMeridiem) { + const extractedTime = extractTime(time, hasMeridiem); return (extractedTime.hours < 10 ? "0" + extractedTime.hours : extractedTime.hours) + ":" + (extractedTime.minutes < 10 ? "0" + extractedTime.minutes : extractedTime.minutes) + " "+ (extractedTime.meridiem !== undefined ? extractedTime.meridiem : ""); diff --git a/src/js/timepickerCreator.js b/src/js/timepickerCreator.js index 16d0d6f..56b80d3 100644 --- a/src/js/timepickerCreator.js +++ b/src/js/timepickerCreator.js @@ -9,7 +9,7 @@ export default function showPicker(config = {}) { const options = Object.assign({}, Config.clockConfig, config); createDom(options); - const time = getTime(options.time); + const time = getTime(options.time, options.meridiem); const clock = new Clock(options, time); styleColors(options); From be111b326f20f755ea2ff7d84e1c5b8066dc6afc Mon Sep 17 00:00:00 2001 From: Daniel Aristizabal Date: Tue, 3 Sep 2019 10:16:23 -0500 Subject: [PATCH 12/13] Upload latest builded files and css --- dist/grudus-timepicker.es5.js | 2 +- dist/grudus-timepicker.es5.js.map | 2 +- dist/grudus-timepicker.js | 159 +++++++++++++++++++++--------- dist/grudus-timepicker.js.map | 2 +- dist/grudus-timepicker.umd.js | 159 +++++++++++++++++++++--------- dist/grudus-timepicker.umd.js.map | 2 +- dist/index.css | 17 ++++ 7 files changed, 251 insertions(+), 92 deletions(-) diff --git a/dist/grudus-timepicker.es5.js b/dist/grudus-timepicker.es5.js index bf6847e..6abd5d7 100644 --- a/dist/grudus-timepicker.es5.js +++ b/dist/grudus-timepicker.es5.js @@ -1,4 +1,4 @@ /*! grudus-timepicker | (c) 2017-2019 grudus | Apache-2.0 license (see LICENSE) */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Timepicker=t()}(this,function(){"use strict";var t=/^([0-1]?[0-9]|2[0-3])$/,i=/^([0-5]?[0-9])$/,n=/^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;function s(e){if(e){if(e instanceof Date)return o(e);if(t.test(e.hours)&&i.test(e.minutes))return{hours:parseInt(e.hours),minutes:parseInt(e.minutes)};if(n.test(e))return function(e){var t=n.exec(e);return{hours:parseInt(t[1]),minutes:parseInt(t[2])}}(e);throw new TypeError("INVALID FORMAT: {"+JSON.stringify(e)+"}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields")}return o(new Date)}function o(e){return{hours:e.getHours(),minutes:e.getMinutes()}}function c(e){var t=s(e);return(t.hours<10?"0"+t.hours:t.hours)+":"+(t.minutes<10?"0"+t.minutes:t.minutes)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r="
\n
\n
\n 21\n :\n 37\n \n \n
\n
\n\n\n
\n
\n
\n
\n
\n
\n\n\n
\n \n \n
\n\n
",u={clock:"g-clock",clockItem:"g-clock-item",inner:"g-clock-inner",outer:"g-clock-outer",item:"g-clock-item",hand:"g-hand-of-a-clock",fadeOut:"g-fade-out",selected:"g-selected",active:"g-active",submit:"g-submit",cancel:"g-cancel",hour:"g-hour",minute:"g-minute"},a={headerId:"g-head",hoursId:"g-hours",minutesId:"g-minutes",clockId:"g-clock",innerId:"g-clock-inner",wrapperId:"g-clock-wrapper",dotId:"g-middle-dot",handId:"g-hand-of-a-clock",buttonsId:"g-buttons",submitId:"g-time-submit",cancelId:"g-time-cancel"},d={clockId:"grudus-clock",clockConfig:{onSubmit:function(){},onCancel:function(){},headerBackground:"#1976D2",headerColor:"#c7d6e1",headerSelected:"#ffffff",wrapperBackground:"#f0fff0",footerBackground:"#f0fff0",submitColor:"#1976D2",cancelColor:"#1976D2",clockBackground:"#CFD8DC",clockItemColor:"#212121",clockItemInnerColor:"#212121",handColor:"#1976D2"},FaceType:{HOURS:"hours",MINUTES:"minutes"}},e=function(e,t,i){return t&&h(e.prototype,t),i&&h(e,i),e};function h(e,t){for(var i=0;i","
","
"," 21"," :"," 37"];e.meridiem&&t.push(["
","AM","PM","
"].join("\n"));var i=["
","
","","","
","
"," ","
","
","
","
","","","
"];return i.push("\n \n \n "),i.push("
"),t.concat(i).join("\n")},a={clock:"g-clock",clockItem:"g-clock-item",inner:"g-clock-inner",outer:"g-clock-outer",item:"g-clock-item",hand:"g-hand-of-a-clock",fadeOut:"g-fade-out",selected:"g-selected",active:"g-active",submit:"g-submit",cancel:"g-cancel",hour:"g-hour",minute:"g-minute"},d={headerId:"g-head",hoursId:"g-hours",minutesId:"g-minutes",clockId:"g-clock",innerId:"g-clock-inner",wrapperId:"g-clock-wrapper",dotId:"g-middle-dot",handId:"g-hand-of-a-clock",buttonsId:"g-buttons",submitId:"g-time-submit",cancelId:"g-time-cancel",gTimeAmId:"g-time-am",gTimePmId:"g-time-pm"},h={clockId:"grudus-clock",clockConfig:{onSubmit:function(){},onCancel:function(){},headerBackground:"#1976D2",headerColor:"#c7d6e1",headerSelected:"#ffffff",wrapperBackground:"#f0fff0",footerBackground:"#f0fff0",submitColor:"#1976D2",cancelColor:"#1976D2",clockBackground:"#CFD8DC",clockItemColor:"#212121",clockItemInnerColor:"#212121",handColor:"#1976D2",meridiem:!1,labels:{cancel:"Cancel",ok:"Ok"}},FaceType:{HOURS:"hours",MINUTES:"minutes"}},e=function(e,t,i){return t&&m(e.prototype,t),i&&m(e,i),e};function m(e,t){for(var i=0;i\\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\" 21\\n\" +\n\" :\\n\" +\n\" 37\\n\" +\n\" \\n\" +\n\" \\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\"\\n\" +\n\"\\n\" +\n\"
\\n\" +\n\"
\" +\n\" \\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\"
\\n\" +\n\"\\n\" +\n\"\\n\" +\n\"
\\n\" +\n\" \\n\" +\n\" \\n\" +\n\"
\\n\" +\n\"\\n\" +\n\"\";","const clockId = \"grudus-clock\";\n\nconst defaultConfig = {\n onSubmit: () => {\n },\n onCancel: () => {\n },\n headerBackground: \"#1976D2\",\n headerColor: \"#c7d6e1\",\n headerSelected: \"#ffffff\",\n wrapperBackground: \"#f0fff0\",\n footerBackground: \"#f0fff0\",\n submitColor: \"#1976D2\",\n cancelColor: \"#1976D2\",\n clockBackground: \"#CFD8DC\",\n clockItemColor: \"#212121\",\n clockItemInnerColor: \"#212121\",\n handColor: \"#1976D2\"\n};\n\nconst FaceType = {HOURS: \"hours\", MINUTES: \"minutes\"};\n\nconst css = {\n clock: \"g-clock\",\n clockItem: \"g-clock-item\",\n inner: \"g-clock-inner\",\n outer: \"g-clock-outer\",\n item: \"g-clock-item\",\n hand: \"g-hand-of-a-clock\",\n fadeOut: \"g-fade-out\",\n selected: \"g-selected\",\n active: \"g-active\",\n submit: \"g-submit\",\n cancel: \"g-cancel\",\n hour: \"g-hour\",\n minute: \"g-minute\"\n};\n\nconst DOM = {\n headerId: \"g-head\",\n hoursId: \"g-hours\",\n minutesId: \"g-minutes\",\n clockId: \"g-clock\",\n innerId: \"g-clock-inner\",\n wrapperId: \"g-clock-wrapper\",\n dotId: \"g-middle-dot\",\n handId: \"g-hand-of-a-clock\",\n buttonsId: \"g-buttons\",\n submitId: \"g-time-submit\",\n cancelId: \"g-time-cancel\"\n};\n\nexport default {clockId, clockConfig: defaultConfig, FaceType};\nexport {css, DOM};","import {DOM} from \"./meta/config\";\n\nexport default class ClockHeader {\n\n constructor(config) {\n this.options = config.options;\n this.time = config.time;\n this.onHourClicked = config.onHourClicked;\n this.onMinutesClicked = config.onMinutesClicked;\n\n this.initView();\n }\n\n initView() {\n this.headerHours = document.getElementById(DOM.hoursId);\n this.headerHours.onclick = () => {\n this.toggleActiveToHours();\n this.onHourClicked();\n };\n\n this.headerMinutes = document.getElementById(DOM.minutesId);\n this.headerMinutes.onclick = () => {\n this.toggleActiveToMinutes();\n this.onMinutesClicked();\n };\n\n this.updateDisplayedTime();\n this.toggleActiveToHours();\n }\n\n toggleActiveToMinutes() {\n this.toggleActive(this.headerHours, this.headerMinutes);\n }\n\n toggleActiveToHours() {\n this.toggleActive(this.headerMinutes, this.headerHours);\n }\n\n toggleActive(objectToRemoveClass, objectToAddClass) {\n objectToRemoveClass.style.color = this.options.headerColor;\n objectToAddClass.style.color = this.options.headerSelected;\n }\n\n updateDisplayedTime() {\n ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours);\n ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes);\n }\n\n static doUpdateDisplayedTime(node, value) {\n if (value < 10)\n node.innerText = \"0\" + value;\n else node.innerText = value;\n }\n}","import Config, {css} from \"../meta/config\";\n\nexport default class MinutesFace {\n\n constructor(items, initialMinutes, updateMinutes) {\n this.displayed = [\"00\", \"05\", \"10\", \"15\", \"20\", \"25\", \"30\", \"35\", \"40\", \"45\", \"50\", \"55\"];\n this.options = items.options;\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.items = items;\n this.minutes = initialMinutes;\n this.updateMinutes = updateMinutes;\n }\n\n onEnter() {\n this.selected = this.findSelected(this.minutes);\n this.colorSelected();\n this.updateMinutes(this.minutes, this.minutes * 6);\n }\n\n onLeave() {\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle) {\n if (this.selected)\n this.removeSelected();\n\n const minute = Math.round(angle / 6) % 60;\n this.selected = this.findSelected(minute);\n this.colorSelected();\n this.minutes = minute;\n this.updateMinutes(this.minutes, angle);\n }\n\n findSelected(minute) {\n return (minute % 5 === 0) ? this.items.clockItems[minute / 5] : this.items.outerClockItems[minute];\n }\n\n colorSelected() {\n if (this.isOuter()) {\n this.selected.classList.add(css.selected);\n return;\n }\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"whitesmoke\";\n }\n\n removeSelected() {\n if (this.isOuter()) {\n this.selected.classList.remove(css.selected);\n return;\n }\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.options.clockItemColor;\n }\n\n isOuter() {\n return this.items.outerClockItems.indexOf(this.selected) > -1;\n }\n}","import Config from \"../meta/config\";\n\nexport default class HoursFace {\n\n constructor(items, initialHours, updateHours) {\n this.displayed = [\"12\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\n this.displayedInner = [\"00\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\", \"23\"];\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.options = items.options;\n\n this.items = items;\n this.hours = initialHours;\n this.updateHours = updateHours;\n }\n\n onEnter() {\n this.items.innerClockElem.style.display = \"block\";\n const isInnerClock = this.hours < 13 && this.hours !== 0;\n const hoursIndex = this.hours % 12;\n this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex];\n this.colorSelected();\n\n this.updateHours(this.hours, hoursIndex * 30, isInnerClock ? this.items.radius : this.items.radius - 50);\n }\n\n onLeave() {\n this.items.innerClockElem.style.display = \"none\";\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle, elem) {\n if (this.selected)\n this.removeSelected();\n\n const index = Math.round(angle / 30) % 12;\n this.selected = (elem === this.items.innerClockElem\n ? this.items.innerClockItems\n : this.items.clockItems)[index];\n\n this.colorSelected();\n this.hours = parseInt(this.selected.innerText);\n const selectedAngle = Math.round(angle / 30) * 30;\n\n this.updateHours(this.hours, selectedAngle,\n elem === this.items.innerClockElem ? this.items.radius - 50 : this.items.radius);\n }\n\n colorSelected() {\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"#ffffff\";\n }\n\n removeSelected() {\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.isInner()\n ? this.options.clockItemInnerColor\n : this.options.clockItemColor;\n }\n\n isInner() {\n return Array.from(this.items.innerClockItems).indexOf(this.selected) > -1;\n }\n}","function toRadians(angle) {\n return angle * (Math.PI / 180);\n}\n\nfunction toDegrees(angle) {\n return angle * (180 / Math.PI);\n}\n\nfunction findMousePosition(event, object) {\n const rect = object.getBoundingClientRect();\n return {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n}\n\nfunction delay(t) {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n}\n\nPromise.delay = function (fn, t) {\n if (!t) {\n t = fn;\n fn = function () {\n };\n }\n return delay(t).then(fn);\n};\n\nPromise.prototype.delay = function (fn, t) {\n return this.then(function () {\n return Promise.delay(fn, t);\n });\n};\n\nexport default {toRadians, toDegrees, findMousePosition};","import Utils from \"../meta/utils\";\nimport {css} from \"../meta/config\";\n\nexport default class ClockFaceCreator {\n\n constructor(clockElem, innerClockElem) {\n this.clockElem = clockElem;\n this.innerClockElem = innerClockElem;\n this.size = {};\n this.middle = {};\n }\n\n create(clockItems, innerClockItems, outerClockItems, face) {\n ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item));\n ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => {\n span.classList.add(css.item, css.inner);\n span.innerText = face.displayedInner[i];\n });\n\n for (let i = 0; i < 60; i++) {\n const span = document.createElement(\"span\");\n span.classList.add(css.outer);\n outerClockItems.push(span);\n this.clockElem.appendChild(span);\n }\n }\n\n static doCreate(clockItems, clockElem, fun) {\n for (let i = 0; i < 12; i++) {\n const span = document.createElement(\"span\");\n fun(span, i);\n clockItems.push(span);\n clockElem.appendChild(span);\n }\n }\n\n calculateSize(clockItems, innerClockItems, outerClockItems) {\n this.size.width = this.clockElem.offsetWidth;\n this.size.height = this.clockElem.offsetHeight;\n this.middle.x = this.size.width / 2;\n this.middle.y = this.size.height / 2;\n this.itemsRadius = this.size.width / 2 - 20;\n\n const innerWidth = this.innerClockElem.offsetWidth;\n const innerHeight = this.innerClockElem.offsetHeight;\n const middleX = innerWidth / 2;\n const middleY = innerHeight / 2;\n\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems);\n ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems);\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems);\n }\n\n static doCalculateSize(middleX, middleY, radius, items) {\n const angleQuantum = 360 / items.length;\n for (let i = 0; i < items.length; i++) {\n\n const angle = Utils.toRadians(i * angleQuantum);\n const item = items[i];\n const itemWidth = item.offsetWidth;\n const itemHeight = item.offsetHeight;\n\n item.style.left = ((middleX + Math.sin(angle) * radius) - itemWidth / 2) + \"px\";\n item.style.bottom = ((middleY + Math.cos(angle) * radius) - itemHeight / 2) + \"px\";\n }\n }\n}","import MinutesFace from \"./minutesFace\";\nimport HoursFace from \"./hoursFace\";\nimport Utils from \"../meta/utils\";\nimport Config, {css, DOM} from \"../meta/config\";\nimport ClockFaceCreator from \"./clockFaceCreator\";\n\nexport default class ClockFace {\n\n constructor(options, initialTime, onTimeUpdate) {\n this.options = options;\n this.time = initialTime;\n this.onTimeUpdate = onTimeUpdate;\n this.isMouseDown = false;\n this.clockItems = [];\n this.innerClockItems = [];\n this.outerClockItems = [];\n this.size = {};\n this.middle = {};\n\n this.initViews();\n this.initTimeFaces(initialTime);\n this.createFace();\n\n this.hoursFace.items.radius = this.itemsRadius;\n\n this.currentFace = this.hoursFace;\n this.changeDisplayed(this.currentFace.displayed);\n }\n\n initViews() {\n this.clockElem = document.getElementById(DOM.clockId);\n this.innerClockElem = document.getElementById(DOM.innerId);\n this.handOfAClock = document.getElementById(DOM.handId);\n\n this.clockElem.onmousedown = () => this.isMouseDown = true;\n this.clockElem.onmouseup = () => {this.isMouseDown = false;\n this.toggleToMinutes();\n };\n\n this.handOfAClock.onmouseup = (e) => e.stopPropagation();\n this.handOfAClock.onmousemove = (e) => e.stopPropagation();\n this.handOfAClock.onclick = (e) => e.stopPropagation();\n\n this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem);\n this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem);\n\n this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem);\n this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem);\n }\n\n initTimeFaces(initialTime) {\n this.minutesFace = new MinutesFace({\n options: this.options,\n clockItems: this.clockItems,\n outerClockItems: this.outerClockItems\n }, initialTime.minutes, (minutes, angle) => this.updateMinutes(minutes, angle));\n\n this.hoursFace = new HoursFace({\n options: this.options,\n innerClockItems: this.innerClockItems,\n clockItems: this.clockItems,\n innerClockElem: this.innerClockElem\n }, initialTime.hours, (hours, angle, radius) => this.updateHours(hours, angle, radius));\n }\n\n onStart() {\n this.currentFace.onEnter();\n }\n\n createFace() {\n const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem);\n clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace);\n clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems);\n\n this.size = clockFaceCreator.size;\n this.middle = clockFaceCreator.middle;\n this.itemsRadius = clockFaceCreator.itemsRadius;\n }\n\n selectTime(event, isMouseDown, elem) {\n if (!(isMouseDown || this.isMouseDown))\n return;\n const mouse = Utils.findMousePosition(event, this.clockElem);\n const x = mouse.x - this.middle.x;\n const y = this.middle.y - mouse.y;\n let angle = 90 - Utils.toDegrees(Math.atan(y / x));\n if (x < 0) angle += 180;\n\n this.currentFace.selectTime(angle, elem);\n event.stopPropagation();\n }\n\n changeDisplayed(array) {\n for (let i = 0; i < this.clockItems.length; i++)\n this.clockItems[i].innerText = array[i];\n }\n\n onEachClockElement(fun) {\n [].forEach.call(this.clockItems, c => fun(c));\n }\n\n updateMinutes(minutes, angle) {\n this.time.minutes = minutes;\n this.calculateHandOfTheClock(angle, this.itemsRadius);\n this.onTimeUpdate(this.time, Config.FaceType.MINUTES);\n }\n\n updateHours(hours, angle, radius) {\n this.time.hours = hours;\n this.calculateHandOfTheClock(angle, radius);\n this.onTimeUpdate(this.time, Config.FaceType.HOURS);\n }\n\n calculateHandOfTheClock(angle, size = this.itemsRadius) {\n this.handOfAClock.style.transform = `rotate(${angle - 90}deg)`;\n this.handOfAClock.style.width = size + \"px\";\n }\n\n toggleToHours() {\n this.minutesFace.onLeave();\n this.toggleTime(this.hoursFace);\n }\n\n toggleToMinutes() {\n this.hoursFace.onLeave();\n this.toggleTime(this.minutesFace);\n }\n\n toggleTime(face) {\n if (this.currentFace !== face) {\n this.onEachClockElement(c => c.classList.add(css.fadeOut));\n this.handOfAClock.classList.add(css.fadeOut);\n Promise.delay(() => {\n this.onEachClockElement(c => c.classList.remove(css.fadeOut));\n this.handOfAClock.classList.remove(css.fadeOut);\n this.changeDisplayed(face.displayed);\n this.currentFace = face;\n this.onEachClockElement(c => this.removeSelected(c));\n face.onEnter();\n }, 300);\n }\n }\n\n removeSelected(c) {\n c.classList.remove(css.selected);\n c.style.background = \"transparent\";\n c.style.color = this.options.clockItemColor;\n }\n}","import ClockHeader from \"./clockHeader\";\nimport ClockFace from \"./face/clockFace\";\nimport Config, {DOM} from \"./meta/config\";\nimport formatTime from \"./timeFormatter\";\n\nexport default class Clock {\n\n constructor(options, time) {\n this.options = options;\n\n this.initView();\n this.time = time;\n this.initElements();\n }\n\n initView() {\n this.submitButton = document.getElementById(DOM.submitId);\n this.submitButton.onclick = () => {\n const time = this.time;\n time.formatted = () => formatTime(time);\n this.options.onSubmit(time);\n Clock.dispose();\n };\n\n this.cancelButton = document.getElementById(DOM.cancelId);\n this.cancelButton.onclick = () => {\n this.options.onCancel();\n Clock.dispose();\n };\n }\n\n initElements() {\n this.header = new ClockHeader({\n options: this.options,\n time: this.time,\n onHourClicked: () => this.toggleToHours(),\n onMinutesClicked: () => this.toggleToMinutes()\n });\n this.clockFace = new ClockFace(this.options, this.time, (time, type) => this.onTimeUpdate(time, type));\n }\n\n onStart() {\n this.clockFace.onStart();\n }\n\n toggleToHours() {\n this.clockFace.toggleToHours();\n }\n\n toggleToMinutes() {\n this.clockFace.toggleToMinutes();\n }\n\n onTimeUpdate(time, type) {\n this.time = time;\n this.header.time = time;\n this.header.updateDisplayedTime();\n if (type === Config.FaceType.MINUTES)\n this.header.toggleActiveToMinutes();\n\n }\n\n static dispose() {\n document.body.removeChild(document.getElementById(Config.clockId));\n }\n}","import {css, DOM} from \"./meta/config\";\n\nexport default function styleColors(options) {\n document.getElementById(DOM.headerId).style.background = options.headerBackground;\n document.getElementById(DOM.headerId).style.color = options.headerColor;\n document.getElementById(DOM.wrapperId).style.background = options.wrapperBackground;\n document.getElementById(DOM.clockId).style.background = options.clockBackground;\n document.getElementById(DOM.handId).style.background = options.handColor;\n document.getElementById(DOM.dotId).style.background = options.handColor;\n document.getElementById(DOM.buttonsId).style.background = options.footerBackground;\n document.getElementById(DOM.submitId).style.color = options.submitColor;\n document.getElementById(DOM.cancelId).style.color = options.cancelColor;\n\n changeColor(css.clockItem, options.clockItemColor);\n changeColor(css.inner, options.clockItemInnerColor);\n changeColor(css.outer, options.handColor, \"borderColor\");\n}\n\nfunction changeColor(className, color, property = \"color\") {\n const items = Array.from(document.getElementsByClassName(className));\n for (const item of items)\n item.style[property] = color;\n}\n","import clockHtml from \"./meta/clockHtml\";\nimport Config from \"./meta/config\";\nimport Clock from \"./clock\";\nimport styleColors from \"./colorStylists\";\nimport getTime from \"./timeExtractor\";\n\n\nexport default function showPicker(config = {}) {\n createDom();\n\n const options = Object.assign({}, Config.clockConfig, config);\n const time = getTime(options.time);\n\n const clock = new Clock(options, time);\n styleColors(options);\n clock.onStart();\n}\n\n\nfunction createDom() {\n if (document.getElementById(Config.clockId))\n throw Error(\"There is already one running grudus-timepicker instance!\");\n\n const clockDiv = document.createElement(\"div\");\n clockDiv.id = Config.clockId;\n clockDiv.innerHTML = clockHtml;\n document.body.appendChild(clockDiv);\n}\n","import formatTime from \"./timeFormatter\";\nimport showPicker from \"./timepickerCreator\";\n\nexport default {\n showPicker: (config) => showPicker(config),\n format: (time) => formatTime(time)\n};\n\n"],"names":["hoursRegex","minutesRegex","regex","extractTime","date","Date","fromDate","test","hours","minutes","parseInt","parsed","exec","fromRegex","TypeError","JSON","stringify","getHours","getMinutes","time","extractedTime","css","DOM","clockId","clockConfig","FaceType","HOURS","MINUTES","ClockHeader","headerHours","document","getElementById","hoursId","onclick","toggleActiveToHours","onHourClicked","headerMinutes","minutesId","toggleActiveToMinutes","onMinutesClicked","updateDisplayedTime","toggleActive","this","objectToRemoveClass","objectToAddClass","style","color","options","headerColor","headerSelected","doUpdateDisplayedTime","node","value","innerText","config","initView","MinutesFace","selected","findSelected","colorSelected","updateMinutes","removeSelected","undefined","angle","minute","Math","round","items","clockItems","outerClockItems","isOuter","classList","add","background","handColor","remove","clockItemColor","indexOf","initialMinutes","displayed","type","Config","HoursFace","innerClockElem","display","isInnerClock","hoursIndex","innerClockItems","updateHours","radius","elem","index","selectedAngle","isInner","clockItemInnerColor","Array","from","initialHours","displayedInner","Promise","delay","fn","t","resolve","then","prototype","toRadians","PI","toDegrees","findMousePosition","event","object","rect","getBoundingClientRect","clientX","left","clientY","top","face","doCreate","clockElem","span","item","i","inner","createElement","outer","push","appendChild","size","width","offsetWidth","height","offsetHeight","middle","x","y","itemsRadius","middleX","middleY","doCalculateSize","fun","angleQuantum","length","Utils","itemWidth","itemHeight","sin","bottom","cos","ClockFace","innerId","handOfAClock","handId","onmousedown","_this","isMouseDown","onmouseup","toggleToMinutes","e","stopPropagation","onmousemove","selectTime","initialTime","minutesFace","_this2","hoursFace","currentFace","onEnter","clockFaceCreator","ClockFaceCreator","create","calculateSize","mouse","atan","array","forEach","call","c","calculateHandOfTheClock","onTimeUpdate","transform","onLeave","toggleTime","onEachClockElement","fadeOut","changeDisplayed","_this3","initViews","initTimeFaces","createFace","Clock","submitButton","submitId","formatted","formatTime","onSubmit","dispose","cancelButton","cancelId","onCancel","header","toggleToHours","clockFace","onStart","body","removeChild","initElements","changeColor","className","property","getElementsByClassName","showPicker","Error","clockDiv","id","innerHTML","clockHtml","Object","assign","getTime","clock","headerId","headerBackground","wrapperId","wrapperBackground","clockBackground","dotId","buttonsId","footerBackground","submitColor","cancelColor","clockItem"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"grudus-timepicker.es5.js","sources":["../src/js/timeExtractor.js","../src/js/timeFormatter.js","../src/js/meta/clockHtml.js","../src/js/meta/config.js","../src/js/clockHeader.js","../src/js/face/minutesFace.js","../src/js/face/hoursFace.js","../src/js/meta/utils.js","../src/js/face/clockFaceCreator.js","../src/js/face/clockFace.js","../src/js/clock.js","../src/js/colorStylists.js","../src/js/timepickerCreator.js","../src/js/index.js"],"sourcesContent":["const hoursRegex = /^([0-1]?[0-9]|2[0-3])$/;\nconst minutesRegex = /^([0-5]?[0-9])$/;\nconst regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;\n\nexport default function extractTime(date, hasMeridiem) {\n if (!date)\n return fromDate(new Date(), hasMeridiem);\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes) \n && date.meridiem !== undefined \n && date.meridiem.length > 0)\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes), meridiem: date.meridiem};\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes))\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes)};\n else if (regex.test(date))\n return fromRegex(date);\n else if (date instanceof Date)\n return fromDate(date, hasMeridiem);\n else\n throw new TypeError(`INVALID FORMAT: {${JSON.stringify(date)}}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields`);\n}\n\nfunction fromRegex(date) {\n const parsed = regex.exec(date);\n return {hours: parseInt(parsed[1]), minutes: parseInt(parsed[2])};\n}\n\nfunction fromDate(date, hasMeridiem) {\n if (hasMeridiem !== undefined && !hasMeridiem) return {hours: date.getHours(), minutes: date.getMinutes()};\n return getTimeWithMeridiem(date);\n\n}\n\nfunction getTimeWithMeridiem(date) {\n let meridiem = \"\";\n let hours = date.getHours(); \n \n if (hours < 13) meridiem = \"am\";\n else meridiem = \"pm\";\n \n if (hours !== 12) hours = hours % 12;\n \n return {hours, minutes: date.getMinutes(), meridiem};\n}","import extractTime from \"./timeExtractor\";\n\nexport default function (time, hasMeridiem) {\n const extractedTime = extractTime(time, hasMeridiem);\n return (extractedTime.hours < 10 ? \"0\" + extractedTime.hours : extractedTime.hours)\n + \":\" + (extractedTime.minutes < 10 ? \"0\" + extractedTime.minutes : extractedTime.minutes)\n + \" \"+ (extractedTime.meridiem !== undefined ? extractedTime.meridiem : \"\");\n}","\nexport default (options) => {\n const arrayTemplate = [\"
\" ,\n \"
\" ,\n \"
\" ,\n \" 21\" ,\n \" :\" ,\n \" 37\"];\n if (options.meridiem){\n arrayTemplate.push([\"
\" ,\n \"AM\" ,\n \"PM\",\n \"
\"].join(\"\\n\"));\n \n }\n const nextTemplate = [\"
\" ,\n \"
\" ,\n \"\" ,\n \"\" ,\n \"
\" ,\n \"
\" ,\n \" \" ,\n \"
\" ,\n \"
\" ,\n \"
\" ,\n \"
\" ,\n \"\" ,\n \"\" ,\n \"
\"];\n\n nextTemplate.push(`\n \n \n `);\n nextTemplate.push(\"
\");\n return arrayTemplate.concat(nextTemplate).join(\"\\n\");\n};","const clockId = \"grudus-clock\";\n\nconst defaultConfig = {\n onSubmit: () => {\n },\n onCancel: () => {\n },\n headerBackground: \"#1976D2\",\n headerColor: \"#c7d6e1\",\n headerSelected: \"#ffffff\",\n wrapperBackground: \"#f0fff0\",\n footerBackground: \"#f0fff0\",\n submitColor: \"#1976D2\",\n cancelColor: \"#1976D2\",\n clockBackground: \"#CFD8DC\",\n clockItemColor: \"#212121\",\n clockItemInnerColor: \"#212121\",\n handColor: \"#1976D2\",\n meridiem: false,\n labels: {\n cancel:\"Cancel\",\n ok:\"Ok\",\n }\n};\n\nconst FaceType = {HOURS: \"hours\", MINUTES: \"minutes\"};\n\nconst css = {\n clock: \"g-clock\",\n clockItem: \"g-clock-item\",\n inner: \"g-clock-inner\",\n outer: \"g-clock-outer\",\n item: \"g-clock-item\",\n hand: \"g-hand-of-a-clock\",\n fadeOut: \"g-fade-out\",\n selected: \"g-selected\",\n active: \"g-active\",\n submit: \"g-submit\",\n cancel: \"g-cancel\",\n hour: \"g-hour\",\n minute: \"g-minute\"\n};\n\nconst DOM = {\n headerId: \"g-head\",\n hoursId: \"g-hours\",\n minutesId: \"g-minutes\",\n clockId: \"g-clock\",\n innerId: \"g-clock-inner\",\n wrapperId: \"g-clock-wrapper\",\n dotId: \"g-middle-dot\",\n handId: \"g-hand-of-a-clock\",\n buttonsId: \"g-buttons\",\n submitId: \"g-time-submit\",\n cancelId: \"g-time-cancel\",\n gTimeAmId: \"g-time-am\",\n gTimePmId: \"g-time-pm\"\n};\n\nexport default {clockId, clockConfig: defaultConfig, FaceType};\nexport {css, DOM};","import {DOM} from \"./meta/config\";\n\nexport default class ClockHeader {\n\n constructor(config) {\n this.options = config.options;\n this.time = config.time;\n this.onHourClicked = config.onHourClicked;\n this.onMinutesClicked = config.onMinutesClicked;\n\n this.initView();\n }\n\n initView() {\n this.headerHours = document.getElementById(DOM.hoursId);\n this.headerHours.onclick = () => {\n this.toggleActiveToHours();\n this.onHourClicked();\n };\n\n this.headerMinutes = document.getElementById(DOM.minutesId);\n this.headerMinutes.onclick = () => {\n this.toggleActiveToMinutes();\n this.onMinutesClicked();\n };\n if (this.options.meridiem) {\n this.headerAm = document.getElementById(DOM.gTimeAmId);\n this.headerPm = document.getElementById(DOM.gTimePmId);\n this.headerAm.onclick = () => {\n this.toogleActiveMeridiemAm();\n this.time.meridiem = \"am\";\n };\n this.headerPm.onclick = () => {\n this.toogleActiveMeridiemPm();\n this.time.meridiem = \"pm\";\n };\n if (this.time.meridiem === \"am\") this.toogleActiveMeridiemAm();\n else if (this.time.meridiem === \"pm\") this.toogleActiveMeridiemPm();\n else this.defaultToggleActiveMeridiem();\n }\n\n this.updateDisplayedTime();\n this.toggleActiveToHours();\n }\n\n toggleActiveToMinutes() {\n this.toggleActive(this.headerHours, this.headerMinutes);\n }\n\n toggleActiveToHours() {\n this.toggleActive(this.headerMinutes, this.headerHours);\n }\n\n toogleActiveMeridiemAm() {\n this.toggleActive(this.headerPm, this.headerAm);\n \n }\n\n toogleActiveMeridiemPm() {\n this.toggleActive(this.headerAm, this.headerPm);\n }\n \n defaultToggleActiveMeridiem() {\n const { hours } = this.time;\n if (hours < 13) this.toogleActiveMeridiemAm();\n else this.toogleActiveMeridiemPm();\n }\n\n toggleActive(objectToRemoveClass, objectToAddClass) {\n objectToRemoveClass.style.color = this.options.headerColor;\n objectToAddClass.style.color = this.options.headerSelected;\n }\n\n updateDisplayedTime() {\n ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours, this.options.meridiem);\n ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes);\n }\n\n static doUpdateDisplayedTime(node, value, meridiem) {\n if (meridiem && value !== 12) value = value % 12;\n if (value < 10)\n node.innerText = \"0\" + value;\n else node.innerText = value;\n }\n}","import Config, {css} from \"../meta/config\";\n\nexport default class MinutesFace {\n\n constructor(items, initialMinutes, updateMinutes) {\n this.displayed = [\"00\", \"05\", \"10\", \"15\", \"20\", \"25\", \"30\", \"35\", \"40\", \"45\", \"50\", \"55\"];\n this.options = items.options;\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.items = items;\n this.minutes = initialMinutes;\n this.updateMinutes = updateMinutes;\n }\n\n onEnter() {\n this.selected = this.findSelected(this.minutes);\n this.colorSelected();\n this.updateMinutes(this.minutes, this.minutes * 6);\n }\n\n onLeave() {\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle) {\n if (this.selected)\n this.removeSelected();\n\n const minute = Math.round(angle / 6) % 60;\n this.selected = this.findSelected(minute);\n this.colorSelected();\n this.minutes = minute;\n this.updateMinutes(this.minutes, angle);\n }\n\n findSelected(minute) {\n return (minute % 5 === 0) ? this.items.clockItems[minute / 5] : this.items.outerClockItems[minute];\n }\n\n colorSelected() {\n if (this.isOuter()) {\n this.selected.classList.add(css.selected);\n return;\n }\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"whitesmoke\";\n }\n\n removeSelected() {\n if (this.isOuter()) {\n this.selected.classList.remove(css.selected);\n return;\n }\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.options.clockItemColor;\n }\n\n isOuter() {\n return this.items.outerClockItems.indexOf(this.selected) > -1;\n }\n}","import Config from \"../meta/config\";\n\nexport default class HoursFace {\n\n constructor(items, initialHours, updateHours) {\n this.displayed = [\"12\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\n this.displayedInner = [\"00\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\", \"23\"];\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.options = items.options;\n\n this.items = items;\n this.hours = initialHours;\n this.updateHours = updateHours;\n }\n\n onEnter() {\n\n if (this.items.innerClockElem !== null)\n this.items.innerClockElem.style.display = \"block\";\n const isInnerClock = this.hours < 13 && this.hours !== 0;\n const hoursIndex = this.hours % 12;\n let radius = this.items.radius;\n if (this.options.meridiem && !isInnerClock) this.selected = this.items.clockItems[hoursIndex];\n else {\n this.selected = isInnerClock ? \n this.items.clockItems[hoursIndex] : \n this.items.innerClockItems[hoursIndex];\n radius = isInnerClock ? radius : radius - 50;\n }\n this.colorSelected();\n\n this.updateHours(this.hours, hoursIndex * 30, radius);\n }\n\n onLeave() {\n if (this.items.innerClockElem !== null)\n this.items.innerClockElem.style.display = \"none\";\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle, elem) {\n if (this.selected)\n this.removeSelected();\n\n const index = Math.round(angle / 30) % 12;\n this.selected = (elem === this.items.innerClockElem \n && this.items.innerClockElem!== undefined\n ? this.items.innerClockItems\n : this.items.clockItems)[index];\n\n this.colorSelected();\n this.hours = parseInt(this.selected.innerText);\n const selectedAngle = Math.round(angle / 30) * 30;\n\n this.updateHours(this.hours, selectedAngle,\n elem === this.items.innerClockElem && this.items.innerClockElem!== undefined ? this.items.radius - 50 : this.items.radius);\n }\n\n colorSelected() {\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"#ffffff\";\n }\n\n removeSelected() {\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.isInner()\n ? this.options.clockItemInnerColor\n : this.options.clockItemColor;\n }\n\n isInner() {\n return Array.from(this.items.innerClockItems).indexOf(this.selected) > -1;\n }\n}","function toRadians(angle) {\n return angle * (Math.PI / 180);\n}\n\nfunction toDegrees(angle) {\n return angle * (180 / Math.PI);\n}\n\nfunction findMousePosition(event, object) {\n const rect = object.getBoundingClientRect();\n return {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n}\n\nfunction delay(t) {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n}\n\nPromise.delay = function (fn, t) {\n if (!t) {\n t = fn;\n fn = function () {\n };\n }\n return delay(t).then(fn);\n};\n\nPromise.prototype.delay = function (fn, t) {\n return this.then(function () {\n return Promise.delay(fn, t);\n });\n};\n\nexport default {toRadians, toDegrees, findMousePosition};","import Utils from \"../meta/utils\";\nimport {css} from \"../meta/config\";\n\nexport default class ClockFaceCreator {\n\n constructor(clockElem, innerClockElem, options) {\n this.clockElem = clockElem;\n this.innerClockElem = innerClockElem;\n this.size = {};\n this.middle = {};\n this.options = options;\n }\n\n create(clockItems, innerClockItems, outerClockItems, face) {\n ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item));\n if (!this.options.meridiem) {\n ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => {\n span.classList.add(css.item, css.inner);\n span.innerText = face.displayedInner[i];\n });\n }\n\n for (let i = 0; i < 60; i++) {\n const span = document.createElement(\"span\");\n span.classList.add(css.outer);\n outerClockItems.push(span);\n this.clockElem.appendChild(span);\n }\n }\n\n static doCreate(clockItems, clockElem, fun) {\n for (let i = 0; i < 12; i++) {\n const span = document.createElement(\"span\");\n fun(span, i);\n clockItems.push(span);\n clockElem.appendChild(span);\n }\n }\n\n calculateSize(clockItems, innerClockItems, outerClockItems) {\n this.size.width = this.clockElem.offsetWidth;\n this.size.height = this.clockElem.offsetHeight;\n this.middle.x = this.size.width / 2;\n this.middle.y = this.size.height / 2;\n this.itemsRadius = this.size.width / 2 - 20;\n\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems);\n if (!this.options.meridiem) {\n const innerWidth = this.innerClockElem.offsetWidth;\n const innerHeight = this.innerClockElem.offsetHeight;\n const middleX = innerWidth / 2;\n const middleY = innerHeight / 2;\n ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems);\n }\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems);\n }\n\n static doCalculateSize(middleX, middleY, radius, items) {\n const angleQuantum = 360 / items.length;\n for (let i = 0; i < items.length; i++) {\n\n const angle = Utils.toRadians(i * angleQuantum);\n const item = items[i];\n const itemWidth = item.offsetWidth;\n const itemHeight = item.offsetHeight;\n\n item.style.left = ((middleX + Math.sin(angle) * radius) - itemWidth / 2) + \"px\";\n item.style.bottom = ((middleY + Math.cos(angle) * radius) - itemHeight / 2) + \"px\";\n }\n }\n}","import MinutesFace from \"./minutesFace\";\nimport HoursFace from \"./hoursFace\";\nimport Utils from \"../meta/utils\";\nimport Config, {css, DOM} from \"../meta/config\";\nimport ClockFaceCreator from \"./clockFaceCreator\";\n\nexport default class ClockFace {\n\n constructor(options, initialTime, onTimeUpdate) {\n this.options = options;\n this.time = initialTime;\n this.onTimeUpdate = onTimeUpdate;\n this.isMouseDown = false;\n this.clockItems = [];\n this.innerClockItems = [];\n this.outerClockItems = [];\n this.size = {};\n this.middle = {};\n\n this.initViews();\n this.initTimeFaces(initialTime);\n this.createFace(options);\n\n this.hoursFace.items.radius = this.itemsRadius;\n\n this.currentFace = this.hoursFace;\n this.changeDisplayed(this.currentFace.displayed);\n }\n\n initViews() {\n this.clockElem = document.getElementById(DOM.clockId);\n this.innerClockElem = (this.options.meridiem) ? null : document.getElementById(DOM.innerId);\n this.handOfAClock = document.getElementById(DOM.handId);\n\n this.clockElem.onmousedown = () => this.isMouseDown = true;\n this.clockElem.onmouseup = () => {this.isMouseDown = false;\n this.toggleToMinutes();\n };\n\n this.handOfAClock.onmouseup = (e) => e.stopPropagation();\n this.handOfAClock.onmousemove = (e) => e.stopPropagation();\n this.handOfAClock.onclick = (e) => e.stopPropagation();\n\n this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem);\n this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem);\n\n if (!this.options.meridiem) {\n this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem);\n this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem);\n }\n }\n\n initTimeFaces(initialTime) {\n this.minutesFace = new MinutesFace({\n options: this.options,\n clockItems: this.clockItems,\n outerClockItems: this.outerClockItems\n }, initialTime.minutes, (minutes, angle) => this.updateMinutes(minutes, angle));\n\n this.hoursFace = new HoursFace({\n options: this.options,\n innerClockItems: this.innerClockItems,\n clockItems: this.clockItems,\n innerClockElem: this.innerClockElem\n }, initialTime.hours, (hours, angle, radius) => this.updateHours(hours, angle, radius));\n }\n\n onStart() {\n this.currentFace.onEnter();\n }\n\n createFace() {\n const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem, this.options);\n clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace);\n clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems);\n\n this.size = clockFaceCreator.size;\n this.middle = clockFaceCreator.middle;\n this.itemsRadius = clockFaceCreator.itemsRadius;\n }\n\n selectTime(event, isMouseDown, elem) {\n if (!(isMouseDown || this.isMouseDown))\n return;\n const mouse = Utils.findMousePosition(event, this.clockElem);\n const x = mouse.x - this.middle.x;\n const y = this.middle.y - mouse.y;\n let angle = 90 - Utils.toDegrees(Math.atan(y / x));\n if (x < 0) angle += 180;\n\n this.currentFace.selectTime(angle, elem);\n event.stopPropagation();\n }\n\n changeDisplayed(array) {\n for (let i = 0; i < this.clockItems.length; i++)\n this.clockItems[i].innerText = array[i];\n }\n\n onEachClockElement(fun) {\n [].forEach.call(this.clockItems, c => fun(c));\n }\n\n updateMinutes(minutes, angle) {\n this.time.minutes = minutes;\n this.calculateHandOfTheClock(angle, this.itemsRadius);\n this.onTimeUpdate(this.time, Config.FaceType.MINUTES);\n }\n\n updateHours(hours, angle, radius) {\n this.time.hours = hours;\n this.calculateHandOfTheClock(angle, radius);\n this.onTimeUpdate(this.time, Config.FaceType.HOURS);\n }\n\n calculateHandOfTheClock(angle, size = this.itemsRadius) {\n this.handOfAClock.style.transform = `rotate(${angle - 90}deg)`;\n this.handOfAClock.style.width = size + \"px\";\n }\n\n toggleToHours() {\n this.minutesFace.onLeave();\n this.toggleTime(this.hoursFace);\n }\n\n toggleToMinutes() {\n this.hoursFace.onLeave();\n this.toggleTime(this.minutesFace);\n }\n\n toggleTime(face) {\n if (this.currentFace !== face) {\n this.onEachClockElement(c => c.classList.add(css.fadeOut));\n this.handOfAClock.classList.add(css.fadeOut);\n Promise.delay(() => {\n this.onEachClockElement(c => c.classList.remove(css.fadeOut));\n this.handOfAClock.classList.remove(css.fadeOut);\n this.changeDisplayed(face.displayed);\n this.currentFace = face;\n this.onEachClockElement(c => this.removeSelected(c));\n face.onEnter();\n }, 300);\n }\n }\n\n removeSelected(c) {\n c.classList.remove(css.selected);\n c.style.background = \"transparent\";\n c.style.color = this.options.clockItemColor;\n }\n}","import ClockHeader from \"./clockHeader\";\nimport ClockFace from \"./face/clockFace\";\nimport Config, {DOM} from \"./meta/config\";\nimport formatTime from \"./timeFormatter\";\n\nexport default class Clock {\n\n constructor(options, time) {\n this.options = options;\n\n this.initView();\n this.time = time;\n this.initElements();\n }\n\n initView() {\n this.submitButton = document.getElementById(DOM.submitId);\n this.submitButton.onclick = () => {\n const time = this.time;\n time.formatted = () => formatTime(time, this.options.meridiem);\n this.options.onSubmit(time);\n Clock.dispose();\n };\n\n this.cancelButton = document.getElementById(DOM.cancelId);\n this.cancelButton.onclick = () => {\n this.options.onCancel();\n Clock.dispose();\n };\n }\n\n initElements() {\n this.header = new ClockHeader({\n options: this.options,\n time: this.time,\n onHourClicked: () => this.toggleToHours(),\n onMinutesClicked: () => this.toggleToMinutes()\n });\n this.clockFace = new ClockFace(this.options, this.time, (time, type) => this.onTimeUpdate(time, type));\n }\n\n onStart() {\n this.clockFace.onStart();\n }\n\n toggleToHours() {\n this.clockFace.toggleToHours();\n }\n\n toggleToMinutes() {\n this.clockFace.toggleToMinutes();\n }\n\n onTimeUpdate(time, type) {\n this.time = time;\n this.header.time = time;\n this.header.updateDisplayedTime();\n if (type === Config.FaceType.MINUTES)\n this.header.toggleActiveToMinutes();\n\n }\n\n static dispose() {\n document.body.removeChild(document.getElementById(Config.clockId));\n }\n}","import {css, DOM} from \"./meta/config\";\n\nexport default function styleColors(options) {\n document.getElementById(DOM.headerId).style.background = options.headerBackground;\n document.getElementById(DOM.headerId).style.color = options.headerColor;\n document.getElementById(DOM.wrapperId).style.background = options.wrapperBackground;\n document.getElementById(DOM.clockId).style.background = options.clockBackground;\n document.getElementById(DOM.handId).style.background = options.handColor;\n document.getElementById(DOM.dotId).style.background = options.handColor;\n document.getElementById(DOM.buttonsId).style.background = options.footerBackground;\n document.getElementById(DOM.submitId).style.color = options.submitColor;\n document.getElementById(DOM.cancelId).style.color = options.cancelColor;\n\n changeColor(css.clockItem, options.clockItemColor);\n changeColor(css.inner, options.clockItemInnerColor);\n changeColor(css.outer, options.handColor, \"borderColor\");\n}\n\nfunction changeColor(className, color, property = \"color\") {\n const items = Array.from(document.getElementsByClassName(className));\n for (const item of items)\n item.style[property] = color;\n}\n","import clockHtml from \"./meta/clockHtml\";\nimport Config from \"./meta/config\";\nimport Clock from \"./clock\";\nimport styleColors from \"./colorStylists\";\nimport getTime from \"./timeExtractor\";\n\n\nexport default function showPicker(config = {}) {\n \n const options = Object.assign({}, Config.clockConfig, config);\n createDom(options);\n const time = getTime(options.time, options.meridiem);\n\n const clock = new Clock(options, time);\n styleColors(options);\n clock.onStart();\n}\n\n\nfunction createDom(options) {\n if (document.getElementById(Config.clockId))\n throw Error(\"There is already one running grudus-timepicker instance!\");\n\n const clockDiv = document.createElement(\"div\");\n clockDiv.id = Config.clockId;\n clockDiv.innerHTML = clockHtml(options);\n document.body.appendChild(clockDiv);\n}\n","import formatTime from \"./timeFormatter\";\nimport showPicker from \"./timepickerCreator\";\n\nexport default {\n showPicker: (config) => showPicker(config),\n format: (time) => formatTime(time)\n};\n\n"],"names":["hoursRegex","minutesRegex","regex","extractTime","date","hasMeridiem","test","hours","minutes","undefined","meridiem","length","parseInt","parsed","exec","fromRegex","Date","fromDate","TypeError","JSON","stringify","getHours","getMinutes","getTimeWithMeridiem","time","extractedTime","options","arrayTemplate","push","join","nextTemplate","labels","cancel","ok","concat","css","DOM","clockId","clockConfig","FaceType","HOURS","MINUTES","ClockHeader","headerHours","document","getElementById","hoursId","onclick","toggleActiveToHours","onHourClicked","headerMinutes","minutesId","toggleActiveToMinutes","onMinutesClicked","this","headerAm","gTimeAmId","headerPm","gTimePmId","toogleActiveMeridiemAm","toogleActiveMeridiemPm","defaultToggleActiveMeridiem","updateDisplayedTime","toggleActive","objectToRemoveClass","objectToAddClass","style","color","headerColor","headerSelected","doUpdateDisplayedTime","node","value","innerText","config","initView","MinutesFace","selected","findSelected","colorSelected","updateMinutes","removeSelected","angle","minute","Math","round","items","clockItems","outerClockItems","isOuter","classList","add","background","handColor","remove","clockItemColor","indexOf","initialMinutes","displayed","type","Config","HoursFace","innerClockElem","display","isInnerClock","hoursIndex","radius","innerClockItems","updateHours","elem","index","selectedAngle","isInner","clockItemInnerColor","Array","from","initialHours","displayedInner","Promise","delay","fn","t","resolve","then","prototype","toRadians","PI","toDegrees","findMousePosition","event","object","rect","getBoundingClientRect","clientX","left","clientY","top","face","doCreate","clockElem","span","item","i","inner","createElement","outer","appendChild","size","width","offsetWidth","height","offsetHeight","middle","x","y","itemsRadius","doCalculateSize","innerWidth","innerHeight","fun","middleX","middleY","angleQuantum","Utils","itemWidth","itemHeight","sin","bottom","cos","ClockFace","innerId","handOfAClock","handId","onmousedown","_this","isMouseDown","onmouseup","toggleToMinutes","e","stopPropagation","onmousemove","selectTime","initialTime","minutesFace","_this2","hoursFace","currentFace","onEnter","clockFaceCreator","ClockFaceCreator","create","calculateSize","mouse","atan","array","forEach","call","c","calculateHandOfTheClock","onTimeUpdate","transform","onLeave","toggleTime","onEachClockElement","fadeOut","changeDisplayed","_this3","initViews","initTimeFaces","createFace","Clock","submitButton","submitId","formatted","formatTime","onSubmit","dispose","cancelButton","cancelId","onCancel","header","toggleToHours","clockFace","onStart","body","removeChild","initElements","changeColor","className","property","getElementsByClassName","showPicker","Object","assign","Error","clockDiv","id","innerHTML","clockHtml","getTime","clock","headerId","headerBackground","wrapperId","wrapperBackground","clockBackground","dotId","buttonsId","footerBackground","submitColor","cancelColor","clockItem"],"mappings":"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"} \ No newline at end of file diff --git a/dist/grudus-timepicker.js b/dist/grudus-timepicker.js index d0cd0a4..3eb79c3 100644 --- a/dist/grudus-timepicker.js +++ b/dist/grudus-timepicker.js @@ -1,11 +1,11 @@ -/*! grudus-timepicker | (c) 2017-2017 +/*! grudus-timepicker | (c) 2017-2019 grudus | Apache-2.0 license (see LICENSE) */ var hoursRegex = /^([0-1]?[0-9]|2[0-3])$/; var minutesRegex = /^([0-5]?[0-9])$/; var regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/; -function extractTime(date) { - if (!date) return fromDate(new Date());else if (date instanceof Date) return fromDate(date);else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes)) return { hours: parseInt(date.hours), minutes: parseInt(date.minutes) };else if (regex.test(date)) return fromRegex(date);else throw new TypeError("INVALID FORMAT: {" + JSON.stringify(date) + "}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields"); +function extractTime(date, hasMeridiem) { + if (!date) return fromDate(new Date(), hasMeridiem);else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes) && date.meridiem !== undefined && date.meridiem.length > 0) return { hours: parseInt(date.hours), minutes: parseInt(date.minutes), meridiem: date.meridiem };else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes)) return { hours: parseInt(date.hours), minutes: parseInt(date.minutes) };else if (regex.test(date)) return fromRegex(date);else if (date instanceof Date) return fromDate(date, hasMeridiem);else throw new TypeError("INVALID FORMAT: {" + JSON.stringify(date) + "}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields"); } function fromRegex(date) { @@ -13,16 +13,38 @@ function fromRegex(date) { return { hours: parseInt(parsed[1]), minutes: parseInt(parsed[2]) }; } -function fromDate(date) { - return { hours: date.getHours(), minutes: date.getMinutes() }; +function fromDate(date, hasMeridiem) { + if (hasMeridiem !== undefined && !hasMeridiem) return { hours: date.getHours(), minutes: date.getMinutes() }; + return getTimeWithMeridiem(date); } -var formatTime = function (time) { - var extractedTime = extractTime(time); - return (extractedTime.hours < 10 ? "0" + extractedTime.hours : extractedTime.hours) + ":" + (extractedTime.minutes < 10 ? "0" + extractedTime.minutes : extractedTime.minutes); +function getTimeWithMeridiem(date) { + var meridiem = ""; + var hours = date.getHours(); + + if (hours < 13) meridiem = "am";else meridiem = "pm"; + + if (hours !== 12) hours = hours % 12; + + return { hours: hours, minutes: date.getMinutes(), meridiem: meridiem }; +} + +var formatTime = function (time, hasMeridiem) { + var extractedTime = extractTime(time, hasMeridiem); + return (extractedTime.hours < 10 ? "0" + extractedTime.hours : extractedTime.hours) + ":" + (extractedTime.minutes < 10 ? "0" + extractedTime.minutes : extractedTime.minutes) + " " + (extractedTime.meridiem !== undefined ? extractedTime.meridiem : ""); }; -var clockHtml = "
\n" + "
\n" + "
\n" + " 21\n" + " :\n" + " 37\n" + "
\n" + "
\n" + "\n" + "\n" + "
\n" + "
" + " \n" + "
\n" + "
\n" + "
\n" + "
\n" + "\n" + "\n" + "
\n" + " \n" + " \n" + "
\n" + "\n" + "
"; +var clockHtml = (function (options) { + var arrayTemplate = ["
", "
", "
", " 21", " :", " 37"]; + if (options.meridiem) { + arrayTemplate.push(["
", "AM", "PM", "
"].join("\n")); + } + var nextTemplate = ["
", "
", "", "", "
", "
", " ", "
", "
", "
", "
", "", "", "
"]; + + nextTemplate.push("\n \n \n "); + nextTemplate.push("
"); + return arrayTemplate.concat(nextTemplate).join("\n"); +}); var clockId = "grudus-clock"; @@ -39,7 +61,12 @@ var defaultConfig = { clockBackground: "#CFD8DC", clockItemColor: "#212121", clockItemInnerColor: "#212121", - handColor: "#1976D2" + handColor: "#1976D2", + meridiem: false, + labels: { + cancel: "Cancel", + ok: "Ok" + } }; var FaceType = { HOURS: "hours", MINUTES: "minutes" }; @@ -71,7 +98,9 @@ var DOM = { handId: "g-hand-of-a-clock", buttonsId: "g-buttons", submitId: "g-time-submit", - cancelId: "g-time-cancel" + cancelId: "g-time-cancel", + gTimeAmId: "g-time-am", + gTimePmId: "g-time-pm" }; var Config = { clockId: clockId, clockConfig: defaultConfig, FaceType: FaceType }; @@ -128,6 +157,19 @@ var ClockHeader = function () { _this.toggleActiveToMinutes(); _this.onMinutesClicked(); }; + if (this.options.meridiem) { + this.headerAm = document.getElementById(DOM.gTimeAmId); + this.headerPm = document.getElementById(DOM.gTimePmId); + this.headerAm.onclick = function () { + _this.toogleActiveMeridiemAm(); + _this.time.meridiem = "am"; + }; + this.headerPm.onclick = function () { + _this.toogleActiveMeridiemPm(); + _this.time.meridiem = "pm"; + }; + if (this.time.meridiem === "am") this.toogleActiveMeridiemAm();else if (this.time.meridiem === "pm") this.toogleActiveMeridiemPm();else this.defaultToggleActiveMeridiem(); + } this.updateDisplayedTime(); this.toggleActiveToHours(); @@ -142,6 +184,23 @@ var ClockHeader = function () { value: function toggleActiveToHours() { this.toggleActive(this.headerMinutes, this.headerHours); } + }, { + key: "toogleActiveMeridiemAm", + value: function toogleActiveMeridiemAm() { + this.toggleActive(this.headerPm, this.headerAm); + } + }, { + key: "toogleActiveMeridiemPm", + value: function toogleActiveMeridiemPm() { + this.toggleActive(this.headerAm, this.headerPm); + } + }, { + key: "defaultToggleActiveMeridiem", + value: function defaultToggleActiveMeridiem() { + var hours = this.time.hours; + + if (hours < 13) this.toogleActiveMeridiemAm();else this.toogleActiveMeridiemPm(); + } }, { key: "toggleActive", value: function toggleActive(objectToRemoveClass, objectToAddClass) { @@ -151,12 +210,13 @@ var ClockHeader = function () { }, { key: "updateDisplayedTime", value: function updateDisplayedTime() { - ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours); + ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours, this.options.meridiem); ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes); } }], [{ key: "doUpdateDisplayedTime", - value: function doUpdateDisplayedTime(node, value) { + value: function doUpdateDisplayedTime(node, value, meridiem) { + if (meridiem && value !== 12) value = value % 12; if (value < 10) node.innerText = "0" + value;else node.innerText = value; } }]); @@ -254,18 +314,23 @@ var HoursFace = function () { createClass(HoursFace, [{ key: "onEnter", value: function onEnter() { - this.items.innerClockElem.style.display = "block"; + + if (this.items.innerClockElem !== null) this.items.innerClockElem.style.display = "block"; var isInnerClock = this.hours < 13 && this.hours !== 0; var hoursIndex = this.hours % 12; - this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex]; + var radius = this.items.radius; + if (this.options.meridiem && !isInnerClock) this.selected = this.items.clockItems[hoursIndex];else { + this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex]; + radius = isInnerClock ? radius : radius - 50; + } this.colorSelected(); - this.updateHours(this.hours, hoursIndex * 30, isInnerClock ? this.items.radius : this.items.radius - 50); + this.updateHours(this.hours, hoursIndex * 30, radius); } }, { key: "onLeave", value: function onLeave() { - this.items.innerClockElem.style.display = "none"; + if (this.items.innerClockElem !== null) this.items.innerClockElem.style.display = "none"; if (this.selected) { this.removeSelected(); this.selected = undefined; @@ -277,13 +342,13 @@ var HoursFace = function () { if (this.selected) this.removeSelected(); var index = Math.round(angle / 30) % 12; - this.selected = (elem === this.items.innerClockElem ? this.items.innerClockItems : this.items.clockItems)[index]; + this.selected = (elem === this.items.innerClockElem && this.items.innerClockElem !== undefined ? this.items.innerClockItems : this.items.clockItems)[index]; this.colorSelected(); this.hours = parseInt(this.selected.innerText); var selectedAngle = Math.round(angle / 30) * 30; - this.updateHours(this.hours, selectedAngle, elem === this.items.innerClockElem ? this.items.radius - 50 : this.items.radius); + this.updateHours(this.hours, selectedAngle, elem === this.items.innerClockElem && this.items.innerClockElem !== undefined ? this.items.radius - 50 : this.items.radius); } }, { key: "colorSelected", @@ -345,13 +410,14 @@ Promise.prototype.delay = function (fn, t) { var Utils = { toRadians: toRadians, toDegrees: toDegrees, findMousePosition: findMousePosition }; var ClockFaceCreator = function () { - function ClockFaceCreator(clockElem, innerClockElem) { + function ClockFaceCreator(clockElem, innerClockElem, options) { classCallCheck(this, ClockFaceCreator); this.clockElem = clockElem; this.innerClockElem = innerClockElem; this.size = {}; this.middle = {}; + this.options = options; } createClass(ClockFaceCreator, [{ @@ -360,10 +426,12 @@ var ClockFaceCreator = function () { ClockFaceCreator.doCreate(clockItems, this.clockElem, function (span) { return span.classList.add(css.item); }); - ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, function (span, i) { - span.classList.add(css.item, css.inner); - span.innerText = face.displayedInner[i]; - }); + if (!this.options.meridiem) { + ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, function (span, i) { + span.classList.add(css.item, css.inner); + span.innerText = face.displayedInner[i]; + }); + } for (var i = 0; i < 60; i++) { var span = document.createElement("span"); @@ -381,13 +449,14 @@ var ClockFaceCreator = function () { this.middle.y = this.size.height / 2; this.itemsRadius = this.size.width / 2 - 20; - var innerWidth = this.innerClockElem.offsetWidth; - var innerHeight = this.innerClockElem.offsetHeight; - var middleX = innerWidth / 2; - var middleY = innerHeight / 2; - ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems); - ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems); + if (!this.options.meridiem) { + var innerWidth = this.innerClockElem.offsetWidth; + var innerHeight = this.innerClockElem.offsetHeight; + var middleX = innerWidth / 2; + var middleY = innerHeight / 2; + ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems); + } ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems); } }], [{ @@ -435,7 +504,7 @@ var ClockFace = function () { this.initViews(); this.initTimeFaces(initialTime); - this.createFace(); + this.createFace(options); this.hoursFace.items.radius = this.itemsRadius; @@ -449,7 +518,7 @@ var ClockFace = function () { var _this = this; this.clockElem = document.getElementById(DOM.clockId); - this.innerClockElem = document.getElementById(DOM.innerId); + this.innerClockElem = this.options.meridiem ? null : document.getElementById(DOM.innerId); this.handOfAClock = document.getElementById(DOM.handId); this.clockElem.onmousedown = function () { @@ -477,12 +546,14 @@ var ClockFace = function () { return _this.selectTime(e, true, _this.clockElem); }; - this.innerClockElem.onmousemove = function (e) { - return _this.selectTime(e, false, _this.innerClockElem); - }; - this.innerClockElem.onclick = function (e) { - return _this.selectTime(e, true, _this.innerClockElem); - }; + if (!this.options.meridiem) { + this.innerClockElem.onmousemove = function (e) { + return _this.selectTime(e, false, _this.innerClockElem); + }; + this.innerClockElem.onclick = function (e) { + return _this.selectTime(e, true, _this.innerClockElem); + }; + } } }, { key: "initTimeFaces", @@ -514,7 +585,7 @@ var ClockFace = function () { }, { key: "createFace", value: function createFace() { - var clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem); + var clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem, this.options); clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace); clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems); @@ -638,7 +709,7 @@ var Clock = function () { this.submitButton.onclick = function () { var time = _this.time; time.formatted = function () { - return formatTime(time); + return formatTime(time, _this.options.meridiem); }; _this.options.onSubmit(time); Clock.dispose(); @@ -750,22 +821,22 @@ function changeColor(className, color) { function showPicker() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - createDom(); var options = Object.assign({}, Config.clockConfig, config); - var time = extractTime(options.time); + createDom(options); + var time = extractTime(options.time, options.meridiem); var clock = new Clock(options, time); styleColors(options); clock.onStart(); } -function createDom() { +function createDom(options) { if (document.getElementById(Config.clockId)) throw Error("There is already one running grudus-timepicker instance!"); var clockDiv = document.createElement("div"); clockDiv.id = Config.clockId; - clockDiv.innerHTML = clockHtml; + clockDiv.innerHTML = clockHtml(options); document.body.appendChild(clockDiv); } diff --git a/dist/grudus-timepicker.js.map b/dist/grudus-timepicker.js.map index 5a72ff0..a8b5d64 100644 --- a/dist/grudus-timepicker.js.map +++ b/dist/grudus-timepicker.js.map @@ -1 +1 @@ -{"version":3,"file":"grudus-timepicker.js","sources":["../src/js/timeExtractor.js","../src/js/timeFormatter.js","../src/js/meta/clockHtml.js","../src/js/meta/config.js","../src/js/clockHeader.js","../src/js/face/minutesFace.js","../src/js/face/hoursFace.js","../src/js/meta/utils.js","../src/js/face/clockFaceCreator.js","../src/js/face/clockFace.js","../src/js/clock.js","../src/js/colorStylists.js","../src/js/timepickerCreator.js","../src/js/index.js"],"sourcesContent":["const hoursRegex = /^([0-1]?[0-9]|2[0-3])$/;\r\nconst minutesRegex = /^([0-5]?[0-9])$/;\r\nconst regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;\r\n\r\nexport default function extractTime(date) {\r\n if (!date)\r\n return fromDate(new Date());\r\n else if (date instanceof Date)\r\n return fromDate(date);\r\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes))\r\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes)};\r\n else if (regex.test(date))\r\n return fromRegex(date);\r\n else\r\n throw new TypeError(`INVALID FORMAT: {${JSON.stringify(date)}}.\r\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields`);\r\n}\r\n\r\nfunction fromRegex(date) {\r\n const parsed = regex.exec(date);\r\n return {hours: parseInt(parsed[1]), minutes: parseInt(parsed[2])};\r\n}\r\n\r\nfunction fromDate(date) {\r\n return {hours: date.getHours(), minutes: date.getMinutes()};\r\n}","import extractTime from \"./timeExtractor\";\r\n\r\nexport default function (time) {\r\n const extractedTime = extractTime(time);\r\n return (extractedTime.hours < 10 ? \"0\" + extractedTime.hours : extractedTime.hours)\r\n + \":\" + (extractedTime.minutes < 10 ? \"0\" + extractedTime.minutes : extractedTime.minutes);\r\n}","export default \"
\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\" 21\\n\" +\r\n\" :\\n\" +\r\n\" 37\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"\\n\" +\r\n\"
\\n\" +\r\n\"
\" +\r\n\" \\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"\\n\" +\r\n\"
\\n\" +\r\n\" \\n\" +\r\n\" \\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"
\";","const clockId = \"grudus-clock\";\r\n\r\nconst defaultConfig = {\r\n onSubmit: () => {\r\n },\r\n onCancel: () => {\r\n },\r\n headerBackground: \"#1976D2\",\r\n headerColor: \"#c7d6e1\",\r\n headerSelected: \"#ffffff\",\r\n wrapperBackground: \"#f0fff0\",\r\n footerBackground: \"#f0fff0\",\r\n submitColor: \"#1976D2\",\r\n cancelColor: \"#1976D2\",\r\n clockBackground: \"#CFD8DC\",\r\n clockItemColor: \"#212121\",\r\n clockItemInnerColor: \"#212121\",\r\n handColor: \"#1976D2\"\r\n};\r\n\r\nconst FaceType = {HOURS: \"hours\", MINUTES: \"minutes\"};\r\n\r\nconst css = {\r\n clock: \"g-clock\",\r\n clockItem: \"g-clock-item\",\r\n inner: \"g-clock-inner\",\r\n outer: \"g-clock-outer\",\r\n item: \"g-clock-item\",\r\n hand: \"g-hand-of-a-clock\",\r\n fadeOut: \"g-fade-out\",\r\n selected: \"g-selected\",\r\n active: \"g-active\",\r\n submit: \"g-submit\",\r\n cancel: \"g-cancel\",\r\n hour: \"g-hour\",\r\n minute: \"g-minute\"\r\n};\r\n\r\nconst DOM = {\r\n headerId: \"g-head\",\r\n hoursId: \"g-hours\",\r\n minutesId: \"g-minutes\",\r\n clockId: \"g-clock\",\r\n innerId: \"g-clock-inner\",\r\n wrapperId: \"g-clock-wrapper\",\r\n dotId: \"g-middle-dot\",\r\n handId: \"g-hand-of-a-clock\",\r\n buttonsId: \"g-buttons\",\r\n submitId: \"g-time-submit\",\r\n cancelId: \"g-time-cancel\"\r\n};\r\n\r\nexport default {clockId, clockConfig: defaultConfig, FaceType};\r\nexport {css, DOM};","import {DOM} from \"./meta/config\";\r\n\r\nexport default class ClockHeader {\r\n\r\n constructor(config) {\r\n this.options = config.options;\r\n this.time = config.time;\r\n this.onHourClicked = config.onHourClicked;\r\n this.onMinutesClicked = config.onMinutesClicked;\r\n\r\n this.initView();\r\n }\r\n\r\n initView() {\r\n this.headerHours = document.getElementById(DOM.hoursId);\r\n this.headerHours.onclick = () => {\r\n this.toggleActiveToHours();\r\n this.onHourClicked();\r\n };\r\n\r\n this.headerMinutes = document.getElementById(DOM.minutesId);\r\n this.headerMinutes.onclick = () => {\r\n this.toggleActiveToMinutes();\r\n this.onMinutesClicked();\r\n };\r\n\r\n this.updateDisplayedTime();\r\n this.toggleActiveToHours();\r\n }\r\n\r\n toggleActiveToMinutes() {\r\n this.toggleActive(this.headerHours, this.headerMinutes);\r\n }\r\n\r\n toggleActiveToHours() {\r\n this.toggleActive(this.headerMinutes, this.headerHours);\r\n }\r\n\r\n toggleActive(objectToRemoveClass, objectToAddClass) {\r\n objectToRemoveClass.style.color = this.options.headerColor;\r\n objectToAddClass.style.color = this.options.headerSelected;\r\n }\r\n\r\n updateDisplayedTime() {\r\n ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours);\r\n ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes);\r\n }\r\n\r\n static doUpdateDisplayedTime(node, value) {\r\n if (value < 10)\r\n node.innerText = \"0\" + value;\r\n else node.innerText = value;\r\n }\r\n}","import Config, {css} from \"../meta/config\";\r\n\r\nexport default class MinutesFace {\r\n\r\n constructor(items, initialMinutes, updateMinutes) {\r\n this.displayed = [\"00\", \"05\", \"10\", \"15\", \"20\", \"25\", \"30\", \"35\", \"40\", \"45\", \"50\", \"55\"];\r\n this.options = items.options;\r\n this.type = Config.FaceType.MINUTES;\r\n this.selected = undefined;\r\n this.items = items;\r\n this.minutes = initialMinutes;\r\n this.updateMinutes = updateMinutes;\r\n }\r\n\r\n onEnter() {\r\n this.selected = this.findSelected(this.minutes);\r\n this.colorSelected();\r\n this.updateMinutes(this.minutes, this.minutes * 6);\r\n }\r\n\r\n onLeave() {\r\n if (this.selected) {\r\n this.removeSelected();\r\n this.selected = undefined;\r\n }\r\n }\r\n\r\n selectTime(angle) {\r\n if (this.selected)\r\n this.removeSelected();\r\n\r\n const minute = Math.round(angle / 6) % 60;\r\n this.selected = this.findSelected(minute);\r\n this.colorSelected();\r\n this.minutes = minute;\r\n this.updateMinutes(this.minutes, angle);\r\n }\r\n\r\n findSelected(minute) {\r\n return (minute % 5 === 0) ? this.items.clockItems[minute / 5] : this.items.outerClockItems[minute];\r\n }\r\n\r\n colorSelected() {\r\n if (this.isOuter()) {\r\n this.selected.classList.add(css.selected);\r\n return;\r\n }\r\n this.selected.style.background = this.options.handColor;\r\n this.selected.style.color = \"whitesmoke\";\r\n }\r\n\r\n removeSelected() {\r\n if (this.isOuter()) {\r\n this.selected.classList.remove(css.selected);\r\n return;\r\n }\r\n this.selected.style.background = \"transparent\";\r\n this.selected.style.color = this.options.clockItemColor;\r\n }\r\n\r\n isOuter() {\r\n return this.items.outerClockItems.indexOf(this.selected) > -1;\r\n }\r\n}","import Config from \"../meta/config\";\r\n\r\nexport default class HoursFace {\r\n\r\n constructor(items, initialHours, updateHours) {\r\n this.displayed = [\"12\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\r\n this.displayedInner = [\"00\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\", \"23\"];\r\n this.type = Config.FaceType.MINUTES;\r\n this.selected = undefined;\r\n this.options = items.options;\r\n\r\n this.items = items;\r\n this.hours = initialHours;\r\n this.updateHours = updateHours;\r\n }\r\n\r\n onEnter() {\r\n this.items.innerClockElem.style.display = \"block\";\r\n const isInnerClock = this.hours < 13 && this.hours !== 0;\r\n const hoursIndex = this.hours % 12;\r\n this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex];\r\n this.colorSelected();\r\n\r\n this.updateHours(this.hours, hoursIndex * 30, isInnerClock ? this.items.radius : this.items.radius - 50);\r\n }\r\n\r\n onLeave() {\r\n this.items.innerClockElem.style.display = \"none\";\r\n if (this.selected) {\r\n this.removeSelected();\r\n this.selected = undefined;\r\n }\r\n }\r\n\r\n selectTime(angle, elem) {\r\n if (this.selected)\r\n this.removeSelected();\r\n\r\n const index = Math.round(angle / 30) % 12;\r\n this.selected = (elem === this.items.innerClockElem\r\n ? this.items.innerClockItems\r\n : this.items.clockItems)[index];\r\n\r\n this.colorSelected();\r\n this.hours = parseInt(this.selected.innerText);\r\n const selectedAngle = Math.round(angle / 30) * 30;\r\n\r\n this.updateHours(this.hours, selectedAngle,\r\n elem === this.items.innerClockElem ? this.items.radius - 50 : this.items.radius);\r\n }\r\n\r\n colorSelected() {\r\n this.selected.style.background = this.options.handColor;\r\n this.selected.style.color = \"#ffffff\";\r\n }\r\n\r\n removeSelected() {\r\n this.selected.style.background = \"transparent\";\r\n this.selected.style.color = this.isInner()\r\n ? this.options.clockItemInnerColor\r\n : this.options.clockItemColor;\r\n }\r\n\r\n isInner() {\r\n return Array.from(this.items.innerClockItems).indexOf(this.selected) > -1;\r\n }\r\n}","function toRadians(angle) {\r\n return angle * (Math.PI / 180);\r\n}\r\n\r\nfunction toDegrees(angle) {\r\n return angle * (180 / Math.PI);\r\n}\r\n\r\nfunction findMousePosition(event, object) {\r\n const rect = object.getBoundingClientRect();\r\n return {\r\n x: event.clientX - rect.left,\r\n y: event.clientY - rect.top\r\n };\r\n}\r\n\r\nfunction delay(t) {\r\n return new Promise(function (resolve) {\r\n setTimeout(resolve, t);\r\n });\r\n}\r\n\r\nPromise.delay = function (fn, t) {\r\n if (!t) {\r\n t = fn;\r\n fn = function () {\r\n };\r\n }\r\n return delay(t).then(fn);\r\n};\r\n\r\nPromise.prototype.delay = function (fn, t) {\r\n return this.then(function () {\r\n return Promise.delay(fn, t);\r\n });\r\n};\r\n\r\nexport default {toRadians, toDegrees, findMousePosition};","import Utils from \"../meta/utils\";\r\nimport {css} from \"../meta/config\";\r\n\r\nexport default class ClockFaceCreator {\r\n\r\n constructor(clockElem, innerClockElem) {\r\n this.clockElem = clockElem;\r\n this.innerClockElem = innerClockElem;\r\n this.size = {};\r\n this.middle = {};\r\n }\r\n\r\n create(clockItems, innerClockItems, outerClockItems, face) {\r\n ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item));\r\n ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => {\r\n span.classList.add(css.item, css.inner);\r\n span.innerText = face.displayedInner[i];\r\n });\r\n\r\n for (let i = 0; i < 60; i++) {\r\n const span = document.createElement(\"span\");\r\n span.classList.add(css.outer);\r\n outerClockItems.push(span);\r\n this.clockElem.appendChild(span);\r\n }\r\n }\r\n\r\n static doCreate(clockItems, clockElem, fun) {\r\n for (let i = 0; i < 12; i++) {\r\n const span = document.createElement(\"span\");\r\n fun(span, i);\r\n clockItems.push(span);\r\n clockElem.appendChild(span);\r\n }\r\n }\r\n\r\n calculateSize(clockItems, innerClockItems, outerClockItems) {\r\n this.size.width = this.clockElem.offsetWidth;\r\n this.size.height = this.clockElem.offsetHeight;\r\n this.middle.x = this.size.width / 2;\r\n this.middle.y = this.size.height / 2;\r\n this.itemsRadius = this.size.width / 2 - 20;\r\n\r\n const innerWidth = this.innerClockElem.offsetWidth;\r\n const innerHeight = this.innerClockElem.offsetHeight;\r\n const middleX = innerWidth / 2;\r\n const middleY = innerHeight / 2;\r\n\r\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems);\r\n ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems);\r\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems);\r\n }\r\n\r\n static doCalculateSize(middleX, middleY, radius, items) {\r\n const angleQuantum = 360 / items.length;\r\n for (let i = 0; i < items.length; i++) {\r\n\r\n const angle = Utils.toRadians(i * angleQuantum);\r\n const item = items[i];\r\n const itemWidth = item.offsetWidth;\r\n const itemHeight = item.offsetHeight;\r\n\r\n item.style.left = ((middleX + Math.sin(angle) * radius) - itemWidth / 2) + \"px\";\r\n item.style.bottom = ((middleY + Math.cos(angle) * radius) - itemHeight / 2) + \"px\";\r\n }\r\n }\r\n}","import MinutesFace from \"./minutesFace\";\r\nimport HoursFace from \"./hoursFace\";\r\nimport Utils from \"../meta/utils\";\r\nimport Config, {css, DOM} from \"../meta/config\";\r\nimport ClockFaceCreator from \"./clockFaceCreator\";\r\n\r\nexport default class ClockFace {\r\n\r\n constructor(options, initialTime, onTimeUpdate) {\r\n this.options = options;\r\n this.time = initialTime;\r\n this.onTimeUpdate = onTimeUpdate;\r\n this.isMouseDown = false;\r\n this.clockItems = [];\r\n this.innerClockItems = [];\r\n this.outerClockItems = [];\r\n this.size = {};\r\n this.middle = {};\r\n\r\n this.initViews();\r\n this.initTimeFaces(initialTime);\r\n this.createFace();\r\n\r\n this.hoursFace.items.radius = this.itemsRadius;\r\n\r\n this.currentFace = this.hoursFace;\r\n this.changeDisplayed(this.currentFace.displayed);\r\n }\r\n\r\n initViews() {\r\n this.clockElem = document.getElementById(DOM.clockId);\r\n this.innerClockElem = document.getElementById(DOM.innerId);\r\n this.handOfAClock = document.getElementById(DOM.handId);\r\n\r\n this.clockElem.onmousedown = () => this.isMouseDown = true;\r\n this.clockElem.onmouseup = () => {this.isMouseDown = false;\r\n this.toggleToMinutes();\r\n };\r\n\r\n this.handOfAClock.onmouseup = (e) => e.stopPropagation();\r\n this.handOfAClock.onmousemove = (e) => e.stopPropagation();\r\n this.handOfAClock.onclick = (e) => e.stopPropagation();\r\n\r\n this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem);\r\n this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem);\r\n\r\n this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem);\r\n this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem);\r\n }\r\n\r\n initTimeFaces(initialTime) {\r\n this.minutesFace = new MinutesFace({\r\n options: this.options,\r\n clockItems: this.clockItems,\r\n outerClockItems: this.outerClockItems\r\n }, initialTime.minutes, (minutes, angle) => this.updateMinutes(minutes, angle));\r\n\r\n this.hoursFace = new HoursFace({\r\n options: this.options,\r\n innerClockItems: this.innerClockItems,\r\n clockItems: this.clockItems,\r\n innerClockElem: this.innerClockElem\r\n }, initialTime.hours, (hours, angle, radius) => this.updateHours(hours, angle, radius));\r\n }\r\n\r\n onStart() {\r\n this.currentFace.onEnter();\r\n }\r\n\r\n createFace() {\r\n const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem);\r\n clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace);\r\n clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems);\r\n\r\n this.size = clockFaceCreator.size;\r\n this.middle = clockFaceCreator.middle;\r\n this.itemsRadius = clockFaceCreator.itemsRadius;\r\n }\r\n\r\n selectTime(event, isMouseDown, elem) {\r\n if (!(isMouseDown || this.isMouseDown))\r\n return;\r\n const mouse = Utils.findMousePosition(event, this.clockElem);\r\n const x = mouse.x - this.middle.x;\r\n const y = this.middle.y - mouse.y;\r\n let angle = 90 - Utils.toDegrees(Math.atan(y / x));\r\n if (x < 0) angle += 180;\r\n\r\n this.currentFace.selectTime(angle, elem);\r\n event.stopPropagation();\r\n }\r\n\r\n changeDisplayed(array) {\r\n for (let i = 0; i < this.clockItems.length; i++)\r\n this.clockItems[i].innerText = array[i];\r\n }\r\n\r\n onEachClockElement(fun) {\r\n [].forEach.call(this.clockItems, c => fun(c));\r\n }\r\n\r\n updateMinutes(minutes, angle) {\r\n this.time.minutes = minutes;\r\n this.calculateHandOfTheClock(angle, this.itemsRadius);\r\n this.onTimeUpdate(this.time, Config.FaceType.MINUTES);\r\n }\r\n\r\n updateHours(hours, angle, radius) {\r\n this.time.hours = hours;\r\n this.calculateHandOfTheClock(angle, radius);\r\n this.onTimeUpdate(this.time, Config.FaceType.HOURS);\r\n }\r\n\r\n calculateHandOfTheClock(angle, size = this.itemsRadius) {\r\n this.handOfAClock.style.transform = `rotate(${angle - 90}deg)`;\r\n this.handOfAClock.style.width = size + \"px\";\r\n }\r\n\r\n toggleToHours() {\r\n this.minutesFace.onLeave();\r\n this.toggleTime(this.hoursFace);\r\n }\r\n\r\n toggleToMinutes() {\r\n this.hoursFace.onLeave();\r\n this.toggleTime(this.minutesFace);\r\n }\r\n\r\n toggleTime(face) {\r\n if (this.currentFace !== face) {\r\n this.onEachClockElement(c => c.classList.add(css.fadeOut));\r\n this.handOfAClock.classList.add(css.fadeOut);\r\n Promise.delay(() => {\r\n this.onEachClockElement(c => c.classList.remove(css.fadeOut));\r\n this.handOfAClock.classList.remove(css.fadeOut);\r\n this.changeDisplayed(face.displayed);\r\n this.currentFace = face;\r\n this.onEachClockElement(c => this.removeSelected(c));\r\n face.onEnter();\r\n }, 300);\r\n }\r\n }\r\n\r\n removeSelected(c) {\r\n c.classList.remove(css.selected);\r\n c.style.background = \"transparent\";\r\n c.style.color = this.options.clockItemColor;\r\n }\r\n}","import ClockHeader from \"./clockHeader\";\r\nimport ClockFace from \"./face/clockFace\";\r\nimport Config, {DOM} from \"./meta/config\";\r\nimport formatTime from \"./timeFormatter\";\r\n\r\nexport default class Clock {\r\n\r\n constructor(options, time) {\r\n this.options = options;\r\n\r\n this.initView();\r\n this.time = time;\r\n this.initElements();\r\n }\r\n\r\n initView() {\r\n this.submitButton = document.getElementById(DOM.submitId);\r\n this.submitButton.onclick = () => {\r\n const time = this.time;\r\n time.formatted = () => formatTime(time);\r\n this.options.onSubmit(time);\r\n Clock.dispose();\r\n };\r\n\r\n this.cancelButton = document.getElementById(DOM.cancelId);\r\n this.cancelButton.onclick = () => {\r\n this.options.onCancel();\r\n Clock.dispose();\r\n };\r\n }\r\n\r\n initElements() {\r\n this.header = new ClockHeader({\r\n options: this.options,\r\n time: this.time,\r\n onHourClicked: () => this.toggleToHours(),\r\n onMinutesClicked: () => this.toggleToMinutes()\r\n });\r\n this.clockFace = new ClockFace(this.options, this.time, (time, type) => this.onTimeUpdate(time, type));\r\n }\r\n\r\n onStart() {\r\n this.clockFace.onStart();\r\n }\r\n\r\n toggleToHours() {\r\n this.clockFace.toggleToHours();\r\n }\r\n\r\n toggleToMinutes() {\r\n this.clockFace.toggleToMinutes();\r\n }\r\n\r\n onTimeUpdate(time, type) {\r\n this.time = time;\r\n this.header.time = time;\r\n this.header.updateDisplayedTime();\r\n if (type === Config.FaceType.MINUTES)\r\n this.header.toggleActiveToMinutes();\r\n\r\n }\r\n\r\n static dispose() {\r\n document.body.removeChild(document.getElementById(Config.clockId));\r\n }\r\n}","import {css, DOM} from \"./meta/config\";\r\n\r\nexport default function styleColors(options) {\r\n document.getElementById(DOM.headerId).style.background = options.headerBackground;\r\n document.getElementById(DOM.headerId).style.color = options.headerColor;\r\n document.getElementById(DOM.wrapperId).style.background = options.wrapperBackground;\r\n document.getElementById(DOM.clockId).style.background = options.clockBackground;\r\n document.getElementById(DOM.handId).style.background = options.handColor;\r\n document.getElementById(DOM.dotId).style.background = options.handColor;\r\n document.getElementById(DOM.buttonsId).style.background = options.footerBackground;\r\n document.getElementById(DOM.submitId).style.color = options.submitColor;\r\n document.getElementById(DOM.cancelId).style.color = options.cancelColor;\r\n\r\n changeColor(css.clockItem, options.clockItemColor);\r\n changeColor(css.inner, options.clockItemInnerColor);\r\n changeColor(css.outer, options.handColor, \"borderColor\");\r\n}\r\n\r\nfunction changeColor(className, color, property = \"color\") {\r\n const items = Array.from(document.getElementsByClassName(className));\r\n for (const item of items)\r\n item.style[property] = color;\r\n}\r\n","import clockHtml from \"./meta/clockHtml\";\r\nimport Config from \"./meta/config\";\r\nimport Clock from \"./clock\";\r\nimport styleColors from \"./colorStylists\";\r\nimport getTime from \"./timeExtractor\";\r\n\r\n\r\nexport default function showPicker(config = {}) {\r\n createDom();\r\n\r\n const options = Object.assign({}, Config.clockConfig, config);\r\n const time = getTime(options.time);\r\n\r\n const clock = new Clock(options, time);\r\n styleColors(options);\r\n clock.onStart();\r\n}\r\n\r\n\r\nfunction createDom() {\r\n if (document.getElementById(Config.clockId))\r\n throw Error(\"There is already one running grudus-timepicker instance!\");\r\n\r\n const clockDiv = document.createElement(\"div\");\r\n clockDiv.id = Config.clockId;\r\n clockDiv.innerHTML = clockHtml;\r\n document.body.appendChild(clockDiv);\r\n}\r\n","import formatTime from \"./timeFormatter\";\r\nimport showPicker from \"./timepickerCreator\";\r\n\r\nexport default {\r\n showPicker: (config) => showPicker(config),\r\n format: (time) => formatTime(time)\r\n};\r\n\r\n"],"names":["hoursRegex","minutesRegex","regex","extractTime","date","fromDate","Date","test","hours","minutes","parseInt","fromRegex","TypeError","JSON","stringify","parsed","exec","getHours","getMinutes","time","extractedTime","clockId","defaultConfig","FaceType","HOURS","MINUTES","css","DOM","clockConfig","ClockHeader","config","options","onHourClicked","onMinutesClicked","initView","headerHours","document","getElementById","hoursId","onclick","toggleActiveToHours","headerMinutes","minutesId","toggleActiveToMinutes","updateDisplayedTime","toggleActive","objectToRemoveClass","objectToAddClass","style","color","headerColor","headerSelected","doUpdateDisplayedTime","node","value","innerText","MinutesFace","items","initialMinutes","updateMinutes","displayed","type","Config","selected","undefined","findSelected","colorSelected","removeSelected","angle","minute","Math","round","clockItems","outerClockItems","isOuter","classList","add","background","handColor","remove","clockItemColor","indexOf","HoursFace","initialHours","updateHours","displayedInner","innerClockElem","display","isInnerClock","hoursIndex","innerClockItems","radius","elem","index","selectedAngle","isInner","clockItemInnerColor","Array","from","toRadians","PI","toDegrees","findMousePosition","event","object","rect","getBoundingClientRect","clientX","left","clientY","top","delay","t","Promise","resolve","fn","then","prototype","ClockFaceCreator","clockElem","size","middle","face","doCreate","span","item","i","inner","createElement","outer","push","appendChild","width","offsetWidth","height","offsetHeight","x","y","itemsRadius","innerWidth","innerHeight","middleX","middleY","doCalculateSize","fun","angleQuantum","length","Utils","itemWidth","itemHeight","sin","bottom","cos","ClockFace","initialTime","onTimeUpdate","isMouseDown","initViews","initTimeFaces","createFace","hoursFace","currentFace","changeDisplayed","innerId","handOfAClock","handId","onmousedown","onmouseup","toggleToMinutes","e","stopPropagation","onmousemove","selectTime","minutesFace","onEnter","clockFaceCreator","create","calculateSize","mouse","atan","array","forEach","call","c","calculateHandOfTheClock","transform","onLeave","toggleTime","onEachClockElement","fadeOut","Clock","initElements","submitButton","submitId","formatted","formatTime","onSubmit","dispose","cancelButton","cancelId","onCancel","header","toggleToHours","clockFace","onStart","body","removeChild","styleColors","headerId","headerBackground","wrapperId","wrapperBackground","clockBackground","dotId","buttonsId","footerBackground","submitColor","cancelColor","clockItem","changeColor","className","property","getElementsByClassName","showPicker","Object","assign","getTime","clock","createDom","Error","clockDiv","id","innerHTML","clockHtml"],"mappings":";;AAAA,IAAMA,aAAa,wBAAnB;AACA,IAAMC,eAAe,iBAArB;AACA,IAAMC,QAAQ,qCAAd;;AAEA,AAAe,SAASC,WAAT,CAAqBC,IAArB,EAA2B;QAClC,CAACA,IAAL,EACI,OAAOC,SAAS,IAAIC,IAAJ,EAAT,CAAP,CADJ,KAEK,IAAIF,gBAAgBE,IAApB,EACD,OAAOD,SAASD,IAAT,CAAP,CADC,KAEA,IAAIJ,WAAWO,IAAX,CAAgBH,KAAKI,KAArB,KAA+BP,aAAaM,IAAb,CAAkBH,KAAKK,OAAvB,CAAnC,EACD,OAAO,EAACD,OAAOE,SAASN,KAAKI,KAAd,CAAR,EAA8BC,SAASC,SAASN,KAAKK,OAAd,CAAvC,EAAP,CADC,KAEA,IAAIP,MAAMK,IAAN,CAAWH,IAAX,CAAJ,EACD,OAAOO,UAAUP,IAAV,CAAP,CADC,KAGD,MAAM,IAAIQ,SAAJ,uBAAkCC,KAAKC,SAAL,CAAeV,IAAf,CAAlC,uGAAN;;;AAIR,SAASO,SAAT,CAAmBP,IAAnB,EAAyB;QACfW,SAASb,MAAMc,IAAN,CAAWZ,IAAX,CAAf;WACO,EAACI,OAAOE,SAASK,OAAO,CAAP,CAAT,CAAR,EAA6BN,SAASC,SAASK,OAAO,CAAP,CAAT,CAAtC,EAAP;;;AAGJ,SAASV,QAAT,CAAkBD,IAAlB,EAAwB;WACb,EAACI,OAAOJ,KAAKa,QAAL,EAAR,EAAyBR,SAASL,KAAKc,UAAL,EAAlC,EAAP;;;ACtBJ,iBAAe,UAAUC,IAAV,EAAgB;QACrBC,gBAAgBjB,YAAYgB,IAAZ,CAAtB;WACO,CAACC,cAAcZ,KAAd,GAAsB,EAAtB,GAA2B,MAAMY,cAAcZ,KAA/C,GAAuDY,cAAcZ,KAAtE,IACD,GADC,IACMY,cAAcX,OAAd,GAAwB,EAAxB,GAA6B,MAAMW,cAAcX,OAAjD,GAA2DW,cAAcX,OAD/E,CAAP;;;ACJJ,gBAAe,uCACf,kDADe,GAEf,4CAFe,GAGf,wFAHe,GAIf,gDAJe,GAKf,mFALe,GAMf,sBANe,GAOf,iBAPe,GAQf,IARe,GASf,IATe,GAUf,qEAVe,GAWf,4CAXe,GAYf,oEAZe,GAaf,4EAbe,GAcf,4EAde,GAef,kBAfe,GAgBf,kBAhBe,GAiBf,IAjBe,GAkBf,IAlBe,GAmBf,wDAnBe,GAoBf,0FApBe,GAqBf,sFArBe,GAsBf,iBAtBe,GAuBf,IAvBe,GAwBf,YAxBA;;ACAA,IAAMY,UAAU,cAAhB;;AAEA,IAAMC,gBAAgB;cACR,oBAAM,EADE;cAGR,oBAAM,EAHE;sBAKA,SALA;iBAML,SANK;oBAOF,SAPE;uBAQC,SARD;sBASA,SATA;iBAUL,SAVK;iBAWL,SAXK;qBAYD,SAZC;oBAaF,SAbE;yBAcG,SAdH;eAeP;CAff;;AAkBA,IAAMC,WAAW,EAACC,OAAO,OAAR,EAAiBC,SAAS,SAA1B,EAAjB;;AAEA,IAAMC,MAAM;WACD,SADC;eAEG,cAFH;WAGD,eAHC;WAID,eAJC;UAKF,cALE;UAMF,mBANE;aAOC,YAPD;cAQE,YARF;YASA,UATA;YAUA,UAVA;YAWA,UAXA;UAYF,QAZE;YAaA;CAbZ;;AAgBA,IAAMC,MAAM;cACE,QADF;aAEC,SAFD;eAGG,WAHH;aAIC,SAJD;aAKC,eALD;eAMG,iBANH;WAOD,cAPC;YAQA,mBARA;eASG,WATH;cAUE,eAVF;cAWE;CAXd;;AAcA,aAAe,EAACN,gBAAD,EAAUO,aAAaN,aAAvB,EAAsCC,kBAAtC,EAAf;;;;;;;;;;;;;;;;;;;;;;;;;;IClDqBM;yBAELC,MAAZ,EAAoB;;;aACXC,OAAL,GAAeD,OAAOC,OAAtB;aACKZ,IAAL,GAAYW,OAAOX,IAAnB;aACKa,aAAL,GAAqBF,OAAOE,aAA5B;aACKC,gBAAL,GAAwBH,OAAOG,gBAA/B;;aAEKC,QAAL;;;;;mCAGO;;;iBACFC,WAAL,GAAmBC,SAASC,cAAT,CAAwBV,IAAIW,OAA5B,CAAnB;iBACKH,WAAL,CAAiBI,OAAjB,GAA2B,YAAM;sBACxBC,mBAAL;sBACKR,aAAL;aAFJ;;iBAKKS,aAAL,GAAqBL,SAASC,cAAT,CAAwBV,IAAIe,SAA5B,CAArB;iBACKD,aAAL,CAAmBF,OAAnB,GAA6B,YAAM;sBAC1BI,qBAAL;sBACKV,gBAAL;aAFJ;;iBAKKW,mBAAL;iBACKJ,mBAAL;;;;gDAGoB;iBACfK,YAAL,CAAkB,KAAKV,WAAvB,EAAoC,KAAKM,aAAzC;;;;8CAGkB;iBACbI,YAAL,CAAkB,KAAKJ,aAAvB,EAAsC,KAAKN,WAA3C;;;;qCAGSW,qBAAqBC,kBAAkB;gCAC5BC,KAApB,CAA0BC,KAA1B,GAAkC,KAAKlB,OAAL,CAAamB,WAA/C;6BACiBF,KAAjB,CAAuBC,KAAvB,GAA+B,KAAKlB,OAAL,CAAaoB,cAA5C;;;;8CAGkB;wBACNC,qBAAZ,CAAkC,KAAKjB,WAAvC,EAAoD,KAAKhB,IAAL,CAAUX,KAA9D;wBACY4C,qBAAZ,CAAkC,KAAKX,aAAvC,EAAsD,KAAKtB,IAAL,CAAUV,OAAhE;;;;8CAGyB4C,MAAMC,OAAO;gBAClCA,QAAQ,EAAZ,EACID,KAAKE,SAAL,GAAiB,MAAMD,KAAvB,CADJ,KAEKD,KAAKE,SAAL,GAAiBD,KAAjB;;;;;;ICjDQE;yBAELC,KAAZ,EAAmBC,cAAnB,EAAmCC,aAAnC,EAAkD;;;aACzCC,SAAL,GAAiB,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,IAA3C,EAAiD,IAAjD,EAAuD,IAAvD,EAA6D,IAA7D,EAAmE,IAAnE,CAAjB;aACK7B,OAAL,GAAe0B,MAAM1B,OAArB;aACK8B,IAAL,GAAYC,OAAOvC,QAAP,CAAgBE,OAA5B;aACKsC,QAAL,GAAgBC,SAAhB;aACKP,KAAL,GAAaA,KAAb;aACKhD,OAAL,GAAeiD,cAAf;aACKC,aAAL,GAAqBA,aAArB;;;;;kCAGM;iBACDI,QAAL,GAAgB,KAAKE,YAAL,CAAkB,KAAKxD,OAAvB,CAAhB;iBACKyD,aAAL;iBACKP,aAAL,CAAmB,KAAKlD,OAAxB,EAAiC,KAAKA,OAAL,GAAe,CAAhD;;;;kCAGM;gBACF,KAAKsD,QAAT,EAAmB;qBACVI,cAAL;qBACKJ,QAAL,GAAgBC,SAAhB;;;;;mCAIGI,OAAO;gBACV,KAAKL,QAAT,EACI,KAAKI,cAAL;;gBAEEE,SAASC,KAAKC,KAAL,CAAWH,QAAQ,CAAnB,IAAwB,EAAvC;iBACKL,QAAL,GAAgB,KAAKE,YAAL,CAAkBI,MAAlB,CAAhB;iBACKH,aAAL;iBACKzD,OAAL,GAAe4D,MAAf;iBACKV,aAAL,CAAmB,KAAKlD,OAAxB,EAAiC2D,KAAjC;;;;qCAGSC,QAAQ;mBACTA,SAAS,CAAT,KAAe,CAAhB,GAAqB,KAAKZ,KAAL,CAAWe,UAAX,CAAsBH,SAAS,CAA/B,CAArB,GAAyD,KAAKZ,KAAL,CAAWgB,eAAX,CAA2BJ,MAA3B,CAAhE;;;;wCAGY;gBACR,KAAKK,OAAL,EAAJ,EAAoB;qBACXX,QAAL,CAAcY,SAAd,CAAwBC,GAAxB,CAA4BlD,IAAIqC,QAAhC;;;iBAGCA,QAAL,CAAcf,KAAd,CAAoB6B,UAApB,GAAiC,KAAK9C,OAAL,CAAa+C,SAA9C;iBACKf,QAAL,CAAcf,KAAd,CAAoBC,KAApB,GAA4B,YAA5B;;;;yCAGa;gBACT,KAAKyB,OAAL,EAAJ,EAAoB;qBACXX,QAAL,CAAcY,SAAd,CAAwBI,MAAxB,CAA+BrD,IAAIqC,QAAnC;;;iBAGCA,QAAL,CAAcf,KAAd,CAAoB6B,UAApB,GAAiC,aAAjC;iBACKd,QAAL,CAAcf,KAAd,CAAoBC,KAApB,GAA4B,KAAKlB,OAAL,CAAaiD,cAAzC;;;;kCAGM;mBACC,KAAKvB,KAAL,CAAWgB,eAAX,CAA2BQ,OAA3B,CAAmC,KAAKlB,QAAxC,IAAoD,CAAC,CAA5D;;;;;;IC3DamB;uBAELzB,KAAZ,EAAmB0B,YAAnB,EAAiCC,WAAjC,EAA8C;;;aACrCxB,SAAL,GAAiB,CAAC,IAAD,EAAO,GAAP,EAAY,GAAZ,EAAiB,GAAjB,EAAsB,GAAtB,EAA2B,GAA3B,EAAgC,GAAhC,EAAqC,GAArC,EAA0C,GAA1C,EAA+C,GAA/C,EAAoD,IAApD,EAA0D,IAA1D,CAAjB;aACKyB,cAAL,GAAsB,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,IAA3C,EAAiD,IAAjD,EAAuD,IAAvD,EAA6D,IAA7D,EAAmE,IAAnE,CAAtB;aACKxB,IAAL,GAAYC,OAAOvC,QAAP,CAAgBE,OAA5B;aACKsC,QAAL,GAAgBC,SAAhB;aACKjC,OAAL,GAAe0B,MAAM1B,OAArB;;aAEK0B,KAAL,GAAaA,KAAb;aACKjD,KAAL,GAAa2E,YAAb;aACKC,WAAL,GAAmBA,WAAnB;;;;;kCAGM;iBACD3B,KAAL,CAAW6B,cAAX,CAA0BtC,KAA1B,CAAgCuC,OAAhC,GAA0C,OAA1C;gBACMC,eAAe,KAAKhF,KAAL,GAAa,EAAb,IAAmB,KAAKA,KAAL,KAAe,CAAvD;gBACMiF,aAAa,KAAKjF,KAAL,GAAa,EAAhC;iBACKuD,QAAL,GAAgByB,eAAe,KAAK/B,KAAL,CAAWe,UAAX,CAAsBiB,UAAtB,CAAf,GAAmD,KAAKhC,KAAL,CAAWiC,eAAX,CAA2BD,UAA3B,CAAnE;iBACKvB,aAAL;;iBAEKkB,WAAL,CAAiB,KAAK5E,KAAtB,EAA6BiF,aAAa,EAA1C,EAA8CD,eAAe,KAAK/B,KAAL,CAAWkC,MAA1B,GAAmC,KAAKlC,KAAL,CAAWkC,MAAX,GAAoB,EAArG;;;;kCAGM;iBACDlC,KAAL,CAAW6B,cAAX,CAA0BtC,KAA1B,CAAgCuC,OAAhC,GAA0C,MAA1C;gBACI,KAAKxB,QAAT,EAAmB;qBACVI,cAAL;qBACKJ,QAAL,GAAgBC,SAAhB;;;;;mCAIGI,OAAOwB,MAAM;gBAChB,KAAK7B,QAAT,EACI,KAAKI,cAAL;;gBAEE0B,QAAQvB,KAAKC,KAAL,CAAWH,QAAQ,EAAnB,IAAyB,EAAvC;iBACKL,QAAL,GAAgB,CAAC6B,SAAS,KAAKnC,KAAL,CAAW6B,cAApB,GACX,KAAK7B,KAAL,CAAWiC,eADA,GAEX,KAAKjC,KAAL,CAAWe,UAFD,EAEaqB,KAFb,CAAhB;;iBAIK3B,aAAL;iBACK1D,KAAL,GAAaE,SAAS,KAAKqD,QAAL,CAAcR,SAAvB,CAAb;gBACMuC,gBAAgBxB,KAAKC,KAAL,CAAWH,QAAQ,EAAnB,IAAyB,EAA/C;;iBAEKgB,WAAL,CAAiB,KAAK5E,KAAtB,EAA6BsF,aAA7B,EACIF,SAAS,KAAKnC,KAAL,CAAW6B,cAApB,GAAqC,KAAK7B,KAAL,CAAWkC,MAAX,GAAoB,EAAzD,GAA8D,KAAKlC,KAAL,CAAWkC,MAD7E;;;;wCAIY;iBACP5B,QAAL,CAAcf,KAAd,CAAoB6B,UAApB,GAAiC,KAAK9C,OAAL,CAAa+C,SAA9C;iBACKf,QAAL,CAAcf,KAAd,CAAoBC,KAApB,GAA4B,SAA5B;;;;yCAGa;iBACRc,QAAL,CAAcf,KAAd,CAAoB6B,UAApB,GAAiC,aAAjC;iBACKd,QAAL,CAAcf,KAAd,CAAoBC,KAApB,GAA4B,KAAK8C,OAAL,KACtB,KAAKhE,OAAL,CAAaiE,mBADS,GAEtB,KAAKjE,OAAL,CAAaiD,cAFnB;;;;kCAKM;mBACCiB,MAAMC,IAAN,CAAW,KAAKzC,KAAL,CAAWiC,eAAtB,EAAuCT,OAAvC,CAA+C,KAAKlB,QAApD,IAAgE,CAAC,CAAxE;;;;;;AChER,SAASoC,SAAT,CAAmB/B,KAAnB,EAA0B;WACfA,SAASE,KAAK8B,EAAL,GAAU,GAAnB,CAAP;;;AAGJ,SAASC,SAAT,CAAmBjC,KAAnB,EAA0B;WACfA,SAAS,MAAME,KAAK8B,EAApB,CAAP;;;AAGJ,SAASE,iBAAT,CAA2BC,KAA3B,EAAkCC,MAAlC,EAA0C;QAChCC,OAAOD,OAAOE,qBAAP,EAAb;WACO;WACAH,MAAMI,OAAN,GAAgBF,KAAKG,IADrB;WAEAL,MAAMM,OAAN,GAAgBJ,KAAKK;KAF5B;;;AAMJ,SAASC,KAAT,CAAeC,CAAf,EAAkB;WACP,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmB;mBACvBA,OAAX,EAAoBF,CAApB;KADG,CAAP;;;AAKJC,QAAQF,KAAR,GAAgB,UAAUI,EAAV,EAAcH,CAAd,EAAiB;QACzB,CAACA,CAAL,EAAQ;YACAG,EAAJ;aACK,cAAY,EAAjB;;WAGGJ,MAAMC,CAAN,EAASI,IAAT,CAAcD,EAAd,CAAP;CANJ;;AASAF,QAAQI,SAAR,CAAkBN,KAAlB,GAA0B,UAAUI,EAAV,EAAcH,CAAd,EAAiB;WAChC,KAAKI,IAAL,CAAU,YAAY;eAClBH,QAAQF,KAAR,CAAcI,EAAd,EAAkBH,CAAlB,CAAP;KADG,CAAP;CADJ;;AAMA,YAAe,EAACb,oBAAD,EAAYE,oBAAZ,EAAuBC,oCAAvB,EAAf;;IClCqBgB;8BAELC,SAAZ,EAAuBjC,cAAvB,EAAuC;;;aAC9BiC,SAAL,GAAiBA,SAAjB;aACKjC,cAAL,GAAsBA,cAAtB;aACKkC,IAAL,GAAY,EAAZ;aACKC,MAAL,GAAc,EAAd;;;;;+BAGGjD,YAAYkB,iBAAiBjB,iBAAiBiD,MAAM;6BACtCC,QAAjB,CAA0BnD,UAA1B,EAAsC,KAAK+C,SAA3C,EAAsD;uBAAQK,KAAKjD,SAAL,CAAeC,GAAf,CAAmBlD,IAAImG,IAAvB,CAAR;aAAtD;6BACiBF,QAAjB,CAA0BjC,eAA1B,EAA2C,KAAKJ,cAAhD,EAAgE,UAACsC,IAAD,EAAOE,CAAP,EAAa;qBACpEnD,SAAL,CAAeC,GAAf,CAAmBlD,IAAImG,IAAvB,EAA6BnG,IAAIqG,KAAjC;qBACKxE,SAAL,GAAiBmE,KAAKrC,cAAL,CAAoByC,CAApB,CAAjB;aAFJ;;iBAKK,IAAIA,IAAI,CAAb,EAAgBA,IAAI,EAApB,EAAwBA,GAAxB,EAA6B;oBACnBF,OAAOxF,SAAS4F,aAAT,CAAuB,MAAvB,CAAb;qBACKrD,SAAL,CAAeC,GAAf,CAAmBlD,IAAIuG,KAAvB;gCACgBC,IAAhB,CAAqBN,IAArB;qBACKL,SAAL,CAAeY,WAAf,CAA2BP,IAA3B;;;;;sCAaMpD,YAAYkB,iBAAiBjB,iBAAiB;iBACnD+C,IAAL,CAAUY,KAAV,GAAkB,KAAKb,SAAL,CAAec,WAAjC;iBACKb,IAAL,CAAUc,MAAV,GAAmB,KAAKf,SAAL,CAAegB,YAAlC;iBACKd,MAAL,CAAYe,CAAZ,GAAgB,KAAKhB,IAAL,CAAUY,KAAV,GAAkB,CAAlC;iBACKX,MAAL,CAAYgB,CAAZ,GAAgB,KAAKjB,IAAL,CAAUc,MAAV,GAAmB,CAAnC;iBACKI,WAAL,GAAmB,KAAKlB,IAAL,CAAUY,KAAV,GAAkB,CAAlB,GAAsB,EAAzC;;gBAEMO,aAAa,KAAKrD,cAAL,CAAoB+C,WAAvC;gBACMO,cAAc,KAAKtD,cAAL,CAAoBiD,YAAxC;gBACMM,UAAUF,aAAa,CAA7B;gBACMG,UAAUF,cAAc,CAA9B;;6BAEiBG,eAAjB,CAAiC,KAAKtB,MAAL,CAAYe,CAA7C,EAAgD,KAAKf,MAAL,CAAYgB,CAA5D,EAA+D,KAAKC,WAApE,EAAiFlE,UAAjF;6BACiBuE,eAAjB,CAAiCF,OAAjC,EAA0CC,OAA1C,EAAmD,KAAKJ,WAAL,GAAmB,EAAtE,EAA0EhD,eAA1E;6BACiBqD,eAAjB,CAAiC,KAAKtB,MAAL,CAAYe,CAA7C,EAAgD,KAAKf,MAAL,CAAYgB,CAA5D,EAA+D,KAAKC,WAApE,EAAiFjE,eAAjF;;;;iCAvBYD,YAAY+C,WAAWyB,KAAK;iBACnC,IAAIlB,IAAI,CAAb,EAAgBA,IAAI,EAApB,EAAwBA,GAAxB,EAA6B;oBACnBF,OAAOxF,SAAS4F,aAAT,CAAuB,MAAvB,CAAb;oBACIJ,IAAJ,EAAUE,CAAV;2BACWI,IAAX,CAAgBN,IAAhB;0BACUO,WAAV,CAAsBP,IAAtB;;;;;wCAqBeiB,SAASC,SAASnD,QAAQlC,OAAO;gBAC9CwF,eAAe,MAAMxF,MAAMyF,MAAjC;iBACK,IAAIpB,IAAI,CAAb,EAAgBA,IAAIrE,MAAMyF,MAA1B,EAAkCpB,GAAlC,EAAuC;;oBAE7B1D,QAAQ+E,MAAMhD,SAAN,CAAgB2B,IAAImB,YAApB,CAAd;oBACMpB,OAAOpE,MAAMqE,CAAN,CAAb;oBACMsB,YAAYvB,KAAKQ,WAAvB;oBACMgB,aAAaxB,KAAKU,YAAxB;;qBAEKvF,KAAL,CAAW4D,IAAX,GAAoBiC,UAAUvE,KAAKgF,GAAL,CAASlF,KAAT,IAAkBuB,MAA7B,GAAuCyD,YAAY,CAApD,GAAyD,IAA3E;qBACKpG,KAAL,CAAWuG,MAAX,GAAsBT,UAAUxE,KAAKkF,GAAL,CAASpF,KAAT,IAAkBuB,MAA7B,GAAuC0D,aAAa,CAArD,GAA0D,IAA9E;;;;;;;ICzDSI;uBAEL1H,OAAZ,EAAqB2H,WAArB,EAAkCC,YAAlC,EAAgD;;;aACvC5H,OAAL,GAAeA,OAAf;aACKZ,IAAL,GAAYuI,WAAZ;aACKC,YAAL,GAAoBA,YAApB;aACKC,WAAL,GAAmB,KAAnB;aACKpF,UAAL,GAAkB,EAAlB;aACKkB,eAAL,GAAuB,EAAvB;aACKjB,eAAL,GAAuB,EAAvB;aACK+C,IAAL,GAAY,EAAZ;aACKC,MAAL,GAAc,EAAd;;aAEKoC,SAAL;aACKC,aAAL,CAAmBJ,WAAnB;aACKK,UAAL;;aAEKC,SAAL,CAAevG,KAAf,CAAqBkC,MAArB,GAA8B,KAAK+C,WAAnC;;aAEKuB,WAAL,GAAmB,KAAKD,SAAxB;aACKE,eAAL,CAAqB,KAAKD,WAAL,CAAiBrG,SAAtC;;;;;oCAGQ;;;iBACH2D,SAAL,GAAiBnF,SAASC,cAAT,CAAwBV,IAAIN,OAA5B,CAAjB;iBACKiE,cAAL,GAAsBlD,SAASC,cAAT,CAAwBV,IAAIwI,OAA5B,CAAtB;iBACKC,YAAL,GAAoBhI,SAASC,cAAT,CAAwBV,IAAI0I,MAA5B,CAApB;;iBAEK9C,SAAL,CAAe+C,WAAf,GAA6B;uBAAM,MAAKV,WAAL,GAAmB,IAAzB;aAA7B;iBACKrC,SAAL,CAAegD,SAAf,GAA2B,YAAM;sBAAMX,WAAL,GAAmB,KAAnB;sBACzBY,eAAL;aADJ;;iBAIKJ,YAAL,CAAkBG,SAAlB,GAA8B,UAACE,CAAD;uBAAOA,EAAEC,eAAF,EAAP;aAA9B;iBACKN,YAAL,CAAkBO,WAAlB,GAAgC,UAACF,CAAD;uBAAOA,EAAEC,eAAF,EAAP;aAAhC;iBACKN,YAAL,CAAkB7H,OAAlB,GAA4B,UAACkI,CAAD;uBAAOA,EAAEC,eAAF,EAAP;aAA5B;;iBAEKnD,SAAL,CAAeoD,WAAf,GAA6B,UAACF,CAAD;uBAAO,MAAKG,UAAL,CAAgBH,CAAhB,EAAmB,KAAnB,EAA0B,MAAKlD,SAA/B,CAAP;aAA7B;iBACKA,SAAL,CAAehF,OAAf,GAAyB,UAACkI,CAAD;uBAAO,MAAKG,UAAL,CAAgBH,CAAhB,EAAmB,IAAnB,EAAyB,MAAKlD,SAA9B,CAAP;aAAzB;;iBAEKjC,cAAL,CAAoBqF,WAApB,GAAkC,UAACF,CAAD;uBAAO,MAAKG,UAAL,CAAgBH,CAAhB,EAAmB,KAAnB,EAA0B,MAAKnF,cAA/B,CAAP;aAAlC;iBACKA,cAAL,CAAoB/C,OAApB,GAA8B,UAACkI,CAAD;uBAAO,MAAKG,UAAL,CAAgBH,CAAhB,EAAmB,IAAnB,EAAyB,MAAKnF,cAA9B,CAAP;aAA9B;;;;sCAGUoE,aAAa;;;iBAClBmB,WAAL,GAAmB,IAAIrH,WAAJ,CAAgB;yBACtB,KAAKzB,OADiB;4BAEnB,KAAKyC,UAFc;iCAGd,KAAKC;aAHP,EAIhBiF,YAAYjJ,OAJI,EAIK,UAACA,OAAD,EAAU2D,KAAV;uBAAoB,OAAKT,aAAL,CAAmBlD,OAAnB,EAA4B2D,KAA5B,CAApB;aAJL,CAAnB;;iBAMK4F,SAAL,GAAiB,IAAI9E,SAAJ,CAAc;yBAClB,KAAKnD,OADa;iCAEV,KAAK2D,eAFK;4BAGf,KAAKlB,UAHU;gCAIX,KAAKc;aAJR,EAKdoE,YAAYlJ,KALE,EAKK,UAACA,KAAD,EAAQ4D,KAAR,EAAeuB,MAAf;uBAA0B,OAAKP,WAAL,CAAiB5E,KAAjB,EAAwB4D,KAAxB,EAA+BuB,MAA/B,CAA1B;aALL,CAAjB;;;;kCAQM;iBACDsE,WAAL,CAAiBa,OAAjB;;;;qCAGS;gBACHC,mBAAmB,IAAIzD,gBAAJ,CAAqB,KAAKC,SAA1B,EAAqC,KAAKjC,cAA1C,CAAzB;6BACiB0F,MAAjB,CAAwB,KAAKxG,UAA7B,EAAyC,KAAKkB,eAA9C,EAA+D,KAAKjB,eAApE,EAAqF,KAAKuF,SAA1F;6BACiBiB,aAAjB,CAA+B,KAAKzG,UAApC,EAAgD,KAAKkB,eAArD,EAAsE,KAAKjB,eAA3E;;iBAEK+C,IAAL,GAAYuD,iBAAiBvD,IAA7B;iBACKC,MAAL,GAAcsD,iBAAiBtD,MAA/B;iBACKiB,WAAL,GAAmBqC,iBAAiBrC,WAApC;;;;mCAGOnC,OAAOqD,aAAahE,MAAM;gBAC7B,EAAEgE,eAAe,KAAKA,WAAtB,CAAJ,EACI;gBACEsB,QAAQ/B,MAAM7C,iBAAN,CAAwBC,KAAxB,EAA+B,KAAKgB,SAApC,CAAd;gBACMiB,IAAI0C,MAAM1C,CAAN,GAAU,KAAKf,MAAL,CAAYe,CAAhC;gBACMC,IAAI,KAAKhB,MAAL,CAAYgB,CAAZ,GAAgByC,MAAMzC,CAAhC;gBACIrE,QAAQ,KAAK+E,MAAM9C,SAAN,CAAgB/B,KAAK6G,IAAL,CAAU1C,IAAID,CAAd,CAAhB,CAAjB;gBACIA,IAAI,CAAR,EAAWpE,SAAS,GAAT;;iBAEN6F,WAAL,CAAiBW,UAAjB,CAA4BxG,KAA5B,EAAmCwB,IAAnC;kBACM8E,eAAN;;;;wCAGYU,OAAO;iBACd,IAAItD,IAAI,CAAb,EAAgBA,IAAI,KAAKtD,UAAL,CAAgB0E,MAApC,EAA4CpB,GAA5C;qBACStD,UAAL,CAAgBsD,CAAhB,EAAmBvE,SAAnB,GAA+B6H,MAAMtD,CAAN,CAA/B;;;;;2CAGWkB,KAAK;eACjBqC,OAAH,CAAWC,IAAX,CAAgB,KAAK9G,UAArB,EAAiC;uBAAKwE,IAAIuC,CAAJ,CAAL;aAAjC;;;;sCAGU9K,SAAS2D,OAAO;iBACrBjD,IAAL,CAAUV,OAAV,GAAoBA,OAApB;iBACK+K,uBAAL,CAA6BpH,KAA7B,EAAoC,KAAKsE,WAAzC;iBACKiB,YAAL,CAAkB,KAAKxI,IAAvB,EAA6B2C,OAAOvC,QAAP,CAAgBE,OAA7C;;;;oCAGQjB,OAAO4D,OAAOuB,QAAQ;iBACzBxE,IAAL,CAAUX,KAAV,GAAkBA,KAAlB;iBACKgL,uBAAL,CAA6BpH,KAA7B,EAAoCuB,MAApC;iBACKgE,YAAL,CAAkB,KAAKxI,IAAvB,EAA6B2C,OAAOvC,QAAP,CAAgBC,KAA7C;;;;gDAGoB4C,OAAgC;gBAAzBoD,IAAyB,uEAAlB,KAAKkB,WAAa;;iBAC/C0B,YAAL,CAAkBpH,KAAlB,CAAwByI,SAAxB,gBAA8CrH,QAAQ,EAAtD;iBACKgG,YAAL,CAAkBpH,KAAlB,CAAwBoF,KAAxB,GAAgCZ,OAAO,IAAvC;;;;wCAGY;iBACPqD,WAAL,CAAiBa,OAAjB;iBACKC,UAAL,CAAgB,KAAK3B,SAArB;;;;0CAGc;iBACTA,SAAL,CAAe0B,OAAf;iBACKC,UAAL,CAAgB,KAAKd,WAArB;;;;mCAGOnD,MAAM;;;gBACT,KAAKuC,WAAL,KAAqBvC,IAAzB,EAA+B;qBACtBkE,kBAAL,CAAwB;2BAAKL,EAAE5G,SAAF,CAAYC,GAAZ,CAAgBlD,IAAImK,OAApB,CAAL;iBAAxB;qBACKzB,YAAL,CAAkBzF,SAAlB,CAA4BC,GAA5B,CAAgClD,IAAImK,OAApC;wBACQ9E,KAAR,CAAc,YAAM;2BACX6E,kBAAL,CAAwB;+BAAKL,EAAE5G,SAAF,CAAYI,MAAZ,CAAmBrD,IAAImK,OAAvB,CAAL;qBAAxB;2BACKzB,YAAL,CAAkBzF,SAAlB,CAA4BI,MAA5B,CAAmCrD,IAAImK,OAAvC;2BACK3B,eAAL,CAAqBxC,KAAK9D,SAA1B;2BACKqG,WAAL,GAAmBvC,IAAnB;2BACKkE,kBAAL,CAAwB;+BAAK,OAAKzH,cAAL,CAAoBoH,CAApB,CAAL;qBAAxB;yBACKT,OAAL;iBANJ,EAOG,GAPH;;;;;uCAWOS,GAAG;cACZ5G,SAAF,CAAYI,MAAZ,CAAmBrD,IAAIqC,QAAvB;cACEf,KAAF,CAAQ6B,UAAR,GAAqB,aAArB;cACE7B,KAAF,CAAQC,KAAR,GAAgB,KAAKlB,OAAL,CAAaiD,cAA7B;;;;;;IC7Ia8G;mBAEL/J,OAAZ,EAAqBZ,IAArB,EAA2B;;;aAClBY,OAAL,GAAeA,OAAf;;aAEKG,QAAL;aACKf,IAAL,GAAYA,IAAZ;aACK4K,YAAL;;;;;mCAGO;;;iBACFC,YAAL,GAAoB5J,SAASC,cAAT,CAAwBV,IAAIsK,QAA5B,CAApB;iBACKD,YAAL,CAAkBzJ,OAAlB,GAA4B,YAAM;oBACxBpB,OAAO,MAAKA,IAAlB;qBACK+K,SAAL,GAAiB;2BAAMC,WAAWhL,IAAX,CAAN;iBAAjB;sBACKY,OAAL,CAAaqK,QAAb,CAAsBjL,IAAtB;sBACMkL,OAAN;aAJJ;;iBAOKC,YAAL,GAAoBlK,SAASC,cAAT,CAAwBV,IAAI4K,QAA5B,CAApB;iBACKD,YAAL,CAAkB/J,OAAlB,GAA4B,YAAM;sBACzBR,OAAL,CAAayK,QAAb;sBACMH,OAAN;aAFJ;;;;uCAMW;;;iBACNI,MAAL,GAAc,IAAI5K,WAAJ,CAAgB;yBACjB,KAAKE,OADY;sBAEpB,KAAKZ,IAFe;+BAGX;2BAAM,OAAKuL,aAAL,EAAN;iBAHW;kCAIR;2BAAM,OAAKlC,eAAL,EAAN;;aAJR,CAAd;iBAMKmC,SAAL,GAAiB,IAAIlD,SAAJ,CAAc,KAAK1H,OAAnB,EAA4B,KAAKZ,IAAjC,EAAuC,UAACA,IAAD,EAAO0C,IAAP;uBAAgB,OAAK8F,YAAL,CAAkBxI,IAAlB,EAAwB0C,IAAxB,CAAhB;aAAvC,CAAjB;;;;kCAGM;iBACD8I,SAAL,CAAeC,OAAf;;;;wCAGY;iBACPD,SAAL,CAAeD,aAAf;;;;0CAGc;iBACTC,SAAL,CAAenC,eAAf;;;;qCAGSrJ,MAAM0C,MAAM;iBAChB1C,IAAL,GAAYA,IAAZ;iBACKsL,MAAL,CAAYtL,IAAZ,GAAmBA,IAAnB;iBACKsL,MAAL,CAAY7J,mBAAZ;gBACIiB,SAASC,OAAOvC,QAAP,CAAgBE,OAA7B,EACI,KAAKgL,MAAL,CAAY9J,qBAAZ;;;;kCAIS;qBACJkK,IAAT,CAAcC,WAAd,CAA0B1K,SAASC,cAAT,CAAwByB,OAAOzC,OAA/B,CAA1B;;;;;;AC7DO,SAAS0L,WAAT,CAAqBhL,OAArB,EAA8B;aAChCM,cAAT,CAAwBV,IAAIqL,QAA5B,EAAsChK,KAAtC,CAA4C6B,UAA5C,GAAyD9C,QAAQkL,gBAAjE;aACS5K,cAAT,CAAwBV,IAAIqL,QAA5B,EAAsChK,KAAtC,CAA4CC,KAA5C,GAAoDlB,QAAQmB,WAA5D;aACSb,cAAT,CAAwBV,IAAIuL,SAA5B,EAAuClK,KAAvC,CAA6C6B,UAA7C,GAA0D9C,QAAQoL,iBAAlE;aACS9K,cAAT,CAAwBV,IAAIN,OAA5B,EAAqC2B,KAArC,CAA2C6B,UAA3C,GAAwD9C,QAAQqL,eAAhE;aACS/K,cAAT,CAAwBV,IAAI0I,MAA5B,EAAoCrH,KAApC,CAA0C6B,UAA1C,GAAuD9C,QAAQ+C,SAA/D;aACSzC,cAAT,CAAwBV,IAAI0L,KAA5B,EAAmCrK,KAAnC,CAAyC6B,UAAzC,GAAsD9C,QAAQ+C,SAA9D;aACSzC,cAAT,CAAwBV,IAAI2L,SAA5B,EAAuCtK,KAAvC,CAA6C6B,UAA7C,GAA0D9C,QAAQwL,gBAAlE;aACSlL,cAAT,CAAwBV,IAAIsK,QAA5B,EAAsCjJ,KAAtC,CAA4CC,KAA5C,GAAoDlB,QAAQyL,WAA5D;aACSnL,cAAT,CAAwBV,IAAI4K,QAA5B,EAAsCvJ,KAAtC,CAA4CC,KAA5C,GAAoDlB,QAAQ0L,WAA5D;;gBAEY/L,IAAIgM,SAAhB,EAA2B3L,QAAQiD,cAAnC;gBACYtD,IAAIqG,KAAhB,EAAuBhG,QAAQiE,mBAA/B;gBACYtE,IAAIuG,KAAhB,EAAuBlG,QAAQ+C,SAA/B,EAA0C,aAA1C;;;AAGJ,SAAS6I,WAAT,CAAqBC,SAArB,EAAgC3K,KAAhC,EAA2D;QAApB4K,QAAoB,uEAAT,OAAS;;QACjDpK,QAAQwC,MAAMC,IAAN,CAAW9D,SAAS0L,sBAAT,CAAgCF,SAAhC,CAAX,CAAd;;;;;;6BACmBnK,KAAnB;gBAAWoE,IAAX;;iBACS7E,KAAL,CAAW6K,QAAX,IAAuB5K,KAAvB;;;;;;;;;;;;;;;;;;ACdO,SAAS8K,UAAT,GAAiC;QAAbjM,MAAa,uEAAJ,EAAI;;;;QAGtCC,UAAUiM,OAAOC,MAAP,CAAc,EAAd,EAAkBnK,OAAOlC,WAAzB,EAAsCE,MAAtC,CAAhB;QACMX,OAAO+M,YAAQnM,QAAQZ,IAAhB,CAAb;;QAEMgN,QAAQ,IAAIrC,KAAJ,CAAU/J,OAAV,EAAmBZ,IAAnB,CAAd;gBACYY,OAAZ;UACM6K,OAAN;;;AAIJ,SAASwB,SAAT,GAAqB;QACbhM,SAASC,cAAT,CAAwByB,OAAOzC,OAA/B,CAAJ,EACI,MAAMgN,MAAM,0DAAN,CAAN;;QAEEC,WAAWlM,SAAS4F,aAAT,CAAuB,KAAvB,CAAjB;aACSuG,EAAT,GAAczK,OAAOzC,OAArB;aACSmN,SAAT,GAAqBC,SAArB;aACS5B,IAAT,CAAc1E,WAAd,CAA0BmG,QAA1B;;;ACvBJ,YAAe;gBACC,uBAACxM,MAAD;eAAYiM,WAAWjM,MAAX,CAAZ;KADD;YAEH,gBAACX,IAAD;eAAUgL,WAAWhL,IAAX,CAAV;;CAFZ;;;;"} \ No newline at end of file +{"version":3,"file":"grudus-timepicker.js","sources":["../src/js/timeExtractor.js","../src/js/timeFormatter.js","../src/js/meta/clockHtml.js","../src/js/meta/config.js","../src/js/clockHeader.js","../src/js/face/minutesFace.js","../src/js/face/hoursFace.js","../src/js/meta/utils.js","../src/js/face/clockFaceCreator.js","../src/js/face/clockFace.js","../src/js/clock.js","../src/js/colorStylists.js","../src/js/timepickerCreator.js","../src/js/index.js"],"sourcesContent":["const hoursRegex = /^([0-1]?[0-9]|2[0-3])$/;\nconst minutesRegex = /^([0-5]?[0-9])$/;\nconst regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;\n\nexport default function extractTime(date, hasMeridiem) {\n if (!date)\n return fromDate(new Date(), hasMeridiem);\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes) \n && date.meridiem !== undefined \n && date.meridiem.length > 0)\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes), meridiem: date.meridiem};\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes))\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes)};\n else if (regex.test(date))\n return fromRegex(date);\n else if (date instanceof Date)\n return fromDate(date, hasMeridiem);\n else\n throw new TypeError(`INVALID FORMAT: {${JSON.stringify(date)}}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields`);\n}\n\nfunction fromRegex(date) {\n const parsed = regex.exec(date);\n return {hours: parseInt(parsed[1]), minutes: parseInt(parsed[2])};\n}\n\nfunction fromDate(date, hasMeridiem) {\n if (hasMeridiem !== undefined && !hasMeridiem) return {hours: date.getHours(), minutes: date.getMinutes()};\n return getTimeWithMeridiem(date);\n\n}\n\nfunction getTimeWithMeridiem(date) {\n let meridiem = \"\";\n let hours = date.getHours(); \n \n if (hours < 13) meridiem = \"am\";\n else meridiem = \"pm\";\n \n if (hours !== 12) hours = hours % 12;\n \n return {hours, minutes: date.getMinutes(), meridiem};\n}","import extractTime from \"./timeExtractor\";\n\nexport default function (time, hasMeridiem) {\n const extractedTime = extractTime(time, hasMeridiem);\n return (extractedTime.hours < 10 ? \"0\" + extractedTime.hours : extractedTime.hours)\n + \":\" + (extractedTime.minutes < 10 ? \"0\" + extractedTime.minutes : extractedTime.minutes)\n + \" \"+ (extractedTime.meridiem !== undefined ? extractedTime.meridiem : \"\");\n}","\nexport default (options) => {\n const arrayTemplate = [\"
\" ,\n \"
\" ,\n \"
\" ,\n \" 21\" ,\n \" :\" ,\n \" 37\"];\n if (options.meridiem){\n arrayTemplate.push([\"
\" ,\n \"AM\" ,\n \"PM\",\n \"
\"].join(\"\\n\"));\n \n }\n const nextTemplate = [\"
\" ,\n \"
\" ,\n \"\" ,\n \"\" ,\n \"
\" ,\n \"
\" ,\n \" \" ,\n \"
\" ,\n \"
\" ,\n \"
\" ,\n \"
\" ,\n \"\" ,\n \"\" ,\n \"
\"];\n\n nextTemplate.push(`\n \n \n `);\n nextTemplate.push(\"
\");\n return arrayTemplate.concat(nextTemplate).join(\"\\n\");\n};","const clockId = \"grudus-clock\";\n\nconst defaultConfig = {\n onSubmit: () => {\n },\n onCancel: () => {\n },\n headerBackground: \"#1976D2\",\n headerColor: \"#c7d6e1\",\n headerSelected: \"#ffffff\",\n wrapperBackground: \"#f0fff0\",\n footerBackground: \"#f0fff0\",\n submitColor: \"#1976D2\",\n cancelColor: \"#1976D2\",\n clockBackground: \"#CFD8DC\",\n clockItemColor: \"#212121\",\n clockItemInnerColor: \"#212121\",\n handColor: \"#1976D2\",\n meridiem: false,\n labels: {\n cancel:\"Cancel\",\n ok:\"Ok\",\n }\n};\n\nconst FaceType = {HOURS: \"hours\", MINUTES: \"minutes\"};\n\nconst css = {\n clock: \"g-clock\",\n clockItem: \"g-clock-item\",\n inner: \"g-clock-inner\",\n outer: \"g-clock-outer\",\n item: \"g-clock-item\",\n hand: \"g-hand-of-a-clock\",\n fadeOut: \"g-fade-out\",\n selected: \"g-selected\",\n active: \"g-active\",\n submit: \"g-submit\",\n cancel: \"g-cancel\",\n hour: \"g-hour\",\n minute: \"g-minute\"\n};\n\nconst DOM = {\n headerId: \"g-head\",\n hoursId: \"g-hours\",\n minutesId: \"g-minutes\",\n clockId: \"g-clock\",\n innerId: \"g-clock-inner\",\n wrapperId: \"g-clock-wrapper\",\n dotId: \"g-middle-dot\",\n handId: \"g-hand-of-a-clock\",\n buttonsId: \"g-buttons\",\n submitId: \"g-time-submit\",\n cancelId: \"g-time-cancel\",\n gTimeAmId: \"g-time-am\",\n gTimePmId: \"g-time-pm\"\n};\n\nexport default {clockId, clockConfig: defaultConfig, FaceType};\nexport {css, DOM};","import {DOM} from \"./meta/config\";\n\nexport default class ClockHeader {\n\n constructor(config) {\n this.options = config.options;\n this.time = config.time;\n this.onHourClicked = config.onHourClicked;\n this.onMinutesClicked = config.onMinutesClicked;\n\n this.initView();\n }\n\n initView() {\n this.headerHours = document.getElementById(DOM.hoursId);\n this.headerHours.onclick = () => {\n this.toggleActiveToHours();\n this.onHourClicked();\n };\n\n this.headerMinutes = document.getElementById(DOM.minutesId);\n this.headerMinutes.onclick = () => {\n this.toggleActiveToMinutes();\n this.onMinutesClicked();\n };\n if (this.options.meridiem) {\n this.headerAm = document.getElementById(DOM.gTimeAmId);\n this.headerPm = document.getElementById(DOM.gTimePmId);\n this.headerAm.onclick = () => {\n this.toogleActiveMeridiemAm();\n this.time.meridiem = \"am\";\n };\n this.headerPm.onclick = () => {\n this.toogleActiveMeridiemPm();\n this.time.meridiem = \"pm\";\n };\n if (this.time.meridiem === \"am\") this.toogleActiveMeridiemAm();\n else if (this.time.meridiem === \"pm\") this.toogleActiveMeridiemPm();\n else this.defaultToggleActiveMeridiem();\n }\n\n this.updateDisplayedTime();\n this.toggleActiveToHours();\n }\n\n toggleActiveToMinutes() {\n this.toggleActive(this.headerHours, this.headerMinutes);\n }\n\n toggleActiveToHours() {\n this.toggleActive(this.headerMinutes, this.headerHours);\n }\n\n toogleActiveMeridiemAm() {\n this.toggleActive(this.headerPm, this.headerAm);\n \n }\n\n toogleActiveMeridiemPm() {\n this.toggleActive(this.headerAm, this.headerPm);\n }\n \n defaultToggleActiveMeridiem() {\n const { hours } = this.time;\n if (hours < 13) this.toogleActiveMeridiemAm();\n else this.toogleActiveMeridiemPm();\n }\n\n toggleActive(objectToRemoveClass, objectToAddClass) {\n objectToRemoveClass.style.color = this.options.headerColor;\n objectToAddClass.style.color = this.options.headerSelected;\n }\n\n updateDisplayedTime() {\n ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours, this.options.meridiem);\n ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes);\n }\n\n static doUpdateDisplayedTime(node, value, meridiem) {\n if (meridiem && value !== 12) value = value % 12;\n if (value < 10)\n node.innerText = \"0\" + value;\n else node.innerText = value;\n }\n}","import Config, {css} from \"../meta/config\";\n\nexport default class MinutesFace {\n\n constructor(items, initialMinutes, updateMinutes) {\n this.displayed = [\"00\", \"05\", \"10\", \"15\", \"20\", \"25\", \"30\", \"35\", \"40\", \"45\", \"50\", \"55\"];\n this.options = items.options;\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.items = items;\n this.minutes = initialMinutes;\n this.updateMinutes = updateMinutes;\n }\n\n onEnter() {\n this.selected = this.findSelected(this.minutes);\n this.colorSelected();\n this.updateMinutes(this.minutes, this.minutes * 6);\n }\n\n onLeave() {\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle) {\n if (this.selected)\n this.removeSelected();\n\n const minute = Math.round(angle / 6) % 60;\n this.selected = this.findSelected(minute);\n this.colorSelected();\n this.minutes = minute;\n this.updateMinutes(this.minutes, angle);\n }\n\n findSelected(minute) {\n return (minute % 5 === 0) ? this.items.clockItems[minute / 5] : this.items.outerClockItems[minute];\n }\n\n colorSelected() {\n if (this.isOuter()) {\n this.selected.classList.add(css.selected);\n return;\n }\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"whitesmoke\";\n }\n\n removeSelected() {\n if (this.isOuter()) {\n this.selected.classList.remove(css.selected);\n return;\n }\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.options.clockItemColor;\n }\n\n isOuter() {\n return this.items.outerClockItems.indexOf(this.selected) > -1;\n }\n}","import Config from \"../meta/config\";\n\nexport default class HoursFace {\n\n constructor(items, initialHours, updateHours) {\n this.displayed = [\"12\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\n this.displayedInner = [\"00\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\", \"23\"];\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.options = items.options;\n\n this.items = items;\n this.hours = initialHours;\n this.updateHours = updateHours;\n }\n\n onEnter() {\n\n if (this.items.innerClockElem !== null)\n this.items.innerClockElem.style.display = \"block\";\n const isInnerClock = this.hours < 13 && this.hours !== 0;\n const hoursIndex = this.hours % 12;\n let radius = this.items.radius;\n if (this.options.meridiem && !isInnerClock) this.selected = this.items.clockItems[hoursIndex];\n else {\n this.selected = isInnerClock ? \n this.items.clockItems[hoursIndex] : \n this.items.innerClockItems[hoursIndex];\n radius = isInnerClock ? radius : radius - 50;\n }\n this.colorSelected();\n\n this.updateHours(this.hours, hoursIndex * 30, radius);\n }\n\n onLeave() {\n if (this.items.innerClockElem !== null)\n this.items.innerClockElem.style.display = \"none\";\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle, elem) {\n if (this.selected)\n this.removeSelected();\n\n const index = Math.round(angle / 30) % 12;\n this.selected = (elem === this.items.innerClockElem \n && this.items.innerClockElem!== undefined\n ? this.items.innerClockItems\n : this.items.clockItems)[index];\n\n this.colorSelected();\n this.hours = parseInt(this.selected.innerText);\n const selectedAngle = Math.round(angle / 30) * 30;\n\n this.updateHours(this.hours, selectedAngle,\n elem === this.items.innerClockElem && this.items.innerClockElem!== undefined ? this.items.radius - 50 : this.items.radius);\n }\n\n colorSelected() {\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"#ffffff\";\n }\n\n removeSelected() {\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.isInner()\n ? this.options.clockItemInnerColor\n : this.options.clockItemColor;\n }\n\n isInner() {\n return Array.from(this.items.innerClockItems).indexOf(this.selected) > -1;\n }\n}","function toRadians(angle) {\n return angle * (Math.PI / 180);\n}\n\nfunction toDegrees(angle) {\n return angle * (180 / Math.PI);\n}\n\nfunction findMousePosition(event, object) {\n const rect = object.getBoundingClientRect();\n return {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n}\n\nfunction delay(t) {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n}\n\nPromise.delay = function (fn, t) {\n if (!t) {\n t = fn;\n fn = function () {\n };\n }\n return delay(t).then(fn);\n};\n\nPromise.prototype.delay = function (fn, t) {\n return this.then(function () {\n return Promise.delay(fn, t);\n });\n};\n\nexport default {toRadians, toDegrees, findMousePosition};","import Utils from \"../meta/utils\";\nimport {css} from \"../meta/config\";\n\nexport default class ClockFaceCreator {\n\n constructor(clockElem, innerClockElem, options) {\n this.clockElem = clockElem;\n this.innerClockElem = innerClockElem;\n this.size = {};\n this.middle = {};\n this.options = options;\n }\n\n create(clockItems, innerClockItems, outerClockItems, face) {\n ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item));\n if (!this.options.meridiem) {\n ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => {\n span.classList.add(css.item, css.inner);\n span.innerText = face.displayedInner[i];\n });\n }\n\n for (let i = 0; i < 60; i++) {\n const span = document.createElement(\"span\");\n span.classList.add(css.outer);\n outerClockItems.push(span);\n this.clockElem.appendChild(span);\n }\n }\n\n static doCreate(clockItems, clockElem, fun) {\n for (let i = 0; i < 12; i++) {\n const span = document.createElement(\"span\");\n fun(span, i);\n clockItems.push(span);\n clockElem.appendChild(span);\n }\n }\n\n calculateSize(clockItems, innerClockItems, outerClockItems) {\n this.size.width = this.clockElem.offsetWidth;\n this.size.height = this.clockElem.offsetHeight;\n this.middle.x = this.size.width / 2;\n this.middle.y = this.size.height / 2;\n this.itemsRadius = this.size.width / 2 - 20;\n\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems);\n if (!this.options.meridiem) {\n const innerWidth = this.innerClockElem.offsetWidth;\n const innerHeight = this.innerClockElem.offsetHeight;\n const middleX = innerWidth / 2;\n const middleY = innerHeight / 2;\n ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems);\n }\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems);\n }\n\n static doCalculateSize(middleX, middleY, radius, items) {\n const angleQuantum = 360 / items.length;\n for (let i = 0; i < items.length; i++) {\n\n const angle = Utils.toRadians(i * angleQuantum);\n const item = items[i];\n const itemWidth = item.offsetWidth;\n const itemHeight = item.offsetHeight;\n\n item.style.left = ((middleX + Math.sin(angle) * radius) - itemWidth / 2) + \"px\";\n item.style.bottom = ((middleY + Math.cos(angle) * radius) - itemHeight / 2) + \"px\";\n }\n }\n}","import MinutesFace from \"./minutesFace\";\nimport HoursFace from \"./hoursFace\";\nimport Utils from \"../meta/utils\";\nimport Config, {css, DOM} from \"../meta/config\";\nimport ClockFaceCreator from \"./clockFaceCreator\";\n\nexport default class ClockFace {\n\n constructor(options, initialTime, onTimeUpdate) {\n this.options = options;\n this.time = initialTime;\n this.onTimeUpdate = onTimeUpdate;\n this.isMouseDown = false;\n this.clockItems = [];\n this.innerClockItems = [];\n this.outerClockItems = [];\n this.size = {};\n this.middle = {};\n\n this.initViews();\n this.initTimeFaces(initialTime);\n this.createFace(options);\n\n this.hoursFace.items.radius = this.itemsRadius;\n\n this.currentFace = this.hoursFace;\n this.changeDisplayed(this.currentFace.displayed);\n }\n\n initViews() {\n this.clockElem = document.getElementById(DOM.clockId);\n this.innerClockElem = (this.options.meridiem) ? null : document.getElementById(DOM.innerId);\n this.handOfAClock = document.getElementById(DOM.handId);\n\n this.clockElem.onmousedown = () => this.isMouseDown = true;\n this.clockElem.onmouseup = () => {this.isMouseDown = false;\n this.toggleToMinutes();\n };\n\n this.handOfAClock.onmouseup = (e) => e.stopPropagation();\n this.handOfAClock.onmousemove = (e) => e.stopPropagation();\n this.handOfAClock.onclick = (e) => e.stopPropagation();\n\n this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem);\n this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem);\n\n if (!this.options.meridiem) {\n this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem);\n this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem);\n }\n }\n\n initTimeFaces(initialTime) {\n this.minutesFace = new MinutesFace({\n options: this.options,\n clockItems: this.clockItems,\n outerClockItems: this.outerClockItems\n }, initialTime.minutes, (minutes, angle) => this.updateMinutes(minutes, angle));\n\n this.hoursFace = new HoursFace({\n options: this.options,\n innerClockItems: this.innerClockItems,\n clockItems: this.clockItems,\n innerClockElem: this.innerClockElem\n }, initialTime.hours, (hours, angle, radius) => this.updateHours(hours, angle, radius));\n }\n\n onStart() {\n this.currentFace.onEnter();\n }\n\n createFace() {\n const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem, this.options);\n clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace);\n clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems);\n\n this.size = clockFaceCreator.size;\n this.middle = clockFaceCreator.middle;\n this.itemsRadius = clockFaceCreator.itemsRadius;\n }\n\n selectTime(event, isMouseDown, elem) {\n if (!(isMouseDown || this.isMouseDown))\n return;\n const mouse = Utils.findMousePosition(event, this.clockElem);\n const x = mouse.x - this.middle.x;\n const y = this.middle.y - mouse.y;\n let angle = 90 - Utils.toDegrees(Math.atan(y / x));\n if (x < 0) angle += 180;\n\n this.currentFace.selectTime(angle, elem);\n event.stopPropagation();\n }\n\n changeDisplayed(array) {\n for (let i = 0; i < this.clockItems.length; i++)\n this.clockItems[i].innerText = array[i];\n }\n\n onEachClockElement(fun) {\n [].forEach.call(this.clockItems, c => fun(c));\n }\n\n updateMinutes(minutes, angle) {\n this.time.minutes = minutes;\n this.calculateHandOfTheClock(angle, this.itemsRadius);\n this.onTimeUpdate(this.time, Config.FaceType.MINUTES);\n }\n\n updateHours(hours, angle, radius) {\n this.time.hours = hours;\n this.calculateHandOfTheClock(angle, radius);\n this.onTimeUpdate(this.time, Config.FaceType.HOURS);\n }\n\n calculateHandOfTheClock(angle, size = this.itemsRadius) {\n this.handOfAClock.style.transform = `rotate(${angle - 90}deg)`;\n this.handOfAClock.style.width = size + \"px\";\n }\n\n toggleToHours() {\n this.minutesFace.onLeave();\n this.toggleTime(this.hoursFace);\n }\n\n toggleToMinutes() {\n this.hoursFace.onLeave();\n this.toggleTime(this.minutesFace);\n }\n\n toggleTime(face) {\n if (this.currentFace !== face) {\n this.onEachClockElement(c => c.classList.add(css.fadeOut));\n this.handOfAClock.classList.add(css.fadeOut);\n Promise.delay(() => {\n this.onEachClockElement(c => c.classList.remove(css.fadeOut));\n this.handOfAClock.classList.remove(css.fadeOut);\n this.changeDisplayed(face.displayed);\n this.currentFace = face;\n this.onEachClockElement(c => this.removeSelected(c));\n face.onEnter();\n }, 300);\n }\n }\n\n removeSelected(c) {\n c.classList.remove(css.selected);\n c.style.background = \"transparent\";\n c.style.color = this.options.clockItemColor;\n }\n}","import ClockHeader from \"./clockHeader\";\nimport ClockFace from \"./face/clockFace\";\nimport Config, {DOM} from \"./meta/config\";\nimport formatTime from \"./timeFormatter\";\n\nexport default class Clock {\n\n constructor(options, time) {\n this.options = options;\n\n this.initView();\n this.time = time;\n this.initElements();\n }\n\n initView() {\n this.submitButton = document.getElementById(DOM.submitId);\n this.submitButton.onclick = () => {\n const time = this.time;\n time.formatted = () => formatTime(time, this.options.meridiem);\n this.options.onSubmit(time);\n Clock.dispose();\n };\n\n this.cancelButton = document.getElementById(DOM.cancelId);\n this.cancelButton.onclick = () => {\n this.options.onCancel();\n Clock.dispose();\n };\n }\n\n initElements() {\n this.header = new ClockHeader({\n options: this.options,\n time: this.time,\n onHourClicked: () => this.toggleToHours(),\n onMinutesClicked: () => this.toggleToMinutes()\n });\n this.clockFace = new ClockFace(this.options, this.time, (time, type) => this.onTimeUpdate(time, type));\n }\n\n onStart() {\n this.clockFace.onStart();\n }\n\n toggleToHours() {\n this.clockFace.toggleToHours();\n }\n\n toggleToMinutes() {\n this.clockFace.toggleToMinutes();\n }\n\n onTimeUpdate(time, type) {\n this.time = time;\n this.header.time = time;\n this.header.updateDisplayedTime();\n if (type === Config.FaceType.MINUTES)\n this.header.toggleActiveToMinutes();\n\n }\n\n static dispose() {\n document.body.removeChild(document.getElementById(Config.clockId));\n }\n}","import {css, DOM} from \"./meta/config\";\n\nexport default function styleColors(options) {\n document.getElementById(DOM.headerId).style.background = options.headerBackground;\n document.getElementById(DOM.headerId).style.color = options.headerColor;\n document.getElementById(DOM.wrapperId).style.background = options.wrapperBackground;\n document.getElementById(DOM.clockId).style.background = options.clockBackground;\n document.getElementById(DOM.handId).style.background = options.handColor;\n document.getElementById(DOM.dotId).style.background = options.handColor;\n document.getElementById(DOM.buttonsId).style.background = options.footerBackground;\n document.getElementById(DOM.submitId).style.color = options.submitColor;\n document.getElementById(DOM.cancelId).style.color = options.cancelColor;\n\n changeColor(css.clockItem, options.clockItemColor);\n changeColor(css.inner, options.clockItemInnerColor);\n changeColor(css.outer, options.handColor, \"borderColor\");\n}\n\nfunction changeColor(className, color, property = \"color\") {\n const items = Array.from(document.getElementsByClassName(className));\n for (const item of items)\n item.style[property] = color;\n}\n","import clockHtml from \"./meta/clockHtml\";\nimport Config from \"./meta/config\";\nimport Clock from \"./clock\";\nimport styleColors from \"./colorStylists\";\nimport getTime from \"./timeExtractor\";\n\n\nexport default function showPicker(config = {}) {\n \n const options = Object.assign({}, Config.clockConfig, config);\n createDom(options);\n const time = getTime(options.time, options.meridiem);\n\n const clock = new Clock(options, time);\n styleColors(options);\n clock.onStart();\n}\n\n\nfunction createDom(options) {\n if (document.getElementById(Config.clockId))\n throw Error(\"There is already one running grudus-timepicker instance!\");\n\n const clockDiv = document.createElement(\"div\");\n clockDiv.id = Config.clockId;\n clockDiv.innerHTML = clockHtml(options);\n document.body.appendChild(clockDiv);\n}\n","import formatTime from \"./timeFormatter\";\nimport showPicker from \"./timepickerCreator\";\n\nexport default {\n showPicker: (config) => showPicker(config),\n format: (time) => formatTime(time)\n};\n\n"],"names":["hoursRegex","minutesRegex","regex","extractTime","date","hasMeridiem","fromDate","Date","test","hours","minutes","meridiem","undefined","length","parseInt","fromRegex","TypeError","JSON","stringify","parsed","exec","getHours","getMinutes","getTimeWithMeridiem","time","extractedTime","options","arrayTemplate","push","join","nextTemplate","labels","cancel","ok","concat","clockId","defaultConfig","FaceType","HOURS","MINUTES","css","DOM","clockConfig","ClockHeader","config","onHourClicked","onMinutesClicked","initView","headerHours","document","getElementById","hoursId","onclick","toggleActiveToHours","headerMinutes","minutesId","toggleActiveToMinutes","headerAm","gTimeAmId","headerPm","gTimePmId","toogleActiveMeridiemAm","toogleActiveMeridiemPm","defaultToggleActiveMeridiem","updateDisplayedTime","toggleActive","objectToRemoveClass","objectToAddClass","style","color","headerColor","headerSelected","doUpdateDisplayedTime","node","value","innerText","MinutesFace","items","initialMinutes","updateMinutes","displayed","type","Config","selected","findSelected","colorSelected","removeSelected","angle","minute","Math","round","clockItems","outerClockItems","isOuter","classList","add","background","handColor","remove","clockItemColor","indexOf","HoursFace","initialHours","updateHours","displayedInner","innerClockElem","display","isInnerClock","hoursIndex","radius","innerClockItems","elem","index","selectedAngle","isInner","clockItemInnerColor","Array","from","toRadians","PI","toDegrees","findMousePosition","event","object","rect","getBoundingClientRect","clientX","left","clientY","top","delay","t","Promise","resolve","fn","then","prototype","ClockFaceCreator","clockElem","size","middle","face","doCreate","span","item","i","inner","createElement","outer","appendChild","width","offsetWidth","height","offsetHeight","x","y","itemsRadius","doCalculateSize","innerWidth","innerHeight","middleX","middleY","fun","angleQuantum","Utils","itemWidth","itemHeight","sin","bottom","cos","ClockFace","initialTime","onTimeUpdate","isMouseDown","initViews","initTimeFaces","createFace","hoursFace","currentFace","changeDisplayed","innerId","handOfAClock","handId","onmousedown","onmouseup","toggleToMinutes","e","stopPropagation","onmousemove","selectTime","minutesFace","onEnter","clockFaceCreator","create","calculateSize","mouse","atan","array","forEach","call","c","calculateHandOfTheClock","transform","onLeave","toggleTime","onEachClockElement","fadeOut","Clock","initElements","submitButton","submitId","formatted","formatTime","onSubmit","dispose","cancelButton","cancelId","onCancel","header","toggleToHours","clockFace","onStart","body","removeChild","styleColors","headerId","headerBackground","wrapperId","wrapperBackground","clockBackground","dotId","buttonsId","footerBackground","submitColor","cancelColor","clockItem","changeColor","className","property","getElementsByClassName","showPicker","Object","assign","getTime","clock","createDom","Error","clockDiv","id","innerHTML","clockHtml"],"mappings":"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"} \ No newline at end of file diff --git a/dist/grudus-timepicker.umd.js b/dist/grudus-timepicker.umd.js index 006f807..b470852 100644 --- a/dist/grudus-timepicker.umd.js +++ b/dist/grudus-timepicker.umd.js @@ -1,4 +1,4 @@ -/*! grudus-timepicker | (c) 2017-2017 +/*! grudus-timepicker | (c) 2017-2019 grudus | Apache-2.0 license (see LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : @@ -10,8 +10,8 @@ var hoursRegex = /^([0-1]?[0-9]|2[0-3])$/; var minutesRegex = /^([0-5]?[0-9])$/; var regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/; -function extractTime(date) { - if (!date) return fromDate(new Date());else if (date instanceof Date) return fromDate(date);else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes)) return { hours: parseInt(date.hours), minutes: parseInt(date.minutes) };else if (regex.test(date)) return fromRegex(date);else throw new TypeError("INVALID FORMAT: {" + JSON.stringify(date) + "}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields"); +function extractTime(date, hasMeridiem) { + if (!date) return fromDate(new Date(), hasMeridiem);else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes) && date.meridiem !== undefined && date.meridiem.length > 0) return { hours: parseInt(date.hours), minutes: parseInt(date.minutes), meridiem: date.meridiem };else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes)) return { hours: parseInt(date.hours), minutes: parseInt(date.minutes) };else if (regex.test(date)) return fromRegex(date);else if (date instanceof Date) return fromDate(date, hasMeridiem);else throw new TypeError("INVALID FORMAT: {" + JSON.stringify(date) + "}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields"); } function fromRegex(date) { @@ -19,16 +19,38 @@ function fromRegex(date) { return { hours: parseInt(parsed[1]), minutes: parseInt(parsed[2]) }; } -function fromDate(date) { - return { hours: date.getHours(), minutes: date.getMinutes() }; +function fromDate(date, hasMeridiem) { + if (hasMeridiem !== undefined && !hasMeridiem) return { hours: date.getHours(), minutes: date.getMinutes() }; + return getTimeWithMeridiem(date); } -var formatTime = function (time) { - var extractedTime = extractTime(time); - return (extractedTime.hours < 10 ? "0" + extractedTime.hours : extractedTime.hours) + ":" + (extractedTime.minutes < 10 ? "0" + extractedTime.minutes : extractedTime.minutes); +function getTimeWithMeridiem(date) { + var meridiem = ""; + var hours = date.getHours(); + + if (hours < 13) meridiem = "am";else meridiem = "pm"; + + if (hours !== 12) hours = hours % 12; + + return { hours: hours, minutes: date.getMinutes(), meridiem: meridiem }; +} + +var formatTime = function (time, hasMeridiem) { + var extractedTime = extractTime(time, hasMeridiem); + return (extractedTime.hours < 10 ? "0" + extractedTime.hours : extractedTime.hours) + ":" + (extractedTime.minutes < 10 ? "0" + extractedTime.minutes : extractedTime.minutes) + " " + (extractedTime.meridiem !== undefined ? extractedTime.meridiem : ""); }; -var clockHtml = "
\n" + "
\n" + "
\n" + " 21\n" + " :\n" + " 37\n" + "
\n" + "
\n" + "\n" + "\n" + "
\n" + "
" + " \n" + "
\n" + "
\n" + "
\n" + "
\n" + "\n" + "\n" + "
\n" + " \n" + " \n" + "
\n" + "\n" + "
"; +var clockHtml = (function (options) { + var arrayTemplate = ["
", "
", "
", " 21", " :", " 37"]; + if (options.meridiem) { + arrayTemplate.push(["
", "AM", "PM", "
"].join("\n")); + } + var nextTemplate = ["
", "
", "", "", "
", "
", " ", "
", "
", "
", "
", "", "", "
"]; + + nextTemplate.push("\n \n \n "); + nextTemplate.push("
"); + return arrayTemplate.concat(nextTemplate).join("\n"); +}); var clockId = "grudus-clock"; @@ -45,7 +67,12 @@ var defaultConfig = { clockBackground: "#CFD8DC", clockItemColor: "#212121", clockItemInnerColor: "#212121", - handColor: "#1976D2" + handColor: "#1976D2", + meridiem: false, + labels: { + cancel: "Cancel", + ok: "Ok" + } }; var FaceType = { HOURS: "hours", MINUTES: "minutes" }; @@ -77,7 +104,9 @@ var DOM = { handId: "g-hand-of-a-clock", buttonsId: "g-buttons", submitId: "g-time-submit", - cancelId: "g-time-cancel" + cancelId: "g-time-cancel", + gTimeAmId: "g-time-am", + gTimePmId: "g-time-pm" }; var Config = { clockId: clockId, clockConfig: defaultConfig, FaceType: FaceType }; @@ -134,6 +163,19 @@ var ClockHeader = function () { _this.toggleActiveToMinutes(); _this.onMinutesClicked(); }; + if (this.options.meridiem) { + this.headerAm = document.getElementById(DOM.gTimeAmId); + this.headerPm = document.getElementById(DOM.gTimePmId); + this.headerAm.onclick = function () { + _this.toogleActiveMeridiemAm(); + _this.time.meridiem = "am"; + }; + this.headerPm.onclick = function () { + _this.toogleActiveMeridiemPm(); + _this.time.meridiem = "pm"; + }; + if (this.time.meridiem === "am") this.toogleActiveMeridiemAm();else if (this.time.meridiem === "pm") this.toogleActiveMeridiemPm();else this.defaultToggleActiveMeridiem(); + } this.updateDisplayedTime(); this.toggleActiveToHours(); @@ -148,6 +190,23 @@ var ClockHeader = function () { value: function toggleActiveToHours() { this.toggleActive(this.headerMinutes, this.headerHours); } + }, { + key: "toogleActiveMeridiemAm", + value: function toogleActiveMeridiemAm() { + this.toggleActive(this.headerPm, this.headerAm); + } + }, { + key: "toogleActiveMeridiemPm", + value: function toogleActiveMeridiemPm() { + this.toggleActive(this.headerAm, this.headerPm); + } + }, { + key: "defaultToggleActiveMeridiem", + value: function defaultToggleActiveMeridiem() { + var hours = this.time.hours; + + if (hours < 13) this.toogleActiveMeridiemAm();else this.toogleActiveMeridiemPm(); + } }, { key: "toggleActive", value: function toggleActive(objectToRemoveClass, objectToAddClass) { @@ -157,12 +216,13 @@ var ClockHeader = function () { }, { key: "updateDisplayedTime", value: function updateDisplayedTime() { - ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours); + ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours, this.options.meridiem); ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes); } }], [{ key: "doUpdateDisplayedTime", - value: function doUpdateDisplayedTime(node, value) { + value: function doUpdateDisplayedTime(node, value, meridiem) { + if (meridiem && value !== 12) value = value % 12; if (value < 10) node.innerText = "0" + value;else node.innerText = value; } }]); @@ -260,18 +320,23 @@ var HoursFace = function () { createClass(HoursFace, [{ key: "onEnter", value: function onEnter() { - this.items.innerClockElem.style.display = "block"; + + if (this.items.innerClockElem !== null) this.items.innerClockElem.style.display = "block"; var isInnerClock = this.hours < 13 && this.hours !== 0; var hoursIndex = this.hours % 12; - this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex]; + var radius = this.items.radius; + if (this.options.meridiem && !isInnerClock) this.selected = this.items.clockItems[hoursIndex];else { + this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex]; + radius = isInnerClock ? radius : radius - 50; + } this.colorSelected(); - this.updateHours(this.hours, hoursIndex * 30, isInnerClock ? this.items.radius : this.items.radius - 50); + this.updateHours(this.hours, hoursIndex * 30, radius); } }, { key: "onLeave", value: function onLeave() { - this.items.innerClockElem.style.display = "none"; + if (this.items.innerClockElem !== null) this.items.innerClockElem.style.display = "none"; if (this.selected) { this.removeSelected(); this.selected = undefined; @@ -283,13 +348,13 @@ var HoursFace = function () { if (this.selected) this.removeSelected(); var index = Math.round(angle / 30) % 12; - this.selected = (elem === this.items.innerClockElem ? this.items.innerClockItems : this.items.clockItems)[index]; + this.selected = (elem === this.items.innerClockElem && this.items.innerClockElem !== undefined ? this.items.innerClockItems : this.items.clockItems)[index]; this.colorSelected(); this.hours = parseInt(this.selected.innerText); var selectedAngle = Math.round(angle / 30) * 30; - this.updateHours(this.hours, selectedAngle, elem === this.items.innerClockElem ? this.items.radius - 50 : this.items.radius); + this.updateHours(this.hours, selectedAngle, elem === this.items.innerClockElem && this.items.innerClockElem !== undefined ? this.items.radius - 50 : this.items.radius); } }, { key: "colorSelected", @@ -351,13 +416,14 @@ Promise.prototype.delay = function (fn, t) { var Utils = { toRadians: toRadians, toDegrees: toDegrees, findMousePosition: findMousePosition }; var ClockFaceCreator = function () { - function ClockFaceCreator(clockElem, innerClockElem) { + function ClockFaceCreator(clockElem, innerClockElem, options) { classCallCheck(this, ClockFaceCreator); this.clockElem = clockElem; this.innerClockElem = innerClockElem; this.size = {}; this.middle = {}; + this.options = options; } createClass(ClockFaceCreator, [{ @@ -366,10 +432,12 @@ var ClockFaceCreator = function () { ClockFaceCreator.doCreate(clockItems, this.clockElem, function (span) { return span.classList.add(css.item); }); - ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, function (span, i) { - span.classList.add(css.item, css.inner); - span.innerText = face.displayedInner[i]; - }); + if (!this.options.meridiem) { + ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, function (span, i) { + span.classList.add(css.item, css.inner); + span.innerText = face.displayedInner[i]; + }); + } for (var i = 0; i < 60; i++) { var span = document.createElement("span"); @@ -387,13 +455,14 @@ var ClockFaceCreator = function () { this.middle.y = this.size.height / 2; this.itemsRadius = this.size.width / 2 - 20; - var innerWidth = this.innerClockElem.offsetWidth; - var innerHeight = this.innerClockElem.offsetHeight; - var middleX = innerWidth / 2; - var middleY = innerHeight / 2; - ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems); - ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems); + if (!this.options.meridiem) { + var innerWidth = this.innerClockElem.offsetWidth; + var innerHeight = this.innerClockElem.offsetHeight; + var middleX = innerWidth / 2; + var middleY = innerHeight / 2; + ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems); + } ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems); } }], [{ @@ -441,7 +510,7 @@ var ClockFace = function () { this.initViews(); this.initTimeFaces(initialTime); - this.createFace(); + this.createFace(options); this.hoursFace.items.radius = this.itemsRadius; @@ -455,7 +524,7 @@ var ClockFace = function () { var _this = this; this.clockElem = document.getElementById(DOM.clockId); - this.innerClockElem = document.getElementById(DOM.innerId); + this.innerClockElem = this.options.meridiem ? null : document.getElementById(DOM.innerId); this.handOfAClock = document.getElementById(DOM.handId); this.clockElem.onmousedown = function () { @@ -483,12 +552,14 @@ var ClockFace = function () { return _this.selectTime(e, true, _this.clockElem); }; - this.innerClockElem.onmousemove = function (e) { - return _this.selectTime(e, false, _this.innerClockElem); - }; - this.innerClockElem.onclick = function (e) { - return _this.selectTime(e, true, _this.innerClockElem); - }; + if (!this.options.meridiem) { + this.innerClockElem.onmousemove = function (e) { + return _this.selectTime(e, false, _this.innerClockElem); + }; + this.innerClockElem.onclick = function (e) { + return _this.selectTime(e, true, _this.innerClockElem); + }; + } } }, { key: "initTimeFaces", @@ -520,7 +591,7 @@ var ClockFace = function () { }, { key: "createFace", value: function createFace() { - var clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem); + var clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem, this.options); clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace); clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems); @@ -644,7 +715,7 @@ var Clock = function () { this.submitButton.onclick = function () { var time = _this.time; time.formatted = function () { - return formatTime(time); + return formatTime(time, _this.options.meridiem); }; _this.options.onSubmit(time); Clock.dispose(); @@ -756,22 +827,22 @@ function changeColor(className, color) { function showPicker() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - createDom(); var options = Object.assign({}, Config.clockConfig, config); - var time = extractTime(options.time); + createDom(options); + var time = extractTime(options.time, options.meridiem); var clock = new Clock(options, time); styleColors(options); clock.onStart(); } -function createDom() { +function createDom(options) { if (document.getElementById(Config.clockId)) throw Error("There is already one running grudus-timepicker instance!"); var clockDiv = document.createElement("div"); clockDiv.id = Config.clockId; - clockDiv.innerHTML = clockHtml; + clockDiv.innerHTML = clockHtml(options); document.body.appendChild(clockDiv); } diff --git a/dist/grudus-timepicker.umd.js.map b/dist/grudus-timepicker.umd.js.map index d59227f..7f57925 100644 --- a/dist/grudus-timepicker.umd.js.map +++ b/dist/grudus-timepicker.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"grudus-timepicker.umd.js","sources":["../src/js/timeExtractor.js","../src/js/timeFormatter.js","../src/js/meta/clockHtml.js","../src/js/meta/config.js","../src/js/clockHeader.js","../src/js/face/minutesFace.js","../src/js/face/hoursFace.js","../src/js/meta/utils.js","../src/js/face/clockFaceCreator.js","../src/js/face/clockFace.js","../src/js/clock.js","../src/js/colorStylists.js","../src/js/timepickerCreator.js","../src/js/index.js"],"sourcesContent":["const hoursRegex = /^([0-1]?[0-9]|2[0-3])$/;\r\nconst minutesRegex = /^([0-5]?[0-9])$/;\r\nconst regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;\r\n\r\nexport default function extractTime(date) {\r\n if (!date)\r\n return fromDate(new Date());\r\n else if (date instanceof Date)\r\n return fromDate(date);\r\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes))\r\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes)};\r\n else if (regex.test(date))\r\n return fromRegex(date);\r\n else\r\n throw new TypeError(`INVALID FORMAT: {${JSON.stringify(date)}}.\r\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields`);\r\n}\r\n\r\nfunction fromRegex(date) {\r\n const parsed = regex.exec(date);\r\n return {hours: parseInt(parsed[1]), minutes: parseInt(parsed[2])};\r\n}\r\n\r\nfunction fromDate(date) {\r\n return {hours: date.getHours(), minutes: date.getMinutes()};\r\n}","import extractTime from \"./timeExtractor\";\r\n\r\nexport default function (time) {\r\n const extractedTime = extractTime(time);\r\n return (extractedTime.hours < 10 ? \"0\" + extractedTime.hours : extractedTime.hours)\r\n + \":\" + (extractedTime.minutes < 10 ? \"0\" + extractedTime.minutes : extractedTime.minutes);\r\n}","export default \"
\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\" 21\\n\" +\r\n\" :\\n\" +\r\n\" 37\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"\\n\" +\r\n\"
\\n\" +\r\n\"
\" +\r\n\" \\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"\\n\" +\r\n\"
\\n\" +\r\n\" \\n\" +\r\n\" \\n\" +\r\n\"
\\n\" +\r\n\"\\n\" +\r\n\"
\";","const clockId = \"grudus-clock\";\r\n\r\nconst defaultConfig = {\r\n onSubmit: () => {\r\n },\r\n onCancel: () => {\r\n },\r\n headerBackground: \"#1976D2\",\r\n headerColor: \"#c7d6e1\",\r\n headerSelected: \"#ffffff\",\r\n wrapperBackground: \"#f0fff0\",\r\n footerBackground: \"#f0fff0\",\r\n submitColor: \"#1976D2\",\r\n cancelColor: \"#1976D2\",\r\n clockBackground: \"#CFD8DC\",\r\n clockItemColor: \"#212121\",\r\n clockItemInnerColor: \"#212121\",\r\n handColor: \"#1976D2\"\r\n};\r\n\r\nconst FaceType = {HOURS: \"hours\", MINUTES: \"minutes\"};\r\n\r\nconst css = {\r\n clock: \"g-clock\",\r\n clockItem: \"g-clock-item\",\r\n inner: \"g-clock-inner\",\r\n outer: \"g-clock-outer\",\r\n item: \"g-clock-item\",\r\n hand: \"g-hand-of-a-clock\",\r\n fadeOut: \"g-fade-out\",\r\n selected: \"g-selected\",\r\n active: \"g-active\",\r\n submit: \"g-submit\",\r\n cancel: \"g-cancel\",\r\n hour: \"g-hour\",\r\n minute: \"g-minute\"\r\n};\r\n\r\nconst DOM = {\r\n headerId: \"g-head\",\r\n hoursId: \"g-hours\",\r\n minutesId: \"g-minutes\",\r\n clockId: \"g-clock\",\r\n innerId: \"g-clock-inner\",\r\n wrapperId: \"g-clock-wrapper\",\r\n dotId: \"g-middle-dot\",\r\n handId: \"g-hand-of-a-clock\",\r\n buttonsId: \"g-buttons\",\r\n submitId: \"g-time-submit\",\r\n cancelId: \"g-time-cancel\"\r\n};\r\n\r\nexport default {clockId, clockConfig: defaultConfig, FaceType};\r\nexport {css, DOM};","import {DOM} from \"./meta/config\";\r\n\r\nexport default class ClockHeader {\r\n\r\n constructor(config) {\r\n this.options = config.options;\r\n this.time = config.time;\r\n this.onHourClicked = config.onHourClicked;\r\n this.onMinutesClicked = config.onMinutesClicked;\r\n\r\n this.initView();\r\n }\r\n\r\n initView() {\r\n this.headerHours = document.getElementById(DOM.hoursId);\r\n this.headerHours.onclick = () => {\r\n this.toggleActiveToHours();\r\n this.onHourClicked();\r\n };\r\n\r\n this.headerMinutes = document.getElementById(DOM.minutesId);\r\n this.headerMinutes.onclick = () => {\r\n this.toggleActiveToMinutes();\r\n this.onMinutesClicked();\r\n };\r\n\r\n this.updateDisplayedTime();\r\n this.toggleActiveToHours();\r\n }\r\n\r\n toggleActiveToMinutes() {\r\n this.toggleActive(this.headerHours, this.headerMinutes);\r\n }\r\n\r\n toggleActiveToHours() {\r\n this.toggleActive(this.headerMinutes, this.headerHours);\r\n }\r\n\r\n toggleActive(objectToRemoveClass, objectToAddClass) {\r\n objectToRemoveClass.style.color = this.options.headerColor;\r\n objectToAddClass.style.color = this.options.headerSelected;\r\n }\r\n\r\n updateDisplayedTime() {\r\n ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours);\r\n ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes);\r\n }\r\n\r\n static doUpdateDisplayedTime(node, value) {\r\n if (value < 10)\r\n node.innerText = \"0\" + value;\r\n else node.innerText = value;\r\n }\r\n}","import Config, {css} from \"../meta/config\";\r\n\r\nexport default class MinutesFace {\r\n\r\n constructor(items, initialMinutes, updateMinutes) {\r\n this.displayed = [\"00\", \"05\", \"10\", \"15\", \"20\", \"25\", \"30\", \"35\", \"40\", \"45\", \"50\", \"55\"];\r\n this.options = items.options;\r\n this.type = Config.FaceType.MINUTES;\r\n this.selected = undefined;\r\n this.items = items;\r\n this.minutes = initialMinutes;\r\n this.updateMinutes = updateMinutes;\r\n }\r\n\r\n onEnter() {\r\n this.selected = this.findSelected(this.minutes);\r\n this.colorSelected();\r\n this.updateMinutes(this.minutes, this.minutes * 6);\r\n }\r\n\r\n onLeave() {\r\n if (this.selected) {\r\n this.removeSelected();\r\n this.selected = undefined;\r\n }\r\n }\r\n\r\n selectTime(angle) {\r\n if (this.selected)\r\n this.removeSelected();\r\n\r\n const minute = Math.round(angle / 6) % 60;\r\n this.selected = this.findSelected(minute);\r\n this.colorSelected();\r\n this.minutes = minute;\r\n this.updateMinutes(this.minutes, angle);\r\n }\r\n\r\n findSelected(minute) {\r\n return (minute % 5 === 0) ? this.items.clockItems[minute / 5] : this.items.outerClockItems[minute];\r\n }\r\n\r\n colorSelected() {\r\n if (this.isOuter()) {\r\n this.selected.classList.add(css.selected);\r\n return;\r\n }\r\n this.selected.style.background = this.options.handColor;\r\n this.selected.style.color = \"whitesmoke\";\r\n }\r\n\r\n removeSelected() {\r\n if (this.isOuter()) {\r\n this.selected.classList.remove(css.selected);\r\n return;\r\n }\r\n this.selected.style.background = \"transparent\";\r\n this.selected.style.color = this.options.clockItemColor;\r\n }\r\n\r\n isOuter() {\r\n return this.items.outerClockItems.indexOf(this.selected) > -1;\r\n }\r\n}","import Config from \"../meta/config\";\r\n\r\nexport default class HoursFace {\r\n\r\n constructor(items, initialHours, updateHours) {\r\n this.displayed = [\"12\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\r\n this.displayedInner = [\"00\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\", \"23\"];\r\n this.type = Config.FaceType.MINUTES;\r\n this.selected = undefined;\r\n this.options = items.options;\r\n\r\n this.items = items;\r\n this.hours = initialHours;\r\n this.updateHours = updateHours;\r\n }\r\n\r\n onEnter() {\r\n this.items.innerClockElem.style.display = \"block\";\r\n const isInnerClock = this.hours < 13 && this.hours !== 0;\r\n const hoursIndex = this.hours % 12;\r\n this.selected = isInnerClock ? this.items.clockItems[hoursIndex] : this.items.innerClockItems[hoursIndex];\r\n this.colorSelected();\r\n\r\n this.updateHours(this.hours, hoursIndex * 30, isInnerClock ? this.items.radius : this.items.radius - 50);\r\n }\r\n\r\n onLeave() {\r\n this.items.innerClockElem.style.display = \"none\";\r\n if (this.selected) {\r\n this.removeSelected();\r\n this.selected = undefined;\r\n }\r\n }\r\n\r\n selectTime(angle, elem) {\r\n if (this.selected)\r\n this.removeSelected();\r\n\r\n const index = Math.round(angle / 30) % 12;\r\n this.selected = (elem === this.items.innerClockElem\r\n ? this.items.innerClockItems\r\n : this.items.clockItems)[index];\r\n\r\n this.colorSelected();\r\n this.hours = parseInt(this.selected.innerText);\r\n const selectedAngle = Math.round(angle / 30) * 30;\r\n\r\n this.updateHours(this.hours, selectedAngle,\r\n elem === this.items.innerClockElem ? this.items.radius - 50 : this.items.radius);\r\n }\r\n\r\n colorSelected() {\r\n this.selected.style.background = this.options.handColor;\r\n this.selected.style.color = \"#ffffff\";\r\n }\r\n\r\n removeSelected() {\r\n this.selected.style.background = \"transparent\";\r\n this.selected.style.color = this.isInner()\r\n ? this.options.clockItemInnerColor\r\n : this.options.clockItemColor;\r\n }\r\n\r\n isInner() {\r\n return Array.from(this.items.innerClockItems).indexOf(this.selected) > -1;\r\n }\r\n}","function toRadians(angle) {\r\n return angle * (Math.PI / 180);\r\n}\r\n\r\nfunction toDegrees(angle) {\r\n return angle * (180 / Math.PI);\r\n}\r\n\r\nfunction findMousePosition(event, object) {\r\n const rect = object.getBoundingClientRect();\r\n return {\r\n x: event.clientX - rect.left,\r\n y: event.clientY - rect.top\r\n };\r\n}\r\n\r\nfunction delay(t) {\r\n return new Promise(function (resolve) {\r\n setTimeout(resolve, t);\r\n });\r\n}\r\n\r\nPromise.delay = function (fn, t) {\r\n if (!t) {\r\n t = fn;\r\n fn = function () {\r\n };\r\n }\r\n return delay(t).then(fn);\r\n};\r\n\r\nPromise.prototype.delay = function (fn, t) {\r\n return this.then(function () {\r\n return Promise.delay(fn, t);\r\n });\r\n};\r\n\r\nexport default {toRadians, toDegrees, findMousePosition};","import Utils from \"../meta/utils\";\r\nimport {css} from \"../meta/config\";\r\n\r\nexport default class ClockFaceCreator {\r\n\r\n constructor(clockElem, innerClockElem) {\r\n this.clockElem = clockElem;\r\n this.innerClockElem = innerClockElem;\r\n this.size = {};\r\n this.middle = {};\r\n }\r\n\r\n create(clockItems, innerClockItems, outerClockItems, face) {\r\n ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item));\r\n ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => {\r\n span.classList.add(css.item, css.inner);\r\n span.innerText = face.displayedInner[i];\r\n });\r\n\r\n for (let i = 0; i < 60; i++) {\r\n const span = document.createElement(\"span\");\r\n span.classList.add(css.outer);\r\n outerClockItems.push(span);\r\n this.clockElem.appendChild(span);\r\n }\r\n }\r\n\r\n static doCreate(clockItems, clockElem, fun) {\r\n for (let i = 0; i < 12; i++) {\r\n const span = document.createElement(\"span\");\r\n fun(span, i);\r\n clockItems.push(span);\r\n clockElem.appendChild(span);\r\n }\r\n }\r\n\r\n calculateSize(clockItems, innerClockItems, outerClockItems) {\r\n this.size.width = this.clockElem.offsetWidth;\r\n this.size.height = this.clockElem.offsetHeight;\r\n this.middle.x = this.size.width / 2;\r\n this.middle.y = this.size.height / 2;\r\n this.itemsRadius = this.size.width / 2 - 20;\r\n\r\n const innerWidth = this.innerClockElem.offsetWidth;\r\n const innerHeight = this.innerClockElem.offsetHeight;\r\n const middleX = innerWidth / 2;\r\n const middleY = innerHeight / 2;\r\n\r\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems);\r\n ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems);\r\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems);\r\n }\r\n\r\n static doCalculateSize(middleX, middleY, radius, items) {\r\n const angleQuantum = 360 / items.length;\r\n for (let i = 0; i < items.length; i++) {\r\n\r\n const angle = Utils.toRadians(i * angleQuantum);\r\n const item = items[i];\r\n const itemWidth = item.offsetWidth;\r\n const itemHeight = item.offsetHeight;\r\n\r\n item.style.left = ((middleX + Math.sin(angle) * radius) - itemWidth / 2) + \"px\";\r\n item.style.bottom = ((middleY + Math.cos(angle) * radius) - itemHeight / 2) + \"px\";\r\n }\r\n }\r\n}","import MinutesFace from \"./minutesFace\";\r\nimport HoursFace from \"./hoursFace\";\r\nimport Utils from \"../meta/utils\";\r\nimport Config, {css, DOM} from \"../meta/config\";\r\nimport ClockFaceCreator from \"./clockFaceCreator\";\r\n\r\nexport default class ClockFace {\r\n\r\n constructor(options, initialTime, onTimeUpdate) {\r\n this.options = options;\r\n this.time = initialTime;\r\n this.onTimeUpdate = onTimeUpdate;\r\n this.isMouseDown = false;\r\n this.clockItems = [];\r\n this.innerClockItems = [];\r\n this.outerClockItems = [];\r\n this.size = {};\r\n this.middle = {};\r\n\r\n this.initViews();\r\n this.initTimeFaces(initialTime);\r\n this.createFace();\r\n\r\n this.hoursFace.items.radius = this.itemsRadius;\r\n\r\n this.currentFace = this.hoursFace;\r\n this.changeDisplayed(this.currentFace.displayed);\r\n }\r\n\r\n initViews() {\r\n this.clockElem = document.getElementById(DOM.clockId);\r\n this.innerClockElem = document.getElementById(DOM.innerId);\r\n this.handOfAClock = document.getElementById(DOM.handId);\r\n\r\n this.clockElem.onmousedown = () => this.isMouseDown = true;\r\n this.clockElem.onmouseup = () => {this.isMouseDown = false;\r\n this.toggleToMinutes();\r\n };\r\n\r\n this.handOfAClock.onmouseup = (e) => e.stopPropagation();\r\n this.handOfAClock.onmousemove = (e) => e.stopPropagation();\r\n this.handOfAClock.onclick = (e) => e.stopPropagation();\r\n\r\n this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem);\r\n this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem);\r\n\r\n this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem);\r\n this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem);\r\n }\r\n\r\n initTimeFaces(initialTime) {\r\n this.minutesFace = new MinutesFace({\r\n options: this.options,\r\n clockItems: this.clockItems,\r\n outerClockItems: this.outerClockItems\r\n }, initialTime.minutes, (minutes, angle) => this.updateMinutes(minutes, angle));\r\n\r\n this.hoursFace = new HoursFace({\r\n options: this.options,\r\n innerClockItems: this.innerClockItems,\r\n clockItems: this.clockItems,\r\n innerClockElem: this.innerClockElem\r\n }, initialTime.hours, (hours, angle, radius) => this.updateHours(hours, angle, radius));\r\n }\r\n\r\n onStart() {\r\n this.currentFace.onEnter();\r\n }\r\n\r\n createFace() {\r\n const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem);\r\n clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace);\r\n clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems);\r\n\r\n this.size = clockFaceCreator.size;\r\n this.middle = clockFaceCreator.middle;\r\n this.itemsRadius = clockFaceCreator.itemsRadius;\r\n }\r\n\r\n selectTime(event, isMouseDown, elem) {\r\n if (!(isMouseDown || this.isMouseDown))\r\n return;\r\n const mouse = Utils.findMousePosition(event, this.clockElem);\r\n const x = mouse.x - this.middle.x;\r\n const y = this.middle.y - mouse.y;\r\n let angle = 90 - Utils.toDegrees(Math.atan(y / x));\r\n if (x < 0) angle += 180;\r\n\r\n this.currentFace.selectTime(angle, elem);\r\n event.stopPropagation();\r\n }\r\n\r\n changeDisplayed(array) {\r\n for (let i = 0; i < this.clockItems.length; i++)\r\n this.clockItems[i].innerText = array[i];\r\n }\r\n\r\n onEachClockElement(fun) {\r\n [].forEach.call(this.clockItems, c => fun(c));\r\n }\r\n\r\n updateMinutes(minutes, angle) {\r\n this.time.minutes = minutes;\r\n this.calculateHandOfTheClock(angle, this.itemsRadius);\r\n this.onTimeUpdate(this.time, Config.FaceType.MINUTES);\r\n }\r\n\r\n updateHours(hours, angle, radius) {\r\n this.time.hours = hours;\r\n this.calculateHandOfTheClock(angle, radius);\r\n this.onTimeUpdate(this.time, Config.FaceType.HOURS);\r\n }\r\n\r\n calculateHandOfTheClock(angle, size = this.itemsRadius) {\r\n this.handOfAClock.style.transform = `rotate(${angle - 90}deg)`;\r\n this.handOfAClock.style.width = size + \"px\";\r\n }\r\n\r\n toggleToHours() {\r\n this.minutesFace.onLeave();\r\n this.toggleTime(this.hoursFace);\r\n }\r\n\r\n toggleToMinutes() {\r\n this.hoursFace.onLeave();\r\n this.toggleTime(this.minutesFace);\r\n }\r\n\r\n toggleTime(face) {\r\n if (this.currentFace !== face) {\r\n this.onEachClockElement(c => c.classList.add(css.fadeOut));\r\n this.handOfAClock.classList.add(css.fadeOut);\r\n Promise.delay(() => {\r\n this.onEachClockElement(c => c.classList.remove(css.fadeOut));\r\n this.handOfAClock.classList.remove(css.fadeOut);\r\n this.changeDisplayed(face.displayed);\r\n this.currentFace = face;\r\n this.onEachClockElement(c => this.removeSelected(c));\r\n face.onEnter();\r\n }, 300);\r\n }\r\n }\r\n\r\n removeSelected(c) {\r\n c.classList.remove(css.selected);\r\n c.style.background = \"transparent\";\r\n c.style.color = this.options.clockItemColor;\r\n }\r\n}","import ClockHeader from \"./clockHeader\";\r\nimport ClockFace from \"./face/clockFace\";\r\nimport Config, {DOM} from \"./meta/config\";\r\nimport formatTime from \"./timeFormatter\";\r\n\r\nexport default class Clock {\r\n\r\n constructor(options, time) {\r\n this.options = options;\r\n\r\n this.initView();\r\n this.time = time;\r\n this.initElements();\r\n }\r\n\r\n initView() {\r\n this.submitButton = document.getElementById(DOM.submitId);\r\n this.submitButton.onclick = () => {\r\n const time = this.time;\r\n time.formatted = () => formatTime(time);\r\n this.options.onSubmit(time);\r\n Clock.dispose();\r\n };\r\n\r\n this.cancelButton = document.getElementById(DOM.cancelId);\r\n this.cancelButton.onclick = () => {\r\n this.options.onCancel();\r\n Clock.dispose();\r\n };\r\n }\r\n\r\n initElements() {\r\n this.header = new ClockHeader({\r\n options: this.options,\r\n time: this.time,\r\n onHourClicked: () => this.toggleToHours(),\r\n onMinutesClicked: () => this.toggleToMinutes()\r\n });\r\n this.clockFace = new ClockFace(this.options, this.time, (time, type) => this.onTimeUpdate(time, type));\r\n }\r\n\r\n onStart() {\r\n this.clockFace.onStart();\r\n }\r\n\r\n toggleToHours() {\r\n this.clockFace.toggleToHours();\r\n }\r\n\r\n toggleToMinutes() {\r\n this.clockFace.toggleToMinutes();\r\n }\r\n\r\n onTimeUpdate(time, type) {\r\n this.time = time;\r\n this.header.time = time;\r\n this.header.updateDisplayedTime();\r\n if (type === Config.FaceType.MINUTES)\r\n this.header.toggleActiveToMinutes();\r\n\r\n }\r\n\r\n static dispose() {\r\n document.body.removeChild(document.getElementById(Config.clockId));\r\n }\r\n}","import {css, DOM} from \"./meta/config\";\r\n\r\nexport default function styleColors(options) {\r\n document.getElementById(DOM.headerId).style.background = options.headerBackground;\r\n document.getElementById(DOM.headerId).style.color = options.headerColor;\r\n document.getElementById(DOM.wrapperId).style.background = options.wrapperBackground;\r\n document.getElementById(DOM.clockId).style.background = options.clockBackground;\r\n document.getElementById(DOM.handId).style.background = options.handColor;\r\n document.getElementById(DOM.dotId).style.background = options.handColor;\r\n document.getElementById(DOM.buttonsId).style.background = options.footerBackground;\r\n document.getElementById(DOM.submitId).style.color = options.submitColor;\r\n document.getElementById(DOM.cancelId).style.color = options.cancelColor;\r\n\r\n changeColor(css.clockItem, options.clockItemColor);\r\n changeColor(css.inner, options.clockItemInnerColor);\r\n changeColor(css.outer, options.handColor, \"borderColor\");\r\n}\r\n\r\nfunction changeColor(className, color, property = \"color\") {\r\n const items = Array.from(document.getElementsByClassName(className));\r\n for (const item of items)\r\n item.style[property] = color;\r\n}\r\n","import clockHtml from \"./meta/clockHtml\";\r\nimport Config from \"./meta/config\";\r\nimport Clock from \"./clock\";\r\nimport styleColors from \"./colorStylists\";\r\nimport getTime from \"./timeExtractor\";\r\n\r\n\r\nexport default function showPicker(config = {}) {\r\n createDom();\r\n\r\n const options = Object.assign({}, Config.clockConfig, config);\r\n const time = getTime(options.time);\r\n\r\n const clock = new Clock(options, time);\r\n styleColors(options);\r\n clock.onStart();\r\n}\r\n\r\n\r\nfunction createDom() {\r\n if (document.getElementById(Config.clockId))\r\n throw Error(\"There is already one running grudus-timepicker instance!\");\r\n\r\n const clockDiv = document.createElement(\"div\");\r\n clockDiv.id = Config.clockId;\r\n clockDiv.innerHTML = clockHtml;\r\n document.body.appendChild(clockDiv);\r\n}\r\n","import formatTime from \"./timeFormatter\";\r\nimport showPicker from \"./timepickerCreator\";\r\n\r\nexport default {\r\n showPicker: (config) => showPicker(config),\r\n format: (time) => formatTime(time)\r\n};\r\n\r\n"],"names":["hoursRegex","minutesRegex","regex","extractTime","date","fromDate","Date","test","hours","minutes","parseInt","fromRegex","TypeError","JSON","stringify","parsed","exec","getHours","getMinutes","time","extractedTime","clockId","defaultConfig","FaceType","HOURS","MINUTES","css","DOM","clockConfig","ClockHeader","config","options","onHourClicked","onMinutesClicked","initView","headerHours","document","getElementById","hoursId","onclick","toggleActiveToHours","headerMinutes","minutesId","toggleActiveToMinutes","updateDisplayedTime","toggleActive","objectToRemoveClass","objectToAddClass","style","color","headerColor","headerSelected","doUpdateDisplayedTime","node","value","innerText","MinutesFace","items","initialMinutes","updateMinutes","displayed","type","Config","selected","undefined","findSelected","colorSelected","removeSelected","angle","minute","Math","round","clockItems","outerClockItems","isOuter","classList","add","background","handColor","remove","clockItemColor","indexOf","HoursFace","initialHours","updateHours","displayedInner","innerClockElem","display","isInnerClock","hoursIndex","innerClockItems","radius","elem","index","selectedAngle","isInner","clockItemInnerColor","Array","from","toRadians","PI","toDegrees","findMousePosition","event","object","rect","getBoundingClientRect","clientX","left","clientY","top","delay","t","Promise","resolve","fn","then","prototype","ClockFaceCreator","clockElem","size","middle","face","doCreate","span","item","i","inner","createElement","outer","push","appendChild","width","offsetWidth","height","offsetHeight","x","y","itemsRadius","innerWidth","innerHeight","middleX","middleY","doCalculateSize","fun","angleQuantum","length","Utils","itemWidth","itemHeight","sin","bottom","cos","ClockFace","initialTime","onTimeUpdate","isMouseDown","initViews","initTimeFaces","createFace","hoursFace","currentFace","changeDisplayed","innerId","handOfAClock","handId","onmousedown","onmouseup","toggleToMinutes","e","stopPropagation","onmousemove","selectTime","minutesFace","onEnter","clockFaceCreator","create","calculateSize","mouse","atan","array","forEach","call","c","calculateHandOfTheClock","transform","onLeave","toggleTime","onEachClockElement","fadeOut","Clock","initElements","submitButton","submitId","formatted","formatTime","onSubmit","dispose","cancelButton","cancelId","onCancel","header","toggleToHours","clockFace","onStart","body","removeChild","styleColors","headerId","headerBackground","wrapperId","wrapperBackground","clockBackground","dotId","buttonsId","footerBackground","submitColor","cancelColor","clockItem","changeColor","className","property","getElementsByClassName","showPicker","Object","assign","getTime","clock","createDom","Error","clockDiv","id","innerHTML","clockHtml"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"grudus-timepicker.umd.js","sources":["../src/js/timeExtractor.js","../src/js/timeFormatter.js","../src/js/meta/clockHtml.js","../src/js/meta/config.js","../src/js/clockHeader.js","../src/js/face/minutesFace.js","../src/js/face/hoursFace.js","../src/js/meta/utils.js","../src/js/face/clockFaceCreator.js","../src/js/face/clockFace.js","../src/js/clock.js","../src/js/colorStylists.js","../src/js/timepickerCreator.js","../src/js/index.js"],"sourcesContent":["const hoursRegex = /^([0-1]?[0-9]|2[0-3])$/;\nconst minutesRegex = /^([0-5]?[0-9])$/;\nconst regex = /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/;\n\nexport default function extractTime(date, hasMeridiem) {\n if (!date)\n return fromDate(new Date(), hasMeridiem);\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes) \n && date.meridiem !== undefined \n && date.meridiem.length > 0)\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes), meridiem: date.meridiem};\n else if (hoursRegex.test(date.hours) && minutesRegex.test(date.minutes))\n return {hours: parseInt(date.hours), minutes: parseInt(date.minutes)};\n else if (regex.test(date))\n return fromRegex(date);\n else if (date instanceof Date)\n return fromDate(date, hasMeridiem);\n else\n throw new TypeError(`INVALID FORMAT: {${JSON.stringify(date)}}.\n Time must be a Date or 'hh:MM' string or object with 'hours' and 'minutes' fields`);\n}\n\nfunction fromRegex(date) {\n const parsed = regex.exec(date);\n return {hours: parseInt(parsed[1]), minutes: parseInt(parsed[2])};\n}\n\nfunction fromDate(date, hasMeridiem) {\n if (hasMeridiem !== undefined && !hasMeridiem) return {hours: date.getHours(), minutes: date.getMinutes()};\n return getTimeWithMeridiem(date);\n\n}\n\nfunction getTimeWithMeridiem(date) {\n let meridiem = \"\";\n let hours = date.getHours(); \n \n if (hours < 13) meridiem = \"am\";\n else meridiem = \"pm\";\n \n if (hours !== 12) hours = hours % 12;\n \n return {hours, minutes: date.getMinutes(), meridiem};\n}","import extractTime from \"./timeExtractor\";\n\nexport default function (time, hasMeridiem) {\n const extractedTime = extractTime(time, hasMeridiem);\n return (extractedTime.hours < 10 ? \"0\" + extractedTime.hours : extractedTime.hours)\n + \":\" + (extractedTime.minutes < 10 ? \"0\" + extractedTime.minutes : extractedTime.minutes)\n + \" \"+ (extractedTime.meridiem !== undefined ? extractedTime.meridiem : \"\");\n}","\nexport default (options) => {\n const arrayTemplate = [\"
\" ,\n \"
\" ,\n \"
\" ,\n \" 21\" ,\n \" :\" ,\n \" 37\"];\n if (options.meridiem){\n arrayTemplate.push([\"
\" ,\n \"AM\" ,\n \"PM\",\n \"
\"].join(\"\\n\"));\n \n }\n const nextTemplate = [\"
\" ,\n \"
\" ,\n \"\" ,\n \"\" ,\n \"
\" ,\n \"
\" ,\n \" \" ,\n \"
\" ,\n \"
\" ,\n \"
\" ,\n \"
\" ,\n \"\" ,\n \"\" ,\n \"
\"];\n\n nextTemplate.push(`\n \n \n `);\n nextTemplate.push(\"
\");\n return arrayTemplate.concat(nextTemplate).join(\"\\n\");\n};","const clockId = \"grudus-clock\";\n\nconst defaultConfig = {\n onSubmit: () => {\n },\n onCancel: () => {\n },\n headerBackground: \"#1976D2\",\n headerColor: \"#c7d6e1\",\n headerSelected: \"#ffffff\",\n wrapperBackground: \"#f0fff0\",\n footerBackground: \"#f0fff0\",\n submitColor: \"#1976D2\",\n cancelColor: \"#1976D2\",\n clockBackground: \"#CFD8DC\",\n clockItemColor: \"#212121\",\n clockItemInnerColor: \"#212121\",\n handColor: \"#1976D2\",\n meridiem: false,\n labels: {\n cancel:\"Cancel\",\n ok:\"Ok\",\n }\n};\n\nconst FaceType = {HOURS: \"hours\", MINUTES: \"minutes\"};\n\nconst css = {\n clock: \"g-clock\",\n clockItem: \"g-clock-item\",\n inner: \"g-clock-inner\",\n outer: \"g-clock-outer\",\n item: \"g-clock-item\",\n hand: \"g-hand-of-a-clock\",\n fadeOut: \"g-fade-out\",\n selected: \"g-selected\",\n active: \"g-active\",\n submit: \"g-submit\",\n cancel: \"g-cancel\",\n hour: \"g-hour\",\n minute: \"g-minute\"\n};\n\nconst DOM = {\n headerId: \"g-head\",\n hoursId: \"g-hours\",\n minutesId: \"g-minutes\",\n clockId: \"g-clock\",\n innerId: \"g-clock-inner\",\n wrapperId: \"g-clock-wrapper\",\n dotId: \"g-middle-dot\",\n handId: \"g-hand-of-a-clock\",\n buttonsId: \"g-buttons\",\n submitId: \"g-time-submit\",\n cancelId: \"g-time-cancel\",\n gTimeAmId: \"g-time-am\",\n gTimePmId: \"g-time-pm\"\n};\n\nexport default {clockId, clockConfig: defaultConfig, FaceType};\nexport {css, DOM};","import {DOM} from \"./meta/config\";\n\nexport default class ClockHeader {\n\n constructor(config) {\n this.options = config.options;\n this.time = config.time;\n this.onHourClicked = config.onHourClicked;\n this.onMinutesClicked = config.onMinutesClicked;\n\n this.initView();\n }\n\n initView() {\n this.headerHours = document.getElementById(DOM.hoursId);\n this.headerHours.onclick = () => {\n this.toggleActiveToHours();\n this.onHourClicked();\n };\n\n this.headerMinutes = document.getElementById(DOM.minutesId);\n this.headerMinutes.onclick = () => {\n this.toggleActiveToMinutes();\n this.onMinutesClicked();\n };\n if (this.options.meridiem) {\n this.headerAm = document.getElementById(DOM.gTimeAmId);\n this.headerPm = document.getElementById(DOM.gTimePmId);\n this.headerAm.onclick = () => {\n this.toogleActiveMeridiemAm();\n this.time.meridiem = \"am\";\n };\n this.headerPm.onclick = () => {\n this.toogleActiveMeridiemPm();\n this.time.meridiem = \"pm\";\n };\n if (this.time.meridiem === \"am\") this.toogleActiveMeridiemAm();\n else if (this.time.meridiem === \"pm\") this.toogleActiveMeridiemPm();\n else this.defaultToggleActiveMeridiem();\n }\n\n this.updateDisplayedTime();\n this.toggleActiveToHours();\n }\n\n toggleActiveToMinutes() {\n this.toggleActive(this.headerHours, this.headerMinutes);\n }\n\n toggleActiveToHours() {\n this.toggleActive(this.headerMinutes, this.headerHours);\n }\n\n toogleActiveMeridiemAm() {\n this.toggleActive(this.headerPm, this.headerAm);\n \n }\n\n toogleActiveMeridiemPm() {\n this.toggleActive(this.headerAm, this.headerPm);\n }\n \n defaultToggleActiveMeridiem() {\n const { hours } = this.time;\n if (hours < 13) this.toogleActiveMeridiemAm();\n else this.toogleActiveMeridiemPm();\n }\n\n toggleActive(objectToRemoveClass, objectToAddClass) {\n objectToRemoveClass.style.color = this.options.headerColor;\n objectToAddClass.style.color = this.options.headerSelected;\n }\n\n updateDisplayedTime() {\n ClockHeader.doUpdateDisplayedTime(this.headerHours, this.time.hours, this.options.meridiem);\n ClockHeader.doUpdateDisplayedTime(this.headerMinutes, this.time.minutes);\n }\n\n static doUpdateDisplayedTime(node, value, meridiem) {\n if (meridiem && value !== 12) value = value % 12;\n if (value < 10)\n node.innerText = \"0\" + value;\n else node.innerText = value;\n }\n}","import Config, {css} from \"../meta/config\";\n\nexport default class MinutesFace {\n\n constructor(items, initialMinutes, updateMinutes) {\n this.displayed = [\"00\", \"05\", \"10\", \"15\", \"20\", \"25\", \"30\", \"35\", \"40\", \"45\", \"50\", \"55\"];\n this.options = items.options;\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.items = items;\n this.minutes = initialMinutes;\n this.updateMinutes = updateMinutes;\n }\n\n onEnter() {\n this.selected = this.findSelected(this.minutes);\n this.colorSelected();\n this.updateMinutes(this.minutes, this.minutes * 6);\n }\n\n onLeave() {\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle) {\n if (this.selected)\n this.removeSelected();\n\n const minute = Math.round(angle / 6) % 60;\n this.selected = this.findSelected(minute);\n this.colorSelected();\n this.minutes = minute;\n this.updateMinutes(this.minutes, angle);\n }\n\n findSelected(minute) {\n return (minute % 5 === 0) ? this.items.clockItems[minute / 5] : this.items.outerClockItems[minute];\n }\n\n colorSelected() {\n if (this.isOuter()) {\n this.selected.classList.add(css.selected);\n return;\n }\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"whitesmoke\";\n }\n\n removeSelected() {\n if (this.isOuter()) {\n this.selected.classList.remove(css.selected);\n return;\n }\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.options.clockItemColor;\n }\n\n isOuter() {\n return this.items.outerClockItems.indexOf(this.selected) > -1;\n }\n}","import Config from \"../meta/config\";\n\nexport default class HoursFace {\n\n constructor(items, initialHours, updateHours) {\n this.displayed = [\"12\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\n this.displayedInner = [\"00\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"21\", \"22\", \"23\"];\n this.type = Config.FaceType.MINUTES;\n this.selected = undefined;\n this.options = items.options;\n\n this.items = items;\n this.hours = initialHours;\n this.updateHours = updateHours;\n }\n\n onEnter() {\n\n if (this.items.innerClockElem !== null)\n this.items.innerClockElem.style.display = \"block\";\n const isInnerClock = this.hours < 13 && this.hours !== 0;\n const hoursIndex = this.hours % 12;\n let radius = this.items.radius;\n if (this.options.meridiem && !isInnerClock) this.selected = this.items.clockItems[hoursIndex];\n else {\n this.selected = isInnerClock ? \n this.items.clockItems[hoursIndex] : \n this.items.innerClockItems[hoursIndex];\n radius = isInnerClock ? radius : radius - 50;\n }\n this.colorSelected();\n\n this.updateHours(this.hours, hoursIndex * 30, radius);\n }\n\n onLeave() {\n if (this.items.innerClockElem !== null)\n this.items.innerClockElem.style.display = \"none\";\n if (this.selected) {\n this.removeSelected();\n this.selected = undefined;\n }\n }\n\n selectTime(angle, elem) {\n if (this.selected)\n this.removeSelected();\n\n const index = Math.round(angle / 30) % 12;\n this.selected = (elem === this.items.innerClockElem \n && this.items.innerClockElem!== undefined\n ? this.items.innerClockItems\n : this.items.clockItems)[index];\n\n this.colorSelected();\n this.hours = parseInt(this.selected.innerText);\n const selectedAngle = Math.round(angle / 30) * 30;\n\n this.updateHours(this.hours, selectedAngle,\n elem === this.items.innerClockElem && this.items.innerClockElem!== undefined ? this.items.radius - 50 : this.items.radius);\n }\n\n colorSelected() {\n this.selected.style.background = this.options.handColor;\n this.selected.style.color = \"#ffffff\";\n }\n\n removeSelected() {\n this.selected.style.background = \"transparent\";\n this.selected.style.color = this.isInner()\n ? this.options.clockItemInnerColor\n : this.options.clockItemColor;\n }\n\n isInner() {\n return Array.from(this.items.innerClockItems).indexOf(this.selected) > -1;\n }\n}","function toRadians(angle) {\n return angle * (Math.PI / 180);\n}\n\nfunction toDegrees(angle) {\n return angle * (180 / Math.PI);\n}\n\nfunction findMousePosition(event, object) {\n const rect = object.getBoundingClientRect();\n return {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n}\n\nfunction delay(t) {\n return new Promise(function (resolve) {\n setTimeout(resolve, t);\n });\n}\n\nPromise.delay = function (fn, t) {\n if (!t) {\n t = fn;\n fn = function () {\n };\n }\n return delay(t).then(fn);\n};\n\nPromise.prototype.delay = function (fn, t) {\n return this.then(function () {\n return Promise.delay(fn, t);\n });\n};\n\nexport default {toRadians, toDegrees, findMousePosition};","import Utils from \"../meta/utils\";\nimport {css} from \"../meta/config\";\n\nexport default class ClockFaceCreator {\n\n constructor(clockElem, innerClockElem, options) {\n this.clockElem = clockElem;\n this.innerClockElem = innerClockElem;\n this.size = {};\n this.middle = {};\n this.options = options;\n }\n\n create(clockItems, innerClockItems, outerClockItems, face) {\n ClockFaceCreator.doCreate(clockItems, this.clockElem, span => span.classList.add(css.item));\n if (!this.options.meridiem) {\n ClockFaceCreator.doCreate(innerClockItems, this.innerClockElem, (span, i) => {\n span.classList.add(css.item, css.inner);\n span.innerText = face.displayedInner[i];\n });\n }\n\n for (let i = 0; i < 60; i++) {\n const span = document.createElement(\"span\");\n span.classList.add(css.outer);\n outerClockItems.push(span);\n this.clockElem.appendChild(span);\n }\n }\n\n static doCreate(clockItems, clockElem, fun) {\n for (let i = 0; i < 12; i++) {\n const span = document.createElement(\"span\");\n fun(span, i);\n clockItems.push(span);\n clockElem.appendChild(span);\n }\n }\n\n calculateSize(clockItems, innerClockItems, outerClockItems) {\n this.size.width = this.clockElem.offsetWidth;\n this.size.height = this.clockElem.offsetHeight;\n this.middle.x = this.size.width / 2;\n this.middle.y = this.size.height / 2;\n this.itemsRadius = this.size.width / 2 - 20;\n\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, clockItems);\n if (!this.options.meridiem) {\n const innerWidth = this.innerClockElem.offsetWidth;\n const innerHeight = this.innerClockElem.offsetHeight;\n const middleX = innerWidth / 2;\n const middleY = innerHeight / 2;\n ClockFaceCreator.doCalculateSize(middleX, middleY, this.itemsRadius - 40, innerClockItems);\n }\n ClockFaceCreator.doCalculateSize(this.middle.x, this.middle.y, this.itemsRadius, outerClockItems);\n }\n\n static doCalculateSize(middleX, middleY, radius, items) {\n const angleQuantum = 360 / items.length;\n for (let i = 0; i < items.length; i++) {\n\n const angle = Utils.toRadians(i * angleQuantum);\n const item = items[i];\n const itemWidth = item.offsetWidth;\n const itemHeight = item.offsetHeight;\n\n item.style.left = ((middleX + Math.sin(angle) * radius) - itemWidth / 2) + \"px\";\n item.style.bottom = ((middleY + Math.cos(angle) * radius) - itemHeight / 2) + \"px\";\n }\n }\n}","import MinutesFace from \"./minutesFace\";\nimport HoursFace from \"./hoursFace\";\nimport Utils from \"../meta/utils\";\nimport Config, {css, DOM} from \"../meta/config\";\nimport ClockFaceCreator from \"./clockFaceCreator\";\n\nexport default class ClockFace {\n\n constructor(options, initialTime, onTimeUpdate) {\n this.options = options;\n this.time = initialTime;\n this.onTimeUpdate = onTimeUpdate;\n this.isMouseDown = false;\n this.clockItems = [];\n this.innerClockItems = [];\n this.outerClockItems = [];\n this.size = {};\n this.middle = {};\n\n this.initViews();\n this.initTimeFaces(initialTime);\n this.createFace(options);\n\n this.hoursFace.items.radius = this.itemsRadius;\n\n this.currentFace = this.hoursFace;\n this.changeDisplayed(this.currentFace.displayed);\n }\n\n initViews() {\n this.clockElem = document.getElementById(DOM.clockId);\n this.innerClockElem = (this.options.meridiem) ? null : document.getElementById(DOM.innerId);\n this.handOfAClock = document.getElementById(DOM.handId);\n\n this.clockElem.onmousedown = () => this.isMouseDown = true;\n this.clockElem.onmouseup = () => {this.isMouseDown = false;\n this.toggleToMinutes();\n };\n\n this.handOfAClock.onmouseup = (e) => e.stopPropagation();\n this.handOfAClock.onmousemove = (e) => e.stopPropagation();\n this.handOfAClock.onclick = (e) => e.stopPropagation();\n\n this.clockElem.onmousemove = (e) => this.selectTime(e, false, this.clockElem);\n this.clockElem.onclick = (e) => this.selectTime(e, true, this.clockElem);\n\n if (!this.options.meridiem) {\n this.innerClockElem.onmousemove = (e) => this.selectTime(e, false, this.innerClockElem);\n this.innerClockElem.onclick = (e) => this.selectTime(e, true, this.innerClockElem);\n }\n }\n\n initTimeFaces(initialTime) {\n this.minutesFace = new MinutesFace({\n options: this.options,\n clockItems: this.clockItems,\n outerClockItems: this.outerClockItems\n }, initialTime.minutes, (minutes, angle) => this.updateMinutes(minutes, angle));\n\n this.hoursFace = new HoursFace({\n options: this.options,\n innerClockItems: this.innerClockItems,\n clockItems: this.clockItems,\n innerClockElem: this.innerClockElem\n }, initialTime.hours, (hours, angle, radius) => this.updateHours(hours, angle, radius));\n }\n\n onStart() {\n this.currentFace.onEnter();\n }\n\n createFace() {\n const clockFaceCreator = new ClockFaceCreator(this.clockElem, this.innerClockElem, this.options);\n clockFaceCreator.create(this.clockItems, this.innerClockItems, this.outerClockItems, this.hoursFace);\n clockFaceCreator.calculateSize(this.clockItems, this.innerClockItems, this.outerClockItems);\n\n this.size = clockFaceCreator.size;\n this.middle = clockFaceCreator.middle;\n this.itemsRadius = clockFaceCreator.itemsRadius;\n }\n\n selectTime(event, isMouseDown, elem) {\n if (!(isMouseDown || this.isMouseDown))\n return;\n const mouse = Utils.findMousePosition(event, this.clockElem);\n const x = mouse.x - this.middle.x;\n const y = this.middle.y - mouse.y;\n let angle = 90 - Utils.toDegrees(Math.atan(y / x));\n if (x < 0) angle += 180;\n\n this.currentFace.selectTime(angle, elem);\n event.stopPropagation();\n }\n\n changeDisplayed(array) {\n for (let i = 0; i < this.clockItems.length; i++)\n this.clockItems[i].innerText = array[i];\n }\n\n onEachClockElement(fun) {\n [].forEach.call(this.clockItems, c => fun(c));\n }\n\n updateMinutes(minutes, angle) {\n this.time.minutes = minutes;\n this.calculateHandOfTheClock(angle, this.itemsRadius);\n this.onTimeUpdate(this.time, Config.FaceType.MINUTES);\n }\n\n updateHours(hours, angle, radius) {\n this.time.hours = hours;\n this.calculateHandOfTheClock(angle, radius);\n this.onTimeUpdate(this.time, Config.FaceType.HOURS);\n }\n\n calculateHandOfTheClock(angle, size = this.itemsRadius) {\n this.handOfAClock.style.transform = `rotate(${angle - 90}deg)`;\n this.handOfAClock.style.width = size + \"px\";\n }\n\n toggleToHours() {\n this.minutesFace.onLeave();\n this.toggleTime(this.hoursFace);\n }\n\n toggleToMinutes() {\n this.hoursFace.onLeave();\n this.toggleTime(this.minutesFace);\n }\n\n toggleTime(face) {\n if (this.currentFace !== face) {\n this.onEachClockElement(c => c.classList.add(css.fadeOut));\n this.handOfAClock.classList.add(css.fadeOut);\n Promise.delay(() => {\n this.onEachClockElement(c => c.classList.remove(css.fadeOut));\n this.handOfAClock.classList.remove(css.fadeOut);\n this.changeDisplayed(face.displayed);\n this.currentFace = face;\n this.onEachClockElement(c => this.removeSelected(c));\n face.onEnter();\n }, 300);\n }\n }\n\n removeSelected(c) {\n c.classList.remove(css.selected);\n c.style.background = \"transparent\";\n c.style.color = this.options.clockItemColor;\n }\n}","import ClockHeader from \"./clockHeader\";\nimport ClockFace from \"./face/clockFace\";\nimport Config, {DOM} from \"./meta/config\";\nimport formatTime from \"./timeFormatter\";\n\nexport default class Clock {\n\n constructor(options, time) {\n this.options = options;\n\n this.initView();\n this.time = time;\n this.initElements();\n }\n\n initView() {\n this.submitButton = document.getElementById(DOM.submitId);\n this.submitButton.onclick = () => {\n const time = this.time;\n time.formatted = () => formatTime(time, this.options.meridiem);\n this.options.onSubmit(time);\n Clock.dispose();\n };\n\n this.cancelButton = document.getElementById(DOM.cancelId);\n this.cancelButton.onclick = () => {\n this.options.onCancel();\n Clock.dispose();\n };\n }\n\n initElements() {\n this.header = new ClockHeader({\n options: this.options,\n time: this.time,\n onHourClicked: () => this.toggleToHours(),\n onMinutesClicked: () => this.toggleToMinutes()\n });\n this.clockFace = new ClockFace(this.options, this.time, (time, type) => this.onTimeUpdate(time, type));\n }\n\n onStart() {\n this.clockFace.onStart();\n }\n\n toggleToHours() {\n this.clockFace.toggleToHours();\n }\n\n toggleToMinutes() {\n this.clockFace.toggleToMinutes();\n }\n\n onTimeUpdate(time, type) {\n this.time = time;\n this.header.time = time;\n this.header.updateDisplayedTime();\n if (type === Config.FaceType.MINUTES)\n this.header.toggleActiveToMinutes();\n\n }\n\n static dispose() {\n document.body.removeChild(document.getElementById(Config.clockId));\n }\n}","import {css, DOM} from \"./meta/config\";\n\nexport default function styleColors(options) {\n document.getElementById(DOM.headerId).style.background = options.headerBackground;\n document.getElementById(DOM.headerId).style.color = options.headerColor;\n document.getElementById(DOM.wrapperId).style.background = options.wrapperBackground;\n document.getElementById(DOM.clockId).style.background = options.clockBackground;\n document.getElementById(DOM.handId).style.background = options.handColor;\n document.getElementById(DOM.dotId).style.background = options.handColor;\n document.getElementById(DOM.buttonsId).style.background = options.footerBackground;\n document.getElementById(DOM.submitId).style.color = options.submitColor;\n document.getElementById(DOM.cancelId).style.color = options.cancelColor;\n\n changeColor(css.clockItem, options.clockItemColor);\n changeColor(css.inner, options.clockItemInnerColor);\n changeColor(css.outer, options.handColor, \"borderColor\");\n}\n\nfunction changeColor(className, color, property = \"color\") {\n const items = Array.from(document.getElementsByClassName(className));\n for (const item of items)\n item.style[property] = color;\n}\n","import clockHtml from \"./meta/clockHtml\";\nimport Config from \"./meta/config\";\nimport Clock from \"./clock\";\nimport styleColors from \"./colorStylists\";\nimport getTime from \"./timeExtractor\";\n\n\nexport default function showPicker(config = {}) {\n \n const options = Object.assign({}, Config.clockConfig, config);\n createDom(options);\n const time = getTime(options.time, options.meridiem);\n\n const clock = new Clock(options, time);\n styleColors(options);\n clock.onStart();\n}\n\n\nfunction createDom(options) {\n if (document.getElementById(Config.clockId))\n throw Error(\"There is already one running grudus-timepicker instance!\");\n\n const clockDiv = document.createElement(\"div\");\n clockDiv.id = Config.clockId;\n clockDiv.innerHTML = clockHtml(options);\n document.body.appendChild(clockDiv);\n}\n","import formatTime from \"./timeFormatter\";\nimport showPicker from \"./timepickerCreator\";\n\nexport default {\n showPicker: (config) => showPicker(config),\n format: (time) => formatTime(time)\n};\n\n"],"names":["hoursRegex","minutesRegex","regex","extractTime","date","hasMeridiem","fromDate","Date","test","hours","minutes","meridiem","undefined","length","parseInt","fromRegex","TypeError","JSON","stringify","parsed","exec","getHours","getMinutes","getTimeWithMeridiem","time","extractedTime","options","arrayTemplate","push","join","nextTemplate","labels","cancel","ok","concat","clockId","defaultConfig","FaceType","HOURS","MINUTES","css","DOM","clockConfig","ClockHeader","config","onHourClicked","onMinutesClicked","initView","headerHours","document","getElementById","hoursId","onclick","toggleActiveToHours","headerMinutes","minutesId","toggleActiveToMinutes","headerAm","gTimeAmId","headerPm","gTimePmId","toogleActiveMeridiemAm","toogleActiveMeridiemPm","defaultToggleActiveMeridiem","updateDisplayedTime","toggleActive","objectToRemoveClass","objectToAddClass","style","color","headerColor","headerSelected","doUpdateDisplayedTime","node","value","innerText","MinutesFace","items","initialMinutes","updateMinutes","displayed","type","Config","selected","findSelected","colorSelected","removeSelected","angle","minute","Math","round","clockItems","outerClockItems","isOuter","classList","add","background","handColor","remove","clockItemColor","indexOf","HoursFace","initialHours","updateHours","displayedInner","innerClockElem","display","isInnerClock","hoursIndex","radius","innerClockItems","elem","index","selectedAngle","isInner","clockItemInnerColor","Array","from","toRadians","PI","toDegrees","findMousePosition","event","object","rect","getBoundingClientRect","clientX","left","clientY","top","delay","t","Promise","resolve","fn","then","prototype","ClockFaceCreator","clockElem","size","middle","face","doCreate","span","item","i","inner","createElement","outer","appendChild","width","offsetWidth","height","offsetHeight","x","y","itemsRadius","doCalculateSize","innerWidth","innerHeight","middleX","middleY","fun","angleQuantum","Utils","itemWidth","itemHeight","sin","bottom","cos","ClockFace","initialTime","onTimeUpdate","isMouseDown","initViews","initTimeFaces","createFace","hoursFace","currentFace","changeDisplayed","innerId","handOfAClock","handId","onmousedown","onmouseup","toggleToMinutes","e","stopPropagation","onmousemove","selectTime","minutesFace","onEnter","clockFaceCreator","create","calculateSize","mouse","atan","array","forEach","call","c","calculateHandOfTheClock","transform","onLeave","toggleTime","onEachClockElement","fadeOut","Clock","initElements","submitButton","submitId","formatted","formatTime","onSubmit","dispose","cancelButton","cancelId","onCancel","header","toggleToHours","clockFace","onStart","body","removeChild","styleColors","headerId","headerBackground","wrapperId","wrapperBackground","clockBackground","dotId","buttonsId","footerBackground","submitColor","cancelColor","clockItem","changeColor","className","property","getElementsByClassName","showPicker","Object","assign","getTime","clock","createDom","Error","clockDiv","id","innerHTML","clockHtml"],"mappings":";;;;;;;;AAAA,IAAMA,aAAa,wBAAnB;AACA,IAAMC,eAAe,iBAArB;AACA,IAAMC,QAAQ,qCAAd;;AAEA,AAAe,SAASC,WAAT,CAAqBC,IAArB,EAA2BC,WAA3B,EAAwC;QAC/C,CAACD,IAAL,EACI,OAAOE,SAAS,IAAIC,IAAJ,EAAT,EAAqBF,WAArB,CAAP,CADJ,KAEK,IAAIL,WAAWQ,IAAX,CAAgBJ,KAAKK,KAArB,KAA+BR,aAAaO,IAAb,CAAkBJ,KAAKM,OAAvB,CAA/B,IACMN,KAAKO,QAAL,KAAkBC,SADxB,IAEMR,KAAKO,QAAL,CAAcE,MAAd,GAAuB,CAFjC,EAGD,OAAO,EAACJ,OAAOK,SAASV,KAAKK,KAAd,CAAR,EAA8BC,SAASI,SAASV,KAAKM,OAAd,CAAvC,EAA+DC,UAAUP,KAAKO,QAA9E,EAAP,CAHC,KAIA,IAAIX,WAAWQ,IAAX,CAAgBJ,KAAKK,KAArB,KAA+BR,aAAaO,IAAb,CAAkBJ,KAAKM,OAAvB,CAAnC,EACD,OAAO,EAACD,OAAOK,SAASV,KAAKK,KAAd,CAAR,EAA8BC,SAASI,SAASV,KAAKM,OAAd,CAAvC,EAAP,CADC,KAEA,IAAIR,MAAMM,IAAN,CAAWJ,IAAX,CAAJ,EACD,OAAOW,UAAUX,IAAV,CAAP,CADC,KAEA,IAAIA,gBAAgBG,IAApB,EACD,OAAOD,SAASF,IAAT,EAAeC,WAAf,CAAP,CADC,KAGD,MAAM,IAAIW,SAAJ,uBAAkCC,KAAKC,SAAL,CAAed,IAAf,CAAlC,uGAAN;;;AAIR,SAASW,SAAT,CAAmBX,IAAnB,EAAyB;QACfe,SAASjB,MAAMkB,IAAN,CAAWhB,IAAX,CAAf;WACO,EAACK,OAAOK,SAASK,OAAO,CAAP,CAAT,CAAR,EAA6BT,SAASI,SAASK,OAAO,CAAP,CAAT,CAAtC,EAAP;;;AAGJ,SAASb,QAAT,CAAkBF,IAAlB,EAAwBC,WAAxB,EAAqC;QAC7BA,gBAAgBO,SAAhB,IAA6B,CAACP,WAAlC,EAA+C,OAAO,EAACI,OAAOL,KAAKiB,QAAL,EAAR,EAAyBX,SAASN,KAAKkB,UAAL,EAAlC,EAAP;WACxCC,oBAAoBnB,IAApB,CAAP;;;AAIJ,SAASmB,mBAAT,CAA6BnB,IAA7B,EAAmC;QAC3BO,WAAW,EAAf;QACIF,QAAQL,KAAKiB,QAAL,EAAZ;;QAEIZ,QAAQ,EAAZ,EAAgBE,WAAW,IAAX,CAAhB,KACKA,WAAW,IAAX;;QAEDF,UAAU,EAAd,EAAkBA,QAAQA,QAAQ,EAAhB;;WAEX,EAACA,YAAD,EAAQC,SAASN,KAAKkB,UAAL,EAAjB,EAAoCX,kBAApC,EAAP;;;ACxCJ,iBAAe,UAAUa,IAAV,EAAgBnB,WAAhB,EAA6B;QAClCoB,gBAAgBtB,YAAYqB,IAAZ,EAAkBnB,WAAlB,CAAtB;WACO,CAACoB,cAAchB,KAAd,GAAsB,EAAtB,GAA2B,MAAMgB,cAAchB,KAA/C,GAAuDgB,cAAchB,KAAtE,IACD,GADC,IACMgB,cAAcf,OAAd,GAAwB,EAAxB,GAA6B,MAAMe,cAAcf,OAAjD,GAA2De,cAAcf,OAD/E,IAED,GAFC,IAEKe,cAAcd,QAAd,KAA2BC,SAA3B,GAAuCa,cAAcd,QAArD,GAAgE,EAFrE,CAAP;;;ACHJ,iBAAe,UAACe,OAAD,EAAa;QAClBC,gBAAgB,CAAC,kCAAD,EAClB,gDADkB,EAElB,0CAFkB,EAGlB,sFAHkB,EAIlB,8CAJkB,EAKlB,iFALkB,CAAtB;QAMID,QAAQf,QAAZ,EAAqB;sBACHiB,IAAd,CAAmB,CAAC,gCAAD,EACf,qEADe,EAEf,qEAFe,EAGf,QAHe,EAGLC,IAHK,CAGA,IAHA,CAAnB;;QAMEC,eAAe,CAAC,oBAAD,EACjB,eADiB,EAEjB,EAFiB,EAGjB,EAHiB,EAIjB,mEAJiB,EAKjB,4CALiB,EAMjB,kEANiB,EAOjB,0EAPiB,EAQjB,0EARiB,EASjB,gBATiB,EAUjB,gBAViB,EAWjB,EAXiB,EAYjB,EAZiB,EAajB,sDAbiB,CAArB;;iBAeaF,IAAb,gFACqEF,QAAQK,MAAR,CAAeC,MAAf,IAAyB,EAD9F,4FAEqEN,QAAQK,MAAR,CAAeE,EAAf,IAAqB,EAF1F;iBAIaL,IAAb,CAAkB,sBAAlB;WACOD,cAAcO,MAAd,CAAqBJ,YAArB,EAAmCD,IAAnC,CAAwC,IAAxC,CAAP;CAlCJ;;ACDA,IAAMM,UAAU,cAAhB;;AAEA,IAAMC,gBAAgB;cACR,oBAAM,EADE;cAGR,oBAAM,EAHE;sBAKA,SALA;iBAML,SANK;oBAOF,SAPE;uBAQC,SARD;sBASA,SATA;iBAUL,SAVK;iBAWL,SAXK;qBAYD,SAZC;oBAaF,SAbE;yBAcG,SAdH;eAeP,SAfO;cAgBR,KAhBQ;YAiBV;gBACG,QADH;YAED;;CAnBX;;AAuBA,IAAMC,WAAW,EAACC,OAAO,OAAR,EAAiBC,SAAS,SAA1B,EAAjB;;AAEA,IAAMC,MAAM;WACD,SADC;eAEG,cAFH;WAGD,eAHC;WAID,eAJC;UAKF,cALE;UAMF,mBANE;aAOC,YAPD;cAQE,YARF;YASA,UATA;YAUA,UAVA;YAWA,UAXA;UAYF,QAZE;YAaA;CAbZ;;AAgBA,IAAMC,MAAM;cACE,QADF;aAEC,SAFD;eAGG,WAHH;aAIC,SAJD;aAKC,eALD;eAMG,iBANH;WAOD,cAPC;YAQA,mBARA;eASG,WATH;cAUE,eAVF;cAWE,eAXF;eAYG,WAZH;eAaG;CAbf;;AAgBA,aAAe,EAACN,gBAAD,EAAUO,aAAaN,aAAvB,EAAsCC,kBAAtC,EAAf;;;;;;;;;;;;;;;;;;;;;;;;;;ICzDqBM;yBAELC,MAAZ,EAAoB;;;aACXlB,OAAL,GAAekB,OAAOlB,OAAtB;aACKF,IAAL,GAAYoB,OAAOpB,IAAnB;aACKqB,aAAL,GAAqBD,OAAOC,aAA5B;aACKC,gBAAL,GAAwBF,OAAOE,gBAA/B;;aAEKC,QAAL;;;;;mCAGO;;;iBACFC,WAAL,GAAmBC,SAASC,cAAT,CAAwBT,IAAIU,OAA5B,CAAnB;iBACKH,WAAL,CAAiBI,OAAjB,GAA2B,YAAM;sBACxBC,mBAAL;sBACKR,aAAL;aAFJ;;iBAKKS,aAAL,GAAqBL,SAASC,cAAT,CAAwBT,IAAIc,SAA5B,CAArB;iBACKD,aAAL,CAAmBF,OAAnB,GAA6B,YAAM;sBAC1BI,qBAAL;sBACKV,gBAAL;aAFJ;gBAII,KAAKpB,OAAL,CAAaf,QAAjB,EAA2B;qBAClB8C,QAAL,GAAgBR,SAASC,cAAT,CAAwBT,IAAIiB,SAA5B,CAAhB;qBACKC,QAAL,GAAgBV,SAASC,cAAT,CAAwBT,IAAImB,SAA5B,CAAhB;qBACKH,QAAL,CAAcL,OAAd,GAAwB,YAAM;0BACrBS,sBAAL;0BACKrC,IAAL,CAAUb,QAAV,GAAqB,IAArB;iBAFJ;qBAIKgD,QAAL,CAAcP,OAAd,GAAwB,YAAM;0BACrBU,sBAAL;0BACKtC,IAAL,CAAUb,QAAV,GAAqB,IAArB;iBAFJ;oBAII,KAAKa,IAAL,CAAUb,QAAV,KAAuB,IAA3B,EAAiC,KAAKkD,sBAAL,GAAjC,KACK,IAAI,KAAKrC,IAAL,CAAUb,QAAV,KAAuB,IAA3B,EAAiC,KAAKmD,sBAAL,GAAjC,KACA,KAAKC,2BAAL;;;iBAGJC,mBAAL;iBACKX,mBAAL;;;;gDAGoB;iBACfY,YAAL,CAAkB,KAAKjB,WAAvB,EAAoC,KAAKM,aAAzC;;;;8CAGkB;iBACbW,YAAL,CAAkB,KAAKX,aAAvB,EAAsC,KAAKN,WAA3C;;;;iDAGqB;iBAChBiB,YAAL,CAAkB,KAAKN,QAAvB,EAAiC,KAAKF,QAAtC;;;;iDAIqB;iBAChBQ,YAAL,CAAkB,KAAKR,QAAvB,EAAiC,KAAKE,QAAtC;;;;sDAG0B;gBAClBlD,KADkB,GACR,KAAKe,IADG,CAClBf,KADkB;;gBAEtBA,QAAQ,EAAZ,EAAgB,KAAKoD,sBAAL,GAAhB,KACK,KAAKC,sBAAL;;;;qCAGII,qBAAqBC,kBAAkB;gCAC5BC,KAApB,CAA0BC,KAA1B,GAAkC,KAAK3C,OAAL,CAAa4C,WAA/C;6BACiBF,KAAjB,CAAuBC,KAAvB,GAA+B,KAAK3C,OAAL,CAAa6C,cAA5C;;;;8CAGkB;wBACNC,qBAAZ,CAAkC,KAAKxB,WAAvC,EAAoD,KAAKxB,IAAL,CAAUf,KAA9D,EAAqE,KAAKiB,OAAL,CAAaf,QAAlF;wBACY6D,qBAAZ,CAAkC,KAAKlB,aAAvC,EAAsD,KAAK9B,IAAL,CAAUd,OAAhE;;;;8CAGyB+D,MAAMC,OAAO/D,UAAU;gBAC5CA,YAAY+D,UAAU,EAA1B,EAA8BA,QAAQA,QAAQ,EAAhB;gBAC1BA,QAAQ,EAAZ,EACID,KAAKE,SAAL,GAAiB,MAAMD,KAAvB,CADJ,KAEKD,KAAKE,SAAL,GAAiBD,KAAjB;;;;;;IChFQE;yBAELC,KAAZ,EAAmBC,cAAnB,EAAmCC,aAAnC,EAAkD;;;aACzCC,SAAL,GAAiB,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,IAA3C,EAAiD,IAAjD,EAAuD,IAAvD,EAA6D,IAA7D,EAAmE,IAAnE,CAAjB;aACKtD,OAAL,GAAemD,MAAMnD,OAArB;aACKuD,IAAL,GAAYC,OAAO7C,QAAP,CAAgBE,OAA5B;aACK4C,QAAL,GAAgBvE,SAAhB;aACKiE,KAAL,GAAaA,KAAb;aACKnE,OAAL,GAAeoE,cAAf;aACKC,aAAL,GAAqBA,aAArB;;;;;kCAGM;iBACDI,QAAL,GAAgB,KAAKC,YAAL,CAAkB,KAAK1E,OAAvB,CAAhB;iBACK2E,aAAL;iBACKN,aAAL,CAAmB,KAAKrE,OAAxB,EAAiC,KAAKA,OAAL,GAAe,CAAhD;;;;kCAGM;gBACF,KAAKyE,QAAT,EAAmB;qBACVG,cAAL;qBACKH,QAAL,GAAgBvE,SAAhB;;;;;mCAIG2E,OAAO;gBACV,KAAKJ,QAAT,EACI,KAAKG,cAAL;;gBAEEE,SAASC,KAAKC,KAAL,CAAWH,QAAQ,CAAnB,IAAwB,EAAvC;iBACKJ,QAAL,GAAgB,KAAKC,YAAL,CAAkBI,MAAlB,CAAhB;iBACKH,aAAL;iBACK3E,OAAL,GAAe8E,MAAf;iBACKT,aAAL,CAAmB,KAAKrE,OAAxB,EAAiC6E,KAAjC;;;;qCAGSC,QAAQ;mBACTA,SAAS,CAAT,KAAe,CAAhB,GAAqB,KAAKX,KAAL,CAAWc,UAAX,CAAsBH,SAAS,CAA/B,CAArB,GAAyD,KAAKX,KAAL,CAAWe,eAAX,CAA2BJ,MAA3B,CAAhE;;;;wCAGY;gBACR,KAAKK,OAAL,EAAJ,EAAoB;qBACXV,QAAL,CAAcW,SAAd,CAAwBC,GAAxB,CAA4BvD,IAAI2C,QAAhC;;;iBAGCA,QAAL,CAAcf,KAAd,CAAoB4B,UAApB,GAAiC,KAAKtE,OAAL,CAAauE,SAA9C;iBACKd,QAAL,CAAcf,KAAd,CAAoBC,KAApB,GAA4B,YAA5B;;;;yCAGa;gBACT,KAAKwB,OAAL,EAAJ,EAAoB;qBACXV,QAAL,CAAcW,SAAd,CAAwBI,MAAxB,CAA+B1D,IAAI2C,QAAnC;;;iBAGCA,QAAL,CAAcf,KAAd,CAAoB4B,UAApB,GAAiC,aAAjC;iBACKb,QAAL,CAAcf,KAAd,CAAoBC,KAApB,GAA4B,KAAK3C,OAAL,CAAayE,cAAzC;;;;kCAGM;mBACC,KAAKtB,KAAL,CAAWe,eAAX,CAA2BQ,OAA3B,CAAmC,KAAKjB,QAAxC,IAAoD,CAAC,CAA5D;;;;;;IC3DakB;uBAELxB,KAAZ,EAAmByB,YAAnB,EAAiCC,WAAjC,EAA8C;;;aACrCvB,SAAL,GAAiB,CAAC,IAAD,EAAO,GAAP,EAAY,GAAZ,EAAiB,GAAjB,EAAsB,GAAtB,EAA2B,GAA3B,EAAgC,GAAhC,EAAqC,GAArC,EAA0C,GAA1C,EAA+C,GAA/C,EAAoD,IAApD,EAA0D,IAA1D,CAAjB;aACKwB,cAAL,GAAsB,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,IAA3C,EAAiD,IAAjD,EAAuD,IAAvD,EAA6D,IAA7D,EAAmE,IAAnE,CAAtB;aACKvB,IAAL,GAAYC,OAAO7C,QAAP,CAAgBE,OAA5B;aACK4C,QAAL,GAAgBvE,SAAhB;aACKc,OAAL,GAAemD,MAAMnD,OAArB;;aAEKmD,KAAL,GAAaA,KAAb;aACKpE,KAAL,GAAa6F,YAAb;aACKC,WAAL,GAAmBA,WAAnB;;;;;kCAGM;;gBAEF,KAAK1B,KAAL,CAAW4B,cAAX,KAA8B,IAAlC,EACI,KAAK5B,KAAL,CAAW4B,cAAX,CAA0BrC,KAA1B,CAAgCsC,OAAhC,GAA0C,OAA1C;gBACEC,eAAe,KAAKlG,KAAL,GAAa,EAAb,IAAmB,KAAKA,KAAL,KAAe,CAAvD;gBACMmG,aAAa,KAAKnG,KAAL,GAAa,EAAhC;gBACIoG,SAAS,KAAKhC,KAAL,CAAWgC,MAAxB;gBACI,KAAKnF,OAAL,CAAaf,QAAb,IAAyB,CAACgG,YAA9B,EAA4C,KAAKxB,QAAL,GAAgB,KAAKN,KAAL,CAAWc,UAAX,CAAsBiB,UAAtB,CAAhB,CAA5C,KACK;qBACIzB,QAAL,GAAgBwB,eACZ,KAAK9B,KAAL,CAAWc,UAAX,CAAsBiB,UAAtB,CADY,GAEZ,KAAK/B,KAAL,CAAWiC,eAAX,CAA2BF,UAA3B,CAFJ;yBAGSD,eAAgBE,MAAhB,GAAyBA,SAAS,EAA3C;;iBAECxB,aAAL;;iBAEKkB,WAAL,CAAiB,KAAK9F,KAAtB,EAA6BmG,aAAa,EAA1C,EAA8CC,MAA9C;;;;kCAGM;gBACF,KAAKhC,KAAL,CAAW4B,cAAX,KAA8B,IAAlC,EACI,KAAK5B,KAAL,CAAW4B,cAAX,CAA0BrC,KAA1B,CAAgCsC,OAAhC,GAA0C,MAA1C;gBACA,KAAKvB,QAAT,EAAmB;qBACVG,cAAL;qBACKH,QAAL,GAAgBvE,SAAhB;;;;;mCAIG2E,OAAOwB,MAAM;gBAChB,KAAK5B,QAAT,EACI,KAAKG,cAAL;;gBAEE0B,QAAQvB,KAAKC,KAAL,CAAWH,QAAQ,EAAnB,IAAyB,EAAvC;iBACKJ,QAAL,GAAgB,CAAC4B,SAAS,KAAKlC,KAAL,CAAW4B,cAApB,IACV,KAAK5B,KAAL,CAAW4B,cAAX,KAA6B7F,SADnB,GAEX,KAAKiE,KAAL,CAAWiC,eAFA,GAGX,KAAKjC,KAAL,CAAWc,UAHD,EAGaqB,KAHb,CAAhB;;iBAKK3B,aAAL;iBACK5E,KAAL,GAAaK,SAAS,KAAKqE,QAAL,CAAcR,SAAvB,CAAb;gBACMsC,gBAAgBxB,KAAKC,KAAL,CAAWH,QAAQ,EAAnB,IAAyB,EAA/C;;iBAEKgB,WAAL,CAAiB,KAAK9F,KAAtB,EAA6BwG,aAA7B,EACIF,SAAS,KAAKlC,KAAL,CAAW4B,cAApB,IAAsC,KAAK5B,KAAL,CAAW4B,cAAX,KAA6B7F,SAAnE,GAA+E,KAAKiE,KAAL,CAAWgC,MAAX,GAAoB,EAAnG,GAAwG,KAAKhC,KAAL,CAAWgC,MADvH;;;;wCAIY;iBACP1B,QAAL,CAAcf,KAAd,CAAoB4B,UAApB,GAAiC,KAAKtE,OAAL,CAAauE,SAA9C;iBACKd,QAAL,CAAcf,KAAd,CAAoBC,KAApB,GAA4B,SAA5B;;;;yCAGa;iBACRc,QAAL,CAAcf,KAAd,CAAoB4B,UAApB,GAAiC,aAAjC;iBACKb,QAAL,CAAcf,KAAd,CAAoBC,KAApB,GAA4B,KAAK6C,OAAL,KACtB,KAAKxF,OAAL,CAAayF,mBADS,GAEtB,KAAKzF,OAAL,CAAayE,cAFnB;;;;kCAKM;mBACCiB,MAAMC,IAAN,CAAW,KAAKxC,KAAL,CAAWiC,eAAtB,EAAuCV,OAAvC,CAA+C,KAAKjB,QAApD,IAAgE,CAAC,CAAxE;;;;;;AC3ER,SAASmC,SAAT,CAAmB/B,KAAnB,EAA0B;WACfA,SAASE,KAAK8B,EAAL,GAAU,GAAnB,CAAP;;;AAGJ,SAASC,SAAT,CAAmBjC,KAAnB,EAA0B;WACfA,SAAS,MAAME,KAAK8B,EAApB,CAAP;;;AAGJ,SAASE,iBAAT,CAA2BC,KAA3B,EAAkCC,MAAlC,EAA0C;QAChCC,OAAOD,OAAOE,qBAAP,EAAb;WACO;WACAH,MAAMI,OAAN,GAAgBF,KAAKG,IADrB;WAEAL,MAAMM,OAAN,GAAgBJ,KAAKK;KAF5B;;;AAMJ,SAASC,KAAT,CAAeC,CAAf,EAAkB;WACP,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmB;mBACvBA,OAAX,EAAoBF,CAApB;KADG,CAAP;;;AAKJC,QAAQF,KAAR,GAAgB,UAAUI,EAAV,EAAcH,CAAd,EAAiB;QACzB,CAACA,CAAL,EAAQ;YACAG,EAAJ;aACK,cAAY,EAAjB;;WAGGJ,MAAMC,CAAN,EAASI,IAAT,CAAcD,EAAd,CAAP;CANJ;;AASAF,QAAQI,SAAR,CAAkBN,KAAlB,GAA0B,UAAUI,EAAV,EAAcH,CAAd,EAAiB;WAChC,KAAKI,IAAL,CAAU,YAAY;eAClBH,QAAQF,KAAR,CAAcI,EAAd,EAAkBH,CAAlB,CAAP;KADG,CAAP;CADJ;;AAMA,YAAe,EAACb,oBAAD,EAAYE,oBAAZ,EAAuBC,oCAAvB,EAAf;;IClCqBgB;8BAELC,SAAZ,EAAuBjC,cAAvB,EAAuC/E,OAAvC,EAAgD;;;aACvCgH,SAAL,GAAiBA,SAAjB;aACKjC,cAAL,GAAsBA,cAAtB;aACKkC,IAAL,GAAY,EAAZ;aACKC,MAAL,GAAc,EAAd;aACKlH,OAAL,GAAeA,OAAf;;;;;+BAGGiE,YAAYmB,iBAAiBlB,iBAAiBiD,MAAM;6BACtCC,QAAjB,CAA0BnD,UAA1B,EAAsC,KAAK+C,SAA3C,EAAsD;uBAAQK,KAAKjD,SAAL,CAAeC,GAAf,CAAmBvD,IAAIwG,IAAvB,CAAR;aAAtD;gBACI,CAAC,KAAKtH,OAAL,CAAaf,QAAlB,EAA4B;iCACPmI,QAAjB,CAA0BhC,eAA1B,EAA2C,KAAKL,cAAhD,EAAgE,UAACsC,IAAD,EAAOE,CAAP,EAAa;yBACpEnD,SAAL,CAAeC,GAAf,CAAmBvD,IAAIwG,IAAvB,EAA6BxG,IAAI0G,KAAjC;yBACKvE,SAAL,GAAiBkE,KAAKrC,cAAL,CAAoByC,CAApB,CAAjB;iBAFJ;;;iBAMC,IAAIA,IAAI,CAAb,EAAgBA,IAAI,EAApB,EAAwBA,GAAxB,EAA6B;oBACnBF,OAAO9F,SAASkG,aAAT,CAAuB,MAAvB,CAAb;qBACKrD,SAAL,CAAeC,GAAf,CAAmBvD,IAAI4G,KAAvB;gCACgBxH,IAAhB,CAAqBmH,IAArB;qBACKL,SAAL,CAAeW,WAAf,CAA2BN,IAA3B;;;;;sCAaMpD,YAAYmB,iBAAiBlB,iBAAiB;iBACnD+C,IAAL,CAAUW,KAAV,GAAkB,KAAKZ,SAAL,CAAea,WAAjC;iBACKZ,IAAL,CAAUa,MAAV,GAAmB,KAAKd,SAAL,CAAee,YAAlC;iBACKb,MAAL,CAAYc,CAAZ,GAAgB,KAAKf,IAAL,CAAUW,KAAV,GAAkB,CAAlC;iBACKV,MAAL,CAAYe,CAAZ,GAAgB,KAAKhB,IAAL,CAAUa,MAAV,GAAmB,CAAnC;iBACKI,WAAL,GAAmB,KAAKjB,IAAL,CAAUW,KAAV,GAAkB,CAAlB,GAAsB,EAAzC;;6BAEiBO,eAAjB,CAAiC,KAAKjB,MAAL,CAAYc,CAA7C,EAAgD,KAAKd,MAAL,CAAYe,CAA5D,EAA+D,KAAKC,WAApE,EAAiFjE,UAAjF;gBACI,CAAC,KAAKjE,OAAL,CAAaf,QAAlB,EAA4B;oBAClBmJ,aAAa,KAAKrD,cAAL,CAAoB8C,WAAvC;oBACMQ,cAAc,KAAKtD,cAAL,CAAoBgD,YAAxC;oBACMO,UAAUF,aAAa,CAA7B;oBACMG,UAAUF,cAAc,CAA9B;iCACiBF,eAAjB,CAAiCG,OAAjC,EAA0CC,OAA1C,EAAmD,KAAKL,WAAL,GAAmB,EAAtE,EAA0E9C,eAA1E;;6BAEa+C,eAAjB,CAAiC,KAAKjB,MAAL,CAAYc,CAA7C,EAAgD,KAAKd,MAAL,CAAYe,CAA5D,EAA+D,KAAKC,WAApE,EAAiFhE,eAAjF;;;;iCAxBYD,YAAY+C,WAAWwB,KAAK;iBACnC,IAAIjB,IAAI,CAAb,EAAgBA,IAAI,EAApB,EAAwBA,GAAxB,EAA6B;oBACnBF,OAAO9F,SAASkG,aAAT,CAAuB,MAAvB,CAAb;oBACIJ,IAAJ,EAAUE,CAAV;2BACWrH,IAAX,CAAgBmH,IAAhB;0BACUM,WAAV,CAAsBN,IAAtB;;;;;wCAsBeiB,SAASC,SAASpD,QAAQhC,OAAO;gBAC9CsF,eAAe,MAAMtF,MAAMhE,MAAjC;iBACK,IAAIoI,IAAI,CAAb,EAAgBA,IAAIpE,MAAMhE,MAA1B,EAAkCoI,GAAlC,EAAuC;;oBAE7B1D,QAAQ6E,MAAM9C,SAAN,CAAgB2B,IAAIkB,YAApB,CAAd;oBACMnB,OAAOnE,MAAMoE,CAAN,CAAb;oBACMoB,YAAYrB,KAAKO,WAAvB;oBACMe,aAAatB,KAAKS,YAAxB;;qBAEKrF,KAAL,CAAW2D,IAAX,GAAoBiC,UAAUvE,KAAK8E,GAAL,CAAShF,KAAT,IAAkBsB,MAA7B,GAAuCwD,YAAY,CAApD,GAAyD,IAA3E;qBACKjG,KAAL,CAAWoG,MAAX,GAAsBP,UAAUxE,KAAKgF,GAAL,CAASlF,KAAT,IAAkBsB,MAA7B,GAAuCyD,aAAa,CAArD,GAA0D,IAA9E;;;;;;;IC7DSI;uBAELhJ,OAAZ,EAAqBiJ,WAArB,EAAkCC,YAAlC,EAAgD;;;aACvClJ,OAAL,GAAeA,OAAf;aACKF,IAAL,GAAYmJ,WAAZ;aACKC,YAAL,GAAoBA,YAApB;aACKC,WAAL,GAAmB,KAAnB;aACKlF,UAAL,GAAkB,EAAlB;aACKmB,eAAL,GAAuB,EAAvB;aACKlB,eAAL,GAAuB,EAAvB;aACK+C,IAAL,GAAY,EAAZ;aACKC,MAAL,GAAc,EAAd;;aAEKkC,SAAL;aACKC,aAAL,CAAmBJ,WAAnB;aACKK,UAAL,CAAgBtJ,OAAhB;;aAEKuJ,SAAL,CAAepG,KAAf,CAAqBgC,MAArB,GAA8B,KAAK+C,WAAnC;;aAEKsB,WAAL,GAAmB,KAAKD,SAAxB;aACKE,eAAL,CAAqB,KAAKD,WAAL,CAAiBlG,SAAtC;;;;;oCAGQ;;;iBACH0D,SAAL,GAAiBzF,SAASC,cAAT,CAAwBT,IAAIN,OAA5B,CAAjB;iBACKsE,cAAL,GAAuB,KAAK/E,OAAL,CAAaf,QAAd,GAA0B,IAA1B,GAAiCsC,SAASC,cAAT,CAAwBT,IAAI2I,OAA5B,CAAvD;iBACKC,YAAL,GAAoBpI,SAASC,cAAT,CAAwBT,IAAI6I,MAA5B,CAApB;;iBAEK5C,SAAL,CAAe6C,WAAf,GAA6B;uBAAM,MAAKV,WAAL,GAAmB,IAAzB;aAA7B;iBACKnC,SAAL,CAAe8C,SAAf,GAA2B,YAAM;sBAAMX,WAAL,GAAmB,KAAnB;sBACzBY,eAAL;aADJ;;iBAIKJ,YAAL,CAAkBG,SAAlB,GAA8B,UAACE,CAAD;uBAAOA,EAAEC,eAAF,EAAP;aAA9B;iBACKN,YAAL,CAAkBO,WAAlB,GAAgC,UAACF,CAAD;uBAAOA,EAAEC,eAAF,EAAP;aAAhC;iBACKN,YAAL,CAAkBjI,OAAlB,GAA4B,UAACsI,CAAD;uBAAOA,EAAEC,eAAF,EAAP;aAA5B;;iBAEKjD,SAAL,CAAekD,WAAf,GAA6B,UAACF,CAAD;uBAAO,MAAKG,UAAL,CAAgBH,CAAhB,EAAmB,KAAnB,EAA0B,MAAKhD,SAA/B,CAAP;aAA7B;iBACKA,SAAL,CAAetF,OAAf,GAAyB,UAACsI,CAAD;uBAAO,MAAKG,UAAL,CAAgBH,CAAhB,EAAmB,IAAnB,EAAyB,MAAKhD,SAA9B,CAAP;aAAzB;;gBAEI,CAAC,KAAKhH,OAAL,CAAaf,QAAlB,EAA4B;qBACnB8F,cAAL,CAAoBmF,WAApB,GAAkC,UAACF,CAAD;2BAAO,MAAKG,UAAL,CAAgBH,CAAhB,EAAmB,KAAnB,EAA0B,MAAKjF,cAA/B,CAAP;iBAAlC;qBACKA,cAAL,CAAoBrD,OAApB,GAA8B,UAACsI,CAAD;2BAAO,MAAKG,UAAL,CAAgBH,CAAhB,EAAmB,IAAnB,EAAyB,MAAKjF,cAA9B,CAAP;iBAA9B;;;;;sCAIMkE,aAAa;;;iBAClBmB,WAAL,GAAmB,IAAIlH,WAAJ,CAAgB;yBACtB,KAAKlD,OADiB;4BAEnB,KAAKiE,UAFc;iCAGd,KAAKC;aAHP,EAIhB+E,YAAYjK,OAJI,EAIK,UAACA,OAAD,EAAU6E,KAAV;uBAAoB,OAAKR,aAAL,CAAmBrE,OAAnB,EAA4B6E,KAA5B,CAApB;aAJL,CAAnB;;iBAMK0F,SAAL,GAAiB,IAAI5E,SAAJ,CAAc;yBAClB,KAAK3E,OADa;iCAEV,KAAKoF,eAFK;4BAGf,KAAKnB,UAHU;gCAIX,KAAKc;aAJR,EAKdkE,YAAYlK,KALE,EAKK,UAACA,KAAD,EAAQ8E,KAAR,EAAesB,MAAf;uBAA0B,OAAKN,WAAL,CAAiB9F,KAAjB,EAAwB8E,KAAxB,EAA+BsB,MAA/B,CAA1B;aALL,CAAjB;;;;kCAQM;iBACDqE,WAAL,CAAiBa,OAAjB;;;;qCAGS;gBACHC,mBAAmB,IAAIvD,gBAAJ,CAAqB,KAAKC,SAA1B,EAAqC,KAAKjC,cAA1C,EAA0D,KAAK/E,OAA/D,CAAzB;6BACiBuK,MAAjB,CAAwB,KAAKtG,UAA7B,EAAyC,KAAKmB,eAA9C,EAA+D,KAAKlB,eAApE,EAAqF,KAAKqF,SAA1F;6BACiBiB,aAAjB,CAA+B,KAAKvG,UAApC,EAAgD,KAAKmB,eAArD,EAAsE,KAAKlB,eAA3E;;iBAEK+C,IAAL,GAAYqD,iBAAiBrD,IAA7B;iBACKC,MAAL,GAAcoD,iBAAiBpD,MAA/B;iBACKgB,WAAL,GAAmBoC,iBAAiBpC,WAApC;;;;mCAGOlC,OAAOmD,aAAa9D,MAAM;gBAC7B,EAAE8D,eAAe,KAAKA,WAAtB,CAAJ,EACI;gBACEsB,QAAQ/B,MAAM3C,iBAAN,CAAwBC,KAAxB,EAA+B,KAAKgB,SAApC,CAAd;gBACMgB,IAAIyC,MAAMzC,CAAN,GAAU,KAAKd,MAAL,CAAYc,CAAhC;gBACMC,IAAI,KAAKf,MAAL,CAAYe,CAAZ,GAAgBwC,MAAMxC,CAAhC;gBACIpE,QAAQ,KAAK6E,MAAM5C,SAAN,CAAgB/B,KAAK2G,IAAL,CAAUzC,IAAID,CAAd,CAAhB,CAAjB;gBACIA,IAAI,CAAR,EAAWnE,SAAS,GAAT;;iBAEN2F,WAAL,CAAiBW,UAAjB,CAA4BtG,KAA5B,EAAmCwB,IAAnC;kBACM4E,eAAN;;;;wCAGYU,OAAO;iBACd,IAAIpD,IAAI,CAAb,EAAgBA,IAAI,KAAKtD,UAAL,CAAgB9E,MAApC,EAA4CoI,GAA5C;qBACStD,UAAL,CAAgBsD,CAAhB,EAAmBtE,SAAnB,GAA+B0H,MAAMpD,CAAN,CAA/B;;;;;2CAGWiB,KAAK;eACjBoC,OAAH,CAAWC,IAAX,CAAgB,KAAK5G,UAArB,EAAiC;uBAAKuE,IAAIsC,CAAJ,CAAL;aAAjC;;;;sCAGU9L,SAAS6E,OAAO;iBACrB/D,IAAL,CAAUd,OAAV,GAAoBA,OAApB;iBACK+L,uBAAL,CAA6BlH,KAA7B,EAAoC,KAAKqE,WAAzC;iBACKgB,YAAL,CAAkB,KAAKpJ,IAAvB,EAA6B0D,OAAO7C,QAAP,CAAgBE,OAA7C;;;;oCAGQ9B,OAAO8E,OAAOsB,QAAQ;iBACzBrF,IAAL,CAAUf,KAAV,GAAkBA,KAAlB;iBACKgM,uBAAL,CAA6BlH,KAA7B,EAAoCsB,MAApC;iBACK+D,YAAL,CAAkB,KAAKpJ,IAAvB,EAA6B0D,OAAO7C,QAAP,CAAgBC,KAA7C;;;;gDAGoBiD,OAAgC;gBAAzBoD,IAAyB,uEAAlB,KAAKiB,WAAa;;iBAC/CyB,YAAL,CAAkBjH,KAAlB,CAAwBsI,SAAxB,gBAA8CnH,QAAQ,EAAtD;iBACK8F,YAAL,CAAkBjH,KAAlB,CAAwBkF,KAAxB,GAAgCX,OAAO,IAAvC;;;;wCAGY;iBACPmD,WAAL,CAAiBa,OAAjB;iBACKC,UAAL,CAAgB,KAAK3B,SAArB;;;;0CAGc;iBACTA,SAAL,CAAe0B,OAAf;iBACKC,UAAL,CAAgB,KAAKd,WAArB;;;;mCAGOjD,MAAM;;;gBACT,KAAKqC,WAAL,KAAqBrC,IAAzB,EAA+B;qBACtBgE,kBAAL,CAAwB;2BAAKL,EAAE1G,SAAF,CAAYC,GAAZ,CAAgBvD,IAAIsK,OAApB,CAAL;iBAAxB;qBACKzB,YAAL,CAAkBvF,SAAlB,CAA4BC,GAA5B,CAAgCvD,IAAIsK,OAApC;wBACQ5E,KAAR,CAAc,YAAM;2BACX2E,kBAAL,CAAwB;+BAAKL,EAAE1G,SAAF,CAAYI,MAAZ,CAAmB1D,IAAIsK,OAAvB,CAAL;qBAAxB;2BACKzB,YAAL,CAAkBvF,SAAlB,CAA4BI,MAA5B,CAAmC1D,IAAIsK,OAAvC;2BACK3B,eAAL,CAAqBtC,KAAK7D,SAA1B;2BACKkG,WAAL,GAAmBrC,IAAnB;2BACKgE,kBAAL,CAAwB;+BAAK,OAAKvH,cAAL,CAAoBkH,CAApB,CAAL;qBAAxB;yBACKT,OAAL;iBANJ,EAOG,GAPH;;;;;uCAWOS,GAAG;cACZ1G,SAAF,CAAYI,MAAZ,CAAmB1D,IAAI2C,QAAvB;cACEf,KAAF,CAAQ4B,UAAR,GAAqB,aAArB;cACE5B,KAAF,CAAQC,KAAR,GAAgB,KAAK3C,OAAL,CAAayE,cAA7B;;;;;;IC/Ia4G;mBAELrL,OAAZ,EAAqBF,IAArB,EAA2B;;;aAClBE,OAAL,GAAeA,OAAf;;aAEKqB,QAAL;aACKvB,IAAL,GAAYA,IAAZ;aACKwL,YAAL;;;;;mCAGO;;;iBACFC,YAAL,GAAoBhK,SAASC,cAAT,CAAwBT,IAAIyK,QAA5B,CAApB;iBACKD,YAAL,CAAkB7J,OAAlB,GAA4B,YAAM;oBACxB5B,OAAO,MAAKA,IAAlB;qBACK2L,SAAL,GAAiB;2BAAMC,WAAW5L,IAAX,EAAiB,MAAKE,OAAL,CAAaf,QAA9B,CAAN;iBAAjB;sBACKe,OAAL,CAAa2L,QAAb,CAAsB7L,IAAtB;sBACM8L,OAAN;aAJJ;;iBAOKC,YAAL,GAAoBtK,SAASC,cAAT,CAAwBT,IAAI+K,QAA5B,CAApB;iBACKD,YAAL,CAAkBnK,OAAlB,GAA4B,YAAM;sBACzB1B,OAAL,CAAa+L,QAAb;sBACMH,OAAN;aAFJ;;;;uCAMW;;;iBACNI,MAAL,GAAc,IAAI/K,WAAJ,CAAgB;yBACjB,KAAKjB,OADY;sBAEpB,KAAKF,IAFe;+BAGX;2BAAM,OAAKmM,aAAL,EAAN;iBAHW;kCAIR;2BAAM,OAAKlC,eAAL,EAAN;;aAJR,CAAd;iBAMKmC,SAAL,GAAiB,IAAIlD,SAAJ,CAAc,KAAKhJ,OAAnB,EAA4B,KAAKF,IAAjC,EAAuC,UAACA,IAAD,EAAOyD,IAAP;uBAAgB,OAAK2F,YAAL,CAAkBpJ,IAAlB,EAAwByD,IAAxB,CAAhB;aAAvC,CAAjB;;;;kCAGM;iBACD2I,SAAL,CAAeC,OAAf;;;;wCAGY;iBACPD,SAAL,CAAeD,aAAf;;;;0CAGc;iBACTC,SAAL,CAAenC,eAAf;;;;qCAGSjK,MAAMyD,MAAM;iBAChBzD,IAAL,GAAYA,IAAZ;iBACKkM,MAAL,CAAYlM,IAAZ,GAAmBA,IAAnB;iBACKkM,MAAL,CAAY1J,mBAAZ;gBACIiB,SAASC,OAAO7C,QAAP,CAAgBE,OAA7B,EACI,KAAKmL,MAAL,CAAYlK,qBAAZ;;;;kCAIS;qBACJsK,IAAT,CAAcC,WAAd,CAA0B9K,SAASC,cAAT,CAAwBgC,OAAO/C,OAA/B,CAA1B;;;;;;AC7DO,SAAS6L,WAAT,CAAqBtM,OAArB,EAA8B;aAChCwB,cAAT,CAAwBT,IAAIwL,QAA5B,EAAsC7J,KAAtC,CAA4C4B,UAA5C,GAAyDtE,QAAQwM,gBAAjE;aACShL,cAAT,CAAwBT,IAAIwL,QAA5B,EAAsC7J,KAAtC,CAA4CC,KAA5C,GAAoD3C,QAAQ4C,WAA5D;aACSpB,cAAT,CAAwBT,IAAI0L,SAA5B,EAAuC/J,KAAvC,CAA6C4B,UAA7C,GAA0DtE,QAAQ0M,iBAAlE;aACSlL,cAAT,CAAwBT,IAAIN,OAA5B,EAAqCiC,KAArC,CAA2C4B,UAA3C,GAAwDtE,QAAQ2M,eAAhE;aACSnL,cAAT,CAAwBT,IAAI6I,MAA5B,EAAoClH,KAApC,CAA0C4B,UAA1C,GAAuDtE,QAAQuE,SAA/D;aACS/C,cAAT,CAAwBT,IAAI6L,KAA5B,EAAmClK,KAAnC,CAAyC4B,UAAzC,GAAsDtE,QAAQuE,SAA9D;aACS/C,cAAT,CAAwBT,IAAI8L,SAA5B,EAAuCnK,KAAvC,CAA6C4B,UAA7C,GAA0DtE,QAAQ8M,gBAAlE;aACStL,cAAT,CAAwBT,IAAIyK,QAA5B,EAAsC9I,KAAtC,CAA4CC,KAA5C,GAAoD3C,QAAQ+M,WAA5D;aACSvL,cAAT,CAAwBT,IAAI+K,QAA5B,EAAsCpJ,KAAtC,CAA4CC,KAA5C,GAAoD3C,QAAQgN,WAA5D;;gBAEYlM,IAAImM,SAAhB,EAA2BjN,QAAQyE,cAAnC;gBACY3D,IAAI0G,KAAhB,EAAuBxH,QAAQyF,mBAA/B;gBACY3E,IAAI4G,KAAhB,EAAuB1H,QAAQuE,SAA/B,EAA0C,aAA1C;;;AAGJ,SAAS2I,WAAT,CAAqBC,SAArB,EAAgCxK,KAAhC,EAA2D;QAApByK,QAAoB,uEAAT,OAAS;;QACjDjK,QAAQuC,MAAMC,IAAN,CAAWpE,SAAS8L,sBAAT,CAAgCF,SAAhC,CAAX,CAAd;;;;;;6BACmBhK,KAAnB;gBAAWmE,IAAX;;iBACS5E,KAAL,CAAW0K,QAAX,IAAuBzK,KAAvB;;;;;;;;;;;;;;;;;;ACdO,SAAS2K,UAAT,GAAiC;QAAbpM,MAAa,uEAAJ,EAAI;;;QAEtClB,UAAUuN,OAAOC,MAAP,CAAc,EAAd,EAAkBhK,OAAOxC,WAAzB,EAAsCE,MAAtC,CAAhB;cACUlB,OAAV;QACMF,OAAO2N,YAAQzN,QAAQF,IAAhB,EAAsBE,QAAQf,QAA9B,CAAb;;QAEMyO,QAAQ,IAAIrC,KAAJ,CAAUrL,OAAV,EAAmBF,IAAnB,CAAd;gBACYE,OAAZ;UACMmM,OAAN;;;AAIJ,SAASwB,SAAT,CAAmB3N,OAAnB,EAA4B;QACpBuB,SAASC,cAAT,CAAwBgC,OAAO/C,OAA/B,CAAJ,EACI,MAAMmN,MAAM,0DAAN,CAAN;;QAEEC,WAAWtM,SAASkG,aAAT,CAAuB,KAAvB,CAAjB;aACSqG,EAAT,GAActK,OAAO/C,OAArB;aACSsN,SAAT,GAAqBC,UAAUhO,OAAV,CAArB;aACSoM,IAAT,CAAczE,WAAd,CAA0BkG,QAA1B;;;ACvBJ,YAAe;gBACC,uBAAC3M,MAAD;eAAYoM,WAAWpM,MAAX,CAAZ;KADD;YAEH,gBAACpB,IAAD;eAAU4L,WAAW5L,IAAX,CAAV;;CAFZ;;;;;;;;"} \ No newline at end of file diff --git a/dist/index.css b/dist/index.css index 1688271..416770a 100644 --- a/dist/index.css +++ b/dist/index.css @@ -229,4 +229,21 @@ .g-pointer:hover { cursor: pointer; +} + +.content-meridiem { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + margin-left: 16px; +} +.item-meridiem { + font-size: 24px; } \ No newline at end of file From 14f8754cd30deba899ea88332719f07ffc20d007 Mon Sep 17 00:00:00 2001 From: cronopio Date: Tue, 3 Sep 2019 10:34:17 -0500 Subject: [PATCH 13/13] Added intructions to meridiem mode and own text labels for buttons --- README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c2a46d..2f015a6 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,12 @@ defaultConfig = { clockBackground: "#CFD8DC", clockItemColor: "#212121", clockItemInnerColor: "#212121", - handColor: "#1976D2" + handColor: "#1976D2", + meridiem: false, + labels: { + cancel:"Cancel", + ok:"Ok", + } }; ```` @@ -89,3 +94,18 @@ import Timepicker from "path/to/grudus-timepicker/dist/grudus-timepicker.js"; ```` You can set initial time by passing `time` field in argument. `time` may be a `Date` object, an object `{hours: 12, minutes: 44}` or a string in format `HH:mm`. If you want to learn more, visit [customization section](https://grudus.github.io/Timepicker/#customization) + +## Additional options + +You can use `24h/12h` mode using the `meridiem` config. Set to true to use AM/PM or leave it as false to use 24hrs. + +You can override buttons text using `label` config. As example I want labels on spanish so I can set: + +``` +{ + labels: { + cancel:"Cancelar", + ok:"Aceptar", + } +} +``` \ No newline at end of file