| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 | 
							- (function() {
 
-   var SELECTOR, addEventListener, clickEvents, numberRegExp, sortable, touchDevice, trimRegExp;
 
-   SELECTOR = 'table[data-sortable]';
 
-   numberRegExp = /^-?[£$¤]?[\d,.]+%?$/;
 
-   trimRegExp = /^\s+|\s+$/g;
 
-   clickEvents = ['click'];
 
-   touchDevice = 'ontouchstart' in document.documentElement;
 
-   if (touchDevice) {
 
-     clickEvents.push('touchstart');
 
-   }
 
-   addEventListener = function(el, event, handler) {
 
-     if (el.addEventListener != null) {
 
-       return el.addEventListener(event, handler, false);
 
-     } else {
 
-       return el.attachEvent("on" + event, handler);
 
-     }
 
-   };
 
-   sortable = {
 
-     init: function(options) {
 
-       var table, tables, _i, _len, _results;
 
-       if (options == null) {
 
-         options = {};
 
-       }
 
-       if (options.selector == null) {
 
-         options.selector = SELECTOR;
 
-       }
 
-       tables = document.querySelectorAll(options.selector);
 
-       _results = [];
 
-       for (_i = 0, _len = tables.length; _i < _len; _i++) {
 
-         table = tables[_i];
 
-         _results.push(sortable.initTable(table));
 
-       }
 
-       return _results;
 
-     },
 
-     initTable: function(table) {
 
-       var i, th, ths, _i, _len, _ref;
 
-       if (((_ref = table.tHead) != null ? _ref.rows.length : void 0) !== 1) {
 
-         return;
 
-       }
 
-       if (table.getAttribute('data-sortable-initialized') === 'true') {
 
-         return;
 
-       }
 
-       table.setAttribute('data-sortable-initialized', 'true');
 
-       ths = table.querySelectorAll('th');
 
-       for (i = _i = 0, _len = ths.length; _i < _len; i = ++_i) {
 
-         th = ths[i];
 
-         if (th.getAttribute('data-sortable') !== 'false') {
 
-           sortable.setupClickableTH(table, th, i);
 
-         }
 
-       }
 
-       return table;
 
-     },
 
-     setupClickableTH: function(table, th, i) {
 
-       var eventName, onClick, type, _i, _len, _results;
 
-       type = sortable.getColumnType(table, i);
 
-       onClick = function(e) {
 
-         var compare, item, newSortedDirection, position, row, rowArray, sorted, sortedDirection, tBody, ths, value, _compare, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1;
 
-         if (e.handled !== true) {
 
-           e.handled = true;
 
-         } else {
 
-           return false;
 
-         }
 
-         sorted = this.getAttribute('data-sorted') === 'true';
 
-         sortedDirection = this.getAttribute('data-sorted-direction');
 
-         if (sorted) {
 
-           newSortedDirection = sortedDirection === 'ascending' ? 'descending' : 'ascending';
 
-         } else {
 
-           newSortedDirection = type.defaultSortDirection;
 
-         }
 
-         ths = this.parentNode.querySelectorAll('th');
 
-         for (_i = 0, _len = ths.length; _i < _len; _i++) {
 
-           th = ths[_i];
 
-           th.setAttribute('data-sorted', 'false');
 
-           th.removeAttribute('data-sorted-direction');
 
-         }
 
-         this.setAttribute('data-sorted', 'true');
 
-         this.setAttribute('data-sorted-direction', newSortedDirection);
 
-         tBody = table.tBodies[0];
 
-         rowArray = [];
 
-         if (!sorted) {
 
-           if (type.compare != null) {
 
-             _compare = type.compare;
 
-           } else {
 
-             _compare = function(a, b) {
 
-               return b - a;
 
-             };
 
-           }
 
-           compare = function(a, b) {
 
-             if (a[0] === b[0]) {
 
-               return a[2] - b[2];
 
-             }
 
-             if (type.reverse) {
 
-               return _compare(b[0], a[0]);
 
-             } else {
 
-               return _compare(a[0], b[0]);
 
-             }
 
-           };
 
-           _ref = tBody.rows;
 
-           for (position = _j = 0, _len1 = _ref.length; _j < _len1; position = ++_j) {
 
-             row = _ref[position];
 
-             value = sortable.getNodeValue(row.cells[i]);
 
-             if (type.comparator != null) {
 
-               value = type.comparator(value);
 
-             }
 
-             rowArray.push([value, row, position]);
 
-           }
 
-           rowArray.sort(compare);
 
-           for (_k = 0, _len2 = rowArray.length; _k < _len2; _k++) {
 
-             row = rowArray[_k];
 
-             tBody.appendChild(row[1]);
 
-           }
 
-         } else {
 
-           _ref1 = tBody.rows;
 
-           for (_l = 0, _len3 = _ref1.length; _l < _len3; _l++) {
 
-             item = _ref1[_l];
 
-             rowArray.push(item);
 
-           }
 
-           rowArray.reverse();
 
-           for (_m = 0, _len4 = rowArray.length; _m < _len4; _m++) {
 
-             row = rowArray[_m];
 
-             tBody.appendChild(row);
 
-           }
 
-         }
 
-         if (typeof window['CustomEvent'] === 'function') {
 
-           return typeof table.dispatchEvent === "function" ? table.dispatchEvent(new CustomEvent('Sortable.sorted', {
 
-             bubbles: true
 
-           })) : void 0;
 
-         }
 
-       };
 
-       _results = [];
 
-       for (_i = 0, _len = clickEvents.length; _i < _len; _i++) {
 
-         eventName = clickEvents[_i];
 
-         _results.push(addEventListener(th, eventName, onClick));
 
-       }
 
-       return _results;
 
-     },
 
-     getColumnType: function(table, i) {
 
-       var row, specified, text, type, _i, _j, _len, _len1, _ref, _ref1, _ref2;
 
-       specified = (_ref = table.querySelectorAll('th')[i]) != null ? _ref.getAttribute('data-sortable-type') : void 0;
 
-       if (specified != null) {
 
-         return sortable.typesObject[specified];
 
-       }
 
-       _ref1 = table.tBodies[0].rows;
 
-       for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
 
-         row = _ref1[_i];
 
-         text = sortable.getNodeValue(row.cells[i]);
 
-         _ref2 = sortable.types;
 
-         for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
 
-           type = _ref2[_j];
 
-           if (type.match(text)) {
 
-             return type;
 
-           }
 
-         }
 
-       }
 
-       return sortable.typesObject.alpha;
 
-     },
 
-     getNodeValue: function(node) {
 
-       var dataValue;
 
-       if (!node) {
 
-         return '';
 
-       }
 
-       dataValue = node.getAttribute('data-value');
 
-       if (dataValue !== null) {
 
-         return dataValue;
 
-       }
 
-       if (typeof node.innerText !== 'undefined') {
 
-         return node.innerText.replace(trimRegExp, '');
 
-       }
 
-       return node.textContent.replace(trimRegExp, '');
 
-     },
 
-     setupTypes: function(types) {
 
-       var type, _i, _len, _results;
 
-       sortable.types = types;
 
-       sortable.typesObject = {};
 
-       _results = [];
 
-       for (_i = 0, _len = types.length; _i < _len; _i++) {
 
-         type = types[_i];
 
-         _results.push(sortable.typesObject[type.name] = type);
 
-       }
 
-       return _results;
 
-     }
 
-   };
 
-   sortable.setupTypes([
 
-     {
 
-       name: 'numeric',
 
-       defaultSortDirection: 'descending',
 
-       match: function(a) {
 
-         return a.match(numberRegExp);
 
-       },
 
-       comparator: function(a) {
 
-         return parseFloat(a.replace(/[^0-9.-]/g, ''), 10) || 0;
 
-       }
 
-     }, {
 
-       name: 'date',
 
-       defaultSortDirection: 'ascending',
 
-       reverse: true,
 
-       match: function(a) {
 
-         return !isNaN(Date.parse(a));
 
-       },
 
-       comparator: function(a) {
 
-         return Date.parse(a) || 0;
 
-       }
 
-     }, {
 
-       name: 'alpha',
 
-       defaultSortDirection: 'ascending',
 
-       match: function() {
 
-         return true;
 
-       },
 
-       compare: function(a, b) {
 
-         return a.localeCompare(b);
 
-       }
 
-     }
 
-   ]);
 
-   setTimeout(sortable.init, 0);
 
-   if (typeof define === 'function' && define.amd) {
 
-     define(function() {
 
-       return sortable;
 
-     });
 
-   } else if (typeof exports !== 'undefined') {
 
-     module.exports = sortable;
 
-   } else {
 
-     window.Sortable = sortable;
 
-   }
 
- }).call(this);
 
 
  |