X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=public%2Fassets%2Fsystem.js;h=22c8c97f918e0ecd822c4cc0a2f7cea8e40c1c41;hb=4bae6869e17fab74c2cbd834e00002a033d2c4e6;hp=88a4ac370cfdc9dd6693de9625ca9b30bb884695;hpb=85f03f74712cc59441ce6a25c9811c27647fecd6;p=pettanr%2Fpettanr.git diff --git a/public/assets/system.js b/public/assets/system.js index 88a4ac37..22c8c97f 100644 --- a/public/assets/system.js +++ b/public/assets/system.js @@ -1,6 +1,6 @@ /* * pettanR system.js - * version 0.4.2 + * version 0.4.20 * * author: * itozyun @@ -35,41 +35,14 @@ pettanr.io = ( function(){ * 画像一覧を読み込むタイミング */ pettanr.file = ( function(){ - var TREE_TYPE_IS_COMIC = 1, - TREE_TYPE_IS_IMAGE = 2, - FILE_TYPE_IS_FOLDER = 1, - FILE_TYPE_IS_COMIC = 10, - FILE_TYPE_IS_PANEL = 11, - FILE_TYPE_IS_IMAGE = 20, - FILE_TYPE_IS_HTML = 30, - FILE_TYPE_IS_SETTING = 40, - FOLDER_TYPE_IS_COMIC = 1, - FILE_STATE_IS_UNKNOWN = 0, - FILE_STATE_IS_OK = 1, - FILE_STATE_IS_LOADING = 2, - FILE_STATE_IS_ERROR = 3, - FILE_STATE_IS_BROKEN = 4, - TREE_EVENT_UPDATE = 'onTreeUpdate', - FILE_EVENT_UPDATE_ATTRIVUTE = 'onFileUpdate', - FILE_EVENT_GET_SEQENTIAL_FILES = 'gotSeqentilFiles', - ROLE_IS_SUPER_USER = 2^4, - ROLE_IS_OWNER = 2^3, - ROLE_IS_CREATOR = 2^2, - ROLE_IS_ARTIST = 2^1, - ROLE_IS_VISITOR = 2^0, - ROLE_IS_UNKROWN = 2^-1, - UPDATE_POLICY_SOCAV = parseInt( '11111', 2),// s: super user - UPDATE_POLICY_SOCA_ = parseInt( '11110', 2),// o: owner( comic || panel || picture ) - UPDATE_POLICY_SOC__ = parseInt( '11100', 2),// c: creator - UPDATE_POLICY_SO_A_ = parseInt( '11010', 2),// a: artist - UPDATE_POLICY_SO___ = parseInt( '11000', 2),// v: visitor - UPDATE_POLICY__O___ = parseInt( '01000', 2),// l: lisence manager - UPDATE_POLICY_S____ = parseInt( '10000', 2), - UPDATE_POLICY______ = parseInt( '00000', 2), + var FILE_TYPE_IS_FOLDER = 1, + numFileType = FILE_TYPE_IS_FOLDER, FILEDATA_RESITER = [], // store all of fileData( json object ) - FILEDATA_HAS_domainID_RESISTER = {}, FILEDATA_ACCESS = [], // file operations for Kernel only ! hide from Out of pettanr.file - FILE_OBJECT_POOL = []; + FILE_OBJECT_POOL = [], + EVENT_LISTENER_REGISTER = [], + TREE_ARRAY = [], + TREE_ACCESS_ARRAY = []; var REQUEST_CONTROLER = ( function(){ var REQUEST_TICKET_RESISTER = [], @@ -106,9 +79,6 @@ pettanr.file = ( function(){ } return { - init: function(){ - delete REQUEST_CONTROLER.init; - }, getNumTask: function(){ return REQUEST_TICKET_RESISTER.length; }, @@ -124,369 +94,234 @@ pettanr.file = ( function(){ - var FILE_CONTROLER = ( function(){ - var EVENT_LISTENER_RESISTER = [], - TREE_ARRAY = [], - TREE_ACCESS_ARRAY = [], - instance; - - var TreeClass = function( ROOTFILE_DATA){ - var UID = TREE_ACCESS_ARRAY.length, - PARENT_FILE_RESITER = [], - ACCESS = { - fileEventChatcher: dispatchFileEvent, - destroy: onDestroy - }, - EVENT_LISTENER_ARRAY = [], - rootFile, - rootFileData, - currentFile, - currentFileData, - instance; - - TREE_ACCESS_ARRAY.push( ACCESS); - - function onDestroy(){ - - } - - function dispatchFileEvent( e){ - var _eventType = e.eventType, - _targetFile = e.targetFile, - _ticket, _type, _file, _callback, - l = EVENT_LISTENER_RESISTER.length; - for(var i=0; i= l) return null; - return PARENT_FILE_RESITER[ l -1 -_index]; - }, - down: function( _index){ - if( typeof _index !== 'number' || _index < 0 || _index >= currentFile.getChildFileLength()) return; - PARENT_FILE_RESITER.unshift( currentFile); - currentFile = currentFile.getChildFileByIndex( _index); - FILE_CONTROLER.getSeqentialFiles( currentFile); - return currentFile; - }, - up: function( _index){ - var l = PARENT_FILE_RESITER.length; - if( l === 0) return null; - if( typeof _index === 'number'){ - if( _index >= l) return null; - currentFile = this.getParentFileAt( _index); - PARENT_FILE_RESITER.splice( 0, l -_index); - } else { - currentFile = PARENT_FILE_RESITER.shift(); - } - FILE_CONTROLER.getSeqentialFiles( currentFile); - return currentFile; - }, - addTreeEventListener: function( _eventType, _callback){ - EVENT_LISTENER_RESISTER.push( new FileEventTicketClass( null, _eventType, _callback)); - }, - removeTreeEventListener: function( _eventType, _callback){ - - }, - createSearchResultFolder: function( _searchParam){ - - }, - destroySearchResultFolder: function( _searchParam){ - - }, - destroy: function(){ - destroyTree( UID); - } + var uid = pettanr.util.getIndex( FILEDATA_RESITER, FILEDATAorFILE ); + if( uid === -1){ + uid = FILEDATA_RESITER.length; + FILEDATA_RESITER.push( FILEDATAorFILE ); } - }; - /** - * _access.DATA === FILEDATA_RESITER[uid] - */ - function getFileDataAccess( UIDorFILEorFILEDATA){ - var l = FILEDATA_ACCESS.length, - _uid, - _data, - _access; + 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; + _data = FILEDATA_RESITER[ _uid ] || null; } else { _data = UIDorFILEorFILEDATA || null; } - if( _data === null || !_data) return null; - for(var i=0; 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= l) return null; + return PARENT_FILE_RESITER[ l -1 -_index]; }, - move: function( _prentUID, _targetfile, _newFolder, _newIndex, _opt_callback){ - var _parentData = getFileDataAccess( _prentUID), - _parentType = _parentData.TYPE, - _targetData = getFileDataAccess( _targetfile), - _targetType = _targetData.TYPE; + down: function( _index){ + if( typeof _index !== 'number' || _index < 0 || _index >= currentFile.getChildFileLength()) return; + PARENT_FILE_RESITER.unshift( currentFile ); + currentFile = currentFile.getChildFileByIndex( _index ); + currentFile.getSeqentialFiles(); + return currentFile; }, - replace: function( _uid, _file, _newIndex){ + 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 ); + PARENT_FILE_RESITER.splice( 0, l -_index); + } else { + currentFile = PARENT_FILE_RESITER.shift(); + } + currentFile.getSeqentialFiles(); + return currentFile; }, - fileEventRellay: function( _targetFile, _targetTree, _event){ - var _uid = _targetTree.getUID(), - _access = TREE_ACCESS_ARRAY[ _uid], - l = TREE_ARRAY.length, - _tree, _currentFile; - _access !== undefined && _access.fileEventChatcher( _event); - for(var i=0; i 0 ){ + _currentFile = PARENT_FILE_RESITER.shift(); + _currentFile.destroy(); } + instance = null; } } - })(); + }; var FileEventTicketClass = function( UID, _eventType, _callback){ - return { - fileUID: UID, - eventType: _eventType, - callBack: _callback, - destroy: function(){ - this.callBack = _callback = null; - } + this.fileUID = UID; + this.eventType = _eventType; + this.callBack = _callback; + this.destroy = function(){ + this.callBack = _callback = null; } } var FileEventClass = function( eventType, file, key, value){ - return { - eventType: eventType, - targetFile: file, - updatedAttribute: key, - updatedValue: value - } + this.eventType = eventType; + this.targetFile = file; + this.updatedAttribute = key; + this.updatedValue = value; } /* @@ -495,198 +330,445 @@ 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 = data.name || null, - thumbnail = null, - uid = FILE_CONTROLER.getUID( data), - CHILDREN = data.children, - instance; - - if( uid === -1){ - //alert( 'invalid uid'); - uid = FILEDATA_RESITER.length; - FILEDATA_RESITER.push( data); - } + var FileClass = function( tree, parentData, data ){ + var uid = FILE_CONTROLER.getFileUID( data ), + instance = this; FILEDATA_ACCESS.push( { - TYPE: TYPE, + TREE: tree, + parentData: parentData, DATA: data, - destroy: destroy, - updateParent: updateParent, - fileEventChatcher: dispatchEvent + dispatchFileEvent: dispatchEvent } ); - function destroy(){ - name = thumbnail = parentFile = data = CHILDREN = 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; + tree = parentData = data = null; + + function dispatchEvent( e ){ + FILE_CONTROLER.fileEventRellay( uid, e ); } - this.TYPE = function(){ - return TYPE; + this.getUID = function(){ + return uid; } - this.getName = function(){ - if( name !== null) return name; - if( data.name){ - return data.name; + }; + + FileClass.prototype = { + isChildFile: function( _FILEorFILEDATA){ + return this.getChildFileIndex( _FILEorFILEDATA) !== -1; + }, + getSeqentialFiles: function(){ + var _driver = FILE_CONTROLER.getDriver( this ); + if( _driver !== null && typeof _driver.getSeqentialFiles === 'function' ){ + _driver.getSeqentialFiles( this ); } - if( TYPE === FILE_TYPE_IS_IMAGE){ - name = [ data.id, data.ext].join( '.'); - } else - if( TYPE === FILE_TYPE_IS_PANEL){ - name = data.comic.title + ' | ' +data.t; + }, + addEventListener: function( _eventType, _callback ){ + FILE_CONTROLER.addEventListener( this, _eventType, _callback ); + }, + removeEventListener: function( _eventType, _callback ){ + FILE_CONTROLER.removeEventListener( this, _eventType, _callback ); + }, + getChildFileLength: function(){ + var children = FILE_CONTROLER.getChildren( this ); + return Type.isArray( children ) === true ? children.length : -1; + }, + getChildFileIndex: function( _FILEorFILEDATA ){ + var children = FILE_CONTROLER.getChildren( this); + if( Type.isArray( children ) === false ) 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; - _file = new FileClass( TREE, this, CHILDREN[ _index]); - _file.init(); + 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 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(){ + + }, + 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, _access.data, _children[ _index ]); + // _file.init(); return _file; - } - this.getChildFileIndex = function( _FILEorFILEDATA){ - 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 0){ - _file = FILE_OBJECT_POOL.shift(); - } else { - _file = new FileClass(); - } - _file.init( TREE, parentFile, data); - return _file; } var ROOT_FILEDATA = { - name: 'root', + name: 'system root', type: FILE_TYPE_IS_FOLDER, children: [] }, - IMAGE_FILEDATA = { - name: 'image root', - type: FILE_TYPE_IS_FOLDER, - json: pettanr.CONST.URL_ORIGINAL_PICTURES_JSON, - children: [ - { - name: 'My Pictures', - type: FILE_TYPE_IS_FOLDER, - children: [], - childType: FILE_TYPE_IS_IMAGE - } - ], - childType: FILE_TYPE_IS_IMAGE - }, - COMIC_FILEDATA = { - name: 'comic root', - type: FILE_TYPE_IS_FOLDER, - json: pettanr.CONST.URL_PANELS_JSON, - children: [ - { - name: 'My Comics', - type: FILE_TYPE_IS_FOLDER, - children: [], - childType: FILE_TYPE_IS_COMIC - } - ], - childType: FILE_TYPE_IS_PANEL - }; - //FILEDATA_RESITER.push( ROOT_FILEDATA, IMAGE_FILEDATA, IMAGE_FILEDATA.children[0], COMIC_FILEDATA); - ROOT_FILEDATA.children.push( COMIC_FILEDATA, IMAGE_FILEDATA); - - var SYSTEM_TREE = FILE_CONTROLER.createTree( ROOT_FILEDATA), - ROOT_FILE = SYSTEM_TREE.getRootFile(), - COMIC_ROOT_INDEX = ROOT_FILE.getChildFileIndex( COMIC_FILEDATA), - IMAGE_ROOT_INDEX = ROOT_FILE.getChildFileIndex( IMAGE_FILEDATA); - + SYSTEM_TREE = FILE_CONTROLER.createTree( ROOT_FILEDATA), + ROOT_FILE = SYSTEM_TREE.getRootFile(); + + function createFolderUnderRoot( _fileData){ + ROOT_FILEDATA.children.push( _fileData); + FILE_CONTROLER.getFileDataAccess( ROOT_FILE) + .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); + } + function createFileTypeID(){ + return ++numFileType; + } + return { init: function(){ - REQUEST_CONTROLER.init(); - FILE_CONTROLER.init(); + //REQUEST_CONTROLER.init(); + //FILE_CONTROLER.init(); delete pettanr.file.init; }, - createTree: function( _treeType){ - var _rootFile; - if( _treeType === TREE_TYPE_IS_COMIC) _rootFile = COMIC_FILEDATA; - if( _treeType === TREE_TYPE_IS_IMAGE) _rootFile = IMAGE_FILEDATA; - if( !_rootFile) return null; + registerDriver: function( _driver ){ + _driver.prototype = FileDriverBase; + /* + * File API + */ + return { + createFolderUnderRoot: createFolderUnderRoot, + getFileDataAccess: FILE_CONTROLER.getFileDataAccess, + getFileData: FILE_CONTROLER.getFileData, + getJson: REQUEST_CONTROLER.getJson, + createFileEvent: createFileEvent, + createFileTypeID: createFileTypeID + } + }, + createTree: function( _rootFile){ return FILE_CONTROLER.createTree( _rootFile); }, - TREE_TYPE_IS_COMIC: 1, - TREE_TYPE_IS_IMAGE: 2, - TREE_TYPE_IS_SETTING: 3, - FILE_TYPE_IS_FOLDER: FILE_TYPE_IS_FOLDER, - FILE_TYPE_IS_IMAGE: FILE_TYPE_IS_IMAGE, - FILE_TYPE_IS_PANEL: FILE_TYPE_IS_PANEL, - FILE_TYPE_IS_SETTING: FILE_TYPE_IS_SETTING + isTreeInstance: function( _tree){ + return _tree instanceof TreeClass; + }, + isFileInstance: function( _file){ + return _file instanceof FileClass; + }, + FILE_TYPE: { + UNKNOWN: 0, + FOLDER: FILE_TYPE_IS_FOLDER, + IMAGE: createFileTypeID(), + TEXT: createFileTypeID(), + HTML: createFileTypeID(), + CSV: createFileTypeID(), + JSON: createFileTypeID(), + XML: createFileTypeID() + }, + FILE_STATE: { + UNKNOWN: 0, + OK: 1, + LOADING: 2, + 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' + }, + FILE_EVENT: { + UPDATE_ATTRIVUTE: 'onFileUpdate', + GET_SEQENTIAL_FILES:'gotSeqentilFiles' + }, + FILE_DATA_PROPERTY_RESERVED: [ + 'children', 'driver', 'state', 'type' + ] } })(); @@ -696,58 +778,105 @@ pettanr.finder = ( function(){ ELM_ORIGIN_FINDER_ICON = pettanr.util.pullHtmlAsTemplete( 'templete-finder-icon'), 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.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); + 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 !== null){ + if( _thumb.image ){ ELM_THUMBNAIL.className = ICON_CLASSNAME + ' has-thumbnail'; - ELM_THUMBNAIL.style.backgroundImage = [ 'url(', _thumb, ')'].join( ''); + ELM_THUMBNAIL.style.backgroundImage = [ 'url(', _thumb.image, ')'].join( ''); } else { - ELM_THUMBNAIL.className = ICON_CLASSNAME + ' file-type-' +file.TYPE(); + 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'; } 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){ @@ -758,12 +887,13 @@ pettanr.finder = ( function(){ return style; }, - onResize: function( w){ + onResize: function( w ){ }, - collect: function(){ + 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); } } @@ -779,7 +909,7 @@ pettanr.finder = ( function(){ callback; ELM_WRAPPER.onclick = onClick; function draw(){ - ELM_FILENAME.className = 'file-icon-' +file.TYPE(); + ELM_FILENAME.className = 'file-icon-' +file.getType(); ELM_FILENAME.innerHTML = file.getName(); } function resize( index){ @@ -787,12 +917,13 @@ pettanr.finder = ( function(){ } function onClick(){ callback( index); + return false; } 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; } @@ -814,40 +945,44 @@ pettanr.finder = ( function(){ onResize: function( w){ }, - collect: 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_TYPE, 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], - tree = pettanr.file.createTree( TREE_TYPE), + 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( 'onTreeUpdate', draw); + style = 0, + w, h, bodyH, + instance = this; + + tree.addTreeEventListener( pettanr.file.TREE_EVENT.UPDATE, draw ); - 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; @@ -856,11 +991,11 @@ 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){ - BREAD_ARRAY.pop().collect(); + BREAD_ARRAY.pop().destroy(); } l = _file.getChildFileLength(); @@ -868,67 +1003,93 @@ pettanr.finder = ( function(){ for( i=0; 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; } @@ -947,69 +1108,939 @@ pettanr.finder = ( function(){ init: function(){ }, - createFinder: function( _elmTarget, _treeType, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){ - var _finder = new FinderClass( _elmTarget, _treeType, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled); - FINDER_ARRAY.push( _finder); + createFinder: function( _elmTarget, _tree, _header, _footer ){ + var _finder = new FinderClass( _elmTarget, _tree, _header, _footer ); + FINDER_ARRAY.push( _finder ); return _finder; + }, + registerFinderHead: function(){ + + }, + registerFinderPane: function( _finderPane){ + + }, + isFinderInstance: function( _finder){ + return _finder instanceof FinderClass; + }, + isFinderPaneInstance: function(){ + + }, + isFinderHeadInstance: function(){ } } })(); -pettanr.gallery = ( function(){ - var finder, - elmContainer = document.getElementById( 'gallery'), - option; + +pettanr.driver = ( function(){ + 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; + _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 ){ + return [ _data.id, _data.ext ].join( '.'); + } else + if( _type === pettanr.driver.FILE_TYPE.PANEL ){ + return [ _data.t, ':', _data.comic.title ].join( ''); + } else + if( _type === pettanr.driver.FILE_TYPE.COMIC ){ + return _data.title; + } else + if( _type === pettanr.driver.FILE_TYPE.ARTIST ){ + return [ _data.id , ':', _data.name, '画伯' ].join( ''); + } else + if( _type === pettanr.driver.FILE_TYPE.AUTHOR ){ + return [ _data.id , ':', _data.name, '先生' ].join( ''); + } + return _data.name; + }, + getThumbnail: function( _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_COMICS_ROOT){ + return { className: 'file-type-cabinet'}; + } + if( _type === pettanr.driver.FILE_TYPE.COMIC){ + return { className: 'file-type-comic'}; + } + if( _type === pettanr.driver.FILE_TYPE.PANEL){ + return { className: 'file-type-panel'}; + } + if( _type === pettanr.driver.FILE_TYPE.AUTHOR){ + return { className: 'file-type-author'}; + } + if( _type === pettanr.driver.FILE_TYPE.ARTIST){ + return { className: 'file-type-artist'}; + } + if( _type === pettanr.file.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'; + } + if( _type === pettanr.driver.FILE_TYPE.PANEL){ + return [ _data.width, 'x', _data.height ].join( '' ); + } + if( _type === pettanr.driver.FILE_TYPE.AUTHOR){ + return 'author file'; + } + if( _type === pettanr.driver.FILE_TYPE.ARTIST){ + return [ '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.registerDriver( Driver ), + FILE_DATA_SERVICE_ROOT = { + name: 'PettanR root', + type: pettanr.file.FILE_TYPE.FOLDER, + children: [] + }, + 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 = { + name: 'Picutures', + type: pettanr.file.FILE_TYPE.FOLDER, + children: [], + driver: Driver, + json: pettanr.CONST.URL_RESOURCE_PICTURES_JSON + }, + FILE_DATA_MY_COMICS_ROOT = { + name: 'My Comics', + type: pettanr.file.FILE_TYPE.FOLDER, + children: [], + driver: Driver + }, + 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: [], + driver: Driver, + json: pettanr.CONST.URL_ORIGINAL_PICTURES_JSON + }, + FILE_DATA_AUTHOR_ROOT = { + name: 'Authors', + type: pettanr.file.FILE_TYPE.FOLDER, + children: [] + }, + FILE_DATA_ARTIST_ROOT = { + name: 'Artists', + type: pettanr.file.FILE_TYPE.FOLDER, + children: [] + }, + FILE_DATA_LISENCE_ROOT = { + name: 'Original Lisences', + type: pettanr.file.FILE_TYPE.FOLDER, + children: [] + }, + FILE_DATA_BALLOON_ROOT = { + name: 'Balloon templetes', + type: pettanr.file.FILE_TYPE.FOLDER, + children: [] + }, + AUTHOR_ARRAY = [], + ARTIST_ARRAY = [], + PANEL_ARRAY = [], + COMIC_ARRAY = [], + RESOURCE_PICTURE_ARRAY = [], + 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_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 ){ + var _access = FileAPI.getFileDataAccess( _file), + _data = _access !== null ? _access.DATA : null, + l; + if( _data === null){ + onErrorJson( _file); + return; + } + _data.state = pettanr.file.FILE_STATE.OK; + if( Type.isArray( _json ) === true ){ + l = _json.length; + 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){ + if( _reserved.indexOf( key ) === -1 ){ + __data[ key ] = _data[ key ]; + } + } + _data = __data; // このタイミングで参照が切れるので注意!! + } else { + _array[ _id ] = _data; + } + } else { + alert( 'error' ); + } + + // 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); + } + this.displayName = 'Debug'; + this.ID = 'debug'; + this.rootElement = document.getElementById( 'debug' ); + this.onOpen = function( _w, _h, _option ){ + var pageHeaderH = pettanr.util.getElementSize( document.getElementById( 'header' )).height; + document.getElementById( 'inner-wrapper' ).style.height = ( _h - pageHeaderH ) + 'px'; + } + this.onClose = function(){ + document.getElementById( 'inner-wrapper' ).style.height = '0px'; + } + this.onPaneResize = function( _w, _h ){ + pettanr.debug.onOpen( _w, _h ); + } + }); + pettanr.debug.addToLancher(); + +} else { + var _debug = document.getElementById( 'debug'); + if( _debug){ + pettanr.util.removeAllChildren( _debug); + _debug.parentNode.removeChild( _debug); + _debug = null; + } +} + +/* ---------------------------------------- + * 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-gruop-wrapper' ), + elmContainer = document.getElementById( 'image-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-gruop-item'; + data.className = 'image-gruop-item-title'; + return ret; + })(), + jqContainer, + size = pettanr.util.getElementSize( elmIconOrigin ), + itemW = size.width, + itemH = size.height, + elmName = document.getElementById( 'gruop-name-display' ), + elmButton = document.getElementById( 'image-gruop-button' ), + buttonW = pettanr.util.getElementSize( elmButton ).width, + //onUpdateFunction, + _g_onUpdateFunction, + 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, file ){ + var elmIconWrap = elmIconOrigin.cloneNode( true ), + elmIconTitle = pettanr.util.getElementsByClassName( elmIconWrap, 'image-gruop-item-title' )[ 0 ], + data = pettanr.driver._getAPI().getFileData( file ), + 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, + onEnterFlag = false, + imgW, imgH; + elmContainer.appendChild( elmIconWrap ); + elmIconWrap.style.left = ( INDEX * itemW ) + 'px'; + elmIconTitle.appendChild( document.createTextNode( data.filesize + 'bytes' )); + + function onImageLoad( url, _imgW, _imgH ){ + if( reversibleImage === null) { + alert( url); + return; + } + 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( e ){ + if( _g_onUpdateFunction ) { + //if( LOW_SRC === null){ + window[ _g_onUpdateFunction]( data ); + window[ _g_onUpdateFunction] = null; + /* + } else { + var _onLoad = pettanr.util.createGlobalFunc( [ + 'function( url, w, h ){', + 'window["', _g_onUpdateFunction, '"]( url, w || ', data.width,', h || ', data.height,');', + 'window["', _g_onUpdateFunction, '"] = null;', + '}' + ].join( '')), + _onError = pettanr.util.createGlobalFunc( [ + 'function( url){', + 'window["', _g_onUpdateFunction, '"]( url, ', data.width || 64 ,', ', data.height || 64,');', + 'window["', _g_onUpdateFunction, '"] = null;', + '}' + ].join( '')); + pettanr.util.loadImage( SRC, window[ _onLoad], window[ _onError]); + window[ _onLoad] = window[ _onError] = undefined; + }*/ + } + pettanr.premiumSatge.shutdown(); + } + + this.onEnter = function(){ + if( onEnterFlag === true ) return; + reversibleImage = pettanr.image.createReversibleImage( LOW_SRC || SRC, itemW, itemH, onImageLoad ); + elmIconWrap.appendChild( reversibleImage.elm ); + onEnterFlag = true; + } + this.destroy = function(){ + reversibleImage && reversibleImage.destroy(); + pettanr.util.removeAllChildren( elmIconWrap ); + elmContainer.removeChild( elmIconWrap ); + file.destroy(); + reversibleImage = elmIconWrap = elmIconTitle = data = file = null; + delete this.destroy; + } + } + + function onEnterShowImage(){ + var l = ICON_ARRAY.length, + _start = -wrapX /itemW -1, + _end = _start + winW /itemW +1; + for( var i=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; } -})(); + + /* 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 ); + delete instance.init; + } + this.onOpen = function( _windowW, _windowH, _ARTISTIDorFILE, _onUpdateFunction ){ + instance.init && instance.init(); + + var _data, _artistID = -1; + + if( pettanr.driver.isPettanrFileInstance( _ARTISTIDorFILE ) === true ){ + if( _ARTISTIDorFILE.getType() === pettanr.driver.FILE_TYPE.ARTIST ){ + _data = pettanr.driver._getAPI().getFileData( _ARTISTIDorFILE ); + _artistID = _data !== null ? _data.id || 0 : -1; + } + } else + if( Type.isNumber( _ARTISTIDorFILE ) === true ){ + _artistID = _ARTISTIDorFILE; + } + + //onUpdateFunction = _onUpdateFunction; + if( _onUpdateFunction ){ + _g_onUpdateFunction = pettanr.util.createGlobalFunction( _onUpdateFunction); + } else { + _g_onUpdateFunction = null; + } + + var _index = ARTIST_ROOT_FILE.search( { + id: _artistID, + type: pettanr.driver.FILE_TYPE.ARTIST + } )[ 0 ], + _artistFile = ARTIST_ROOT_FILE.getChildFileByIndex( _index ), + i, l = 0; + if( _artistFile !== null ){ + for( i=0, l=_artistFile.getChildFileLength(); i containerW ? winW : containerW, + h = _windowH > containerH ? containerH : _windowH, + MATH_FLOOR = Math.floor; + + onEnterShowImage(); + + jqContainer.css( { + width: w, + height: 0, + left: 0, + top: MATH_FLOOR( _windowH /2) + }).stop().animate( { + height: h, + top: MATH_FLOOR( _windowH /2 -h /2) + }); + + 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 ) + }); + while( ICON_ARRAY.length > 0 ){ + ICON_ARRAY.shift().destroy(); + } + onEnterInterval !== null && window.clearTimeout( onEnterInterval ); + onEnterInterval = _g_onUpdateFunction = 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() ); + onUpdateFunction && onUpdateFunction( textElement ); + 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; + } + } + + /* 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(){ + instance.jqWrap = jqWrap = $( '#speach-editor-wrapper' ).hide(); + jqTextarea = $( '#speach-editor' ).keydown( keyCancel ); + jqButton = $( '#speach-edit-complete-button').click( clickOK ); + delete instance.init; + } + this.jqWrap = null; + this.onOpen = function( _w, _h, _panelX, _panelY, _textElement, _onUpdateFunction ){ + instance.init && instance.init(); + + panelX = _panelX; + panelY = _panelY; + textElement = _textElement; + onUpdateFunction = _onUpdateFunction || null; + + var h = _textElement.h; + + instance.onPaneResize( _w, _h ); + jqTextarea.val( _textElement.text() ).focus(); + + /* + * ie6,7は、textarea { width:100%}でも高さが変わらない。rowsを設定。 + */ + pettanr.ua.isIE === true && pettanr.ua.ieVersion <= 7 && setTimeout( function(){ + var rows = 0; + while( jqTextarea.height() < h){ + rows++; + jqTextarea.attr( 'rows', rows); + } + rows > 1 && jqTextarea.attr( 'rows', rows -1 ); + }, 0); + } + this.onPaneResize = function( _w, _h ){ + jqWrap.show().css( { + left: textElement.x + panelX, + top: textElement.y + panelY, + width: textElement.w, + height: textElement.h + }); + } + this.onClose = function(){ + jqWrap.hide(); + textElement = onUpdateFunction = null; + } +}); // i18n // login @@ -1019,7 +2050,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);