{"version":3,"file":"js/7823-9e37e7ecdde69f44f921.js","mappings":"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","sources":["webpack://bbc-maestro/./node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","webpack://bbc-maestro/./node_modules/@nathanvda/cocoon/cocoon.js","webpack://bbc-maestro/./node_modules/air-datepicker/dist/js/i18n/datepicker.en.js","webpack://bbc-maestro/./node_modules/air-datepicker/src/js/air-datepicker.js","webpack://bbc-maestro/./node_modules/air-datepicker/src/js/body.js","webpack://bbc-maestro/./node_modules/air-datepicker/src/js/datepicker.js","webpack://bbc-maestro/./node_modules/air-datepicker/src/js/navigation.js","webpack://bbc-maestro/./node_modules/air-datepicker/src/js/timepicker.js","webpack://bbc-maestro/./node_modules/lodash/_Symbol.js","webpack://bbc-maestro/./node_modules/lodash/_baseClamp.js","webpack://bbc-maestro/./node_modules/lodash/_baseGetTag.js","webpack://bbc-maestro/./node_modules/lodash/_baseInRange.js","webpack://bbc-maestro/./node_modules/lodash/_baseTrim.js","webpack://bbc-maestro/./node_modules/lodash/_freeGlobal.js","webpack://bbc-maestro/./node_modules/lodash/_getRawTag.js","webpack://bbc-maestro/./node_modules/lodash/_objectToString.js","webpack://bbc-maestro/./node_modules/lodash/_root.js","webpack://bbc-maestro/./node_modules/lodash/_trimmedEndIndex.js","webpack://bbc-maestro/./node_modules/lodash/clamp.js","webpack://bbc-maestro/./node_modules/lodash/debounce.js","webpack://bbc-maestro/./node_modules/lodash/inRange.js","webpack://bbc-maestro/./node_modules/lodash/isObject.js","webpack://bbc-maestro/./node_modules/lodash/isObjectLike.js","webpack://bbc-maestro/./node_modules/lodash/isSymbol.js","webpack://bbc-maestro/./node_modules/lodash/now.js","webpack://bbc-maestro/./node_modules/lodash/throttle.js","webpack://bbc-maestro/./node_modules/lodash/toFinite.js","webpack://bbc-maestro/./node_modules/lodash/toNumber.js","webpack://bbc-maestro/./node_modules/macy/dist/macy.js","webpack://bbc-maestro/./node_modules/smartbanner.js/src/optionparser.js","webpack://bbc-maestro/./node_modules/smartbanner.js/src/detector.js","webpack://bbc-maestro/./node_modules/smartbanner.js/src/bakery.js","webpack://bbc-maestro/./node_modules/smartbanner.js/src/smartbanner.js","webpack://bbc-maestro/./node_modules/videojs-contrib-quality-levels/dist/videojs-contrib-quality-levels.es.js","webpack://bbc-maestro/./node_modules/videojs-hls-quality-selector/dist/videojs-hls-quality-selector.es.js","webpack://bbc-maestro/./node_modules/videojs-hotkeys/videojs.hotkeys.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","(function($) {\n\n var cocoon_element_counter = 0;\n\n var create_new_id = function() {\n return (new Date().getTime() + cocoon_element_counter++);\n }\n\n var newcontent_braced = function(id) {\n return '[' + id + ']$1';\n }\n\n var newcontent_underscord = function(id) {\n return '_' + id + '_$1';\n }\n\n var getInsertionNodeElem = function(insertionNode, insertionTraversal, $this){\n\n if (!insertionNode){\n return $this.parent();\n }\n\n if (typeof insertionNode == 'function'){\n if(insertionTraversal){\n console.warn('association-insertion-traversal is ignored, because association-insertion-node is given as a function.')\n }\n return insertionNode($this);\n }\n\n if(typeof insertionNode == 'string'){\n if (insertionTraversal){\n return $this[insertionTraversal](insertionNode);\n }else{\n return insertionNode == \"this\" ? $this : $(insertionNode);\n }\n }\n\n }\n\n $(document).on('click', '.add_fields', function(e) {\n e.preventDefault();\n e.stopPropagation();\n \n var $this = $(this),\n assoc = $this.data('association'),\n assocs = $this.data('associations'),\n content = $this.data('association-insertion-template'),\n insertionMethod = $this.data('association-insertion-method') || $this.data('association-insertion-position') || 'before',\n insertionNode = $this.data('association-insertion-node'),\n insertionTraversal = $this.data('association-insertion-traversal'),\n count = parseInt($this.data('count'), 10),\n regexp_braced = new RegExp('\\\\[new_' + assoc + '\\\\](.*?\\\\s)', 'g'),\n regexp_underscord = new RegExp('_new_' + assoc + '_(\\\\w*)', 'g'),\n new_id = create_new_id(),\n new_content = content.replace(regexp_braced, newcontent_braced(new_id)),\n new_contents = [],\n originalEvent = e;\n\n\n if (new_content == content) {\n regexp_braced = new RegExp('\\\\[new_' + assocs + '\\\\](.*?\\\\s)', 'g');\n regexp_underscord = new RegExp('_new_' + assocs + '_(\\\\w*)', 'g');\n new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n }\n\n new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));\n new_contents = [new_content];\n\n count = (isNaN(count) ? 1 : Math.max(count, 1));\n count -= 1;\n\n while (count) {\n new_id = create_new_id();\n new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));\n new_contents.push(new_content);\n\n count -= 1;\n }\n\n var insertionNodeElem = getInsertionNodeElem(insertionNode, insertionTraversal, $this)\n\n if( !insertionNodeElem || (insertionNodeElem.length == 0) ){\n console.warn(\"Couldn't find the element to insert the template. Make sure your `data-association-insertion-*` on `link_to_add_association` is correct.\")\n }\n\n $.each(new_contents, function(i, node) {\n var contentNode = $(node);\n\n var before_insert = jQuery.Event('cocoon:before-insert');\n insertionNodeElem.trigger(before_insert, [contentNode, originalEvent]);\n\n if (!before_insert.isDefaultPrevented()) {\n // allow any of the jquery dom manipulation methods (after, before, append, prepend, etc)\n // to be called on the node. allows the insertion node to be the parent of the inserted\n // code and doesn't force it to be a sibling like after/before does. default: 'before'\n var addedContent = insertionNodeElem[insertionMethod](contentNode);\n\n insertionNodeElem.trigger('cocoon:after-insert', [contentNode,\n originalEvent]);\n }\n });\n });\n\n $(document).on('click', '.remove_fields.dynamic, .remove_fields.existing', function(e) {\n var $this = $(this),\n wrapper_class = $this.data('wrapper-class') || 'nested-fields',\n node_to_delete = $this.closest('.' + wrapper_class),\n trigger_node = node_to_delete.parent(),\n originalEvent = e;\n\n e.preventDefault();\n e.stopPropagation();\n\n var before_remove = jQuery.Event('cocoon:before-remove');\n trigger_node.trigger(before_remove, [node_to_delete, originalEvent]);\n\n if (!before_remove.isDefaultPrevented()) {\n var timeout = trigger_node.data('remove-timeout') || 0;\n\n setTimeout(function() {\n if ($this.hasClass('dynamic')) {\n node_to_delete.detach();\n } else {\n $this.prev(\"input[type=hidden]\").val(\"1\");\n node_to_delete.hide();\n }\n trigger_node.trigger('cocoon:after-remove', [node_to_delete,\n originalEvent]);\n }, timeout);\n }\n });\n\n\n $(document).on(\"ready page:load turbolinks:load\", function() {\n $('.remove_fields.existing.destroyed').each(function(i, obj) {\n var $this = $(this),\n wrapper_class = $this.data('wrapper-class') || 'nested-fields';\n\n $this.closest('.' + wrapper_class).hide();\n });\n });\n\n})(jQuery);\n\n\n",";(function ($) { $.fn.datepicker.language['en'] = {\r\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\r\n months: ['January','February','March','April','May','June', 'July','August','September','October','November','December'],\r\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n today: 'Today',\r\n clear: 'Clear',\r\n dateFormat: 'mm/dd/yyyy',\r\n timeFormat: 'hh:ii aa',\r\n firstDay: 0\r\n}; })(jQuery);","require('./datepicker');\r\nrequire('./body');\r\nrequire('./navigation');\r\nrequire('./timepicker');",";(function () {\r\n var templates = {\r\n days:'' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n months: '' +\r\n '
' +\r\n '
' +\r\n '
',\r\n years: '' +\r\n '
' +\r\n '
' +\r\n '
'\r\n },\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Body = function (d, type, opts) {\r\n this.d = d;\r\n this.type = type;\r\n this.opts = opts;\r\n this.$el = $('');\r\n\r\n if (this.opts.onlyTimepicker) return;\r\n this.init();\r\n };\r\n\r\n datepicker.Body.prototype = {\r\n init: function () {\r\n this._buildBaseHtml();\r\n this._render();\r\n\r\n this._bindEvents();\r\n },\r\n\r\n _bindEvents: function () {\r\n this.$el.on('click', '.datepicker--cell', $.proxy(this._onClickCell, this));\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n this.$el = $(templates[this.type]).appendTo(this.d.$content);\r\n this.$names = $('.datepicker--days-names', this.$el);\r\n this.$cells = $('.datepicker--cells', this.$el);\r\n },\r\n\r\n _getDayNamesHtml: function (firstDay, curDay, html, i) {\r\n curDay = curDay != undefined ? curDay : firstDay;\r\n html = html ? html : '';\r\n i = i != undefined ? i : 0;\r\n\r\n if (i > 7) return html;\r\n if (curDay == 7) return this._getDayNamesHtml(firstDay, 0, html, ++i);\r\n\r\n html += '
' + this.d.loc.daysMin[curDay] + '
';\r\n\r\n return this._getDayNamesHtml(firstDay, ++curDay, html, ++i);\r\n },\r\n\r\n _getCellContents: function (date, type) {\r\n var classes = \"datepicker--cell datepicker--cell-\" + type,\r\n currentDate = new Date(),\r\n parent = this.d,\r\n minRange = dp.resetTime(parent.minRange),\r\n maxRange = dp.resetTime(parent.maxRange),\r\n opts = parent.opts,\r\n d = dp.getParsedDate(date),\r\n render = {},\r\n html = d.date;\r\n\r\n switch (type) {\r\n case 'day':\r\n if (parent.isWeekend(d.day)) classes += \" -weekend-\";\r\n if (d.month != this.d.parsedDate.month) {\r\n classes += \" -other-month-\";\r\n if (!opts.selectOtherMonths) {\r\n classes += \" -disabled-\";\r\n }\r\n if (!opts.showOtherMonths) html = '';\r\n }\r\n break;\r\n case 'month':\r\n html = parent.loc[parent.opts.monthsField][d.month];\r\n break;\r\n case 'year':\r\n var decade = parent.curDecade;\r\n html = d.year;\r\n if (d.year < decade[0] || d.year > decade[1]) {\r\n classes += ' -other-decade-';\r\n if (!opts.selectOtherYears) {\r\n classes += \" -disabled-\";\r\n }\r\n if (!opts.showOtherYears) html = '';\r\n }\r\n break;\r\n }\r\n\r\n if (opts.onRenderCell) {\r\n render = opts.onRenderCell(date, type) || {};\r\n html = render.html ? render.html : html;\r\n classes += render.classes ? ' ' + render.classes : '';\r\n }\r\n\r\n if (opts.range) {\r\n if (dp.isSame(minRange, date, type)) classes += ' -range-from-';\r\n if (dp.isSame(maxRange, date, type)) classes += ' -range-to-';\r\n\r\n if (parent.selectedDates.length == 1 && parent.focused) {\r\n if (\r\n (dp.bigger(minRange, date) && dp.less(parent.focused, date)) ||\r\n (dp.less(maxRange, date) && dp.bigger(parent.focused, date)))\r\n {\r\n classes += ' -in-range-'\r\n }\r\n\r\n if (dp.less(maxRange, date) && dp.isSame(parent.focused, date)) {\r\n classes += ' -range-from-'\r\n }\r\n if (dp.bigger(minRange, date) && dp.isSame(parent.focused, date)) {\r\n classes += ' -range-to-'\r\n }\r\n\r\n } else if (parent.selectedDates.length == 2) {\r\n if (dp.bigger(minRange, date) && dp.less(maxRange, date)) {\r\n classes += ' -in-range-'\r\n }\r\n }\r\n }\r\n\r\n\r\n if (dp.isSame(currentDate, date, type)) classes += ' -current-';\r\n if (parent.focused && dp.isSame(date, parent.focused, type)) classes += ' -focus-';\r\n if (parent._isSelected(date, type)) classes += ' -selected-';\r\n if (!parent._isInRange(date, type) || render.disabled) classes += ' -disabled-';\r\n\r\n return {\r\n html: html,\r\n classes: classes\r\n }\r\n },\r\n\r\n /**\r\n * Calculates days number to render. Generates days html and returns it.\r\n * @param {object} date - Date object\r\n * @returns {string}\r\n * @private\r\n */\r\n _getDaysHtml: function (date) {\r\n var totalMonthDays = dp.getDaysCount(date),\r\n firstMonthDay = new Date(date.getFullYear(), date.getMonth(), 1).getDay(),\r\n lastMonthDay = new Date(date.getFullYear(), date.getMonth(), totalMonthDays).getDay(),\r\n daysFromPevMonth = firstMonthDay - this.d.loc.firstDay,\r\n daysFromNextMonth = 6 - lastMonthDay + this.d.loc.firstDay;\r\n\r\n daysFromPevMonth = daysFromPevMonth < 0 ? daysFromPevMonth + 7 : daysFromPevMonth;\r\n daysFromNextMonth = daysFromNextMonth > 6 ? daysFromNextMonth - 7 : daysFromNextMonth;\r\n\r\n var startDayIndex = -daysFromPevMonth + 1,\r\n m, y,\r\n html = '';\r\n\r\n for (var i = startDayIndex, max = totalMonthDays + daysFromNextMonth; i <= max; i++) {\r\n y = date.getFullYear();\r\n m = date.getMonth();\r\n\r\n html += this._getDayHtml(new Date(y, m, i))\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getDayHtml: function (date) {\r\n var content = this._getCellContents(date, 'day');\r\n\r\n return '
' + content.html + '
';\r\n },\r\n\r\n /**\r\n * Generates months html\r\n * @param {object} date - date instance\r\n * @returns {string}\r\n * @private\r\n */\r\n _getMonthsHtml: function (date) {\r\n var html = '',\r\n d = dp.getParsedDate(date),\r\n i = 0;\r\n\r\n while(i < 12) {\r\n html += this._getMonthHtml(new Date(d.year, i));\r\n i++\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getMonthHtml: function (date) {\r\n var content = this._getCellContents(date, 'month');\r\n\r\n return '
' + content.html + '
'\r\n },\r\n\r\n _getYearsHtml: function (date) {\r\n var d = dp.getParsedDate(date),\r\n decade = dp.getDecade(date),\r\n firstYear = decade[0] - 1,\r\n html = '',\r\n i = firstYear;\r\n\r\n for (i; i <= decade[1] + 1; i++) {\r\n html += this._getYearHtml(new Date(i , 0));\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getYearHtml: function (date) {\r\n var content = this._getCellContents(date, 'year');\r\n\r\n return '
' + content.html + '
'\r\n },\r\n\r\n _renderTypes: {\r\n days: function () {\r\n var dayNames = this._getDayNamesHtml(this.d.loc.firstDay),\r\n days = this._getDaysHtml(this.d.currentDate);\r\n\r\n this.$cells.html(days);\r\n this.$names.html(dayNames)\r\n },\r\n months: function () {\r\n var html = this._getMonthsHtml(this.d.currentDate);\r\n\r\n this.$cells.html(html)\r\n },\r\n years: function () {\r\n var html = this._getYearsHtml(this.d.currentDate);\r\n\r\n this.$cells.html(html)\r\n }\r\n },\r\n\r\n _render: function () {\r\n if (this.opts.onlyTimepicker) return;\r\n this._renderTypes[this.type].bind(this)();\r\n },\r\n\r\n _update: function () {\r\n var $cells = $('.datepicker--cell', this.$cells),\r\n _this = this,\r\n classes,\r\n $cell,\r\n date;\r\n $cells.each(function (cell, i) {\r\n $cell = $(this);\r\n date = _this.d._getDateFromCell($(this));\r\n classes = _this._getCellContents(date, _this.d.cellType);\r\n $cell.attr('class',classes.classes)\r\n });\r\n },\r\n\r\n show: function () {\r\n if (this.opts.onlyTimepicker) return;\r\n this.$el.addClass('active');\r\n this.acitve = true;\r\n },\r\n\r\n hide: function () {\r\n this.$el.removeClass('active');\r\n this.active = false;\r\n },\r\n\r\n // Events\r\n // -------------------------------------------------\r\n\r\n _handleClick: function (el) {\r\n var date = el.data('date') || 1,\r\n month = el.data('month') || 0,\r\n year = el.data('year') || this.d.parsedDate.year,\r\n dp = this.d;\r\n // Change view if min view does not reach yet\r\n if (dp.view != this.opts.minView) {\r\n dp.down(new Date(year, month, date));\r\n return;\r\n }\r\n // Select date if min view is reached\r\n var selectedDate = new Date(year, month, date),\r\n alreadySelected = this.d._isSelected(selectedDate, this.d.cellType);\r\n\r\n if (!alreadySelected) {\r\n dp._trigger('clickCell', selectedDate);\r\n return;\r\n }\r\n\r\n dp._handleAlreadySelectedDates.bind(dp, alreadySelected, selectedDate)();\r\n\r\n },\r\n\r\n _onClickCell: function (e) {\r\n var $el = $(e.target).closest('.datepicker--cell');\r\n\r\n if ($el.hasClass('-disabled-')) return;\r\n\r\n this._handleClick.bind(this)($el);\r\n }\r\n };\r\n})();\r\n",";(function () {\r\n var VERSION = '2.2.3',\r\n pluginName = 'datepicker',\r\n autoInitSelector = '.datepicker-here',\r\n $body, $datepickersContainer,\r\n containerBuilt = false,\r\n baseTemplate = '' +\r\n '
' +\r\n '' +\r\n '' +\r\n '
' +\r\n '
',\r\n defaults = {\r\n classes: '',\r\n inline: false,\r\n language: 'ru',\r\n startDate: new Date(),\r\n firstDay: '',\r\n weekends: [6, 0],\r\n dateFormat: '',\r\n altField: '',\r\n altFieldDateFormat: '@',\r\n toggleSelected: true,\r\n keyboardNav: true,\r\n\r\n position: 'bottom left',\r\n offset: 12,\r\n\r\n view: 'days',\r\n minView: 'days',\r\n\r\n showOtherMonths: true,\r\n selectOtherMonths: true,\r\n moveToOtherMonthsOnSelect: true,\r\n\r\n showOtherYears: true,\r\n selectOtherYears: true,\r\n moveToOtherYearsOnSelect: true,\r\n\r\n minDate: '',\r\n maxDate: '',\r\n disableNavWhenOutOfRange: true,\r\n\r\n multipleDates: false, // Boolean or Number\r\n multipleDatesSeparator: ',',\r\n range: false,\r\n\r\n todayButton: false,\r\n clearButton: false,\r\n\r\n showEvent: 'focus',\r\n autoClose: false,\r\n\r\n // navigation\r\n monthsField: 'monthsShort',\r\n prevHtml: '',\r\n nextHtml: '',\r\n navTitles: {\r\n days: 'MM, yyyy',\r\n months: 'yyyy',\r\n years: 'yyyy1 - yyyy2'\r\n },\r\n\r\n // timepicker\r\n timepicker: false,\r\n onlyTimepicker: false,\r\n dateTimeSeparator: ' ',\r\n timeFormat: '',\r\n minHours: 0,\r\n maxHours: 24,\r\n minMinutes: 0,\r\n maxMinutes: 59,\r\n hoursStep: 1,\r\n minutesStep: 1,\r\n\r\n // events\r\n onSelect: '',\r\n onShow: '',\r\n onHide: '',\r\n onChangeMonth: '',\r\n onChangeYear: '',\r\n onChangeDecade: '',\r\n onChangeView: '',\r\n onRenderCell: ''\r\n },\r\n hotKeys = {\r\n 'ctrlRight': [17, 39],\r\n 'ctrlUp': [17, 38],\r\n 'ctrlLeft': [17, 37],\r\n 'ctrlDown': [17, 40],\r\n 'shiftRight': [16, 39],\r\n 'shiftUp': [16, 38],\r\n 'shiftLeft': [16, 37],\r\n 'shiftDown': [16, 40],\r\n 'altUp': [18, 38],\r\n 'altRight': [18, 39],\r\n 'altLeft': [18, 37],\r\n 'altDown': [18, 40],\r\n 'ctrlShiftUp': [16, 17, 38]\r\n },\r\n datepicker;\r\n\r\n var Datepicker = function (el, options) {\r\n this.el = el;\r\n this.$el = $(el);\r\n\r\n this.opts = $.extend(true, {}, defaults, options, this.$el.data());\r\n\r\n if ($body == undefined) {\r\n $body = $('body');\r\n }\r\n\r\n if (!this.opts.startDate) {\r\n this.opts.startDate = new Date();\r\n }\r\n\r\n if (this.el.nodeName == 'INPUT') {\r\n this.elIsInput = true;\r\n }\r\n\r\n if (this.opts.altField) {\r\n this.$altField = typeof this.opts.altField == 'string' ? $(this.opts.altField) : this.opts.altField;\r\n }\r\n\r\n this.inited = false;\r\n this.visible = false;\r\n this.silent = false; // Need to prevent unnecessary rendering\r\n\r\n this.currentDate = this.opts.startDate;\r\n this.currentView = this.opts.view;\r\n this._createShortCuts();\r\n this.selectedDates = [];\r\n this.views = {};\r\n this.keys = [];\r\n this.minRange = '';\r\n this.maxRange = '';\r\n this._prevOnSelectValue = '';\r\n\r\n this.init()\r\n };\r\n\r\n datepicker = Datepicker;\r\n\r\n datepicker.prototype = {\r\n VERSION: VERSION,\r\n viewIndexes: ['days', 'months', 'years'],\r\n\r\n init: function () {\r\n if (!containerBuilt && !this.opts.inline && this.elIsInput) {\r\n this._buildDatepickersContainer();\r\n }\r\n this._buildBaseHtml();\r\n this._defineLocale(this.opts.language);\r\n this._syncWithMinMaxDates();\r\n\r\n if (this.elIsInput) {\r\n if (!this.opts.inline) {\r\n // Set extra classes for proper transitions\r\n this._setPositionClasses(this.opts.position);\r\n this._bindEvents()\r\n }\r\n if (this.opts.keyboardNav && !this.opts.onlyTimepicker) {\r\n this._bindKeyboardEvents();\r\n }\r\n this.$datepicker.on('mousedown', this._onMouseDownDatepicker.bind(this));\r\n this.$datepicker.on('mouseup', this._onMouseUpDatepicker.bind(this));\r\n }\r\n\r\n if (this.opts.classes) {\r\n this.$datepicker.addClass(this.opts.classes)\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n this.timepicker = new $.fn.datepicker.Timepicker(this, this.opts);\r\n this._bindTimepickerEvents();\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.$datepicker.addClass('-only-timepicker-');\r\n }\r\n\r\n this.views[this.currentView] = new $.fn.datepicker.Body(this, this.currentView, this.opts);\r\n this.views[this.currentView].show();\r\n this.nav = new $.fn.datepicker.Navigation(this, this.opts);\r\n this.view = this.currentView;\r\n\r\n this.$el.on('clickCell.adp', this._onClickCell.bind(this));\r\n this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));\r\n this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));\r\n\r\n this.inited = true;\r\n },\r\n\r\n _createShortCuts: function () {\r\n this.minDate = this.opts.minDate ? this.opts.minDate : new Date(-8639999913600000);\r\n this.maxDate = this.opts.maxDate ? this.opts.maxDate : new Date(8639999913600000);\r\n },\r\n\r\n _bindEvents : function () {\r\n this.$el.on(this.opts.showEvent + '.adp', this._onShowEvent.bind(this));\r\n this.$el.on('mouseup.adp', this._onMouseUpEl.bind(this));\r\n this.$el.on('blur.adp', this._onBlur.bind(this));\r\n this.$el.on('keyup.adp', this._onKeyUpGeneral.bind(this));\r\n $(window).on('resize.adp', this._onResize.bind(this));\r\n $('body').on('mouseup.adp', this._onMouseUpBody.bind(this));\r\n },\r\n\r\n _bindKeyboardEvents: function () {\r\n this.$el.on('keydown.adp', this._onKeyDown.bind(this));\r\n this.$el.on('keyup.adp', this._onKeyUp.bind(this));\r\n this.$el.on('hotKey.adp', this._onHotKey.bind(this));\r\n },\r\n\r\n _bindTimepickerEvents: function () {\r\n this.$el.on('timeChange.adp', this._onTimeChange.bind(this));\r\n },\r\n\r\n isWeekend: function (day) {\r\n return this.opts.weekends.indexOf(day) !== -1;\r\n },\r\n\r\n _defineLocale: function (lang) {\r\n if (typeof lang == 'string') {\r\n this.loc = $.fn.datepicker.language[lang];\r\n if (!this.loc) {\r\n console.warn('Can\\'t find language \"' + lang + '\" in Datepicker.language, will use \"ru\" instead');\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru)\r\n }\r\n\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru, $.fn.datepicker.language[lang])\r\n } else {\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru, lang)\r\n }\r\n\r\n if (this.opts.dateFormat) {\r\n this.loc.dateFormat = this.opts.dateFormat\r\n }\r\n\r\n if (this.opts.timeFormat) {\r\n this.loc.timeFormat = this.opts.timeFormat\r\n }\r\n\r\n if (this.opts.firstDay !== '') {\r\n this.loc.firstDay = this.opts.firstDay\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n this.loc.dateFormat = [this.loc.dateFormat, this.loc.timeFormat].join(this.opts.dateTimeSeparator);\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.loc.dateFormat = this.loc.timeFormat;\r\n }\r\n\r\n var boundary = this._getWordBoundaryRegExp;\r\n if (this.loc.timeFormat.match(boundary('aa')) ||\r\n this.loc.timeFormat.match(boundary('AA'))\r\n ) {\r\n this.ampm = true;\r\n }\r\n },\r\n\r\n _buildDatepickersContainer: function () {\r\n containerBuilt = true;\r\n $body.append('
');\r\n $datepickersContainer = $('#datepickers-container');\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n var $appendTarget,\r\n $inline = $('
');\r\n\r\n if(this.el.nodeName == 'INPUT') {\r\n if (!this.opts.inline) {\r\n $appendTarget = $datepickersContainer;\r\n } else {\r\n $appendTarget = $inline.insertAfter(this.$el)\r\n }\r\n } else {\r\n $appendTarget = $inline.appendTo(this.$el)\r\n }\r\n\r\n this.$datepicker = $(baseTemplate).appendTo($appendTarget);\r\n this.$content = $('.datepicker--content', this.$datepicker);\r\n this.$nav = $('.datepicker--nav', this.$datepicker);\r\n },\r\n\r\n _triggerOnChange: function () {\r\n if (!this.selectedDates.length) {\r\n // Prevent from triggering multiple onSelect callback with same argument (empty string) in IE10-11\r\n if (this._prevOnSelectValue === '') return;\r\n this._prevOnSelectValue = '';\r\n return this.opts.onSelect('', '', this);\r\n }\r\n\r\n var selectedDates = this.selectedDates,\r\n parsedSelected = datepicker.getParsedDate(selectedDates[0]),\r\n formattedDates,\r\n _this = this,\r\n dates = new Date(\r\n parsedSelected.year,\r\n parsedSelected.month,\r\n parsedSelected.date,\r\n parsedSelected.hours,\r\n parsedSelected.minutes\r\n );\r\n\r\n formattedDates = selectedDates.map(function (date) {\r\n return _this.formatDate(_this.loc.dateFormat, date)\r\n }).join(this.opts.multipleDatesSeparator);\r\n\r\n // Create new dates array, to separate it from original selectedDates\r\n if (this.opts.multipleDates || this.opts.range) {\r\n dates = selectedDates.map(function(date) {\r\n var parsedDate = datepicker.getParsedDate(date);\r\n return new Date(\r\n parsedDate.year,\r\n parsedDate.month,\r\n parsedDate.date,\r\n parsedDate.hours,\r\n parsedDate.minutes\r\n );\r\n })\r\n }\r\n\r\n this._prevOnSelectValue = formattedDates;\r\n this.opts.onSelect(formattedDates, dates, this);\r\n },\r\n\r\n next: function () {\r\n var d = this.parsedDate,\r\n o = this.opts;\r\n switch (this.view) {\r\n case 'days':\r\n this.date = new Date(d.year, d.month + 1, 1);\r\n if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\r\n break;\r\n case 'months':\r\n this.date = new Date(d.year + 1, d.month, 1);\r\n if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\r\n break;\r\n case 'years':\r\n this.date = new Date(d.year + 10, 0, 1);\r\n if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\r\n break;\r\n }\r\n },\r\n\r\n prev: function () {\r\n var d = this.parsedDate,\r\n o = this.opts;\r\n switch (this.view) {\r\n case 'days':\r\n this.date = new Date(d.year, d.month - 1, 1);\r\n if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\r\n break;\r\n case 'months':\r\n this.date = new Date(d.year - 1, d.month, 1);\r\n if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\r\n break;\r\n case 'years':\r\n this.date = new Date(d.year - 10, 0, 1);\r\n if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\r\n break;\r\n }\r\n },\r\n\r\n formatDate: function (string, date) {\r\n date = date || this.date;\r\n var result = string,\r\n boundary = this._getWordBoundaryRegExp,\r\n locale = this.loc,\r\n leadingZero = datepicker.getLeadingZeroNum,\r\n decade = datepicker.getDecade(date),\r\n d = datepicker.getParsedDate(date),\r\n fullHours = d.fullHours,\r\n hours = d.hours,\r\n ampm = string.match(boundary('aa')) || string.match(boundary('AA')),\r\n dayPeriod = 'am',\r\n replacer = this._replacer,\r\n validHours;\r\n\r\n if (this.opts.timepicker && this.timepicker && ampm) {\r\n validHours = this.timepicker._getValidHoursFromDate(date, ampm);\r\n fullHours = leadingZero(validHours.hours);\r\n hours = validHours.hours;\r\n dayPeriod = validHours.dayPeriod;\r\n }\r\n\r\n switch (true) {\r\n case /@/.test(result):\r\n result = result.replace(/@/, date.getTime());\r\n case /aa/.test(result):\r\n result = replacer(result, boundary('aa'), dayPeriod);\r\n case /AA/.test(result):\r\n result = replacer(result, boundary('AA'), dayPeriod.toUpperCase());\r\n case /dd/.test(result):\r\n result = replacer(result, boundary('dd'), d.fullDate);\r\n case /d/.test(result):\r\n result = replacer(result, boundary('d'), d.date);\r\n case /DD/.test(result):\r\n result = replacer(result, boundary('DD'), locale.days[d.day]);\r\n case /D/.test(result):\r\n result = replacer(result, boundary('D'), locale.daysShort[d.day]);\r\n case /mm/.test(result):\r\n result = replacer(result, boundary('mm'), d.fullMonth);\r\n case /m/.test(result):\r\n result = replacer(result, boundary('m'), d.month + 1);\r\n case /MM/.test(result):\r\n result = replacer(result, boundary('MM'), this.loc.months[d.month]);\r\n case /M/.test(result):\r\n result = replacer(result, boundary('M'), locale.monthsShort[d.month]);\r\n case /ii/.test(result):\r\n result = replacer(result, boundary('ii'), d.fullMinutes);\r\n case /i/.test(result):\r\n result = replacer(result, boundary('i'), d.minutes);\r\n case /hh/.test(result):\r\n result = replacer(result, boundary('hh'), fullHours);\r\n case /h/.test(result):\r\n result = replacer(result, boundary('h'), hours);\r\n case /yyyy/.test(result):\r\n result = replacer(result, boundary('yyyy'), d.year);\r\n case /yyyy1/.test(result):\r\n result = replacer(result, boundary('yyyy1'), decade[0]);\r\n case /yyyy2/.test(result):\r\n result = replacer(result, boundary('yyyy2'), decade[1]);\r\n case /yy/.test(result):\r\n result = replacer(result, boundary('yy'), d.year.toString().slice(-2));\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _replacer: function (str, reg, data) {\r\n return str.replace(reg, function (match, p1,p2,p3) {\r\n return p1 + data + p3;\r\n })\r\n },\r\n\r\n _getWordBoundaryRegExp: function (sign) {\r\n var symbols = '\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;';\r\n\r\n return new RegExp('(^|>|' + symbols + ')(' + sign + ')($|<|' + symbols + ')', 'g');\r\n },\r\n\r\n\r\n selectDate: function (date) {\r\n var _this = this,\r\n opts = _this.opts,\r\n d = _this.parsedDate,\r\n selectedDates = _this.selectedDates,\r\n len = selectedDates.length,\r\n newDate = '';\r\n\r\n if (Array.isArray(date)) {\r\n date.forEach(function (d) {\r\n _this.selectDate(d)\r\n });\r\n return;\r\n }\r\n\r\n if (!(date instanceof Date)) return;\r\n\r\n this.lastSelectedDate = date;\r\n\r\n // Set new time values from Date\r\n if (this.timepicker) {\r\n this.timepicker._setTime(date);\r\n }\r\n\r\n // On this step timepicker will set valid values in it's instance\r\n _this._trigger('selectDate', date);\r\n\r\n // Set correct time values after timepicker's validation\r\n // Prevent from setting hours or minutes which values are lesser then `min` value or\r\n // greater then `max` value\r\n if (this.timepicker) {\r\n date.setHours(this.timepicker.hours);\r\n date.setMinutes(this.timepicker.minutes)\r\n }\r\n\r\n if (_this.view == 'days') {\r\n if (date.getMonth() != d.month && opts.moveToOtherMonthsOnSelect) {\r\n newDate = new Date(date.getFullYear(), date.getMonth(), 1);\r\n }\r\n }\r\n\r\n if (_this.view == 'years') {\r\n if (date.getFullYear() != d.year && opts.moveToOtherYearsOnSelect) {\r\n newDate = new Date(date.getFullYear(), 0, 1);\r\n }\r\n }\r\n\r\n if (newDate) {\r\n _this.silent = true;\r\n _this.date = newDate;\r\n _this.silent = false;\r\n _this.nav._render()\r\n }\r\n\r\n if (opts.multipleDates && !opts.range) { // Set priority to range functionality\r\n if (len === opts.multipleDates) return;\r\n if (!_this._isSelected(date)) {\r\n _this.selectedDates.push(date);\r\n }\r\n } else if (opts.range) {\r\n if (len == 2) {\r\n _this.selectedDates = [date];\r\n _this.minRange = date;\r\n _this.maxRange = '';\r\n } else if (len == 1) {\r\n _this.selectedDates.push(date);\r\n if (!_this.maxRange){\r\n _this.maxRange = date;\r\n } else {\r\n _this.minRange = date;\r\n }\r\n // Swap dates if they were selected via dp.selectDate() and second date was smaller then first\r\n if (datepicker.bigger(_this.maxRange, _this.minRange)) {\r\n _this.maxRange = _this.minRange;\r\n _this.minRange = date;\r\n }\r\n _this.selectedDates = [_this.minRange, _this.maxRange]\r\n\r\n } else {\r\n _this.selectedDates = [date];\r\n _this.minRange = date;\r\n }\r\n } else {\r\n _this.selectedDates = [date];\r\n }\r\n\r\n _this._setInputValue();\r\n\r\n if (opts.onSelect) {\r\n _this._triggerOnChange();\r\n }\r\n\r\n if (opts.autoClose && !this.timepickerIsActive) {\r\n if (!opts.multipleDates && !opts.range) {\r\n _this.hide();\r\n } else if (opts.range && _this.selectedDates.length == 2) {\r\n _this.hide();\r\n }\r\n }\r\n\r\n _this.views[this.currentView]._render()\r\n },\r\n\r\n removeDate: function (date) {\r\n var selected = this.selectedDates,\r\n _this = this;\r\n\r\n if (!(date instanceof Date)) return;\r\n\r\n return selected.some(function (curDate, i) {\r\n if (datepicker.isSame(curDate, date)) {\r\n selected.splice(i, 1);\r\n\r\n if (!_this.selectedDates.length) {\r\n _this.minRange = '';\r\n _this.maxRange = '';\r\n _this.lastSelectedDate = '';\r\n } else {\r\n _this.lastSelectedDate = _this.selectedDates[_this.selectedDates.length - 1];\r\n }\r\n\r\n _this.views[_this.currentView]._render();\r\n _this._setInputValue();\r\n\r\n if (_this.opts.onSelect) {\r\n _this._triggerOnChange();\r\n }\r\n\r\n return true\r\n }\r\n })\r\n },\r\n\r\n today: function () {\r\n this.silent = true;\r\n this.view = this.opts.minView;\r\n this.silent = false;\r\n this.date = new Date();\r\n\r\n if (this.opts.todayButton instanceof Date) {\r\n this.selectDate(this.opts.todayButton)\r\n }\r\n },\r\n\r\n clear: function () {\r\n this.selectedDates = [];\r\n this.minRange = '';\r\n this.maxRange = '';\r\n this.views[this.currentView]._render();\r\n this._setInputValue();\r\n if (this.opts.onSelect) {\r\n this._triggerOnChange()\r\n }\r\n },\r\n\r\n /**\r\n * Updates datepicker options\r\n * @param {String|Object} param - parameter's name to update. If object then it will extend current options\r\n * @param {String|Number|Object} [value] - new param value\r\n */\r\n update: function (param, value) {\r\n var len = arguments.length,\r\n lastSelectedDate = this.lastSelectedDate;\r\n\r\n if (len == 2) {\r\n this.opts[param] = value;\r\n } else if (len == 1 && typeof param == 'object') {\r\n this.opts = $.extend(true, this.opts, param)\r\n }\r\n\r\n this._createShortCuts();\r\n this._syncWithMinMaxDates();\r\n this._defineLocale(this.opts.language);\r\n this.nav._addButtonsIfNeed();\r\n if (!this.opts.onlyTimepicker) this.nav._render();\r\n this.views[this.currentView]._render();\r\n\r\n if (this.elIsInput && !this.opts.inline) {\r\n this._setPositionClasses(this.opts.position);\r\n if (this.visible) {\r\n this.setPosition(this.opts.position)\r\n }\r\n }\r\n\r\n if (this.opts.classes) {\r\n this.$datepicker.addClass(this.opts.classes)\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.$datepicker.addClass('-only-timepicker-');\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n if (lastSelectedDate) this.timepicker._handleDate(lastSelectedDate);\r\n this.timepicker._updateRanges();\r\n this.timepicker._updateCurrentTime();\r\n // Change hours and minutes if it's values have been changed through min/max hours/minutes\r\n if (lastSelectedDate) {\r\n lastSelectedDate.setHours(this.timepicker.hours);\r\n lastSelectedDate.setMinutes(this.timepicker.minutes);\r\n }\r\n }\r\n\r\n this._setInputValue();\r\n\r\n return this;\r\n },\r\n\r\n _syncWithMinMaxDates: function () {\r\n var curTime = this.date.getTime();\r\n this.silent = true;\r\n if (this.minTime > curTime) {\r\n this.date = this.minDate;\r\n }\r\n\r\n if (this.maxTime < curTime) {\r\n this.date = this.maxDate;\r\n }\r\n this.silent = false;\r\n },\r\n\r\n _isSelected: function (checkDate, cellType) {\r\n var res = false;\r\n this.selectedDates.some(function (date) {\r\n if (datepicker.isSame(date, checkDate, cellType)) {\r\n res = date;\r\n return true;\r\n }\r\n });\r\n return res;\r\n },\r\n\r\n _setInputValue: function () {\r\n var _this = this,\r\n opts = _this.opts,\r\n format = _this.loc.dateFormat,\r\n altFormat = opts.altFieldDateFormat,\r\n value = _this.selectedDates.map(function (date) {\r\n return _this.formatDate(format, date)\r\n }),\r\n altValues;\r\n\r\n if (opts.altField && _this.$altField.length) {\r\n altValues = this.selectedDates.map(function (date) {\r\n return _this.formatDate(altFormat, date)\r\n });\r\n altValues = altValues.join(this.opts.multipleDatesSeparator);\r\n this.$altField.val(altValues);\r\n }\r\n\r\n value = value.join(this.opts.multipleDatesSeparator);\r\n\r\n this.$el.val(value)\r\n },\r\n\r\n /**\r\n * Check if date is between minDate and maxDate\r\n * @param date {object} - date object\r\n * @param type {string} - cell type\r\n * @returns {boolean}\r\n * @private\r\n */\r\n _isInRange: function (date, type) {\r\n var time = date.getTime(),\r\n d = datepicker.getParsedDate(date),\r\n min = datepicker.getParsedDate(this.minDate),\r\n max = datepicker.getParsedDate(this.maxDate),\r\n dMinTime = new Date(d.year, d.month, min.date).getTime(),\r\n dMaxTime = new Date(d.year, d.month, max.date).getTime(),\r\n types = {\r\n day: time >= this.minTime && time <= this.maxTime,\r\n month: dMinTime >= this.minTime && dMaxTime <= this.maxTime,\r\n year: d.year >= min.year && d.year <= max.year\r\n };\r\n return type ? types[type] : types.day\r\n },\r\n\r\n _getDimensions: function ($el) {\r\n var offset = $el.offset();\r\n\r\n return {\r\n width: $el.outerWidth(),\r\n height: $el.outerHeight(),\r\n left: offset.left,\r\n top: offset.top\r\n }\r\n },\r\n\r\n _getDateFromCell: function (cell) {\r\n var curDate = this.parsedDate,\r\n year = cell.data('year') || curDate.year,\r\n month = cell.data('month') == undefined ? curDate.month : cell.data('month'),\r\n date = cell.data('date') || 1;\r\n\r\n return new Date(year, month, date);\r\n },\r\n\r\n _setPositionClasses: function (pos) {\r\n pos = pos.split(' ');\r\n var main = pos[0],\r\n sec = pos[1],\r\n classes = 'datepicker -' + main + '-' + sec + '- -from-' + main + '-';\r\n\r\n if (this.visible) classes += ' active';\r\n\r\n this.$datepicker\r\n .removeAttr('class')\r\n .addClass(classes);\r\n },\r\n\r\n setPosition: function (position) {\r\n position = position || this.opts.position;\r\n\r\n var dims = this._getDimensions(this.$el),\r\n selfDims = this._getDimensions(this.$datepicker),\r\n pos = position.split(' '),\r\n top, left,\r\n offset = this.opts.offset,\r\n main = pos[0],\r\n secondary = pos[1];\r\n\r\n switch (main) {\r\n case 'top':\r\n top = dims.top - selfDims.height - offset;\r\n break;\r\n case 'right':\r\n left = dims.left + dims.width + offset;\r\n break;\r\n case 'bottom':\r\n top = dims.top + dims.height + offset;\r\n break;\r\n case 'left':\r\n left = dims.left - selfDims.width - offset;\r\n break;\r\n }\r\n\r\n switch(secondary) {\r\n case 'top':\r\n top = dims.top;\r\n break;\r\n case 'right':\r\n left = dims.left + dims.width - selfDims.width;\r\n break;\r\n case 'bottom':\r\n top = dims.top + dims.height - selfDims.height;\r\n break;\r\n case 'left':\r\n left = dims.left;\r\n break;\r\n case 'center':\r\n if (/left|right/.test(main)) {\r\n top = dims.top + dims.height/2 - selfDims.height/2;\r\n } else {\r\n left = dims.left + dims.width/2 - selfDims.width/2;\r\n }\r\n }\r\n\r\n this.$datepicker\r\n .css({\r\n left: left,\r\n top: top\r\n })\r\n },\r\n\r\n show: function () {\r\n var onShow = this.opts.onShow;\r\n\r\n this.setPosition(this.opts.position);\r\n this.$datepicker.addClass('active');\r\n this.visible = true;\r\n\r\n if (onShow) {\r\n this._bindVisionEvents(onShow)\r\n }\r\n },\r\n\r\n hide: function () {\r\n var onHide = this.opts.onHide;\r\n\r\n this.$datepicker\r\n .removeClass('active')\r\n .css({\r\n left: '-100000px'\r\n });\r\n\r\n this.focused = '';\r\n this.keys = [];\r\n\r\n this.inFocus = false;\r\n this.visible = false;\r\n this.$el.blur();\r\n\r\n if (onHide) {\r\n this._bindVisionEvents(onHide)\r\n }\r\n },\r\n\r\n down: function (date) {\r\n this._changeView(date, 'down');\r\n },\r\n\r\n up: function (date) {\r\n this._changeView(date, 'up');\r\n },\r\n\r\n _bindVisionEvents: function (event) {\r\n this.$datepicker.off('transitionend.dp');\r\n event(this, false);\r\n this.$datepicker.one('transitionend.dp', event.bind(this, this, true))\r\n },\r\n\r\n _changeView: function (date, dir) {\r\n date = date || this.focused || this.date;\r\n\r\n var nextView = dir == 'up' ? this.viewIndex + 1 : this.viewIndex - 1;\r\n if (nextView > 2) nextView = 2;\r\n if (nextView < 0) nextView = 0;\r\n\r\n this.silent = true;\r\n this.date = new Date(date.getFullYear(), date.getMonth(), 1);\r\n this.silent = false;\r\n this.view = this.viewIndexes[nextView];\r\n\r\n },\r\n\r\n _handleHotKey: function (key) {\r\n var date = datepicker.getParsedDate(this._getFocusedDate()),\r\n focusedParsed,\r\n o = this.opts,\r\n newDate,\r\n totalDaysInNextMonth,\r\n monthChanged = false,\r\n yearChanged = false,\r\n decadeChanged = false,\r\n y = date.year,\r\n m = date.month,\r\n d = date.date;\r\n\r\n switch (key) {\r\n case 'ctrlRight':\r\n case 'ctrlUp':\r\n m += 1;\r\n monthChanged = true;\r\n break;\r\n case 'ctrlLeft':\r\n case 'ctrlDown':\r\n m -= 1;\r\n monthChanged = true;\r\n break;\r\n case 'shiftRight':\r\n case 'shiftUp':\r\n yearChanged = true;\r\n y += 1;\r\n break;\r\n case 'shiftLeft':\r\n case 'shiftDown':\r\n yearChanged = true;\r\n y -= 1;\r\n break;\r\n case 'altRight':\r\n case 'altUp':\r\n decadeChanged = true;\r\n y += 10;\r\n break;\r\n case 'altLeft':\r\n case 'altDown':\r\n decadeChanged = true;\r\n y -= 10;\r\n break;\r\n case 'ctrlShiftUp':\r\n this.up();\r\n break;\r\n }\r\n\r\n totalDaysInNextMonth = datepicker.getDaysCount(new Date(y,m));\r\n newDate = new Date(y,m,d);\r\n\r\n // If next month has less days than current, set date to total days in that month\r\n if (totalDaysInNextMonth < d) d = totalDaysInNextMonth;\r\n\r\n // Check if newDate is in valid range\r\n if (newDate.getTime() < this.minTime) {\r\n newDate = this.minDate;\r\n } else if (newDate.getTime() > this.maxTime) {\r\n newDate = this.maxDate;\r\n }\r\n\r\n this.focused = newDate;\r\n\r\n focusedParsed = datepicker.getParsedDate(newDate);\r\n if (monthChanged && o.onChangeMonth) {\r\n o.onChangeMonth(focusedParsed.month, focusedParsed.year)\r\n }\r\n if (yearChanged && o.onChangeYear) {\r\n o.onChangeYear(focusedParsed.year)\r\n }\r\n if (decadeChanged && o.onChangeDecade) {\r\n o.onChangeDecade(this.curDecade)\r\n }\r\n },\r\n\r\n _registerKey: function (key) {\r\n var exists = this.keys.some(function (curKey) {\r\n return curKey == key;\r\n });\r\n\r\n if (!exists) {\r\n this.keys.push(key)\r\n }\r\n },\r\n\r\n _unRegisterKey: function (key) {\r\n var index = this.keys.indexOf(key);\r\n\r\n this.keys.splice(index, 1);\r\n },\r\n\r\n _isHotKeyPressed: function () {\r\n var currentHotKey,\r\n found = false,\r\n _this = this,\r\n pressedKeys = this.keys.sort();\r\n\r\n for (var hotKey in hotKeys) {\r\n currentHotKey = hotKeys[hotKey];\r\n if (pressedKeys.length != currentHotKey.length) continue;\r\n\r\n if (currentHotKey.every(function (key, i) { return key == pressedKeys[i]})) {\r\n _this._trigger('hotKey', hotKey);\r\n found = true;\r\n }\r\n }\r\n\r\n return found;\r\n },\r\n\r\n _trigger: function (event, args) {\r\n this.$el.trigger(event, args)\r\n },\r\n\r\n _focusNextCell: function (keyCode, type) {\r\n type = type || this.cellType;\r\n\r\n var date = datepicker.getParsedDate(this._getFocusedDate()),\r\n y = date.year,\r\n m = date.month,\r\n d = date.date;\r\n\r\n if (this._isHotKeyPressed()){\r\n return;\r\n }\r\n\r\n switch(keyCode) {\r\n case 37: // left\r\n type == 'day' ? (d -= 1) : '';\r\n type == 'month' ? (m -= 1) : '';\r\n type == 'year' ? (y -= 1) : '';\r\n break;\r\n case 38: // up\r\n type == 'day' ? (d -= 7) : '';\r\n type == 'month' ? (m -= 3) : '';\r\n type == 'year' ? (y -= 4) : '';\r\n break;\r\n case 39: // right\r\n type == 'day' ? (d += 1) : '';\r\n type == 'month' ? (m += 1) : '';\r\n type == 'year' ? (y += 1) : '';\r\n break;\r\n case 40: // down\r\n type == 'day' ? (d += 7) : '';\r\n type == 'month' ? (m += 3) : '';\r\n type == 'year' ? (y += 4) : '';\r\n break;\r\n }\r\n\r\n var nd = new Date(y,m,d);\r\n if (nd.getTime() < this.minTime) {\r\n nd = this.minDate;\r\n } else if (nd.getTime() > this.maxTime) {\r\n nd = this.maxDate;\r\n }\r\n\r\n this.focused = nd;\r\n\r\n },\r\n\r\n _getFocusedDate: function () {\r\n var focused = this.focused || this.selectedDates[this.selectedDates.length - 1],\r\n d = this.parsedDate;\r\n\r\n if (!focused) {\r\n switch (this.view) {\r\n case 'days':\r\n focused = new Date(d.year, d.month, new Date().getDate());\r\n break;\r\n case 'months':\r\n focused = new Date(d.year, d.month, 1);\r\n break;\r\n case 'years':\r\n focused = new Date(d.year, 0, 1);\r\n break;\r\n }\r\n }\r\n\r\n return focused;\r\n },\r\n\r\n _getCell: function (date, type) {\r\n type = type || this.cellType;\r\n\r\n var d = datepicker.getParsedDate(date),\r\n selector = '.datepicker--cell[data-year=\"' + d.year + '\"]',\r\n $cell;\r\n\r\n switch (type) {\r\n case 'month':\r\n selector = '[data-month=\"' + d.month + '\"]';\r\n break;\r\n case 'day':\r\n selector += '[data-month=\"' + d.month + '\"][data-date=\"' + d.date + '\"]';\r\n break;\r\n }\r\n $cell = this.views[this.currentView].$el.find(selector);\r\n\r\n return $cell.length ? $cell : $('');\r\n },\r\n\r\n destroy: function () {\r\n var _this = this;\r\n _this.$el\r\n .off('.adp')\r\n .data('datepicker', '');\r\n\r\n _this.selectedDates = [];\r\n _this.focused = '';\r\n _this.views = {};\r\n _this.keys = [];\r\n _this.minRange = '';\r\n _this.maxRange = '';\r\n\r\n if (_this.opts.inline || !_this.elIsInput) {\r\n _this.$datepicker.closest('.datepicker-inline').remove();\r\n } else {\r\n _this.$datepicker.remove();\r\n }\r\n },\r\n\r\n _handleAlreadySelectedDates: function (alreadySelected, selectedDate) {\r\n if (this.opts.range) {\r\n if (!this.opts.toggleSelected) {\r\n // Add possibility to select same date when range is true\r\n if (this.selectedDates.length != 2) {\r\n this._trigger('clickCell', selectedDate);\r\n }\r\n } else {\r\n this.removeDate(selectedDate);\r\n }\r\n } else if (this.opts.toggleSelected){\r\n this.removeDate(selectedDate);\r\n }\r\n\r\n // Change last selected date to be able to change time when clicking on this cell\r\n if (!this.opts.toggleSelected) {\r\n this.lastSelectedDate = alreadySelected;\r\n if (this.opts.timepicker) {\r\n this.timepicker._setTime(alreadySelected);\r\n this.timepicker.update();\r\n }\r\n }\r\n },\r\n\r\n _onShowEvent: function (e) {\r\n if (!this.visible) {\r\n this.show();\r\n }\r\n },\r\n\r\n _onBlur: function () {\r\n if (!this.inFocus && this.visible) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onMouseDownDatepicker: function (e) {\r\n this.inFocus = true;\r\n },\r\n\r\n _onMouseUpDatepicker: function (e) {\r\n this.inFocus = false;\r\n e.originalEvent.inFocus = true;\r\n if (!e.originalEvent.timepickerFocus) this.$el.focus();\r\n },\r\n\r\n _onKeyUpGeneral: function (e) {\r\n var val = this.$el.val();\r\n\r\n if (!val) {\r\n this.clear();\r\n }\r\n },\r\n\r\n _onResize: function () {\r\n if (this.visible) {\r\n this.setPosition();\r\n }\r\n },\r\n\r\n _onMouseUpBody: function (e) {\r\n if (e.originalEvent.inFocus) return;\r\n\r\n if (this.visible && !this.inFocus) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onMouseUpEl: function (e) {\r\n e.originalEvent.inFocus = true;\r\n setTimeout(this._onKeyUpGeneral.bind(this),4);\r\n },\r\n\r\n _onKeyDown: function (e) {\r\n var code = e.which;\r\n this._registerKey(code);\r\n\r\n // Arrows\r\n if (code >= 37 && code <= 40) {\r\n e.preventDefault();\r\n this._focusNextCell(code);\r\n }\r\n\r\n // Enter\r\n if (code == 13) {\r\n if (this.focused) {\r\n if (this._getCell(this.focused).hasClass('-disabled-')) return;\r\n if (this.view != this.opts.minView) {\r\n this.down()\r\n } else {\r\n var alreadySelected = this._isSelected(this.focused, this.cellType);\r\n\r\n if (!alreadySelected) {\r\n if (this.timepicker) {\r\n this.focused.setHours(this.timepicker.hours);\r\n this.focused.setMinutes(this.timepicker.minutes);\r\n }\r\n this.selectDate(this.focused);\r\n return;\r\n }\r\n this._handleAlreadySelectedDates(alreadySelected, this.focused)\r\n }\r\n }\r\n }\r\n\r\n // Esc\r\n if (code == 27) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onKeyUp: function (e) {\r\n var code = e.which;\r\n this._unRegisterKey(code);\r\n },\r\n\r\n _onHotKey: function (e, hotKey) {\r\n this._handleHotKey(hotKey);\r\n },\r\n\r\n _onMouseEnterCell: function (e) {\r\n var $cell = $(e.target).closest('.datepicker--cell'),\r\n date = this._getDateFromCell($cell);\r\n\r\n // Prevent from unnecessary rendering and setting new currentDate\r\n this.silent = true;\r\n\r\n if (this.focused) {\r\n this.focused = ''\r\n }\r\n\r\n $cell.addClass('-focus-');\r\n\r\n this.focused = date;\r\n this.silent = false;\r\n\r\n if (this.opts.range && this.selectedDates.length == 1) {\r\n this.minRange = this.selectedDates[0];\r\n this.maxRange = '';\r\n if (datepicker.less(this.minRange, this.focused)) {\r\n this.maxRange = this.minRange;\r\n this.minRange = '';\r\n }\r\n this.views[this.currentView]._update();\r\n }\r\n },\r\n\r\n _onMouseLeaveCell: function (e) {\r\n var $cell = $(e.target).closest('.datepicker--cell');\r\n\r\n $cell.removeClass('-focus-');\r\n\r\n this.silent = true;\r\n this.focused = '';\r\n this.silent = false;\r\n },\r\n\r\n _onTimeChange: function (e, h, m) {\r\n var date = new Date(),\r\n selectedDates = this.selectedDates,\r\n selected = false;\r\n\r\n if (selectedDates.length) {\r\n selected = true;\r\n date = this.lastSelectedDate;\r\n }\r\n\r\n date.setHours(h);\r\n date.setMinutes(m);\r\n\r\n if (!selected && !this._getCell(date).hasClass('-disabled-')) {\r\n this.selectDate(date);\r\n } else {\r\n this._setInputValue();\r\n if (this.opts.onSelect) {\r\n this._triggerOnChange();\r\n }\r\n }\r\n },\r\n\r\n _onClickCell: function (e, date) {\r\n if (this.timepicker) {\r\n date.setHours(this.timepicker.hours);\r\n date.setMinutes(this.timepicker.minutes);\r\n }\r\n this.selectDate(date);\r\n },\r\n\r\n set focused(val) {\r\n if (!val && this.focused) {\r\n var $cell = this._getCell(this.focused);\r\n\r\n if ($cell.length) {\r\n $cell.removeClass('-focus-')\r\n }\r\n }\r\n this._focused = val;\r\n if (this.opts.range && this.selectedDates.length == 1) {\r\n this.minRange = this.selectedDates[0];\r\n this.maxRange = '';\r\n if (datepicker.less(this.minRange, this._focused)) {\r\n this.maxRange = this.minRange;\r\n this.minRange = '';\r\n }\r\n }\r\n if (this.silent) return;\r\n this.date = val;\r\n },\r\n\r\n get focused() {\r\n return this._focused;\r\n },\r\n\r\n get parsedDate() {\r\n return datepicker.getParsedDate(this.date);\r\n },\r\n\r\n set date (val) {\r\n if (!(val instanceof Date)) return;\r\n\r\n this.currentDate = val;\r\n\r\n if (this.inited && !this.silent) {\r\n this.views[this.view]._render();\r\n this.nav._render();\r\n if (this.visible && this.elIsInput) {\r\n this.setPosition();\r\n }\r\n }\r\n return val;\r\n },\r\n\r\n get date () {\r\n return this.currentDate\r\n },\r\n\r\n set view (val) {\r\n this.viewIndex = this.viewIndexes.indexOf(val);\r\n\r\n if (this.viewIndex < 0) {\r\n return;\r\n }\r\n\r\n this.prevView = this.currentView;\r\n this.currentView = val;\r\n\r\n if (this.inited) {\r\n if (!this.views[val]) {\r\n this.views[val] = new $.fn.datepicker.Body(this, val, this.opts)\r\n } else {\r\n this.views[val]._render();\r\n }\r\n\r\n this.views[this.prevView].hide();\r\n this.views[val].show();\r\n this.nav._render();\r\n\r\n if (this.opts.onChangeView) {\r\n this.opts.onChangeView(val)\r\n }\r\n if (this.elIsInput && this.visible) this.setPosition();\r\n }\r\n\r\n return val\r\n },\r\n\r\n get view() {\r\n return this.currentView;\r\n },\r\n\r\n get cellType() {\r\n return this.view.substring(0, this.view.length - 1)\r\n },\r\n\r\n get minTime() {\r\n var min = datepicker.getParsedDate(this.minDate);\r\n return new Date(min.year, min.month, min.date).getTime()\r\n },\r\n\r\n get maxTime() {\r\n var max = datepicker.getParsedDate(this.maxDate);\r\n return new Date(max.year, max.month, max.date).getTime()\r\n },\r\n\r\n get curDecade() {\r\n return datepicker.getDecade(this.date)\r\n }\r\n };\r\n\r\n // Utils\r\n // -------------------------------------------------\r\n\r\n datepicker.getDaysCount = function (date) {\r\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n };\r\n\r\n datepicker.getParsedDate = function (date) {\r\n return {\r\n year: date.getFullYear(),\r\n month: date.getMonth(),\r\n fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1, // One based\r\n date: date.getDate(),\r\n fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),\r\n day: date.getDay(),\r\n hours: date.getHours(),\r\n fullHours: date.getHours() < 10 ? '0' + date.getHours() : date.getHours() ,\r\n minutes: date.getMinutes(),\r\n fullMinutes: date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()\r\n }\r\n };\r\n\r\n datepicker.getDecade = function (date) {\r\n var firstYear = Math.floor(date.getFullYear() / 10) * 10;\r\n\r\n return [firstYear, firstYear + 9];\r\n };\r\n\r\n datepicker.template = function (str, data) {\r\n return str.replace(/#\\{([\\w]+)\\}/g, function (source, match) {\r\n if (data[match] || data[match] === 0) {\r\n return data[match]\r\n }\r\n });\r\n };\r\n\r\n datepicker.isSame = function (date1, date2, type) {\r\n if (!date1 || !date2) return false;\r\n var d1 = datepicker.getParsedDate(date1),\r\n d2 = datepicker.getParsedDate(date2),\r\n _type = type ? type : 'day',\r\n\r\n conditions = {\r\n day: d1.date == d2.date && d1.month == d2.month && d1.year == d2.year,\r\n month: d1.month == d2.month && d1.year == d2.year,\r\n year: d1.year == d2.year\r\n };\r\n\r\n return conditions[_type];\r\n };\r\n\r\n datepicker.less = function (dateCompareTo, date, type) {\r\n if (!dateCompareTo || !date) return false;\r\n return date.getTime() < dateCompareTo.getTime();\r\n };\r\n\r\n datepicker.bigger = function (dateCompareTo, date, type) {\r\n if (!dateCompareTo || !date) return false;\r\n return date.getTime() > dateCompareTo.getTime();\r\n };\r\n\r\n datepicker.getLeadingZeroNum = function (num) {\r\n return parseInt(num) < 10 ? '0' + num : num;\r\n };\r\n\r\n /**\r\n * Returns copy of date with hours and minutes equals to 0\r\n * @param date {Date}\r\n */\r\n datepicker.resetTime = function (date) {\r\n if (typeof date != 'object') return;\r\n date = datepicker.getParsedDate(date);\r\n return new Date(date.year, date.month, date.date)\r\n };\r\n\r\n $.fn.datepicker = function ( options ) {\r\n return this.each(function () {\r\n if (!$.data(this, pluginName)) {\r\n $.data(this, pluginName,\r\n new Datepicker( this, options ));\r\n } else {\r\n var _this = $.data(this, pluginName);\r\n\r\n _this.opts = $.extend(true, _this.opts, options);\r\n _this.update();\r\n }\r\n });\r\n };\r\n\r\n $.fn.datepicker.Constructor = Datepicker;\r\n\r\n $.fn.datepicker.language = {\r\n ru: {\r\n days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],\r\n daysShort: ['Вос','Пон','Вто','Сре','Чет','Пят','Суб'],\r\n daysMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],\r\n months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],\r\n monthsShort: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],\r\n today: 'Сегодня',\r\n clear: 'Очистить',\r\n dateFormat: 'dd.mm.yyyy',\r\n timeFormat: 'hh:ii',\r\n firstDay: 1\r\n }\r\n };\r\n\r\n $(function () {\r\n $(autoInitSelector).datepicker();\r\n })\r\n\r\n})();\r\n",";(function () {\r\n var template = '' +\r\n '
#{prevHtml}
' +\r\n '
#{title}
' +\r\n '
#{nextHtml}
',\r\n buttonsContainerTemplate = '
',\r\n button = '#{label}',\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Navigation = function (d, opts) {\r\n this.d = d;\r\n this.opts = opts;\r\n\r\n this.$buttonsContainer = '';\r\n\r\n this.init();\r\n };\r\n\r\n datepicker.Navigation.prototype = {\r\n init: function () {\r\n this._buildBaseHtml();\r\n this._bindEvents();\r\n },\r\n\r\n _bindEvents: function () {\r\n this.d.$nav.on('click', '.datepicker--nav-action', $.proxy(this._onClickNavButton, this));\r\n this.d.$nav.on('click', '.datepicker--nav-title', $.proxy(this._onClickNavTitle, this));\r\n this.d.$datepicker.on('click', '.datepicker--button', $.proxy(this._onClickNavButton, this));\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n if (!this.opts.onlyTimepicker) {\r\n this._render();\r\n }\r\n this._addButtonsIfNeed();\r\n },\r\n\r\n _addButtonsIfNeed: function () {\r\n if (this.opts.todayButton) {\r\n this._addButton('today')\r\n }\r\n if (this.opts.clearButton) {\r\n this._addButton('clear')\r\n }\r\n },\r\n\r\n _render: function () {\r\n var title = this._getTitle(this.d.currentDate),\r\n html = dp.template(template, $.extend({title: title}, this.opts));\r\n this.d.$nav.html(html);\r\n if (this.d.view == 'years') {\r\n $('.datepicker--nav-title', this.d.$nav).addClass('-disabled-');\r\n }\r\n this.setNavStatus();\r\n },\r\n\r\n _getTitle: function (date) {\r\n return this.d.formatDate(this.opts.navTitles[this.d.view], date)\r\n },\r\n\r\n _addButton: function (type) {\r\n if (!this.$buttonsContainer.length) {\r\n this._addButtonsContainer();\r\n }\r\n\r\n var data = {\r\n action: type,\r\n label: this.d.loc[type]\r\n },\r\n html = dp.template(button, data);\r\n\r\n if ($('[data-action=' + type + ']', this.$buttonsContainer).length) return;\r\n this.$buttonsContainer.append(html);\r\n },\r\n\r\n _addButtonsContainer: function () {\r\n this.d.$datepicker.append(buttonsContainerTemplate);\r\n this.$buttonsContainer = $('.datepicker--buttons', this.d.$datepicker);\r\n },\r\n\r\n setNavStatus: function () {\r\n if (!(this.opts.minDate || this.opts.maxDate) || !this.opts.disableNavWhenOutOfRange) return;\r\n\r\n var date = this.d.parsedDate,\r\n m = date.month,\r\n y = date.year,\r\n d = date.date;\r\n\r\n switch (this.d.view) {\r\n case 'days':\r\n if (!this.d._isInRange(new Date(y, m-1, 1), 'month')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(y, m+1, 1), 'month')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n case 'months':\r\n if (!this.d._isInRange(new Date(y-1, m, d), 'year')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(y+1, m, d), 'year')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n case 'years':\r\n var decade = dp.getDecade(this.d.date);\r\n if (!this.d._isInRange(new Date(decade[0] - 1, 0, 1), 'year')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(decade[1] + 1, 0, 1), 'year')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n }\r\n },\r\n\r\n _disableNav: function (nav) {\r\n $('[data-action=\"' + nav + '\"]', this.d.$nav).addClass('-disabled-')\r\n },\r\n\r\n _activateNav: function (nav) {\r\n $('[data-action=\"' + nav + '\"]', this.d.$nav).removeClass('-disabled-')\r\n },\r\n\r\n _onClickNavButton: function (e) {\r\n var $el = $(e.target).closest('[data-action]'),\r\n action = $el.data('action');\r\n\r\n this.d[action]();\r\n },\r\n\r\n _onClickNavTitle: function (e) {\r\n if ($(e.target).hasClass('-disabled-')) return;\r\n\r\n if (this.d.view == 'days') {\r\n return this.d.view = 'months'\r\n }\r\n\r\n this.d.view = 'years';\r\n }\r\n }\r\n\r\n})();\r\n",";(function () {\r\n var template = '
' +\r\n '
' +\r\n ' #{hourVisible}' +\r\n ' :' +\r\n ' #{minValue}' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
',\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Timepicker = function (inst, opts) {\r\n this.d = inst;\r\n this.opts = opts;\r\n\r\n this.init();\r\n };\r\n\r\n datepicker.Timepicker.prototype = {\r\n init: function () {\r\n var input = 'input';\r\n this._setTime(this.d.date);\r\n this._buildHTML();\r\n\r\n if (navigator.userAgent.match(/trident/gi)) {\r\n input = 'change';\r\n }\r\n\r\n this.d.$el.on('selectDate', this._onSelectDate.bind(this));\r\n this.$ranges.on(input, this._onChangeRange.bind(this));\r\n this.$ranges.on('mouseup', this._onMouseUpRange.bind(this));\r\n this.$ranges.on('mousemove focus ', this._onMouseEnterRange.bind(this));\r\n this.$ranges.on('mouseout blur', this._onMouseOutRange.bind(this));\r\n },\r\n\r\n _setTime: function (date) {\r\n var _date = dp.getParsedDate(date);\r\n\r\n this._handleDate(date);\r\n this.hours = _date.hours < this.minHours ? this.minHours : _date.hours;\r\n this.minutes = _date.minutes < this.minMinutes ? this.minMinutes : _date.minutes;\r\n },\r\n\r\n /**\r\n * Sets minHours and minMinutes from date (usually it's a minDate)\r\n * Also changes minMinutes if current hours are bigger then @date hours\r\n * @param date {Date}\r\n * @private\r\n */\r\n _setMinTimeFromDate: function (date) {\r\n this.minHours = date.getHours();\r\n this.minMinutes = date.getMinutes();\r\n\r\n // If, for example, min hours are 10, and current hours are 12,\r\n // update minMinutes to default value, to be able to choose whole range of values\r\n if (this.d.lastSelectedDate) {\r\n if (this.d.lastSelectedDate.getHours() > date.getHours()) {\r\n this.minMinutes = this.opts.minMinutes;\r\n }\r\n }\r\n },\r\n\r\n _setMaxTimeFromDate: function (date) {\r\n this.maxHours = date.getHours();\r\n this.maxMinutes = date.getMinutes();\r\n\r\n if (this.d.lastSelectedDate) {\r\n if (this.d.lastSelectedDate.getHours() < date.getHours()) {\r\n this.maxMinutes = this.opts.maxMinutes;\r\n }\r\n }\r\n },\r\n\r\n _setDefaultMinMaxTime: function () {\r\n var maxHours = 23,\r\n maxMinutes = 59,\r\n opts = this.opts;\r\n\r\n this.minHours = opts.minHours < 0 || opts.minHours > maxHours ? 0 : opts.minHours;\r\n this.minMinutes = opts.minMinutes < 0 || opts.minMinutes > maxMinutes ? 0 : opts.minMinutes;\r\n this.maxHours = opts.maxHours < 0 || opts.maxHours > maxHours ? maxHours : opts.maxHours;\r\n this.maxMinutes = opts.maxMinutes < 0 || opts.maxMinutes > maxMinutes ? maxMinutes : opts.maxMinutes;\r\n },\r\n\r\n /**\r\n * Looks for min/max hours/minutes and if current values\r\n * are out of range sets valid values.\r\n * @private\r\n */\r\n _validateHoursMinutes: function (date) {\r\n if (this.hours < this.minHours) {\r\n this.hours = this.minHours;\r\n } else if (this.hours > this.maxHours) {\r\n this.hours = this.maxHours;\r\n }\r\n\r\n if (this.minutes < this.minMinutes) {\r\n this.minutes = this.minMinutes;\r\n } else if (this.minutes > this.maxMinutes) {\r\n this.minutes = this.maxMinutes;\r\n }\r\n },\r\n\r\n _buildHTML: function () {\r\n var lz = dp.getLeadingZeroNum,\r\n data = {\r\n hourMin: this.minHours,\r\n hourMax: lz(this.maxHours),\r\n hourStep: this.opts.hoursStep,\r\n hourValue: this.hours,\r\n hourVisible: lz(this.displayHours),\r\n minMin: this.minMinutes,\r\n minMax: lz(this.maxMinutes),\r\n minStep: this.opts.minutesStep,\r\n minValue: lz(this.minutes)\r\n },\r\n _template = dp.template(template, data);\r\n\r\n this.$timepicker = $(_template).appendTo(this.d.$datepicker);\r\n this.$ranges = $('[type=\"range\"]', this.$timepicker);\r\n this.$hours = $('[name=\"hours\"]', this.$timepicker);\r\n this.$minutes = $('[name=\"minutes\"]', this.$timepicker);\r\n this.$hoursText = $('.datepicker--time-current-hours', this.$timepicker);\r\n this.$minutesText = $('.datepicker--time-current-minutes', this.$timepicker);\r\n\r\n if (this.d.ampm) {\r\n this.$ampm = $('')\r\n .appendTo($('.datepicker--time-current', this.$timepicker))\r\n .html(this.dayPeriod);\r\n\r\n this.$timepicker.addClass('-am-pm-');\r\n }\r\n },\r\n\r\n _updateCurrentTime: function () {\r\n var h = dp.getLeadingZeroNum(this.displayHours),\r\n m = dp.getLeadingZeroNum(this.minutes);\r\n\r\n this.$hoursText.html(h);\r\n this.$minutesText.html(m);\r\n\r\n if (this.d.ampm) {\r\n this.$ampm.html(this.dayPeriod);\r\n }\r\n },\r\n\r\n _updateRanges: function () {\r\n this.$hours.attr({\r\n min: this.minHours,\r\n max: this.maxHours\r\n }).val(this.hours);\r\n\r\n this.$minutes.attr({\r\n min: this.minMinutes,\r\n max: this.maxMinutes\r\n }).val(this.minutes)\r\n },\r\n\r\n /**\r\n * Sets minHours, minMinutes etc. from date. If date is not passed, than sets\r\n * values from options\r\n * @param [date] {object} - Date object, to get values from\r\n * @private\r\n */\r\n _handleDate: function (date) {\r\n this._setDefaultMinMaxTime();\r\n if (date) {\r\n if (dp.isSame(date, this.d.opts.minDate)) {\r\n this._setMinTimeFromDate(this.d.opts.minDate);\r\n } else if (dp.isSame(date, this.d.opts.maxDate)) {\r\n this._setMaxTimeFromDate(this.d.opts.maxDate);\r\n }\r\n }\r\n\r\n this._validateHoursMinutes(date);\r\n },\r\n\r\n update: function () {\r\n this._updateRanges();\r\n this._updateCurrentTime();\r\n },\r\n\r\n /**\r\n * Calculates valid hour value to display in text input and datepicker's body.\r\n * @param date {Date|Number} - date or hours\r\n * @param [ampm] {Boolean} - 12 hours mode\r\n * @returns {{hours: *, dayPeriod: string}}\r\n * @private\r\n */\r\n _getValidHoursFromDate: function (date, ampm) {\r\n var d = date,\r\n hours = date;\r\n\r\n if (date instanceof Date) {\r\n d = dp.getParsedDate(date);\r\n hours = d.hours;\r\n }\r\n\r\n var _ampm = ampm || this.d.ampm,\r\n dayPeriod = 'am';\r\n\r\n if (_ampm) {\r\n switch(true) {\r\n case hours == 0:\r\n hours = 12;\r\n break;\r\n case hours == 12:\r\n dayPeriod = 'pm';\r\n break;\r\n case hours > 11:\r\n hours = hours - 12;\r\n dayPeriod = 'pm';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n hours: hours,\r\n dayPeriod: dayPeriod\r\n }\r\n },\r\n\r\n set hours (val) {\r\n this._hours = val;\r\n\r\n var displayHours = this._getValidHoursFromDate(val);\r\n\r\n this.displayHours = displayHours.hours;\r\n this.dayPeriod = displayHours.dayPeriod;\r\n },\r\n\r\n get hours() {\r\n return this._hours;\r\n },\r\n\r\n // Events\r\n // -------------------------------------------------\r\n\r\n _onChangeRange: function (e) {\r\n var $target = $(e.target),\r\n name = $target.attr('name');\r\n \r\n this.d.timepickerIsActive = true;\r\n\r\n this[name] = $target.val();\r\n this._updateCurrentTime();\r\n this.d._trigger('timeChange', [this.hours, this.minutes]);\r\n\r\n this._handleDate(this.d.lastSelectedDate);\r\n this.update()\r\n },\r\n\r\n _onSelectDate: function (e, data) {\r\n this._handleDate(data);\r\n this.update();\r\n },\r\n\r\n _onMouseEnterRange: function (e) {\r\n var name = $(e.target).attr('name');\r\n $('.datepicker--time-current-' + name, this.$timepicker).addClass('-focus-');\r\n },\r\n\r\n _onMouseOutRange: function (e) {\r\n var name = $(e.target).attr('name');\r\n if (this.d.inFocus) return; // Prevent removing focus when mouse out of range slider\r\n $('.datepicker--time-current-' + name, this.$timepicker).removeClass('-focus-');\r\n },\r\n\r\n _onMouseUpRange: function (e) {\r\n this.d.timepickerIsActive = false;\r\n }\r\n };\r\n})();\r\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nmodule.exports = baseClamp;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\nfunction baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n}\n\nmodule.exports = baseInRange;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseClamp = require('./_baseClamp'),\n toNumber = require('./toNumber');\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nmodule.exports = clamp;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var baseInRange = require('./_baseInRange'),\n toFinite = require('./toFinite'),\n toNumber = require('./toNumber');\n\n/**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\nfunction inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n}\n\nmodule.exports = inRange;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):t.Macy=n()}(this,function(){\"use strict\";function t(t,n){var e=void 0;return function(){e&&clearTimeout(e),e=setTimeout(t,n)}}function n(t,n){for(var e=t.length,r=e,o=[];e--;)o.push(n(t[r-e-1]));return o}function e(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(window.Promise)return A(t,n,e);t.recalculate(!0,!0)}function r(t){for(var n=t.options,e=t.responsiveOptions,r=t.keys,o=t.docWidth,i=void 0,s=0;s=a&&(i=n.breakAt[a],O(i,e))}return e}function o(t){for(var n=t.options,e=t.responsiveOptions,r=t.keys,o=t.docWidth,i=void 0,s=r.length-1;s>=0;s--){var a=parseInt(r[s],10);o<=a&&(i=n.breakAt[a],O(i,e))}return e}function i(t){var n=t.useContainerForBreakpoints?t.container.clientWidth:window.innerWidth,e={columns:t.columns};b(t.margin)?e.margin={x:t.margin.x,y:t.margin.y}:e.margin={x:t.margin,y:t.margin};var i=Object.keys(t.breakAt);return t.mobileFirst?r({options:t,responsiveOptions:e,keys:i,docWidth:n}):o({options:t,responsiveOptions:e,keys:i,docWidth:n})}function s(t){return i(t).columns}function a(t){return i(t).margin}function c(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],e=s(t),r=a(t).x,o=100/e;if(!n)return o;if(1===e)return\"100%\";var i=\"px\";if(\"string\"==typeof r){var c=parseFloat(r);i=r.replace(c,\"\"),r=c}return r=(e-1)*r/e,\"%\"===i?o-r+\"%\":\"calc(\"+o+\"% - \"+r+i+\")\"}function u(t,n){var e=s(t.options),r=0,o=void 0,i=void 0;if(1===++n)return 0;i=a(t.options).x;var u=\"px\";if(\"string\"==typeof i){var l=parseFloat(i,10);u=i.replace(l,\"\"),i=l}return o=(i-(e-1)*i/e)*(n-1),r+=c(t.options,!1)*(n-1),\"%\"===u?r+o+\"%\":\"calc(\"+r+\"% + \"+o+u+\")\"}function l(t){var n=0,e=t.container,r=t.rows;v(r,function(t){n=t>n?t:n}),e.style.height=n+\"px\"}function p(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=s(t.options),i=a(t.options).y;M(t,o,e),v(n,function(n){var e=0,o=parseInt(n.offsetHeight,10);isNaN(o)||(t.rows.forEach(function(n,r){n2&&void 0!==arguments[2]&&arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=s(t.options),i=a(t.options).y;M(t,o,e),v(n,function(n){t.lastcol===o&&(t.lastcol=0);var e=C(n,\"height\");e=parseInt(n.offsetHeight,10),isNaN(e)||(n.style.position=\"absolute\",n.style.top=t.rows[t.lastcol]+\"px\",n.style.left=\"\"+t.cols[t.lastcol],t.rows[t.lastcol]+=isNaN(e)?0:e+i,t.lastcol+=1,r&&(n.dataset.macyComplete=1))}),r&&(t.tmpRows=null),l(t)}var h=function t(n,e){if(!(this instanceof t))return new t(n,e);if(n&&n.nodeName)return n;if(n=n.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\"),e)return this.byCss(n,e);for(var r in this.selectors)if(e=r.split(\"/\"),new RegExp(e[1],e[2]).test(n))return this.selectors[r](n);return this.byCss(n)};h.prototype.byCss=function(t,n){return(n||document).querySelectorAll(t)},h.prototype.selectors={},h.prototype.selectors[/^\\.[\\w\\-]+$/]=function(t){return document.getElementsByClassName(t.substring(1))},h.prototype.selectors[/^\\w+$/]=function(t){return document.getElementsByTagName(t)},h.prototype.selectors[/^\\#[\\w\\-]+$/]=function(t){return document.getElementById(t.substring(1))};var v=function(t,n){for(var e=t.length,r=e;e--;)n(t[r-e-1])},m=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.running=!1,this.events=[],this.add(t)};m.prototype.run=function(){if(!this.running&&this.events.length>0){var t=this.events.shift();this.running=!0,t(),this.running=!1,this.run()}},m.prototype.add=function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return!!n&&(Array.isArray(n)?v(n,function(n){return t.add(n)}):(this.events.push(n),void this.run()))},m.prototype.clear=function(){this.events=[]};var d=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.instance=t,this.data=n,this},y=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.events={},this.instance=t};y.prototype.on=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(!t||!n)&&(Array.isArray(this.events[t])||(this.events[t]=[]),this.events[t].push(n))},y.prototype.emit=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!Array.isArray(this.events[t]))return!1;var e=new d(this.instance,n);v(this.events[t],function(t){return t(e)})};var g=function(t){return!(\"naturalHeight\"in t&&t.naturalHeight+t.naturalWidth===0)||t.width+t.height!==0},E=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise(function(t,e){if(n.complete)return g(n)?t(n):e(n);n.addEventListener(\"load\",function(){return g(n)?t(n):e(n)}),n.addEventListener(\"error\",function(){return e(n)})}).then(function(n){e&&t.emit(t.constants.EVENT_IMAGE_LOAD,{img:n})}).catch(function(n){return t.emit(t.constants.EVENT_IMAGE_ERROR,{img:n})})},w=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return n(e,function(n){return E(t,n,r)})},A=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return Promise.all(w(t,n,e)).then(function(){t.emit(t.constants.EVENT_IMAGE_COMPLETE)})},I=function(n){return t(function(){n.emit(n.constants.EVENT_RESIZE),n.queue.add(function(){return n.recalculate(!0,!0)})},100)},N=function(t){if(t.container=h(t.options.container),t.container instanceof h||!t.container)return!!t.options.debug&&console.error(\"Error: Container not found\");t.container.length&&(t.container=t.container[0]),t.options.container=t.container,t.container.style.position=\"relative\"},T=function(t){t.queue=new m,t.events=new y(t),t.rows=[],t.resizer=I(t)},L=function(t){var n=h(\"img\",t.container);window.addEventListener(\"resize\",t.resizer),t.on(t.constants.EVENT_IMAGE_LOAD,function(){return t.recalculate(!1,!1)}),t.on(t.constants.EVENT_IMAGE_COMPLETE,function(){return t.recalculate(!0,!0)}),t.options.useOwnImageLoader||e(t,n,!t.options.waitForImages),t.emit(t.constants.EVENT_INITIALIZED)},_=function(t){N(t),T(t),L(t)},b=function(t){return t===Object(t)&&\"[object Array]\"!==Object.prototype.toString.call(t)},O=function(t,n){b(t)||(n.columns=t),b(t)&&t.columns&&(n.columns=t.columns),b(t)&&t.margin&&!b(t.margin)&&(n.margin={x:t.margin,y:t.margin}),b(t)&&t.margin&&b(t.margin)&&t.margin.x&&(n.margin.x=t.margin.x),b(t)&&t.margin&&b(t.margin)&&t.margin.y&&(n.margin.y=t.margin.y)},C=function(t,n){return window.getComputedStyle(t,null).getPropertyValue(n)},M=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.lastcol||(t.lastcol=0),t.rows.length<1&&(e=!0),e){t.rows=[],t.cols=[],t.lastcol=0;for(var r=n-1;r>=0;r--)t.rows[r]=0,t.cols[r]=u(t,r)}else if(t.tmpRows){t.rows=[];for(var r=n-1;r>=0;r--)t.rows[r]=t.tmpRows[r]}else{t.tmpRows=[];for(var r=n-1;r>=0;r--)t.tmpRows[r]=t.rows[r]}},V=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],e=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=n?t.container.children:h(':scope > *:not([data-macy-complete=\"1\"])',t.container);r=Array.from(r).filter(function(t){return null!==t.offsetParent});var o=c(t.options);return v(r,function(t){n&&(t.dataset.macyComplete=0),t.style.width=o}),t.options.trueOrder?(f(t,r,n,e),t.emit(t.constants.EVENT_RECALCULATED)):(p(t,r,n,e),t.emit(t.constants.EVENT_RECALCULATED))},R=function(){return!!window.Promise},x=Object.assign||function(t){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:k;if(!(this instanceof t))return new t(n);this.options={},x(this.options,k,n),this.options.cancelLegacy&&!R()||_(this)};return q.init=function(t){return console.warn(\"Depreciated: Macy.init will be removed in v3.0.0 opt to use Macy directly like so Macy({ /*options here*/ }) \"),new q(t)},q.prototype.recalculateOnImageLoad=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return e(this,h(\"img\",this.container),!t)},q.prototype.runOnImageLoad=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=h(\"img\",this.container);return this.on(this.constants.EVENT_IMAGE_COMPLETE,t),n&&this.on(this.constants.EVENT_IMAGE_LOAD,t),e(this,r,n)},q.prototype.recalculate=function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e&&this.queue.clear(),this.queue.add(function(){return V(t,n,e)})},q.prototype.remove=function(){window.removeEventListener(\"resize\",this.resizer),v(this.container.children,function(t){t.removeAttribute(\"data-macy-complete\"),t.removeAttribute(\"style\")}),this.container.removeAttribute(\"style\")},q.prototype.reInit=function(){this.recalculate(!0,!0),this.emit(this.constants.EVENT_INITIALIZED),window.addEventListener(\"resize\",this.resizer),this.container.style.position=\"relative\"},q.prototype.on=function(t,n){this.events.on(t,n)},q.prototype.emit=function(t,n){this.events.emit(t,n)},q.constants={EVENT_INITIALIZED:\"macy.initialized\",EVENT_RECALCULATED:\"macy.recalculated\",EVENT_IMAGE_LOAD:\"macy.image.load\",EVENT_IMAGE_ERROR:\"macy.image.error\",EVENT_IMAGE_COMPLETE:\"macy.images.complete\",EVENT_RESIZE:\"macy.resize\"},q.prototype.constants=q.constants,q});\n","function valid(name) {\n // TODO: validate against options dictionary\n return name.indexOf('smartbanner:') !== -1 && name.split(':')[1].length > 0;\n}\n\nfunction convertToCamelCase(name) {\n let parts = name.split('-');\n parts.map(function(part, index) {\n if (index > 0) {\n parts[index] = part.charAt(0).toUpperCase() + part.substring(1);\n }\n });\n return parts.join('');\n}\n\nexport default class OptionParser {\n\n parse() {\n let metas = document.getElementsByTagName('meta');\n let options = {};\n Array.apply(null, metas).forEach(function(meta) {\n let optionName = null;\n let name = meta.getAttribute('name');\n let content = meta.getAttribute('content');\n if (name && content && valid(name) && content.length > 0) {\n optionName = name.split(':')[1];\n if (optionName.indexOf('-') !== -1) {\n optionName = convertToCamelCase(optionName);\n }\n options[optionName] = content;\n }\n });\n return options;\n }\n\n}\n","export default class Detector {\n\n static platform() {\n let maxTouchPoints = window.navigator.maxTouchPoints;\n let userAgent = window.navigator.userAgent;\n\n if (/Android/i.test(userAgent)){\n return 'android';\n // maxTouchPoints is the only effective method to detect iPad iOS 13+\n // FMI https://developer.apple.com/forums/thread/119186\n } else if ((!window.MSStream && !/X11|Linux/i.test(userAgent) && maxTouchPoints && maxTouchPoints > 0) || /iPhone|iPad|iPod/i.test(userAgent)) {\n return 'ios';\n }\n }\n\n static userAgentMatchesRegex(regexString) {\n return new RegExp(regexString).test(window.navigator.userAgent);\n }\n\n static jQueryMobilePage() {\n return typeof global.$ !== 'undefined' && global.$.mobile !== 'undefined' && document.querySelector('.ui-page') !== null;\n }\n\n static wrapperElement() {\n let selector = Detector.jQueryMobilePage() ? '.ui-page' : 'html';\n return document.querySelectorAll(selector);\n }\n\n}\n","export default class Bakery {\n\n static getCookieExpiresString(hideTtl) {\n const now = new Date();\n const expireTime = new Date(now.getTime() + hideTtl);\n return `expires=${expireTime.toGMTString()};`;\n }\n\n static bake(hideTtl, hidePath) {\n document.cookie = `smartbanner_exited=1; ${hideTtl ? Bakery.getCookieExpiresString(hideTtl) : ''} path=${hidePath}`;\n }\n\n static unbake() {\n document.cookie = 'smartbanner_exited=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n }\n\n static get baked() {\n let value = document.cookie.replace(/(?:(?:^|.*;\\s*)smartbanner_exited\\s*=\\s*([^;]*).*$)|^.*$/, '$1');\n return value === '1';\n }\n\n}\n","import OptionParser from './optionparser.js';\nimport Detector from './detector.js';\nimport Bakery from './bakery.js';\n\nconst DEFAULT_PLATFORMS = 'android,ios';\nconst DEFAULT_CLOSE_LABEL = 'Close';\n\nlet datas = {\n originalTop: 'data-smartbanner-original-top',\n originalMarginTop: 'data-smartbanner-original-margin-top'\n};\n\nfunction handleExitClick(event, self) {\n self.exit();\n event.preventDefault();\n}\n\nfunction handleClickout(event, self) {\n self.clickout();\n}\n\nfunction handleJQueryMobilePageLoad(event) {\n if (!this.positioningDisabled) {\n setContentPosition(event.data.height);\n }\n}\n\nfunction addEventListeners(self) {\n let closeIcon = document.querySelector('.js_smartbanner__exit');\n closeIcon.addEventListener('click', (event) => handleExitClick(event, self));\n\n let button = document.querySelector('.js_smartbanner__button');\n button.addEventListener('click', (event) => handleClickout(event, self));\n\n if (Detector.jQueryMobilePage()) {\n $(document).on('pagebeforeshow', self, handleJQueryMobilePageLoad);\n }\n}\n\nfunction removeEventListeners() {\n if (Detector.jQueryMobilePage()) {\n $(document).off('pagebeforeshow', handleJQueryMobilePageLoad);\n }\n}\n\nfunction setContentPosition(value) {\n let wrappers = Detector.wrapperElement();\n for (let i = 0, l = wrappers.length, wrapper; i < l; i++) {\n wrapper = wrappers[i];\n if (Detector.jQueryMobilePage()) {\n if (wrapper.getAttribute(datas.originalTop)) {\n continue;\n }\n let top = parseFloat(getComputedStyle(wrapper).top);\n wrapper.setAttribute(datas.originalTop, isNaN(top) ? 0 : top);\n wrapper.style.top = value + 'px';\n } else {\n if (wrapper.getAttribute(datas.originalMarginTop)) {\n continue;\n }\n let margin = parseFloat(getComputedStyle(wrapper).marginTop);\n wrapper.setAttribute(datas.originalMarginTop, isNaN(margin) ? 0 : margin);\n wrapper.style.marginTop = value + 'px';\n }\n }\n}\n\nfunction restoreContentPosition() {\n let wrappers = Detector.wrapperElement();\n for (let i = 0, l = wrappers.length, wrapper; i < l; i++) {\n wrapper = wrappers[i];\n if (Detector.jQueryMobilePage() && wrapper.getAttribute(datas.originalTop)) {\n wrapper.style.top = wrapper.getAttribute(datas.originalTop) + 'px';\n } else if (wrapper.getAttribute(datas.originalMarginTop)) {\n wrapper.style.marginTop = wrapper.getAttribute(datas.originalMarginTop) + 'px';\n }\n }\n}\n\nexport default class SmartBanner {\n\n constructor() {\n let parser = new OptionParser();\n this.options = parser.parse();\n this.platform = Detector.platform();\n\n let event = new Event('smartbanner.init');\n document.dispatchEvent(event);\n }\n\n // DEPRECATED. Will be removed.\n get originalTop() {\n let wrapper = Detector.wrapperElement()[0];\n return parseFloat(wrapper.getAttribute(datas.originalTop));\n }\n\n // DEPRECATED. Will be removed.\n get originalTopMargin() {\n let wrapper = Detector.wrapperElement()[0];\n return parseFloat(wrapper.getAttribute(datas.originalMarginTop));\n }\n\n get priceSuffix() {\n if (this.platform === 'ios' && this.options.priceSuffixApple) {\n return this.options.priceSuffixApple;\n } else if (this.platform === 'android' && this.options.priceSuffixGoogle) {\n return this.options.priceSuffixGoogle;\n }\n return '';\n }\n\n get icon() {\n if (this.platform === 'android') {\n return this.options.iconGoogle;\n } else {\n return this.options.iconApple;\n }\n }\n\n get buttonUrl() {\n if (this.platform === 'android') {\n return this.options.buttonUrlGoogle;\n } else if (this.platform === 'ios') {\n return this.options.buttonUrlApple;\n }\n return '#';\n }\n\n get closeLabel() {\n return this.options.closeLabel !== undefined ? this.options.closeLabel : DEFAULT_CLOSE_LABEL;\n }\n\n get html() {\n let modifier = !this.options.customDesignModifier ? this.platform : this.options.customDesignModifier;\n return `
\n \n
\n
\n
\n
${this.options.title}
\n
${this.options.author}
\n
${this.options.price}${this.priceSuffix}
\n
\n
\n ${this.options.button}\n
`;\n }\n\n get height() {\n try {\n return document.querySelector('.js_smartbanner').offsetHeight;\n } catch(error) {\n return 0;\n }\n }\n\n get platformEnabled() {\n let enabledPlatforms = this.options.enabledPlatforms || DEFAULT_PLATFORMS;\n return enabledPlatforms && enabledPlatforms.replace(/\\s+/g, '').split(',').indexOf(this.platform) !== -1;\n }\n\n get positioningDisabled() {\n return this.options.disablePositioning === 'true';\n }\n\n get apiEnabled() {\n return this.options.api === 'true';\n }\n\n get userAgentExcluded() {\n if (!this.options.excludeUserAgentRegex) {\n return false;\n }\n return Detector.userAgentMatchesRegex(this.options.excludeUserAgentRegex);\n }\n\n get userAgentIncluded() {\n if (!this.options.includeUserAgentRegex) {\n return false;\n }\n return Detector.userAgentMatchesRegex(this.options.includeUserAgentRegex);\n }\n\n get hideTtl() {\n return this.options.hideTtl ? parseInt(this.options.hideTtl) : false;\n }\n\n get hidePath() {\n return this.options.hidePath ? this.options.hidePath : '/';\n }\n\n publish() {\n if (Object.keys(this.options).length === 0) {\n throw new Error('No options detected. Please consult documentation.');\n }\n\n if (Bakery.baked) {\n return false;\n }\n\n // User Agent was explicetely excluded by defined excludeUserAgentRegex\n if (this.userAgentExcluded) {\n return false;\n }\n\n // User agent was neither included by platformEnabled,\n // nor by defined includeUserAgentRegex\n if (!(this.platformEnabled || this.userAgentIncluded)) {\n return false;\n }\n\n let bannerDiv = document.createElement('div');\n document.querySelector('body').appendChild(bannerDiv);\n bannerDiv.outerHTML = this.html;\n let event = new Event('smartbanner.view');\n document.dispatchEvent(event);\n if (!this.positioningDisabled) {\n setContentPosition(this.height);\n }\n addEventListeners(this);\n }\n\n exit() {\n removeEventListeners();\n if (!this.positioningDisabled) {\n restoreContentPosition();\n }\n let banner = document.querySelector('.js_smartbanner');\n document.querySelector('body').removeChild(banner);\n let event = new Event('smartbanner.exit');\n document.dispatchEvent(event);\n Bakery.bake(this.hideTtl, this.hidePath);\n }\n\n clickout() {\n let event = new Event('smartbanner.clickout');\n document.dispatchEvent(event);\n }\n}\n","/*! @name videojs-contrib-quality-levels @version 2.0.9 @license Apache-2.0 */\nimport videojs from 'video.js';\nimport document from 'global/document';\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/**\n * A single QualityLevel.\n *\n * interface QualityLevel {\n * readonly attribute DOMString id;\n * attribute DOMString label;\n * readonly attribute long width;\n * readonly attribute long height;\n * readonly attribute long bitrate;\n * attribute boolean enabled;\n * };\n *\n * @class QualityLevel\n */\n\nvar QualityLevel =\n/**\n * Creates a QualityLevel\n *\n * @param {Representation|Object} representation The representation of the quality level\n * @param {string} representation.id Unique id of the QualityLevel\n * @param {number=} representation.width Resolution width of the QualityLevel\n * @param {number=} representation.height Resolution height of the QualityLevel\n * @param {number} representation.bandwidth Bitrate of the QualityLevel\n * @param {Function} representation.enabled Callback to enable/disable QualityLevel\n */\nfunction QualityLevel(representation) {\n var level = this; // eslint-disable-line\n\n if (videojs.browser.IS_IE8) {\n level = document.createElement('custom');\n\n for (var prop in QualityLevel.prototype) {\n if (prop !== 'constructor') {\n level[prop] = QualityLevel.prototype[prop];\n }\n }\n }\n\n level.id = representation.id;\n level.label = level.id;\n level.width = representation.width;\n level.height = representation.height;\n level.bitrate = representation.bandwidth;\n level.enabled_ = representation.enabled;\n Object.defineProperty(level, 'enabled', {\n /**\n * Get whether the QualityLevel is enabled.\n *\n * @return {boolean} True if the QualityLevel is enabled.\n */\n get: function get() {\n return level.enabled_();\n },\n\n /**\n * Enable or disable the QualityLevel.\n *\n * @param {boolean} enable true to enable QualityLevel, false to disable.\n */\n set: function set(enable) {\n level.enabled_(enable);\n }\n });\n return level;\n};\n\n/**\n * A list of QualityLevels.\n *\n * interface QualityLevelList : EventTarget {\n * getter QualityLevel (unsigned long index);\n * readonly attribute unsigned long length;\n * readonly attribute long selectedIndex;\n *\n * void addQualityLevel(QualityLevel qualityLevel)\n * void removeQualityLevel(QualityLevel remove)\n * QualityLevel? getQualityLevelById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddqualitylevel;\n * attribute EventHandler onremovequalitylevel;\n * };\n *\n * @extends videojs.EventTarget\n * @class QualityLevelList\n */\n\nvar QualityLevelList =\n/*#__PURE__*/\nfunction (_videojs$EventTarget) {\n _inheritsLoose(QualityLevelList, _videojs$EventTarget);\n\n function QualityLevelList() {\n var _this;\n\n _this = _videojs$EventTarget.call(this) || this;\n\n var list = _assertThisInitialized(_assertThisInitialized(_this)); // eslint-disable-line\n\n\n if (videojs.browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (var prop in QualityLevelList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = QualityLevelList.prototype[prop];\n }\n }\n }\n\n list.levels_ = [];\n list.selectedIndex_ = -1;\n /**\n * Get the index of the currently selected QualityLevel.\n *\n * @returns {number} The index of the selected QualityLevel. -1 if none selected.\n * @readonly\n */\n\n Object.defineProperty(list, 'selectedIndex', {\n get: function get() {\n return list.selectedIndex_;\n }\n });\n /**\n * Get the length of the list of QualityLevels.\n *\n * @returns {number} The length of the list.\n * @readonly\n */\n\n Object.defineProperty(list, 'length', {\n get: function get() {\n return list.levels_.length;\n }\n });\n return list || _assertThisInitialized(_this);\n }\n /**\n * Adds a quality level to the list.\n *\n * @param {Representation|Object} representation The representation of the quality level\n * @param {string} representation.id Unique id of the QualityLevel\n * @param {number=} representation.width Resolution width of the QualityLevel\n * @param {number=} representation.height Resolution height of the QualityLevel\n * @param {number} representation.bandwidth Bitrate of the QualityLevel\n * @param {Function} representation.enabled Callback to enable/disable QualityLevel\n * @return {QualityLevel} the QualityLevel added to the list\n * @method addQualityLevel\n */\n\n\n var _proto = QualityLevelList.prototype;\n\n _proto.addQualityLevel = function addQualityLevel(representation) {\n var qualityLevel = this.getQualityLevelById(representation.id); // Do not add duplicate quality levels\n\n if (qualityLevel) {\n return qualityLevel;\n }\n\n var index = this.levels_.length;\n qualityLevel = new QualityLevel(representation);\n\n if (!('' + index in this)) {\n Object.defineProperty(this, index, {\n get: function get() {\n return this.levels_[index];\n }\n });\n }\n\n this.levels_.push(qualityLevel);\n this.trigger({\n qualityLevel: qualityLevel,\n type: 'addqualitylevel'\n });\n return qualityLevel;\n };\n /**\n * Removes a quality level from the list.\n *\n * @param {QualityLevel} remove QualityLevel to remove to the list.\n * @return {QualityLevel|null} the QualityLevel removed or null if nothing removed\n * @method removeQualityLevel\n */\n\n\n _proto.removeQualityLevel = function removeQualityLevel(qualityLevel) {\n var removed = null;\n\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] === qualityLevel) {\n removed = this.levels_.splice(i, 1)[0];\n\n if (this.selectedIndex_ === i) {\n this.selectedIndex_ = -1;\n } else if (this.selectedIndex_ > i) {\n this.selectedIndex_--;\n }\n\n break;\n }\n }\n\n if (removed) {\n this.trigger({\n qualityLevel: qualityLevel,\n type: 'removequalitylevel'\n });\n }\n\n return removed;\n };\n /**\n * Searches for a QualityLevel with the given id.\n *\n * @param {string} id The id of the QualityLevel to find.\n * @return {QualityLevel|null} The QualityLevel with id, or null if not found.\n * @method getQualityLevelById\n */\n\n\n _proto.getQualityLevelById = function getQualityLevelById(id) {\n for (var i = 0, l = this.length; i < l; i++) {\n var level = this[i];\n\n if (level.id === id) {\n return level;\n }\n }\n\n return null;\n };\n /**\n * Resets the list of QualityLevels to empty\n *\n * @method dispose\n */\n\n\n _proto.dispose = function dispose() {\n this.selectedIndex_ = -1;\n this.levels_.length = 0;\n };\n\n return QualityLevelList;\n}(videojs.EventTarget);\n/**\n * change - The selected QualityLevel has changed.\n * addqualitylevel - A QualityLevel has been added to the QualityLevelList.\n * removequalitylevel - A QualityLevel has been removed from the QualityLevelList.\n */\n\n\nQualityLevelList.prototype.allowedEvents_ = {\n change: 'change',\n addqualitylevel: 'addqualitylevel',\n removequalitylevel: 'removequalitylevel'\n}; // emulate attribute EventHandler support to allow for feature detection\n\nfor (var event in QualityLevelList.prototype.allowedEvents_) {\n QualityLevelList.prototype['on' + event] = null;\n}\n\nvar version = \"2.0.9\";\n\nvar registerPlugin = videojs.registerPlugin || videojs.plugin;\n/**\n * Initialization function for the qualityLevels plugin. Sets up the QualityLevelList and\n * event handlers.\n *\n * @param {Player} player Player object.\n * @param {Object} options Plugin options object.\n * @function initPlugin\n */\n\nvar initPlugin = function initPlugin(player, options) {\n var originalPluginFn = player.qualityLevels;\n var qualityLevelList = new QualityLevelList();\n\n var disposeHandler = function disposeHandler() {\n qualityLevelList.dispose();\n player.qualityLevels = originalPluginFn;\n player.off('dispose', disposeHandler);\n };\n\n player.on('dispose', disposeHandler);\n\n player.qualityLevels = function () {\n return qualityLevelList;\n };\n\n player.qualityLevels.VERSION = version;\n return qualityLevelList;\n};\n/**\n * A video.js plugin.\n *\n * In the plugin function, the value of `this` is a video.js `Player`\n * instance. You cannot rely on the player being in a \"ready\" state here,\n * depending on how the plugin is invoked. This may or may not be important\n * to you; if not, remove the wait for \"ready\"!\n *\n * @param {Object} options Plugin options object\n * @function qualityLevels\n */\n\n\nvar qualityLevels = function qualityLevels(options) {\n return initPlugin(this, videojs.mergeOptions({}, options));\n}; // Register the plugin with video.js.\n\n\nregisterPlugin('qualityLevels', qualityLevels); // Include the version number.\n\nqualityLevels.VERSION = version;\n\nexport default qualityLevels;\n","import videojs from 'video.js';\n\nvar version = \"1.1.4\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\nvar asyncGenerator = function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(function (arg) {\n resume(\"next\", arg);\n }, function (arg) {\n resume(\"throw\", arg);\n });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n return this;\n };\n }\n\n AsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n };\n\n AsyncGenerator.prototype.throw = function (arg) {\n return this._invoke(\"throw\", arg);\n };\n\n AsyncGenerator.prototype.return = function (arg) {\n return this._invoke(\"return\", arg);\n };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\n\n\n\n\n\n\n\n\n\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar VideoJsButtonClass = videojs.getComponent('MenuButton');\nvar VideoJsMenuClass = videojs.getComponent('Menu');\nvar VideoJsComponent = videojs.getComponent('Component');\nvar Dom = videojs.dom;\n\n/**\n * Convert string to title case.\n *\n * @param {string} string - the string to convert\n * @return {string} the returned titlecase string\n */\nfunction toTitleCase(string) {\n if (typeof string !== 'string') {\n return string;\n }\n\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n/**\n * Extend vjs button class for quality button.\n */\n\nvar ConcreteButton = function (_VideoJsButtonClass) {\n inherits(ConcreteButton, _VideoJsButtonClass);\n\n /**\n * Button constructor.\n *\n * @param {Player} player - videojs player instance\n */\n function ConcreteButton(player) {\n classCallCheck(this, ConcreteButton);\n return possibleConstructorReturn(this, _VideoJsButtonClass.call(this, player, {\n title: player.localize('Quality'),\n name: 'QualityButton'\n }));\n }\n\n /**\n * Creates button items.\n *\n * @return {Array} - Button items\n */\n\n\n ConcreteButton.prototype.createItems = function createItems() {\n return [];\n };\n\n /**\n * Create the menu and add all items to it.\n *\n * @return {Menu}\n * The constructed menu\n */\n\n\n ConcreteButton.prototype.createMenu = function createMenu() {\n var menu = new VideoJsMenuClass(this.player_, { menuButton: this });\n\n this.hideThreshold_ = 0;\n\n // Add a title list item to the top\n if (this.options_.title) {\n var titleEl = Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.options_.title),\n tabIndex: -1\n });\n var titleComponent = new VideoJsComponent(this.player_, { el: titleEl });\n\n this.hideThreshold_ += 1;\n\n menu.addItem(titleComponent);\n }\n\n this.items = this.createItems();\n\n if (this.items) {\n // Add menu items to the menu\n for (var i = 0; i < this.items.length; i++) {\n menu.addItem(this.items[i]);\n }\n }\n\n return menu;\n };\n\n return ConcreteButton;\n}(VideoJsButtonClass);\n\n// Concrete classes\nvar VideoJsMenuItemClass = videojs.getComponent('MenuItem');\n\n/**\n * Extend vjs menu item class.\n */\n\nvar ConcreteMenuItem = function (_VideoJsMenuItemClass) {\n inherits(ConcreteMenuItem, _VideoJsMenuItemClass);\n\n /**\n * Menu item constructor.\n *\n * @param {Player} player - vjs player\n * @param {Object} item - Item object\n * @param {ConcreteButton} qualityButton - The containing button.\n * @param {HlsQualitySelectorPlugin} plugin - This plugin instance.\n */\n function ConcreteMenuItem(player, item, qualityButton, plugin) {\n classCallCheck(this, ConcreteMenuItem);\n\n var _this = possibleConstructorReturn(this, _VideoJsMenuItemClass.call(this, player, {\n label: item.label,\n selectable: true,\n selected: item.selected || false\n }));\n\n _this.item = item;\n _this.qualityButton = qualityButton;\n _this.plugin = plugin;\n return _this;\n }\n\n /**\n * Click event for menu item.\n */\n\n\n ConcreteMenuItem.prototype.handleClick = function handleClick() {\n\n // Reset other menu items selected status.\n for (var i = 0; i < this.qualityButton.items.length; ++i) {\n this.qualityButton.items[i].selected(false);\n }\n\n // Set this menu item to selected, and set quality.\n this.plugin.setQuality(this.item.value);\n this.selected(true);\n };\n\n return ConcreteMenuItem;\n}(VideoJsMenuItemClass);\n\n// Default options for the plugin.\nvar defaults = {};\n\n// Cross-compatibility for Video.js 5 and 6.\nvar registerPlugin = videojs.registerPlugin || videojs.plugin;\n// const dom = videojs.dom || videojs;\n\n/**\n * VideoJS HLS Quality Selector Plugin class.\n */\n\nvar HlsQualitySelectorPlugin = function () {\n\n /**\n * Plugin Constructor.\n *\n * @param {Player} player - The videojs player instance.\n * @param {Object} options - The plugin options.\n */\n function HlsQualitySelectorPlugin(player, options) {\n classCallCheck(this, HlsQualitySelectorPlugin);\n\n this.player = player;\n this.config = options;\n\n // If there is quality levels plugin and the HLS tech exists\n // then continue.\n if (this.player.qualityLevels && this.getHls()) {\n // Create the quality button.\n this.createQualityButton();\n this.bindPlayerEvents();\n }\n }\n\n /**\n * Returns HLS Plugin\n *\n * @return {*} - videojs-hls-contrib plugin.\n */\n\n\n HlsQualitySelectorPlugin.prototype.getHls = function getHls() {\n return this.player.tech({ IWillNotUseThisInPlugins: true }).hls;\n };\n\n /**\n * Binds listener for quality level changes.\n */\n\n\n HlsQualitySelectorPlugin.prototype.bindPlayerEvents = function bindPlayerEvents() {\n this.player.qualityLevels().on('addqualitylevel', this.onAddQualityLevel.bind(this));\n };\n\n /**\n * Adds the quality menu button to the player control bar.\n */\n\n\n HlsQualitySelectorPlugin.prototype.createQualityButton = function createQualityButton() {\n\n var player = this.player;\n\n this._qualityButton = new ConcreteButton(player);\n\n var placementIndex = player.controlBar.children().length - 2;\n var concreteButtonInstance = player.controlBar.addChild(this._qualityButton, { componentClass: 'qualitySelector' }, this.config.placementIndex || placementIndex);\n\n concreteButtonInstance.addClass('vjs-quality-selector');\n if (!this.config.displayCurrentQuality) {\n var icon = ' ' + (this.config.vjsIconClass || 'vjs-icon-hd');\n\n concreteButtonInstance.menuButton_.$('.vjs-icon-placeholder').className += icon;\n } else {\n this.setButtonInnerText('auto');\n }\n concreteButtonInstance.removeClass('vjs-hidden');\n };\n\n /**\n *Set inner button text.\n *\n * @param {string} text - the text to display in the button.\n */\n\n\n HlsQualitySelectorPlugin.prototype.setButtonInnerText = function setButtonInnerText(text) {\n this._qualityButton.menuButton_.$('.vjs-icon-placeholder').innerHTML = text;\n };\n\n /**\n * Builds individual quality menu items.\n *\n * @param {Object} item - Individual quality menu item.\n * @return {ConcreteMenuItem} - Menu item\n */\n\n\n HlsQualitySelectorPlugin.prototype.getQualityMenuItem = function getQualityMenuItem(item) {\n var player = this.player;\n\n return new ConcreteMenuItem(player, item, this._qualityButton, this);\n };\n\n /**\n * Executed when a quality level is added from HLS playlist.\n */\n\n\n HlsQualitySelectorPlugin.prototype.onAddQualityLevel = function onAddQualityLevel() {\n var _this = this;\n\n var player = this.player;\n var qualityList = player.qualityLevels();\n var levels = qualityList.levels_ || [];\n var levelItems = [];\n\n var _loop = function _loop(i) {\n if (!levelItems.filter(function (_existingItem) {\n return _existingItem.item && _existingItem.item.value === levels[i].height;\n }).length) {\n var levelItem = _this.getQualityMenuItem.call(_this, {\n label: levels[i].height + 'p',\n value: levels[i].height\n });\n\n levelItems.push(levelItem);\n }\n };\n\n for (var i = 0; i < levels.length; ++i) {\n _loop(i);\n }\n\n levelItems.sort(function (current, next) {\n if ((typeof current === 'undefined' ? 'undefined' : _typeof(current)) !== 'object' || (typeof next === 'undefined' ? 'undefined' : _typeof(next)) !== 'object') {\n return -1;\n }\n if (current.item.value < next.item.value) {\n return -1;\n }\n if (current.item.value > next.item.value) {\n return 1;\n }\n return 0;\n });\n\n levelItems.push(this.getQualityMenuItem.call(this, {\n label: player.localize('Auto'),\n value: 'auto',\n selected: true\n }));\n\n if (this._qualityButton) {\n this._qualityButton.createItems = function () {\n return levelItems;\n };\n this._qualityButton.update();\n }\n };\n\n /**\n * Sets quality (based on media height)\n *\n * @param {number} height - A number representing HLS playlist.\n */\n\n\n HlsQualitySelectorPlugin.prototype.setQuality = function setQuality(height) {\n var qualityList = this.player.qualityLevels();\n\n // Set quality on plugin\n this._currentQuality = height;\n\n if (this.config.displayCurrentQuality) {\n this.setButtonInnerText(height === 'auto' ? height : height + 'p');\n }\n\n for (var i = 0; i < qualityList.length; ++i) {\n var quality = qualityList[i];\n\n quality.enabled = quality.height === height || height === 'auto';\n }\n this._qualityButton.unpressButton();\n };\n\n /**\n * Return the current set quality or 'auto'\n *\n * @return {string} the currently set quality\n */\n\n\n HlsQualitySelectorPlugin.prototype.getCurrentQuality = function getCurrentQuality() {\n return this._currentQuality || 'auto';\n };\n\n return HlsQualitySelectorPlugin;\n}();\n\n/**\n * Function to invoke when the player is ready.\n *\n * This is a great place for your plugin to initialize itself. When this\n * function is called, the player will have its DOM and child components\n * in place.\n *\n * @function onPlayerReady\n * @param {Player} player\n * A Video.js player object.\n *\n * @param {Object} [options={}]\n * A plain object containing options for the plugin.\n */\n\n\nvar onPlayerReady = function onPlayerReady(player, options) {\n player.addClass('vjs-hls-quality-selector');\n player.hlsQualitySelector = new HlsQualitySelectorPlugin(player, options);\n};\n\n/**\n * A video.js plugin.\n *\n * In the plugin function, the value of `this` is a video.js `Player`\n * instance. You cannot rely on the player being in a \"ready\" state here,\n * depending on how the plugin is invoked. This may or may not be important\n * to you; if not, remove the wait for \"ready\"!\n *\n * @function hlsQualitySelector\n * @param {Object} [options={}]\n * An object of options left to the plugin author to define.\n */\nvar hlsQualitySelector = function hlsQualitySelector(options) {\n var _this2 = this;\n\n this.ready(function () {\n onPlayerReady(_this2, videojs.mergeOptions(defaults, options));\n });\n};\n\n// Register the plugin with video.js.\nregisterPlugin('hlsQualitySelector', hlsQualitySelector);\n\n// Include the version number.\nhlsQualitySelector.VERSION = version;\n\nexport default hlsQualitySelector;\n","/*\n * Video.js Hotkeys\n * https://github.com/ctd1500/videojs-hotkeys\n *\n * Copyright (c) 2015 Chris Dougherty\n * Licensed under the Apache-2.0 license.\n */\n\n;(function(root, factory) {\n if (typeof window !== 'undefined' && window.videojs) {\n factory(window.videojs);\n } else if (typeof define === 'function' && define.amd) {\n define('videojs-hotkeys', ['video.js'], function (module) {\n return factory(module.default || module);\n });\n } else if (typeof module !== 'undefined' && module.exports) {\n var videojs = require('video.js');\n module.exports = factory(videojs.default || videojs);\n }\n}(this, function (videojs) {\n \"use strict\";\n if (typeof window !== 'undefined') {\n window['videojs_hotkeys'] = { version: \"0.2.28\" };\n }\n\n var hotkeys = function(options) {\n var player = this;\n var pEl = player.el();\n var doc = document;\n var def_options = {\n volumeStep: 0.1,\n seekStep: 5,\n enableMute: true,\n enableVolumeScroll: true,\n enableHoverScroll: false,\n enableFullscreen: true,\n enableNumbers: true,\n enableJogStyle: false,\n alwaysCaptureHotkeys: false,\n captureDocumentHotkeys: false,\n documentHotkeysFocusElementFilter: function () { return false },\n enableModifiersForNumbers: true,\n enableInactiveFocus: true,\n skipInitialFocus: false,\n playPauseKey: playPauseKey,\n rewindKey: rewindKey,\n forwardKey: forwardKey,\n volumeUpKey: volumeUpKey,\n volumeDownKey: volumeDownKey,\n muteKey: muteKey,\n fullscreenKey: fullscreenKey,\n customKeys: {}\n };\n\n var cPlay = 1,\n cRewind = 2,\n cForward = 3,\n cVolumeUp = 4,\n cVolumeDown = 5,\n cMute = 6,\n cFullscreen = 7;\n\n // Use built-in merge function from Video.js v5.0+ or v4.4.0+\n var mergeOptions = videojs.mergeOptions || videojs.util.mergeOptions;\n options = mergeOptions(def_options, options || {});\n\n var volumeStep = options.volumeStep,\n seekStep = options.seekStep,\n enableMute = options.enableMute,\n enableVolumeScroll = options.enableVolumeScroll,\n enableHoverScroll = options.enableHoverScroll,\n enableFull = options.enableFullscreen,\n enableNumbers = options.enableNumbers,\n enableJogStyle = options.enableJogStyle,\n alwaysCaptureHotkeys = options.alwaysCaptureHotkeys,\n captureDocumentHotkeys = options.captureDocumentHotkeys,\n documentHotkeysFocusElementFilter = options.documentHotkeysFocusElementFilter,\n enableModifiersForNumbers = options.enableModifiersForNumbers,\n enableInactiveFocus = options.enableInactiveFocus,\n skipInitialFocus = options.skipInitialFocus;\n\n var videojsVer = videojs.VERSION;\n\n // Set default player tabindex to handle keydown and doubleclick events\n if (!pEl.hasAttribute('tabIndex')) {\n pEl.setAttribute('tabIndex', '-1');\n }\n\n // Remove player outline to fix video performance issue\n pEl.style.outline = \"none\";\n\n if (alwaysCaptureHotkeys || !player.autoplay()) {\n if (!skipInitialFocus) {\n player.one('play', function() {\n pEl.focus(); // Fixes the .vjs-big-play-button handing focus back to body instead of the player\n });\n }\n }\n\n if (enableInactiveFocus) {\n player.on('userinactive', function() {\n // When the control bar fades, re-apply focus to the player if last focus was a control button\n var cancelFocusingPlayer = function() {\n clearTimeout(focusingPlayerTimeout);\n };\n var focusingPlayerTimeout = setTimeout(function() {\n player.off('useractive', cancelFocusingPlayer);\n var activeElement = doc.activeElement;\n var controlBar = pEl.querySelector('.vjs-control-bar');\n if (activeElement && activeElement.parentElement == controlBar) {\n pEl.focus();\n }\n }, 10);\n\n player.one('useractive', cancelFocusingPlayer);\n });\n }\n\n player.on('play', function() {\n // Fix allowing the YouTube plugin to have hotkey support.\n var ifblocker = pEl.querySelector('.iframeblocker');\n if (ifblocker && ifblocker.style.display === '') {\n ifblocker.style.display = \"block\";\n ifblocker.style.bottom = \"39px\";\n }\n });\n\n var keyDown = function keyDown(event) {\n var ewhich = event.which, wasPlaying, seekTime;\n var ePreventDefault = event.preventDefault.bind(event);\n var duration = player.duration();\n // When controls are disabled, hotkeys will be disabled as well\n if (player.controls()) {\n\n // Don't catch keys if any control buttons are focused, unless alwaysCaptureHotkeys is true\n var activeEl = doc.activeElement;\n if (\n alwaysCaptureHotkeys ||\n (captureDocumentHotkeys && documentHotkeysFocusElementFilter(activeEl)) ||\n\n activeEl == pEl ||\n activeEl == pEl.querySelector('.vjs-tech') ||\n activeEl == pEl.querySelector('.vjs-control-bar') ||\n activeEl == pEl.querySelector('.iframeblocker')\n ) {\n\n switch (checkKeys(event, player)) {\n // Spacebar toggles play/pause\n case cPlay:\n ePreventDefault();\n if (alwaysCaptureHotkeys || captureDocumentHotkeys) {\n // Prevent control activation with space\n event.stopPropagation();\n }\n\n if (player.paused()) {\n silencePromise(player.play());\n } else {\n player.pause();\n }\n break;\n\n // Seeking with the left/right arrow keys\n case cRewind: // Seek Backward\n wasPlaying = !player.paused();\n ePreventDefault();\n if (wasPlaying) {\n player.pause();\n }\n seekTime = player.currentTime() - seekStepD(event);\n // The flash player tech will allow you to seek into negative\n // numbers and break the seekbar, so try to prevent that.\n if (seekTime <= 0) {\n seekTime = 0;\n }\n player.currentTime(seekTime);\n if (wasPlaying) {\n silencePromise(player.play());\n }\n break;\n case cForward: // Seek Forward\n wasPlaying = !player.paused();\n ePreventDefault();\n if (wasPlaying) {\n player.pause();\n }\n seekTime = player.currentTime() + seekStepD(event);\n // Fixes the player not sending the end event if you\n // try to seek past the duration on the seekbar.\n if (seekTime >= duration) {\n seekTime = wasPlaying ? duration - .001 : duration;\n }\n player.currentTime(seekTime);\n if (wasPlaying) {\n silencePromise(player.play());\n }\n break;\n\n // Volume control with the up/down arrow keys\n case cVolumeDown:\n ePreventDefault();\n if (!enableJogStyle) {\n player.volume(player.volume() - volumeStep);\n } else {\n seekTime = player.currentTime() - 1;\n if (player.currentTime() <= 1) {\n seekTime = 0;\n }\n player.currentTime(seekTime);\n }\n break;\n case cVolumeUp:\n ePreventDefault();\n if (!enableJogStyle) {\n player.volume(player.volume() + volumeStep);\n } else {\n seekTime = player.currentTime() + 1;\n if (seekTime >= duration) {\n seekTime = duration;\n }\n player.currentTime(seekTime);\n }\n break;\n\n // Toggle Mute with the M key\n case cMute:\n if (enableMute) {\n player.muted(!player.muted());\n }\n break;\n\n // Toggle Fullscreen with the F key\n case cFullscreen:\n if (enableFull) {\n if (player.isFullscreen()) {\n player.exitFullscreen();\n } else {\n player.requestFullscreen();\n }\n }\n break;\n\n default:\n // Number keys from 0-9 skip to a percentage of the video. 0 is 0% and 9 is 90%\n if ((ewhich > 47 && ewhich < 59) || (ewhich > 95 && ewhich < 106)) {\n // Do not handle if enableModifiersForNumbers set to false and keys are Ctrl, Cmd or Alt\n if (enableModifiersForNumbers || !(event.metaKey || event.ctrlKey || event.altKey)) {\n if (enableNumbers) {\n var sub = 48;\n if (ewhich > 95) {\n sub = 96;\n }\n var number = ewhich - sub;\n ePreventDefault();\n player.currentTime(player.duration() * number * 0.1);\n }\n }\n }\n\n // Handle any custom hotkeys\n for (var customKey in options.customKeys) {\n var customHotkey = options.customKeys[customKey];\n // Check for well formed custom keys\n if (customHotkey && customHotkey.key && customHotkey.handler) {\n // Check if the custom key's condition matches\n if (customHotkey.key(event)) {\n ePreventDefault();\n customHotkey.handler(player, options, event);\n }\n }\n }\n }\n }\n }\n };\n\n var doubleClick = function doubleClick(event) {\n // Video.js added double-click fullscreen in 7.1.0\n if (videojsVer != null && videojsVer <= \"7.1.0\") {\n // When controls are disabled, hotkeys will be disabled as well\n if (player.controls()) {\n\n // Don't catch clicks if any control buttons are focused\n var activeEl = event.relatedTarget || event.toElement || doc.activeElement;\n if (activeEl == pEl ||\n activeEl == pEl.querySelector('.vjs-tech') ||\n activeEl == pEl.querySelector('.iframeblocker')) {\n\n if (enableFull) {\n if (player.isFullscreen()) {\n player.exitFullscreen();\n } else {\n player.requestFullscreen();\n }\n }\n }\n }\n }\n };\n\n var volumeHover = false;\n var volumeSelector = pEl.querySelector('.vjs-volume-menu-button') || pEl.querySelector('.vjs-volume-panel');\n if (volumeSelector != null) {\n volumeSelector.onmouseover = function() { volumeHover = true; };\n volumeSelector.onmouseout = function() { volumeHover = false; };\n }\n\n var mouseScroll = function mouseScroll(event) {\n if (enableHoverScroll) {\n // If we leave this undefined then it can match non-existent elements below\n var activeEl = 0;\n } else {\n var activeEl = doc.activeElement;\n }\n\n // When controls are disabled, hotkeys will be disabled as well\n if (player.controls()) {\n if (alwaysCaptureHotkeys ||\n activeEl == pEl ||\n activeEl == pEl.querySelector('.vjs-tech') ||\n activeEl == pEl.querySelector('.iframeblocker') ||\n activeEl == pEl.querySelector('.vjs-control-bar') ||\n volumeHover) {\n\n if (enableVolumeScroll) {\n event = window.event || event;\n var delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));\n event.preventDefault();\n\n if (delta == 1) {\n player.volume(player.volume() + volumeStep);\n } else if (delta == -1) {\n player.volume(player.volume() - volumeStep);\n }\n }\n }\n }\n };\n\n var checkKeys = function checkKeys(e, player) {\n // Allow some modularity in defining custom hotkeys\n\n // Play/Pause check\n if (options.playPauseKey(e, player)) {\n return cPlay;\n }\n\n // Seek Backward check\n if (options.rewindKey(e, player)) {\n return cRewind;\n }\n\n // Seek Forward check\n if (options.forwardKey(e, player)) {\n return cForward;\n }\n\n // Volume Up check\n if (options.volumeUpKey(e, player)) {\n return cVolumeUp;\n }\n\n // Volume Down check\n if (options.volumeDownKey(e, player)) {\n return cVolumeDown;\n }\n\n // Mute check\n if (options.muteKey(e, player)) {\n return cMute;\n }\n\n // Fullscreen check\n if (options.fullscreenKey(e, player)) {\n return cFullscreen;\n }\n };\n\n function playPauseKey(e) {\n // Space bar or MediaPlayPause\n return (e.which === 32 || e.which === 179);\n }\n\n function rewindKey(e) {\n // Left Arrow or MediaRewind\n return (e.which === 37 || e.which === 177);\n }\n\n function forwardKey(e) {\n // Right Arrow or MediaForward\n return (e.which === 39 || e.which === 176);\n }\n\n function volumeUpKey(e) {\n // Up Arrow\n return (e.which === 38);\n }\n\n function volumeDownKey(e) {\n // Down Arrow\n return (e.which === 40);\n }\n\n function muteKey(e) {\n // M key\n return (e.which === 77);\n }\n\n function fullscreenKey(e) {\n // F key\n return (e.which === 70);\n }\n\n function seekStepD(e) {\n // SeekStep caller, returns an int, or a function returning an int\n return (typeof seekStep === \"function\" ? seekStep(e) : seekStep);\n }\n\n function silencePromise(value) {\n if (value != null && typeof value.then === 'function') {\n value.then(null, function(e) {});\n }\n }\n\n if (captureDocumentHotkeys) {\n var capDocHK = function (event) { keyDown(event) };\n document.addEventListener('keydown', capDocHK);\n\n this.dispose = function () {\n document.removeEventListener('keydown', capDocHK);\n }\n } else {\n player.on('keydown', keyDown);\n }\n\n player.on('dblclick', doubleClick);\n player.on('mousewheel', mouseScroll);\n player.on(\"DOMMouseScroll\", mouseScroll);\n\n return this;\n };\n\n var registerPlugin = videojs.registerPlugin || videojs.plugin;\n registerPlugin('hotkeys', hotkeys);\n}));\n"],"names":["definitionsFromContext","context","keys","map","key","identifier","logicalName","match","replace","identifierForContextKey","module","controllerConstructor","default","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","filter","value","$","cocoon_element_counter","create_new_id","Date","getTime","newcontent_braced","id","newcontent_underscord","document","on","e","preventDefault","stopPropagation","$this","this","assoc","data","assocs","content","insertionMethod","insertionNode","insertionTraversal","count","parseInt","regexp_braced","RegExp","regexp_underscord","new_id","new_content","new_contents","originalEvent","isNaN","Math","max","push","insertionNodeElem","console","warn","parent","getInsertionNodeElem","length","each","i","node","contentNode","before_insert","jQuery","Event","trigger","isDefaultPrevented","wrapper_class","node_to_delete","closest","trigger_node","before_remove","timeout","setTimeout","hasClass","detach","prev","val","hide","obj","fn","datepicker","language","days","daysShort","daysMin","months","monthsShort","today","clear","dateFormat","timeFormat","firstDay","templates","dp","years","Constructor","Body","d","type","opts","$el","onlyTimepicker","init","prototype","_buildBaseHtml","_render","_bindEvents","proxy","_onClickCell","appendTo","$content","$names","$cells","_getDayNamesHtml","curDay","html","undefined","isWeekend","loc","_getCellContents","date","classes","currentDate","minRange","resetTime","maxRange","getParsedDate","render","day","month","parsedDate","selectOtherMonths","showOtherMonths","monthsField","decade","curDecade","year","selectOtherYears","showOtherYears","onRenderCell","range","isSame","selectedDates","focused","bigger","less","_isSelected","_isInRange","disabled","_getDaysHtml","m","y","totalMonthDays","getDaysCount","firstMonthDay","getFullYear","getMonth","getDay","lastMonthDay","daysFromPevMonth","daysFromNextMonth","_getDayHtml","getDate","_getMonthsHtml","_getMonthHtml","_getYearsHtml","getDecade","_getYearHtml","_renderTypes","dayNames","bind","_update","$cell","_this","cell","_getDateFromCell","cellType","attr","show","addClass","acitve","removeClass","active","_handleClick","el","view","minView","selectedDate","alreadySelected","_handleAlreadySelectedDates","_trigger","down","target","$body","$datepickersContainer","pluginName","containerBuilt","defaults","hotKeys","Datepicker","inline","startDate","weekends","altField","altFieldDateFormat","toggleSelected","keyboardNav","position","offset","moveToOtherMonthsOnSelect","moveToOtherYearsOnSelect","minDate","maxDate","disableNavWhenOutOfRange","multipleDates","multipleDatesSeparator","todayButton","clearButton","showEvent","autoClose","prevHtml","nextHtml","navTitles","timepicker","dateTimeSeparator","minHours","maxHours","minMinutes","maxMinutes","hoursStep","minutesStep","onSelect","onShow","onHide","onChangeMonth","onChangeYear","onChangeDecade","onChangeView","options","extend","nodeName","elIsInput","$altField","inited","visible","silent","currentView","_createShortCuts","views","_prevOnSelectValue","VERSION","viewIndexes","_buildDatepickersContainer","_defineLocale","_syncWithMinMaxDates","_setPositionClasses","_bindKeyboardEvents","$datepicker","_onMouseDownDatepicker","_onMouseUpDatepicker","Timepicker","_bindTimepickerEvents","nav","Navigation","_onMouseEnterCell","_onMouseLeaveCell","_onShowEvent","_onMouseUpEl","_onBlur","_onKeyUpGeneral","window","_onResize","_onMouseUpBody","_onKeyDown","_onKeyUp","_onHotKey","_onTimeChange","indexOf","lang","ru","join","boundary","_getWordBoundaryRegExp","ampm","append","$appendTarget","$inline","insertAfter","$nav","_triggerOnChange","formattedDates","parsedSelected","dates","hours","minutes","formatDate","next","o","string","validHours","result","locale","leadingZero","getLeadingZeroNum","fullHours","dayPeriod","replacer","_replacer","_getValidHoursFromDate","test","toUpperCase","fullDate","fullMonth","fullMinutes","toString","slice","str","reg","p1","p2","p3","sign","symbols","selectDate","len","newDate","Array","isArray","forEach","lastSelectedDate","_setTime","setHours","setMinutes","_setInputValue","timepickerIsActive","removeDate","selected","some","curDate","splice","update","param","arguments","_addButtonsIfNeed","setPosition","_handleDate","_updateRanges","_updateCurrentTime","curTime","minTime","maxTime","checkDate","res","altValues","format","altFormat","time","min","dMinTime","dMaxTime","types","_getDimensions","width","outerWidth","height","outerHeight","left","top","pos","main","split","removeAttr","dims","selfDims","secondary","css","_bindVisionEvents","inFocus","blur","_changeView","up","event","off","one","dir","nextView","viewIndex","_handleHotKey","focusedParsed","totalDaysInNextMonth","_getFocusedDate","monthChanged","yearChanged","decadeChanged","_registerKey","curKey","_unRegisterKey","index","_isHotKeyPressed","currentHotKey","found","pressedKeys","sort","hotKey","every","args","_focusNextCell","keyCode","nd","_getCell","selector","find","destroy","remove","timepickerFocus","focus","code","which","h","_focused","prevView","substring","getHours","getMinutes","firstYear","floor","template","source","date1","date2","d1","d2","_type","dateCompareTo","num","$buttonsContainer","_onClickNavButton","_onClickNavTitle","_addButton","title","_getTitle","setNavStatus","_addButtonsContainer","action","label","_disableNav","_activateNav","inst","input","_buildHTML","navigator","userAgent","_onSelectDate","$ranges","_onChangeRange","_onMouseUpRange","_onMouseEnterRange","_onMouseOutRange","_date","_setMinTimeFromDate","_setMaxTimeFromDate","_setDefaultMinMaxTime","_validateHoursMinutes","lz","hourMin","hourMax","hourStep","hourValue","hourVisible","displayHours","minMin","minMax","minStep","minValue","_template","$timepicker","$hours","$minutes","$hoursText","$minutesText","$ampm","_hours","$target","name","Symbol","exports","number","lower","upper","getRawTag","objectToString","symToStringTag","toStringTag","Object","nativeMax","nativeMin","start","end","trimmedEndIndex","reTrimStart","freeGlobal","g","objectProto","hasOwnProperty","nativeObjectToString","isOwn","call","tag","unmasked","freeSelf","self","root","Function","reWhitespace","charAt","baseClamp","toNumber","isObject","now","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","thisArg","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","clearTimeout","cancel","flush","baseInRange","toFinite","baseGetTag","isObjectLike","debounce","INFINITY","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary","t","n","r","Promise","A","recalculate","responsiveOptions","docWidth","s","a","breakAt","O","useContainerForBreakpoints","container","clientWidth","innerWidth","columns","b","margin","x","mobileFirst","c","parseFloat","u","l","rows","v","style","p","M","offsetHeight","cols","dataset","macyComplete","tmpRows","f","lastcol","C","byCss","selectors","querySelectorAll","getElementsByClassName","getElementsByTagName","getElementById","running","events","add","run","shift","instance","emit","naturalHeight","naturalWidth","E","complete","addEventListener","then","constants","EVENT_IMAGE_LOAD","img","catch","EVENT_IMAGE_ERROR","w","all","EVENT_IMAGE_COMPLETE","I","EVENT_RESIZE","queue","N","debug","error","T","resizer","L","useOwnImageLoader","waitForImages","EVENT_INITIALIZED","_","getComputedStyle","getPropertyValue","V","children","from","offsetParent","trueOrder","EVENT_RECALCULATED","R","assign","k","useImageLoader","onInit","cancelLegacy","createElement","querySelector","getAttribute","random","removeAttribute","Element","q","recalculateOnImageLoad","runOnImageLoad","removeEventListener","reInit","OptionParser","parse","metas","meta","optionName","valid","parts","part","convertToCamelCase","Detector","platform","maxTouchPoints","MSStream","userAgentMatchesRegex","regexString","jQueryMobilePage","mobile","wrapperElement","Bakery","getCookieExpiresString","hideTtl","toGMTString","bake","hidePath","cookie","unbake","baked","datas","originalTop","originalMarginTop","handleJQueryMobilePageLoad","positioningDisabled","setContentPosition","wrappers","wrapper","setAttribute","marginTop","SmartBanner","constructor","parser","dispatchEvent","originalTopMargin","priceSuffix","priceSuffixApple","priceSuffixGoogle","icon","iconGoogle","iconApple","buttonUrl","buttonUrlGoogle","buttonUrlApple","closeLabel","customDesignModifier","author","price","button","platformEnabled","enabledPlatforms","disablePositioning","apiEnabled","api","userAgentExcluded","excludeUserAgentRegex","userAgentIncluded","includeUserAgentRegex","publish","Error","bannerDiv","appendChild","outerHTML","exit","handleExitClick","clickout","handleClickout","addEventListeners","restoreContentPosition","banner","removeChild","_assertThisInitialized","ReferenceError","QualityLevel","representation","level","browser","IS_IE8","prop","bitrate","bandwidth","enabled_","enabled","defineProperty","get","set","enable","QualityLevelList","_videojs$EventTarget","subClass","superClass","list","levels_","selectedIndex_","create","__proto__","_proto","addQualityLevel","qualityLevel","getQualityLevelById","removeQualityLevel","removed","dispose","EventTarget","allowedEvents_","change","addqualitylevel","removequalitylevel","version","registerPlugin","plugin","qualityLevels","player","mergeOptions","originalPluginFn","qualityLevelList","disposeHandler","_typeof","iterator","classCallCheck","AwaitValue","AsyncGenerator","gen","front","back","resume","arg","resolve","settle","done","err","reject","_invoke","request","return","asyncIterator","throw","inherits","enumerable","writable","configurable","setPrototypeOf","possibleConstructorReturn","VideoJsButtonClass","getComponent","VideoJsMenuClass","VideoJsComponent","Dom","dom","ConcreteButton","_VideoJsButtonClass","localize","createItems","createMenu","menu","player_","menuButton","hideThreshold_","options_","titleEl","createEl","className","innerHTML","tabIndex","titleComponent","addItem","items","ConcreteMenuItem","_VideoJsMenuItemClass","item","qualityButton","selectable","handleClick","setQuality","HlsQualitySelectorPlugin","config","getHls","createQualityButton","bindPlayerEvents","tech","IWillNotUseThisInPlugins","hls","onAddQualityLevel","_qualityButton","placementIndex","controlBar","concreteButtonInstance","addChild","componentClass","displayCurrentQuality","setButtonInnerText","vjsIconClass","menuButton_","text","getQualityMenuItem","levels","levelItems","_loop","_existingItem","levelItem","current","qualityList","_currentQuality","quality","unpressButton","getCurrentQuality","hlsQualitySelector","_this2","ready","onPlayerReady","factory","videojs","pEl","doc","def_options","volumeStep","seekStep","enableMute","enableVolumeScroll","enableHoverScroll","enableFullscreen","enableNumbers","enableJogStyle","alwaysCaptureHotkeys","captureDocumentHotkeys","documentHotkeysFocusElementFilter","enableModifiersForNumbers","enableInactiveFocus","skipInitialFocus","playPauseKey","rewindKey","forwardKey","volumeUpKey","volumeDownKey","muteKey","fullscreenKey","customKeys","util","enableFull","videojsVer","hasAttribute","outline","autoplay","cancelFocusingPlayer","focusingPlayerTimeout","activeElement","parentElement","ifblocker","display","bottom","keyDown","wasPlaying","seekTime","ewhich","ePreventDefault","duration","controls","activeEl","checkKeys","paused","silencePromise","play","pause","currentTime","seekStepD","volume","muted","isFullscreen","exitFullscreen","requestFullscreen","metaKey","ctrlKey","altKey","sub","customKey","customHotkey","handler","volumeHover","volumeSelector","onmouseover","onmouseout","mouseScroll","delta","wheelDelta","detail","capDocHK","relatedTarget","toElement"],"sourceRoot":""}