+ },
+ 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<l; ++i ){
+ buildFileData( _json[ i], _data);
+ }
+ } else
+ if( _json.id ){
+ buildFileData( _json, _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 _array, i, l;
+ // Panel
+ if( _parent === FILE_DATA_PANELS_ROOT ){
+ _data.type = pettanr.driver.FILE_TYPE.PANEL;
+ _array = PANEL_ARRAY;
+ } else
+ // Comic
+ if( _parent === FILE_DATA_COMICS_ROOT ){
+ _data.type = pettanr.driver.FILE_TYPE.COMIC;
+ _array = COMIC_ARRAY;
+ } else
+ if( _parent.type === pettanr.driver.FILE_TYPE.COMIC ){
+ _array = COMIC_ARRAY;
+ } else
+ // Lisence
+ if( _parent === FILE_DATA_LISENCE_ROOT ){
+ _data.type = pettanr.driver.FILE_TYPE.LICENSE;
+ _array = ORIGINAL_LICENSE_ARRAY;
+ } else
+ // Author
+ if( _parent === FILE_DATA_AUTHOR_ROOT ){
+ _data.type = pettanr.driver.FILE_TYPE.AUTHOR;
+ _array = AUTHOR_ARRAY;
+ } else
+ // Artist
+ if( _parent === FILE_DATA_ARTIST_ROOT ){
+ _data.type = pettanr.driver.FILE_TYPE.ARTIST;
+ _array = ARTIST_ARRAY;
+ } else
+ // Picture
+ if( _parent === FILE_DATA_PICTURE_ROOT || _parent === FILE_DATA_MY_PICTURES_ROOT ){
+ _data.type = pettanr.driver.FILE_TYPE.PICTURE;
+ _array = RESOURCE_PICTURE_ARRAY;
+ // original_license を含まなければ、license object を削除して ビットデータ で保持
+ // original_license なら ファイルを作る buildFileData( _license, FILE_DATA_LISENCE_ROOT)
+ var _license = _data.license,
+ _rule,
+ _Math_pow = Math.pow,
+ _bits = 0;
+ if( typeof _license === 'object'){
+ for( i=0, l=BASIC_LICENSES.length; i<l; ++i){
+ _rule = _license[ BASIC_LICENSES[ i]]
+ if( typeof _rule === 'number' && _rule === 1 ){
+ _bits += _Math_pow( 2, i);
+ }
+ }
+ _data.license = _bits;
+ }
+ } else {
+ alert( 'error' );
+ }
+
+ _data.driver = Driver;
+
+ // _array に _data を格納 または 上書き
+ if( typeof _data.id === 'number' && _data.id > 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<l; ++i){
+ _panel = buildFileData( _panels[ i ], FILE_DATA_PANELS_ROOT );
+ /*
+ * 間違い! t 順に格納
+ */
+ addChildData( _data, _panel );
+ }
+ delete _data.panels;
+ } else {
+ if( _data.json !== null ){
+ _data.json = true;
+ }
+ if( Type.isArray( _data.children ) === false ){
+ _data.children = [];
+ }
+ }
+ var _author = _data.author || getResource( AUTHOR_ARRAY, _data.author_id );
+ if( _author ){
+ _data.author = _author = buildFileData( _author, FILE_DATA_AUTHOR_ROOT );
+ addChildData( _author, _data );
+ _author.id === MyAuthorID && addChildData( FILE_DATA_MY_COMICS_ROOT, _data );
+ }
+ if( _parent === FILE_DATA_COMICS_ROOT ){
+ addChildData( FILE_DATA_LATEST_COMICS, _data);
+ }
+ } else
+ // Panel
+ if( _parent === FILE_DATA_PANELS_ROOT ){
+ _data.comic = getResource( COMIC_ARRAY, _data.comic_id );
+ _data.author = getResource( AUTHOR_ARRAY, _data.author_id );
+
+ // picture data をファイルに取り出し
+ if( Type.isArray( _data.panel_elements ) === true ){
+ var _elements,
+ _elm, _rpic;
+ for( 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); // 上記参照切れに備えてここで上書き
+ } else {
+ _elm.resource_picture = getResource( RESOURCE_PICTURE_ARRAY, _elm.resource_picture_id );
+ }
+ }
+ }
+ } else
+ // Picture
+ if( _data.type == pettanr.driver.FILE_TYPE.PICTURE ){
+ var _artist = _data.artist || getResource( ARTIST_ARRAY, _data.artist_id );
+ if( _artist){
+ _data.artist = _artist = buildFileData( _artist, FILE_DATA_ARTIST_ROOT );
+ addChildData( _artist, _data );
+ _artist.id === MyArtistID && addChildData( FILE_DATA_MY_PICTURES_ROOT, _data );
+ }
+ }
+ return _data;
+ }
+ function addChildData( _parent, _child ){
+ if( Type.isArray( _parent.children ) === false){
+ _parent.children = [];
+ }
+ pettanr.util.getIndex( _parent.children, _child ) === -1 && _parent.children.push( _child );
+ }
+ function getResource( _array, _id ){
+ if( Type.isArray( _array ) === false || Type.isNumber( _id ) === false || _id < 1 ) return null;
+ var _data = _array[ _id - 1 ];
+ if( !_data ){
+ _data = _array[ _id - 1 ] = {};
+ }
+ return _data;
+ }
+
+ return {
+ createComicTree: function(){
+ return pettanr.file.createTree( FILE_DATA_SERVICE_ROOT); //FILE_DATA_COMICS_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()