{"version":3,"file":"material-datetime-picker.js","sources":["../lib/template/datepicker.template.js","../lib/template/scrim.template.js","../lib/js/events.js","../lib/js/index.js"],"sourcesContent":["export default () => `\n
\n`;\n","export default ({ styles }) => `\n\n`;\n","//\n// basic event triggering and listening\n//\nexport default class Events {\n constructor() {\n this._events = {\n '*': []\n };\n }\n\n trigger(eventName, evtData) {\n eventName.split(' ').forEach((evtName) => {\n // trigger a global event event\n this._events['*'].forEach(evt => evt.fn.call(evt.scope, evtName, evtData));\n // if there are any listeners to this event\n // then fire their handlers\n if (this._events[evtName]) {\n this._events[evtName].forEach((evt) => {\n evt.fn.call(evt.scope, evtData);\n });\n }\n });\n return this;\n }\n\n on(eventName, fn, scope) {\n if (!this._events[eventName]) this._events[eventName] = [];\n this._events[eventName].push({\n eventName,\n fn,\n scope: scope || this\n });\n return this;\n }\n\n off(eventName, fn) {\n if (!this._events[eventName]) return this;\n if (!fn) {\n this._events[eventName] = [];\n }\n this._events[eventName] = this._events[eventName].filter(evt => evt.fn !== fn);\n return this;\n }\n\n once(eventName, fn, scope) {\n const func = () => {\n fn.call(scope, eventName, fn, scope);\n this.off(eventName, func);\n };\n return this.on(eventName, func, scope);\n }\n}\n","import rome from 'rome';\nimport moment from 'moment';\n\nimport popupTemplate from '../template/datepicker.template';\nimport scrimTemplate from '../template/scrim.template';\nimport Events from './events';\n\nimport '../scss/material-datetime-picker.scss';\n\nconst ESC_KEY = 27;\n\nconst prefix = 'c-datepicker';\nconst defaults = () => ({\n default: moment().startOf('hour'),\n // allow the user to override all the classes\n // used for styling the calendar\n styles: {\n scrim: 'c-scrim',\n back: `${prefix}__back`,\n container: `${prefix}__calendar`,\n date: `${prefix}__date`,\n dayBody: `${prefix}__days-body`,\n dayBodyElem: `${prefix}__day-body`,\n dayConcealed: `${prefix}__day--concealed`,\n dayDisabled: `${prefix}__day--disabled`,\n dayHead: `${prefix}__days-head`,\n dayHeadElem: `${prefix}__day-head`,\n dayRow: `${prefix}__days-row`,\n dayTable: `${prefix}__days`,\n month: `${prefix}__month`,\n next: `${prefix}__next`,\n positioned: `${prefix}--fixed`,\n selectedDay: `${prefix}__day--selected`,\n selectedTime: `${prefix}__time--selected`,\n time: `${prefix}__time`,\n timeList: `${prefix}__time-list`,\n timeOption: `${prefix}__time-option`,\n clockNum: `${prefix}__clock__num`\n },\n // format to display in the input, or set on the element\n format: 'DD/MM/YY',\n // the container to append the picker\n container: document.body,\n // allow any dates\n dateValidator: undefined\n});\n\nclass DateTimePicker extends Events {\n constructor(options = {}) {\n super();\n const styles = Object.assign(defaults().styles, options.styles);\n this.options = Object.assign(defaults(), options);\n this.options.styles = styles;\n\n // listen to any event\n this.on('*', (evtName, evtData) => {\n if (this.options.el) {\n // if there is a custom element, fire a real dom\n // event on that now\n const event = new CustomEvent(evtName, this, evtData);\n this.options.el.dispatchEvent(event);\n }\n });\n }\n\n // intialize the rom calendar with our default date and\n // style options\n initializeRome(container, validator) {\n const onData = this.onChangeDate.bind(this);\n\n return rome(container, {\n styles: this.options.styles,\n time: false,\n dateValidator: validator,\n initialValue: this.value\n }).on('data', onData);\n }\n\n // called to open the picker\n open() {\n const scrimEl = scrimTemplate(this.options);\n _appendTemplate(document.body, scrimEl);\n _appendTemplate(this.options.container, popupTemplate());\n this.pickerEl = this.options.container.querySelector(`.${prefix}`);\n this.scrimEl = document.body.querySelector(`.${this.options.styles.scrim}`);\n this.amToggleEl = this.$('.c-datepicker__clock--am');\n this.pmToggleEl = this.$('.c-datepicker__clock--pm');\n\n if (!this.value) {\n // TODO hack\n // set/setDate/setTime need refactoring to have single concerns\n // (set: set the value; setDate/setTime rename to renderDate/renderTime\n // and deal with updating the view only).\n // For now this allows us to set the default time using the same quantize\n // rules as setting the date explicitly. Setting this.value meets setTime|Date's\n // expectation that we have a value, and `0` guarantees that we will detect\n this.value = moment(0);\n this.setDate(this.options.default);\n this.setTime(this.options.default);\n } else {\n this.setDate(this.value);\n this.setTime(this.value);\n }\n\n this.initializeRome(this.$(`.${this.options.styles.container}`), this.options.dateValidator);\n this._listenForCloseEvents();\n\n this._show();\n }\n\n close() {\n this._stopListeningForCloseEvents();\n this._hide();\n }\n\n _hide() {\n this.pickerEl.classList.remove('open');\n window.setTimeout(() => {\n this.options.container.removeChild(this.pickerEl);\n document.body.removeChild(this.scrimEl);\n this.trigger('close');\n }, 200);\n return this;\n }\n\n _show() {\n this.delegateEvents();\n // add the animation classes on the next animation tick\n // so that they actually work\n window.requestAnimationFrame(() => {\n this.scrimEl.classList.add(`${this.options.styles.scrim}--shown`);\n this.pickerEl.classList.add(`${prefix}--open`);\n this.trigger('open');\n });\n return this;\n }\n\n _listenForCloseEvents() {\n this._onWindowKeypress = (e) => {\n if (e.which === ESC_KEY) {\n this.close();\n }\n };\n\n window.addEventListener(\"keydown\", this._onWindowKeypress);\n }\n\n _stopListeningForCloseEvents() {\n window.removeEventListener(\"keydown\", this._onWindowKeypress);\n this._closeHandler = null;\n }\n\n delegateEvents() {\n this.$('.js-cancel')\n .addEventListener('click', () => this.clickCancel(), false);\n this.$('.js-ok')\n .addEventListener('click', () => this.clickSubmit(), false);\n\n this.$('.js-date-hours').addEventListener('click', e => this.showHourClock(e), false);\n this.$('.js-date-minutes').addEventListener('click', e => this.showMinuteClock(e), false);\n\n this.$('.js-clock-hours').addEventListener('mouseleave', e => this.mouseOutHourClock(e), false);\n this.$(`.js-clock-hours .${this.options.styles.clockNum}`).forEach((el) => {\n el.addEventListener('click', e => this.clickClickHour(e).showMinuteClock(), false);\n el.addEventListener('mouseenter', e => this.mouseInHourClock(e), false);\n });\n\n this.$('.js-clock-minutes').addEventListener('mouseleave', e => this.mouseOutMinuteClock(e), false);\n this.$(`.js-clock-minutes .${this.options.styles.clockNum}`).forEach(el => {\n el.addEventListener('click', (e) => this.clickClockMinute(e), false);\n el.addEventListener('mouseenter', e => this.mouseInMinuteClock(e), false);\n });\n\n this.$('.c-datepicker__clock--am')\n .addEventListener('click', e => this.clickAm(e), false);\n this.$('.c-datepicker__clock--pm')\n .addEventListener('click', e => this.clickPm(e), false);\n\n this.$('.js-show-calendar')\n .addEventListener('click', e => this.clickShowCalendar(e), false);\n this.$('.js-date-day')\n .addEventListener('click', e => this.clickShowCalendar(e), false);\n this.$('.js-date-month')\n .addEventListener('click', e => this.clickShowCalendar(e), false);\n\n this.$('.js-show-clock')\n .addEventListener('click', e => this.clickShowClock(e), false);\n\n this.scrimEl.addEventListener('click', () => this.close(), false);\n\n return this;\n }\n\n clickSubmit() {\n this.close();\n this.trigger('submit', this.value, this);\n return this;\n }\n\n clickCancel() {\n this.close();\n this.trigger('cancel', this.value, this);\n return this;\n }\n\n clickClickHour(e) {\n const newValue = moment(this.value);\n let number = parseInt(e.currentTarget.getAttribute('data-number'), 10);\n if (number === 0 && this.meridiem === 'pm') {\n number = 12;\n } else if (this.meridiem === 'pm') {\n number += 12;\n }\n\n newValue.hour(number);\n this.set(newValue);\n return this;\n }\n\n clickClockMinute(e) {\n const newValue = moment(this.value);\n let number = parseInt(e.currentTarget.getAttribute('data-number'), 10);\n\n newValue.minute(number);\n this.set(newValue);\n return this;\n }\n\n onChangeDate(dateString) {\n const newValue = moment(this.value);\n const [year, month, date] = dateString.split('-');\n newValue.set({ year, month: month - 1, date });\n\n this.set(newValue);\n return this;\n }\n\n mouseInHourClock() {\n const active = this.$(`.js-clock-hours .${this.options.styles.clockNum}--active`);\n\n if (active) {\n active.classList.add('hide-hand');\n }\n }\n\n mouseInMinuteClock() {\n const active = this.$(`.js-clock-minutes .${this.options.styles.clockNum}--active`);\n\n if (active) {\n active.classList.add('hide-hand');\n }\n }\n\n mouseOutHourClock() {\n const hideHand = this.$(`.js-clock-hours .${this.options.styles.clockNum}--active.hide-hand`);\n\n if (hideHand) {\n hideHand.classList.remove('hide-hand');\n }\n }\n\n mouseOutMinuteClock() {\n const hideHand = this.$(`.js-clock-minutes .${this.options.styles.clockNum}--active.hide-hand`);\n\n if (hideHand) {\n hideHand.classList.remove('hide-hand');\n }\n }\n\n clickAm() {\n const newValue = moment(this.value);\n if (this.meridiem === 'pm') {\n this.meridiem = 'am';\n newValue.hour(newValue.hour() - 12);\n }\n this.set(newValue);\n return this;\n }\n\n clickPm() {\n const newValue = moment(this.value);\n if (this.meridiem === 'am') {\n this.meridiem = 'pm';\n newValue.hour(newValue.hour() + 12);\n }\n this.set(newValue);\n return this;\n }\n\n showHourClock() {\n this.clickShowClock();\n this.$('.js-clock-hours').classList.add('active');\n this.$('.js-clock-minutes').classList.remove('active');\n this.$('.js-date-hours').classList.add('active');\n this.$('.js-date-minutes').classList.remove('active');\n }\n\n showMinuteClock() {\n this.clickShowClock();\n this.$('.js-clock-hours').classList.remove('active');\n this.$('.js-clock-minutes').classList.add('active');\n this.$('.js-date-hours').classList.remove('active');\n this.$('.js-date-minutes').classList.add('active');\n }\n\n clickShowCalendar() {\n this.$('.js-show-calendar').classList.add('is-selected');\n this.$('.js-show-clock').classList.remove('is-selected');\n }\n\n clickShowClock() {\n this.$('.js-show-clock').classList.add('is-selected');\n this.$('.js-show-calendar').classList.remove('is-selected');\n }\n\n data(val) {\n console.warn(`MaterialDatetimePicker#data is deprecated and will be removed in a future release. Please use get or set.`)\n return (val ? this.set(val) : this.value);\n }\n\n get() {\n return moment(this.value);\n }\n\n // update the picker's date/time value\n // value: moment\n // silent: if true, do not fire any events on change\n set(value, { silent = false } = {}) {\n const m = moment(value);\n\n // maintain a list of change events to fire all at once later\n const evts = [];\n if (m.date() !== this.value.date()\n || m.month() !== this.value.month()\n || m.year() !== this.value.year()\n ) {\n this.setDate(m);\n evts.push('change:date');\n }\n\n if (m.hour() !== this.value.hour()\n || m.minutes() !== this.value.minutes()\n ) {\n this.setTime(m);\n evts.push('change:time');\n }\n\n if (this.options.el) {\n // if there is an element to fire events on\n if (this.options.el.tagName === 'INPUT') {\n // and it is an input element then set the value\n this.options.el.value = m.format(this.options.format);\n } else {\n // or any other element set a data-value attribute\n this.options.el.setAttribute('data-value', m.format(this.options.format));\n }\n }\n if (evts.length > 0 && !silent) {\n // fire all the events we've collected\n this.trigger(['change', ...evts].join(' '), this.value, this);\n }\n }\n\n // set the value and header elements to `date`\n // the calendar will be updated automatically\n // by rome when clicked\n setDate(date) {\n const m = moment(date);\n const month = m.format('MMM');\n const day = m.format('Do');\n const dayOfWeek = m.format('dddd');\n const year = m.format('YYYY');\n\n this.$('.js-day').innerText = dayOfWeek;\n this.$('.js-date-month').innerText = (`${month} ${year}`);\n this.$('.js-date-day').innerText = day;\n this.value.year(m.year());\n this.value.month(m.month());\n this.value.date(m.date());\n return this;\n }\n\n // set the value and header elements to `time`\n // also update the hands of the clock\n setTime(time) {\n const m = moment(time);\n const minuteAsInt = Math.round(parseInt(m.format('mm'), 10) / 5) * 5;\n m.minutes(minuteAsInt);\n\n const hour = m.format('HH');\n const minutes = m.format('mm');\n const hourAsInt = parseInt(hour, 10) % 12;\n\n const oldActiveHours = this.$(`.js-clock-hours .${this.options.styles.clockNum}--active`);\n const oldActiveMinutes = this.$(`.js-clock-minutes .${this.options.styles.clockNum}--active`);\n\n this.$('.js-date-hours').innerText = hour;\n this.$('.js-date-minutes').innerText = minutes;\n\n if (oldActiveHours) {\n oldActiveHours.classList.remove(`${this.options.styles.clockNum}--active`);\n }\n\n if (oldActiveMinutes) {\n oldActiveMinutes.classList.remove(`${this.options.styles.clockNum}--active`);\n }\n\n this.$(`.js-clock-hours .${this.options.styles.clockNum}[data-number=\"${hourAsInt}\"]`)\n .classList.add(`${this.options.styles.clockNum}--active`);\n this.$(`.js-clock-minutes .${this.options.styles.clockNum}[data-number=\"${minuteAsInt}\"]`)\n .classList.add(`${this.options.styles.clockNum}--active`);\n\n this.value.hours(m.hours());\n this.value.minutes(m.minutes());\n this.meridiem = this.value.format('a');\n\n if (this.meridiem === 'pm') {\n this.amToggleEl.removeAttribute('checked');\n this.pmToggleEl.setAttribute('checked', 'checked');\n this.amToggleEl.parentElement.classList.remove('c-datepicker__toggle--checked');\n this.pmToggleEl.parentElement.classList.add('c-datepicker__toggle--checked');\n } else {\n this.pmToggleEl.removeAttribute('checked');\n this.amToggleEl.setAttribute('checked', 'checked');\n this.pmToggleEl.parentElement.classList.remove('c-datepicker__toggle--checked');\n this.amToggleEl.parentElement.classList.add('c-datepicker__toggle--checked');\n }\n return this;\n }\n\n $(selector) {\n const els = this.pickerEl.querySelectorAll(selector);\n return els.length > 1 ? [...els] : els[0];\n }\n}\n\nexport default DateTimePicker;\n\nfunction _appendTemplate(parent, template) {\n const tempEl = document.createElement('div');\n tempEl.innerHTML = template.trim();\n parent.appendChild(tempEl.firstChild);\n return this;\n}\n"],"names":["styles","scrim","Events","_events","eventName","evtData","split","forEach","evtName","evt","fn","call","scope","push","filter","func","off","on","ESC_KEY","prefix","defaults","moment","startOf","document","body","undefined","DateTimePicker","options","Object","assign","el","event","CustomEvent","dispatchEvent","container","validator","onData","onChangeDate","bind","rome","value","scrimEl","scrimTemplate","popupTemplate","pickerEl","querySelector","amToggleEl","$","pmToggleEl","setDate","default","setTime","initializeRome","dateValidator","_listenForCloseEvents","_show","_stopListeningForCloseEvents","_hide","classList","remove","setTimeout","removeChild","trigger","delegateEvents","requestAnimationFrame","add","_onWindowKeypress","e","which","close","addEventListener","removeEventListener","_closeHandler","clickCancel","clickSubmit","showHourClock","showMinuteClock","mouseOutHourClock","clockNum","clickClickHour","mouseInHourClock","mouseOutMinuteClock","clickClockMinute","mouseInMinuteClock","clickAm","clickPm","clickShowCalendar","clickShowClock","newValue","number","parseInt","currentTarget","getAttribute","meridiem","hour","set","minute","dateString","year","month","date","active","hideHand","val","warn","silent","m","evts","minutes","tagName","format","setAttribute","length","join","day","dayOfWeek","innerText","time","minuteAsInt","Math","round","hourAsInt","oldActiveHours","oldActiveMinutes","hours","removeAttribute","parentElement","selector","els","querySelectorAll","_appendTemplate","parent","template","tempEl","createElement","innerHTML","trim","appendChild","firstChild"],"mappings":"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"}