{"version":3,"sources":["plugins/sorter.js"],"names":["Sorter","$","NAME","DATA_KEY","JQUERY_NO_CONFLICT","fn","SortDirection","None","Ascending","Descending","Default","sortUrl","sortVariable","sortTarget","sortValue","sortClassName","sortAscClassName","sortDescClassName","Selector","CLASS_NAME","element","config","_config","_element","_$fields","find","_shift","_sortData","self","each","_init","document","on","e","evt","window","event","keyCode","which","$field","name","data","toLowerCase","_none","split","parseName","trim","_ascending","_descending","_sort","removeClass","addClass","filter","push","direction","preventDefault","found","item","$element","value","regex","RegExp","url","replace","substring","get","html","removeData","$this","extend","_jQueryInterface","call","ajaxStop","Constructor","noConflict","jQuery"],"mappings":"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","file":"sorter.js","sourcesContent":["const Sorter = (($) => {\r\n const NAME = 'sorter';\r\n const DATA_KEY = `bs.${NAME}`;\r\n const JQUERY_NO_CONFLICT = $.fn[NAME];\r\n\r\n const SortDirection = {\r\n None: '',\r\n Ascending: 'asc',\r\n Descending: 'desc'\r\n }\r\n\r\n const Default = {\r\n sortUrl: null,\r\n sortVariable: 'orderBy',\r\n sortTarget: null,\r\n sortValue: null,\r\n sortClassName: 'sorting',\r\n sortAscClassName: 'sorting-asc',\r\n sortDescClassName: 'sorting-desc'\r\n };\r\n\r\n const Selector = {\r\n CLASS_NAME: `.js-${NAME}`\r\n }\r\n\r\n class Sorter {\r\n constructor(element, config) {\r\n this._config = config;\r\n this._element = element;\r\n this._$fields = $(element).find('[data-sort-name]'); // fyi can't have nested sort\r\n this._shift = false;\r\n this._sortData = [];\r\n\r\n const self = this;\r\n this._$fields.each(function () {\r\n self._init($(this));\r\n });\r\n\r\n // keep track of shift key being pressed\r\n $(document)\r\n .on('keydown', (e) => {\r\n // keep track of shift key being pressed\r\n const evt = e || window.event,\r\n keyCode = evt.keyCode || evt.which;\r\n\r\n if (keyCode === 16) {\r\n this._shift = true;\r\n }\r\n })\r\n .on('keyup', () => this._shift = false);\r\n }\r\n\r\n _init($field) {\r\n const name = $field.data('sort-name').toLowerCase();\r\n\r\n this._none($field);\r\n\r\n if (this._config.sortValue) {\r\n const self = this;\r\n $.each(this._config.sortValue.toLowerCase().split(','), function () {\r\n let parseName = $.trim(this);\r\n\r\n if (parseName === name || parseName === `${name} ${SortDirection.Ascending}`) {\r\n self._ascending($field);\r\n } else if (parseName === `${name} ${SortDirection.Descending}`) {\r\n self._descending($field);\r\n }\r\n });\r\n }\r\n\r\n $field.on('click', (e) => this._sort(e, $field));\r\n }\r\n\r\n _none($field) {\r\n $field\r\n .removeClass(`${this._config.sortAscClassName} ${this._config.sortDescClassName}`)\r\n .addClass(this._config.sortClassName)\r\n .data('sort-direction', SortDirection.None);\r\n\r\n this._sortData = this._sortData.filter(data => data.name !== $field.data('sort-name'));\r\n }\r\n\r\n _ascending($field) {\r\n $field\r\n .removeClass(`${this._config.sortClassName} ${this._config.sortDescClassName}`)\r\n .addClass(this._config.sortAscClassName)\r\n .data('sort-direction', SortDirection.Ascending);\r\n\r\n this._sortData.push({\r\n name: $field.data('sort-name'),\r\n direction: SortDirection.Ascending\r\n });\r\n }\r\n\r\n _descending($field) {\r\n $field\r\n .removeClass(`${this._config.sortClassName} ${this._config.sortAscClassName}`)\r\n .addClass(this._config.sortDescClassName)\r\n .data('sort-direction', SortDirection.Descending);\r\n\r\n this._sortData.push({\r\n name: $field.data('sort-name'),\r\n direction: SortDirection.Descending\r\n });\r\n }\r\n\r\n _sort(e, $field) {\r\n e.preventDefault();\r\n\r\n const name = $field.data('sort-name'),\r\n found = this._sortData.find(item => item.name === name);\r\n \r\n let direction = found ? found.direction : SortDirection.None;\r\n\r\n if (this._shift) {\r\n // multi column sorting\r\n this._sortData = this._sortData.filter((item) => item.name !== name);\r\n\r\n if (direction === SortDirection.Ascending) {\r\n this._descending($field);\r\n } else if (direction === SortDirection.Descending) {\r\n this._none($field);\r\n } else {\r\n this._ascending($field);\r\n }\r\n } else {\r\n // single column sorting\r\n this._sortData = [];\r\n const self = this;\r\n this._$fields.each(function() {\r\n const $element = $(this);\r\n if ($element.data('sort-name') !== name) {\r\n self._none($element);\r\n }\r\n });\r\n \r\n if (direction === SortDirection.Ascending) {\r\n this._descending($field);\r\n } else {\r\n this._ascending($field);\r\n }\r\n }\r\n\r\n let value = '';\r\n $.each(this._sortData, function() {\r\n value += `, ${this.name} ${this.direction}`;\r\n });\r\n\r\n const regex = new RegExp(`${this._config.sortVariable}=*[^&#]*`),\r\n url = this._config.sortUrl.replace(regex, `${this._config.sortVariable}=${value.substring(2)}`);\r\n\r\n $.get(url, (data) => $(this._config.sortTarget).html(data));\r\n }\r\n\r\n dispose() {\r\n $.removeData(this._element, DATA_KEY);\r\n this._config = null;\r\n this._element = null;\r\n }\r\n\r\n static _jQueryInterface() {\r\n return this.each(function () {\r\n const $this = $(this);\r\n let data = $this.data(DATA_KEY);\r\n const config = $.extend({}, Default, $this.data());\r\n if (!data) {\r\n data = new Sorter(this, config);\r\n $this.data(DATA_KEY, data);\r\n }\r\n });\r\n }\r\n }\r\n\r\n $(() => Sorter._jQueryInterface.call($(Selector.CLASS_NAME)));\r\n $(document).ajaxStop(() => Sorter._jQueryInterface.call($(Selector.CLASS_NAME)));\r\n\r\n $.fn[NAME] = Sorter._jQueryInterface;\r\n $.fn[NAME].Constructor = Sorter;\r\n $.fn[NAME].noConflict = function () {\r\n $.fn[NAME] = JQUERY_NO_CONFLICT;\r\n return Sorter._jQueryInterface;\r\n }\r\n\r\n return Sorter;\r\n})(jQuery);"]}