OSDN Git Service

fixed assets/ & views/layouts/
[pettanr/pettanr.git] / app / assets / javascripts / system.js
index 973291b..88a4ac3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * pettanR system.js
- *   version 0.4.1
+ *   version 0.4.2
  *   
  * author:
  *   itozyun
@@ -58,19 +58,19 @@ pettanr.file = ( function(){
                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,
-               FILEDATA_RESITER = [],
-               FILEDATA_HAS_rID_RESISTER = {},
-               FILEDATA_ACCESS = [],
+               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),
+               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 = [];
-               
+       
        var REQUEST_CONTROLER = ( function(){
                var REQUEST_TICKET_RESISTER = [],
                        DATA_TYPE_ARRAY = 'json,xml,html,text'.split( ','),
@@ -240,11 +240,11 @@ pettanr.file = ( function(){
                        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;
+                               _data = UIDorFILEorFILEDATA || null;
                        }
                        
                        if( _data === null || !_data) return null;
@@ -256,7 +256,7 @@ pettanr.file = ( function(){
                }
                function getChildren( UIDorFILE){
                        var _access = getFileDataAccess( UIDorFILE);
-                       return  _access !== null ? _access.CHILDREN : null
+                       return  _access !== null ? _access.DATA.CHILDREN : null
                }
                function onLoadJson( _file, _json){
                        var _access = getFileDataAccess( _file),
@@ -277,30 +277,32 @@ pettanr.file = ( function(){
                                _rFolderData,
                                _artistFolderData, _artistFolder,
                                _comicFolderData, _comicFolder,
-                               _authorFolderData, _authorFolder;
+                               _authorFolderData, _authorFolder,
+                               _reaourceID = buildDomainID( _data.json, _childType);
 
                        for(var i=0; i<l; ++i){
-                               _newData = buildFileData( _json[ i], _data.json, _childType);
-                               if( _newData.rID){
-                                       _rFolderData = getFolderDataByResourceID( buildResourceID( _data.json, _childType), _childType, _file);
+                               _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 || getFolderDataByResourceID( buildResourceID( _data.json, 'artist'), 'Artists', _file);
+                                       _artistFolderData = _artistFolderData || getDomainFolder( buildDomainID( _data.json, 'artist'), 'Artists', _file);
                                        _artistFolder = _artistFolder || new FileClass( SYSTEM_TREE, _file, _artistFolderData);
-                                       _rFolderData = getFolderDataByResourceID( buildResourceID( _artistFolderData.rID, '' +_newData.artist.id), _newData.artist.name, _artistFolder);
+                                       _rFolderData = getDomainFolder( buildDomainID( _artistFolderData.rID, '' +_newData.artist.id), _newData.artist.name, _artistFolder);
                                        _rFolderData.children.push( _newData);
                                }
                                if( _newData.comic){
-                                       _comicFolderData = _comicFolderData || getFolderDataByResourceID( buildResourceID( _data.json, 'comic'), 'Comics', _file);
+                                       _comicFolderData = _comicFolderData || getDomainFolder( buildDomainID( _data.json, 'comic'), 'Comics', _file);
                                        _comicFolder = _comicFolder || new FileClass( SYSTEM_TREE, _file, _comicFolderData);
-                                       _rFolderData = getFolderDataByResourceID( buildResourceID( _comicFolderData.rID, '' +_newData.comic.id), _newData.comic.title, _comicFolder);
+                                       _rFolderData = getDomainFolder( buildDomainID( _comicFolderData.rID, '' +_newData.comic.id), _newData.comic.title, _comicFolder);
                                        _rFolderData.children.push( _newData);
                                }       
                                if( _newData.author){
-                                       _authorFolderData = _authorFolderData || getFolderDataByResourceID( buildResourceID( _data.json, 'author'), 'Author', _file);
+                                       _authorFolderData = _authorFolderData || getDomainFolder( buildDomainID( _data.json, 'author'), 'Author', _file);
                                        _authorFolder = _authorFolder || new FileClass( SYSTEM_TREE, _file, _authorFolderData);
-                                       _rFolderData = getFolderDataByResourceID( buildResourceID( _authorFolderData.rID, '' +_newData.author.id), _newData.author.name, _authorFolder);
+                                       _rFolderData = getDomainFolder( buildDomainID( _authorFolderData.rID, '' +_newData.author.id), _newData.author.name, _authorFolder);
                                        _rFolderData.children.push( _newData);
                                }
                        }
@@ -317,29 +319,20 @@ pettanr.file = ( function(){
                                _data.state = FILE_STATE_IS_ERROR;
                        }
                }
-               function buildFileData( _data, _url, _type){
-                       if( !_data.name){
-                               _data.name = [ _data.id, _data.ext].join( '.');
-                       }
+               function buildFileData( _data, _url, _parent, _type){
                        _data.type = _type;
-                       
-                       if( _type === FILE_TYPE_IS_IMAGE){
-                               _data.thumbnail = 'thumbnail/' + _data.name;
-                       }
-                       
-                       var _rID = buildResourceID( _url, _type);
-                       if( _rID !== null){
-                               _data.rID = _rID + _data.id;
-                               FILEDATA_HAS_rID_RESISTER[ _data.rID] = _data;
+
+                       if( _type === FILE_TYPE_IS_PANEL){
+                               _data.comicFileData = _parent;
                        }
-                       
+
                        FILEDATA_RESITER.push( _data);
                        
                        return _data;
                }
-               function buildResourceID( _url, _type){
-                       if( _url === null) return null;
-                       var _typeStr;
+               function buildDomainID( _url, _type){
+                       if( !_url) return null;
+                       var _typeStr = null;
                        
                        if( typeof _type !== 'number'){
                                _typeStr = _type
@@ -353,16 +346,18 @@ pettanr.file = ( function(){
                        if( _type === FILE_TYPE_IS_PANEL){
                                _typeStr = 'panel';
                        }
+                       if( _typeStr === null) return null;
+                       
                        return [ _url.replace(/https?:\/\/([^\/]*).*/, '$1'), _typeStr].join('_');
                }
        /**
-        * getFileByResourceID( _rID, opt_name, opt_folder)
+        * getFileByResourceID( _domainID, opt_name, opt_folder)
         * opt 指定で 新しいフォルダの作成
         * rID を持つ Object は {} にも格納.
         */
-               function getFolderDataByResourceID( _rID, opt_name, opt_folder){
-                       if( FILEDATA_HAS_rID_RESISTER[ _rID]){
-                               return FILEDATA_HAS_rID_RESISTER[ _rID];
+               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;
                        
@@ -380,22 +375,22 @@ pettanr.file = ( function(){
                        if( opt_name === FILE_TYPE_IS_PANEL){
                                _fileName = 'Panels';
                        } else {
-                               _fileName = opt_name.toString();
+                               _fileName = typeof opt_name;
                        }
                        
                        var _newData = {
                                name:           _fileName,
                                type:           FILE_TYPE_IS_FOLDER,
-                               rID:            _rID,
+                               rID:            _domainID,
                                children:       []
                        };
                        FILEDATA_RESITER.push( _newData);
-                       FILEDATA_HAS_rID_RESISTER[ _rID] = _newData;
+                       FILEDATA_HAS_domainID_RESISTER[ _domainID] = _newData;
                        
                        if( opt_folder && opt_folder.isChildFile( _newData) === false){
                                var _access = getFileDataAccess( opt_folder),
                                        _data = _access !== null ? _access.DATA : null;
-                               _access === null && alert( _rID)
+                               _access === null && alert( _domainID)
                                if( _data !== null){
                                        _data.children.push( _newData);
                                }
@@ -507,6 +502,8 @@ pettanr.file = ( function(){
                        data.children = [];
                }
                var TYPE = data.type,
+                       name = data.name || null,
+                       thumbnail = null,
                        uid = FILE_CONTROLER.getUID( data),
                        CHILDREN = data.children,
                        instance;
@@ -521,16 +518,14 @@ pettanr.file = ( function(){
                        {
                                TYPE:                           TYPE,
                                DATA:                           data,
-                               CHILDREN:                       CHILDREN,
                                destroy:                        destroy,
                                updateParent:           updateParent,
                                fileEventChatcher:      dispatchEvent
                        }
                );
                function destroy(){
-                       CHILDREN.splice( 0, CHILDREN.length);
-                       parentFile = data = CHILDREN = null;
-                       delete this.destroy;                    
+                       name = thumbnail = parentFile = data = CHILDREN = null;
+                       
                }
                function updateParent( _parent){
                        parentFile = _parent;
@@ -538,81 +533,86 @@ pettanr.file = ( function(){
                function dispatchEvent( e){
                        FILE_CONTROLER.fileEventRellay( instance, TREE, e);
                }
-               return {
-                       init: function(){
-                               instance = this;
-                               delete this.init;
-                       },
-                       TYPE: function(){ return TYPE;},
-                       getName: function(){
-                               return data.name || 'no_name';
-                       },
-                       getThumbnail: function(){
-                               return data.thumbnail || null;
-                       },
-                       getUID: function(){
-                               return uid;
-                       },
-                       getState: function(){
-                               return data.state !== undefined ? data.state : FILE_STATE_IS_OK;
-                       },
-                       getChildFileLength: function(){
-                               return CHILDREN && typeof CHILDREN.length === 'number' ? CHILDREN.length : 0;
-                       },
-                       getChildFileByIndex: function( _index){
-                               if( typeof _index !== 'number' || _index < 0 || typeof CHILDREN.length !== 'number' || _index >= CHILDREN.length) return null;
-                               _file = new FileClass( TREE, this, CHILDREN[ _index]);
-                               _file.init();
-                               return _file;
-                       },
-                       getChildFileIndex: function( _FILEorFILEDATA){
-                               if( !CHILDREN || typeof CHILDREN.length !== 'number') return -1;
-                               var l = FILEDATA_RESITER.length,
-                                       _fileData = null;
-                               for( var i=0; i<l; ++i){
-                                       if( _FILEorFILEDATA === FILEDATA_RESITER[ i]){
-                                               _fileData = _FILEorFILEDATA;
-                                               break;
-                                       };
-                               }
-                               if( _fileData === null){
-                                       _fileData = FILE_CONTROLER.getFileData( _FILEorFILEDATA);
-                               }
-                               if( _fileData === null) return -1;
-                               
-                               l = CHILDREN.length
-                               for( var i=0; i<l; ++i){
-                                       if( CHILDREN[ i] === _fileData) return i;
-                               }
-                               return -1;
-                       },
-                       isChildFile: function( _FILEorFILEDATA){
-                               return this.getChildFileIndex( _FILEorFILEDATA) !== -1;
-                       },                      
-                       getAttribute: function( KEYorKEYARRAY){
-                               return FILE_CONTROLER.getFileAttribute( UID, KEYorKEYARRAY);
-                       },
-                       getSeqentialFiles: function(){
-                               FILE_CONTROLER.getSeqentialFiles( this);
-                       },
-                       updateAttribute: function( key, value, opt_callback){
-                               TREE.updateFileAttribute( UID, key, value, opt_callback);
-                       },
-                       move: function( _newFolder, _newIndex, opt_callback){
-                               TREE.move( parentFile, UID, _newFolder, _newIndex, opt_callback);
-                       },
-                       replace: function( _newIndex, opt_callback){
-                               TREE.replace( parentFile, UID, _newIndex, opt_callback);
-                       },
-                       addEventListener: function( _eventType, _callback){
-                               FILE_CONTROLER.addEventListener( UID, _eventType, _callback);
-                       },
-                       removeEventListener: function( _eventType, _callback){
-                               FILE_CONTROLER.removeEventListener( UID, _eventType, _callback);
-                       },
-                       collect: function(){
-                               
+               
+               /* 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;
+               }
+               this.getChildFileByIndex = function( _index){
+                       if( typeof _index !== 'number' || _index < 0 || typeof CHILDREN.length !== 'number' || _index >= CHILDREN.length) return null;
+                       _file = new FileClass( TREE, this, CHILDREN[ _index]);
+                       _file.init();
+                       return _file;
+               }
+               this.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.removeEventListener = function( _eventType, _callback){
+                       FILE_CONTROLER.removeEventListener( UID, _eventType, _callback);
+               }
+               this.collect = function(){
+                       
                }
        };
        function getFileObject( TREE, parentFile, data){
@@ -677,7 +677,7 @@ pettanr.file = ( function(){
                        var _rootFile;
                        if( _treeType === TREE_TYPE_IS_COMIC) _rootFile = COMIC_FILEDATA;
                        if( _treeType === TREE_TYPE_IS_IMAGE) _rootFile = IMAGE_FILEDATA;
-                       if( _rootFile === undefined) return;
+                       if( !_rootFile) return null;
                        return FILE_CONTROLER.createTree( _rootFile);
                },
                TREE_TYPE_IS_COMIC:             1,
@@ -703,8 +703,8 @@ pettanr.finder = ( function(){
        var FinderIconClass = function(){
                var elmContainer,
                        ELM_WRAPPER = ELM_ORIGIN_FINDER_ICON.cloneNode( true),
-                       ELM_THUMBNAIL = ELM_WRAPPER.getElementsByTagName( 'div')[0],
-                       ELM_FILENAME = ELM_WRAPPER.getElementsByTagName( 'div')[1],
+                       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_WRAPPER.onclick = onClick;
@@ -712,7 +712,6 @@ pettanr.finder = ( function(){
                        callback( index);
                }
 
-               
                function draw(){
                        var _thumb = file.getThumbnail();
                        if( _thumb !== null){
@@ -765,7 +764,7 @@ pettanr.finder = ( function(){
                        collect: function(){
                                elmContainer.removeChild( ELM_WRAPPER);
                                file = elmContainer = null;
-                               FINDER_ICON_POOL.push( this);
+                               FINDER_ICON_POOL.push( instansce);
                        }
                }
        }