var self = null, // init で設定\r
uiList = [],\r
finderList = [],\r
- fetchResource = false,\r
+ fetchResource = 0,\r
+ bootParams = null,\r
phase = 0;\r
this.rootElement = document.createElement( 'div' );\r
this.bgColor = '#C1CACF';\r
};\r
this.open = function( _w, _h /*, _option */ ){\r
phase = 3;\r
- if( self.MIN_WIDTH > _w || self.MIN_HEIGHT > _h ){\r
- if( Type.isHTMLElement( self.rootElement ) === true ){\r
- // 小さすぎる!、と表示\r
- }\r
- }\r
- if( arguments.length > 2 ){\r
- self.onOpen.apply( self, arguments );\r
+ bootParams = Util.copyArray( arguments );\r
+ \r
+ if( this.rootElement.innerHTML && this.rootElement.innerHTML.length > 0 ){\r
+ SystemTimer.add( self, detect, 16 );\r
} else {\r
- self.onOpen( _w, _h );\r
+ onOpen();\r
}\r
- phase = 4;\r
+ \r
+ function detect(){\r
+ if( self.rootElement.firstChild && fetchResource === 0 ){\r
+ SystemTimer.remove( self, detect );\r
+ onOpen();\r
+ };\r
+ };\r
+ \r
+ function onOpen(){\r
+ if( self.MIN_WIDTH > _w || self.MIN_HEIGHT > _h ){\r
+ if( Type.isHTMLElement( self.rootElement ) === true ){\r
+ // 小さすぎる!、と表示\r
+ }\r
+ }\r
+ if( bootParams.length > 2 ){\r
+ self.onOpen.apply( self, bootParams );\r
+ } else {\r
+ self.onOpen( _w, _h );\r
+ }\r
+ phase = 4; \r
+ };\r
};\r
this.resize = function( _w, _h ){\r
+ if( phase !== 4 ) return;\r
if( self.MIN_WIDTH > _w || self.MIN_HEIGHT > _h ){\r
if( Type.isHTMLElement( self.rootElement ) === true ){\r
// 小さすぎる!、と表示\r
};\r
this.fetchCSS = function( _url, opt_onload, opt_onerror ){\r
if( phase === 1 ){\r
- Css.load( self, _url, fetchResourceComplete );\r
+ ++fetchResource;\r
+ Css.load( self, _url, fetchResourceComplete, fetchResourceComplete );\r
};\r
};\r
\r
function fetchResourceComplete(){\r
- alert( phase );\r
+ --fetchResource;\r
};\r
};\r
\r
delete this.handler;\r
delete this.destroy;\r
};\r
- }\r
+ };\r
} else {\r
wrappedEventClass = function( e, element ){\r
this._event = e;\r
this.wheelDelta = e.wheelDelta;\r
\r
e = element = null;\r
- }\r
+ };\r
wrappedEventClass.prototype.stopPropagation = function(){\r
this._event.cancelBubble = true;\r
- }\r
+ };\r
wrappedEventClass.prototype.preventDefault = function(){\r
this._event.returnValue = false;\r
- }\r
+ };\r
\r
if( doc.attachEvent ){\r
wrappedHandlerClass = function( element, handler ){\r
this.element[ 'on' + this.eventType ] = function( e ){\r
return self.fire( self, e );\r
};\r
+ this.clean = function(){\r
+ self = null;\r
+ };\r
_ticket = null;\r
};\r
tmp.ticketClass.prototype = {\r
return true;\r
},\r
destroy: function(){\r
+ this.clean();\r
this.element[ 'on' + this.eventType ] = '';\r
tmp.list.splice( Util.getIndex( tmp.list, this ), 1 );\r
delete this.element;\r
delete this.eventType;\r
delete this.handlers;\r
+ delete this.clean;\r
}\r
};\r
};\r
if( doc.readyState && !!UA.WEBKIT ){\r
timer = window.setInterval( detect, 50 );\r
} else\r
- if( document.readyState && UA.isIE ){\r
+ if( document.readyState && UA.isIE && UA.ieVersion < 9 ){\r
document.write('<script type="text/javascript" defer="defer" id="ieDOMContentLoaded" src="' +\r
( ( window.location.protocol === 'https:' ) ? '://0' : 'javascript:void(0)' ) +\r
'"><\/script>');\r
}\r
})();\r
\r
+/**\r
+ * \r
+ * http://thudjs.tumblr.com/post/637855087/stylesheet-onload-or-lack-thereof
+ */\r
+\r
var Css = ( function(){\r
var head = doc.getElementsByTagName( 'head' )[ 0 ];\r
\r
var TICKET_LIST = [];\r
var STATE_LIST = 'loaded,complete,uninitialized'.split( ',' );\r
\r
+ var cssRules, sheet;\r
+ \r
var FetchCssTicketClass = function( _apiuser, _url, _elm, _onload, _onerror ){\r
this.apiusers = [ _apiuser ];\r
this.url = _url;\r
this.elm = _elm;\r
this.onload = [ _onload ];\r
this.onerror = [ _onerror ];\r
+ this.time = 0;\r
};\r
FetchCssTicketClass.prototype = {\r
match: function( _apiuser, _url ){\r
delete this.elm;\r
delete this.onload;\r
delete this.onerror;\r
+ delete this.time;\r
\r
return true;\r
},\r
+ loaded: function(){\r
+ for( var i = this.onload.length, f; i; ){\r
+ f = this.onload[ --i ];\r
+ Type.isFunction( f ) === true && AsyncCall.add( this.apiusers[ i ], f, this.url );\r
+ this.onload[ i ] = this.onerror[ i ] = null;\r
+ };\r
+ },\r
+ error: function(){\r
+ for( var i = this.onerror.length, c; i; ){\r
+ c = this.onerror[ --i ];\r
+ Type.isFunction( c ) === true && AsyncCall.add( t.apiusers[ i ], c, t.url );\r
+ this.onload[ i ] = this.onerror[ i ] = null;\r
+ };\r
+ },\r
+ check: function(){\r
+ var el = this.elm;\r
+ try {\r
+ return el[ sheet ] && el[ sheet ][ cssRules ].length > 0;\r
+ } catch( e ){\r
+ return false;\r
+ };\r
+ },\r
done: false\r
};\r
\r
\r
function detect(){\r
var t = getTicket( this ), rs = this.readyState, c;\r
- if( t && t.done === false && ( !rs || Util.getIndex( STATE_LIST, rs ) !== -1 ) ){\r
+ if( t && t.done === false && ( !rs || Util.getIndex( STATE_LIST, rs ) !== -1 ) ){\r
t.done = true;\r
- for( var i = t.onload.length; i; ){\r
- c = t.onload[ --i ];\r
- Type.isFunction( c ) === true && AsyncCall.add( t.apiusers[ i ], c, t.url );\r
- };\r
+ t.loaded();\r
this.onreadystatechange = new Function();\r
this.onload = null;\r
};\r
};\r
\r
+ function checkTimer(){\r
+ var l = TICKET_LIST.length,\r
+ n = 0;\r
+ for( var i = 0; i < l; ++i ){\r
+ t = TICKET_LIST[ i ];\r
+ ++t.time;\r
+ if( t.check() === true ){\r
+ t.loaded();\r
+ ++n;\r
+ } else\r
+ if( t.time > 99 ){\r
+ t.error();\r
+ } else {\r
+ \r
+ };\r
+ };\r
+ l === n && SystemTimer.remove( SUPER_USER_KEY, checkTimer );\r
+ };\r
+ \r
return {\r
load: function( _apiuser, _url, opt_onload, opt_onerror ){\r
_url = Util.getAbsolutePath( _url );\r
if( t.match( _apiuser, _url ) === false ){\r
t.apiusers.push( _apiuser );\r
t.onload.push( opt_onload );\r
- t.onerror( opt_onerror );\r
+ t.onerror.push( opt_onerror );\r
};\r
+ SystemTimer.add( SUPER_USER_KEY, checkTimer, 333 );\r
return;\r
};\r
};\r
elm.onreadystatechange = elm.onload = detect;\r
elm.href = _url;\r
\r
+ if( !sheet ){ // only assign these once\r
+ cssRules = 'cssRules';\r
+ sheet = 'sheet';\r
+ if ( !( sheet in elm ) ) { // MSIE uses non-standard property names\r
+ cssRules = 'rules';\r
+ sheet = 'styleSheet';\r
+ };\r
+ };\r
+ \r
TICKET_LIST.push( new FetchCssTicketClass( _apiuser, _url, elm, opt_onload, opt_onerror ) );\r
+ \r
+ SystemTimer.add( SUPER_USER_KEY, checkTimer, 333 );\r
},\r
unload: function( _apiuser, _url ){\r
_url = _url ? Util.getAbsolutePath( _url ) : null;\r
++i;\r
}\r
};\r
+ if( TICKET_LIST.length === 0 ){\r
+ SystemTimer.remove( SUPER_USER_KEY, checkTimer );\r
+ }\r
}\r
}\r
})();\r