Team:Hong Kong HKUST/human practice/start-up kit/database/js/vendor/list.js

From 2014.igem.org

Revision as of 10:27, 21 September 2014 by Gtong (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
(function(){

/**

* Require the given path.
*
* @param {String} path
* @return {Object} exports
* @api public
*/

function require(path, parent, orig) {

 var resolved = require.resolve(path);
 // lookup failed
 if (null == resolved) {
   orig = orig || path;
   parent = parent || 'root';
   var err = new Error('Failed to require "' + orig + '" from "' + parent + '"');
   err.path = orig;
   err.parent = parent;
   err.require = true;
   throw err;
 }
 var module = require.modules[resolved];
 // perform real require()
 // by invoking the module's
 // registered function
 if (!module._resolving && !module.exports) {
   var mod = {};
   mod.exports = {};
   mod.client = mod.component = true;
   module._resolving = true;
   module.call(this, mod.exports, require.relative(resolved), mod);
   delete module._resolving;
   module.exports = mod.exports;
 }
 return module.exports;

}

/**

* Registered modules.
*/

require.modules = {};

/**

* Registered aliases.
*/

require.aliases = {};

/**

* Resolve `path`.
*
* Lookup:
*
*   - PATH/index.js
*   - PATH.js
*   - PATH
*
* @param {String} path
* @return {String} path or null
* @api private
*/

require.resolve = function(path) {

 if (path.charAt(0) === '/') path = path.slice(1);
 var paths = [
   path,
   path + '.js',
   path + '.json',
   path + '/index.js',
   path + '/index.json'
 ];
 for (var i = 0; i < paths.length; i++) {
   var path = paths[i];
   if (require.modules.hasOwnProperty(path)) return path;
   if (require.aliases.hasOwnProperty(path)) return require.aliases[path];
 }

};

/**

* Normalize `path` relative to the current path.
*
* @param {String} curr
* @param {String} path
* @return {String}
* @api private
*/

require.normalize = function(curr, path) {

 var segs = [];
 if ('.' != path.charAt(0)) return path;
 curr = curr.split('/');
 path = path.split('/');
 for (var i = 0; i < path.length; ++i) {
   if ('..' == path[i]) {
     curr.pop();
   } else if ('.' != path[i] &&  != path[i]) {
     segs.push(path[i]);
   }
 }
 return curr.concat(segs).join('/');

};

/**

* Register module at `path` with callback `definition`.
*
* @param {String} path
* @param {Function} definition
* @api private
*/

require.register = function(path, definition) {

 require.modules[path] = definition;

};

/**

* Alias a module definition.
*
* @param {String} from
* @param {String} to
* @api private
*/

require.alias = function(from, to) {

 if (!require.modules.hasOwnProperty(from)) {
   throw new Error('Failed to alias "' + from + '", it does not exist');
 }
 require.aliases[to] = from;

};

/**

* Return a require function relative to the `parent` path.
*
* @param {String} parent
* @return {Function}
* @api private
*/

require.relative = function(parent) {

 var p = require.normalize(parent, '..');
 /**
  * lastIndexOf helper.
  */
 function lastIndexOf(arr, obj) {
   var i = arr.length;
   while (i--) {
     if (arr[i] === obj) return i;
   }
   return -1;
 }
 /**
  * The relative require() itself.
  */
 function localRequire(path) {
   var resolved = localRequire.resolve(path);
   return require(resolved, parent, path);
 }
 /**
  * Resolve relative to the parent.
  */
 localRequire.resolve = function(path) {
   var c = path.charAt(0);
   if ('/' == c) return path.slice(1);
   if ('.' == c) return require.normalize(p, path);
   // resolve deps by returning
   // the dep in the nearest "deps"
   // directory
   var segs = parent.split('/');
   var i = lastIndexOf(segs, 'deps') + 1;
   if (!i) i = 0;
   path = segs.slice(0, i + 1).join('/') + '/deps/' + path;
   return path;
 };
 /**
  * Check if module is defined at `path`.
  */
 localRequire.exists = function(path) {
   return require.modules.hasOwnProperty(localRequire.resolve(path));
 };
 return localRequire;

}; require.register("component-classes/index.js", function(exports, require, module){ /**

* Module dependencies.
*/

var index = require('indexof');

/**

* 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) 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 str = this.el.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);

};

}); require.register("segmentio-extend/index.js", function(exports, require, module){

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;

}; }); require.register("component-indexof/index.js", function(exports, require, module){ module.exports = function(arr, obj){

 if (arr.indexOf) return arr.indexOf(obj);
 for (var i = 0; i < arr.length; ++i) {
   if (arr[i] === obj) return i;
 }
 return -1;

}; }); require.register("component-event/index.js", function(exports, require, module){ var bind = window.addEventListener ? 'addEventListener' : 'attachEvent',

   unbind = window.removeEventListener ? 'removeEventListener' : 'detachEvent',
   prefix = bind !== 'addEventListener' ? 'on' : ;

/**

* Bind `el` event `type` to `fn`.
*
* @param {Element} el
* @param {String} type
* @param {Function} fn
* @param {Boolean} capture
* @return {Function}
* @api public
*/

exports.bind = function(el, type, fn, capture){

 el[bind](prefix + type, fn, capture || false);
 return fn;

};

/**

* Unbind `el` event `type`'s callback `fn`.
*
* @param {Element} el
* @param {String} type
* @param {Function} fn
* @param {Boolean} capture
* @return {Function}
* @api public
*/

exports.unbind = function(el, type, fn, capture){

 el[unbind](prefix + type, fn, capture || false);
 return fn;

}; }); require.register("timoxley-to-array/index.js", function(exports, require, module){ /**

* 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]";

}

}); require.register("javve-events/index.js", function(exports, require, module){ var events = require('event'),

 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++ ) {
   events.bind(el[i], type, fn, capture);
 }

};

/**

* 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++ ) {
   events.unbind(el[i], type, fn, capture);
 }

};

}); require.register("javve-get-by-class/index.js", function(exports, require, module){ /**

* 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;
   };
 }

})();

}); require.register("javve-get-attribute/index.js", function(exports, require, module){ /**

* 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;

} }); require.register("javve-natural-sort/index.js", function(exports, require, module){ /*

* Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
* Author: Jim Palmer (based on chunking idea from Dave Koelle)
*/

module.exports = function(a, b, options) {

 var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
   sre = /(^[ ]*|[ ]*$)/g,
   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 = options || {},
   i = function(s) { return options.insensitive && (+s).toLowerCase() || +s },
   // convert all to strings strip whitespace
   x = i(a).replace(sre, ) || ,
   y = i(b).replace(sre, ) || ,
   // 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)) || (xN.length != 1 && x.match(dre) && Date.parse(x)),
   yD = parseInt(y.match(hre)) || xD && y.match(dre) && Date.parse(y) || null,
   oFxNcL, oFyNcL,
   mult = options.desc ? -1 : 1;
 // first try and sort Hex codes or Dates
 if (yD)
   if ( xD < yD ) return -1 * mult;
   else if ( xD > yD ) return 1 * mult;
 // natural sorting through split numeric strings and default strings
 for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
   // find floats not starting with '0', string or 0 if not defined (Clint Priest)
   oFxNcL = !(xN[cLoc] || ).match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;
   oFyNcL = !(yN[cLoc] || ).match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;
   // handle numeric vs string comparison - number < string - (Kyle Adams)
   if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }
   // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
   else if (typeof oFxNcL !== typeof oFyNcL) {
     oFxNcL += ;
     oFyNcL += ;
   }
   if (oFxNcL < oFyNcL) return -1 * mult;
   if (oFxNcL > oFyNcL) return 1 * mult;
 }
 return 0;

};

/* var defaultSort = getSortFunction();

module.exports = function(a, b, options) {

 if (arguments.length == 1) {
   options = a;
   return getSortFunction(options);
 } else {
   return defaultSort(a,b);
 }

}

  • /

}); require.register("javve-to-string/index.js", function(exports, require, module){ module.exports = function(s) {

   s = (s === undefined) ? "" : s;
   s = (s === null) ? "" : s;
   s = s.toString();
   return s;

};

}); require.register("component-type/index.js", function(exports, require, module){ /**

* toString ref.
*/

var toString = Object.prototype.toString;

/**

* Return the type of `val`.
*
* @param {Mixed} val
* @return {String}
* @api public
*/

module.exports = function(val){

 switch (toString.call(val)) {
   case '[object Date]': return 'date';
   case '[object RegExp]': return 'regexp';
   case '[object Arguments]': return 'arguments';
   case '[object Array]': return 'array';
   case '[object Error]': return 'error';
 }
 if (val === null) return 'null';
 if (val === undefined) return 'undefined';
 if (val !== val) return 'nan';
 if (val && val.nodeType === 1) return 'element';
 return typeof val.valueOf();

};

}); require.register("list.js/index.js", function(exports, require, module){ /* ListJS with beta 1.0.0 By Jonny Strömberg (www.jonnystromberg.com, www.listjs.com)

  • /

(function( window, undefined ) { "use strict";

var document = window.document,

   getByClass = require('get-by-class'),
   extend = require('extend'),
   indexOf = require('indexof');

var List = function(id, options, values) {

   var self = this,

init,

       Item = require('./src/item')(self),
       addAsync = require('./src/add-async')(self),
       parse = require('./src/parse')(self);
   init = {
       start: function() {
           self.listClass      = "list";
           self.searchClass    = "search";
           self.sortClass      = "sort";
           self.page           = 200;
           self.i              = 1;
           self.items          = [];
           self.visibleItems   = [];
           self.matchingItems  = [];
           self.searched       = false;
           self.filtered       = false;
           self.handlers       = { 'updated': [] };
           self.plugins        = {};
           self.helpers        = {
               getByClass: getByClass,
               extend: extend,
               indexOf: indexOf
           };
           extend(self, options);
           self.listContainer = (typeof(id) === 'string') ? document.getElementById(id) : id;
           if (!self.listContainer) { return; }
           self.list           = getByClass(self.listContainer, self.listClass, true);
           self.templater      = require('./src/templater')(self);
           self.search         = require('./src/search')(self);
           self.filter         = require('./src/filter')(self);
           self.sort           = require('./src/sort')(self);
           this.items();
           self.update();
           this.plugins();
       },
       items: function() {
           parse(self.list);
           if (values !== undefined) {
               self.add(values);
           }
       },
       plugins: function() {
           for (var i = 0; i < self.plugins.length; i++) {
               var plugin = self.plugins[i];
               self[plugin.name] = plugin;
               plugin.init(self);
           }
       }
   };


   /*
   * Add object to list
   */
   this.add = function(values, callback) {
       if (callback) {
           addAsync(values, callback);
           return;
       }
       var added = [],
           notCreate = false;
       if (values[0] === undefined){
           values = [values];
       }
       for (var i = 0, il = values.length; i < il; i++) {
           var item = null;
           if (values[i] instanceof Item) {
               item = values[i];
               item.reload();
           } else {
               notCreate = (self.items.length > 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();

};

module.exports = List;

})(window);

}); require.register("list.js/src/search.js", function(exports, require, module){ var events = require('events'),

   getByClass = require('get-by-class'),
   toString = require('to-string');

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() {
           columns = (columns === undefined) ? prepare.toArray(list.items[0].values()) : columns;
       },
       setSearchString: function(s) {
           s = 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 = 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 || [];
   events.bind(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
   events.bind(getByClass(list.listContainer, list.searchClass), 'input', function(e) {
       var target = e.target || e.srcElement;
       if (target.value === "") {
           searchMethod();
       }
   });
   list.helpers.toString = toString;
   return searchMethod;

};

}); require.register("list.js/src/sort.js", function(exports, require, module){ var naturalSort = require('natural-sort'),

   classes = require('classes'),
   events = require('events'),
   getByClass = require('get-by-class'),
   getAttribute = require('get-attribute');

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 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++) {
               classes(buttons.els[i]).remove('asc');
               classes(buttons.els[i]).remove('desc');
           }
       },
       getOrder: function(btn) {
           var predefinedOrder = getAttribute(btn, 'data-order');
           if (predefinedOrder == "asc" || predefinedOrder == "desc") {
               return predefinedOrder;
           } else if (classes(btn).has('desc')) {
               return "asc";
           } else if (classes(btn).has('asc')) {
               return "desc";
           } else {
               return "asc";
           }
       },
       getInSensitive: function(btn, options) {
           var insensitive = getAttribute(btn, 'data-insensitive');
           if (insensitive === "true") {
               options.insensitive = true;
           } else {
               options.insensitive = false;
           }
       },
       setOrder: function(options) {
           for (var i = 0, il = buttons.els.length; i < il; i++) {
               var btn = buttons.els[i];
               if (getAttribute(btn, 'data-sort') !== options.valueName) {
                   continue;
               }
               var predefinedOrder = getAttribute(btn, 'data-order');
               if (predefinedOrder == "asc" || predefinedOrder == "desc") {
                   if (predefinedOrder == options.order) {
                       classes(btn).add(options.order);
                   }
               } else {
                   classes(btn).add(options.order);
               }
           }
       }
   };
   var sort = function() {
       list.trigger('sortStart');
       options = {};
       var target = arguments[0].currentTarget || arguments[0].srcElement || undefined;
       if (target) {
           options.valueName = 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) {
           return options.sortFunction(a, b, options);
       });
       list.update();
       list.trigger('sortComplete');
   };
   // Add handlers
   list.handlers.sortStart = list.handlers.sortStart || [];
   list.handlers.sortComplete = list.handlers.sortComplete || [];
   buttons.els = getByClass(list.listContainer, list.sortClass);
   events.bind(buttons.els, 'click', sort);
   list.on('searchStart', buttons.clear);
   list.on('filterStart', buttons.clear);
   // Helpers
   list.helpers.classes = classes;
   list.helpers.naturalSort = naturalSort;
   list.helpers.events = events;
   list.helpers.getAttribute = getAttribute;
   return sort;

};

}); require.register("list.js/src/item.js", function(exports, require, module){ 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.parentNode == list.list) ? true : false;
       };
       init(initValues, element, notCreate);
   };

};

}); require.register("list.js/src/templater.js", function(exports, require, module){ var getByClass = require('get-by-class');

var Templater = function(list) {

   var itemSource = getItemSource(list.item),
       templater = this;
   function getItemSource(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];
               }
           }
           return null;
       } else if (item.indexOf("<") !== -1) { // Try create html element of list, do not work for tables!!
           var div = document.createElement('div');
           div.innerHTML = item;
           return div.firstChild;
       } else {
           return document.getElementById(list.item);
       }
   }
   /* Get values from element */
   this.get = function(item, valueNames) {
       templater.create(item);
       var values = {};
       for(var i = 0, il = valueNames.length; i < il; i++) {
           var elm = getByClass(item.elm, valueNames[i], true);
           values[valueNames[i]] = elm ? elm.innerHTML : "";
       }
       return values;
   };
   /* Sets values at element */
   this.set = function(item, values) {
       if (!templater.create(item)) {
           for(var v in values) {
               if (values.hasOwnProperty(v)) {
                   // TODO speed up if possible
                   var elm = getByClass(item.elm, v, true);
                   if (elm) {
                       /* src attribute for image tag & text for other tags */
                       if (elm.tagName === "IMG" && values[v] !== "") {
                           elm.src = values[v];
                       } else {
                           elm.innerHTML = 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) {
       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);
           }
       }
   };

};

module.exports = function(list) {

   return new Templater(list);

};

}); require.register("list.js/src/filter.js", function(exports, require, module){ 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;
   };

};

}); require.register("list.js/src/add-async.js", function(exports, require, module){ module.exports = function(list) {

   return function(values, callback, items) {
       var valuesToAdd = values.splice(0, 100);
       items = items || [];
       items = items.concat(list.add(valuesToAdd));
       if (values.length > 0) {
           setTimeout(function() {
               addAsync(values, callback, items);
           }, 10);
       } else {
           list.update();
           callback(items);
       }
   };

}; }); require.register("list.js/src/parse.js", function(exports, require, module){ 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, 100); // TODO: If < 100 items, what happens in IE etc?
       parse(itemsToIndex, valueNames);
       if (itemElements.length > 0) {
           setTimeout(function() {
               init.items.indexAsync(itemElements, valueNames);
           }, 10);
       } else {
           list.update();
           // TODO: Add indexed callback
       }
   };
   return function() {
       var itemsToIndex = getChildren(list.list),
           valueNames = list.valueNames;
       if (list.indexAsync) {
           parseAsync(itemsToIndex, valueNames);
       } else {
           parse(itemsToIndex, valueNames);
       }
   };

};

});











require.alias("component-classes/index.js", "list.js/deps/classes/index.js"); require.alias("component-classes/index.js", "classes/index.js"); require.alias("component-indexof/index.js", "component-classes/deps/indexof/index.js");

require.alias("segmentio-extend/index.js", "list.js/deps/extend/index.js"); require.alias("segmentio-extend/index.js", "extend/index.js");

require.alias("component-indexof/index.js", "list.js/deps/indexof/index.js"); require.alias("component-indexof/index.js", "indexof/index.js");

require.alias("javve-events/index.js", "list.js/deps/events/index.js"); require.alias("javve-events/index.js", "events/index.js"); require.alias("component-event/index.js", "javve-events/deps/event/index.js");

require.alias("timoxley-to-array/index.js", "javve-events/deps/to-array/index.js");

require.alias("javve-get-by-class/index.js", "list.js/deps/get-by-class/index.js"); require.alias("javve-get-by-class/index.js", "get-by-class/index.js");

require.alias("javve-get-attribute/index.js", "list.js/deps/get-attribute/index.js"); require.alias("javve-get-attribute/index.js", "get-attribute/index.js");

require.alias("javve-natural-sort/index.js", "list.js/deps/natural-sort/index.js"); require.alias("javve-natural-sort/index.js", "natural-sort/index.js");

require.alias("javve-to-string/index.js", "list.js/deps/to-string/index.js"); require.alias("javve-to-string/index.js", "list.js/deps/to-string/index.js"); require.alias("javve-to-string/index.js", "to-string/index.js"); require.alias("javve-to-string/index.js", "javve-to-string/index.js"); require.alias("component-type/index.js", "list.js/deps/type/index.js"); require.alias("component-type/index.js", "type/index.js"); if (typeof exports == "object") {

 module.exports = require("list.js");

} else if (typeof define == "function" && define.amd) {

 define(function(){ return require("list.js"); });

} else {

 this["List"] = require("list.js");

}})();