OSDN Git Service

client is version0.4.35, added pettanr.comicReader.
[pettanr/pettanr.git] / public / assets / system.js
index 4d00da8..1b3ae38 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * pettanR system.js
- *   version 0.4.33
+ *   version 0.4.35
  *   
  * author:
  *   itozyun
@@ -118,7 +118,7 @@ pettanr.file = ( function(){
                        var _uid, _data, _access;
                        
                        if( typeof UIDorFILEorFILEDATA === 'number'){
-                               _data = FILEDATA_RESITER[ UIDorFILEorFILEDATA] || null;
+                               _data = FILEDATA_RESITER[ UIDorFILEorFILEDATA ] || null;
                        } else
                        if( UIDorFILEorFILEDATA instanceof FileClass){
                                _uid = UIDorFILEorFILEDATA.getUID();
@@ -146,7 +146,7 @@ pettanr.file = ( function(){
                        var _data = FILE_CONTROLER.getFileData( _file);
                        return _data !== null && _data.driver ? _data.driver : FileDriverBase;
                },
-               getUpdateFlag: function( _file, _bit){
+               getUpdateFlag: function( _file, _bit ){
                        var _driver = FILE_CONTROLER.getDriver( _file ),
                                _policy;
                        if( typeof _driver.getUpdatePolicy === 'function'){
@@ -174,10 +174,10 @@ pettanr.file = ( function(){
                removeEventListener: function( FILEorNULL, _eventType, _callback ){
                        var _uid = FILEorNULL instanceof FileClass ? FILEorNULL.getUID() : FILEorNULL,
                                _ticket;
-                       for(var i=0, l = EVENT_LISTENER_REGISTER.length; i<l; ++i){
-                               _ticket = EVENT_LISTENER_REGISTER[i];
-                               if( _ticket.fileUID === _uid && _ticket.eventType === _eventType && _ticket.callBack === _callback){
-                                       EVENT_LISTENER_REGISTER.splice( i, 1);
+                       for(var i=0, l = EVENT_LISTENER_REGISTER.length; i<l; ++i ){
+                               _ticket = EVENT_LISTENER_REGISTER[ i ];
+                               if( _ticket.fileUID === _uid && _ticket.eventType === _eventType && _ticket.callBack === _callback ){
+                                       EVENT_LISTENER_REGISTER.splice( i, 1 );
                                        _ticket.destroy();
                                }
                        }
@@ -333,13 +333,17 @@ pettanr.file = ( function(){
                }
        };
 
-       var FileEventTicketClass = function( UID, _eventType, _callback){
-               this.fileUID = UID;
+       var FileEventTicketClass = function( _uid, _eventType, _callback ){
+               this.fileUID   = _uid;
                this.eventType = _eventType;
-               this.callBack = _callback;
-               this.destroy = function(){
-                       this.callBack = _callback = null;
-               }
+               this.callBack  = _callback;
+               this.destroy   = function(){
+                       delete this.fileUID;
+                       delete this.eventType;
+                       delete this.destroy;
+                       delete this.callBack;
+               }
+               _uid = _eventType = _callback = undefined;
        }
        
        var FileEventClass = function( eventType, file, key, value){
@@ -467,11 +471,12 @@ pettanr.file = ( function(){
                },
                read: function(){
                        // simpleDeepCopy
-                       var driver = FILE_CONTROLER.getDriver( this );
+                       var driver = FILE_CONTROLER.getDriver( this ),
+                               data;
                        if( typeof driver.read === 'function'){
-                               return driver.read( this );
+                                data = driver.read( this );
                        }
-                       return FileDriverBase.read( this );
+                       return data || FileDriverBase.read( this );
                },
                write: function( _newData, _onUpdateFunction ){
                        var driver = FILE_CONTROLER.getDriver( this );
@@ -626,10 +631,15 @@ pettanr.file = ( function(){
                        // debug用 全てのメニューを許可
                        return pettanr.file.FILE_UPDATE_POLICY.DSRWC;
                },
-               read: function( _file ){
-                       var data = FILE_CONTROLER.getFileData( _file ),
-                               protects = pettanr.file.FILE_DATA_PROPERTY_RESERVED;
-                       
+               read: function( _FILEorDATA ){
+                       var data,
+                               protects = pettanr.file.FILE_DATA_PROPERTY_RESERVED;                    
+                       if( _FILEorDATA instanceof FileClass ){
+                               data = FILE_CONTROLER.getFileData( _FILEorDATA )
+                       } else {
+                               data = _FILEorDATA;
+                       }
+
                        function clone( src ) {
                                var ret;
                                if( Type.isArray(src) === true ){
@@ -924,13 +934,13 @@ pettanr.finder = ( function(){
        }
        var BreadcrumbClass = function(){
                var elmContainer,
-                       ELM_WRAPPER = ELM_ORIGIN_FINDER_LOCATION_ITEM.cloneNode( true),
+                       ELM_WRAPPER = ELM_ORIGIN_FINDER_LOCATION_ITEM.cloneNode( true ),
                        ELM_FILENAME = ELM_WRAPPER.getElementsByTagName( 'a')[0],
                        file, w, index, instansce,
                        callback;
                ELM_WRAPPER.onclick = onClick;
                function draw(){
-                       ELM_FILENAME.className = 'file-icon-' +file.getType();
+                       ELM_FILENAME.className = 'file-icon-' + file.getType();
                        ELM_FILENAME.innerHTML = file.getName();
                }
                function resize( index){
@@ -1222,7 +1232,7 @@ pettanr.driver = ( function(){
                                return { className: 'file-type-broken'};
                        },
                        getSummary: function( _file ){
-                               var _data = FileAPI.getFileData( _file),
+                               var _data = FileAPI.getFileData( _file ),
                                        _type = _data !== null ? _data.type : null;
                                if( _type === pettanr.driver.FILE_TYPE.PICTURE){
                                        return [ _data.width, 'x', _data.height, ', filesize:', _data.filesize, ', lisence:', _data.license ].join( '' );
@@ -1247,6 +1257,29 @@ pettanr.driver = ( function(){
                                }
                                return 'pettanR unknown file';
                        },
+                       read: function( _file ){
+                               var _data = FileAPI.getFileData( _file ),
+                                       _type = _data !== null ? _data.type : null,
+                                       ret;
+                               if( _type === pettanr.driver.FILE_TYPE.COMIC ){
+                                       // children を panels に deepcopy
+                                       ret = {};
+                                       for( var key in _data ){
+                                               ret[ key ] = _data[ key ]
+                                       }
+                                       ret.panels = _data.children;
+                                       return ret;
+                               }
+                               if( _type === pettanr.driver.FILE_TYPE.PANEL ){
+                               }
+                               if( _type === pettanr.driver.FILE_TYPE.PANEL_PICTURE ){
+                                       
+                               }
+                               if( _type === pettanr.driver.FILE_TYPE.BALLOON ){
+                               }
+                               if( _type === pettanr.driver.FILE_TYPE.PICTURE ){
+                               }
+                       },
                        write: function( _file, _newData, _onUpdateFunction ){
                                var _data = FileAPI.getFileData( _file ),
                                        _type = _data !== null ? _data.type : null;
@@ -1265,7 +1298,12 @@ pettanr.driver = ( function(){
                        viewerApplicationList: function( _file ){
                                var _data = FileAPI.getFileData( _file ),
                                        _type = _data !== null ? _data.type : null;
-                                       
+                               if( _type === pettanr.driver.FILE_TYPE.PANEL ){
+                                       return [ pettanr.reader ];
+                               }
+                               if( _type === pettanr.driver.FILE_TYPE.COMIC ){
+                                       return [ pettanr.reader ];
+                               }       
                                if( _data === FILE_DATA_MY_PICTURES_ROOT ){
                                        return [ pettanr.premiumSatge ];
                                }
@@ -1923,7 +1961,7 @@ pettanr.premiumSatge = pettanr.view.registerApplication( function(){
                // よくない! 一時的な処理,,,
                //var tree = pettanr.driver.createPictureTree();
                //tree.addTreeEventListener( pettanr.file.TREE_EVENT.UPDATE, drawIcons );
-               
+               // pettanr.file.FILE_EVENT.GET_SEQENTIAL_FILES
                delete instance.init;
        }
        this.onOpen = function( _windowW, _windowH, _ARTISTIDorFILE, _onUpdateFunction ){
@@ -2096,6 +2134,140 @@ pettanr.textEditor = pettanr.view.registerApplication( function(){
        }
 });
 
+
+pettanr.reader = pettanr.view.registerApplication( function(){
+       var jqWrap, jqPanelContainer,
+               windowW, windowH,
+               headerH       = pettanr.util.getElementSize( document.getElementById( 'comic-reader-header' ) ).height,
+               consoleH      = pettanr.util.getElementSize( document.getElementById( 'comic-reader-console' ) ).height,
+               panelMargin,
+               elmContainer  = document.getElementById( 'comic-reader-panel-container' ),
+               elmTitle      = document.getElementById( 'comic-reader-title' ).firstChild,
+               elmAuthor     = document.getElementById( 'comic-reader-author' ).firstChild,
+               elmBackButton = document.getElementById( 'comic-reader-back-button' ),
+               elmNextButton = document.getElementById( 'comic-reader-forward-button' ),
+               ID            = 'comicReader',
+               bindWorker    = null,
+               currentFile   = null;
+               comicData     = null,
+               currentPanel  = null,
+               currentIndex  = 0,
+               numPanel      = 0,
+               instance      = this;
+
+       function onBackClick(){
+               currentIndex -= ( currentIndex > 0 ? 1 : 0 );
+               slide();
+               return false;
+       }
+       function onNextClick(){
+               currentIndex += ( currentIndex < numPanel - 1 ? 1 : 0 );
+               slide();
+               return false;
+       }
+       function slide(){
+               var elm    = elmContainer.childNodes[ currentIndex ],
+                       h      = windowH - headerH - consoleH,
+                       top    = headerH;
+               if( elm ){
+                       top =  headerH - elm.offsetTop + Math.floor( ( h - elm.offsetHeight ) / 2 );
+               }
+               
+               jqPanelContainer.stop().animate( {
+                       top:    top
+               });
+       }
+       function getCurrentTopPosition(){
+
+       }
+       function draw(){
+               var fileData, title, author;
+               
+               if( pettanr.driver.isPettanrFileInstance( currentFile ) === true ){
+                       if( currentFile.getType() === pettanr.driver.FILE_TYPE.COMIC ){
+                               fileData    = currentFile.read();
+                               title       = fileData.title;
+                               author      = fileData.author.name;
+                               comicData   = fileData;
+                               numPanel    = currentFile.getChildFileLength();
+                       } else
+                       if( currentFile.getType() === pettanr.driver.FILE_TYPE.PANEL ){
+                               fileData    = currentFile.read();
+                               title       = fileData.comic.title;
+                               author      = fileData.comic.author.name;
+                               comicData   = fileData;
+                               numPanel    = 1;
+                       }
+               } else {
+                       
+               }
+
+               if( comicData !== null ){
+                       elmTitle.data  = title;
+                       elmAuthor.data = author;
+                       bindWorker.json( comicData );
+                       window.setTimeout( asyncResize, 0 );
+               }
+       }
+       function asyncResize(){
+               instance.onPaneResize( windowW, windowH );
+       }
+       
+       /* grobal method */
+       // this.rootElement = elmWrap;
+       this.displayName = ID;
+       this.ID          = ID;
+       this.rootElement = document.getElementById( 'comic-reader-wrapper' );
+       this.MIN_WIDTH   = 320;
+       this.MIN_HEIGHT  = 320;
+       this.init = function(){
+               jqWrap           = $( instance.rootElement );
+               jqPanelContainer = $( elmContainer );
+               
+               elmBackButton.onclick = onBackClick;
+               elmNextButton.onclick = onNextClick;
+               
+               bindWorker = pettanr.bind.createBindWorker( elmContainer, null, false, false );
+               
+               delete instance.init;
+       }
+       this.onOpen = function( _w, _h, _file ){
+               instance.init && instance.init();
+               numPanel = currentIndex = 0;
+               
+               jqWrap.show();
+               jqPanelContainer.css({
+                       left:   _w / 2,
+                       top:    _h
+               });
+               windowW = _w;
+               windowH = _h;
+               if( pettanr.file.isFileInstance( _file ) === true ){
+                       currentFile = _file;
+                       _file.addEventListener( pettanr.file.FILE_EVENT.GET_SEQENTIAL_FILES, draw );
+                       draw();
+               }
+       }
+       this.onPaneResize = function( _windowW, _windowH ){
+               windowW = _windowW;
+               windowH = _windowH;
+               var panelH = elmContainer.offsetHeight,
+                       panelW = elmContainer.offsetWidth,
+                       h      = _windowH - headerH - consoleH;
+               jqPanelContainer.stop().animate(
+                       {
+                               left:   Math.floor( ( _windowW - panelW ) / 2 ),
+                               top:    headerH + ( panelH < h ? Math.floor( ( h - panelH ) / 2 ) : 0 )
+                       }
+               );
+       }
+       this.onClose = function(){
+               jqWrap.hide();
+               currentFile.addEventListener( pettanr.file.FILE_EVENT.GET_SEQENTIAL_FILES, draw );
+               currentFile = comicData = currentPanel = null;
+       }
+});
+
 // i18n
 // login
 // lib