listjs-rails 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/list.js +174 -151
- data/lib/listjs/rails/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b1aa4cc10a0b9a5783f561f7f485e76edef308b
|
4
|
+
data.tar.gz: b9a579e520c632916b8d3a01901c49480eb7ad7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 581d62a49e8fa57eecb7b62e5eb1b4bd19019008753750f3e10589ca713476cac26baa729c0778cdf881a9e491ce9f89d2c14d72beaa926f952f3550420d7ffa
|
7
|
+
data.tar.gz: 84de0263e295e12a0919fc21f7fd358c73a813ef69c5b8f3f5eb7e79db3412ba72d880c9b5ce22617d02b94f0cda5e13f8c2b3af77f28d7ed4be5a6eb2b69ea4
|
@@ -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
|
-
|
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 (
|
334
|
-
|
343
|
+
if ("undefined" !== typeof force) {
|
344
|
+
if (!force) {
|
345
|
+
this.remove(name);
|
346
|
+
} else {
|
347
|
+
this.add(name);
|
348
|
+
}
|
335
349
|
} else {
|
336
|
-
this.
|
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-
|
435
|
-
var typeOf = require('type')
|
436
|
-
|
453
|
+
require.register("javve-to-array/index.js", function(exports, require, module){
|
437
454
|
/**
|
438
|
-
*
|
439
|
-
*
|
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
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
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
|
-
|
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
|
-
|
518
|
-
|
519
|
-
|
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
|
-
|
538
|
-
|
539
|
-
|
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');
|
@@ -746,38 +723,46 @@ var List = function(id, options, values) {
|
|
746
723
|
addAsync = require('./src/add-async')(self),
|
747
724
|
parse = require('./src/parse')(self);
|
748
725
|
|
749
|
-
this.listClass = "list";
|
750
|
-
this.searchClass = "search";
|
751
|
-
this.sortClass = "sort";
|
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(
|
727
|
+
start: function() {
|
728
|
+
self.listClass = "list";
|
729
|
+
self.searchClass = "search";
|
730
|
+
self.sortClass = "sort";
|
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++) {
|
@@ -938,7 +923,7 @@ var List = function(id, options, values) {
|
|
938
923
|
return self;
|
939
924
|
};
|
940
925
|
|
941
|
-
init.start(
|
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
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
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";
|
1092
1074
|
} else {
|
1093
|
-
|
1094
|
-
|
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;
|
1082
|
+
} else {
|
1083
|
+
options.insensitive = false;
|
1084
|
+
}
|
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
|
+
}
|
1095
1100
|
}
|
1096
|
-
|
1097
|
-
|
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.
|
1104
|
-
|
1105
|
-
return
|
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
|
-
|
1119
|
-
events.bind(
|
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
|
};
|
@@ -1409,8 +1433,7 @@ require.alias("javve-events/index.js", "list.js/deps/events/index.js");
|
|
1409
1433
|
require.alias("javve-events/index.js", "events/index.js");
|
1410
1434
|
require.alias("component-event/index.js", "javve-events/deps/event/index.js");
|
1411
1435
|
|
1412
|
-
require.alias("javve-
|
1413
|
-
require.alias("component-type/index.js", "javve-is-collection/deps/type/index.js");
|
1436
|
+
require.alias("javve-to-array/index.js", "javve-events/deps/to-array/index.js");
|
1414
1437
|
|
1415
1438
|
require.alias("javve-get-by-class/index.js", "list.js/deps/get-by-class/index.js");
|
1416
1439
|
require.alias("javve-get-by-class/index.js", "get-by-class/index.js");
|
data/lib/listjs/rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: listjs-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artur Rodrigues
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -104,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
104
|
version: '0'
|
105
105
|
requirements: []
|
106
106
|
rubyforge_project:
|
107
|
-
rubygems_version: 2.2.
|
107
|
+
rubygems_version: 2.2.2
|
108
108
|
signing_key:
|
109
109
|
specification_version: 4
|
110
110
|
summary: Gem installation of javascript framework for list and table manipulation,
|