OSDN Git Service

client is version0.4.16, update system.js
[pettanr/pettanr.git] / public / assets / system.js
index 731c435..d7d4ef5 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * pettanR system.js
- *   version 0.4.15
+ *   version 0.4.16
  *   
  * author:
  *   itozyun
@@ -169,58 +169,56 @@ pettanr.file = ( function(){
                                }
                        }
                },
-               fileEventRellay: function( _targetFile, _targetTree, _event){
-                       var _uid = _targetTree.getUID(),
-                               _access = TREE_ACCESS_ARRAY[ _uid ],
-                               _data = FILE_CONTROLER.getFileData( _targetFile ),
+               getTreeAccess: function(){
+                       
+               },
+               fileEventRellay: function( _uid, _event ){
+                       var _fileAccess = FILE_CONTROLER.getFileDataAccess( _uid );
+                       if( _fileAccess === null ) return;
+                       var _treeUID =  _fileAccess.TREE.getUID(),
+                               _treeAccess = TREE_ACCESS_ARRAY[ _treeUID ],
+                               _data = _fileAccess.DATA,
                                _tree;
-                       _access && _access.dispatchFileEvent( _event );
+                       if( !_treeAccess ) return;
+                       _treeAccess.dispatchFileEvent( _event );
                        for( var i=0, l = TREE_ARRAY.length; i<l; ++i){
-                               if( i !== _uid){
+                               if( i !== _treeUID ){
                                        _tree = TREE_ARRAY[ i ];
                                        if( FILE_CONTROLER.getFileData( _tree.getCurrentFile() ) === _data ){
-                                               _access = TREE_ACCESS_ARRAY[ _tree.getUID() ];
-                                               _access && _access.dispatchFileEvent( _event);
+                                               _treeAccess = TREE_ACCESS_ARRAY[ _tree.getUID() ];
+                                               _treeAccess && _treeAccess.dispatchFileEvent( _event );
                                        }
                                }
                        }
                }
        }
 
-       var TreeClass = function( ROOTFILE_DATA){
-               var UID = TREE_ACCESS_ARRAY.length,
-                       PARENT_FILE_RESITER = [],
+       var TreeClass = function( rootFileData ){
+               var PARENT_FILE_RESITER = [],
                        ACCESS = {
-                               dispatchFileEvent:      dispatchFileEvent,
-                               destroy:                        onDestroy
+                               dispatchFileEvent:      dispatchFileEvent
                        },
                        EVENT_LISTENER_ARRAY = [],
                        rootFile,
-                       rootFileData,
                        currentFile,
-                       currentFileData,
                        instance;
                        
-               TREE_ACCESS_ARRAY.push( ACCESS);
+               TREE_ACCESS_ARRAY.push( ACCESS );
                
-               function onDestroy(){
-                       
-               }
-               
-               function dispatchFileEvent( e){
+               function dispatchFileEvent( e ){
                        var _eventType = e.eventType,
                                _targetFile = e.targetFile,
                                _uid = _targetFile.getUID(),
                                _ticket, _type, _callback;
-                       for(var i=0, l = EVENT_LISTENER_REGISTER.length; i<l; ++i){
-                               _ticket = EVENT_LISTENER_REGISTER[i];
+                       for(var i=0, l = EVENT_LISTENER_REGISTER.length; i<l; ++i ){
+                               _ticket = EVENT_LISTENER_REGISTER[ i ];
                                _type = _ticket.eventType;
                                _callback = _ticket.callBack;
-                               if( _eventType === _type && _uid === _ticket.fileUID){
-                                       _callback( _eventType, _targetFile, e.key, e.value);
+                               if( _eventType === _type && _uid === _ticket.fileUID ){
+                                       _callback( _eventType, _targetFile, e.key, e.value );
                                } else
-                               if( _type === pettanr.file.TREE_EVENT.UPDATE && _eventType === pettanr.file.FILE_EVENT.GET_SEQENTIAL_FILES){
-                                       _callback( _eventType, _targetFile);
+                               if( _type === pettanr.file.TREE_EVENT.UPDATE && _eventType === pettanr.file.FILE_EVENT.GET_SEQENTIAL_FILES ){
+                                       _callback( _eventType, _targetFile );
                                }
                        }
                }
@@ -228,12 +226,14 @@ pettanr.file = ( function(){
                return {
                        init: function(){
                                instance = this;
-                               currentFile = rootFile = new FileClass( this, null, ROOTFILE_DATA);
+                               currentFile = rootFile = new FileClass( instance, null, rootFileData );
                                // rootFile.init();
                                currentFile.getSeqentialFiles();
                                delete this.init;
                        },
-                       getUID: function(){ return UID},
+                       getUID: function(){
+                               return pettanr.util.getIndex( TREE_ACCESS_ARRAY, ACCESS );
+                       },
                        getRootFile : function(){
                                return rootFile;
                        },
@@ -250,17 +250,23 @@ pettanr.file = ( function(){
                        },
                        down: function( _index){
                                if( typeof _index !== 'number' || _index < 0 || _index >= currentFile.getChildFileLength()) return;
-                               PARENT_FILE_RESITER.unshift( currentFile);
-                               currentFile = currentFile.getChildFileByIndex( _index);
+                               PARENT_FILE_RESITER.unshift( currentFile );
+                               currentFile = currentFile.getChildFileByIndex( _index );
                                currentFile.getSeqentialFiles();
                                return currentFile;
                        },
                        up: function( _index){
                                var l = PARENT_FILE_RESITER.length;
                                if( l === 0) return null;
+                               
+                               if( currentFile ){
+                                       var _currentFile = currentFile;
+                                       currentFile = null;
+                                       _currentFile.destroy();
+                               }
                                if( typeof _index === 'number'){
                                        if( _index >= l) return null;
-                                       currentFile = this.getParentFileAt( _index);
+                                       currentFile = this.getParentFileAt( _index );
                                        PARENT_FILE_RESITER.splice( 0, l -_index);
                                } else {
                                        currentFile = PARENT_FILE_RESITER.shift();
@@ -275,7 +281,16 @@ pettanr.file = ( function(){
                                FILE_CONTROLER.removeEventListener( null, _eventType, _callback);
                        },
                        destroy: function(){
-                               FILE_CONTROLER.destroyTree( UID);
+                               FILE_CONTROLER.destroyTree( instance.getUID() );
+                               // removeEvent
+                               var _currentFile = currentFile;
+                               currentFile = rootFile = rootFileData = null;
+                               _currentFile.destroy();
+                               while( PARENT_FILE_RESITER.length > 0 ){
+                                       _currentFile = PARENT_FILE_RESITER.shift();
+                                       _currentFile.destroy();
+                               }
+                               instance = null;
                        }
                }
        };
@@ -304,7 +319,7 @@ pettanr.file = ( function(){
  * 他の tree も data の共通する currentFile に対してのみは、file の変更イベントを受け取って流す.
  */
        
-       var FileClass = function( TREE, parentFile, data){
+       var FileClass = function( tree, parentFile, data ){
                var uid = pettanr.util.getIndex( FILEDATA_RESITER, data ),
                        instance = this;
                
@@ -315,51 +330,21 @@ pettanr.file = ( function(){
                
                FILEDATA_ACCESS.push(
                        {
+                               TREE:                           tree,
+                               parentFile:                     parentFile,
                                DATA:                           data,
-                               updateParent:           updateParent,
                                dispatchFileEvent:      dispatchEvent
                        }
                );
-
-               function updateParent( _parent){
-                       parentFile = _parent;
-               }
-               function dispatchEvent( e){
-                       FILE_CONTROLER.fileEventRellay( instance, TREE, e);
-               }
                
-               /* grobal Methods */
-
+               tree = parentFile = data = null;
+               
+               function dispatchEvent( e ){
+                       FILE_CONTROLER.fileEventRellay( uid, e );
+               }
                this.getUID = function(){
                        return uid;
                }
-               /*
-                * ファイル構造は TRON のような ハイパーリンク方式 だが、文脈上の 親ファイルが存在する.その親ファイルを使う操作は.prototype に置く事ができない.
-                * 同様に TREE を使う操作も .prototype に置く事ができない.
-                */
-               this.getChildFileByIndex = function( _index){
-                       var _children = FILE_CONTROLER.getChildren( instance );
-                       if( typeof _index !== 'number' || _index < 0 || typeof _children.length !== 'number' || _index >= _children.length) return null;
-                       var _file = new FileClass( TREE, this, _children[ _index]);
-                       // _file.init();
-                       return _file;
-               }
-               this.move = function( _newFolder, _newIndex, opt_callback){
-                       TREE.move( parentFile, UID, _newFolder, _newIndex, opt_callback);
-               }
-               this.replace = function( _newIndex, opt_callback){
-                       TREE.replace( parentFile, UID, _newIndex, opt_callback);
-               }
-               this.destroy = function(){
-                       var _access = FILE_CONTROLER.getFileDataAccess( instance );
-                               _index = getChildIndex( FILEDATA_ACCESS, _access );
-                       if( _index === -1 || _access === null) return;
-                       FILEDATA_ACCESS.splice( _index, 1);
-                       TREE = parentFile = data = null;
-                       delete _access.DATA;
-                       delete _access.updateParent;
-                       delete _access.dispatchFileEvent;
-               }
        };
        
        FileClass.prototype = {
@@ -423,33 +408,44 @@ pettanr.file = ( function(){
                        return FileDriverBase.getSummary( this);
                },
                isWritable: function(){
-                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.WRITE);
+                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.WRITE );
                },
                isSortable: function(){
-                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.SORT);
+                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.SORT );
                },              
                isCreatable: function(){
-                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.CREATE);
+                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.CREATE );
                },
                isRenamable: function(){
-                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.RENAME);
+                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.RENAME );
+               },
+               isDeletable: function(){
+                       return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.DELETE );
                },
                read: function(){
                        // simpleDeepCopy
-                       return false;
+                       var driver = FILE_CONTROLER.getDriver( this );
+                       if( typeof driver.read === 'function'){
+                               return driver.read( this );
+                       }
+                       return FileDriverBase.read( this );
                },
-               write: function( _newName, _newData){
-                       return false;
+               write: function( _newName, _newData ){
+                       var driver = FILE_CONTROLER.getDriver( this );
+                       if( typeof driver.write === 'function'){
+                               return driver.write( this, _newName, _newData );
+                       }
+                       return FileDriverBase.write( this, _newName, _newData );
                },
-               viwerApplicationList: function(){
+               viewerApplicationList: function(){
                        var driver = FILE_CONTROLER.getDriver( this );
-                       if( typeof driver.viwerApplicationList === 'function'){
-                               return driver.viwerApplicationList( this );
+                       if( typeof driver.viewerApplicationList === 'function'){
+                               return driver.viewerApplicationList( this );
                        }
-                       return FileDriverBase.viwerApplicationList( this );
+                       return FileDriverBase.viewerApplicationList( this );
                },
                editorApplicationList: function(){
-                       var driver = FILE_CONTROLER.editorApplicationList( this );
+                       var driver = FILE_CONTROLER.getDriver( this );
                        if( typeof driver.editorApplicationList === 'function'){
                                return driver.editorApplicationList( this );
                        }
@@ -466,6 +462,41 @@ pettanr.file = ( function(){
                },
                onDelete: function(){
                        
+               },
+               getChildFileByIndex: function( _index ){
+                       var _access = FILE_CONTROLER.getFileDataAccess( this ),
+                               _children = FILE_CONTROLER.getChildren( this );
+                       if( typeof _index !== 'number' || _index < 0 || Type.isArray( _children ) === false || _index >= _children.length) return null;
+                       var _file = new FileClass( _access.TREE, this, _children[ _index ]);
+                       // _file.init();
+                       return _file;
+               },
+               move: function( _newFolder, _newIndex, opt_callback ){
+                       var _access = FILE_CONTROLER.getFileDataAccess( this );
+                       _access.TREE.move( _access.parentFile, this.getUID(), _newFolder, _newIndex, opt_callback );
+               },
+               replace: function( _newIndex, opt_callback){
+                       var _access = FILE_CONTROLER.getFileDataAccess( this );
+                       _access.TREE.replace( _access.parentFile, this.getUID(), _newIndex, opt_callback);
+               },
+               destroy: function(){
+                       var _access = FILE_CONTROLER.getFileDataAccess( this );
+                       var TREE = _access.TREE;
+                       if( TREE.getCurrentFile() === this ) return;
+                       if( TREE.getRootFile() === this ) return;
+                       for( var i=0, l = TREE.hierarchy(); i<l; ++i ){
+                               if( TREE.getParentFileAt( i ) === this ){
+                                       return;
+                               }
+                       }
+                       var _index = pettanr.util.getIndex( FILEDATA_ACCESS, _access );
+                       if( _index === -1 || _access === null ) return;
+                       // event の 削除
+                       FILEDATA_ACCESS.splice( _index, 1 );
+                       delete _access.DATA;
+                       delete _access.TREE;
+                       delete _access.parentFile;
+                       delete _access.dispatchFileEvent;
                }
        }
 
@@ -535,17 +566,21 @@ pettanr.file = ( function(){
                        }
                        return '';
                },
-               getUpdatePolicy: function( _file){
+               getUpdatePolicy: function( _file ){
                        // debug用 全てのメニューを許可
-                       return pettanr.file.FILE_UPDATE_POLICY.SRWC;
+                       return pettanr.file.FILE_UPDATE_POLICY.DSRWC;
                },
-               read: function(){
+               read: function( _file ){
+                       var _data = FILE_CONTROLER.getFileData( _file ),
+                               _type = _data.type;
                        return false;
                },
-               write: function( _newName, _newData){
+               write: function( _file, _newName, _newData){
+                       var _data = FILE_CONTROLER.getFileData( _file ),
+                               _type = _data.type;
                        return false;
                },
-               viwerApplicationList: function(){
+               viewerApplicationList: function(){
                        return [];
                },
                editorApplicationList: function(){
@@ -632,26 +667,43 @@ pettanr.file = ( function(){
                        BROKEN:         4
                },
                FILE_UPDATE_POLICY: {
-                       ____:           parseInt( '0000', 2),
-                       ___C:           parseInt( '0001', 2), // hasCreateMenu
-                       __W_:           parseInt( '0010', 2), // isWritable
-                       __WC:           parseInt( '0011', 2), // isWritable
-                       _R__:           parseInt( '0000', 2), // isRenamable
-                       _R_C:           parseInt( '0101', 2), // hasCreateMenu
-                       _RW_:           parseInt( '0110', 2), // isWritable
-                       _RWC:           parseInt( '0111', 2), // isWritable
-                       S___:           parseInt( '1000', 2), // childrenIsSortable
-                       S__C:           parseInt( '1001', 2),
-                       S_W_:           parseInt( '1010', 2),
-                       S_WC:           parseInt( '1011', 2),
-                       SR__:           parseInt( '1000', 2),
-                       SR_C:           parseInt( '1101', 2),
-                       SRW_:           parseInt( '1110', 2),
-                       SRWC:           parseInt( '1111', 2),
+                       _____:          parseInt( '00000', 2),
+                       ____C:          parseInt( '00001', 2), // hasCreateMenu
+                       ___W_:          parseInt( '00010', 2), // isWritable
+                       ___WC:          parseInt( '00011', 2), // isWritable
+                       __R__:          parseInt( '00100', 2), // isRenamable
+                       __R_C:          parseInt( '00101', 2), // hasCreateMenu
+                       __RW_:          parseInt( '00110', 2), // isWritable
+                       __RWC:          parseInt( '00111', 2), // isWritable
+                       _S___:          parseInt( '01000', 2), // childrenIsSortable
+                       _S__C:          parseInt( '01001', 2),
+                       _S_W_:          parseInt( '01010', 2),
+                       _S_WC:          parseInt( '01011', 2),
+                       _SR__:          parseInt( '01100', 2),
+                       _SR_C:          parseInt( '01101', 2),
+                       _SRW_:          parseInt( '01110', 2),
+                       _SRWC:          parseInt( '01111', 2),
+                       D____:          parseInt( '10000', 2),
+                       D___C:          parseInt( '10001', 2), // hasCreateMenu
+                       D__W_:          parseInt( '10010', 2), // isWritable
+                       D__WC:          parseInt( '10011', 2), // isWritable
+                       D_R__:          parseInt( '10100', 2), // isRenamable
+                       D_R_C:          parseInt( '10101', 2), // hasCreateMenu
+                       D_RW_:          parseInt( '10110', 2), // isWritable
+                       D_RWC:          parseInt( '10111', 2), // isWritable
+                       DS___:          parseInt( '11000', 2), // childrenIsSortable
+                       DS__C:          parseInt( '11001', 2),
+                       DS_W_:          parseInt( '11010', 2),
+                       DS_WC:          parseInt( '11011', 2),
+                       DSR__:          parseInt( '11100', 2),
+                       DSR_C:          parseInt( '11101', 2),
+                       DSRW_:          parseInt( '11110', 2),
+                       DSRWC:          parseInt( '11111', 2),
                        CREATE:         1,
                        WRAITE:         2,
                        RENAME:         4,
-                       SORT:           8
+                       SORT:           8,
+                       DELETE:         16
                },
                TREE_EVENT: {
                        UPDATE:                         'onTreeUpdate'
@@ -682,24 +734,59 @@ pettanr.finder = ( function(){
                        ELM_THUMBNAIL = pettanr.util.getElementsByClassName( ELM_WRAPPER, ICON_CLASSNAME )[0],
                        ELM_FILENAME = pettanr.util.getElementsByClassName( ELM_WRAPPER, 'finder-icon-filename' )[0],
                        ELM_DESCRIPTION = pettanr.util.getElementsByClassName( ELM_WRAPPER, 'finder-icon-summary' )[0],
-                       file, w, index, style, instansce, callback;
+                       ELM_EDITOR_BUTTON = pettanr.util.getElementsByClassName( ELM_WRAPPER, 'finder-icon-console-editor-apps' )[0],
+                       ELM_VIEWER_BUTTON = pettanr.util.getElementsByClassName( ELM_WRAPPER, 'finder-icon-console-viewer-apps' )[0],
+                       ELM_ACTION_BUTTON = pettanr.util.getElementsByClassName( ELM_WRAPPER, 'finder-icon-console-action' )[0],
+                       file, w, index, style, instansce,
+                       onDownCallback, onEditorCallback, onViewerCallback, onActionCallback,
+                       viewerList, editorList;
+               ELM_WRAPPER.onmouseover = onOver;
+               function onOver(){
+                       ELM_WRAPPER.style.backgroundColor = '#eee';
+               }
+               ELM_WRAPPER.onmouseout = onOut;
+               function onOut(){
+                       ELM_WRAPPER.style.backgroundColor = '';
+               }
                
-               ELM_WRAPPER.onclick = onClick;
-               function onClick(){
-                       callback( index);
+               ELM_WRAPPER.onclick = onDownClick;
+               function onDownClick(){
+                       onDownCallback( index );
+               }
+               ELM_EDITOR_BUTTON.onclick = onEditorClick;
+               function onEditorClick(){
+                       onEditorCallback( index );
+               }
+               ELM_VIEWER_BUTTON.onclick = onViwerClick;
+               function onViwerClick(){
+                       onViewerCallback( index );
+               }
+               ELM_ACTION_BUTTON.onclick = onActionClick;
+               function onActionClick(){
+                       onActionCallback( index );
                }
-
                function draw(){
                        var _thumb = file.getThumbnail();
-                       if( _thumb.image){
+                       if( _thumb.image ){
                                ELM_THUMBNAIL.className = ICON_CLASSNAME + ' has-thumbnail';
                                ELM_THUMBNAIL.style.backgroundImage = [ 'url(', _thumb.image, ')'].join( '');
                        } else {
-                               ELM_THUMBNAIL.className = ICON_CLASSNAME + ' ' +_thumb.className;
+                               ELM_THUMBNAIL.className = ICON_CLASSNAME + ' ' + _thumb.className;
                                ELM_THUMBNAIL.style.backgroundImage = '';
                        }
-                       ELM_FILENAME.innerHTML = file.getName();
-                       ELM_DESCRIPTION.innerHTML = file.getSummary();
+                       ELM_FILENAME.firstChild.data = file.getName();
+                       ELM_DESCRIPTION.firstChild.data = file.getSummary();
+                       
+                       if( Type.isArray( viewerList ) === true && viewerList.length > 0 ){
+                               ELM_VIEWER_BUTTON.style.display = '';
+                       } else {
+                               ELM_VIEWER_BUTTON.style.display = 'none';
+                       };
+                       if( Type.isArray( editorList ) === true && editorList.length > 0 ){
+                               ELM_EDITOR_BUTTON.style.display = '';
+                       } else {
+                               ELM_EDITOR_BUTTON.style.display = 'none';
+                       };
                }
                function resize(){
                        ELM_WRAPPER.style.top = (index * ICON_HEIGHT) +'px';
@@ -711,21 +798,27 @@ pettanr.finder = ( function(){
                }
                
                return {
-                       init: function( _file, _elmContainer, _w, _index, _style, _callback){
+                       init: function( _file, _elmContainer, _w, _index, _style, _onDownCallback, _onEditorCallback, _onViewerCallback, _onActionCallback ){
                                instansce = this;
                                if( elmContainer !== _elmContainer){
                                        _elmContainer.appendChild( ELM_WRAPPER);
                                        elmContainer = _elmContainer;
                                }
                                if( file !== _file){
+                                       file && file.destroy();
                                        file = _file;
+                                       viewerList = file.viewerApplicationList();
+                                       editorList = file.editorApplicationList();
                                        draw();
                                }
                                if( index !== _index){
                                        index = _index;
                                        resize();
                                }
-                               callback = _callback;
+                               onDownCallback = _onDownCallback;
+                               onEditorCallback = _onEditorCallback;
+                               onViewerCallback = _onViewerCallback;
+                               onActionCallback = _onActionCallback;
                        },
                        elm: ELM_WRAPPER,
                        index: function( _index){
@@ -736,12 +829,13 @@ pettanr.finder = ( function(){
                                
                                return style;
                        },
-                       onResize: function( w){
+                       onResize: function( w ){
                                
                        },
                        destroy: function(){
                                elmContainer.removeChild( ELM_WRAPPER);
-                               file = elmContainer = null;
+                               file && file.destroy();
+                               file = elmContainer = onDownCallback = onEditorCallback = onViewerCallback = onActionCallback = viewerList = editorList = null;
                                FINDER_ICON_POOL.push( instansce);
                        }
                }
@@ -769,7 +863,7 @@ pettanr.finder = ( function(){
                }
 
                return {
-                       init: function( _file, _elmContainer, _index, _callback){
+                       init: function( _file, _elmContainer, _index, _callback ){
                                instansce = this;
                                if( elmContainer !== _elmContainer){
                                        _elmContainer.appendChild( ELM_WRAPPER);
@@ -796,7 +890,7 @@ pettanr.finder = ( function(){
                        destroy: function(){
                                elmContainer.removeChild( ELM_WRAPPER);
                                file = elmContainer = null;
-                               BREAD_OBJECT_POOL.push( this);
+                               BREAD_OBJECT_POOL.push( this );
                        }
                }
        }
@@ -804,9 +898,9 @@ pettanr.finder = ( function(){
        var FinderClass = function( ELM_CONTAINER, tree, header, footer ){
                var ICON_ARRAY = [],
                        BREAD_ARRAY = [],
-                       elmContainer = ELM_ORIGIN_CONTAINER.cloneNode( true),
-                       elmLocation = elmContainer.getElementsByTagName( 'ul')[0],
-                       nodesDiv = elmContainer.getElementsByTagName( 'div'),
+                       elmContainer = ELM_ORIGIN_CONTAINER.cloneNode( true ),
+                       elmLocation = elmContainer.getElementsByTagName( 'ul' )[0],
+                       nodesDiv = elmContainer.getElementsByTagName( 'div' ),
                        elmSidebarButton = nodesDiv[1],
                        elmStyleButton = nodesDiv[2],
                        elmActionButton = nodesDiv[3],
@@ -838,7 +932,7 @@ pettanr.finder = ( function(){
                                if( i < m){
                                        BREAD_ARRAY[ i].init( _file, elmLocation, i, onHeadClick);
                                } else {
-                                       BREAD_ARRAY.push( getBreadcrumb( _file, elmLocation, i, onHeadClick));
+                                       BREAD_ARRAY.push( getBreadcrumb( _file, elmLocation, i, onHeadClick ));
                                }
                        }
                        while( l < BREAD_ARRAY.length){
@@ -850,9 +944,9 @@ pettanr.finder = ( function(){
 
                        for( i=0; i<l; ++i){
                                if( i < m){
-                                       ICON_ARRAY[ i].init( _file.getChildFileByIndex( i), elmBody, w, i, style, onBodyClick);
+                                       ICON_ARRAY[ i ].init( _file.getChildFileByIndex( i), elmBody, w, i, style, onDown, onEditor, onViwer, onAction );
                                } else {
-                                       ICON_ARRAY.push( getFinderIcon( _file.getChildFileByIndex( i), elmBody, _w, i, style, onBodyClick));
+                                       ICON_ARRAY.push( getFinderIcon( _file.getChildFileByIndex( i), elmBody, _w, i, style, onDown, onEditor, onViwer, onAction ));
                                }
                        }
                        if( _file.getState() === pettanr.file.FILE_STATE.LOADING ){
@@ -877,16 +971,31 @@ pettanr.finder = ( function(){
                                }
                        }
                }
-               function onBodyClick( i){
-                       var l = ICON_ARRAY.length;
-                       if( i < l){
-                               var _file = tree.getCurrentFile().getChildFileByIndex( i);
+               function onDown( i ){
+                       if( i < ICON_ARRAY.length ){
+                               var _file = tree.getCurrentFile().getChildFileByIndex( i );
                                if( _file !== null && ( _file.getChildFileLength() !== -1 || _file.getType() === pettanr.file.FILE_TYPE.FOLDER)){
-                                       tree.down( i);
+                                       tree.down( i );
                                        draw( w, h );
                                }
                        }
                }
+               function onEditor( i ){
+                       if( i < ICON_ARRAY.length ){
+                               var _file = tree.getCurrentFile().getChildFileByIndex( i );
+                       }
+               }
+               function onViwer( i ){
+                       if( i < ICON_ARRAY.length ){
+                               var _file = tree.getCurrentFile().getChildFileByIndex( i );
+                       }
+               }
+               function onAction( i ){
+                       if( i < ICON_ARRAY.length ){
+                               var _file = tree.getCurrentFile().getChildFileByIndex( i );
+
+                       }
+               }
                
                this.init = function(){
                        ELM_CONTAINER.appendChild( elmContainer);
@@ -920,14 +1029,14 @@ pettanr.finder = ( function(){
        
        pettanr.view.registerAsBasicPane( FinderClass );
        
-       function getFinderIcon( _file, _elmContainer, w, index, style, callback){
+       function getFinderIcon( _file, _elmContainer, w, index, style, onDown, onEditor, onViwer, onAction){
                var _icon;
                if( FINDER_ICON_POOL.length > 0){
                        _icon = FINDER_ICON_POOL.shift();
                } else {
                        _icon = new FinderIconClass();
                }
-               _icon.init( _file, _elmContainer, w, index, style, callback);
+               _icon.init( _file, _elmContainer, w, index, style, onDown, onEditor, onViwer, onAction );
                return _icon;
        }
        
@@ -1004,7 +1113,7 @@ pettanr.driver = ( function(){
                                if( _type === pettanr.driver.FILE_TYPE.AUTHOR ){
                                        return [ _data.id , ':', _data.name, '先生' ].join( '');
                                }
-                               return _data.name + _data.type;
+                               return _data.name;
                        },
                        getThumbnail: function( _file){
                                var _data = FileAPI.getFileData( _file),
@@ -1058,7 +1167,7 @@ pettanr.driver = ( function(){
                                }
                                return 'pettanR unknown file';
                        },
-                       viwerApplicationList: function( _file ){
+                       viewerApplicationList: function( _file ){
                                var _data = FileAPI.getFileData( _file ),
                                        _type = _data !== null ? _data.type : null;
                                return [];
@@ -1066,6 +1175,12 @@ pettanr.driver = ( function(){
                        editorApplicationList: function( _file ){
                                var _data = FileAPI.getFileData( _file ),
                                        _type = _data !== null ? _data.type : null;
+                               if( _type === pettanr.driver.FILE_TYPE.PANEL ){
+                                       return [ pettanr.editor ];
+                               }
+                               if( _type === pettanr.driver.FILE_TYPE.COMIC ){
+                                       return [ pettanr.editor, pettanr.comicConsole ];
+                               }
                                return [];
                        }
                },
@@ -1148,7 +1263,7 @@ pettanr.driver = ( function(){
        
        FileAPI.createFolderUnderRoot( FILE_DATA_SERVICE_ROOT);
 
-       function onLoadJson( _file, _json){
+       function onLoadJson( _file, _json ){
                var _access = FileAPI.getFileDataAccess( _file),
                        _data = _access !== null ? _access.DATA : null,
                        l;
@@ -1362,23 +1477,37 @@ pettanr.driver = ( function(){
        }
 })();
 
+pettanr.entrance = {
+       displayName: 'Home',
+       rootElement: document.getElementById('entrance'),
+       onOpen: function( _w, _h, _option ){
+               var pageHeaderH = pettanr.util.getElementSize( document.getElementById('header') ).height;
+               document.getElementById('inner-wrapper').style.height = ( _h - pageHeaderH ) + 'px';
+       },
+       onClose: function(){
+               document.getElementById('inner-wrapper').style.height = '0px';
+       },
+       onWindowResize: function( _w, _h){
+               pettanr.entrance.onOpen( _w, _h );
+       }
+}
+pettanr.view.registerApplication( pettanr.entrance, true );
 
-pettanr.gallery = ( function(){
+pettanr.cabinet = ( function(){
        var finder,
-               elmContainer = document.getElementById( 'gallery'),
+               elmContainer = document.getElementById( 'cabinet'),
                option,
                pageHeaderH = pettanr.util.getElementSize( document.getElementById('header') ).height;
+               
        return {
+               displayName: 'Comic list',
+               rootElement: elmContainer,
                init: function( _option){
                        option = _option;
-                       delete pettanr.gallery.init;
-               },
-               firstOpen: function(){
-                       finder = pettanr.finder.createFinder( elmContainer, pettanr.driver.createPictureTree());
-                       delete pettanr.gallery.firstOpen;
+                       delete pettanr.cabinet.init;
                },
                onOpen: function( _w, _h, _option ){
-                       pettanr.gallery.firstOpen !== undefined && pettanr.gallery.firstOpen();
+                       finder = finder || pettanr.finder.createFinder( elmContainer, pettanr.driver.createComicTree());
                        finder.onOpen( _w, _h - pageHeaderH, _option );
                        
                },
@@ -1386,39 +1515,112 @@ pettanr.gallery = ( function(){
                        finder.onClose();
                },
                onWindowResize: function( _w, _h){
-                       finder.resize( _w, _h - pageHeaderH );
+                       finder.resize( _w, _h - pageHeaderH);
                }
        }
 })();
+pettanr.view.registerApplication( pettanr.cabinet, true );
 
-pettanr.cabinet = ( function(){
+pettanr.gallery = ( function(){
        var finder,
-               elmContainer = document.getElementById( 'cabinet'),
+               elmContainer = document.getElementById( 'gallery' ),
                option,
                pageHeaderH = pettanr.util.getElementSize( document.getElementById('header') ).height;
-               
        return {
+               displayName: 'Pictures',
+               rootElement: elmContainer,
                init: function( _option){
                        option = _option;
-                       delete pettanr.cabinet.init;
-               },
-               firstOpen: function(){
-                       finder = pettanr.finder.createFinder( elmContainer, pettanr.driver.createComicTree());
-                       delete pettanr.cabinet.firstOpen;
+                       delete pettanr.gallery.init;
                },
                onOpen: function( _w, _h, _option ){
-                       pettanr.cabinet.firstOpen !== undefined && pettanr.cabinet.firstOpen();
+                       finder = finder || pettanr.finder.createFinder( elmContainer, pettanr.driver.createPictureTree());
                        finder.onOpen( _w, _h - pageHeaderH, _option );
-                       
                },
                onClose: function(){
                        finder.onClose();
                },
                onWindowResize: function( _w, _h){
-                       finder.resize( _w, _h - pageHeaderH);
+                       finder.resize( _w, _h - pageHeaderH );
                }
        }
 })();
+pettanr.view.registerApplication( pettanr.gallery, true );
+
+pettanr.backyard = {
+       displayName: 'Settings',
+       rootElement: document.getElementById( 'backyard' ),
+       onOpen: function( _w, _h, _option ){
+       },
+       onClose: function(){
+       },
+       onWindowResize: function( _w, _h){
+       }
+}
+pettanr.view.registerApplication( pettanr.backyard, true );
+
+if( pettanr.DEBUG === true){
+       pettanr.debug = ( function(){
+               var elmDl = document.getElementById( 'useragent'),
+                       elmDt, elmDd,
+                       data = {
+                               pettanR:        pettanr.version,
+                               ua:                     navigator.userAgent,
+                               platform:       navigator.platform,
+                               appVersion:     navigator.appVersion,
+                               appCodeName:navigator.appCodeName,
+                               appName:        navigator.appName,
+                               language:       navigator.browserLanguage || navigator.language,
+                               ActiveX:        pettanr.ua.ACTIVEX
+                       },
+                       ua = pettanr.ua;
+               if( ua.IE){
+                       //data.ua = 'Internet Explorer';
+                       data.version = ua.IE;
+                       if( ua.ieVersion >= 8) data.RenderingVersion = ua.ieRenderingVersion;
+                       data.browserType = ua.STANDALONE === true ? 'Standalone' : 'bundle';
+                       if( ua.ieVersion < 9) {
+                               data.vml = ua.VML;
+                       } else {
+                               data.svg = ua.SVG;
+                       }
+               }
+               data.RenderingMode = ua.isStanderdMode === true ? 'Standerd' : 'Quirks';
+               
+               for( var key in data){
+                       elmDt = document.createElement( 'dt');
+                       elmDt.innerHTML = key;
+                       elmDd = document.createElement( 'dd');
+                       elmDd.innerHTML = '' + data[ key];
+                       if( !data[ key]) elmDd.style.color = 'red';
+                       elmDl.appendChild( elmDt);
+                       elmDl.appendChild( elmDd);
+               }
+               return {
+                       displayName: 'Debug',
+                       rootElement: document.getElementById( 'debug' ),
+                       onOpen: function( _w, _h, _option ){
+                               var pageHeaderH = pettanr.util.getElementSize( document.getElementById('header') ).height;
+                               document.getElementById('inner-wrapper').style.height = ( _h - pageHeaderH ) + 'px';
+                       },
+                       onClose: function(){
+                               document.getElementById('inner-wrapper').style.height = '0px';
+                       },
+                       onWindowResize: function( _w, _h){
+                               pettanr.debug.onOpen( _w, _h );
+                       }                               
+               }
+       })();
+       pettanr.view.registerApplication( pettanr.debug, true );                        
+       
+} else {
+       var _debug = document.getElementById( 'debug');
+       if( _debug){
+               pettanr.util.removeAllChildren( _debug);
+               _debug.parentNode.removeChild( _debug);
+               _debug = null;
+       }
+}
 
 // i18n
 // login