/*
* pettanR system.js
- * version 0.4.2
+ * version 0.4.5
*
* author:
* itozyun
* 画像一覧を読み込むタイミング
*/
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_RESISTER = [],
+ TREE_ARRAY = [],
+ TREE_ACCESS_ARRAY = [];
var REQUEST_CONTROLER = ( function(){
var REQUEST_TICKET_RESISTER = [],
}
return {
- init: function(){
- delete REQUEST_CONTROLER.init;
- },
getNumTask: function(){
return REQUEST_TICKET_RESISTER.length;
},
- 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; ++i){
- _ticket = EVENT_LISTENER_RESISTER[i],
- _type = _ticket.eventType,
- _file = _ticket.targetFile,
- _callback = _ticket.callBack;
- if( _eventType === _type && _file.getUID() === _targetFile.getUID()){
- _callback( _type, _targetFile, e.key, e.value);
- } else if( _type === TREE_EVENT_UPDATE && _eventType === FILE_EVENT_GET_SEQENTIAL_FILES){
- _callback( TREE_EVENT_UPDATE, _targetFile);
- }
- }
- }
-
- return {
- init: function(){
- instance = this;
- currentFile = rootFile = new FileClass( this, null, ROOTFILE_DATA);
- rootFile.init();
- FILE_CONTROLER.getSeqentialFiles( currentFile);
- delete this.init;
- },
- getUID: function(){ return UID},
- getRootFile : function(){
- return rootFile;
- },
- getCurrentFile: function(){
- return currentFile;
- },
- hierarchy: function(){
- return PARENT_FILE_RESITER.length;
- },
- getParentFileAt: function( _index){
- var l = PARENT_FILE_RESITER.length;
- if( typeof _index !== 'number' || _index < 0 || _index >= 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;
+ },
+ 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;
_data = UIDorFILEorFILEDATA || null;
}
- if( _data === null || !_data) return null;
- for(var i=0; i<l; ++i){
+ if( _data === null || typeof _data !== 'object') return null;
+ for( var i=0, l = FILEDATA_ACCESS.length; i<l; ++i){
_access = FILEDATA_ACCESS[ i];
if( _access.DATA === _data) return _access;
}
return null;
- }
- function getChildren( UIDorFILE){
- var _access = getFileDataAccess( UIDorFILE);
- return _access !== null ? _access.DATA.CHILDREN : null
- }
- function onLoadJson( _file, _json){
- var _access = getFileDataAccess( _file),
- _data = _access !== null ? _access.DATA : null,
- l = _json.length,
- _fileData;
- if( _data == null){
- onErrorJson( _file);
- return;
- }
- if( l === 0) return;
- if( !_data.children){
- _data.children = [];
+ },
+ getDriver: function( _file){
+ var _data = FILE_CONTROLER.getFileData( _file);
+ return _data !== null && _data.driver ? _data.driver : FileDriverBase;
+ },
+ getUpdateFlag: function( _file, _bit){
+ var _driver = FILE_CONTROLER.getFileData( _file),
+ _policy;
+ if( typeof _driver.getUpdatePolicy === 'function'){
+ _policy = _driver.getUpdatePolicy( _file );
+
}
- var _children = _data.children,
- _childType = _data.childType,
- _newData,
- _rFolderData,
- _artistFolderData, _artistFolder,
- _comicFolderData, _comicFolder,
- _authorFolderData, _authorFolder,
- _reaourceID = buildDomainID( _data.json, _childType);
-
- for(var i=0; i<l; ++i){
- _newData = buildFileData( _json[ i], _data.json, _data, _childType);
-
- if( _reaourceID !== null){
- _rFolderData = getDomainFolder( _reaourceID, _childType, _file);
- _rFolderData.children.push( _newData);
- }
- if( _newData.artist){
- _artistFolderData = _artistFolderData || getDomainFolder( buildDomainID( _data.json, 'artist'), 'Artists', _file);
- _artistFolder = _artistFolder || new FileClass( SYSTEM_TREE, _file, _artistFolderData);
- _rFolderData = getDomainFolder( buildDomainID( _artistFolderData.rID, '' +_newData.artist.id), _newData.artist.name, _artistFolder);
- _rFolderData.children.push( _newData);
- }
- if( _newData.comic){
- _comicFolderData = _comicFolderData || getDomainFolder( buildDomainID( _data.json, 'comic'), 'Comics', _file);
- _comicFolder = _comicFolder || new FileClass( SYSTEM_TREE, _file, _comicFolderData);
- _rFolderData = getDomainFolder( buildDomainID( _comicFolderData.rID, '' +_newData.comic.id), _newData.comic.title, _comicFolder);
- _rFolderData.children.push( _newData);
- }
- if( _newData.author){
- _authorFolderData = _authorFolderData || getDomainFolder( buildDomainID( _data.json, 'author'), 'Author', _file);
- _authorFolder = _authorFolder || new FileClass( SYSTEM_TREE, _file, _authorFolderData);
- _rFolderData = getDomainFolder( buildDomainID( _authorFolderData.rID, '' +_newData.author.id), _newData.author.name, _authorFolder);
- _rFolderData.children.push( _newData);
- }
+ if( typeof _policy !== 'number') {
+ _policy = FileDriverBase.getUpdatePolicy( _file )
}
- delete _data.json;
- _artistFolder && _artistFolder.collect();
- _comicFolder && _comicFolder.collect();
- _authorFolder && _authorFolder.collect();
- _access.fileEventChatcher( new FileEventClass( FILE_EVENT_GET_SEQENTIAL_FILES, _file, 'children', null));
- }
- function onErrorJson( _file){
- var _access = getFileDataAccess( _file),
- _data = _access !== null ? _access.DATA : null;
- if( _data !== null){
- _data.state = FILE_STATE_IS_ERROR;
+ return _policy % ( _bit * 2) >= _bit;
+ },
+ getUID: function ( _filedata){
+ var l = FILEDATA_RESITER.length;
+ for( var i=0; i<l; ++i){
+ if( FILEDATA_RESITER[ i] === _filedata) return i;
}
- }
- function buildFileData( _data, _url, _parent, _type){
- _data.type = _type;
-
- if( _type === FILE_TYPE_IS_PANEL){
- _data.comicFileData = _parent;
+ return -1;
+ },
+ getSeqentialFiles: function( _file){
+ var _driver = FILE_CONTROLER.getDriver( _file);
+ if( _driver !== null && typeof _driver.getSeqentialFiles === 'function'){
+ _driver.getSeqentialFiles( _file);
}
-
- FILEDATA_RESITER.push( _data);
+ },
+ updateFileAttribute: function( _uid, key, _value, _opt_callback){
+ var _data = FILE_CONTROLER.getFileDataAccess( _uid),
+ _type = _data.TYPE;
- return _data;
- }
- function buildDomainID( _url, _type){
- if( !_url) return null;
- var _typeStr = null;
+ },
+ getFileAttribute: function( _uid, KEYorKEYARRAY){
+ var _fileData = FILE_CONTROLER.getFileDataAccess( _uid),
+ _type = _fileData.TYPE;
+ },
+ 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){
- if( typeof _type !== 'number'){
- _typeStr = _type
- } else
- if( _type === FILE_TYPE_IS_IMAGE){
- _typeStr = 'image';
- } else
- if( _type === FILE_TYPE_IS_COMIC){
- _typeStr = 'comic';
+ },
+ addEventListener: function( FILEorNULL, _eventType, _callback){
+ var _uid = FILEorNULL instanceof FileClass ? FILEorNULL.getUID() : FILEorNULL;
+ EVENT_LISTENER_RESISTER.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_RESISTER.length; i<l; ++i){
+ _ticket = EVENT_LISTENER_RESISTER[i];
+ if( _ticket.fileUID === _uid && _ticket.eventType === _eventType && _ticket.callBack === _callback){
+ EVENT_LISTENER_RESISTER.splice( i, 1);
+ _ticket.destroy();
+ }
}
- if( _type === FILE_TYPE_IS_PANEL){
- _typeStr = 'panel';
+ },
+ fileEventRellay: function( _targetFile, _targetTree, _event){
+ var _uid = _targetTree.getUID(),
+ _access = TREE_ACCESS_ARRAY[ _uid],
+ l = TREE_ARRAY.length,
+ _tree, _currentFile;
+ _access !== undefined && _access.dispatchFileEvent( _event);
+ for(var i=0; i<l; ++i){
+ if( i !== _uid){
+ _tree = TREE_ARRAY[i];
+ _currentFile = _tree.getCurrentFile();
+ if( FILE_CONTROLER.getFileData( _currentFile) === _access.DATA){
+ TREE_ACCESS_ARRAY[ _tree.getUID()].dispatchFileEvent( _event);
+ }
+ }
}
- if( _typeStr === null) return null;
-
- return [ _url.replace(/https?:\/\/([^\/]*).*/, '$1'), _typeStr].join('_');
}
- /**
- * getFileByResourceID( _domainID, opt_name, opt_folder)
- * opt 指定で 新しいフォルダの作成
- * rID を持つ Object は {} にも格納.
- */
- function getDomainFolder( _domainID, opt_name, opt_folder){
- if( FILEDATA_HAS_domainID_RESISTER[ _domainID]){
- return FILEDATA_HAS_domainID_RESISTER[ _domainID];
- }
- if( !opt_name && !opt_folder) return;
-
- var _fileName;
-
- if( typeof opt_name === 'string'){
- _fileName = opt_name;
- } else
- if( opt_name === FILE_TYPE_IS_IMAGE){
- _fileName = 'Pictures';
- } else
- if( opt_name === FILE_TYPE_IS_COMIC){
- _fileName = 'Comics';
- } else
- if( opt_name === FILE_TYPE_IS_PANEL){
- _fileName = 'Panels';
- } else {
- _fileName = typeof opt_name;
- }
-
- var _newData = {
- name: _fileName,
- type: FILE_TYPE_IS_FOLDER,
- rID: _domainID,
- children: []
- };
- FILEDATA_RESITER.push( _newData);
- FILEDATA_HAS_domainID_RESISTER[ _domainID] = _newData;
+ }
+
+ var TreeClass = function( ROOTFILE_DATA){
+ var UID = TREE_ACCESS_ARRAY.length,
+ PARENT_FILE_RESITER = [],
+ ACCESS = {
+ dispatchFileEvent: dispatchFileEvent,
+ destroy: onDestroy
+ },
+ EVENT_LISTENER_ARRAY = [],
+ rootFile,
+ rootFileData,
+ currentFile,
+ currentFileData,
+ instance;
- if( opt_folder && opt_folder.isChildFile( _newData) === false){
- var _access = getFileDataAccess( opt_folder),
- _data = _access !== null ? _access.DATA : null;
- _access === null && alert( _domainID)
- if( _data !== null){
- _data.children.push( _newData);
- }
- }
+ TREE_ACCESS_ARRAY.push( ACCESS);
+
+ function onDestroy(){
- return _newData;
}
- function destroyTree(){
-
+ 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<l; ++i){
+ _ticket = EVENT_LISTENER_RESISTER[i],
+ _type = _ticket.eventType,
+ _callback = _ticket.callBack;
+ if( _eventType === _type && _uid === _ticket.fileUID){
+ _callback( _eventType, _targetFile, e.key, e.value);
+ } else
+ if( _type === pettanr.file.TREE_EVENT.UPDATE && _eventType === pettanr.file.FILE_EVENT.GET_SEQENTIAL_FILES){
+ _callback( _eventType, _targetFile);
+ }
+ }
}
return {
init: function(){
instance = this;
- delete FILE_CONTROLER.init;
+ currentFile = rootFile = new FileClass( this, null, ROOTFILE_DATA);
+ rootFile.init();
+ FILE_CONTROLER.getSeqentialFiles( currentFile);
+ delete this.init;
},
- createTree: function( _rootFileData){
- var _tree = new TreeClass( _rootFileData);
- _tree.init();
- TREE_ARRAY.push( _tree);
- return _tree;
+ getUID: function(){ return UID},
+ getRootFile : function(){
+ return rootFile;
},
- getFileData: function( _file){
- var _access = getFileDataAccess( _file);
- return _access !== null ? _access.DATA : null;
+ getCurrentFile: function(){
+ return currentFile;
},
- getUID: function ( _filedata){
- var l = FILEDATA_RESITER.length;
- for( var i=0; i<l; ++i){
- if( FILEDATA_RESITER[ i] === _filedata) return i;
- }
- return -1;
+ hierarchy: function(){
+ return PARENT_FILE_RESITER.length;
},
- getSeqentialFiles: function( _file){
- var _data = this.getFileData( _file),
- _json = _data ? _data.json : null;
- if( _json !== null){
- REQUEST_CONTROLER.getJson( _file, _json, onLoadJson, onErrorJson);
- }
+ getParentFileAt: function( _index){
+ var l = PARENT_FILE_RESITER.length;
+ if( typeof _index !== 'number' || _index < 0 || _index >= 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);
+ FILE_CONTROLER.getSeqentialFiles( currentFile);
+ 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();
+ }
+ FILE_CONTROLER.getSeqentialFiles( currentFile);
+ 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<l; ++i){
- if( i !== _uid){
- _tree = TREE_ARRAY[i];
- _currentFile = _tree.getCurrentFile();
- if( FILE_CONTROLER.getFileData( _currentFile) === _access.DATA){
- _tree.fileEventChatcher( _event);
- }
- }
- }
+ removeTreeEventListener: function( _eventType, _callback){
+ FILE_CONTROLER.removeEventListener( null, _eventType, _callback);
+ },
+ destroy: function(){
+ FILE_CONTROLER.destroyTree( UID);
}
}
- })();
+ };
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;
}
/*
if( !data.children){
data.children = [];
}
- var TYPE = data.type,
- name = data.name || null,
- thumbnail = null,
- uid = FILE_CONTROLER.getUID( data),
- CHILDREN = data.children,
- instance;
+ var uid = FILE_CONTROLER.getUID( data),
+ instance = this;
if( uid === -1){
- //alert( 'invalid uid');
uid = FILEDATA_RESITER.length;
FILEDATA_RESITER.push( data);
}
FILEDATA_ACCESS.push(
{
- TYPE: TYPE,
DATA: data,
- destroy: destroy,
updateParent: updateParent,
- fileEventChatcher: dispatchEvent
+ dispatchFileEvent: dispatchEvent
}
);
- function destroy(){
- name = thumbnail = parentFile = data = CHILDREN = null;
-
- }
+
function updateParent( _parent){
parentFile = _parent;
}
/* grobal Methods */
this.init = function(){
- instance = this;
delete this.init;
}
- this.TYPE = function(){
- return TYPE;
- }
- this.getName = function(){
- if( name !== null) return name;
- if( data.name){
- return data.name;
- }
- 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;
- }
- return name || 'no_name';
- }
- this.getThumbnail = function(){
- if( thumbnail !== null) return thumbnail;
- if( TYPE === FILE_TYPE_IS_IMAGE){
- thumbnail = [ 'thumbnail/', data.id, '.', data.ext].join( '');
- }
- return thumbnail || null;
- }
this.getUID = function(){
return uid;
}
- this.getState = function(){
- return data.state !== undefined ? data.state : FILE_STATE_IS_OK;
- }
- this.getChildFileLength = function(){
- return CHILDREN && typeof CHILDREN.length === 'number' ? CHILDREN.length : 0;
- }
+ /*
+ * ファイル構造は TRON のような ハイパーリンク方式 だが、文脈上の 親ファイルが存在する場合がある.
+ */
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]);
+ var _children = FILE_CONTROLER.getChildren( instance );
+ if( typeof _index !== 'number' || _index < 0 || typeof _children.length !== 'number' || _index >= _children.length) return null;
+ var _file = new FileClass( TREE, this, _children[ _index]);
_file.init();
return _file;
}
- this.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<l; ++i){
- if( CHILDREN[ i] === _fileData) return i;
- }
- return -1;
- }
- this.isChildFile = function( _FILEorFILEDATA){
- return this.getChildFileIndex( _FILEorFILEDATA) !== -1;
- }
- this.getAttribute = function( KEYorKEYARRAY){
- return FILE_CONTROLER.getFileAttribute( UID, KEYorKEYARRAY);
- }
- this.getSeqentialFiles = function(){
- FILE_CONTROLER.getSeqentialFiles( this);
- }
- this.updateAttribute = function( key, value, opt_callback){
- TREE.updateFileAttribute( UID, key, value, opt_callback);
- }
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.addEventListener = function( _eventType, _callback){
- FILE_CONTROLER.addEventListener( UID, _eventType, _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, _access.updateParent, _access.dispatchFileEvent;
}
- this.removeEventListener = function( _eventType, _callback){
- FILE_CONTROLER.removeEventListener( UID, _eventType, _callback);
+ };
+ FileClass.prototype = {
+ isChildFile: function( _FILEorFILEDATA){
+ return this.getChildFileIndex( _FILEorFILEDATA) !== -1;
+ },
+ getSeqentialFiles: function(){
+ FILE_CONTROLER.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 children !== null && typeof children.length === 'number' ? children.length : 0;
+ },
+ getChildFileIndex: function( _FILEorFILEDATA){
+ var children = FILE_CONTROLER.getChildren( this);
+
+ if( children === null || 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<l; ++i){
+ if( children[ i] === _fileData) return i;
+ }
+ return -1;
+ },
+ 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 typeof _data.state === 'number' ? _data.state : pettanr.file.FILE_STATE.OK;
+ },
+ 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);
+ },
+ read: function(){
+ // simpleDeepCopy
+ return false;
+ },
+ write: function( _newName, _newData){
+ return false;
+ },
+ create: function(){
+
+ },
+ sort: function(){
+
+ },
+ onCopy: function(){
+
+ },
+ onDelete: function(){
+
}
- this.collect = function(){
+ }
+
+ /*
+ * FileDriverBase
+ */
+ var FileDriverBase = {
+ getSeqentialFiles: function( _file){
+ },
+ getName: function( _file){
+ var _data = FILE_CONTROLER.getFileData( _file);
+ return _data.name || 'No Name';
+ },
+ getThumbnail: function( _file){
+ var _data = FILE_CONTROLER.getFileData( _file);
+ _type = _data.type,
+ _className = '';
+ if( _type === pettanr.file.FILE_TYPE.FOLDER){
+ _className = 'folder';
+ } else
+ if( _type === pettanr.file.FILE_TYPE.IMAGE){
+
+ } else
+ if( _type === pettanr.file.FILE_TYPE.TEXT){
+
+ } else
+ if( _type === pettanr.file.FILE_TYPE.HTML){
+
+ } else
+ if( _type === pettanr.file.FILE_TYPE.CSV){
+
+ } else
+ if( _type === pettanr.file.FILE_TYPE.JSON){
+
+ } else
+ if( _type === pettanr.file.FILE_TYPE.XML){
+
+ }
+ return {
+ image: null,
+ className: ' file-type-' + _className
+ }
+ },
+ getUpdatePolicy: function( _file){
+ // debug用 全てのメニューを許可
+ return pettanr.file.FILE_UPDATE_POLICY.SRWC;
+ },
+ read: function(){
+ return false;
+ },
+ write: function( _newName, _newData){
+ return false;
+ },
+ onCreate: function(){
+
+ },
+ onSort: function(){
+
+ },
+ onCopy: function(){
+
+ },
+ onDelete: function(){
}
- };
+ }
+
function getFileObject( TREE, parentFile, data){
- var _file;
- if( FILE_OBJECT_POOL.length > 0){
- _file = FILE_OBJECT_POOL.shift();
- } else {
- _file = new FileClass();
- }
+ var _file = FILE_OBJECT_POOL.length > 0 ? FILE_OBJECT_POOL.shift() : 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;
+ resisterDriver: 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( '0000', 2),
+ ___C: parseInt( '0001', 2), // hasCreateMenu
+ __W_: parseInt( '0010', 2), // isWritable
+ __WC: parseInt( '0011', 2), // isWritable
+ _R__: parseInt( '0000', 2), // isRenamable
+ _R_C: parseInt( '0101', 2), // hasCreateMenu
+ _RW_: parseInt( '0110', 2), // isWritable
+ _RWC: parseInt( '0111', 2), // isWritable
+ S___: parseInt( '1000', 2), // childrenIsSortable
+ S__C: parseInt( '1001', 2),
+ S_W_: parseInt( '1010', 2),
+ S_WC: parseInt( '1011', 2),
+ SR__: parseInt( '1000', 2),
+ SR_C: parseInt( '1101', 2),
+ SRW_: parseInt( '1110', 2),
+ SRWC: parseInt( '1111', 2),
+ CREATE: 1,
+ WRAITE: 2,
+ RENAME: 4,
+ SORT: 8
+ },
+ TREE_EVENT: {
+ UPDATE: 'onTreeUpdate'
+ },
+ FILE_EVENT: {
+ UPDATE_ATTRIVUTE: 'onFileUpdate',
+ GET_SEQENTIAL_FILES:'gotSeqentilFiles'
+ },
+ FILE_DATA_PROPERTY_RESERVED: [
+ 'children', 'driver', 'state', 'type', 'name'
+ ]
}
})();
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();
onResize: function( w){
},
- collect: function(){
+ destroy: function(){
elmContainer.removeChild( ELM_WRAPPER);
file = elmContainer = null;
FINDER_ICON_POOL.push( instansce);
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){
}
function onClick(){
callback( index);
+ return false;
}
return {
onResize: function( w){
},
- collect: function(){
+ destroy: function(){
elmContainer.removeChild( ELM_WRAPPER);
file = elmContainer = null;
BREAD_OBJECT_POOL.push( this);
}
}
- var FinderClass = function( ELM_CONTAINER, TREE_TYPE, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){
+ var FinderClass = function( ELM_CONTAINER, tree, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){
var ICON_ARRAY = [],
BREAD_ARRAY = [],
elmContainer = ELM_ORIGIN_CONTAINER.cloneNode( true),
elmStyleButton = nodesDiv[2],
elmActionButton = nodesDiv[3],
elmBody = nodesDiv[ nodesDiv.length -1],
- tree = pettanr.file.createTree( TREE_TYPE),
+ //tree = pettanr.file.createTree( TREE_TYPE),
headX,
headY,
headH = pettanr.util.getElementSize( ELM_ORIGIN_FINDER_ICON).height,
style = 0;
w = 800;
- tree.addTreeEventListener( 'onTreeUpdate', draw);
+ tree.addTreeEventListener( pettanr.file.TREE_EVENT.UPDATE, draw);
function draw(){
var l = tree.hierarchy() +1,
}
}
while( l < BREAD_ARRAY.length){
- BREAD_ARRAY.pop().collect();
+ BREAD_ARRAY.pop().destroy();
}
l = _file.getChildFileLength();
}
}
while( l < ICON_ARRAY.length){
- ICON_ARRAY.pop().collect();
+ ICON_ARRAY.pop().destroy();
}
}
function onHeadClick( i){
var l = ICON_ARRAY.length;
if( i < l){
var _file = tree.getCurrentFile().getChildFileByIndex( i);
- if( _file !== null && _file.TYPE() === pettanr.file.FILE_TYPE_IS_FOLDER){
+ if( _file !== null && ( _file.getChildFileLength() > 0 || _file.getType() === pettanr.file.FILE_TYPE.FOLDER)){
tree.down( i);
draw();
}
}
}
- return {
- init: function(){
- ELM_CONTAINER.appendChild( elmContainer);
- //$( elmLocation).click( onHeadClick);
- //$( elmContainer).click( onBodyClick);
- var position = pettanr.util.getAbsolutePosition( elmLocation);
- headX = position.x;
- headY = position.y;
- bodyY = pettanr.util.getAbsolutePosition( elmBody).y;
- delete this.init;
- },
- onOpen: function(){
- this.init !== undefined && this.init();
- draw();
- },
- onClose: function(){
-
- },
- onWindowResize: function( _w, _h){
+ this.init = function(){
+ ELM_CONTAINER.appendChild( elmContainer);
+ //$( elmLocation).click( onHeadClick);
+ //$( elmContainer).click( onBodyClick);
+ 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();
+ }
+ this.onClose = function(){
+
+ }
+ this.onWindowResize = function( _w, _h){
- }
}
}
function getFinderIcon( _file, _elmContainer, w, index, style, callback){
init: function(){
},
- createFinder: function( _elmTarget, _treeType, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){
- var _finder = new FinderClass( _elmTarget, _treeType, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled);
+ createFinder: function( _elmTarget, _tree, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled){
+ var _finder = new FinderClass( _elmTarget, _tree, detailSwitchEnabled, styleSwitchEnabled, actionSwitchEnabled);
FINDER_ARRAY.push( _finder);
return _finder;
+ },
+ createFinderHead: function(){
+
+ },
+ resisterFinderPane: function( _finderPane){
+
+ },
+ isFinderInstance: function( _finder){
+ return _finder instanceof FinderClass;
+ }
+ }
+})();
+
+
+pettanr.driver = ( function(){
+ var MyAuthorID = 'current_author' in window ? current_author.id : 1,
+ MyArtistID = 'current_artist' in window ? current_artist.id : 1,
+ Driver = {
+ getSeqentialFiles: function( _file){
+ var _data = FileAPI.getFileData( _file),
+ _json = _data !== null ? _data.json : null;
+ if( typeof _json === 'string'){
+ FileAPI.getJson( _file, _json, onLoadJson, onErrorJson);
+ _data.state = pettanr.file.FILE_STATE.LOADING;
+ delete _data.json;
+ }
+ },
+ 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.name || _data.comic.title ].join( '');
+ } 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 || _data.title;
+ },
+ 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_COMIC_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.driver.FILE_TYPE.FOLDEER){
+ return { className: 'file-type-folder'};
+ }
+ return { className: 'file-type-folder'};
+ }
+ },
+ FileAPI = pettanr.file.resisterDriver( Driver),
+ FILE_DATA_SERVICE_ROOT = {
+ name: 'PettanR root',
+ type: pettanr.file.FILE_TYPE.FOLDER,
+ children: []
+ },
+ FILE_DATA_COMIC_ROOT = {
+ name: 'Comics',
+ 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_ORIGINAL_PICTURES_JSON
+ },
+ FILE_DATA_MY_COMICS_ROOT = {
+ name: 'My Comics',
+ type: pettanr.file.FILE_TYPE.FOLDER,
+ children: []
+ },
+ FILE_DATA_MY_PICTURES_ROOT = {
+ name: 'My Pictures',
+ type: pettanr.file.FILE_TYPE.FOLDER,
+ children: []
+ },
+ 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_LICENSE_ROOT = {
+ name: 'Original Licenses',
+ 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_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_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 = _json.length;
+ if( _data === null){
+ onErrorJson( _file);
+ return;
+ }
+ _data.state = pettanr.file.FILE_STATE.OK;
+ if( l === 0) return;
+ for(var i=0; i<l; ++i){
+ buildFileData( _json[ i], _data);
+ }
+ _access.dispatchFileEvent( FileAPI.createFileEvent( pettanr.file.FILE_EVENT.GET_SEQENTIAL_FILES, _file, 'children', null));
+ }
+ function onErrorJson( _file){
+ var _data = FileAPI.getFileData( _file);
+ if( _data !== null){
+ _data.state = pettanr.file.FILE_STATE.ERROR;
+ }
+ }
+ function buildFileData( _data, _parent){
+ var _type, _array,
+ _id = _data.id,
+ i, l;
+ if( _parent === FILE_DATA_COMIC_ROOT){
+ _data.type = pettanr.driver.FILE_TYPE.PANEL;
+ _array = PANEL_ARRAY;
+ } else
+ if( _parent === FILE_DATA_PICTURE_ROOT){
+ _data.type = pettanr.driver.FILE_TYPE.PICTURE;
+ _array = RESOURCE_PICTURE_ARRAY;
+
+ // original_license を含まなければ、license object を削除して ビットデータ で保持
+ // original_license なら ファイルを作る buildFileData( _license, FILE_DATA_LICENSE_ROOT)
+ var _license = _data.license,
+ _Math_pow = Math.pow,
+ _bits = 0;
+ if( typeof _license === 'object'){
+ for( i=0, l=BASIC_LICENSES.length; i<l; ++i){
+ if( typeof _license[ BASIC_LICENSES[ i]] === 'number'){
+ _bits += _Math_pow( 2, i);
+ }
+ }
+ _data.license = _bits;
+ }
+ } else
+ if( _parent === FILE_DATA_LICENSE_ROOT){
+ _data.type = pettanr.driver.FILE_TYPE.LICENSE;
+ _array = ORIGINAL_LICENSE_ARRAY;
+ }
+
+ _data.driver = Driver;
+
+ // _array に _data を格納 または 上書き
+ if( typeof _id === 'number'){
+ var __data = _array[ _id];
+ if( __data){
+ for( var key in _data){
+ __data[ key ] = _data[ key ];
+ }
+ _data = __data; // このタイミングで参照が切れるので注意!!
+ } else {
+ _array[ _id] = _data;
+ }
+ }
+
+ if( _parent === FILE_DATA_COMIC_ROOT){
+ if( _data.comic && _data.author){
+ var _comic = getFolderData( _data, 'comic', FILE_DATA_COMIC_ROOT),
+ _comicList = getFolderData( _data, 'author', FILE_DATA_AUTHOR_ROOT);
+ _comic.children.push( _data);
+ pettanr.util.getIndex( _comicList.children, _comic) === -1 && _comicList.children.push( _comic);
+ _comicList.id === MyAuthorID && pettanr.util.getIndex( FILE_DATA_MY_COMICS_ROOT.children, _comic) === -1 && FILE_DATA_MY_COMICS_ROOT.children.push( _comic);
+ }
+ // picture data をファイルに取り出し
+ var _elements = _data.panel_elements || [],
+ _elm;
+ for(var i=0, l=_elements.length; i<l; ++i){
+ _elm = _elements[ i];
+ if( _elm.resource_picture){
+ _elm.resource_picture = buildFileData( _elm.resource_picture, FILE_DATA_PICTURE_ROOT); // 上記参照切れに備えてここで上書き
+ }
+ if( _elm.resource_picture_id && RESOURCE_PICTURE_ARRAY[ _elm.resource_picture_id]){
+ _elm.resource_picture = RESOURCE_PICTURE_ARRAY[ _elm.resource_picture_id];
+ }
+ }
+ } else
+ if( _parent === FILE_DATA_PICTURE_ROOT){
+ if( _data.artist){
+ var _pictureList = getFolderData( _data, 'artist', FILE_DATA_ARTIST_ROOT);
+ pettanr.util.getIndex( _pictureList.children, _data) === -1 && _pictureList.children.push( _data);
+ _pictureList.id === MyArtistID && pettanr.util.getIndex( FILE_DATA_MY_PICTURES_ROOT.children, _data) === -1 && FILE_DATA_MY_PICTURES_ROOT.children.push( _data);
+ }
+ }
+
+ return _data;
+ }
+ /**
+ * folder には Artist, Author, Comic,
+ */
+ function getFolderData( _data, _key, _parentData){
+ if( typeof _data[ _key ] !== 'object') return {children:[]};
+ var _ret,
+ _id = _data[ _key ].id,
+ _array;
+ if( typeof _id !== 'number') return {children:[]};
+
+ _array = _parentData === FILE_DATA_ARTIST_ROOT ? ARTIST_ARRAY :
+ _parentData === FILE_DATA_AUTHOR_ROOT ? AUTHOR_ARRAY :
+ _parentData === FILE_DATA_COMIC_ROOT ? COMIC_ARRAY : []
+
+ if( typeof _array[ _id] === 'object'){
+ var __data = _array[ _id];
+ for( var i in _data[ _key ]){
+ __data[ i ] = _data[ _key ][ i ];
+ }
+ return _data[ _key ] = __data;// このタイミングで参照が切れるので注意!!
+ }
+ // 以下は folder がなく 新規に作られる場合.
+ _ret = _array[ _id ] = _data[ _key ];
+ if( _ret.title){
+ _ret.name = _ret.title;
+ delete _ret.title;
+ }
+ _ret.children = [];
+ _ret.driver = Driver;
+
+ if( _parentData === FILE_DATA_AUTHOR_ROOT){
+ _ret.type = pettanr.driver.FILE_TYPE.AUTHOR;
+ } else
+ if( _parentData === FILE_DATA_ARTIST_ROOT){
+ _ret.type = pettanr.driver.FILE_TYPE.ARTIST;
+ } else
+ if( _parentData === FILE_DATA_COMIC_ROOT){
+ _ret.type = pettanr.driver.FILE_TYPE.COMIC;
+ return _ret;
+ } else {
+ _ret.type = pettanr.file.FILE_TYPE.FOLDER;
+ }
+
+ _parentData.children.push( _ret);
+
+ return _ret;
+ }
+
+ return {
+ createComicTree: function(){
+ return pettanr.file.createTree( FILE_DATA_SERVICE_ROOT); //FILE_DATA_COMIC_ROOT);
+ },
+ createPictureTree: function(){
+ return pettanr.file.createTree( FILE_DATA_PICTURE_ROOT);
+ },
+ createServiceTree: function(){
+ return pettanr.file.createTree( FILE_DATA_SERVICE_ROOT);
+ },
+ isPettanrFileInstance: function( _file){
+ if( pettanr.file.isPettanFileInstance( _file) === true){
+ var _data = FileAPI.getFileData( _file);
+ return _data !== null && _data.driver === Driver;
+ }
+ return false;
+ },
+ FILE_TYPE: {
+ COMIC: FileAPI.createFileTypeID(),
+ PANEL: FileAPI.createFileTypeID(),
+ PICTURE: FileAPI.createFileTypeID(),
+ PANEL_PICTURE: FileAPI.createFileTypeID(),
+ BALLOON: FileAPI.createFileTypeID(),
+ AUTHOR: FileAPI.createFileTypeID(),
+ ARTIST: FileAPI.createFileTypeID(),
+ LICENSE: FileAPI.createFileTypeID()
}
}
})();
+
pettanr.gallery = ( function(){
var finder,
elmContainer = document.getElementById( 'gallery'),
delete pettanr.gallery.init;
},
firstOpen: function(){
- finder = pettanr.finder.createFinder( elmContainer, pettanr.file.TREE_TYPE_IS_IMAGE);
+ finder = pettanr.finder.createFinder( elmContainer, pettanr.driver.createPictureTree());
delete pettanr.gallery.firstOpen;
},
onOpen: function(){
delete pettanr.cabinet.init;
},
firstOpen: function(){
- finder = pettanr.finder.createFinder( elmContainer, pettanr.file.TREE_TYPE_IS_COMIC);
+ finder = pettanr.finder.createFinder( elmContainer, pettanr.driver.createComicTree());
delete pettanr.cabinet.firstOpen;
},
onOpen: function(){
pettanr.fn( pettanr.overlay);
pettanr.fn( pettanr.key);
pettanr.fn( pettanr.balloon);
+
pettanr.fn( pettanr.editor);
+pettanr.fn( pettanr.comicConsole);
+pettanr.fn( pettanr.uploadConsole);
+
pettanr.fn( pettanr.file);
pettanr.fn( pettanr.finder);
pettanr.fn( pettanr.gallery);