{"version":3,"file":"js/application-fa3ac3a92316a006ac72.js","mappings":"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","sources":["webpack://CityGrows/./vendor/assets/javascripts/jquery-formula.js","webpack://CityGrows/./node_modules/jquery-ujs/src/rails.js","webpack://CityGrows/./node_modules/regenerator-runtime/runtime.js"],"sourcesContent":["String.prototype.toFormulaDecimal = function () {\n var split = this.split('.');\n return split[0].replace(/[^\\d.]*/gi, '').replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + (typeof split[1] !== 'undefined' ? '.' + split[1].replace(/[^\\d.]*/gi, '') : '');\n};\n\nString.prototype.toFormulaString = function (shift) {\n var keyCode = parseInt(this);\n if (keyCode === 106) {\n return 'x';\n } else if (((keyCode === 187 || keyCode === 61) && shift === true) || keyCode === 107) {\n return '+';\n } else if (keyCode === 189 || keyCode === 173 || keyCode === 109) {\n return '-';\n } else if (keyCode === 190 || keyCode === 110) {\n return '.';\n } else if (keyCode === 191 || keyCode === 111) {\n return '/';\n } else {\n return String.fromCharCode(keyCode);\n }\n};\n\n(function ($) {\n var _PLUGIN_VERSION_ = '2.0.12';\n\n $.fn.formula = function (opt) {\n var _opt = {\n id: 'formula',\n cursorAnimTime: 160,\n cursorDelayTime: 500,\n strings: {\n formula: 'Formula',\n validationError: 'Validation Error',\n validationPassed: 'Passed'\n },\n import: {\n item: null,\n },\n export: {\n filter: function (data) {\n var filterData = data;\n return filterData;\n },\n item: function (e) {\n return e.data('value') !== 'undefined' && e.data('value') !== null ? e.data('value') : e.text();\n }\n }\n };\n\n var _args = arguments;\n $.extend(_opt, opt);\n\n return this.each(function () {\n var $this = $(this);\n\n $this.data('formula', this);\n\n this.init = function () {\n var context = this;\n\n var drag = false, move = false, offset = null;\n context.container = $(context).addClass(context.opt.id + '-container');\n context.container.wrap('
');\n\n context.alert = $('
' + _opt.strings.formula + '
');\n context.alert.insertBefore(context.container);\n\n context.text = $('');\n context.text.insertAfter(context.container).focus();\n context.text.bind('blur', function () {\n if (context.cursor !== null) {\n context.cursor.remove();\n context.destroyDrag();\n }\n });\n\n context.text.unbind('dblclick.' + context.opt.id + 'Handler').bind('dblclick.' + context.opt.id + 'Handler', function (event) {\n context.selectAll();\n });\n\n context.text.unbind('mousedown.' + context.opt.id + 'Handler').bind('mousedown.' + context.opt.id + 'Handler', function (event) {\n drag = true;\n\n offset = {\n x: event.offsetX,\n y: event.offsetY\n };\n });\n\n context.text.unbind('mouseup.' + context.opt.id + 'Handler').bind('mouseup.' + context.opt.id + 'Handler', function (event) {\n drag = false;\n if (move === true) {\n move = false;\n } else {\n context.click({\n x: event.offsetX,\n y: event.offsetY\n });\n }\n });\n\n var startIndex;\n context.text.unbind('mousemove.' + context.opt.id + 'Handler').bind('mousemove.' + context.opt.id + 'Handler', function (event) {\n if (drag === false) {\n return true;\n }\n\n if (Math.abs(offset.x - event.offsetX) <= 5 && Math.abs(offset.y - event.offsetY) <= 5) {\n return true;\n }\n\n if (context.container.hasClass('formula-active')) {\n context.click({\n x: event.offsetX,\n y: event.offsetY\n });\n }\n\n move = true;\n if (context.container.find('.' + context.opt.id + '-drag').length > 0) {\n var endIndex = 0;\n context.destroyDrag();\n context.click({\n x: event.offsetX,\n y: event.offsetY\n });\n endIndex = context.cursor.index();\n\n $drag = $('
');\n var start = 0, end = 0;\n if (startIndex > endIndex) {\n end = startIndex;\n start = endIndex;\n $drag.insertBefore(context.cursor);\n } else {\n start = startIndex;\n end = endIndex;\n $drag.insertAfter(context.cursor);\n }\n\n if (start === end) {\n return true;\n }\n\n context.container.children(':not(\".' + context.opt.id + '-cursor\")').filter(':gt(\"' + start + '\")').filter(':lt(\"' + (end - start) + '\")')\n .add(context.container.children(':not(\".' + context.opt.id + '-cursor\")').eq(start)).each(function () {\n var $this = $(this);\n $this.appendTo($drag);\n });\n\n if (startIndex > endIndex) {\n $drag.insertAfter(context.cursor);\n } else {\n $drag.insertBefore(context.cursor);\n }\n } else {\n context.destroyDrag();\n context.click({\n x: event.offsetX,\n y: event.offsetY\n });\n startIndex = context.cursor.index();\n\n $drag = $('
');\n $drag.insertAfter(context.cursor);\n }\n });\n\n context.text.unbind('keydown.' + context.opt.id + 'Handler').bind('keydown.' + context.opt.id + 'Handler', function (event) {\n event.preventDefault();\n var $drag, $prev, $next, $item, $dragItem, text, parentPadding;\n\n if (context.cursor !== null && context.cursor.length > 0) {\n var keyCode = event.which;\n if (keyCode === 116 || (keyCode === 82 && event.ctrlKey)) {\n location.reload();\n } else if (keyCode === 65 && event.ctrlKey) {\n context.selectAll();\n } else if (keyCode >= 96 && keyCode <= 105) {\n keyCode -= 48;\n } else if (keyCode === 8) {\n $drag = context.container.find('.' + context.opt.id + '-drag');\n if ($drag.length > 0) {\n context.cursor.insertBefore($drag);\n $drag.remove();\n } else if (context.cursor.length > 0 && context.cursor.prev().length > 0) {\n $prev = context.cursor.prev();\n if ($prev.hasClass(context.opt.id + '-unit') && $prev.text().length > 1) {\n text = $prev.text();\n context.setDecimal($prev, text.substring(0, text.length - 1).toFormulaDecimal());\n } else {\n $prev.remove();\n }\n }\n context.syntaxCheck();\n $this.triggerHandler('formula.input', context.getFormula());\n return false;\n } else if (keyCode === 46) {\n $drag = context.container.find('.' + context.opt.id + '-drag');\n if ($drag.length > 0) {\n context.cursor.insertAfter($drag);\n $drag.remove();\n } else {\n if (context.cursor.length > 0 && context.cursor.next().length > 0) {\n $next = context.cursor.next();\n if ($next.hasClass(context.opt.id + '-unit') && $next.text().length > 1) {\n text = $next.text();\n context.setDecimal($next, text.substring(1, text.length).toFormulaDecimal());\n } else {\n $next.remove();\n }\n }\n }\n context.syntaxCheck();\n $this.triggerHandler('formula.input', context.getFormula());\n return false;\n } else if (keyCode >= 37 && keyCode <= 40) {\n if (keyCode === 37) {\n if (context.cursor.length > 0 && context.cursor.prev().length > 0) {\n if (event.shiftKey) {\n $drag = context.container.find('.' + context.opt.id + '-drag');\n if ($drag.length < 1) {\n $drag = $('
');\n $drag.insertAfter(context.cursor);\n } else {\n if ($drag.data('active') === false) {\n context.destroyDrag();\n $drag = $('
');\n $drag.insertAfter(context.cursor);\n }\n }\n $drag.data('active', true);\n\n $prev = context.cursor.prev();\n if ($prev.hasClass(context.opt.id + '-drag')) {\n $dragItem = $drag.children('*');\n if ($dragItem.length < 1) {\n $drag.remove();\n } else {\n $dragItem.last().insertAfter($drag);\n context.cursor.insertAfter($drag);\n }\n } else {\n context.cursor.prev().prependTo($drag);\n }\n } else {\n context.destroyDrag();\n context.cursor.insertBefore(context.cursor.prev());\n }\n } else {\n context.destroyDrag();\n }\n } else if (keyCode === 38) {\n if (context.cursor.prev().length > 0 || context.cursor.next().length > 0) {\n parentPadding = {\n x: parseFloat(context.container.css('padding-left').replace(/[^\\d.]/gi, '')),\n y: parseFloat(context.container.css('padding-top').replace(/[^\\d.]/gi, ''))\n };\n\n $item = context.cursor.prev();\n if ($item.length < 0) {\n $item = context.cursor.next();\n }\n context.click({\n x: context.cursor.position().left + $item.outerWidth(),\n y: context.cursor.position().top - $item.outerHeight() / 2\n });\n } else {\n\n }\n } else if (keyCode === 39) {\n if (context.cursor.length > 0 && context.cursor.next().length > 0) {\n if (event.shiftKey) {\n $drag = context.container.find('.' + context.opt.id + '-drag');\n if ($drag.length < 1) {\n $drag = $('
');\n $drag.insertBefore(context.cursor);\n } else {\n if ($drag.data('active') === false) {\n context.destroyDrag();\n $drag = $('
');\n $drag.insertBefore(context.cursor);\n }\n }\n $drag.data('active', true);\n\n $next = context.cursor.next();\n if ($next.hasClass(context.opt.id + '-drag')) {\n $dragItem = $drag.children('*');\n if ($dragItem.length < 1) {\n $drag.remove();\n } else {\n $dragItem.first().insertBefore($drag);\n context.cursor.insertBefore($drag);\n }\n } else {\n context.cursor.next().appendTo($drag);\n }\n } else {\n context.destroyDrag();\n context.cursor.insertAfter(context.cursor.next());\n }\n } else {\n context.destroyDrag();\n }\n } else if (keyCode === 40) {\n if (context.cursor.prev().length > 0 || context.cursor.next().length > 0) {\n parentPadding = {\n x: parseFloat(context.container.css('padding-left').replace(/[^\\d.]/gi, '')),\n y: parseFloat(context.container.css('padding-top').replace(/[^\\d.]/gi, ''))\n };\n\n $item = context.cursor.prev();\n if ($item.length < 0) {\n $item = context.cursor.next();\n }\n context.click({\n x: context.cursor.position().left + $item.outerWidth(),\n y: context.cursor.position().top + $item.outerHeight() * 1.5\n });\n } else {\n\n }\n }\n return false;\n } else if (keyCode === 35 || keyCode === 36) {\n if (keyCode === 35) {\n if (context.cursor.length > 0 && context.container.children(':last').length > 0) {\n if (event.shiftKey) {\n $drag = context.container.find('.' + context.opt.id + '-drag');\n if ($drag.length < 1) {\n $drag = $('
');\n $drag.insertBefore(context.cursor);\n } else {\n if ($drag.data('active') === false) {\n context.destroyDrag();\n $drag = $('
');\n $drag.insertBefore(context.cursor);\n }\n }\n $drag.data('active', true);\n context.cursor.nextAll().appendTo($drag);\n } else {\n context.destroyDrag();\n context.cursor.insertAfter(context.container.children(':last'));\n }\n }\n } else if (keyCode === 36) {\n if (context.cursor.length > 0 && context.container.children(':first').length > 0) {\n if (event.shiftKey) {\n $drag = context.container.find('.' + context.opt.id + '-drag');\n if ($drag.length < 1) {\n $drag = $('
');\n $drag.insertAfter(context.cursor);\n } else {\n if ($drag.data('active') === false) {\n context.destroyDrag();\n $drag = $('
');\n $drag.insertAfter(context.cursor);\n }\n }\n $drag.data('active', true);\n context.cursor.prevAll().each(function () {\n var $this = $(this);\n $this.prependTo($drag);\n });\n } else {\n context.destroyDrag();\n context.cursor.insertBefore(context.container.children(':first'));\n }\n }\n } else {\n return false;\n }\n } else if ((keyCode >= 48 && keyCode <= 57) === false &&\n (keyCode !== 88 && keyCode !== 187 && keyCode !== 189 && keyCode !== 190 && keyCode !== 191) === true) {\n return false;\n }\n\n context.keydown(keyCode.toString().toFormulaString(event.shiftKey), event.shiftKey);\n context.syntaxCheck();\n }\n });\n };\n\n this.syntaxCheck = function (callback) {\n var context = this;\n\n var formula = context.getFormula().data;\n\n if (typeof formula !== 'undefined') {\n var result = new FormulaParser(formula);\n if (result.status === true) {\n context.alert.text(context.opt.strings.validationPassed).addClass(context.opt.id + '-alert-good').removeClass(context.opt.id + '-alert-error');\n if (typeof callback === 'function') {\n callback(true);\n }\n return true;\n }\n else {\n context.alert.text(context.opt.strings.validationError).removeClass(context.opt.id + '-alert-good').addClass(context.opt.id + '-alert-error');\n if (typeof callback === 'function') {\n callback(false);\n }\n return false;\n }\n }\n };\n\n this.destroyDrag = function () {\n var context = this;\n\n var $drag = context.container.find('.' + context.opt.id + '-drag');\n $drag.children('*').each(function () {\n var $this = $(this);\n $this.insertBefore($drag);\n });\n $drag.remove();\n $this.triggerHandler('formula.input', context.getFormula());\n };\n\n this.selectAll = function () {\n var context = this;\n\n context.destroyDrag();\n $drag = $('
');\n $drag.prependTo(context.container);\n context.container.children(':not(\".' + context.opt.id + '-cursor\")').each(function () {\n var $this = $(this);\n $this.appendTo($drag);\n });\n };\n\n this.click = function (position) {\n var context = this;\n\n context.container.find('.' + context.opt.id + '-cursor').remove();\n\n var $cursor = $('
');\n var check = null, idx = null;\n position = position || { x: 0, y: 0 };\n $cursor.appendTo(context.container);\n context.cursor = $cursor;\n\n var parentPos = {\n x: context.container.offset().left,\n y: context.container.offset().top\n };\n\n var parentPadding = {\n x: parseFloat(context.container.css('padding-left').replace(/[^\\d.]/gi, '')),\n y: parseFloat(context.container.css('padding-top').replace(/[^\\d.]/gi, ''))\n };\n\n var checkArea = [];\n\n context.container.children('*:not(\".' + context.opt.id + '-cursor\")').each(function () {\n var $this = $(this);\n checkArea.push({\n x: $this.offset().left - parentPos.x + parentPadding.x,\n y: $this.offset().top - parentPos.y,\n e: $this\n });\n });\n\n\n var $pointer = null;\n var maxY = 0, maxDiff = 10000;\n for (idx in checkArea) {\n check = checkArea[idx];\n if (check.y <= position.y) {\n if (check.y >= maxY * 0.5 && check.x <= position.x) {\n if (check.y >= maxY) {\n maxY = check.y;\n }\n if (position.x - check.x <= maxDiff) {\n maxDiff = position.x - check.x;\n $pointer = check.e;\n }\n }\n }\n }\n\n if ($pointer === null) {\n maxY = 0;\n maxDiff = 10000;\n for (idx in checkArea) {\n check = checkArea[idx];\n if (check.y >= maxY * 0.5 && check.x <= position.x) {\n if (check.y >= maxY) {\n maxY = check.y;\n }\n if (position.x - check.x < maxDiff) {\n maxDiff = position.x - check.x;\n $pointer = check.e;\n }\n }\n }\n }\n\n if (checkArea.length > 0 && $pointer !== null && maxY + checkArea[0].e.outerHeight() >= position.y) {\n context.cursor.insertAfter($pointer);\n } else {\n if (checkArea.length > 0 && position.x > checkArea[0].x) {\n context.cursor.appendTo(context.container);\n } else {\n context.cursor.prependTo(context.container);\n }\n }\n\n var loop = function () {\n setTimeout(function () {\n if ($cursor.hasClass('inactive')) {\n $cursor.removeClass('inactive');\n $cursor.stop().animate({ opacity: 1 }, context.opt.cursorAnimTime);\n } else {\n $cursor.addClass('inactive');\n $cursor.stop().animate({ opacity: 0 }, context.opt.cursorAnimTime);\n }\n\n if ($cursor.length > 0) {\n loop();\n }\n }, context.opt.cursorDelayTime);\n };\n loop();\n\n context.destroyDrag();\n };\n\n this.keydown = function (key, shift) {\n var context = this;\n\n var convert = {\n 0: ')',\n 1: '!',\n 2: '@',\n 3: '#',\n 4: '$',\n 5: '%',\n 6: '^',\n 7: '&',\n 8: 'x',\n 9: '('\n };\n\n if (shift && (key >= 0 && key <= 9)) {\n key = convert[key];\n }\n key = $.trim(key);\n\n context.insertChar.call(context, key);\n };\n\n this.insert = function (item, position) {\n var context = this;\n\n if (context.cursor === null || context.cursor.length < 1 || typeof position === 'object') {\n context.click(position);\n }\n\n if (typeof item === 'string') {\n item = $(item);\n }\n\n item.addClass(context.opt.id + '-item');\n item.insertBefore(context.cursor);\n\n context.text.focus();\n context.syntaxCheck();\n\n $this.triggerHandler('formula.input', context.getFormula());\n };\n\n this.insertChar = function (key) {\n var context = this;\n\n if ((key >= 0 && key <= 9) || $.inArray(key.toLowerCase(), context.permitedKey) != -1) {\n if ((key >= 0 && key <= 9) || key === '.') {\n var $unit = $('
' + key + '
');\n var $item = null;\n var decimal = '', merge = false;\n\n $drag = context.container.find('.' + context.opt.id + '-drag');\n\n if ($drag.length > 0) {\n context.cursor.insertBefore($drag);\n $drag.remove();\n }\n\n if (context.cursor !== null && context.cursor.length > 0) {\n context.cursor.before($unit);\n } else {\n context.container.append($unit);\n }\n\n var $prev = $unit.prev();\n var $next = $unit.next();\n\n if ($prev.length > 0 && $prev.hasClass(context.opt.id + '-cursor')) {\n $prev = $prev.prev();\n }\n\n if ($next.length > 0 && $next.hasClass(context.opt.id + '-cursor')) {\n $next = $next.next();\n }\n\n if ($prev.length > 0 && $prev.hasClass(context.opt.id + '-unit')) {\n merge = true;\n $item = $prev;\n $item.append($unit[0].innerHTML);\n } else if ($next.length > 0 && $next.hasClass(context.opt.id + '-unit')) {\n merge = true;\n $item = $next;\n $item.prepend($unit[0].innerHTML);\n }\n\n if (merge === true) {\n decimal = $item.text().toFormulaDecimal();\n context.setDecimal($item, decimal);\n $unit.remove();\n }\n } else if (key !== '') {\n var $operator = $('
' + key.toLowerCase() + '
');\n if (context.cursor !== null && context.cursor.length > 0) {\n context.cursor.before($operator);\n } else {\n context.container.append($operator);\n }\n if (key === '(' || key === ')') {\n $operator.addClass(context.opt.id + '-bracket');\n }\n }\n\n $this.triggerHandler('formula.input', context.getFormula());\n }\n };\n\n this.insertFormula = function (data) {\n var context = this;\n var idx = 0;\n\n if (typeof data === 'string') {\n var data_split = data.split('');\n for (idx in data_split) {\n context.insertChar.call(context, data_split[idx]);\n }\n } else {\n for (idx in data) {\n var item = data[idx];\n if (typeof item !== 'object') {\n var data_splited = item.toString().split('');\n for (var key in data_splited) {\n context.insertChar.call(context, data_splited[key]);\n }\n } else {\n if (typeof context.opt.import.item === 'function') {\n var $e = context.opt.import.item.call(context, item);\n if (typeof $e !== 'undefined' && $e !== null) {\n context.insert($e);\n }\n }\n }\n }\n }\n context.syntaxCheck();\n\n $this.triggerHandler('formula.input', context.getFormula());\n };\n\n this.empty = function () {\n var context = this;\n\n context.container.find(':not(\".' + context.opt.id + '-cursor\")').remove();\n $this.triggerHandler('formula.input', context.getFormula());\n\n return context.container;\n };\n\n this.setDecimal = function (element, decimal) {\n var context = this;\n\n if (decimal !== '') {\n element.empty();\n var split = decimal.split('.');\n var $prefix = $('' + split[0] + '');\n $prefix.appendTo(element);\n\n if (typeof split[1] !== 'undefined') {\n var $surfix = $('.' + split[1] + '');\n $surfix.appendTo(element);\n }\n }\n };\n\n this.setFormula = function (data) {\n var context = this;\n\n context.empty();\n try {\n var obj = null;\n if (typeof data !== 'object') {\n obj = JSON.parse(data);\n } else {\n obj = data;\n }\n\n var decodedData = new FormulaParser(obj);\n if (decodedData.status === true) {\n context.insertFormula.call(context, decodedData.data);\n }\n } catch (e) {\n console.trace(e.stack);\n }\n };\n\n this.getFormula = function (callback) {\n var context = this;\n\n var data = [];\n var filterData = null;\n var result;\n\n if (typeof context.opt.export.filter === 'function') {\n context.container.find('.formula-item').each(function () {\n var $this = $(this);\n var item = {};\n item.value = ($this.data('value') ? $this.data('value') : $this.text());\n\n if ($this.hasClass(context.opt.id + '-unit')) {\n item.type = 'unit';\n item.value = item.value.toFormulaDecimal();\n } else if ($this.hasClass(context.opt.id + '-custom')) {\n item.type = 'item';\n if (typeof context.opt.export !== 'undefined' && typeof context.opt.export.item === 'function') {\n try {\n item.value = context.opt.export.item.call(context, $this);\n } catch (e) {\n item.value = '0';\n }\n } else {\n item.value = '0';\n }\n } else if ($this.hasClass(context.opt.id + '-operator')) {\n item = item.value === 'x' ? '*' : item.value;\n }\n data.push(item);\n });\n\n data = data;\n filterData = new FormulaParser(Object.assign([], data));\n filterData.data = context.opt.export.filter(filterData.data);\n\n result = {\n data: data,\n filterData: filterData\n };\n } else {\n context.container.find('.formula-item').each(function () {\n var $this = $(this);\n var value = ($this.data('value') ? $this.data('value') : $this.text());\n if ($this.hasClass(context.opt.id + '-unit')) {\n value = value.toFormulaDecimal();\n } else if ($this.hasClass(context.opt.id + '-operator') && value === 'x') {\n value = '*';\n } else if ($this.hasClass(context.opt.id + '-custom')) {\n if (typeof context.opt.export !== 'undefined' && typeof context.opt.export.item === 'function') {\n try {\n value = context.opt.export.call(context, $this);\n } catch (e) {\n value = '0';\n }\n } else {\n value = '0';\n }\n }\n data.push(value);\n });\n\n result = {\n data: data.join(' '),\n filterData: filterData\n };\n }\n\n if (typeof callback === 'function') {\n callback(result);\n }\n\n return result;\n };\n\n if (_args.length < 1 || typeof _args[0] === 'object') {\n this.alert = null;\n this.text = null;\n this.container = null;\n this.cursor = null;\n this.opt = _opt;\n this.permitedKey = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'x', '*', '/', '.', '+', '-', '%', '^', '(', ')'];\n $.extend(opt, _opt);\n this.init.call(this);\n } else {\n this[opt].apply(this, Array.prototype.slice.call(_args, 1));\n }\n });\n };\n\n $.fn.formula.getVersion = function () {\n return _PLUGIN_VERSION_;\n };\n}(jQuery));\nvar FormulaParser = (function () {\n var _PLUGIN_VERSION_ = '2.0.10';\n\n function FormulaParser(formula) {\n var idx;\n this.formula = formula;\n\n /***********************************************\n *\n * @ Note OperandToken Declaration\n *\n **********************************************/\n\n this.OperandToken = {};\n this.OperandToken.Addition = ['+'];\n this.OperandToken.Subtraction = ['-'];\n this.OperandToken.Multiplication = ['x', '*'];\n this.OperandToken.Division = ['/'];\n this.OperandToken.Mod = ['%'];\n this.OperandToken.Pow = ['^'];\n this.OperandToken.Bracket = ['(', ')', '[', ']', '{', '}'];\n\n /***********************************************\n *\n * @ Note Resitration the priority.\n *\n **********************************************/\n\n this.OperandPriority = [];\n this.OperandPriority[0] = [].concat(this.OperandToken.Mod, this.OperandToken.Pow);\n this.OperandPriority[1] = [].concat(this.OperandToken.Multiplication, this.OperandToken.Division);\n this.OperandPriority[2] = [].concat(this.OperandToken.Addition, this.OperandToken.Subtraction);\n\n /***********************************************\n *\n * @ Note Resitration operators.\n *\n **********************************************/\n\n this.Operators = [];\n for (idx in this.OperandToken) {\n var item = this.OperandToken[idx];\n this.Operators = this.Operators.concat(item);\n }\n\n /***********************************************\n *\n * @ Note Resitration units.\n *\n **********************************************/\n\n this.Units = [].concat(this.Operators, this.OperandToken.Bracket);\n\n /***********************************************\n *\n * @ Note Resitration parsers.\n *\n **********************************************/\n\n this.Parsers = [\n 'Initializer',\n 'LayerParser',\n 'SyntaxParser',\n 'FilterParser',\n 'StringParser'\n ];\n\n this.ParserMap = {};\n\n for (idx in this.Parsers) {\n var parser = this.Parsers[idx];\n this.ParserMap[parser] = parser;\n }\n\n this.Message = {};\n this.Message[0x01] = 'Formula must has characters than {0} times';\n this.Message[0x02] = '\\'{0}\\' operator is not supported.';\n this.Message[0x03] = 'Left side operand is not valid.';\n this.Message[0x04] = 'Right side operand is not valid.';\n this.Message[0x05] = 'Bracket must be opened.';\n this.Message[0x06] = 'Bracket must be closed.';\n this.Message[0x20] = 'Operator\\'s key must be in data.';\n this.Message[0x21] = 'Left operand\\'s key must be in data.';\n this.Message[0x22] = 'Right operand\\'s key must be in data.';\n this.Message[0xA0] = 'Formula expression is null or undefined.';\n\n /***********************************************\n *\n * @ Start to parsing.\n *\n **********************************************/\n\n return this.init();\n }\n\n /**\n * This method retuns current version. (This isn't prototype function.)\n * @namespace FormulaParser\n * @method getVersion\n * @returns {Number}\n */\n FormulaParser.getVersion = function () {\n return _PLUGIN_VERSION_;\n };\n\n /**\n * When item is in the array, This will returns true.\n * @namespace FormulaParser\n * @method inArray\n * @param {Any} item condition parameter\n * @param {Array} array base target parameter\n * @returns {bool}\n */\n FormulaParser.prototype.inArray = function (item, array) {\n for (var idx in array) if (array[idx] === item) return idx;\n return -1;\n };\n\n /**\n * When item is operand type(number, object), This will returns true.\n * @namespace FormulaParser\n * @method isOperand\n * @param {Dynamic} item\n * @returns {bool} When parameter is operand type, This function will returuns true.\n */\n FormulaParser.prototype.isOperand = function (item) {\n return typeof item === 'object' || this.isNumeric(item);\n };\n\n /**\n * Get operator string to priority number.\n * @namespace FormulaParser\n * @method getOperatorPriority\n * @param {String} operator\n * @returns {Number}\n */\n FormulaParser.prototype.getOperatorPriority = function (operator) {\n if (this.inArray(operator, this.Operators) === -1) {\n return -1;\n } else {\n var priority = -1;\n for (var idx = 0; idx < this.OperandPriority.length; idx++) {\n if (this.inArray(operator, this.OperandPriority[idx]) !== -1) {\n priority = idx;\n break;\n }\n }\n return priority;\n }\n };\n\n /**\n * When item is number type, This will returns true. The method is part of isOperand.\n * @namespace FormulaParser\n * @method isNumeric\n * @param {Number} n - number\n * @returns {bool} When parameter is numeric this function returns true\n */\n FormulaParser.prototype.isNumeric = function (n) {\n return (/\\d+(\\.\\d*)?|\\.\\d+/).test(n);\n };\n\n /**\n * This method can make string type formula to array.\n * @namespace FormulaParser\n * @method stringToArray\n * @param {String} s - formula string\n * @returns {array}\n */\n FormulaParser.prototype.stringToArray = function (s) {\n var data = [];\n var dataSplited = s.split('');\n var dataSplitedLen = dataSplited.length;\n for (var idx = 0; idx < dataSplitedLen; idx++) {\n var item = dataSplited[idx];\n if (this.inArray(item, this.Units) !== -1 || this.isOperand(item) === true) {\n if (idx > 0 && this.isOperand(item) === true && this.isOperand(data[data.length - 1]) === true) {\n data[data.length - 1] += item.toString();\n } else {\n data.push(item);\n }\n }\n }\n return data;\n };\n\n /**\n * Standard logger for formula parser, But this method does not display in console.\n * @namespace FormulaParser\n * @method log\n * @param {Number} code - return code\n * @param {Dynamic} data - return data\n * @param {Array} mapping - return message mapping data\n * @returns {array}\n */\n FormulaParser.prototype.log = function (code, data, mapping) {\n var message = this.Message[code], idx, item;\n\n for (idx in mapping) {\n item = mapping[idx];\n message = message.replace(new RegExp('\\\\\\{' + idx + '\\\\\\}', 'g'), item);\n }\n\n var obj = {\n status: code === 0x00,\n code: code,\n msg: message\n };\n\n if (typeof data !== 'undefined' && data !== null) {\n for (idx in data) {\n item = data[idx];\n if (typeof item !== 'function') {\n obj[idx] = item;\n }\n }\n }\n\n return obj;\n };\n\n /**\n * Layer parser is examination all formula syntax minutely and parsing by search method.\n * @namespace FormulaParser\n * @method layerParser\n * @related search method\n * @param {Array} data - formula array data\n * @param {Number} pos - formula stack cursor\n * @param {Number} depth - formula search depth (start from 0)\n * @returns {Object}\n */\n FormulaParser.prototype.layerParser = function (data, pos, depth) {\n var innerDepth = 0;\n var startPos = [], endPos = [];\n var currentParser = this.ParserMap.LayerParser;\n var totalLength = data.length;\n\n depth = depth || 0;\n\n if (data.length === 1 && typeof data[0] !== 'object') {\n return {\n status: true,\n data: data[0],\n length: 1\n };\n }\n\n for (var idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n if (item === '(') {\n innerDepth++;\n startPos[innerDepth] = idx + 1;\n } else if (item === ')') {\n if (innerDepth < 1) {\n return this.log(0x05, {\n stack: currentParser,\n col: startPos.length > 0 ? startPos[startPos.length - 1] : 0\n });\n }\n\n if (innerDepth === 1) {\n var paramData = [];\n endPos[innerDepth] = idx - 1;\n\n for (var j = startPos[innerDepth]; j <= endPos[innerDepth]; j++) {\n paramData.push(data[j]);\n }\n\n var result = this.search(paramData, pos + startPos[innerDepth] + 1, depth + 1);\n\n if (result.status === false) {\n return result;\n } else {\n var length = result.length;\n if (typeof result.data === 'object' && typeof result.data[0] !== 'object' && result.data.length === 1) {\n result.data = result.data[0];\n }\n data.splice(startPos[innerDepth] - 1, length + 2, result.data);\n idx -= length + 1;\n }\n }\n innerDepth--;\n }\n }\n\n if (innerDepth > 0) {\n return this.log(0x06, {\n stack: currentParser,\n col: data.length || -1\n });\n }\n\n return {\n status: true,\n depth: depth,\n length: totalLength || -1\n };\n };\n\n /**\n * Syntax layer makes formula object from formula expression.\n * @namespace FormulaParser\n * @method syntaxParser\n * @related search method\n * @param {Array} data - formula array data\n * @param {Number} pos - formula stack cursor\n * @param {Number} depth - formula search depth (start from 0)\n * @param {Number} length - compressed formula expression length\n * @param {Array} operators - permitted formula unit array\n * @returns {Object}\n */\n FormulaParser.prototype.syntaxParser = function (data, pos, depth, length, operators) {\n this.currentParser = this.ParserMap.SyntaxParser;\n\n data = data || [];\n pos = pos || 0;\n depth = depth || 0;\n\n var cursor = pos;\n\n if (typeof data[0] !== 'undefined' && data[0] !== null && typeof data[0][0] === 'object' && (typeof data[0].operator === 'undefined' || data[0].operator === null)) {\n data[0] = data[0][0];\n }\n\n if (data.length < 3) {\n if (data.length <= 1 && typeof data[0] === 'object' && typeof data[0].operator !== 'undefined' && data[0].operator !== null) {\n return data[0];\n } else {\n return this.log(0x01, {\n stack: this.currentParser,\n col: pos + (typeof data[0] === 'object' ? data[0].length : 0) + 1\n }, [3]);\n }\n }\n\n if (typeof data.length !== 'undefined') {\n if (data.length > 1) {\n for (var idx = 0; idx < data.length; idx++) {\n cursor = idx + pos;\n var item = data[idx];\n if (this.inArray(item, this.Operators) === -1 && this.isOperand(item) === false) {\n return this.log(0x02, {\n stack: this.currentParser,\n col: cursor\n }, [item]);\n }\n\n if (this.inArray(item, operators) !== -1) {\n if (this.isOperand(data[idx - 1]) === false) {\n return this.log(0x03, {\n stack: this.currentParser,\n col: cursor - 1\n });\n }\n\n if (this.isOperand(data[idx + 1]) === false) {\n return this.log(0x04, {\n stack: this.currentParser,\n col: cursor + 1\n });\n }\n\n data.splice(idx - 1, 3, {\n operator: item,\n operand1: data[idx - 1],\n operand2: data[idx + 1],\n length: length\n });\n\n if (typeof data[idx - 1][0] === 'object') {\n data[idx - 1] = data[idx - 1][0];\n }\n\n idx--;\n }\n }\n }\n }\n\n return {\n status: true,\n data: data\n };\n };\n\n /**\n * Filter parser remains the formula object's only useful data for user\n * @namespace FormulaParser\n * @method filterParser\n * @related search method\n * @param {Object} data - formula object\n * @returns {Object}\n */\n FormulaParser.prototype.filterParser = function (data) {\n if (typeof data[0] === 'object') {\n data = data[0];\n }\n\n if (typeof data.operand1 === 'object') {\n this.filterParser(data.operand1);\n }\n\n if (typeof data.operand2 === 'object') {\n this.filterParser(data.operand2);\n }\n\n if (typeof data.length !== 'undefined') {\n delete data.length;\n }\n\n return data;\n };\n\n /**\n * String parser is using for convert formula object to readable formula array.\n * @namespace FormulaParser\n * @method stringParser\n * @related collapse method\n * @param {Object} data - formula object\n * @param {Number} depth - formula parse depth\n * @param {Number} pos - formula stack cursor\n * @returns {Array}\n */\n FormulaParser.prototype.stringParser = function (data, depth, pos) {\n this.currentParser = this.ParserMap.StringParser;\n\n var _this = this;\n var formula = [];\n\n depth = depth || 0;\n pos = pos || 0;\n\n if (typeof data.value === 'undefined' || data.value === null) {\n if (typeof data.operator === 'undefined' || data.operator === null) {\n return this.log(0x20, {\n stack: this.currentParser,\n col: pos,\n depth: depth\n });\n } else if (typeof data.operand1 === 'undefined' || data.operand1 === null) {\n return this.log(0x21, {\n stack: this.currentParser,\n col: pos,\n depth: depth\n });\n } else if (typeof data.operand2 === 'undefined' || data.operand2 === null) {\n return this.log(0x22, {\n stack: this.currentParser,\n col: pos,\n depth: depth\n });\n }\n } else {\n return {\n status: true,\n data: ((data.value.type === 'unit') ? data.value.unit : data.value)\n };\n }\n\n var params = ['operand1', 'operator', 'operand2'];\n for (var idx = 0; idx < params.length; idx++) {\n var param = params[idx];\n if (typeof data[param] === 'object') {\n var result = _this.stringParser(data[param], depth + 1, pos + idx);\n if (result.status === false) {\n return result;\n } else {\n formula = formula.concat(result.data);\n if (typeof data.operator !== 'undefined' && data.operator !== null && typeof result.operator !== 'undefined' && result.operator !== null) {\n if (this.getOperatorPriority(data.operator) < this.getOperatorPriority(result.operator) && this.getOperatorPriority(data.operator) !== -1) {\n formula.splice([formula.length - 3], 0, '(');\n formula.splice([formula.length], 0, ')');\n }\n }\n }\n } else {\n formula.push(data[param]);\n }\n }\n\n return {\n status: true,\n data: formula,\n operator: depth > 0 ? data.operator : undefined\n };\n };\n\n /**\n * Search method routes each of commands to right steps.\n * @namespace FormulaParser\n * @method search\n * @related layerParser, syntaxParser, filterParser methods.\n * @param {Array} data - formula array data\n * @param {Number} pos - formula stack cursor\n * @param {Number} depth - formula search depth (start from 0)\n * @returns {Object}\n */\n FormulaParser.prototype.search = function (data, pos, depth) {\n var _super = this;\n pos = pos || 0;\n depth = depth || 0;\n\n if (typeof data === 'string' && depth < 1) {\n data = this.stringToArray(data);\n }\n\n var result = null;\n var len = this.OperandPriority.length + 1;\n var parserLength = 0;\n var parserComplete = function () {\n if (depth === 0) {\n data = _super.filterParser(data);\n }\n\n return {\n status: true,\n data: data,\n length: depth === 0 ? undefined : parserLength,\n depth: depth === 0 ? undefined : depth\n };\n };\n\n for (var i = 0; i < len; i++) {\n if (result !== null && typeof result.data !== 'undefined' && result.data.length === 1) {\n return parserComplete.call();\n }\n\n if (i === 0) {\n result = this.layerParser(data, pos, depth);\n parserLength = result.length;\n } else {\n result = this.syntaxParser(data, pos, depth, parserLength, this.OperandPriority[i - 1]);\n }\n\n if (result.status === false) {\n return result;\n } else if (i + 1 === len) {\n return parserComplete.call();\n }\n }\n };\n\n /**\n * Collapse method can convert formula object to readable and user-friendly formula array.\n * @namespace FormulaParser\n * @method collapse\n * @related stringParser method.\n * @param {Object} data - formula object data\n * @param {Number} depth - formula search depth (start from 0)\n * @returns {Object}\n */\n FormulaParser.prototype.collapse = function (data, depth) {\n var _this = this, formula = null;\n depth = depth || 0;\n formula = this.stringParser(data, depth);\n\n return {\n status: true,\n data: formula.data\n };\n };\n\n /**\n * Init method is fired when you declare FormulaParser object by new keyword.\n * @namespace FormulaParser\n * @method init\n * @related FormulaParser object.\n * @returns {Dynamic}\n */\n FormulaParser.prototype.init = function () {\n if (typeof this.formula === 'undefined' || this.formula === null) {\n return this.log(0xA0, {\n stack: this.Parsers.Initializer,\n col: 0\n });\n } else if (typeof this.formula === 'string' || (typeof this.formula === 'object' && (typeof this.formula.operator === 'undefined' || this.formula.operator === null))) {\n return this.search(this.formula);\n } else if (typeof this.formula === 'object' && typeof this.formula.operator !== 'undefined' && this.formula.operator !== null) {\n return this.collapse(this.formula);\n } else {\n console.error('Unkown type formula', this.formula);\n }\n };\n\n return FormulaParser;\n})();\n","/* jshint node: true */\n\n/**\n * Unobtrusive scripting adapter for jQuery\n * https://github.com/rails/jquery-ujs\n *\n * Requires jQuery 1.8.0 or later.\n *\n * Released under the MIT license\n *\n */\n\n(function() {\n 'use strict';\n\n var jqueryUjsInit = function($, undefined) {\n\n // Cut down on the number of issues from people inadvertently including jquery_ujs twice\n // by detecting and raising an error when it happens.\n if ( $.rails !== undefined ) {\n $.error('jquery-ujs has already been loaded!');\n }\n\n // Shorthand to make it a little easier to call public rails functions from within rails.js\n var rails;\n var $document = $(document);\n\n $.rails = rails = {\n // Link elements bound by jquery-ujs\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n\n // Button elements bound by jquery-ujs\n buttonClickSelector: 'button[data-remote]:not([form]):not(form button), button[data-confirm]:not([form]):not(form button)',\n\n // Select elements bound by jquery-ujs\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n\n // Form elements bound by jquery-ujs\n formSubmitSelector: 'form:not([data-turbo=true])',\n\n // Form input elements bound by jquery-ujs\n formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n\n // Form input elements disabled during form submission\n disableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n\n // Form input elements re-enabled after form submission\n enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n\n // Form required input elements\n requiredInputSelector: 'input[name][required]:not([disabled]), textarea[name][required]:not([disabled])',\n\n // Form file input elements\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n\n // Link onClick disable selector with possible reenable after remote submission\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n\n // Button onClick disable selector with possible reenable after remote submission\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]',\n\n // Up-to-date Cross-Site Request Forgery token\n csrfToken: function() {\n return $('meta[name=csrf-token]').attr('content');\n },\n\n // URL param that must contain the CSRF token\n csrfParam: function() {\n return $('meta[name=csrf-param]').attr('content');\n },\n\n // Make sure that every Ajax request sends the CSRF token\n CSRFProtection: function(xhr) {\n var token = rails.csrfToken();\n if (token) xhr.setRequestHeader('X-CSRF-Token', token);\n },\n\n // Make sure that all forms have actual up-to-date tokens (cached forms contain old ones)\n refreshCSRFTokens: function(){\n $('form input[name=\"' + rails.csrfParam() + '\"]').val(rails.csrfToken());\n },\n\n // Triggers an event on an element and returns false if the event result is false\n fire: function(obj, name, data) {\n var event = $.Event(name);\n obj.trigger(event, data);\n return event.result !== false;\n },\n\n // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm\n confirm: function(message) {\n return confirm(message);\n },\n\n // Default ajax function, may be overridden with custom function in $.rails.ajax\n ajax: function(options) {\n return $.ajax(options);\n },\n\n // Default way to get an element's href. May be overridden at $.rails.href.\n href: function(element) {\n return element[0].href;\n },\n\n // Checks \"data-remote\" if true to handle the request through a XHR request.\n isRemote: function(element) {\n return element.data('remote') !== undefined && element.data('remote') !== false;\n },\n\n // Submits \"remote\" forms and links with ajax\n handleRemote: function(element) {\n var method, url, data, withCredentials, dataType, options;\n\n if (rails.fire(element, 'ajax:before')) {\n withCredentials = element.data('with-credentials') || null;\n dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType);\n\n if (element.is('form')) {\n method = element.data('ujs:submit-button-formmethod') || element.attr('method');\n url = element.data('ujs:submit-button-formaction') || element.attr('action');\n data = $(element[0]).serializeArray();\n // memoized value from clicked submit button\n var button = element.data('ujs:submit-button');\n if (button) {\n data.push(button);\n element.data('ujs:submit-button', null);\n }\n element.data('ujs:submit-button-formmethod', null);\n element.data('ujs:submit-button-formaction', null);\n } else if (element.is(rails.inputChangeSelector)) {\n method = element.data('method');\n url = element.data('url');\n data = element.serialize();\n if (element.data('params')) data = data + '&' + element.data('params');\n } else if (element.is(rails.buttonClickSelector)) {\n method = element.data('method') || 'get';\n url = element.data('url');\n data = element.serialize();\n if (element.data('params')) data = data + '&' + element.data('params');\n } else {\n method = element.data('method');\n url = rails.href(element);\n data = element.data('params') || null;\n }\n\n options = {\n type: method || 'GET', data: data, dataType: dataType,\n // stopping the \"ajax:beforeSend\" event will cancel the ajax request\n beforeSend: function(xhr, settings) {\n if (settings.dataType === undefined) {\n xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);\n }\n if (rails.fire(element, 'ajax:beforeSend', [xhr, settings])) {\n element.trigger('ajax:send', xhr);\n } else {\n return false;\n }\n },\n success: function(data, status, xhr) {\n element.trigger('ajax:success', [data, status, xhr]);\n },\n complete: function(xhr, status) {\n element.trigger('ajax:complete', [xhr, status]);\n },\n error: function(xhr, status, error) {\n element.trigger('ajax:error', [xhr, status, error]);\n },\n crossDomain: rails.isCrossDomain(url)\n };\n\n // There is no withCredentials for IE6-8 when\n // \"Enable native XMLHTTP support\" is disabled\n if (withCredentials) {\n options.xhrFields = {\n withCredentials: withCredentials\n };\n }\n\n // Only pass url to `ajax` options if not blank\n if (url) { options.url = url; }\n\n return rails.ajax(options);\n } else {\n return false;\n }\n },\n\n // Determines if the request is a cross domain request.\n isCrossDomain: function(url) {\n var originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n var urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n // This is a workaround to a IE bug.\n urlAnchor.href = urlAnchor.href;\n\n // If URL protocol is false or is a string containing a single colon\n // *and* host are false, assume it is not a cross-domain request\n // (should only be the case for IE7 and IE compatibility mode).\n // Otherwise, evaluate protocol and host of the URL against the origin\n // protocol and host.\n return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) ||\n (originAnchor.protocol + '//' + originAnchor.host ===\n urlAnchor.protocol + '//' + urlAnchor.host));\n } catch (e) {\n // If there is an error parsing the URL, assume it is crossDomain.\n return true;\n }\n },\n\n // Handles \"data-method\" on links such as:\n // Delete\n handleMethod: function(link) {\n var href = rails.href(link),\n method = link.data('method'),\n target = link.attr('target'),\n csrfToken = rails.csrfToken(),\n csrfParam = rails.csrfParam(),\n form = $('
'),\n metadataInput = '';\n\n if (csrfParam !== undefined && csrfToken !== undefined && !rails.isCrossDomain(href)) {\n metadataInput += '';\n }\n\n if (target) { form.attr('target', target); }\n\n form.hide().append(metadataInput).appendTo('body');\n form.submit();\n },\n\n // Helper function that returns form elements that match the specified CSS selector\n // If form is actually a \"form\" element this will return associated elements outside the from that have\n // the html form attribute set\n formElements: function(form, selector) {\n return form.is('form') ? $(form[0].elements).filter(selector) : form.find(selector);\n },\n\n /* Disables form elements:\n - Caches element value in 'ujs:enable-with' data store\n - Replaces element text with value of 'data-disable-with' attribute\n - Sets disabled property to true\n */\n disableFormElements: function(form) {\n rails.formElements(form, rails.disableSelector).each(function() {\n rails.disableFormElement($(this));\n });\n },\n\n disableFormElement: function(element) {\n var method, replacement;\n\n method = element.is('button') ? 'html' : 'val';\n replacement = element.data('disable-with');\n\n if (replacement !== undefined) {\n element.data('ujs:enable-with', element[method]());\n element[method](replacement);\n }\n\n element.prop('disabled', true);\n element.data('ujs:disabled', true);\n },\n\n /* Re-enables disabled form elements:\n - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)\n - Sets disabled property to false\n */\n enableFormElements: function(form) {\n rails.formElements(form, rails.enableSelector).each(function() {\n rails.enableFormElement($(this));\n });\n },\n\n enableFormElement: function(element) {\n var method = element.is('button') ? 'html' : 'val';\n if (element.data('ujs:enable-with') !== undefined) {\n element[method](element.data('ujs:enable-with'));\n element.removeData('ujs:enable-with'); // clean up cache\n }\n element.prop('disabled', false);\n element.removeData('ujs:disabled');\n },\n\n /* For 'data-confirm' attribute:\n - Fires `confirm` event\n - Shows the confirmation dialog\n - Fires the `confirm:complete` event\n\n Returns `true` if no function stops the chain and user chose yes; `false` otherwise.\n Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.\n Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function\n return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.\n */\n allowAction: function(element) {\n var message = element.data('confirm'),\n answer = false, callback;\n if (!message) { return true; }\n\n if (rails.fire(element, 'confirm')) {\n try {\n answer = rails.confirm(message);\n } catch (e) {\n (console.error || console.log).call(console, e.stack || e);\n }\n callback = rails.fire(element, 'confirm:complete', [answer]);\n }\n return answer && callback;\n },\n\n // Helper function which checks for blank inputs in a form that match the specified CSS selector\n blankInputs: function(form, specifiedSelector, nonBlank) {\n var foundInputs = $(),\n input,\n valueToCheck,\n radiosForNameWithNoneSelected,\n radioName,\n selector = specifiedSelector || 'input,textarea',\n requiredInputs = form.find(selector),\n checkedRadioButtonNames = {};\n\n requiredInputs.each(function() {\n input = $(this);\n if (input.is('input[type=radio]')) {\n\n // Don't count unchecked required radio as blank if other radio with same name is checked,\n // regardless of whether same-name radio input has required attribute or not. The spec\n // states https://www.w3.org/TR/html5/forms.html#the-required-attribute\n radioName = input.attr('name');\n\n // Skip if we've already seen the radio with this name.\n if (!checkedRadioButtonNames[radioName]) {\n\n // If none checked\n if (form.find('input[type=radio]:checked[name=\"' + radioName + '\"]').length === 0) {\n radiosForNameWithNoneSelected = form.find(\n 'input[type=radio][name=\"' + radioName + '\"]');\n foundInputs = foundInputs.add(radiosForNameWithNoneSelected);\n }\n\n // We only need to check each name once.\n checkedRadioButtonNames[radioName] = radioName;\n }\n } else {\n valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : !!input.val();\n if (valueToCheck === nonBlank) {\n foundInputs = foundInputs.add(input);\n }\n }\n });\n return foundInputs.length ? foundInputs : false;\n },\n\n // Helper function which checks for non-blank inputs in a form that match the specified CSS selector\n nonBlankInputs: function(form, specifiedSelector) {\n return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank\n },\n\n // Helper function, needed to provide consistent behavior in IE\n stopEverything: function(e) {\n $(e.target).trigger('ujs:everythingStopped');\n e.stopImmediatePropagation();\n return false;\n },\n\n // Replace element's html with the 'data-disable-with' after storing original html\n // and prevent clicking on it\n disableElement: function(element) {\n var replacement = element.data('disable-with');\n\n if (replacement !== undefined) {\n element.data('ujs:enable-with', element.html()); // store enabled state\n element.html(replacement);\n }\n\n element.on('click.railsDisable', function(e) { // prevent further clicking\n return rails.stopEverything(e);\n });\n element.data('ujs:disabled', true);\n },\n\n // Restore element to its original state which was disabled by 'disableElement' above\n enableElement: function(element) {\n if (element.data('ujs:enable-with') !== undefined) {\n element.html(element.data('ujs:enable-with')); // set to old enabled state\n element.removeData('ujs:enable-with'); // clean up cache\n }\n element.off('click.railsDisable'); // enable element\n element.removeData('ujs:disabled');\n }\n };\n\n if (rails.fire($document, 'rails:attachBindings')) {\n\n $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});\n\n // This event works the same as the load event, except that it fires every\n // time the page is loaded.\n //\n // See https://github.com/rails/jquery-ujs/issues/357\n // See https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching\n $(window).on('pageshow.rails', function () {\n $($.rails.enableSelector).each(function () {\n var element = $(this);\n\n if (element.data('ujs:disabled')) {\n $.rails.enableFormElement(element);\n }\n });\n\n $($.rails.linkDisableSelector).each(function () {\n var element = $(this);\n\n if (element.data('ujs:disabled')) {\n $.rails.enableElement(element);\n }\n });\n });\n\n $document.on('ajax:complete', rails.linkDisableSelector, function() {\n rails.enableElement($(this));\n });\n\n $document.on('ajax:complete', rails.buttonDisableSelector, function() {\n rails.enableFormElement($(this));\n });\n\n $document.on('click.rails', rails.linkClickSelector, function(e) {\n var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey;\n if (!rails.allowAction(link)) return rails.stopEverything(e);\n\n if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link);\n\n if (rails.isRemote(link)) {\n if (metaClick && (!method || method === 'GET') && !data) { return true; }\n\n var handleRemote = rails.handleRemote(link);\n // Response from rails.handleRemote() will either be false or a deferred object promise.\n if (handleRemote === false) {\n rails.enableElement(link);\n } else {\n handleRemote.fail( function() { rails.enableElement(link); } );\n }\n return false;\n\n } else if (method) {\n rails.handleMethod(link);\n return false;\n }\n });\n\n $document.on('click.rails', rails.buttonClickSelector, function(e) {\n var button = $(this);\n\n if (!rails.allowAction(button) || !rails.isRemote(button)) return rails.stopEverything(e);\n\n if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button);\n\n var handleRemote = rails.handleRemote(button);\n // Response from rails.handleRemote() will either be false or a deferred object promise.\n if (handleRemote === false) {\n rails.enableFormElement(button);\n } else {\n handleRemote.fail( function() { rails.enableFormElement(button); } );\n }\n return false;\n });\n\n $document.on('change.rails', rails.inputChangeSelector, function(e) {\n var link = $(this);\n if (!rails.allowAction(link) || !rails.isRemote(link)) return rails.stopEverything(e);\n\n rails.handleRemote(link);\n return false;\n });\n\n $document.on('submit.rails', rails.formSubmitSelector, function(e) {\n var form = $(this),\n remote = rails.isRemote(form),\n blankRequiredInputs,\n nonBlankFileInputs;\n\n if (!rails.allowAction(form)) return rails.stopEverything(e);\n\n // Skip other logic when required values are missing or file upload is present\n if (form.attr('novalidate') === undefined) {\n if (form.data('ujs:formnovalidate-button') === undefined) {\n blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector, false);\n if (blankRequiredInputs && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {\n return rails.stopEverything(e);\n }\n } else {\n // Clear the formnovalidate in case the next button click is not on a formnovalidate button\n // Not strictly necessary to do here, since it is also reset on each button click, but just to be certain\n form.data('ujs:formnovalidate-button', undefined);\n }\n }\n\n if (remote) {\n nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);\n if (nonBlankFileInputs) {\n // Slight timeout so that the submit button gets properly serialized\n // (make it easy for event handler to serialize form without disabled values)\n setTimeout(function(){ rails.disableFormElements(form); }, 13);\n var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);\n\n // Re-enable form elements if event bindings return false (canceling normal form submission)\n if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); }\n\n return aborted;\n }\n\n rails.handleRemote(form);\n return false;\n\n } else {\n // Slight timeout so that the submit button gets properly serialized\n setTimeout(function(){ rails.disableFormElements(form); }, 13);\n }\n });\n\n $document.on('click.rails', rails.formInputClickSelector, function(event) {\n var button = $(this);\n\n if (!rails.allowAction(button)) return rails.stopEverything(event);\n\n // Register the pressed submit button\n var name = button.attr('name'),\n data = name ? {name:name, value:button.val()} : null;\n\n var form = button.closest('form');\n if (form.length === 0) {\n form = $('#' + button.attr('form'));\n }\n form.data('ujs:submit-button', data);\n\n // Save attributes from button\n form.data('ujs:formnovalidate-button', button.attr('formnovalidate'));\n form.data('ujs:submit-button-formaction', button.attr('formaction'));\n form.data('ujs:submit-button-formmethod', button.attr('formmethod'));\n });\n\n $document.on('ajax:send.rails', rails.formSubmitSelector, function(event) {\n if (this === event.target) rails.disableFormElements($(this));\n });\n\n $document.on('ajax:complete.rails', rails.formSubmitSelector, function(event) {\n if (this === event.target) rails.enableFormElements($(this));\n });\n\n $(function(){\n rails.refreshCSRFTokens();\n });\n }\n\n };\n\n if (window.jQuery) {\n jqueryUjsInit(jQuery);\n } else if (typeof exports === 'object' && typeof module === 'object') {\n module.exports = jqueryUjsInit;\n }\n})();\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n"],"names":["$","String","prototype","toFormulaDecimal","split","this","replace","toFormulaString","shift","keyCode","parseInt","fromCharCode","jQuery","fn","formula","opt","_opt","id","cursorAnimTime","cursorDelayTime","strings","validationError","validationPassed","import","item","export","filter","data","e","text","_args","arguments","extend","each","$this","init","startIndex","context","drag","move","offset","container","addClass","wrap","alert","insertBefore","insertAfter","focus","bind","cursor","remove","destroyDrag","unbind","event","selectAll","x","offsetX","y","offsetY","click","Math","abs","hasClass","find","length","endIndex","index","$drag","start","end","children","add","eq","appendTo","$prev","$next","$item","$dragItem","preventDefault","which","ctrlKey","location","reload","prev","setDecimal","substring","syntaxCheck","triggerHandler","getFormula","next","shiftKey","last","prependTo","parseFloat","css","position","left","outerWidth","top","outerHeight","first","nextAll","prevAll","keydown","toString","callback","FormulaParser","status","removeClass","$cursor","check","idx","parentPos","parentPadding","checkArea","push","$pointer","maxY","maxDiff","loop","setTimeout","stop","animate","opacity","key","trim","insertChar","call","insert","inArray","toLowerCase","permitedKey","$unit","decimal","merge","before","append","innerHTML","prepend","$operator","insertFormula","data_split","data_splited","$e","empty","element","setFormula","obj","JSON","parse","decodedData","console","trace","stack","result","filterData","value","type","Object","assign","join","apply","Array","slice","getVersion","OperandToken","Addition","Subtraction","Multiplication","Division","Mod","Pow","Bracket","OperandPriority","concat","Operators","Units","Parsers","ParserMap","parser","Message","array","isOperand","isNumeric","getOperatorPriority","operator","priority","n","test","stringToArray","s","dataSplited","dataSplitedLen","log","code","mapping","message","RegExp","msg","layerParser","pos","depth","innerDepth","startPos","endPos","currentParser","LayerParser","totalLength","col","paramData","j","search","splice","syntaxParser","operators","SyntaxParser","operand1","operand2","filterParser","stringParser","StringParser","unit","params","param","undefined","_super","len","parserLength","parserComplete","i","collapse","Initializer","error","jqueryUjsInit","rails","$document","document","linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","disableSelector","enableSelector","requiredInputSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","csrfToken","attr","csrfParam","CSRFProtection","xhr","token","setRequestHeader","refreshCSRFTokens","val","fire","name","Event","trigger","confirm","ajax","options","href","isRemote","handleRemote","method","url","withCredentials","dataType","ajaxSettings","is","serializeArray","button","serialize","beforeSend","settings","accepts","script","success","complete","crossDomain","isCrossDomain","xhrFields","originAnchor","createElement","urlAnchor","protocol","host","handleMethod","link","target","form","metadataInput","hide","submit","formElements","selector","elements","disableFormElements","disableFormElement","replacement","prop","enableFormElements","enableFormElement","removeData","allowAction","answer","blankInputs","specifiedSelector","nonBlank","input","radiosForNameWithNoneSelected","radioName","foundInputs","requiredInputs","checkedRadioButtonNames","nonBlankInputs","stopEverything","stopImmediatePropagation","disableElement","html","on","enableElement","off","ajaxPrefilter","originalOptions","window","metaClick","metaKey","fail","blankRequiredInputs","nonBlankFileInputs","remote","aborted","closest","module","exports","runtime","Op","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","defineProperty","enumerable","configurable","writable","err","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","Context","_invoke","state","GenStateSuspendedStart","arg","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","done","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","invoke","resolve","reject","__await","then","unwrapped","previousPromise","callInvokeWithMethodAndArg","TypeError","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","reverse","pop","skipTempReset","charAt","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function"],"sourceRoot":""}