(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o self.page) ? true : false; item = new Item(values[i], undefined, notCreate); self.items.push(item); added.push(item); } self.update(); return added; }; this.show = function(i, page) { this.i = i; this.page = page; self.update(); return self; }; /* Removes object from list. * Loops through the list and removes objects where * property "valuename" === value */ this.remove = function(valueName, value, options) { var found = 0; for (var i = 0, il = self.items.length; i < il; i++) { if (self.items[i].values()[valueName] == value) { self.templater.remove(self.items[i], options); self.items.splice(i,1); il--; i--; found++; } } self.update(); return found; }; /* Gets the objects in the list which * property "valueName" === value */ this.get = function(valueName, value) { var matchedItems = []; for (var i = 0, il = self.items.length; i < il; i++) { var item = self.items[i]; if (item.values()[valueName] == value) { matchedItems.push(item); } } return matchedItems; }; /* * Get size of the list */ this.size = function() { return self.items.length; }; /* * Removes all items from the list */ this.clear = function() { self.templater.clear(); self.items = []; return self; }; this.on = function(event, callback) { self.handlers[event].push(callback); return self; }; this.off = function(event, callback) { var e = self.handlers[event]; var index = indexOf(e, callback); if (index > -1) { e.splice(index, 1); } return self; }; this.trigger = function(event) { var i = self.handlers[event].length; while(i--) { self.handlers[event][i](self); } return self; }; this.reset = { filter: function() { var is = self.items, il = is.length; while (il--) { is[il].filtered = false; } return self; }, search: function() { var is = self.items, il = is.length; while (il--) { is[il].found = false; } return self; } }; this.update = function() { var is = self.items, il = is.length; self.visibleItems = []; self.matchingItems = []; self.templater.clear(); for (var i = 0; i < il; i++) { if (is[i].matching() && ((self.matchingItems.length+1) >= self.i && self.visibleItems.length < self.page)) { is[i].show(); self.visibleItems.push(is[i]); self.matchingItems.push(is[i]); } else if (is[i].matching()) { self.matchingItems.push(is[i]); is[i].hide(); } else { is[i].hide(); } } self.trigger('updated'); return self; }; init.start(); }; // AMD support if (typeof define === 'function' && define.amd) { define(function () { return List; }); } module.exports = List; window.List = List; })(window); },{"./src/add-async":2,"./src/filter":3,"./src/item":4,"./src/parse":5,"./src/search":6,"./src/sort":7,"./src/templater":8,"./src/utils/classes":9,"./src/utils/events":10,"./src/utils/extend":11,"./src/utils/get-attribute":12,"./src/utils/get-by-class":13,"./src/utils/index-of":14,"./src/utils/natural-sort":15,"./src/utils/to-array":16,"./src/utils/to-string":17}],2:[function(require,module,exports){ module.exports = function(list) { var addAsync = function(values, callback, items) { var valuesToAdd = values.splice(0, 50); items = items || []; items = items.concat(list.add(valuesToAdd)); if (values.length > 0) { setTimeout(function() { addAsync(values, callback, items); }, 1); } else { list.update(); callback(items); } }; return addAsync; }; },{}],3:[function(require,module,exports){ module.exports = function(list) { // Add handlers list.handlers.filterStart = list.handlers.filterStart || []; list.handlers.filterComplete = list.handlers.filterComplete || []; return function(filterFunction) { list.trigger('filterStart'); list.i = 1; // Reset paging list.reset.filter(); if (filterFunction === undefined) { list.filtered = false; } else { list.filtered = true; var is = list.items; for (var i = 0, il = is.length; i < il; i++) { var item = is[i]; if (filterFunction(item)) { item.filtered = true; } else { item.filtered = false; } } } list.update(); list.trigger('filterComplete'); return list.visibleItems; }; }; },{}],4:[function(require,module,exports){ module.exports = function(list) { return function(initValues, element, notCreate) { var item = this; this._values = {}; this.found = false; // Show if list.searched == true and this.found == true this.filtered = false;// Show if list.filtered == true and this.filtered == true var init = function(initValues, element, notCreate) { if (element === undefined) { if (notCreate) { item.values(initValues, notCreate); } else { item.values(initValues); } } else { item.elm = element; var values = list.templater.get(item, initValues); item.values(values); } }; this.values = function(newValues, notCreate) { if (newValues !== undefined) { for(var name in newValues) { item._values[name] = newValues[name]; } if (notCreate !== true) { list.templater.set(item, item.values()); } } else { return item._values; } }; this.show = function() { list.templater.show(item); }; this.hide = function() { list.templater.hide(item); }; this.matching = function() { return ( (list.filtered && list.searched && item.found && item.filtered) || (list.filtered && !list.searched && item.filtered) || (!list.filtered && list.searched && item.found) || (!list.filtered && !list.searched) ); }; this.visible = function() { return (item.elm && (item.elm.parentNode == list.list)) ? true : false; }; init(initValues, element, notCreate); }; }; },{}],5:[function(require,module,exports){ module.exports = function(list) { var Item = require('./item')(list); var getChildren = function(parent) { var nodes = parent.childNodes, items = []; for (var i = 0, il = nodes.length; i < il; i++) { // Only textnodes have a data attribute if (nodes[i].data === undefined) { items.push(nodes[i]); } } return items; }; var parse = function(itemElements, valueNames) { for (var i = 0, il = itemElements.length; i < il; i++) { list.items.push(new Item(valueNames, itemElements[i])); } }; var parseAsync = function(itemElements, valueNames) { var itemsToIndex = itemElements.splice(0, 50); // TODO: If < 100 items, what happens in IE etc? parse(itemsToIndex, valueNames); if (itemElements.length > 0) { setTimeout(function() { parseAsync(itemElements, valueNames); }, 1); } else { list.update(); list.trigger('parseComplete'); } }; list.handlers.parseComplete = list.handlers.parseComplete || []; return function() { var itemsToIndex = getChildren(list.list), valueNames = list.valueNames; if (list.indexAsync) { parseAsync(itemsToIndex, valueNames); } else { parse(itemsToIndex, valueNames); } }; }; },{"./item":4}],6:[function(require,module,exports){ module.exports = function(list) { var item, text, columns, searchString, customSearch; var prepare = { resetList: function() { list.i = 1; list.templater.clear(); customSearch = undefined; }, setOptions: function(args) { if (args.length == 2 && args[1] instanceof Array) { columns = args[1]; } else if (args.length == 2 && typeof(args[1]) == "function") { customSearch = args[1]; } else if (args.length == 3) { columns = args[1]; customSearch = args[2]; } }, setColumns: function() { if (list.items.length === 0) return; if (columns === undefined) { columns = (list.searchColumns === undefined) ? prepare.toArray(list.items[0].values()) : list.searchColumns; } }, setSearchString: function(s) { s = list.utils.toString(s).toLowerCase(); s = s.replace(/[-[\]{}()*+?.,\\^$|#]/g, "\\$&"); // Escape regular expression characters searchString = s; }, toArray: function(values) { var tmpColumn = []; for (var name in values) { tmpColumn.push(name); } return tmpColumn; } }; var search = { list: function() { for (var k = 0, kl = list.items.length; k < kl; k++) { search.item(list.items[k]); } }, item: function(item) { item.found = false; for (var j = 0, jl = columns.length; j < jl; j++) { if (search.values(item.values(), columns[j])) { item.found = true; return; } } }, values: function(values, column) { if (values.hasOwnProperty(column)) { text = list.utils.toString(values[column]).toLowerCase(); if ((searchString !== "") && (text.search(searchString) > -1)) { return true; } } return false; }, reset: function() { list.reset.search(); list.searched = false; } }; var searchMethod = function(str) { list.trigger('searchStart'); prepare.resetList(); prepare.setSearchString(str); prepare.setOptions(arguments); // str, cols|searchFunction, searchFunction prepare.setColumns(); if (searchString === "" ) { search.reset(); } else { list.searched = true; if (customSearch) { customSearch(searchString, columns); } else { search.list(); } } list.update(); list.trigger('searchComplete'); return list.visibleItems; }; list.handlers.searchStart = list.handlers.searchStart || []; list.handlers.searchComplete = list.handlers.searchComplete || []; list.utils.events.bind(list.utils.getByClass(list.listContainer, list.searchClass), 'keyup', function(e) { var target = e.target || e.srcElement, // IE have srcElement alreadyCleared = (target.value === "" && !list.searched); if (!alreadyCleared) { // If oninput already have resetted the list, do nothing searchMethod(target.value); } }); // Used to detect click on HTML5 clear button list.utils.events.bind(list.utils.getByClass(list.listContainer, list.searchClass), 'input', function(e) { var target = e.target || e.srcElement; if (target.value === "") { searchMethod(''); } }); return searchMethod; }; },{}],7:[function(require,module,exports){ module.exports = function(list) { list.sortFunction = list.sortFunction || function(itemA, itemB, options) { options.desc = options.order == "desc" ? true : false; // Natural sort uses this format return list.utils.naturalSort(itemA.values()[options.valueName], itemB.values()[options.valueName], options); }; var buttons = { els: undefined, clear: function() { for (var i = 0, il = buttons.els.length; i < il; i++) { list.utils.classes(buttons.els[i]).remove('asc'); list.utils.classes(buttons.els[i]).remove('desc'); } }, getOrder: function(btn) { var predefinedOrder = list.utils.getAttribute(btn, 'data-order'); if (predefinedOrder == "asc" || predefinedOrder == "desc") { return predefinedOrder; } else if (list.utils.classes(btn).has('desc')) { return "asc"; } else if (list.utils.classes(btn).has('asc')) { return "desc"; } else { return "asc"; } }, getInSensitive: function(btn, options) { var insensitive = list.utils.getAttribute(btn, 'data-insensitive'); if (insensitive === "false") { options.insensitive = false; } else { options.insensitive = true; } }, setOrder: function(options) { for (var i = 0, il = buttons.els.length; i < il; i++) { var btn = buttons.els[i]; if (list.utils.getAttribute(btn, 'data-sort') !== options.valueName) { continue; } var predefinedOrder = list.utils.getAttribute(btn, 'data-order'); if (predefinedOrder == "asc" || predefinedOrder == "desc") { if (predefinedOrder == options.order) { list.utils.classes(btn).add(options.order); } } else { list.utils.classes(btn).add(options.order); } } } }; var sort = function() { list.trigger('sortStart'); var options = {}; var target = arguments[0].currentTarget || arguments[0].srcElement || undefined; if (target) { options.valueName = list.utils.getAttribute(target, 'data-sort'); buttons.getInSensitive(target, options); options.order = buttons.getOrder(target); } else { options = arguments[1] || options; options.valueName = arguments[0]; options.order = options.order || "asc"; options.insensitive = (typeof options.insensitive == "undefined") ? true : options.insensitive; } buttons.clear(); buttons.setOrder(options); options.sortFunction = options.sortFunction || list.sortFunction; list.items.sort(function(a, b) { var mult = (options.order === 'desc') ? -1 : 1; return (options.sortFunction(a, b, options) * mult); }); list.update(); list.trigger('sortComplete'); }; // Add handlers list.handlers.sortStart = list.handlers.sortStart || []; list.handlers.sortComplete = list.handlers.sortComplete || []; buttons.els = list.utils.getByClass(list.listContainer, list.sortClass); list.utils.events.bind(buttons.els, 'click', sort); list.on('searchStart', buttons.clear); list.on('filterStart', buttons.clear); return sort; }; },{}],8:[function(require,module,exports){ var Templater = function(list) { var itemSource, templater = this; var init = function() { itemSource = templater.getItemSource(list.item); itemSource = templater.clearSourceItem(itemSource, list.valueNames); }; this.clearSourceItem = function(el, valueNames) { for(var i = 0, il = valueNames.length; i < il; i++) { var elm; if (valueNames[i].data) { for (var j = 0, jl = valueNames[i].data.length; j < jl; j++) { el.setAttribute('data-'+valueNames[i].data[j], ''); } } else if (valueNames[i].attr && valueNames[i].name) { elm = list.utils.getByClass(el, valueNames[i].name, true); if (elm) { elm.setAttribute(valueNames[i].attr, ""); } } else { elm = list.utils.getByClass(el, valueNames[i], true); if (elm) { elm.innerHTML = ""; } } elm = undefined; } return el; }; this.getItemSource = function(item) { if (item === undefined) { var nodes = list.list.childNodes, items = []; for (var i = 0, il = nodes.length; i < il; i++) { // Only textnodes have a data attribute if (nodes[i].data === undefined) { return nodes[i].cloneNode(true); } } } else if (/^tr[\s>]/.exec(item)) { var table = document.createElement('table'); table.innerHTML = item; return table.firstChild; } else if (item.indexOf("<") !== -1) { var div = document.createElement('div'); div.innerHTML = item; return div.firstChild; } else { var source = document.getElementById(list.item); if (source) { return source; } } throw new Error("The list need to have at list one item on init otherwise you'll have to add a template."); }; this.get = function(item, valueNames) { templater.create(item); var values = {}; for(var i = 0, il = valueNames.length; i < il; i++) { var elm; if (valueNames[i].data) { for (var j = 0, jl = valueNames[i].data.length; j < jl; j++) { values[valueNames[i].data[j]] = list.utils.getAttribute(item.elm, 'data-'+valueNames[i].data[j]); } } else if (valueNames[i].attr && valueNames[i].name) { elm = list.utils.getByClass(item.elm, valueNames[i].name, true); values[valueNames[i].name] = elm ? list.utils.getAttribute(elm, valueNames[i].attr) : ""; } else { elm = list.utils.getByClass(item.elm, valueNames[i], true); values[valueNames[i]] = elm ? elm.innerHTML : ""; } elm = undefined; } return values; }; this.set = function(item, values) { var getValueName = function(name) { for (var i = 0, il = list.valueNames.length; i < il; i++) { if (list.valueNames[i].data) { var data = list.valueNames[i].data; for (var j = 0, jl = data.length; j < jl; j++) { if (data[j] === name) { return { data: name }; } } } else if (list.valueNames[i].attr && list.valueNames[i].name && list.valueNames[i].name == name) { return list.valueNames[i]; } else if (list.valueNames[i] === name) { return name; } } }; var setValue = function(name, value) { var elm; var valueName = getValueName(name); if (!valueName) return; if (valueName.data) { item.elm.setAttribute('data-'+valueName.data, value); } else if (valueName.attr && valueName.name) { elm = list.utils.getByClass(item.elm, valueName.name, true); if (elm) { elm.setAttribute(valueName.attr, value); } } else { elm = list.utils.getByClass(item.elm, valueName, true); if (elm) { elm.innerHTML = value; } } elm = undefined; }; if (!templater.create(item)) { for(var v in values) { if (values.hasOwnProperty(v)) { setValue(v, values[v]); } } } }; this.create = function(item) { if (item.elm !== undefined) { return false; } /* If item source does not exists, use the first item in list as source for new items */ var newItem = itemSource.cloneNode(true); newItem.removeAttribute('id'); item.elm = newItem; templater.set(item, item.values()); return true; }; this.remove = function(item) { if (item.elm.parentNode === list.list) { list.list.removeChild(item.elm); } }; this.show = function(item) { templater.create(item); list.list.appendChild(item.elm); }; this.hide = function(item) { if (item.elm !== undefined && item.elm.parentNode === list.list) { list.list.removeChild(item.elm); } }; this.clear = function() { /* .innerHTML = ''; fucks up IE */ if (list.list.hasChildNodes()) { while (list.list.childNodes.length >= 1) { list.list.removeChild(list.list.firstChild); } } }; init(); }; module.exports = function(list) { return new Templater(list); }; },{}],9:[function(require,module,exports){ /** * Module dependencies. */ var index = require('./index-of'); /** * Whitespace regexp. */ var re = /\s+/; /** * toString reference. */ var toString = Object.prototype.toString; /** * Wrap `el` in a `ClassList`. * * @param {Element} el * @return {ClassList} * @api public */ module.exports = function(el){ return new ClassList(el); }; /** * Initialize a new ClassList for `el`. * * @param {Element} el * @api private */ function ClassList(el) { if (!el || !el.nodeType) { throw new Error('A DOM element reference is required'); } this.el = el; this.list = el.classList; } /** * Add class `name` if not already present. * * @param {String} name * @return {ClassList} * @api public */ ClassList.prototype.add = function(name){ // classList if (this.list) { this.list.add(name); return this; } // fallback var arr = this.array(); var i = index(arr, name); if (!~i) arr.push(name); this.el.className = arr.join(' '); return this; }; /** * Remove class `name` when present, or * pass a regular expression to remove * any which match. * * @param {String|RegExp} name * @return {ClassList} * @api public */ ClassList.prototype.remove = function(name){ if ('[object RegExp]' == toString.call(name)) { return this.removeMatching(name); } // classList if (this.list) { this.list.remove(name); return this; } // fallback var arr = this.array(); var i = index(arr, name); if (~i) arr.splice(i, 1); this.el.className = arr.join(' '); return this; }; /** * Remove all classes matching `re`. * * @param {RegExp} re * @return {ClassList} * @api private */ ClassList.prototype.removeMatching = function(re){ var arr = this.array(); for (var i = 0; i < arr.length; i++) { if (re.test(arr[i])) { this.remove(arr[i]); } } return this; }; /** * Toggle class `name`, can force state via `force`. * * For browsers that support classList, but do not support `force` yet, * the mistake will be detected and corrected. * * @param {String} name * @param {Boolean} force * @return {ClassList} * @api public */ ClassList.prototype.toggle = function(name, force){ // classList if (this.list) { if ("undefined" !== typeof force) { if (force !== this.list.toggle(name, force)) { this.list.toggle(name); // toggle again to correct } } else { this.list.toggle(name); } return this; } // fallback if ("undefined" !== typeof force) { if (!force) { this.remove(name); } else { this.add(name); } } else { if (this.has(name)) { this.remove(name); } else { this.add(name); } } return this; }; /** * Return an array of classes. * * @return {Array} * @api public */ ClassList.prototype.array = function(){ var className = this.el.getAttribute('class') || ''; var str = className.replace(/^\s+|\s+$/g, ''); var arr = str.split(re); if ('' === arr[0]) arr.shift(); return arr; }; /** * Check if class `name` is present. * * @param {String} name * @return {ClassList} * @api public */ ClassList.prototype.has = ClassList.prototype.contains = function(name){ return this.list ? this.list.contains(name) : !! ~index(this.array(), name); }; },{"./index-of":14}],10:[function(require,module,exports){ var bind = window.addEventListener ? 'addEventListener' : 'attachEvent', unbind = window.removeEventListener ? 'removeEventListener' : 'detachEvent', prefix = bind !== 'addEventListener' ? 'on' : '', toArray = require('./to-array'); /** * Bind `el` event `type` to `fn`. * * @param {Element} el, NodeList, HTMLCollection or Array * @param {String} type * @param {Function} fn * @param {Boolean} capture * @api public */ exports.bind = function(el, type, fn, capture){ el = toArray(el); for ( var i = 0; i < el.length; i++ ) { el[i][bind](prefix + type, fn, capture || false); } }; /** * Unbind `el` event `type`'s callback `fn`. * * @param {Element} el, NodeList, HTMLCollection or Array * @param {String} type * @param {Function} fn * @param {Boolean} capture * @api public */ exports.unbind = function(el, type, fn, capture){ el = toArray(el); for ( var i = 0; i < el.length; i++ ) { el[i][unbind](prefix + type, fn, capture || false); } }; },{"./to-array":16}],11:[function(require,module,exports){ /* * Source: https://github.com/segmentio/extend */ module.exports = function extend (object) { // Takes an unlimited number of extenders. var args = Array.prototype.slice.call(arguments, 1); // For each extender, copy their properties on our object. for (var i = 0, source; source = args[i]; i++) { if (!source) continue; for (var property in source) { object[property] = source[property]; } } return object; }; },{}],12:[function(require,module,exports){ /** * A cross-browser implementation of getAttribute. * Source found here: http://stackoverflow.com/a/3755343/361337 written by Vivin Paliath * * Return the value for `attr` at `element`. * * @param {Element} el * @param {String} attr * @api public */ module.exports = function(el, attr) { var result = (el.getAttribute && el.getAttribute(attr)) || null; if( !result ) { var attrs = el.attributes; var length = attrs.length; for(var i = 0; i < length; i++) { if (attr[i] !== undefined) { if(attr[i].nodeName === attr) { result = attr[i].nodeValue; } } } } return result; }; },{}],13:[function(require,module,exports){ /** * A cross-browser implementation of getElementsByClass. * Heavily based on Dustin Diaz's function: http://dustindiaz.com/getelementsbyclass. * * Find all elements with class `className` inside `container`. * Use `single = true` to increase performance in older browsers * when only one element is needed. * * @param {String} className * @param {Element} container * @param {Boolean} single * @api public */ module.exports = (function() { if (document.getElementsByClassName) { return function(container, className, single) { if (single) { return container.getElementsByClassName(className)[0]; } else { return container.getElementsByClassName(className); } }; } else if (document.querySelector) { return function(container, className, single) { className = '.' + className; if (single) { return container.querySelector(className); } else { return container.querySelectorAll(className); } }; } else { return function(container, className, single) { var classElements = [], tag = '*'; if (container === null) { container = document; } var els = container.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp("(^|\\s)"+className+"(\\s|$)"); for (var i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { if (single) { return els[i]; } else { classElements[j] = els[i]; j++; } } } return classElements; }; } })(); },{}],14:[function(require,module,exports){ var indexOf = [].indexOf; module.exports = function(arr, obj){ if (indexOf) return arr.indexOf(obj); for (var i = 0; i < arr.length; ++i) { if (arr[i] === obj) return i; } return -1; }; },{}],15:[function(require,module,exports){ /* * Natural Sort algorithm for Javascript - Version 0.8.1 - Released under MIT license * Author: Jim Palmer (based on chunking idea from Dave Koelle) */ module.exports = function(a, b, opts) { var re = /(^([+\-]?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?(?=\D|\s|$))|^0x[\da-fA-F]+$|\d+)/g, sre = /^\s+|\s+$/g, // trim pre-post whitespace snre = /\s+/g, // normalize all whitespace to single ' ' character dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/, hre = /^0x[0-9a-f]+$/i, ore = /^0/, options = opts || {}, i = function(s) { return (options.insensitive && ('' + s).toLowerCase() || '' + s).replace(sre, ''); }, // convert all to strings strip whitespace x = i(a), y = i(b), // chunk/tokenize xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), // numeric, hex or date detection xD = parseInt(x.match(hre), 16) || (xN.length !== 1 && Date.parse(x)), yD = parseInt(y.match(hre), 16) || xD && y.match(dre) && Date.parse(y) || null, normChunk = function(s, l) { // normalize spaces; find floats not starting with '0', string or 0 if not defined (Clint Priest) return (!s.match(ore) || l == 1) && parseFloat(s) || s.replace(snre, ' ').replace(sre, '') || 0; }, oFxNcL, oFyNcL; // first try and sort Hex codes or Dates if (yD) { if (xD < yD) { return -1; } else if (xD > yD) { return 1; } } // natural sorting through split numeric strings and default strings for(var cLoc = 0, xNl = xN.length, yNl = yN.length, numS = Math.max(xNl, yNl); cLoc < numS; cLoc++) { oFxNcL = normChunk(xN[cLoc] || '', xNl); oFyNcL = normChunk(yN[cLoc] || '', yNl); // handle numeric vs string comparison - number < string - (Kyle Adams) if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return isNaN(oFxNcL) ? 1 : -1; } // if unicode use locale comparison if (/[^\x00-\x80]/.test(oFxNcL + oFyNcL) && oFxNcL.localeCompare) { var comp = oFxNcL.localeCompare(oFyNcL); return comp / Math.abs(comp); } if (oFxNcL < oFyNcL) { return -1; } else if (oFxNcL > oFyNcL) { return 1; } } return 0; }; },{}],16:[function(require,module,exports){ /** * Source: https://github.com/timoxley/to-array * * Convert an array-like object into an `Array`. * If `collection` is already an `Array`, then will return a clone of `collection`. * * @param {Array | Mixed} collection An `Array` or array-like object to convert e.g. `arguments` or `NodeList` * @return {Array} Naive conversion of `collection` to a new `Array`. * @api public */ module.exports = function toArray(collection) { if (typeof collection === 'undefined') return []; if (collection === null) return [null]; if (collection === window) return [window]; if (typeof collection === 'string') return [collection]; if (isArray(collection)) return collection; if (typeof collection.length != 'number') return [collection]; if (typeof collection === 'function' && collection instanceof Function) return [collection]; var arr = []; for (var i = 0; i < collection.length; i++) { if (Object.prototype.hasOwnProperty.call(collection, i) || i in collection) { arr.push(collection[i]); } } if (!arr.length) return []; return arr; }; function isArray(arr) { return Object.prototype.toString.call(arr) === "[object Array]"; } },{}],17:[function(require,module,exports){ module.exports = function(s) { s = (s === undefined) ? "" : s; s = (s === null) ? "" : s; s = s.toString(); return s; }; },{}]},{},[1]);