corrade-http-templates – Blame information for rev 62

Subversion Repositories:
Rev:
Rev Author Line No. Line
62 office 1 ( function( factory ) {
2 if ( typeof define === "function" && define.amd ) {
3  
4 // AMD. Register as an anonymous module.
5 define( [
6 "qunit"
7 ], factory );
8 } else {
9  
10 // Browser globals
11 factory( QUnit );
12 }
13 }( function( QUnit ) {
14  
15 function inArray( haystack, needle ) {
16 for ( var i = 0; i < haystack.length; i++ ) {
17 if (
18 ( needle instanceof RegExp && needle.test( haystack[ i ] ) )||
19 ( typeof needle === "string" && haystack[ i ] === needle )
20 ) {
21 return true;
22 }
23 }
24 return false;
25 }
26  
27 function check( element, search ) {
28 var i, classAttribute, elementClassArray,
29 missing = [],
30 found = [];
31  
32 if ( element.jquery && element.length !== 1 ) {
33 throw new Error( "Class checks can only be performed on a single element on a collection" );
34 }
35  
36 element = element.jquery ? element[ 0 ] : element;
37 classAttribute = element.getAttribute( "class" );
38  
39 if ( classAttribute ) {
40 elementClassArray = splitClasses( classAttribute );
41 if ( search instanceof RegExp ) {
42 if ( inArray( elementClassArray, search ) ) {
43 found.push( search );
44 } else {
45 missing.push( search );
46 }
47 } else {
48 for( i = 0; i < search.length; i++ ) {
49 if ( !inArray( elementClassArray, search[ i ] ) ) {
50 missing.push( search[ i ] );
51 } else {
52 found.push( search[ i ] );
53 }
54 }
55 }
56 } else {
57 missing = search;
58 }
59  
60 return {
61 missing: missing,
62 found: found,
63 element: element,
64 classAttribute: classAttribute
65 };
66 }
67  
68 function splitClasses( classes ) {
69 return classes.match( /\S+/g ) || [];
70 }
71  
72 function pluralize( message, classes ) {
73 return message + ( classes.length > 1 ? "es" : "" );
74 }
75  
76 QUnit.extend( QUnit.assert, {
77 hasClasses: function( element, classes, message ) {
78 var classArray = splitClasses( classes ),
79 results = check( element, classArray );
80  
81 message = message || pluralize( "Element must have class", classArray );
82  
83 this.push( !results.missing.length, results.found.join( " " ), classes, message );
84 },
85 lacksClasses: function( element, classes, message ) {
86 var classArray = splitClasses( classes ),
87 results = check( element, classArray );
88  
89 message = message || pluralize( "Element must not have class", classArray );
90  
91 this.push( !results.found.length, results.found.join( " " ), classes, message );
92 },
93 hasClassesStrict: function( element, classes, message ) {
94 var result,
95 classArray = splitClasses( classes ),
96 results = check( element, classArray );
97  
98 message = message || pluralize( "Element must only have class", classArray );
99  
100 result = !results.missing.length && results.element.getAttribute( "class" ) &&
101 splitClasses( results.element.getAttribute( "class" ) ).length ===
102 results.found.length;
103  
104 this.push( result, results.found.join( " " ), classes, message );
105 },
106 hasClassRegex: function( element, regex, message ) {
107 var results = check( element, regex );
108  
109 message = message || "Element must have class matching " + regex;
110  
111 this.push( !!results.found.length, results.found.join( " " ), regex, message );
112 },
113 lacksClassRegex: function( element, regex, message ) {
114 var results = check( element, regex );
115  
116 message = message || "Element must not have class matching " + regex;
117  
118 this.push( results.missing.length, results.missing.join( " " ), regex, message );
119 },
120 hasClassStart: function( element, partialClass, message ) {
121 var results = check( element, new RegExp( "^" + partialClass ) );
122  
123 message = message || "Element must have class starting with " + partialClass;
124  
125 this.push( results.found.length, results.found.join( " " ), partialClass, message );
126 },
127 lacksClassStart: function( element, partialClass, message ) {
128 var results = check( element, new RegExp( "^" + partialClass ) );
129  
130 message = message || "Element must not have class starting with " + partialClass;
131  
132 this.push( results.missing.length, results.missing.join( " " ), partialClass, message );
133 },
134 hasClassPartial: function( element, partialClass, message ) {
135 var results = check( element, new RegExp( partialClass ) );
136  
137 message = message || "Element must have class containing '" + partialClass + "'";
138  
139 this.push( results.found.length, results.found.join( " " ), partialClass, message );
140 },
141 lacksClassPartial: function( element, partialClass, message ) {
142 var results = check( element, new RegExp( partialClass ) );
143  
144 message = message || "Element must not have class containing '" + partialClass + "'";
145  
146 this.push( results.missing.length, results.missing.join( " " ), partialClass, message );
147 },
148 lacksAllClasses: function( element, message ) {
149 element = element.jquery ? element[ 0 ] : element;
150  
151 var classAttribute = element.getAttribute( "class" ) || "",
152 classes = splitClasses( classAttribute );
153  
154 message = message || "Element must not have any classes";
155  
156 this.push( !classes.length, !classes.length, true, message );
157 },
158 hasSomeClass: function( element, message ) {
159 element = element.jquery ? element[ 0 ] : element;
160  
161 var classAttribute = element.getAttribute( "class" ) || "",
162 classes = splitClasses( classAttribute );
163  
164 message = message || "Element must have a class";
165  
166 this.push( classes.length, classes.length, true, message );
167 }
168 });
169 } ) );