flashgrid-ext 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a14e0970022bcac6f0b923c6fe09cb175213eccc
4
- data.tar.gz: 13c948d30b3b9bcad97da8f0a7a476af82ac0cb1
3
+ metadata.gz: 931b3a73e6120bdc07b888fb9e9f6094f274bdd5
4
+ data.tar.gz: 12bd0d94b4c518f57b25de67c7d14e47824b8e31
5
5
  SHA512:
6
- metadata.gz: 95c2944d1c7c181236b55091cd5188a5b263fd6922d98189188bba07bfe08e749d5afe8dc85e1add64b26fcb59a75c8ea9041f6cd131f9761d835818d4e0e269
7
- data.tar.gz: aec1060af36af7eb8f421982eede6190eecac35bb5b0710069c79ba10c9a79ee150ef896212c3809067c2fd0e76b1fad9c9df896b7931221f51a8d2bce0e2bbc
6
+ metadata.gz: 2b6fd1d2a41a1c642a2f4b93e37f483ab3273b824f281f8fae9570edb82b61b47dbfdba471ebe551d9ffa7f842ac022a7561c3bbb30c7728281b03d7a2238d9f
7
+ data.tar.gz: 7f02a7858aeed64ffe4fffb8def1757fb8c78fb9e52acab181a97bc5efb2cc304381f9f28eca7d8633d08d372c564f2ebb6ac455429de05c9c2db2276db2d90c
data/README.md CHANGED
@@ -24,11 +24,10 @@ Add the CSS files you want to include:
24
24
 
25
25
  ```ruby
26
26
  *= require animate.css
27
- *= require aside.css
27
+ *= require aside.css (place after modal)
28
28
  *= require calendar.css
29
29
  *= require carousel.css
30
30
  *= require editor.css
31
- *= require inline_editor.css
32
31
  *= require sort.css
33
32
  *= require typeahead.css
34
33
  ```
@@ -41,7 +40,6 @@ Add the JS files you want to include:
41
40
  //= require carousel.js
42
41
  //= require editor.js
43
42
  //= require hoverdown.js
44
- //= require inline_editor.js
45
43
  //= require input_mask.js
46
44
  //= require moment.js
47
45
  //= require scrollspy.js
@@ -1,5 +1,5 @@
1
1
  module Flashgrid
2
2
  module Ext
3
- VERSION = "1.0.8"
3
+ VERSION = "1.0.9"
4
4
  end
5
5
  end
@@ -1,4 +1,6 @@
1
- ;(function($, window, undefined) {
1
+ ;(function ($, window, undefined) {
2
+ "use strict";
3
+
2
4
  // don't do anything if touch is supported
3
5
  // (plugin causes some issues on mobile)
4
6
  if('ontouchstart' in document) return;
@@ -9,19 +11,21 @@
9
11
 
10
12
  // if instantlyCloseOthers is true, then it will instantly
11
13
  // shut other nav items when a new one is hovered over
12
- $.fn.hoverdown = function(options) {
14
+ $.fn.hoverdown = function (options) {
13
15
 
14
16
  // the element we really care about
15
17
  // is the dropdown-toggle's parent
16
18
  $allDropdowns = $allDropdowns.add(this.parent());
17
19
 
18
- return this.each(function() {
20
+ return this.each(function () {
19
21
  var $this = $(this),
20
22
  $parent = $this.parent(),
21
23
  defaults = {
22
24
  delay: 500,
23
25
  instantlyCloseOthers: true
24
26
  },
27
+ showEvent = 'show.bs.dropdown',
28
+ hideEvent = 'hide.bs.dropdown',
25
29
  data = {
26
30
  delay: $(this).data('delay'),
27
31
  instantlyCloseOthers: $(this).data('close-others')
@@ -29,7 +33,7 @@
29
33
  settings = $.extend(true, {}, defaults, options, data),
30
34
  timeout;
31
35
 
32
- $parent.hover(function(event) {
36
+ $parent.hover(function (event) {
33
37
  // so a neighbor can't open the dropdown
34
38
  if(!$parent.hasClass('open') && !$this.is(event.target)) {
35
39
  return true;
@@ -41,25 +45,25 @@
41
45
  window.clearTimeout(timeout);
42
46
  $parent.addClass('open');
43
47
  $parent.trigger($.Event('show.bs.dropdown'));
44
- }, function() {
48
+ }, function () {
45
49
  timeout = window.setTimeout(function() {
46
50
  $parent.removeClass('open');
47
- $parent.trigger('hide.bs.dropdown');
51
+ $this.trigger(hideEvent);
48
52
  }, settings.delay);
49
53
  });
50
54
 
51
55
  // this helps with button groups!
52
- $this.hover(function() {
56
+ $this.hover(function () {
53
57
  if(settings.instantlyCloseOthers === true)
54
58
  $allDropdowns.removeClass('open');
55
59
 
56
60
  window.clearTimeout(timeout);
57
61
  $parent.addClass('open');
58
- $parent.trigger($.Event('show.bs.dropdown'));
62
+ $this.trigger(showEvent);
59
63
  });
60
64
 
61
65
  // handle submenus
62
- $parent.find('.dropdown-submenu').each(function(){
66
+ $parent.find('.dropdown-submenu').each(function () {
63
67
  var $this = $(this);
64
68
  var subTimeout;
65
69
  $this.hover(function() {
@@ -67,9 +71,9 @@
67
71
  $this.children('.dropdown-menu').show();
68
72
  // always close submenu siblings instantly
69
73
  $this.siblings().children('.dropdown-menu').hide();
70
- }, function() {
74
+ }, function () {
71
75
  var $submenu = $this.children('.dropdown-menu');
72
- subTimeout = window.setTimeout(function() {
76
+ subTimeout = window.setTimeout(function () {
73
77
  $submenu.hide();
74
78
  }, settings.delay);
75
79
  });
@@ -77,7 +81,7 @@
77
81
  });
78
82
  };
79
83
 
80
- $(document).ready(function() {
84
+ $(document).ready(function () {
81
85
  // apply hoverdown to all elements with the data-hover="dropdown" attribute
82
86
  $('[data-hover="dropdown"]').hoverdown();
83
87
  });
@@ -1,4 +1,6 @@
1
- +function ($) { "use strict";
1
+ +function ($) {
2
+
3
+ "use strict";
2
4
 
3
5
  var isIphone = (window.orientation !== undefined)
4
6
  var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1
@@ -45,7 +47,7 @@
45
47
  this.partialPosition = i
46
48
  } else if (defs[c]) {
47
49
  this.tests.push(new RegExp(defs[c]))
48
- if(this.firstNonMaskPos === null)
50
+ if (this.firstNonMaskPos === null)
49
51
  this.firstNonMaskPos = this.tests.length - 1
50
52
  } else {
51
53
  this.tests.push(null)
@@ -130,9 +132,9 @@
130
132
  Inputmask.prototype.shiftL = function(begin,end) {
131
133
  var len = this.mask.length
132
134
 
133
- if(begin<0) return
135
+ if (begin < 0) return
134
136
 
135
- for (var i = begin,j = this.seekNext(end); i < len; i++) {
137
+ for (var i = begin, j = this.seekNext(end); i < len; i++) {
136
138
  if (this.tests[i]) {
137
139
  if (j < len && this.tests[i].test(this.buffer[j])) {
138
140
  this.buffer[i] = this.buffer[j]
@@ -193,7 +195,7 @@
193
195
  }
194
196
 
195
197
  Inputmask.prototype.keydownEvent = function(e) {
196
- var k=e.which
198
+ var k = e.which
197
199
 
198
200
  //backspace, delete, and escape get special treatment
199
201
  if (k == 8 || k == 46 || (isIphone && k == 127)) {
@@ -201,12 +203,12 @@
201
203
  begin = pos.begin,
202
204
  end = pos.end
203
205
 
204
- if (end-begin === 0) {
205
- begin = k!=46 ? this.seekPrev(begin) : (end=this.seekNext(begin-1))
206
- end = k==46 ? this.seekNext(end) : end
206
+ if (end - begin === 0) {
207
+ begin = k != 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1))
208
+ end = k == 46 ? this.seekNext(end) : end
207
209
  }
208
210
  this.clearBuffer(begin, end)
209
- this.shiftL(begin,end-1)
211
+ this.shiftL(begin, end - 1)
210
212
 
211
213
  return false
212
214
  } else if (k == 27) {//escape
@@ -222,12 +224,12 @@
222
224
  var k = e.which,
223
225
  pos = this.caret()
224
226
 
225
- if (e.ctrlKey || e.altKey || e.metaKey || k<32) {//Ignore
227
+ if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore
226
228
  return true
227
229
  } else if (k) {
228
230
  if (pos.end - pos.begin !== 0) {
229
231
  this.clearBuffer(pos.begin, pos.end)
230
- this.shiftL(pos.begin, pos.end-1)
232
+ this.shiftL(pos.begin, pos.end - 1)
231
233
  }
232
234
 
233
235
  var p = this.seekNext(pos.begin - 1)
@@ -315,26 +315,45 @@ ClassList.prototype.removeMatching = function(re){
315
315
  };
316
316
 
317
317
  /**
318
- * Toggle class `name`.
318
+ * Toggle class `name`, can force state via `force`.
319
+ *
320
+ * For browsers that support classList, but do not support `force` yet,
321
+ * the mistake will be detected and corrected.
319
322
  *
320
323
  * @param {String} name
324
+ * @param {Boolean} force
321
325
  * @return {ClassList}
322
326
  * @api public
323
327
  */
324
328
 
325
- ClassList.prototype.toggle = function(name){
329
+ ClassList.prototype.toggle = function(name, force){
326
330
  // classList
327
331
  if (this.list) {
328
- this.list.toggle(name);
332
+ if ("undefined" !== typeof force) {
333
+ if (force !== this.list.toggle(name, force)) {
334
+ this.list.toggle(name); // toggle again to correct
335
+ }
336
+ } else {
337
+ this.list.toggle(name);
338
+ }
329
339
  return this;
330
340
  }
331
341
 
332
342
  // fallback
333
- if (this.has(name)) {
334
- this.remove(name);
343
+ if ("undefined" !== typeof force) {
344
+ if (!force) {
345
+ this.remove(name);
346
+ } else {
347
+ this.add(name);
348
+ }
335
349
  } else {
336
- this.add(name);
350
+ if (this.has(name)) {
351
+ this.remove(name);
352
+ } else {
353
+ this.add(name);
354
+ }
337
355
  }
356
+
338
357
  return this;
339
358
  };
340
359
 
@@ -431,77 +450,39 @@ exports.unbind = function(el, type, fn, capture){
431
450
  return fn;
432
451
  };
433
452
  });
434
- require.register("javve-is-collection/index.js", function(exports, require, module){
435
- var typeOf = require('type')
436
-
453
+ require.register("javve-to-array/index.js", function(exports, require, module){
437
454
  /**
438
- * Evaluates _obj_ to determine if it's an array, an array-like collection, or
439
- * something else. This is useful when working with the function `arguments`
440
- * collection and `HTMLElement` collections.
441
- * Note: This implementation doesn't consider elements that are also
442
- *
455
+ * Convert an array-like object into an `Array`.
456
+ * If `collection` is already an `Array`, then will return a clone of `collection`.
443
457
  *
458
+ * @param {Array | Mixed} collection An `Array` or array-like object to convert e.g. `arguments` or `NodeList`
459
+ * @return {Array} Naive conversion of `collection` to a new `Array`.
460
+ * @api public
461
+ */
444
462
 
445
- collections, such as `<form>` and `<select>`, to be array-like.
446
-
447
- @method test
448
- @param {Object} obj Object to test.
449
- @return {Number} A number indicating the results of the test:
450
-
451
- * 0: Neither an array nor an array-like collection.
452
- * 1: Real array.
453
- * 2: Array-like collection.
454
-
455
- @api private
456
- **/
457
- module.exports = function isCollection(obj) {
458
- var type = typeOf(obj)
459
- if (type === 'array') return 1
460
- switch (type) {
461
- case 'arguments': return 2
462
- case 'object':
463
- if (isNodeList(obj)) return 2
464
- try {
465
- // indexed, but no tagName (element) or scrollTo/document (window. From DOM.isWindow test which we can't use here),
466
- // or functions without apply/call (Safari
467
- // HTMLElementCollection bug).
468
- if ('length' in obj
469
- && !obj.tagName
470
- && !(obj.scrollTo && obj.document)
471
- && !obj.apply) {
472
- return 2
473
- }
474
- } catch (ex) {}
475
- case 'function':
476
- if (isNodeList(obj)) return 2
477
- try {
478
- // indexed, but no tagName (element) or scrollTo/document (window. From DOM.isWindow test which we can't use here),
479
- // or functions without apply/call (Safari
480
- // HTMLElementCollection bug).
481
- if ('length' in obj
482
- && !obj.tagName
483
- && !(obj.scrollTo && obj.document)
484
- && !obj.apply) {
485
- return 2
486
- }
487
- } catch (ex) {}
488
- default:
489
- return 0
463
+ module.exports = function toArray(collection) {
464
+ if (typeof collection === 'undefined') return []
465
+ if (collection === null) return [null]
466
+ if (collection === window) return [window]
467
+ if (typeof collection === 'string') return [collection]
468
+ if (collection instanceof Array) return collection
469
+ if (typeof collection.length != 'number') return [collection]
470
+ if (typeof collection === 'function') return [collection]
471
+
472
+ var arr = []
473
+ for (var i = 0; i < collection.length; i++) {
474
+ if (Object.prototype.hasOwnProperty.call(collection, i) || i in collection) {
475
+ arr.push(collection[i])
490
476
  }
477
+ }
478
+ if (!arr.length) return []
479
+ return arr
491
480
  }
492
481
 
493
- function isNodeList(nodes) {
494
- return typeof nodes === 'object'
495
- && /^\[object (NodeList)\]$/.test(Object.prototype.toString.call(nodes))
496
- && nodes.hasOwnProperty('length')
497
- && (nodes.length == 0 || (typeof nodes[0] === "object" && nodes[0].nodeType > 0))
498
- }
499
-
500
-
501
482
  });
502
483
  require.register("javve-events/index.js", function(exports, require, module){
503
484
  var events = require('event'),
504
- isCollection = require('is-collection');
485
+ toArray = require('to-array');
505
486
 
506
487
  /**
507
488
  * Bind `el` event `type` to `fn`.
@@ -514,12 +495,9 @@ var events = require('event'),
514
495
  */
515
496
 
516
497
  exports.bind = function(el, type, fn, capture){
517
- if (!isCollection(el)) {
518
- events.bind(el, type, fn, capture);
519
- } else if ( el && el[0] !== undefined ) {
520
- for ( var i = 0; i < el.length; i++ ) {
521
- events.bind(el[i], type, fn, capture);
522
- }
498
+ el = toArray(el);
499
+ for ( var i = 0; i < el.length; i++ ) {
500
+ events.bind(el[i], type, fn, capture);
523
501
  }
524
502
  };
525
503
 
@@ -534,14 +512,12 @@ exports.bind = function(el, type, fn, capture){
534
512
  */
535
513
 
536
514
  exports.unbind = function(el, type, fn, capture){
537
- if (!isCollection(el)) {
538
- events.unbind(el, type, fn, capture);
539
- } else if ( el && el[0] !== undefined ) {
540
- for ( var i = 0; i < el.length; i++ ) {
541
- events.unbind(el[i], type, fn, capture);
542
- }
515
+ el = toArray(el);
516
+ for ( var i = 0; i < el.length; i++ ) {
517
+ events.unbind(el[i], type, fn, capture);
543
518
  }
544
519
  };
520
+
545
521
  });
546
522
  require.register("javve-get-by-class/index.js", function(exports, require, module){
547
523
  /**
@@ -714,10 +690,12 @@ module.exports = function(val){
714
690
  case '[object RegExp]': return 'regexp';
715
691
  case '[object Arguments]': return 'arguments';
716
692
  case '[object Array]': return 'array';
693
+ case '[object Error]': return 'error';
717
694
  }
718
695
 
719
696
  if (val === null) return 'null';
720
697
  if (val === undefined) return 'undefined';
698
+ if (val !== val) return 'nan';
721
699
  if (val && val.nodeType === 1) return 'element';
722
700
 
723
701
  return typeof val.valueOf();
@@ -733,7 +711,6 @@ By Jonny Strömberg (www.jonnystromberg.com, www.listjs.com)
733
711
  "use strict";
734
712
 
735
713
  var document = window.document,
736
- events = require('events'),
737
714
  getByClass = require('get-by-class'),
738
715
  extend = require('extend'),
739
716
  indexOf = require('indexof');
@@ -741,43 +718,51 @@ var document = window.document,
741
718
  var List = function(id, options, values) {
742
719
 
743
720
  var self = this,
744
- init,
721
+ init,
745
722
  Item = require('./src/item')(self),
746
723
  addAsync = require('./src/add-async')(self),
747
724
  parse = require('./src/parse')(self);
748
725
 
749
- this.listClass = "sortable";
750
- this.searchClass = "sort-filter";
751
- this.sortClass = "sort-trigger";
752
- this.page = 200;
753
- this.i = 1;
754
- this.items = [];
755
- this.visibleItems = [];
756
- this.matchingItems = [];
757
- this.searched = false;
758
- this.filtered = false;
759
- this.handlers = { 'updated': [] };
760
- this.plugins = {};
761
-
762
- extend(this, options);
763
-
764
- this.listContainer = (typeof(id) === 'string') ? document.getElementById(id) : id;
765
- if (!this.listContainer) { return; }
766
- this.list = getByClass(this.listContainer, this.listClass, true);
767
-
768
- this.templater = require('./src/templater')(self);
769
- this.sort = require('./src/sort')(self);
770
- this.search = require('./src/search')(self);
771
- this.filter = require('./src/filter')(self);
772
-
773
726
  init = {
774
- start: function(values) {
727
+ start: function() {
728
+ self.listClass = "sortable";
729
+ self.searchClass = "sort-filter";
730
+ self.sortClass = "sort-trigger";
731
+ self.page = 200;
732
+ self.i = 1;
733
+ self.items = [];
734
+ self.visibleItems = [];
735
+ self.matchingItems = [];
736
+ self.searched = false;
737
+ self.filtered = false;
738
+ self.handlers = { 'updated': [] };
739
+ self.plugins = {};
740
+ self.helpers = {
741
+ getByClass: getByClass,
742
+ extend: extend,
743
+ indexOf: indexOf
744
+ };
745
+
746
+ extend(self, options);
747
+
748
+ self.listContainer = (typeof(id) === 'string') ? document.getElementById(id) : id;
749
+ if (!self.listContainer) { return; }
750
+ self.list = getByClass(self.listContainer, self.listClass, true);
751
+
752
+ self.templater = require('./src/templater')(self);
753
+ self.search = require('./src/search')(self);
754
+ self.filter = require('./src/filter')(self);
755
+ self.sort = require('./src/sort')(self);
756
+
757
+ this.items();
758
+ self.update();
759
+ this.plugins();
760
+ },
761
+ items: function() {
775
762
  parse(self.list);
776
763
  if (values !== undefined) {
777
764
  self.add(values);
778
765
  }
779
- self.update();
780
- this.plugins();
781
766
  },
782
767
  plugins: function() {
783
768
  for (var i = 0; i < self.plugins.length; i++) {
@@ -818,12 +803,12 @@ var List = function(id, options, values) {
818
803
  return added;
819
804
  };
820
805
 
821
- this.show = function(i, page) {
822
- this.i = i;
823
- this.page = page;
824
- self.update();
806
+ this.show = function(i, page) {
807
+ this.i = i;
808
+ this.page = page;
809
+ self.update();
825
810
  return self;
826
- };
811
+ };
827
812
 
828
813
  /* Removes object from list.
829
814
  * Loops through the list and removes objects where
@@ -917,7 +902,7 @@ var List = function(id, options, values) {
917
902
 
918
903
  this.update = function() {
919
904
  var is = self.items,
920
- il = is.length;
905
+ il = is.length;
921
906
 
922
907
  self.visibleItems = [];
923
908
  self.matchingItems = [];
@@ -927,18 +912,18 @@ var List = function(id, options, values) {
927
912
  is[i].show();
928
913
  self.visibleItems.push(is[i]);
929
914
  self.matchingItems.push(is[i]);
930
- } else if (is[i].matching()) {
915
+ } else if (is[i].matching()) {
931
916
  self.matchingItems.push(is[i]);
932
917
  is[i].hide();
933
- } else {
918
+ } else {
934
919
  is[i].hide();
935
- }
920
+ }
936
921
  }
937
922
  self.trigger('updated');
938
923
  return self;
939
924
  };
940
925
 
941
- init.start(values);
926
+ init.start();
942
927
  };
943
928
 
944
929
  module.exports = List;
@@ -1052,6 +1037,7 @@ module.exports = function(list) {
1052
1037
  searchMethod(target.value);
1053
1038
  });
1054
1039
 
1040
+ list.helpers.toString = toString;
1055
1041
  return searchMethod;
1056
1042
  };
1057
1043
 
@@ -1061,52 +1047,82 @@ var naturalSort = require('natural-sort'),
1061
1047
  classes = require('classes'),
1062
1048
  events = require('events'),
1063
1049
  getByClass = require('get-by-class'),
1064
- getAttribute = require('get-attribute'),
1065
- sortButtons;
1066
-
1067
- var clearPreviousSorting = function() {
1068
- for (var i = 0, il = sortButtons.length; i < il; i++) {
1069
- classes(sortButtons[i]).remove('asc');
1070
- classes(sortButtons[i]).remove('desc');
1071
- }
1072
- };
1050
+ getAttribute = require('get-attribute');
1073
1051
 
1074
1052
  module.exports = function(list) {
1075
- var sort = function() {
1076
- var options = {},
1077
- valueName;
1078
-
1079
- if (arguments[0].currentTarget || arguments[0].srcElement) {
1080
- var e = arguments[0],
1081
- target = e.currentTarget || e.srcElement,
1082
- newSortingOrder;
1083
-
1084
- valueName = getAttribute(target, 'data-sort');
1085
-
1086
- if (classes(target).has('desc')) {
1087
- options.desc = false;
1088
- newSortingOrder = 'asc';
1089
- } else if (classes(target).has('asc')) {
1090
- options.desc = true;
1091
- newSortingOrder = 'desc';
1053
+ list.sortFunction = list.sortFunction || function(itemA, itemB, options) {
1054
+ options.desc = options.order == "desc" ? true : false; // Natural sort uses this format
1055
+ return naturalSort(itemA.values()[options.valueName], itemB.values()[options.valueName], options);
1056
+ };
1057
+
1058
+ var buttons = {
1059
+ els: undefined,
1060
+ clear: function() {
1061
+ for (var i = 0, il = buttons.els.length; i < il; i++) {
1062
+ classes(buttons.els[i]).remove('asc');
1063
+ classes(buttons.els[i]).remove('desc');
1064
+ }
1065
+ },
1066
+ getOrder: function(btn) {
1067
+ var predefinedOrder = getAttribute(btn, 'data-order');
1068
+ if (predefinedOrder == "asc" || predefinedOrder == "desc") {
1069
+ return predefinedOrder;
1070
+ } else if (classes(btn).has('desc')) {
1071
+ return "asc";
1072
+ } else if (classes(btn).has('asc')) {
1073
+ return "desc";
1074
+ } else {
1075
+ return "asc";
1076
+ }
1077
+ },
1078
+ getInSensitive: function(btn, options) {
1079
+ var insensitive = getAttribute(btn, 'data-insensitive');
1080
+ if (insensitive === "true") {
1081
+ options.insensitive = true;
1092
1082
  } else {
1093
- options.desc = false;
1094
- newSortingOrder = 'asc';
1083
+ options.insensitive = false;
1095
1084
  }
1096
- clearPreviousSorting();
1097
- classes(target).add(newSortingOrder);
1085
+ },
1086
+ setOrder: function(options) {
1087
+ for (var i = 0, il = buttons.els.length; i < il; i++) {
1088
+ var btn = buttons.els[i];
1089
+ if (getAttribute(btn, 'data-sort') !== options.valueName) {
1090
+ continue;
1091
+ }
1092
+ var predefinedOrder = getAttribute(btn, 'data-order');
1093
+ if (predefinedOrder == "asc" || predefinedOrder == "desc") {
1094
+ if (predefinedOrder == options.order) {
1095
+ classes(btn).add(options.order);
1096
+ }
1097
+ } else {
1098
+ classes(btn).add(options.order);
1099
+ }
1100
+ }
1101
+ }
1102
+ };
1103
+ var sort = function() {
1104
+ list.trigger('sortStart');
1105
+ options = {};
1106
+
1107
+ var target = arguments[0].currentTarget || arguments[0].srcElement || undefined;
1108
+
1109
+ if (target) {
1110
+ options.valueName = getAttribute(target, 'data-sort');
1111
+ buttons.getInSensitive(target, options);
1112
+ options.order = buttons.getOrder(target);
1098
1113
  } else {
1099
- valueName = arguments[0];
1100
1114
  options = arguments[1] || options;
1115
+ options.valueName = arguments[0];
1116
+ options.order = options.order || "asc";
1117
+ options.insensitive = (typeof options.insensitive == "undefined") ? true : options.insensitive;
1101
1118
  }
1119
+ buttons.clear();
1120
+ buttons.setOrder(options);
1102
1121
 
1103
- options.insensitive = (typeof options.insensitive == "undefined") ? true : options.insensitive;
1104
- options.sortFunction = options.sortFunction || function(a, b) {
1105
- return naturalSort(a.values()[valueName], b.values()[valueName], options);
1106
- };
1107
-
1108
- list.trigger('sortStart');
1109
- list.items.sort(options.sortFunction);
1122
+ options.sortFunction = options.sortFunction || list.sortFunction;
1123
+ list.items.sort(function(a, b) {
1124
+ return options.sortFunction(a, b, options);
1125
+ });
1110
1126
  list.update();
1111
1127
  list.trigger('sortComplete');
1112
1128
  };
@@ -1115,8 +1131,16 @@ module.exports = function(list) {
1115
1131
  list.handlers.sortStart = list.handlers.sortStart || [];
1116
1132
  list.handlers.sortComplete = list.handlers.sortComplete || [];
1117
1133
 
1118
- sortButtons = getByClass(list.listContainer, list.sortClass);
1119
- events.bind(sortButtons, 'click', sort);
1134
+ buttons.els = getByClass(list.listContainer, list.sortClass);
1135
+ events.bind(buttons.els, 'click', sort);
1136
+ list.on('searchStart', buttons.clear);
1137
+ list.on('filterStart', buttons.clear);
1138
+
1139
+ // Helpers
1140
+ list.helpers.classes = classes;
1141
+ list.helpers.naturalSort = naturalSort;
1142
+ list.helpers.events = events;
1143
+ list.helpers.getAttribute = getAttribute;
1120
1144
 
1121
1145
  return sort;
1122
1146
  };
@@ -1379,29 +1403,20 @@ module.exports = function(list) {
1379
1403
  require.alias("component-classes/index.js", "list.js/deps/classes/index.js");
1380
1404
  require.alias("component-classes/index.js", "classes/index.js");
1381
1405
  require.alias("component-indexof/index.js", "component-classes/deps/indexof/index.js");
1382
-
1383
1406
  require.alias("segmentio-extend/index.js", "list.js/deps/extend/index.js");
1384
1407
  require.alias("segmentio-extend/index.js", "extend/index.js");
1385
-
1386
1408
  require.alias("component-indexof/index.js", "list.js/deps/indexof/index.js");
1387
1409
  require.alias("component-indexof/index.js", "indexof/index.js");
1388
-
1389
1410
  require.alias("javve-events/index.js", "list.js/deps/events/index.js");
1390
1411
  require.alias("javve-events/index.js", "events/index.js");
1391
1412
  require.alias("component-event/index.js", "javve-events/deps/event/index.js");
1392
-
1393
- require.alias("javve-is-collection/index.js", "javve-events/deps/is-collection/index.js");
1394
- require.alias("component-type/index.js", "javve-is-collection/deps/type/index.js");
1395
-
1413
+ require.alias("javve-to-array/index.js", "javve-events/deps/to-array/index.js");
1396
1414
  require.alias("javve-get-by-class/index.js", "list.js/deps/get-by-class/index.js");
1397
1415
  require.alias("javve-get-by-class/index.js", "get-by-class/index.js");
1398
-
1399
1416
  require.alias("javve-get-attribute/index.js", "list.js/deps/get-attribute/index.js");
1400
1417
  require.alias("javve-get-attribute/index.js", "get-attribute/index.js");
1401
-
1402
1418
  require.alias("javve-natural-sort/index.js", "list.js/deps/natural-sort/index.js");
1403
1419
  require.alias("javve-natural-sort/index.js", "natural-sort/index.js");
1404
-
1405
1420
  require.alias("javve-to-string/index.js", "list.js/deps/to-string/index.js");
1406
1421
  require.alias("javve-to-string/index.js", "list.js/deps/to-string/index.js");
1407
1422
  require.alias("javve-to-string/index.js", "to-string/index.js");