Coverage

100%
31
31
0

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

100%
31
31
0
LineHitsSource
11'use strict';
2
3// ----- main constructor
4// -- @param el {Array} HTMLElement array
5// ---------------------------------------
61var Query = function(el) {
79 this.el = el;
8};
9
10
111Query.prototype = {
12
13 constructor: Query,
14
15
16 // --------------------------------- core ---------------------------------
17
18 each: function(cb) {
19
202 for (var i = 0, len = this.el.length; i < len; i++) {
213 cb(this.el[i], i);
22 }
23
242 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 // --------------------------------- traversal ---------------------------------
42
43
44
45}; // end Query.prototype
46
47
48
49
50
51
52// --------------------------------- helpers ---------------------------------
53
54// ----- convert HTMLCollection to Array
55// -- @param nodeList {NodeList|HTMLCollection}
56// -- @return {Array}
57// based on http://stackoverflow.com/q/3199588/4459340
58// ---------------------------------------
591function toArray(nodeList) {
60
6110 var i = nodeList.length;
6210 var arr = [];
63
6410 while(i--) {
6513 arr.unshift(nodeList[i]);
66 }
67
6810 return arr;
69
70}
71
72
73// --------------------------------- exports ---------------------------------
74
75// ----- export factory & selector engine
76// -- @param? selector {String} css-like selector
77// -- @return {Query} new s-query object
78// ---------------------------------------
791module.exports = function(selector) {
805 var arr = toArray(document.querySelectorAll(selector));
815 return new Query(arr);
82};
83
84
85// ----- selector engine
86// -- @param id|className|tagName|name {String}
87// -- @return {Query}
88// ---------------------------------------
891module.exports.byId = function(id) {
901 return new Query([document.getElementById(id)]);
91};
92
931module.exports.byClass = function(className) {
941 var elements = toArray(document.getElementsByClassName(className));
951 return new Query(elements);
96};
97
981module.exports.byTag = function(tag) {
991 var elements = toArray(document.getElementsByTagName(tag));
1001 return new Query(elements);
101};
102
1031module.exports.byName = function(name) {
1041 var elements = toArray(document.getElementsByName(name));
1051 return new Query(elements);
106};
107
108
109// attach helper functions
1101module.exports.toArray = toArray;