OSDN Git Service

version0.5.3, add fetchCSS().
authoritozyun <itozyun@gmail.com>
Fri, 3 Aug 2012 14:03:39 +0000 (23:03 +0900)
committeritozyun <itozyun@gmail.com>
Fri, 3 Aug 2012 14:03:39 +0000 (23:03 +0900)
0.5.x/javascripts/peta.apps.js
0.5.x/javascripts/system.js

index a4d6ca1..3e1468a 100644 (file)
@@ -477,7 +477,11 @@ var Cabinet = gOS.registerApplication( function(){
                self.rootElement.id = 'cabinet-root';
                self.rootElement.innerHTML = '<div id="cabinet-container" class="finder-container"></div>';
                
+               self.fetchCSS( 'stylesheets/peta.apps.css' );
+               
                tree   = FileAPI.createTree( FILE_DATA_SERVICE_ROOT );
+               
+               delete self.onInit;
        };
        this.onOpen = function( _w, _h ){
                finder = self.createFinder( self.rootElement, tree );
@@ -505,6 +509,8 @@ var Gallery = gOS.registerApplication( function(){
                self.rootElement.id        = 'gallery-root';
                self.rootElement.innerHTML = '<div id="gallery-container" class="finder-container"></div>';
                
+               self.fetchCSS( 'stylesheets/peta.apps.css' );
+               
                tree = FileAPI.createTree( FILE_DATA_PICTURE_ROOT );
                var     _root  = tree.getRootFile(),
                        _myPic = _root.getChildFileByIndex( 0 ),
@@ -512,7 +518,7 @@ var Gallery = gOS.registerApplication( function(){
                _myPic.getSeqentialFiles();
                _pic.getSeqentialFiles();
                _myPic.destroy();
-               _pic.destroy();         
+               _pic.destroy();
        };
        this.onOpen = function( _w, _h ){
                finder = self.createFinder( self.rootElement, tree );
@@ -752,7 +758,9 @@ var PremiumSatge = gOS.registerApplication( function(){
                                '<div id="image-group-name">NO DATA...</div>',
                                '<div id="image-group-button" class="button">close</div>'
                        ].join( '' );
-
+                       
+                       self.fetchCSS( 'stylesheets/peta.apps.css' );
+                       
                        tree      = FileAPI.createTree( FILE_DATA_ARTIST_ROOT );
                        rootFile  = tree.getRootFile();
        };
@@ -1044,7 +1052,10 @@ var Reader = gOS.registerApplication( function(){
                                        '<a href="#" id="comic-reader-forward-button">▼</a>',
                                '</div>',
                        '</div>'
-               ].join( '' );           
+               ].join( '' );
+               
+               self.fetchCSS( 'stylesheets/peta.apps.css' );
+               
        };
        this.onOpen = function( _w, _h, _file ){
                headerH       = Util.getElementSize( document.getElementById( 'comic-reader-header' ) ).height;
@@ -3940,6 +3951,8 @@ var Editor = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
                
+               app.fetchCSS( 'stylesheets/peta.apps.css' );
+               
                delete app.onInit;
        };
        this.onOpen = function( _w, _h, _file ){
@@ -4244,6 +4257,8 @@ var ComicConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
                
+               instance.fetchCSS( 'stylesheets/peta.apps.css' );
+               
                delete instance.onInit;
        };
        this.onOpen = function( w, h ){
@@ -4401,6 +4416,8 @@ var UploadConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
                
+               instance.fetchCSS( 'stylesheets/peta.apps.css' );
+               
                delete instance.onInit;
        }
        this.onOpen = function( w, h ){
@@ -4540,6 +4557,8 @@ var PanelConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
 
+               instance.fetchCSS( 'stylesheets/peta.apps.css' );
+
                delete instance.onInit;
        }
        this.onOpen = function( w, h ){
@@ -4678,7 +4697,9 @@ var ArtistConsole = gOS.registerApplication( function(){
                                '<div id="artist-console-progress" class="console-progress">&nbsp;</div>',
                        '</div>'
                ].join( '' );
-
+               
+               instance.fetchCSS( 'stylesheets/peta.apps.css' );
+               
                delete instance.onInit;
        };
        this.onOpen = function( w, h ){
@@ -4995,6 +5016,8 @@ var OutputConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
 
+               instance.fetchCSS( 'stylesheets/peta.apps.css' );
+
                delete instance.onInit;
        };
        this.onOpen = function( _w, _h, _comicID, _panelID, _panelTimming, _panelW, _panelH, _borderSize, _panelElementArray ){
index 565ed31..01de22a 100644 (file)
@@ -1638,19 +1638,24 @@ var AbstractBasicPane = function(){
 }\r
 \r
 var AbstractApplication = function( displayName, appClass, isOverlay ){\r
-       var self         = null, // init で設定\r
-               uiList       = [],\r
-               finderList   = [];\r
+       var self          = null, // init で設定\r
+               uiList        = [],\r
+               finderList    = [],\r
+               fetchResource = false,\r
+               phase         = 0;\r
        this.rootElement = document.createElement( 'div' );\r
        this.bgColor     = '#C1CACF';\r
        this.getUID = function(){\r
                return Util.getIndex( API_USER_LIST, appClass );\r
        }\r
        this.init = function(){\r
-               self = this;\r
+               phase = 1;\r
+               self  = this;\r
                self.onInit();\r
+               phase = 2;\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
@@ -1661,6 +1666,7 @@ var AbstractApplication = function( displayName, appClass, isOverlay ){
                } else {\r
                        self.onOpen( _w, _h );\r
                }\r
+               phase = 4;\r
        };\r
        this.resize = function( _w, _h ){\r
                if( self.MIN_WIDTH > _w || self.MIN_HEIGHT > _h ){\r
@@ -1672,6 +1678,7 @@ var AbstractApplication = function( displayName, appClass, isOverlay ){
                self.onPaneResize( _w, _h );\r
        };\r
        this.close = function(){\r
+               phase = 5;\r
                if( self.onClose() === false ){\r
                        return false;\r
                };\r
@@ -1679,6 +1686,7 @@ var AbstractApplication = function( displayName, appClass, isOverlay ){
                KeyEvent.remove( self );\r
                SystemTimer.remove( self );\r
                AsyncCall.remove( self );\r
+               Css.unload( self );\r
                \r
                while( uiList.length > 0 ){\r
                        uiList.shift().destroy();\r
@@ -1693,6 +1701,8 @@ var AbstractApplication = function( displayName, appClass, isOverlay ){
                \r
                Application.shutdown( self, isOverlay );\r
                self = appClass = uiList = null;\r
+               \r
+               phase = 6;\r
        };\r
        this.createUIGroup = function(){\r
                var _ui = UI.createUIGroup( self );\r
@@ -1709,7 +1719,16 @@ var AbstractApplication = function( displayName, appClass, isOverlay ){
                _class.prototype = new AbstractBasicPane();\r
                return new _class( _options );\r
        };\r
-}\r
+       this.fetchCSS = function( _url, opt_onload, opt_onerror ){\r
+               if( phase === 1 ){\r
+                       Css.load( self, _url, fetchResourceComplete );\r
+               };\r
+       };\r
+       \r
+       function fetchResourceComplete(){\r
+               alert( phase );\r
+       };\r
+};\r
 \r
 AbstractApplication.prototype = new AbstractBasicPane();\r
 AbstractApplication.prototype.onInit = function(){\r
@@ -2841,6 +2860,110 @@ var KeyEvent = ( function(){
        }\r
 })();\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 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
+       };\r
+       FetchCssTicketClass.prototype = {\r
+               match: function( _apiuser, _url ){\r
+                       if( _apiuser  && Util.getIndex( this.apiusers, _apiuser ) === -1 ) return false;\r
+                       if( _url      && _url      !== this.url     ) return false;\r
+                       return true;\r
+               },\r
+               destroy: function( _apiuser, _url ){\r
+                       if( this.match( _apiuser, _url ) === false ) return false;\r
+                       \r
+                       var i = Util.getIndex( this.apiusers, _apiuser );\r
+                       \r
+                       this.apiusers.splice( i, 1 );\r
+                       this.onload.splice( i, 1 );\r
+                       this.onerror.splice( i, 1 );\r
+                       \r
+                       if( this.apiusers.length !== 0 ) return false;\r
+                       \r
+                       head.removeChild( this.elm );\r
+                       this.elm.onreadystatechange = new Function();\r
+                       this.elm.onload = null;\r
+                       \r
+                       delete this.apiusers;\r
+                       delete this.url;\r
+                       delete this.elm;\r
+                       delete this.onload;\r
+                       delete this.onerror;\r
+                       \r
+                       return true;\r
+               },\r
+               done: false\r
+       };\r
+       \r
+       function getTicket( elm ){\r
+               for( var i = TICKET_LIST.length, t; i; ){\r
+                       t = TICKET_LIST[ --i ];\r
+                       if( t.elm === elm ) return t;\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
+                       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
+               this.onreadystatechange = new Function();\r
+               this.onload = null;\r
+               };\r
+       };\r
+       \r
+       return {\r
+               load: function( _apiuser, _url, opt_onload, opt_onerror ){\r
+                       _url = Util.getAbsolutePath( _url );\r
+                       var t;\r
+                       for( var i=TICKET_LIST.length; i; ){\r
+                               t = TICKET_LIST[ --i ];\r
+                               if( t.match( null, _url ) === true ){\r
+                                       if( t.match( _apiuser, _url ) === false ){\r
+                                               t.apiusers.push( _apiuser );\r
+                                               t.onload.push( opt_onload );\r
+                                               t.onerror( opt_onerror );\r
+                                       };\r
+                                       return;\r
+                               };\r
+                       };\r
+                       var elm = doc.createElement( 'link' );\r
+                       head.appendChild( elm );\r
+                       elm.rel  = 'stylesheet';\r
+                       elm.type = 'text\/css';\r
+                       elm.onreadystatechange = elm.onload = detect;\r
+                       elm.href = _url;\r
+                       \r
+                       TICKET_LIST.push( new FetchCssTicketClass( _apiuser, _url, elm, opt_onload, opt_onerror ) );\r
+               },\r
+               unload: function( _apiuser, _url ){\r
+                       _url = _url ? Util.getAbsolutePath( _url ) : null;\r
+                       for( var i = 0; i < TICKET_LIST.length; ){\r
+                               t = TICKET_LIST[ i ];\r
+                               if( t.destroy( _apiuser, _url ) === true ){\r
+                                       TICKET_LIST.splice( i, 1 );\r
+                               } else {\r
+                                       ++i;\r
+                               }\r
+                       };\r
+               }\r
+       }\r
+})();\r
+\r
+\r
 /* ----------------------------------------\r
  * 
  */\r