OSDN Git Service

Version 0.6.41, fix for Opera8 & NN7.2+.
[pettanr/clientJs.git] / 0.6.x / js / bootstrap.js
1 /*\r
2  * + checkActiveX\r
3  * + fetch core lib   x_ie6.js || x._gecko36.js\r
4  * + ResponsiveImage\r
5  */\r
6 \r
7 var options = {\r
8         outputID : 'bootstrap-output',\r
9         \r
10         responsiveCSS : [\r
11         ]\r
12 };\r
13 \r
14 ;(function( window, document, options, undefined ){\r
15 \r
16 var emptyFunction = new Function();\r
17 \r
18 // この script は head の中に書かれているか?\r
19 var inHead = (function(){\r
20         var ss     = document.getElementsByTagName ? document.getElementsByTagName( 'script' ) :\r
21                                         document.all ? document.all.tags( 'script' ) : null,\r
22                 self   = ss ? ss[ ss.length - 1 ] : null,\r
23                 parent = self ? ( self.parentNode || self.parentElement ) : null;\r
24         if( parent && parent.tagName.toUpperCase() === 'HEAD' ) return true;\r
25         return false;\r
26 })();\r
27 \r
28 // body にアクセス可能にする\r
29 var body = document.body;\r
30 if( !body ){\r
31         document.write('<body>');\r
32         body = document.body;\r
33 };\r
34 \r
35 \r
36 var UA = (function(){\r
37         var acme = {};\r
38         var n    = navigator;\r
39         var dua  = n.userAgent;\r
40         var dav  = n.appVersion;\r
41         var tv   = parseFloat(dav);\r
42         acme.isOpera  = (dua.indexOf("Opera") >= 0) ? tv: undefined;\r
43         acme.isKhtml  = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;\r
44         acme.isWebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
45         acme.isChrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
46         acme.isGecko  = (dua.indexOf("Gecko\/") >= 0) ? parseFloat(dua.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, '$1$2' )) : undefined;\r
47         var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
48         if(index && !acme.isChrome){\r
49                 acme.isSafari = parseFloat(dav.split("Version/")[1]);\r
50                 if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){\r
51                         acme.isSafari = 2;\r
52                 };\r
53         };\r
54         if(document.all && !acme.isOpera){\r
55                 acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;\r
56         };\r
57         \r
58         return acme;\r
59 })();\r
60 \r
61 \r
62 // load CoreLib\r
63 (function(){\r
64         var test = new Function( 'return !!( window.X && X.$ )' ),\r
65                 libs = [\r
66                         'js/builtin.js',\r
67                         'js/xua.js',\r
68                         'js/xtype.js',\r
69                         'js/xcallback.js',\r
70                         'js/xtimer.js',\r
71                         'js/xviewport.js',\r
72                         'js/xdom.js',\r
73                         'js/xdomevent.js',\r
74                         'js/xquery.js'\r
75                 ],\r
76                 src, script,\r
77                 root = inHead ?\r
78                         ( document.getElementsByTagName ? document.getElementsByTagName('head')[0] :\r
79                         document.all ? document.all.tags( 'HEAD' )[0] : document.head )\r
80                         : document.body,\r
81                 timerID = window.setInterval( function(){\r
82                                 if( test() === true ){\r
83                                         window.clearInterval( timerID );\r
84                                         onLibReady();\r
85                                         test = onLibReady = null;\r
86                                 };\r
87                         }, 0 );\r
88         \r
89         while( libs.length ){\r
90                 src = libs.shift();\r
91                 if( document.getElementById ){\r
92                         script = document.createElement( 'script' );\r
93                         root.appendChild( script );\r
94                         script.src = src;\r
95                 } else\r
96                 if( document.all ){\r
97                         root.insertAdjacentHTML( 'BeforeEnd', '<script src="' + src + '">' );\r
98                 };\r
99         };\r
100         libs = src = script = null;\r
101         \r
102         \r
103         var onLibReady = function(){\r
104                 X.Dom.Event.add( window, 'load', ResponsiveImage.onPageLoad );\r
105                 //();\r
106         };      \r
107 })();\r
108 \r
109 \r
110 /*\r
111  * http://code.google.com/p/css3-mediaqueries-js/source/browse/trunk/css3-mediaqueries_src.js\r
112  */\r
113 var nativeSupport = function () {\r
114     // check support for media queries\r
115     var id = 'css3-mediaqueries-test';\r
116     var el = document.createElement('div');\r
117     el.id = id;\r
118     var style = cssHelper.addStyle('@media all and (width) { #' + id + ' { width: 1px !important; } }', false);\r
119     // false means don't parse this temp style\r
120     body.appendChild(el);\r
121     var ret = el.offsetWidth === 1;\r
122     style.parentNode.removeChild(style);\r
123     el.parentNode.removeChild(el);\r
124     nativeSupport = new Function('return ' + ret);\r
125     return ret;\r
126 };\r
127 \r
128 \r
129 \r
130 \r
131 var ResponsiveImage = {\r
132         images  : [],\r
133         attrs   : [],\r
134         timerID : -1,\r
135         _onload : false,\r
136         detect : function(){\r
137                 var regW   = /.*width=['"]?([0-9]+)['"]?.*/,\r
138                         regH   = /.*height=['"]?([0-9]+)['"]?.*/,\r
139                         images = document.images,\r
140                         saved  = ResponsiveImage.images,\r
141                         attrs  = ResponsiveImage.attrs,\r
142                         i      = 0,\r
143                         l      = images.length,\r
144                         img, w, h, html;\r
145                 for( ; i < l; ++i ){\r
146                         img = images[ i ];\r
147                         if( saved.indexOf( img ) === -1 ){\r
148                                 html = img.outerHTML; // for IE8\r
149                                 w    = html ? html.replace( regW, '$1' ) : img.getAttribute( 'width' );\r
150                                 h    = html ? html.replace( regH, '$1' ) : img.getAttribute( 'height' );\r
151                                 if( !isFinite( w ) || !isFinite( h ) || !isFinite( w / h ) ){\r
152                                         continue;\r
153                                 };\r
154                                 saved[ saved.length ] = img;\r
155                                 attrs[ saved.length - 1 ] = {\r
156                                         src    : img.src, // get Absolute\r
157                                         lowsrc : img.lowsrc,\r
158                                         getSrc : ResponsiveImage._getResponsiveSrc,\r
159                                         width  : w,\r
160                                         height : h,\r
161                                         ratio  : h / w\r
162                                 };\r
163                                 img.src = img.lowsrc = '';\r
164                         };\r
165                 };\r
166                 if( ResponsiveImage._onload === true ){\r
167                         window.clearInterval( ResponsiveImage.timerID );\r
168                         delete ResponsiveImage.timerID;\r
169                         delete ResponsiveImage.detect;\r
170                         delete ResponsiveImage._onload;\r
171                         \r
172                         ResponsiveImage.onResize();\r
173                         X.Dom.add( ResponsiveImage.onResize );\r
174                 };\r
175         },\r
176         start : function(){\r
177                 ResponsiveImage.timerID = window.setInterval( ResponsiveImage.detect, 0 );\r
178                 delete ResponsiveImage.start;\r
179         },\r
180         onPageLoad : function(){\r
181                 ResponsiveImage._onload = true;\r
182                 delete ResponsiveImage.onPageLoad;\r
183         },\r
184         onResize : function( e ){\r
185                 var saved = ResponsiveImage.images,\r
186                         attrs = ResponsiveImage.attrs,\r
187                         id    = 'img-area-size',\r
188                         i     = 0,\r
189                         l     = saved.length,\r
190                         $, img, attr, div, w;\r
191                 for( ; i < l; ++i ){\r
192                         img  = saved[ i ];\r
193                         attr = attrs[ i ];\r
194                         X.$( img ).before( '<div id="' + id + '"></div>' );\r
195                         div = X.Dom.getElementById( id );\r
196                         w   = div.offsetWidth;\r
197                         if( attr.width < w ) w = attr.width;\r
198                         img.style.width  = w + 'px';\r
199                         img.style.height = attr.ratio * w + 'px';\r
200                         img.src = attr.getSrc( attr.src, w );\r
201                         X.$( div ).remove();\r
202                 };\r
203         },\r
204         _getResponsiveSrc : function( src, width ){\r
205                 var attr = this,\r
206                         src  = attr.src,\r
207                         url  = document.location.href;\r
208                 if( ( url.indexOf( 'file:' ) === 0 || url.indexOf( '://localhost' ) ) && src.indexOf( 'http' ) !== 0 ){\r
209                         attr.getSrc = ResponsiveImage._getSrcLocal;\r
210                 } else\r
211                 if( src.indexOf( 'bp.bp.blogspot.com/' ) ){\r
212                         attr.getSrc = ResponsiveImage._getSrcBlogger;\r
213                 } else\r
214                 if( src.indexOf( '.googleusercontent.com/' ) ){\r
215                         attr.getSrc = ResponsiveImage._getSrcPicasa;\r
216                 } else {\r
217                         attr.getSrc = ResponsiveImage._getSrcSenchaIO;\r
218                 };\r
219                 return attr.getSrc( src, width );\r
220         },\r
221         _getSrcLocal : function( src, width ){\r
222                 return src;\r
223         },\r
224         _getSrcBlogger : function( src, width ){\r
225                 return src;\r
226         },\r
227         _getSrcPicasa : function( src, width ){\r
228                 return src;\r
229         },\r
230         _getSrcFlicker : function( src, width ){\r
231                 return src;\r
232         },\r
233         _getSrcSenchaIO : function( src, width ){\r
234                 return src;\r
235         }\r
236 };\r
237 ResponsiveImage.start();\r
238 \r
239 \r
240 \r
241 var BICFixed = false;\r
242 // bonus: hotfix for IE6 SP1 (bug KB823727)\r
243 try {\r
244         document.execCommand("BackgroundImageCache", false, true);\r
245         BICFixed = true;\r
246 }catch(e){};\r
247 \r
248 })( window, document, options );