X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.4.x%2Fjavascripts%2Fsystem.js;h=46c3f1d5c014b5e8b4dad1fe47303bd169d9221b;hb=fbc8e8aa4dc1607d4b8812dd8e923bc22b50e723;hp=ac96c53d4aadecbe23327ae744dae3dd309e3be1;hpb=33e78274a61e2612fc7a53117e83b07816986143;p=pettanr%2FclientJs.git diff --git a/0.4.x/javascripts/system.js b/0.4.x/javascripts/system.js index ac96c53..46c3f1d 100644 --- a/0.4.x/javascripts/system.js +++ b/0.4.x/javascripts/system.js @@ -1,6 +1,6 @@ /* * pettanR system.js - * version 0.4.4 + * version 0.4.28 * * author: * itozyun @@ -8,20 +8,6 @@ * 3-clause BSD */ - -pettanr.log = ( function(){ - return { - init: function(){} - } -})(); - -pettanr.io = ( function(){ - - return { - init: function(){} - } -})(); - /* * 画像一覧は * お気に入り画像一覧 > tag:ペン次郎 > ペン次郎:笑う @@ -40,12 +26,14 @@ pettanr.file = ( function(){ FILEDATA_RESITER = [], // store all of fileData( json object ) FILEDATA_ACCESS = [], // file operations for Kernel only ! hide from Out of pettanr.file FILE_OBJECT_POOL = [], - EVENT_LISTENER_RESISTER = [], + EVENT_LISTENER_REGISTER = [], TREE_ARRAY = [], TREE_ACCESS_ARRAY = []; var REQUEST_CONTROLER = ( function(){ var REQUEST_TICKET_RESISTER = [], + currentTicket = null, + currentData = null, DATA_TYPE_ARRAY = 'json,xml,html,text'.split( ','), DATA_IS_JSON = 0, DATA_IS_XML = 1, @@ -63,21 +51,34 @@ pettanr.file = ( function(){ }; function request(){ - if( REQUEST_TICKET_RESISTER.length === 0) return; - var _ticket = REQUEST_TICKET_RESISTER.shift(); + if( currentTicket !== null ) return; + currentTicket = REQUEST_TICKET_RESISTER.shift(); $.ajax({ - url: _ticket.url, - dataType: _ticket.type, - success: function( _data){ - _ticket.onLoad( _ticket.data, _data); - }, - error: function(){ - ++numError; - _ticket.onError( _ticket.data); - } + url: currentTicket.url, + dataType: currentTicket.type, + success: onSuccess, + error: onError }); } + function onSuccess( _data ){ + currentData = _data; + window.setTimeout( asyncSuccess, 0 ); + } + function asyncSuccess(){ + currentTicket.onLoad( currentTicket.data, currentData ); + currentTicket = currentData = null; + REQUEST_TICKET_RESISTER.length !== 0 && window.setTimeout( request, 0 ); + } + function onError(){ + ++numError; + window.setTimeout( asyncError, 0 ); + } + function asyncError(){ + currentTicket.onError( currentTicket.data ); + currentTicket = null; + REQUEST_TICKET_RESISTER.length !== 0 && window.setTimeout( request, 0 ); + } return { getNumTask: function(){ return REQUEST_TICKET_RESISTER.length; @@ -85,155 +86,176 @@ pettanr.file = ( function(){ getNumError: function(){ return numError; }, - getJson: function( _data, _url, _onLoad, _onError){ + getJson: function( _data, _url, _onLoad, _onError ){ REQUEST_TICKET_RESISTER.push( new RequestTicketClass( DATA_IS_JSON, _data, _url, _onLoad, _onError)); - request(); + currentTicket === null && request(); } } })(); - var FILE_CONTROLER = ( function(){ - - return { - createTree: function( _rootFileData){ - var _tree = new TreeClass( _rootFileData); - _tree.init(); - TREE_ARRAY.push( _tree); - return _tree; - }, - getFileData: function( UIDorFILEorFILEDATA){ - var _access = FILE_CONTROLER.getFileDataAccess( UIDorFILEorFILEDATA); - return _access !== null ? _access.DATA : null; - }, - getChildren: function( UIDorFILEorFILEDATA){ - var _data = FILE_CONTROLER.getFileData( UIDorFILEorFILEDATA); - return _data !== null ? _data.children || null : null; - }, - getFileDataAccess: function( UIDorFILEorFILEDATA){ - var _uid, _data, _access; - - if( typeof UIDorFILEorFILEDATA === 'number'){ - _data = FILEDATA_RESITER[ UIDorFILEorFILEDATA] || null; - } else - if( UIDorFILEorFILEDATA instanceof FileClass){ - _uid = UIDorFILEorFILEDATA.getUID(); - _data = FILEDATA_RESITER[ _uid] || null; - } else { - _data = UIDorFILEorFILEDATA || null; - } + var FILE_CONTROLER = { + createTree: function( _rootFileData){ + var _tree = new TreeClass( _rootFileData); + _tree.init(); + TREE_ARRAY.push( _tree); + return _tree; + }, + getFileUID: function( FILEDATAorFILE ){ + if( FILEDATAorFILE instanceof FileClass ){ + return FILEDATAorFILE.getUID(); + } + + var uid = pettanr.util.getIndex( FILEDATA_RESITER, FILEDATAorFILE ); + if( uid === -1){ + uid = FILEDATA_RESITER.length; + FILEDATA_RESITER.push( FILEDATAorFILE ); + } + return uid; + }, + getFileDataAccess: function( UIDorFILEorFILEDATA){ + var _uid, _data, _access; + + if( typeof UIDorFILEorFILEDATA === 'number'){ + _data = FILEDATA_RESITER[ UIDorFILEorFILEDATA] || null; + } else + if( UIDorFILEorFILEDATA instanceof FileClass){ + _uid = UIDorFILEorFILEDATA.getUID(); + _data = FILEDATA_RESITER[ _uid ] || null; + } else { + _data = UIDorFILEorFILEDATA || null; + } + + if( _data === null || typeof _data !== 'object') return null; + for( var i=0, l = FILEDATA_ACCESS.length; i= _bit; + }, + move: function( _prentUID, _targetfile, _newFolder, _newIndex, _opt_callback){ + var _parentData = FILE_CONTROLER.getFileDataAccess( _prentUID), + _parentType = _parentData.TYPE, + _targetData = FILE_CONTROLER.getFileDataAccess( _targetfile), + _targetType = _targetData.TYPE; + }, + replace: function( _uid, _file, _newIndex){ + + }, + addEventListener: function( FILEorNULL, _eventType, _callback ){ + var _uid = FILEorNULL instanceof FileClass ? FILEorNULL.getUID() : FILEorNULL; + EVENT_LISTENER_REGISTER.push( new FileEventTicketClass( _uid, _eventType, _callback)); + }, + removeEventListener: function( FILEorNULL, _eventType, _callback ){ + var _uid = FILEorNULL instanceof FileClass ? FILEorNULL.getUID() : FILEorNULL, + _ticket; + for(var i=0, l = EVENT_LISTENER_REGISTER.length; i 0 ){ + _stack.shift(); + } + if( STACK_LIST.length !== 0 ){ + window.setTimeout( dispatch, 0 ); + } + } + return { + addEvent: function( _callback, _eventType, _targetFile, _key, _value ){ + if( STACK_LIST.length === 0 ){ + window.setTimeout( dispatch, 0 ); } + STACK_LIST.push( [ _callback, _eventType, _targetFile, _key, _value ] ); } } })(); - - 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); - - function onDestroy(){ - - } + TREE_ACCESS_ARRAY.push( ACCESS ); - 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_RESISTER.length; i= currentFile.getChildFileLength()) return; - PARENT_FILE_RESITER.unshift( currentFile); - currentFile = currentFile.getChildFileByIndex( _index); - FILE_CONTROLER.getSeqentialFiles( currentFile); + 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(); } - FILE_CONTROLER.getSeqentialFiles( currentFile); + currentFile.getSeqentialFiles(); return currentFile; }, addTreeEventListener: function( _eventType, _callback){ @@ -288,7 +318,17 @@ 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, rootFile を null にしないと .File.destroy() ができない. + _currentFile.destroy(); + while( PARENT_FILE_RESITER.length > 0 ){ + _currentFile = PARENT_FILE_RESITER.shift(); + _currentFile.destroy(); + } + instance = null; } } }; @@ -315,118 +355,204 @@ pettanr.file = ( function(){ * fileの変更、それに付随して追加されたイベントは、TreeClassで管理される。 * treeがdestryされると、fileのイベントリスナーも全て削除される。 * 他の tree も data の共通する currentFile に対してのみは、file の変更イベントを受け取って流す. + * + * parentData のほうがいい! */ - var FileClass = function( TREE, parentFile, data){ - if( !data.children){ - data.children = []; - } - var TYPE = data.type, - name = null, - driver = data.driver || FileDriverBase, - thumbnail = null, - uid = FILE_CONTROLER.getUID( data), - CHILDREN = data.children, + var FileClass = function( tree, parentData, data ){ + var uid = FILE_CONTROLER.getFileUID( data ), instance = this; - if( uid === -1){ - uid = FILEDATA_RESITER.length; - FILEDATA_RESITER.push( data); - } - FILEDATA_ACCESS.push( { - TYPE: TYPE, + TREE: tree, + parentData: parentData, DATA: data, - destroy: destroy, - updateParent: updateParent, dispatchFileEvent: dispatchEvent } ); - function destroy(){ - name = thumbnail = parentFile = data = CHILDREN = driver = null; - - } - function updateParent( _parent){ - parentFile = _parent; - } - function dispatchEvent( e){ - FILE_CONTROLER.fileEventRellay( instance, TREE, e); - } - /* grobal Methods */ - this.init = function(){ - //instance = this; - delete this.init; - } - this.getType = function(){ - return TYPE; - } - this.getName = function(){ - if( name !== null) return name; - if( typeof driver.getName === 'function'){ - name = driver.getName( instance); - } - return name; - } - this.getThumbnail = function(){ - if( thumbnail !== null) return thumbnail; - if( typeof driver.getThumbnail === 'function'){ - thumbnail = driver.getThumbnail( instance); - } - return thumbnail || null; + tree = parentData = data = null; + + function dispatchEvent( e ){ + FILE_CONTROLER.fileEventRellay( uid, e ); } this.getUID = function(){ return uid; } - this.getChildFileByIndex = function( _index){ - if( typeof _index !== 'number' || _index < 0 || typeof CHILDREN.length !== 'number' || _index >= CHILDREN.length) return null; - _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(){ - - } }; + FileClass.prototype = { isChildFile: function( _FILEorFILEDATA){ return this.getChildFileIndex( _FILEorFILEDATA) !== -1; }, getSeqentialFiles: function(){ - FILE_CONTROLER.getSeqentialFiles( this); + var _driver = FILE_CONTROLER.getDriver( this ); + if( _driver !== null && typeof _driver.getSeqentialFiles === 'function' ){ + _driver.getSeqentialFiles( this ); + } }, - addEventListener: function( _eventType, _callback){ - FILE_CONTROLER.addEventListener( this, _eventType, _callback); + addEventListener: function( _eventType, _callback ){ + FILE_CONTROLER.addEventListener( this, _eventType, _callback ); }, - removeEventListener: function( _eventType, _callback){ - FILE_CONTROLER.removeEventListener( this, _eventType, _callback); + removeEventListener: function( _eventType, _callback ){ + FILE_CONTROLER.removeEventListener( this, _eventType, _callback ); }, getChildFileLength: function(){ - var CHILDREN = FILE_CONTROLER.getChildren( this); - return CHILDREN && typeof CHILDREN.length === 'number' ? CHILDREN.length : 0; + var children = FILE_CONTROLER.getChildren( this ); + return Type.isArray( children ) === true ? children.length : -1; }, - getChildFileIndex: function( _FILEorFILEDATA){ - var CHILDREN = FILE_CONTROLER.getChildren( this); - - if( !CHILDREN || typeof CHILDREN.length !== 'number') return -1; - var l = CHILDREN.length, - _fileData = FILE_CONTROLER.getFileData( _FILEorFILEDATA); - if( _fileData === null) return -1; - for(var i=0; i= _children.length) return null; + var _file = new FileClass( _access.TREE, _access.DATA, _children[ _index ]); + // _file.init(); + return _file; + }, + getName: function(){ + var driver = FILE_CONTROLER.getDriver( this ); + if( typeof driver.getName === 'function'){ + return driver.getName( this ); + } + return FileDriverBase.getName( this); + }, + getThumbnail: function(){ + var driver = FILE_CONTROLER.getDriver( this); + if( typeof driver.getThumbnail === 'function'){ + return driver.getThumbnail( this); + } + return FileDriverBase.getThumbnail( this); + }, + getType: function(){ + var _data = FILE_CONTROLER.getFileData( this); + return typeof _data.type === 'number' ? _data.type : pettanr.file.FILE_TYPE.UNKNOWN; + }, getState: function(){ var _data = FILE_CONTROLER.getFileData( this); - return _data.state !== undefined ? _data.state : pettanr.file.FILE_STATE.OK; + return typeof _data.state === 'number' ? _data.state : pettanr.file.FILE_STATE.OK; + }, + getSummary: function(){ + var driver = FILE_CONTROLER.getDriver( this ); + if( typeof driver.getSummary === 'function'){ + return driver.getSummary( this ); + } + return FileDriverBase.getSummary( this); + }, + isWritable: function(){ + return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.WRITE ); + }, + isSortable: function(){ + return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.SORT ); + }, + isCreatable: function(){ + return FILE_CONTROLER.getUpdateFlag( this, pettanr.file.FILE_UPDATE_POLICY.CREATE ); + }, + isRenamable: function(){ + 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 + var driver = FILE_CONTROLER.getDriver( this ); + if( typeof driver.read === 'function'){ + return driver.read( this ); + } + return FileDriverBase.read( this ); + }, + write: function( _newData, _onUpdateFunction ){ + var driver = FILE_CONTROLER.getDriver( this ); + if( typeof driver.write === 'function'){ + return driver.write( this, _newData, _onUpdateFunction ); + } + return FileDriverBase.write( this, _newData, _onUpdateFunction ); + }, + viewerApplicationList: function(){ + var driver = FILE_CONTROLER.getDriver( this ); + if( typeof driver.viewerApplicationList === 'function'){ + return driver.viewerApplicationList( this ); + } + return FileDriverBase.viewerApplicationList( this ); + }, + editorApplicationList: function(){ + var driver = FILE_CONTROLER.getDriver( this ); + if( typeof driver.editorApplicationList === 'function'){ + return driver.editorApplicationList( this ); + } + return FileDriverBase.viwerApps( this ); + }, + create: function(){ + + }, + sort: function(){ + + }, + onCopy: function(){ + + }, + onDelete: function(){ + + }, + move: function( _newFolder, _newIndex, opt_callback ){ + var _access = FILE_CONTROLER.getFileDataAccess( this ); + _access.TREE.move( _access.parentData, this.getUID(), _newFolder, _newIndex, opt_callback ); + }, + replace: function( _newIndex, opt_callback ){ + var _access = FILE_CONTROLER.getFileDataAccess( this ); + _access.TREE.replace( _access.parentData, this.getUID(), _newIndex, opt_callback); + }, + /** + * サーチ + * 探しているファイルの属性と値を指定.一致する child の index を配列で返す. + */ + search: function( obj, rule ){ + var _children = FILE_CONTROLER.getChildren( this ), + _child, + ret = [], k, c; + for( var i=0, l=_children.length; i 0 ? FILE_OBJECT_POOL.shift() : new FileClass(); - _file.init( TREE, parentFile, data); - return _file; - } - var ROOT_FILEDATA = { name: 'system root', type: FILE_TYPE_IS_FOLDER, @@ -519,7 +693,7 @@ pettanr.file = ( function(){ .dispatchFileEvent( new FileEventClass( pettanr.file.FILE_EVENT.GET_SEQENTIAL_FILES, ROOT_FILE, 'children', null)); } function createFileEvent( _eventType, _file, _key, _value){ - return new FileEventClass( _eventType, _file, _key, _value) + return new FileEventClass( _eventType, _file, _key, _value); } function createFileTypeID(){ return ++numFileType; @@ -531,7 +705,7 @@ pettanr.file = ( function(){ //FILE_CONTROLER.init(); delete pettanr.file.init; }, - resisterDriver: function( _driver){ + registerDriver: function( _driver ){ _driver.prototype = FileDriverBase; /* * File API @@ -555,6 +729,7 @@ pettanr.file = ( function(){ return _file instanceof FileClass; }, FILE_TYPE: { + UNKNOWN: 0, FOLDER: FILE_TYPE_IS_FOLDER, IMAGE: createFileTypeID(), TEXT: createFileTypeID(), @@ -570,6 +745,45 @@ pettanr.file = ( function(){ ERROR: 3, BROKEN: 4 }, + FILE_UPDATE_POLICY: { + _____: 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, + DELETE: 16 + }, TREE_EVENT: { UPDATE: 'onTreeUpdate' }, @@ -578,7 +792,7 @@ pettanr.file = ( function(){ GET_SEQENTIAL_FILES:'gotSeqentilFiles' }, FILE_DATA_PROPERTY_RESERVED: [ - 'children', 'driver', 'state', 'type', 'name' + 'children', 'driver', 'state', 'type' ] } })(); @@ -586,61 +800,104 @@ pettanr.file = ( function(){ pettanr.finder = ( function(){ var FINDER_ARRAY = [], ELM_ORIGIN_FINDER_LOCATION_ITEM = pettanr.util.pullHtmlAsTemplete( 'templete-finder-location-item'), - ELM_ORIGIN_FINDER_ICON = pettanr.util.pullHtmlAsTemplete( 'templete-finder-icon'), + ELM_ORIGIN_FINDER_ICON = ( function(){ + var forIE = pettanr.util.pullHtmlAsTemplete( 'templete-finder-icon-ie'), + modern = pettanr.util.pullHtmlAsTemplete( 'templete-finder-icon'); + return pettanr.ua.isIE === true && pettanr.ua.ieVersion < 8 ? forIE : modern; + })(), ELM_ORIGIN_CONTAINER = pettanr.util.pullHtmlAsTemplete( 'templete-finder-container'), ICON_HEIGHT = pettanr.util.getElementSize( ELM_ORIGIN_FINDER_ICON).height, - ICON_CLASSNAME = ELM_ORIGIN_FINDER_ICON.getElementsByTagName( 'div')[0].className, + ICON_CLASSNAME = 'finder-icon-thumbnail', FINDER_ICON_POOL = [], BREAD_OBJECT_POOL = []; var FinderIconClass = function(){ var elmContainer, ELM_WRAPPER = ELM_ORIGIN_FINDER_ICON.cloneNode( true), - ELM_THUMBNAIL = pettanr.util.getElementsByClassName( ELM_WRAPPER, 'finder-icon-thumbnail', 'div')[0], - ELM_FILENAME = pettanr.util.getElementsByClassName( ELM_WRAPPER, 'finder-icon-filename', 'div')[0], - file, w, index, style, instansce, callback; + 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], + 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.onclick = onClick; - function onClick(){ - callback( index); + ELM_WRAPPER.onclick = onDownClick; + function onDownClick(){ + onDownCallback( index); + return false; + } + ELM_EDITOR_BUTTON.onclick = onEditorClick; + function onEditorClick(){ + onEditorCallback( file, editorList[ 0 ] ); + return false; + } + ELM_VIEWER_BUTTON.onclick = onViwerClick; + function onViwerClick(){ + onViewerCallback( file, viewerList[ 0 ] ); + return false; + } + ELM_ACTION_BUTTON.onclick = onActionClick; + function onActionClick(){ + onActionCallback( file ); + return false; } - 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_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'; + // ELM_WRAPPER.style.top = (index * ICON_HEIGHT) +'px'; } function onCollect(){ - elmContainer.removeChild( ELM_WRAPPER); + elmContainer.removeChild( ELM_WRAPPER ); elmContainer = null; - FINDER_ICON_POOL.push( instansce); + FINDER_ICON_POOL.push( instansce ); } 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){ @@ -651,12 +908,13 @@ pettanr.finder = ( function(){ return style; }, - onResize: function( w){ + onResize: function( w ){ }, destroy: function(){ - elmContainer.removeChild( ELM_WRAPPER); - file = elmContainer = null; + elmContainer.removeChild( ELM_WRAPPER ); + file && file.destroy(); + file = elmContainer = onDownCallback = onEditorCallback = onViewerCallback = onActionCallback = viewerList = editorList = null; FINDER_ICON_POOL.push( instansce); } } @@ -684,9 +942,9 @@ pettanr.finder = ( function(){ } return { - init: function( _file, _elmContainer, _index, _callback){ + init: function( _file, _elmContainer, _index, _callback ){ instansce = this; - if( elmContainer !== _elmContainer){ + if( elmContainer !== _elmContainer ){ _elmContainer.appendChild( ELM_WRAPPER); elmContainer = _elmContainer; } @@ -711,37 +969,42 @@ pettanr.finder = ( function(){ destroy: function(){ elmContainer.removeChild( ELM_WRAPPER); file = elmContainer = null; - BREAD_OBJECT_POOL.push( this); + BREAD_OBJECT_POOL.push( this ); } } } - var FinderClass = function( ELM_CONTAINER, tree, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){ + 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], - elmBody = nodesDiv[ nodesDiv.length -1], + elmBody = nodesDiv[ nodesDiv.length -1 ], //tree = pettanr.file.createTree( TREE_TYPE), headX, headY, - headH = pettanr.util.getElementSize( ELM_ORIGIN_FINDER_ICON).height, + headH = pettanr.util.getElementSize( nodesDiv[0] ).height, bodyY, currentFile = null, breadW = 90, - size = pettanr.util.getElementSize( ELM_ORIGIN_FINDER_ICON), + size = pettanr.util.getElementSize( ELM_ORIGIN_FINDER_ICON ), iconW = size.width, iconH = size.height, - style = 0; - w = 800; - - tree.addTreeEventListener( pettanr.file.TREE_EVENT.UPDATE, draw); + style = 0, + w, h, bodyH, + instance = this; + + tree.addTreeEventListener( pettanr.file.TREE_EVENT.UPDATE, draw ); + ELM_CONTAINER.appendChild( elmContainer ); - function draw(){ + function draw( _w, _h ){ + w = Type.isFinite( _w ) === true ? _w : w; + h = Type.isFinite( _h ) === true ? _h : h; + bodyH = h - headH; var l = tree.hierarchy() +1, m = BREAD_ARRAY.length, _file, _bread; @@ -750,7 +1013,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){ @@ -762,65 +1025,90 @@ pettanr.finder = ( function(){ for( i=0; i 0 || _file.getType() === pettanr.file.FILE_TYPE.FOLDER)){ - tree.down( i); - draw(); + 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 ); + draw( w, h ); } } } - + function onEditor( _file, _app ){ + _app.boot( _file ); + } + function onViwer( _file, _app ){ + _app.bootInOverlay( _file ); + } + function onAction( _file ){ + + } + this.rootElement = elmContainer; + this.parentElement = ELM_CONTAINER; + this.displayName = 'finder'; + this.ID = 'finder'; + this.MIN_WIDTH = 240; + this.MIN_HEIGHT = 240; this.init = function(){ - ELM_CONTAINER.appendChild( elmContainer); //$( elmLocation).click( onHeadClick); //$( elmContainer).click( onBodyClick); - var position = pettanr.util.getAbsolutePosition( elmLocation); + var position = pettanr.util.getAbsolutePosition( elmLocation ); headX = position.x; headY = position.y; - bodyY = pettanr.util.getAbsolutePosition( elmBody).y; - delete this.init; - } - this.onOpen = function(){ - this.init !== undefined && this.init(); - draw(); + bodyY = pettanr.util.getAbsolutePosition( elmBody ).y; + delete instance.init; } - this.onClose = function(){ + this.onPaneResize = function( _w, _h ){ + instance.init && instance.init(); + draw( _w, _h ); - } - this.onWindowResize = function( _w, _h){ - + w = _w; + h = _h; + elmBody.style.height = ( _h - headH ) + 'px'; + + for(var i=0, l=ICON_ARRAY.length; i 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; } @@ -839,61 +1127,79 @@ pettanr.finder = ( function(){ init: function(){ }, - createFinder: function( _elmTarget, _tree, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){ - var _finder = new FinderClass( _elmTarget, _tree, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled); - FINDER_ARRAY.push( _finder); + createFinder: function( _applicationReference, _elmTarget, _tree, _header, _footer ){ + if( pettanr.view.isApplicationReference( _applicationReference ) === false ) return; + + var _finder = new FinderClass( _elmTarget, _tree, _header, _footer ); + FINDER_ARRAY.push( _finder ); return _finder; }, - createFinderHead: function(){ + registerFinderHead: function(){ }, - resisterFinderPane: function( _finderPane){ + registerFinderPane: function( _finderPane){ }, isFinderInstance: function( _finder){ return _finder instanceof FinderClass; + }, + isFinderPaneInstance: function(){ + + }, + isFinderHeadInstance: function(){ } } })(); pettanr.driver = ( function(){ - var MyAuthorID = 'current_author' in window ? current_author.id : 1, - MyArtistID = 'current_artist' in window ? current_artist.id : 1, + var MyAuthorID = 'current_author' in window ? current_author.id : ( pettanr.DEBUG ? 1 : -1 ), + MyArtistID = 'current_artist' in window ? current_artist.id : ( pettanr.DEBUG ? 1 : -1 ), Driver = { getSeqentialFiles: function( _file){ var _data = FileAPI.getFileData( _file), _json = _data !== null ? _data.json : null; + if( _json === true && _data.type === pettanr.driver.FILE_TYPE.COMIC ){ + if( pettanr.LOCAL === true ){ + _json = [ 'json\/comics_', _data.id, '.json' ].join( '' ); + } else { + _json = [ pettanr.CONST.PETTANR_ROOT_PATH, 'comics\/', _data.id, '.json\/play\/' ].join( '' ); + } + } if( typeof _json === 'string'){ FileAPI.getJson( _file, _json, onLoadJson, onErrorJson); _data.state = pettanr.file.FILE_STATE.LOADING; - delete _data.json; + _data.json = null; + return; } }, getName: function( _file){ var _data = FileAPI.getFileData( _file), _type = _data !== null ? _data.type : null; - if( _type === pettanr.driver.FILE_TYPE.PICTURE){ + if( _type === pettanr.driver.FILE_TYPE.PICTURE ){ return [ _data.id, _data.ext ].join( '.'); } else - if( _type === pettanr.driver.FILE_TYPE.PANEL){ - return [ _data.t, ':', _data.comic.name || _data.comic.title ].join( ''); + if( _type === pettanr.driver.FILE_TYPE.PANEL ){ + return [ _data.t, ':', _data.comic.title ].join( ''); } else - if( _type === pettanr.driver.FILE_TYPE.ARTIST){ - return _data.name + '先生'; + if( _type === pettanr.driver.FILE_TYPE.COMIC ){ + return _data.title; } else - if( _type === pettanr.driver.FILE_TYPE.AUTHOR){ - return _data.name + '先生'; + if( _type === pettanr.driver.FILE_TYPE.ARTIST ){ + return [ _data.name, '画伯' ].join( ''); + } else + if( _type === pettanr.driver.FILE_TYPE.AUTHOR ){ + return [ _data.name, '先生' ].join( ''); } - return _data.name || _data.title; + return _data.name; }, getThumbnail: 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 { image: [ pettanr.CONST.RESOURCE_PICTURE_PATH, 'thumbnail/', _data.id, '.', _data.ext ].join( '')}; } - if( _data === FILE_DATA_COMIC_ROOT){ + if( _data === FILE_DATA_COMICS_ROOT){ return { className: 'file-type-cabinet'}; } if( _type === pettanr.driver.FILE_TYPE.COMIC){ @@ -908,23 +1214,94 @@ pettanr.driver = ( function(){ if( _type === pettanr.driver.FILE_TYPE.ARTIST){ return { className: 'file-type-artist'}; } - if( _type === pettanr.driver.FILE_TYPE.FOLDEER){ + if( _type === pettanr.file.FILE_TYPE.FOLDER){ return { className: 'file-type-folder'}; } - return { className: 'file-type-folder'}; + return { className: 'file-type-broken'}; + }, + getSummary: function( _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( '' ); + } + if( _data === FILE_DATA_COMICS_ROOT){ + return 'cabinet file'; + } + if( _type === pettanr.driver.FILE_TYPE.COMIC){ + return 'comic file, id:' + _data.id; + } + if( _type === pettanr.driver.FILE_TYPE.PANEL){ + return [ _data.width, 'x', _data.height ].join( '' ); + } + if( _type === pettanr.driver.FILE_TYPE.AUTHOR){ + return 'author file, id:' + _data.id; + } + if( _type === pettanr.driver.FILE_TYPE.ARTIST){ + return [ 'id:', _data.id, ' Email:', _data.email || 'empty' , ', HP:', _data.homepage_url || 'empty' ].join( '' ); + } + if( _type === pettanr.file.FILE_TYPE.FOLDER){ + return 'pettanR folder'; + } + return 'pettanR unknown file'; + }, + write: function( _file, _newData, _onUpdateFunction ){ + var _data = FileAPI.getFileData( _file ), + _type = _data !== null ? _data.type : null; + if( _type === pettanr.driver.FILE_TYPE.COMIC ){ + } + 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 ){ + } + }, + viewerApplicationList: function( _file ){ + var _data = FileAPI.getFileData( _file ), + _type = _data !== null ? _data.type : null; + + if( _data === FILE_DATA_MY_PICTURES_ROOT ){ + return [ pettanr.premiumSatge ]; + } + if( _type === pettanr.driver.FILE_TYPE.ARTIST ){ + return [ pettanr.premiumSatge ]; + } + return []; + }, + 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 []; } }, - FileAPI = pettanr.file.resisterDriver( Driver), + FileAPI = pettanr.file.registerDriver( Driver ), FILE_DATA_SERVICE_ROOT = { name: 'PettanR root', type: pettanr.file.FILE_TYPE.FOLDER, children: [] }, - FILE_DATA_COMIC_ROOT = { + FILE_DATA_COMICS_ROOT = { name: 'Comics', type: pettanr.file.FILE_TYPE.FOLDER, children: [], driver: Driver, + json: pettanr.CONST.URL_COMICS_JSON + }, + FILE_DATA_PANELS_ROOT = { + name: 'Panels', + type: pettanr.file.FILE_TYPE.FOLDER, + children: [], + driver: Driver, json: pettanr.CONST.URL_PANELS_JSON }, FILE_DATA_PICTURE_ROOT = { @@ -932,17 +1309,27 @@ pettanr.driver = ( function(){ type: pettanr.file.FILE_TYPE.FOLDER, children: [], driver: Driver, - json: pettanr.CONST.URL_ORIGINAL_PICTURES_JSON + json: pettanr.CONST.URL_RESOURCE_PICTURES_JSON }, FILE_DATA_MY_COMICS_ROOT = { name: 'My Comics', type: pettanr.file.FILE_TYPE.FOLDER, + children: [], + driver: Driver, + id: MyAuthorID + }, + FILE_DATA_LATEST_COMICS = { + name: 'Latest Comics', + type: pettanr.file.FILE_TYPE.FOLDER, children: [] }, FILE_DATA_MY_PICTURES_ROOT = { name: 'My Pictures', type: pettanr.file.FILE_TYPE.FOLDER, - children: [] + children: [], + driver: Driver, + json: pettanr.CONST.URL_ORIGINAL_PICTURES_JSON, + id: MyArtistID }, FILE_DATA_AUTHOR_ROOT = { name: 'Authors', @@ -954,8 +1341,8 @@ pettanr.driver = ( function(){ type: pettanr.file.FILE_TYPE.FOLDER, children: [] }, - FILE_DATA_LICENSE_ROOT = { - name: 'Original Licenses', + FILE_DATA_LISENCE_ROOT = { + name: 'Original Lisences', type: pettanr.file.FILE_TYPE.FOLDER, children: [] }, @@ -972,167 +1359,228 @@ pettanr.driver = ( function(){ BALLOON_TEMPLETE_ARRAY = [], ORIGINAL_LICENSE_ARRAY = [], BASIC_LICENSES = 'cc_by,cc_nc,cc_nd,cc_sa,keep_aspect_ratio,no_convert,no_flip,no_resize'.split( ','); - FILE_DATA_SERVICE_ROOT.children.push( FILE_DATA_COMIC_ROOT, FILE_DATA_PICTURE_ROOT, FILE_DATA_LICENSE_ROOT, FILE_DATA_BALLOON_ROOT); - FILE_DATA_COMIC_ROOT.children.push( FILE_DATA_MY_COMICS_ROOT, FILE_DATA_AUTHOR_ROOT); + FILE_DATA_SERVICE_ROOT.children.push( FILE_DATA_COMICS_ROOT, FILE_DATA_PICTURE_ROOT, FILE_DATA_PANELS_ROOT, FILE_DATA_LISENCE_ROOT, FILE_DATA_BALLOON_ROOT); + FILE_DATA_COMICS_ROOT.children.push( FILE_DATA_MY_COMICS_ROOT, FILE_DATA_LATEST_COMICS, FILE_DATA_AUTHOR_ROOT); FILE_DATA_PICTURE_ROOT.children.push( FILE_DATA_MY_PICTURES_ROOT, FILE_DATA_ARTIST_ROOT); 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 = _json.length; + l; if( _data === null){ onErrorJson( _file); return; } _data.state = pettanr.file.FILE_STATE.OK; - if( l === 0) return; - for(var i=0; i 0 ){ + var _id = _data.id - 1, + __data = _array[ _id ], + _reserved = pettanr.file.FILE_DATA_PROPERTY_RESERVED.join( ', ' ); + if( __data ){ for( var key in _data){ - __data[ key ] = _data[ key ]; + if( _reserved.indexOf( key ) === -1 ){ + __data[ key ] = _data[ key ]; + } } _data = __data; // このタイミングで参照が切れるので注意!! } else { - _array[ _id] = _data; + _array[ _id ] = _data; } + } else { + alert( 'error' ); } - - if( _parent === FILE_DATA_COMIC_ROOT){ - if( _data.comic && _data.author){ - var _comic = getFolderData( _data, 'comic', FILE_DATA_COMIC_ROOT), - _comics = getFolderData( _data, 'author', FILE_DATA_AUTHOR_ROOT).children; - _comic.children.push( _data); - pettanr.util.getIndex( _comics, _comic) === -1 && _comics.push( _comic); + + // Author + // Artist + if( _parent === FILE_DATA_AUTHOR_ROOT || _parent === FILE_DATA_ARTIST_ROOT ){ + addChildData( _parent, _data ); + } else + // Comic + Panels + if( _parent.type === pettanr.driver.FILE_TYPE.COMIC || _parent === FILE_DATA_COMICS_ROOT ){ + var _panels = _data.panels, + _panel; + if( _panels && Type.isArray( _panels ) === true ){ + + for( i=0, l=_panels.length; i= 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); + } + + var wrap = document.getElementById('inner-wrapper'), + pageHeaderH = pettanr.util.getElementSize( document.getElementById( 'header' )).height, + instance = this; + + this.displayName = 'Debug'; + this.ID = 'debug'; + this.rootElement = document.getElementById( 'debug' ); + this.onOpen = function( _w, _h, _option ){ + wrap.style.display = ''; + wrap.style.height = ( _h - pageHeaderH ) + 'px'; + } + this.onClose = function(){ + wrap.style.display = 'none'; } + this.onPaneResize = function( _w, _h ){ + instance.onOpen( _w, _h ); + } + }); + pettanr.debug.addToLancher(); + +} else { + var _debug = document.getElementById( 'debug'); + if( _debug){ + pettanr.util.removeAllChildren( _debug); + _debug.parentNode.removeChild( _debug); + _debug = null; } -})(); +} -pettanr.cabinet = ( function(){ - var finder, - elmContainer = document.getElementById( 'cabinet'), - option; +/* ---------------------------------------- + * Image Group Exproler + * - overlay + */ +pettanr.premiumSatge = pettanr.view.registerApplication( function(){ + var ICON_ARRAY = [], + WHEEL_DELTA = 64, + ARTIST_TREE = pettanr.driver.createArtistTree(), + ARTIST_ROOT_FILE = ARTIST_TREE.getRootFile(), + instance = this, + winW, winH, + wrapX, + elmWrap = document.getElementById( 'image-group-wrapper' ), + elmContainer = document.getElementById( 'image-group-icon-container' ), + containerW, + containerH = pettanr.util.getElementSize( elmContainer ).height, + elmIconOrigin = ( function(){ + var ret = document.createElement( 'div' ), + data = document.createElement( 'div' ); + ret.appendChild( data ); + ret.className = 'image-group-item'; + data.className = 'image-group-item-title'; + return ret; + })(), + jqContainer, + size = pettanr.util.getElementSize( elmIconOrigin ), + itemW = size.width, + itemH = size.height, + elmName = document.getElementById( 'image-group-name' ), + elmButton = document.getElementById( 'image-group-button' ), + buttonW = pettanr.util.getElementSize( elmButton ).width, + //onUpdateFunction, + onUpdateFunction = null, + onUpdateData = null, + artistID = -1, + onEnterInterval = null; + + elmButton.onclick = clickOK; + + var BASE_PATH = pettanr.LOCAL === true ? 'resource_pictures\/' : pettanr.CONST.PETTANR_ROOT_PATH + 'resource_pictures\/', + THUMB_PATH = BASE_PATH, // + 'thumbnail/', + LIMIT_FILESIZE = 1024 * 10; // 10KB + + var ImageGroupIconClass = function( INDEX, data ){ + var elmIconWrap = elmIconOrigin.cloneNode( true ), + elmIconTitle = pettanr.util.getElementsByClassName( elmIconWrap, 'image-group-item-title' )[ 0 ], + SRC = [ BASE_PATH, data.id, '.', data.ext ].join( ''), + LOW_SRC = data.filesize && data.filesize > LIMIT_FILESIZE ? [ THUMB_PATH, data.id, '.', data.ext ].join( '') : null, + reversibleImage = null, + timer = null, + onEnterFlag = false, + instance = this; + elmContainer.appendChild( elmIconWrap ); + elmIconWrap.style.left = ( INDEX * itemW ) + 'px'; + elmIconTitle.appendChild( document.createTextNode( data.filesize + 'bytes' ) ); - return { - init: function( _option){ - option = _option; - delete pettanr.cabinet.init; - }, - firstOpen: function(){ - finder = pettanr.finder.createFinder( elmContainer, pettanr.driver.createComicTree()); - delete pettanr.cabinet.firstOpen; - }, - onOpen: function(){ - pettanr.cabinet.firstOpen !== undefined && pettanr.cabinet.firstOpen(); - finder.onOpen(); + function onImageLoad( url, _imgW, _imgH ){ + data.width = _imgW = _imgW || data.width || 64; + data.height = _imgH = _imgH || data.height || 64; + elmIconTitle.firstChild.data = _imgW + 'x' + _imgH; + var zoom = 128 /( _imgW > _imgH ? _imgW : _imgH ), + MATH_FLOOR = Math.floor, + h = MATH_FLOOR( _imgH * zoom ), + w = MATH_FLOOR( _imgW * zoom ); + reversibleImage.elm.style.cssText = [ + 'width:', w, 'px;', + 'height:', h, 'px;', + 'margin:', MATH_FLOOR( itemH / 2 - h / 2 ), 'px ', MATH_FLOOR( itemW / 2 - w / 2 ), 'px 0' + ].join(''); + reversibleImage.resize( w, h ); + elmIconWrap.onclick = onClick; + } + + function onClick(){ + onUpdateData = data; + pettanr.premiumSatge.shutdown(); + } + + function asyncDraw(){ + reversibleImage = pettanr.image.createReversibleImage( LOW_SRC || SRC, itemW, itemH, onImageLoad ); + elmIconWrap.appendChild( reversibleImage.elm ); + onEnterFlag = true; + timer = null; + } + + this.onEnter = function( delay ){ + timer = window.setTimeout( asyncDraw, delay ); + delete instance.onEnter; + } + this.destroy = function(){ + delete instance.destroy; + timer && window.clearTimeout( timer ); + reversibleImage && reversibleImage.destroy(); + pettanr.util.removeAllChildren( elmIconWrap ); + elmContainer.removeChild( elmIconWrap ); + elmIconWrap.onclick = ''; + reversibleImage = elmIconWrap = elmIconTitle = data = timer = null; + } + } + + function onEnterShowImage(){ + var l = ICON_ARRAY.length, + _start = -wrapX /itemW -1, + _end = _start + winW /itemW +1, + _icon; + for( var i=0, c = 0; i 0 ? 0 : wrapX < winW -containerW ? winW -containerW : wrapX; + jqContainer.css( { left: wrapX}); - }, - onClose: function(){ - finder.onClose(); - }, - onWindowResize: function( _w, _h){ - finder.onWindowResize( _w, _h); + onEnterInterval !== null && window.clearTimeout( onEnterInterval ); + onEnterInterval = window.setTimeout( onEnterShowImage, 500 ); } + //e.stopPropagation(); + return false; } -})(); + + function drawIcons(){ + while( ICON_ARRAY.length > 0 ){ + ICON_ARRAY.shift().destroy(); + } + + var _index = ARTIST_ROOT_FILE.search( { + id: artistID, + type: pettanr.driver.FILE_TYPE.ARTIST + })[ 0 ], + _artistFile = ARTIST_ROOT_FILE.getChildFileByIndex( _index ), + _file; + if( _artistFile !== null ){ + for(var i=0, l=_artistFile.getChildFileLength(); i 0 ){ + ICON_ARRAY.shift().destroy(); + } + onUpdateFunction !== null && onUpdateData !== null && onUpdateFunction( onUpdateData ); + onUpdateFunction = onUpdateData = null; + } + + /* grobal method */ + // this.rootElement = elmWrap; + this.displayName = 'premiumStage'; + this.ID = 'premiumStage'; + this.rootElement = elmWrap; + this.MIN_WIDTH = 320; + this.MIN_HEIGHT = 320; + this.init = function(){ + jqContainer = $( elmContainer ).mousewheel( onMouseWheel ); + + // よくない! 一時的な処理,,, + //var tree = pettanr.driver.createPictureTree(); + //tree.addTreeEventListener( pettanr.file.TREE_EVENT.UPDATE, drawIcons ); + + delete instance.init; + } + this.onOpen = function( _windowW, _windowH, _ARTISTIDorFILE, _onUpdateFunction ){ + instance.init && instance.init(); + + if( pettanr.driver.isPettanrFileInstance( _ARTISTIDorFILE ) === true ){ + var _data = pettanr.driver._getAPI().getFileData( _ARTISTIDorFILE ); + if( _ARTISTIDorFILE.getType() === pettanr.driver.FILE_TYPE.ARTIST || pettanr.driver._getMyPicturesData() === _data ){ + artistID = _data.id || -1; + } + } else + if( Type.isNumber( _ARTISTIDorFILE ) === true ){ + artistID = _ARTISTIDorFILE; + } + + onUpdateFunction = _onUpdateFunction || null; + onUpdateData = null; + + drawIcons(); + + wrapX = 0; + containerW = ICON_ARRAY.length * itemW; + + winW = _windowW; + winH = _windowH; + var w = winW > containerW ? winW : containerW, + h = _windowH > containerH ? containerH : _windowH, + MATH_FLOOR = Math.floor; + + jqContainer.css( { + width: w, + height: 0, + left: 0, + top: MATH_FLOOR( _windowH /2) + }).stop().animate( { + height: h, + top: MATH_FLOOR( _windowH /2 -h /2) + }, onEnterShowImage ); + + elmButton.style.cssText = [ + 'left:', MATH_FLOOR( winW /2 - buttonW /2), 'px;', + 'top:', MATH_FLOOR( _windowH /2 + containerH /2 +10), 'px' + ].join(''); + } + this.onPaneResize = function( _windowW, _windowH ){ + var w = _windowW > containerW ? _windowW : containerW, + h = _windowH > containerH ? containerH : _windowH, + MATH_FLOOR = Math.floor, + offsetW = MATH_FLOOR( _windowW /2 -winW /2); + + winW = _windowW; + winH = _windowH; + if( offsetW <= 0){ // smaller + jqContainer.css( { + left: offsetW, + width: w + }).animate( { + left: 0, + top: MATH_FLOOR( _windowH /2 -h /2) + }); + } else { + jqContainer.css( { // bigger + left: 0, + width: w, + borderLeftWidth: offsetW + }).animate( { + top: MATH_FLOOR( _windowH /2 -h /2), + borderLeftWidth: 0 + }); + } + elmButton.style.cssText = [ + 'left:', MATH_FLOOR( _windowW /2 -buttonW /2), 'px;', + 'top:', MATH_FLOOR( _windowH /2 +containerH /2 +10), 'px' + ].join(''); + onEnterShowImage(); + } + this.onClose = function(){ + jqContainer.stop().animate( { + height: 0, + top: Math.floor( winH /2 ) + }, onFadeout ); + onEnterInterval !== null && window.clearTimeout( onEnterInterval ); + onEnterInterval = null; + } +}); + + +/* ---------------------------------------- + * Text Editor + * - overlay + */ +pettanr.textEditor = pettanr.view.registerApplication( function(){ + var jqWrap, jqTextarea, jqButton, + textElement, onUpdateFunction, + ID = 'textEditor', + panelX, panelY, + instance = this; + //pettanr.key.addKeyDownEvent( ID, 69, false, false, clickOK); + + function clickOK(){ + textElement && textElement.text( jqTextarea.val() ); + window.setTimeout( asyncCallback, 0 ); + } + + function asyncCallback(){ + onUpdateFunction && onUpdateFunction( textElement ); + onUpdateFunction = textElement = null; + pettanr.textEditor.shutdown(); + } + + function keyCancel( e ){ + if( e.keyCode === 69 && e.shiftKey === false && e.ctrlKey === true){ + clickOK(); + e.preventDefault(); + e.keyCode = 0; + e.cancelBubble = true; + e.returnValue = false; + return false; + } + } + function textareaFitHeight(){ + var rows = 0; + while( jqTextarea.height() < textElement.h ){ + rows++; + jqTextarea.attr( 'rows', rows ); + } + rows > 1 && jqTextarea.attr( 'rows', --rows ); + } + + /* grobal method */ + // this.rootElement = elmWrap; + this.displayName = 'textEditor'; + this.ID = 'textEditor'; + this.rootElement = document.getElementById( 'speach-editor-wrapper' ); + this.MIN_WIDTH = 320; + this.MIN_HEIGHT = 320; + this.init = function(){ + jqWrap = $( '#speach-editor-wrapper' ).hide(); + jqTextarea = $( '#speach-editor' ).keydown( keyCancel ); + jqButton = $( '#speach-edit-complete-button').click( clickOK ); + delete instance.init; + } + this.onOpen = function( _w, _h, _panelX, _panelY, _textElement, _onUpdateFunction ){ + instance.init && instance.init(); + + panelX = _panelX; + panelY = _panelY; + textElement = _textElement; + onUpdateFunction = _onUpdateFunction || null; + + jqWrap.show(); + instance.onPaneResize( _w, _h ); + jqTextarea.val( _textElement.text() ).focus(); + + /* + * ie6,7は、textarea { width:100%}でも高さが変わらない。rowsを設定。 + */ + pettanr.ua.isIE === true && pettanr.ua.ieVersion <= 7 && setTimeout( textareaFitHeight, 0); + } + this.onPaneResize = function( _w, _h ){ + jqWrap.css( { + left: textElement.x + panelX, + top: textElement.y + panelY, + width: textElement.w, + height: textElement.h + }); + } + this.onClose = function(){ + jqWrap.hide(); + } +}); // i18n // login @@ -1212,7 +2094,9 @@ pettanr.fn( pettanr.view); pettanr.fn( pettanr.overlay); pettanr.fn( pettanr.key); pettanr.fn( pettanr.balloon); + pettanr.fn( pettanr.editor); + pettanr.fn( pettanr.file); pettanr.fn( pettanr.finder); pettanr.fn( pettanr.gallery);