Coverage

100%
43
43
0

/Users/sebastiansandqvist/Documents/Sites & Projects/apps/~wip/s-query/index.js

100%
43
43
0
LineHitsSource
11'use strict';
2
3// ----- main constructor
4// -- @param el {Array} HTMLElement array
5// ---------------------------------------
61var Query = function(el) {
720 this.el = el;
8};
9
10
111Query.prototype = {
12
13 constructor: Query,
14
15
16 // --------------------------------- core ---------------------------------
17
18 each: function(cb) {
19
2015 for (var i = 0, len = this.el.length; i < len; i++) {
2121 cb(this.el[i], i);
22 }
23
2415 return this;
25
26 },
27
28
29 // --------------------------------- manipulation ---------------------------------
30
31 append: function(str) {
32
332 this.each(function(el) {
343 el.appendChild(document.createElement(str).cloneNode(true)); // append copy
35 });
36
372 return this;
38
39 },
40
41 empty: function() {
42
432 this.each(function(el) {
443 el.innerHTML = '';
45 });
46
472 return this;
48
49 },
50
51 hide: function() {
52
532 this.each(function(el) {
543 el.style.display = 'none';
55 });
56
572 return this;
58
59 },
60
61 show: function() {
62
632 this.each(function(el) {
643 el.style.display = '';
65 });
66
672 return this;
68 },
69
70 toggle: function() {
71
724 this.each(function(el) {
736 el.style.display = el.style.display === 'none' ? '' : 'none';
74 });
75
764 return this;
77
78 }
79
80 // --------------------------------- traversal ---------------------------------
81
82
83
84}; // end Query.prototype
85
86
87
88
89
90
91// --------------------------------- helpers ---------------------------------
92
93// ----- convert HTMLCollection to Array
94// -- @param nodeList {NodeList|HTMLCollection}
95// -- @return {Array}
96// based on http://stackoverflow.com/q/3199588/4459340
97// ---------------------------------------
981function toArray(nodeList) {
99
10021 var i = nodeList.length;
10121 var arr = [];
102
10321 while (i--) {
10428 arr.unshift(nodeList[i]);
105 }
106
10721 return arr;
108
109}
110
111
112// --------------------------------- exports ---------------------------------
113
114// ----- export factory & selector engine
115// -- @param? selector {String} css-like selector
116// -- @return {Query} new s-query object
117// ---------------------------------------
1181module.exports = function(selector) {
11916 var arr = toArray(document.querySelectorAll(selector));
12016 return new Query(arr);
121};
122
123
124// ----- selector engine
125// -- @param id|className|tagName|name {String}
126// -- @return {Query}
127// ---------------------------------------
1281module.exports.byId = function(id) {
1291 return new Query([document.getElementById(id)]);
130};
131
1321module.exports.byClass = function(className) {
1331 var elements = toArray(document.getElementsByClassName(className));
1341 return new Query(elements);
135};
136
1371module.exports.byTag = function(tag) {
1381 var elements = toArray(document.getElementsByTagName(tag));
1391 return new Query(elements);
140};
141
1421module.exports.byName = function(name) {
1431 var elements = toArray(document.getElementsByName(name));
1441 return new Query(elements);
145};
146
147
148// attach helper functions
1491module.exports.toArray = toArray;