kanpachi 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/.bowerrc +3 -0
  3. data/.travis.yml +3 -1
  4. data/bower.json +22 -0
  5. data/kanpachi.gemspec +6 -6
  6. data/lib/kanpachi/doc/template/components/html5shiv/.bower.json +26 -0
  7. data/lib/kanpachi/doc/template/components/html5shiv/dist/html5shiv-printshiv.js +11 -0
  8. data/lib/kanpachi/doc/template/{source/javascripts → components/html5shiv/dist}/html5shiv.js +4 -5
  9. data/lib/kanpachi/doc/template/components/html5shiv/readme.md +143 -0
  10. data/lib/kanpachi/doc/template/components/jquery/.bower.json +37 -0
  11. data/lib/kanpachi/doc/template/components/jquery/MIT-LICENSE.txt +21 -0
  12. data/lib/kanpachi/doc/template/components/jquery/bower.json +27 -0
  13. data/lib/kanpachi/doc/template/components/jquery/dist/jquery.js +10337 -0
  14. data/lib/kanpachi/doc/template/components/jquery/dist/jquery.min.js +5 -0
  15. data/lib/kanpachi/doc/template/components/jquery/dist/jquery.min.map +1 -0
  16. data/lib/kanpachi/doc/template/components/jquery/src/ajax.js +807 -0
  17. data/lib/kanpachi/doc/template/components/jquery/src/ajax/jsonp.js +89 -0
  18. data/lib/kanpachi/doc/template/components/jquery/src/ajax/load.js +75 -0
  19. data/lib/kanpachi/doc/template/components/jquery/src/ajax/parseJSON.js +51 -0
  20. data/lib/kanpachi/doc/template/components/jquery/src/ajax/parseXML.js +31 -0
  21. data/lib/kanpachi/doc/template/components/jquery/src/ajax/script.js +93 -0
  22. data/lib/kanpachi/doc/template/components/jquery/src/ajax/var/nonce.js +5 -0
  23. data/lib/kanpachi/doc/template/components/jquery/src/ajax/var/rquery.js +3 -0
  24. data/lib/kanpachi/doc/template/components/jquery/src/ajax/xhr.js +196 -0
  25. data/lib/kanpachi/doc/template/components/jquery/src/attributes.js +11 -0
  26. data/lib/kanpachi/doc/template/components/jquery/src/attributes/attr.js +271 -0
  27. data/lib/kanpachi/doc/template/components/jquery/src/attributes/classes.js +157 -0
  28. data/lib/kanpachi/doc/template/components/jquery/src/attributes/prop.js +134 -0
  29. data/lib/kanpachi/doc/template/components/jquery/src/attributes/support.js +64 -0
  30. data/lib/kanpachi/doc/template/components/jquery/src/attributes/val.js +176 -0
  31. data/lib/kanpachi/doc/template/components/jquery/src/callbacks.js +205 -0
  32. data/lib/kanpachi/doc/template/components/jquery/src/core.js +542 -0
  33. data/lib/kanpachi/doc/template/components/jquery/src/core/access.js +60 -0
  34. data/lib/kanpachi/doc/template/components/jquery/src/core/init.js +132 -0
  35. data/lib/kanpachi/doc/template/components/jquery/src/core/parseHTML.js +39 -0
  36. data/lib/kanpachi/doc/template/components/jquery/src/core/ready.js +151 -0
  37. data/lib/kanpachi/doc/template/components/jquery/src/core/var/rsingleTag.js +4 -0
  38. data/lib/kanpachi/doc/template/components/jquery/src/css.js +508 -0
  39. data/lib/kanpachi/doc/template/components/jquery/src/css/addGetHookIf.js +32 -0
  40. data/lib/kanpachi/doc/template/components/jquery/src/css/curCSS.js +117 -0
  41. data/lib/kanpachi/doc/template/components/jquery/src/css/defaultDisplay.js +68 -0
  42. data/lib/kanpachi/doc/template/components/jquery/src/css/hiddenVisibleSelectors.js +20 -0
  43. data/lib/kanpachi/doc/template/components/jquery/src/css/support.js +193 -0
  44. data/lib/kanpachi/doc/template/components/jquery/src/css/swap.js +28 -0
  45. data/lib/kanpachi/doc/template/components/jquery/src/css/var/cssExpand.js +3 -0
  46. data/lib/kanpachi/doc/template/components/jquery/src/css/var/isHidden.js +13 -0
  47. data/lib/kanpachi/doc/template/components/jquery/src/css/var/rmargin.js +3 -0
  48. data/lib/kanpachi/doc/template/components/jquery/src/css/var/rnumnonpx.js +5 -0
  49. data/lib/kanpachi/doc/template/components/jquery/src/data.js +332 -0
  50. data/lib/kanpachi/doc/template/components/jquery/src/data/accepts.js +21 -0
  51. data/lib/kanpachi/doc/template/components/jquery/src/data/support.js +25 -0
  52. data/lib/kanpachi/doc/template/components/jquery/src/deferred.js +150 -0
  53. data/lib/kanpachi/doc/template/components/jquery/src/deprecated.js +13 -0
  54. data/lib/kanpachi/doc/template/components/jquery/src/dimensions.js +50 -0
  55. data/lib/kanpachi/doc/template/components/jquery/src/effects.js +648 -0
  56. data/lib/kanpachi/doc/template/components/jquery/src/effects/Tween.js +114 -0
  57. data/lib/kanpachi/doc/template/components/jquery/src/effects/animatedSelector.js +13 -0
  58. data/lib/kanpachi/doc/template/components/jquery/src/effects/support.js +76 -0
  59. data/lib/kanpachi/doc/template/components/jquery/src/event.js +1029 -0
  60. data/lib/kanpachi/doc/template/components/jquery/src/event/alias.js +39 -0
  61. data/lib/kanpachi/doc/template/components/jquery/src/event/support.js +26 -0
  62. data/lib/kanpachi/doc/template/components/jquery/src/exports/amd.js +18 -0
  63. data/lib/kanpachi/doc/template/components/jquery/src/exports/global.js +32 -0
  64. data/lib/kanpachi/doc/template/components/jquery/src/intro.js +44 -0
  65. data/lib/kanpachi/doc/template/components/jquery/src/jquery.js +37 -0
  66. data/lib/kanpachi/doc/template/components/jquery/src/manipulation.js +744 -0
  67. data/lib/kanpachi/doc/template/components/jquery/src/manipulation/_evalUrl.js +18 -0
  68. data/lib/kanpachi/doc/template/components/jquery/src/manipulation/support.js +79 -0
  69. data/lib/kanpachi/doc/template/components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  70. data/lib/kanpachi/doc/template/components/jquery/src/offset.js +211 -0
  71. data/lib/kanpachi/doc/template/components/jquery/src/outro.js +1 -0
  72. data/lib/kanpachi/doc/template/components/jquery/src/queue.js +142 -0
  73. data/lib/kanpachi/doc/template/components/jquery/src/queue/delay.js +22 -0
  74. data/lib/kanpachi/doc/template/components/jquery/src/selector-sizzle.js +14 -0
  75. data/lib/kanpachi/doc/template/components/jquery/src/selector.js +1 -0
  76. data/lib/kanpachi/doc/template/components/jquery/src/serialize.js +110 -0
  77. data/lib/kanpachi/doc/template/components/jquery/src/sizzle/dist/sizzle.js +2015 -0
  78. data/lib/kanpachi/doc/template/components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  79. data/lib/kanpachi/doc/template/components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  80. data/lib/kanpachi/doc/template/components/jquery/src/support.js +62 -0
  81. data/lib/kanpachi/doc/template/components/jquery/src/traversing.js +200 -0
  82. data/lib/kanpachi/doc/template/components/jquery/src/traversing/findFilter.js +100 -0
  83. data/lib/kanpachi/doc/template/components/jquery/src/traversing/var/rneedsContext.js +6 -0
  84. data/lib/kanpachi/doc/template/components/jquery/src/var/class2type.js +4 -0
  85. data/lib/kanpachi/doc/template/components/jquery/src/var/concat.js +5 -0
  86. data/lib/kanpachi/doc/template/components/jquery/src/var/deletedIds.js +3 -0
  87. data/lib/kanpachi/doc/template/components/jquery/src/var/hasOwn.js +5 -0
  88. data/lib/kanpachi/doc/template/components/jquery/src/var/indexOf.js +5 -0
  89. data/lib/kanpachi/doc/template/components/jquery/src/var/pnum.js +3 -0
  90. data/lib/kanpachi/doc/template/components/jquery/src/var/push.js +5 -0
  91. data/lib/kanpachi/doc/template/components/jquery/src/var/rnotwhite.js +3 -0
  92. data/lib/kanpachi/doc/template/components/jquery/src/var/slice.js +5 -0
  93. data/lib/kanpachi/doc/template/components/jquery/src/var/strundefined.js +3 -0
  94. data/lib/kanpachi/doc/template/components/jquery/src/var/support.js +4 -0
  95. data/lib/kanpachi/doc/template/components/jquery/src/var/toString.js +5 -0
  96. data/lib/kanpachi/doc/template/components/jquery/src/var/trim.js +3 -0
  97. data/lib/kanpachi/doc/template/components/jquery/src/wrap.js +75 -0
  98. data/lib/kanpachi/doc/template/components/respond/.bower.json +20 -0
  99. data/lib/kanpachi/doc/template/components/respond/Gruntfile.js +90 -0
  100. data/lib/kanpachi/doc/template/components/respond/LICENSE-MIT +22 -0
  101. data/lib/kanpachi/doc/template/components/respond/README.md +114 -0
  102. data/lib/kanpachi/doc/template/components/respond/bower.json +10 -0
  103. data/lib/kanpachi/doc/template/components/respond/cross-domain/example.html +24 -0
  104. data/lib/kanpachi/doc/template/components/respond/cross-domain/respond-proxy.html +96 -0
  105. data/lib/kanpachi/doc/template/components/respond/cross-domain/respond.proxy.gif +0 -0
  106. data/lib/kanpachi/doc/template/components/respond/cross-domain/respond.proxy.js +127 -0
  107. data/lib/kanpachi/doc/template/components/respond/dest/respond.matchmedia.addListener.min.js +5 -0
  108. data/lib/kanpachi/doc/template/components/respond/dest/respond.matchmedia.addListener.src.js +273 -0
  109. data/lib/kanpachi/doc/template/components/respond/dest/respond.min.js +5 -0
  110. data/lib/kanpachi/doc/template/components/respond/dest/respond.src.js +224 -0
  111. data/lib/kanpachi/doc/template/components/respond/package.json +32 -0
  112. data/lib/kanpachi/doc/template/components/respond/src/matchmedia.addListener.js +76 -0
  113. data/lib/kanpachi/doc/template/components/respond/src/matchmedia.polyfill.js +36 -0
  114. data/lib/kanpachi/doc/template/components/respond/src/respond.js +341 -0
  115. data/lib/kanpachi/doc/template/config.rb +4 -0
  116. data/lib/kanpachi/doc/template/source/fonts/glyphicons-halflings-regular.eot +0 -0
  117. data/lib/kanpachi/doc/template/source/fonts/glyphicons-halflings-regular.svg +201 -200
  118. data/lib/kanpachi/doc/template/source/fonts/glyphicons-halflings-regular.ttf +0 -0
  119. data/lib/kanpachi/doc/template/source/fonts/glyphicons-halflings-regular.woff +0 -0
  120. data/lib/kanpachi/doc/template/source/javascripts/all.coffee +2 -0
  121. data/lib/kanpachi/doc/template/source/javascripts/bootstrap.js +271 -319
  122. data/lib/kanpachi/doc/template/source/javascripts/bootstrap.min.js +6 -6
  123. data/lib/kanpachi/doc/template/source/javascripts/ie.coffee +2 -0
  124. data/lib/kanpachi/doc/template/source/layouts/layout.slim +4 -6
  125. data/lib/kanpachi/doc/template/source/stylesheets/bootstrap-theme.css +192 -229
  126. data/lib/kanpachi/doc/template/source/stylesheets/bootstrap-theme.css.map +1 -0
  127. data/lib/kanpachi/doc/template/source/stylesheets/bootstrap-theme.min.css +7 -1
  128. data/lib/kanpachi/doc/template/source/stylesheets/bootstrap.css +2036 -3056
  129. data/lib/kanpachi/doc/template/source/stylesheets/bootstrap.css.map +1 -0
  130. data/lib/kanpachi/doc/template/source/stylesheets/bootstrap.min.css +6 -8
  131. data/lib/kanpachi/version.rb +1 -1
  132. data/wercker.yml +27 -0
  133. metadata +143 -31
  134. data/lib/kanpachi/doc/template/source/javascripts/all.js +0 -1
  135. data/lib/kanpachi/doc/template/source/javascripts/jquery-1.10.2.min.js +0 -6
  136. data/lib/kanpachi/doc/template/source/javascripts/respond.min.js +0 -7
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "Respond.js",
3
+ "description": "min/max-width media query polyfill",
4
+ "version": "1.4.2",
5
+ "homepage": "https://github.com/scottjehl/Respond",
6
+ "author": {
7
+ "name": "Scott Jehl",
8
+ "email": "scott@filamentgroup.com",
9
+ "url": "http://filamentgroup.com"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/scottjehl/Respond.git"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/scottjehl/Respond/issues"
17
+ },
18
+ "licenses": [
19
+ {
20
+ "type": "MIT",
21
+ "url": "https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT"
22
+ }
23
+ ],
24
+ "devDependencies": {
25
+ "grunt-cli":"~0.1",
26
+ "grunt": "~0.4.0",
27
+ "grunt-contrib-jshint": "~0.2.0",
28
+ "grunt-contrib-qunit": "~0.3.0",
29
+ "grunt-contrib-uglify": "0.2.7"
30
+ }
31
+
32
+ }
@@ -0,0 +1,76 @@
1
+ /*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */
2
+ (function( w ){
3
+ "use strict";
4
+ // Bail out for browsers that have addListener support
5
+ if (w.matchMedia && w.matchMedia('all').addListener) {
6
+ return false;
7
+ }
8
+
9
+ var localMatchMedia = w.matchMedia,
10
+ hasMediaQueries = localMatchMedia('only all').matches,
11
+ isListening = false,
12
+ timeoutID = 0, // setTimeout for debouncing 'handleChange'
13
+ queries = [], // Contains each 'mql' and associated 'listeners' if 'addListener' is used
14
+ handleChange = function(evt) {
15
+ // Debounce
16
+ w.clearTimeout(timeoutID);
17
+
18
+ timeoutID = w.setTimeout(function() {
19
+ for (var i = 0, il = queries.length; i < il; i++) {
20
+ var mql = queries[i].mql,
21
+ listeners = queries[i].listeners || [],
22
+ matches = localMatchMedia(mql.media).matches;
23
+
24
+ // Update mql.matches value and call listeners
25
+ // Fire listeners only if transitioning to or from matched state
26
+ if (matches !== mql.matches) {
27
+ mql.matches = matches;
28
+
29
+ for (var j = 0, jl = listeners.length; j < jl; j++) {
30
+ listeners[j].call(w, mql);
31
+ }
32
+ }
33
+ }
34
+ }, 30);
35
+ };
36
+
37
+ w.matchMedia = function(media) {
38
+ var mql = localMatchMedia(media),
39
+ listeners = [],
40
+ index = 0;
41
+
42
+ mql.addListener = function(listener) {
43
+ // Changes would not occur to css media type so return now (Affects IE <= 8)
44
+ if (!hasMediaQueries) {
45
+ return;
46
+ }
47
+
48
+ // Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)
49
+ // There should only ever be 1 resize listener running for performance
50
+ if (!isListening) {
51
+ isListening = true;
52
+ w.addEventListener('resize', handleChange, true);
53
+ }
54
+
55
+ // Push object only if it has not been pushed already
56
+ if (index === 0) {
57
+ index = queries.push({
58
+ mql : mql,
59
+ listeners : listeners
60
+ });
61
+ }
62
+
63
+ listeners.push(listener);
64
+ };
65
+
66
+ mql.removeListener = function(listener) {
67
+ for (var i = 0, il = listeners.length; i < il; i++){
68
+ if (listeners[i] === listener){
69
+ listeners.splice(i, 1);
70
+ }
71
+ }
72
+ };
73
+
74
+ return mql;
75
+ };
76
+ }( this ));
@@ -0,0 +1,36 @@
1
+ /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
2
+ /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
3
+
4
+ (function(w){
5
+ "use strict";
6
+ w.matchMedia = w.matchMedia || (function( doc, undefined ) {
7
+
8
+ var bool,
9
+ docElem = doc.documentElement,
10
+ refNode = docElem.firstElementChild || docElem.firstChild,
11
+ // fakeBody required for <FF4 when executed in <head>
12
+ fakeBody = doc.createElement( "body" ),
13
+ div = doc.createElement( "div" );
14
+
15
+ div.id = "mq-test-1";
16
+ div.style.cssText = "position:absolute;top:-100em";
17
+ fakeBody.style.background = "none";
18
+ fakeBody.appendChild(div);
19
+
20
+ return function(q){
21
+
22
+ div.innerHTML = "&shy;<style media=\"" + q + "\"> #mq-test-1 { width: 42px; }</style>";
23
+
24
+ docElem.insertBefore( fakeBody, refNode );
25
+ bool = div.offsetWidth === 42;
26
+ docElem.removeChild( fakeBody );
27
+
28
+ return {
29
+ matches: bool,
30
+ media: q
31
+ };
32
+
33
+ };
34
+
35
+ }( w.document ));
36
+ }( this ));
@@ -0,0 +1,341 @@
1
+ /*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs */
2
+ (function( w ){
3
+
4
+ "use strict";
5
+
6
+ //exposed namespace
7
+ var respond = {};
8
+ w.respond = respond;
9
+
10
+ //define update even in native-mq-supporting browsers, to avoid errors
11
+ respond.update = function(){};
12
+
13
+ //define ajax obj
14
+ var requestQueue = [],
15
+ xmlHttp = (function() {
16
+ var xmlhttpmethod = false;
17
+ try {
18
+ xmlhttpmethod = new w.XMLHttpRequest();
19
+ }
20
+ catch( e ){
21
+ xmlhttpmethod = new w.ActiveXObject( "Microsoft.XMLHTTP" );
22
+ }
23
+ return function(){
24
+ return xmlhttpmethod;
25
+ };
26
+ })(),
27
+
28
+ //tweaked Ajax functions from Quirksmode
29
+ ajax = function( url, callback ) {
30
+ var req = xmlHttp();
31
+ if (!req){
32
+ return;
33
+ }
34
+ req.open( "GET", url, true );
35
+ req.onreadystatechange = function () {
36
+ if ( req.readyState !== 4 || req.status !== 200 && req.status !== 304 ){
37
+ return;
38
+ }
39
+ callback( req.responseText );
40
+ };
41
+ if ( req.readyState === 4 ){
42
+ return;
43
+ }
44
+ req.send( null );
45
+ };
46
+
47
+ //expose for testing
48
+ respond.ajax = ajax;
49
+ respond.queue = requestQueue;
50
+
51
+ // expose for testing
52
+ respond.regex = {
53
+ media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,
54
+ keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,
55
+ urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,
56
+ findStyles: /@media *([^\{]+)\{([\S\s]+?)$/,
57
+ only: /(only\s+)?([a-zA-Z]+)\s?/,
58
+ minw: /\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,
59
+ maxw: /\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/
60
+ };
61
+
62
+ //expose media query support flag for external use
63
+ respond.mediaQueriesSupported = w.matchMedia && w.matchMedia( "only all" ) !== null && w.matchMedia( "only all" ).matches;
64
+
65
+ //if media queries are supported, exit here
66
+ if( respond.mediaQueriesSupported ){
67
+ return;
68
+ }
69
+
70
+ //define vars
71
+ var doc = w.document,
72
+ docElem = doc.documentElement,
73
+ mediastyles = [],
74
+ rules = [],
75
+ appendedEls = [],
76
+ parsedSheets = {},
77
+ resizeThrottle = 30,
78
+ head = doc.getElementsByTagName( "head" )[0] || docElem,
79
+ base = doc.getElementsByTagName( "base" )[0],
80
+ links = head.getElementsByTagName( "link" ),
81
+
82
+ lastCall,
83
+ resizeDefer,
84
+
85
+ //cached container for 1em value, populated the first time it's needed
86
+ eminpx,
87
+
88
+ // returns the value of 1em in pixels
89
+ getEmValue = function() {
90
+ var ret,
91
+ div = doc.createElement('div'),
92
+ body = doc.body,
93
+ originalHTMLFontSize = docElem.style.fontSize,
94
+ originalBodyFontSize = body && body.style.fontSize,
95
+ fakeUsed = false;
96
+
97
+ div.style.cssText = "position:absolute;font-size:1em;width:1em";
98
+
99
+ if( !body ){
100
+ body = fakeUsed = doc.createElement( "body" );
101
+ body.style.background = "none";
102
+ }
103
+
104
+ // 1em in a media query is the value of the default font size of the browser
105
+ // reset docElem and body to ensure the correct value is returned
106
+ docElem.style.fontSize = "100%";
107
+ body.style.fontSize = "100%";
108
+
109
+ body.appendChild( div );
110
+
111
+ if( fakeUsed ){
112
+ docElem.insertBefore( body, docElem.firstChild );
113
+ }
114
+
115
+ ret = div.offsetWidth;
116
+
117
+ if( fakeUsed ){
118
+ docElem.removeChild( body );
119
+ }
120
+ else {
121
+ body.removeChild( div );
122
+ }
123
+
124
+ // restore the original values
125
+ docElem.style.fontSize = originalHTMLFontSize;
126
+ if( originalBodyFontSize ) {
127
+ body.style.fontSize = originalBodyFontSize;
128
+ }
129
+
130
+
131
+ //also update eminpx before returning
132
+ ret = eminpx = parseFloat(ret);
133
+
134
+ return ret;
135
+ },
136
+
137
+ //enable/disable styles
138
+ applyMedia = function( fromResize ){
139
+ var name = "clientWidth",
140
+ docElemProp = docElem[ name ],
141
+ currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp,
142
+ styleBlocks = {},
143
+ lastLink = links[ links.length-1 ],
144
+ now = (new Date()).getTime();
145
+
146
+ //throttle resize calls
147
+ if( fromResize && lastCall && now - lastCall < resizeThrottle ){
148
+ w.clearTimeout( resizeDefer );
149
+ resizeDefer = w.setTimeout( applyMedia, resizeThrottle );
150
+ return;
151
+ }
152
+ else {
153
+ lastCall = now;
154
+ }
155
+
156
+ for( var i in mediastyles ){
157
+ if( mediastyles.hasOwnProperty( i ) ){
158
+ var thisstyle = mediastyles[ i ],
159
+ min = thisstyle.minw,
160
+ max = thisstyle.maxw,
161
+ minnull = min === null,
162
+ maxnull = max === null,
163
+ em = "em";
164
+
165
+ if( !!min ){
166
+ min = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );
167
+ }
168
+ if( !!max ){
169
+ max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );
170
+ }
171
+
172
+ // if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true
173
+ if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){
174
+ if( !styleBlocks[ thisstyle.media ] ){
175
+ styleBlocks[ thisstyle.media ] = [];
176
+ }
177
+ styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] );
178
+ }
179
+ }
180
+ }
181
+
182
+ //remove any existing respond style element(s)
183
+ for( var j in appendedEls ){
184
+ if( appendedEls.hasOwnProperty( j ) ){
185
+ if( appendedEls[ j ] && appendedEls[ j ].parentNode === head ){
186
+ head.removeChild( appendedEls[ j ] );
187
+ }
188
+ }
189
+ }
190
+ appendedEls.length = 0;
191
+
192
+ //inject active styles, grouped by media type
193
+ for( var k in styleBlocks ){
194
+ if( styleBlocks.hasOwnProperty( k ) ){
195
+ var ss = doc.createElement( "style" ),
196
+ css = styleBlocks[ k ].join( "\n" );
197
+
198
+ ss.type = "text/css";
199
+ ss.media = k;
200
+
201
+ //originally, ss was appended to a documentFragment and sheets were appended in bulk.
202
+ //this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one!
203
+ head.insertBefore( ss, lastLink.nextSibling );
204
+
205
+ if ( ss.styleSheet ){
206
+ ss.styleSheet.cssText = css;
207
+ }
208
+ else {
209
+ ss.appendChild( doc.createTextNode( css ) );
210
+ }
211
+
212
+ //push to appendedEls to track for later removal
213
+ appendedEls.push( ss );
214
+ }
215
+ }
216
+ },
217
+ //find media blocks in css text, convert to style blocks
218
+ translate = function( styles, href, media ){
219
+ var qs = styles.replace( respond.regex.keyframes, '' ).match( respond.regex.media ),
220
+ ql = qs && qs.length || 0;
221
+
222
+ //try to get CSS path
223
+ href = href.substring( 0, href.lastIndexOf( "/" ) );
224
+
225
+ var repUrls = function( css ){
226
+ return css.replace( respond.regex.urls, "$1" + href + "$2$3" );
227
+ },
228
+ useMedia = !ql && media;
229
+
230
+ //if path exists, tack on trailing slash
231
+ if( href.length ){ href += "/"; }
232
+
233
+ //if no internal queries exist, but media attr does, use that
234
+ //note: this currently lacks support for situations where a media attr is specified on a link AND
235
+ //its associated stylesheet has internal CSS media queries.
236
+ //In those cases, the media attribute will currently be ignored.
237
+ if( useMedia ){
238
+ ql = 1;
239
+ }
240
+
241
+ for( var i = 0; i < ql; i++ ){
242
+ var fullq, thisq, eachq, eql;
243
+
244
+ //media attr
245
+ if( useMedia ){
246
+ fullq = media;
247
+ rules.push( repUrls( styles ) );
248
+ }
249
+ //parse for styles
250
+ else{
251
+ fullq = qs[ i ].match( respond.regex.findStyles ) && RegExp.$1;
252
+ rules.push( RegExp.$2 && repUrls( RegExp.$2 ) );
253
+ }
254
+
255
+ eachq = fullq.split( "," );
256
+ eql = eachq.length;
257
+
258
+ for( var j = 0; j < eql; j++ ){
259
+ thisq = eachq[ j ];
260
+ mediastyles.push( {
261
+ media : thisq.split( "(" )[ 0 ].match( respond.regex.only ) && RegExp.$2 || "all",
262
+ rules : rules.length - 1,
263
+ hasquery : thisq.indexOf("(") > -1,
264
+ minw : thisq.match( respond.regex.minw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ),
265
+ maxw : thisq.match( respond.regex.maxw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" )
266
+ } );
267
+ }
268
+ }
269
+
270
+ applyMedia();
271
+ },
272
+
273
+ //recurse through request queue, get css text
274
+ makeRequests = function(){
275
+ if( requestQueue.length ){
276
+ var thisRequest = requestQueue.shift();
277
+
278
+ ajax( thisRequest.href, function( styles ){
279
+ translate( styles, thisRequest.href, thisRequest.media );
280
+ parsedSheets[ thisRequest.href ] = true;
281
+
282
+ // by wrapping recursive function call in setTimeout
283
+ // we prevent "Stack overflow" error in IE7
284
+ w.setTimeout(function(){ makeRequests(); },0);
285
+ } );
286
+ }
287
+ },
288
+
289
+ //loop stylesheets, send text content to translate
290
+ ripCSS = function(){
291
+
292
+ for( var i = 0; i < links.length; i++ ){
293
+ var sheet = links[ i ],
294
+ href = sheet.href,
295
+ media = sheet.media,
296
+ isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet";
297
+
298
+ //only links plz and prevent re-parsing
299
+ if( !!href && isCSS && !parsedSheets[ href ] ){
300
+ // selectivizr exposes css through the rawCssText expando
301
+ if (sheet.styleSheet && sheet.styleSheet.rawCssText) {
302
+ translate( sheet.styleSheet.rawCssText, href, media );
303
+ parsedSheets[ href ] = true;
304
+ } else {
305
+ if( (!/^([a-zA-Z:]*\/\/)/.test( href ) && !base) ||
306
+ href.replace( RegExp.$1, "" ).split( "/" )[0] === w.location.host ){
307
+ // IE7 doesn't handle urls that start with '//' for ajax request
308
+ // manually add in the protocol
309
+ if ( href.substring(0,2) === "//" ) { href = w.location.protocol + href; }
310
+ requestQueue.push( {
311
+ href: href,
312
+ media: media
313
+ } );
314
+ }
315
+ }
316
+ }
317
+ }
318
+ makeRequests();
319
+ };
320
+
321
+ //translate CSS
322
+ ripCSS();
323
+
324
+ //expose update for re-running respond later on
325
+ respond.update = ripCSS;
326
+
327
+ //expose getEmValue
328
+ respond.getEmValue = getEmValue;
329
+
330
+ //adjust on resize
331
+ function callMedia(){
332
+ applyMedia( true );
333
+ }
334
+
335
+ if( w.addEventListener ){
336
+ w.addEventListener( "resize", callMedia, false );
337
+ }
338
+ else if( w.attachEvent ){
339
+ w.attachEvent( "onresize", callMedia );
340
+ }
341
+ })(this);