X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.4.x%2Fjavascripts%2Fsystem.js;h=5941d01c124fd8731a458485a3afecae252ce178;hb=830d7d94479928e8a74521785d586a1e7b13fb46;hp=9f603250d3a017b36427859b14063e0f4dcc5e1a;hpb=fba605dfff61a2f89a60ec18e116904fe152dfab;p=pettanr%2FclientJs.git diff --git a/0.4.x/javascripts/system.js b/0.4.x/javascripts/system.js index 9f60325..5941d01 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.2 + * version 0.4.15 * * author: * itozyun @@ -35,42 +35,15 @@ 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 = 0x11111,// s: super user - UPDATE_POLICY_SOCA_ = 0x11110,// o: owner( comic || panel || picture ) - UPDATE_POLICY_SOC__ = 0x11100,// c: creator - UPDATE_POLICY_SO_A_ = 0x11010,// a: artist - UPDATE_POLICY_SO___ = 0x11000,// v: visitor - UPDATE_POLICY__O___ = 0x01000,// l: lisence manager - UPDATE_POLICY_S____ = 0x10000, - UPDATE_POLICY______ = 0x00000, + 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 = [], DATA_TYPE_ARRAY = 'json,xml,html,text'.split( ','), @@ -106,9 +79,6 @@ pettanr.file = ( function(){ } return { - init: function(){ - delete REQUEST_CONTROLER.init; - }, getNumTask: function(){ return REQUEST_TICKET_RESISTER.length; }, @@ -124,369 +94,206 @@ 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); - } - } - }; - /** - * _access.DATA === FILEDATA_RESITER[uid] - */ - function getFileDataAccess( UIDorFILEorFILEDATA){ - var l = FILEDATA_ACCESS.length, - _uid, - _data, - _access; + var FILE_CONTROLER = { + createTree: function( _rootFileData){ + var _tree = new TreeClass( _rootFileData); + _tree.init(); + TREE_ARRAY.push( _tree); + return _tree; + }, + getFileDataAccess: function( UIDorFILEorFILEDATA){ + var _uid, _data, _access; if( typeof UIDorFILEorFILEDATA === 'number'){ _data = FILEDATA_RESITER[ UIDorFILEorFILEDATA] || null; } else - if( UIDorFILEorFILEDATA.getUID){ + if( UIDorFILEorFILEDATA instanceof FileClass){ _uid = UIDorFILEorFILEDATA.getUID(); _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]; }, - updateFileAttribute: function( _uid, key, _value, _opt_callback){ - var _data = getFileDataAccess( _uid), - _type = _data.TYPE; - - }, - getFileAttribute: function( _uid, KEYorKEYARRAY){ - var _fileData = getFileDataAccess( _uid), - _type = _fileData.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; }, - move: function( _prentUID, _targetfile, _newFolder, _newIndex, _opt_callback){ - var _parentData = getFileDataAccess( _prentUID), - _parentType = _parentData.TYPE, - _targetData = getFileDataAccess( _targetfile), - _targetType = _targetData.TYPE; + 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(); + } + currentFile.getSeqentialFiles(); + return currentFile; }, - replace: function( _uid, _file, _newIndex){ - + addTreeEventListener: function( _eventType, _callback){ + FILE_CONTROLER.addEventListener( null, _eventType, _callback); }, - 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= CHILDREN.length) return null; - _file = new FileClass( TREE, this, CHILDREN[ _index]); - _file.init(); - return _file; - }, - 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= _children.length) return null; + var _file = new FileClass( TREE, this, _children[ _index]); + // _file.init(); + return _file; + } + this.move = function( _newFolder, _newIndex, opt_callback){ + TREE.move( parentFile, UID, _newFolder, _newIndex, opt_callback); + } + this.replace = function( _newIndex, opt_callback){ + TREE.replace( parentFile, UID, _newIndex, opt_callback); + } + this.destroy = function(){ + var _access = FILE_CONTROLER.getFileDataAccess( instance ); + _index = getChildIndex( FILEDATA_ACCESS, _access ); + if( _index === -1 || _access === null) return; + FILEDATA_ACCESS.splice( _index, 1); + TREE = parentFile = data = null; + delete _access.DATA; + delete _access.updateParent; + delete _access.dispatchFileEvent; } }; - function getFileObject( TREE, parentFile, data){ - var _file; - if( FILE_OBJECT_POOL.length > 0){ - _file = FILE_OBJECT_POOL.shift(); - } else { - _file = new FileClass(); + + 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 ); + } + }, + 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.length ) === false ) return -1; + var l = children.length, + _fileData = FILE_CONTROLER.getFileData( _FILEorFILEDATA); + if( _fileData === null) return -1; + for(var i=0; i 0){ @@ -945,38 +946,479 @@ pettanr.finder = ( function(){ init: function(){ }, - createFinder: function( _elmTarget, _treeType, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){ - var _finder = new FinderClass( _elmTarget, _treeType, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled); + 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.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 ){ + _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'; + }, + viwerApplicationList: function( _file ){ + var _data = FileAPI.getFileData( _file ), + _type = _data !== null ? _data.type : null; + return []; + }, + editorApplicationList: function( _file ){ + var _data = FileAPI.getFileData( _file ), + _type = _data !== null ? _data.type : null; + 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