OSDN Git Service

pettanR version0.4.4
authoritozyun <itozyun@git.sourceforge.jp>
Sat, 17 Mar 2012 07:01:47 +0000 (16:01 +0900)
committeritozyun <itozyun@git.sourceforge.jp>
Sat, 17 Mar 2012 07:01:47 +0000 (16:01 +0900)
18 files changed:
0.4.x/images/cabinet.png [deleted file]
0.4.x/images/folder_album.png [deleted file]
0.4.x/images/folder_general.png [deleted file]
0.4.x/images/sprite.gif
0.4.x/javascripts/common.js
0.4.x/javascripts/system.js
0.4.x/javascripts/work.js
0.4.x/json/images.json [moved from 0.4.x/resource_pictures/images.json with 100% similarity]
0.4.x/json/original_pictures.json [moved from 0.4.x/resource_pictures/original_pictures.json with 73% similarity]
0.4.x/json/panels.json [new file with mode: 0644]
0.4.x/json/tag-list.json [moved from 0.4.x/resource_pictures/tag-list.json with 100% similarity]
0.4.x/resource_pictures/thumbnail/1.png [moved from 0.4.x/thumbnail/1.png with 100% similarity]
0.4.x/resource_pictures/thumbnail/2.png [moved from 0.4.x/thumbnail/2.png with 100% similarity]
0.4.x/resource_pictures/thumbnail/3.png [moved from 0.4.x/thumbnail/3.png with 100% similarity]
0.4.x/resource_pictures/thumbnail/4.png [moved from 0.4.x/thumbnail/4.png with 100% similarity]
0.4.x/resource_pictures/thumbnail/5.png [moved from 0.4.x/thumbnail/5.png with 100% similarity]
0.4.x/stylesheets/common.css
0.4.x/stylesheets/work.css

diff --git a/0.4.x/images/cabinet.png b/0.4.x/images/cabinet.png
deleted file mode 100644 (file)
index 0922c75..0000000
Binary files a/0.4.x/images/cabinet.png and /dev/null differ
diff --git a/0.4.x/images/folder_album.png b/0.4.x/images/folder_album.png
deleted file mode 100644 (file)
index 6f89c9d..0000000
Binary files a/0.4.x/images/folder_album.png and /dev/null differ
diff --git a/0.4.x/images/folder_general.png b/0.4.x/images/folder_general.png
deleted file mode 100644 (file)
index 99a41b9..0000000
Binary files a/0.4.x/images/folder_general.png and /dev/null differ
index 97f6ebc..ce16afc 100644 (file)
Binary files a/0.4.x/images/sprite.gif and b/0.4.x/images/sprite.gif differ
index c0f241c..2033f37 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * pettanR common.js\r
- *   version 0.4.2\r
+ *   version 0.4.4\r
  * \r
  * author: itozyun\r
  */\r
@@ -15,19 +15,19 @@ var pettanr = ( function(){
                    if( 1 < l){\r
                        var     query = search.substring( 1),\r
                                        params = query.split( '&'),\r
-                                       ret = {}, elm, name;\r
+                                       ret = {}, elm, name, v;\r
                        while( params.length > 0){\r
                            elm = params.shift().split( '=');\r
                                        name = decodeURIComponent( elm[ 0]);\r
                                        if( elm.length === 2){\r
-                                   ret[ name] = ( function( v){\r
-                                                       if( '' + parseFloat( v) === v) return parseFloat( v);\r
-                                                       if( v === 'true') return true;\r
-                                                       if( v === 'false') return false;\r
-                                                       if( v === 'null') return null;\r
-                                                       if( v === 'undefined') return undefined;\r
-                                                       return v;\r
-                                               })( decodeURIComponent( elm[ 1]));\r
+                                               v = decodeURIComponent( elm[ 1]);\r
+                                               if( '' + parseFloat( v) === v) v = parseFloat( v);\r
+                                               if( '' + parseInt( v) === '0' + v) v = parseInt( v);\r
+                                               if( v === 'true') v = true;\r
+                                               if( v === 'false') v = false;\r
+                                               if( v === 'null') v = null;\r
+                                               if( v === 'undefined') v = undefined;\r
+                                   ret[ name] = v;\r
                                        } else\r
                                        if( elm.length === 1){\r
                                                ret[ name] = true;\r
@@ -40,7 +40,7 @@ var pettanr = ( function(){
                IS_DEBUG = typeof URL_PARAMS.debug === 'boolean' ? URL_PARAMS.debug : IS_LOCAL === true,\r
                jqWindow , jqDocument , jqBody;\r
        return {\r
-               version: '0.4.2',\r
+               version: '0.4.4',\r
                init: function(){\r
                        jqWindow = $( window);\r
                        jqDocument = $( document);\r
@@ -432,7 +432,7 @@ pettanr.util = ( function(){
                        if( !IDorELM) return;\r
                        IDorELM.parentNode && IDorELM.parentNode.removeChild( IDorELM);\r
                        if( IDorELM.id && IDorELM.id.indexOf( 'templete-') === 0){\r
-                               IDorELM.id = '';\r
+                               IDorELM.removeAttribute( 'id');\r
                        }\r
                        return IDorELM;\r
                },\r
@@ -442,20 +442,20 @@ pettanr.util = ( function(){
                                _node, _classes, ret = [];\r
                        for( var i=0, l = _nodes.length; i<l; ++i){\r
                                _node = _nodes[ i];\r
-                               if( _node.nodeType === 1){\r
-                                       _classes = _node.className.split( ' ');\r
-                                       for( var j=0, m=_classes.length; j<m; ++j){\r
-                                               if( _classes[ j] === _className){\r
-                                                       ret.push( _node);\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                               }\r
+                               _node.nodeType === 1 && this.hasClassName( _node, _className) === true && ret.push( _node);\r
                        }\r
                        return ret;\r
                },\r
+               getChildIndex: function( _parent, _child){\r
+                       var _children = _parent.getElementsByTagName( _child.tagName),\r
+                               l = _children.length;\r
+                       for(var i=0; i<l; ++i){\r
+                               if( _children[ i] === _child) return i;\r
+                       }\r
+                       return -1;\r
+               },\r
                hasClassName: function( _elm, _className){\r
-                       var _classes = _elm.className.split( ' ');\r
+                       var _classes = ( _elm.className || '').split( ' ');\r
                        for( var i=0, l=_classes.length; i<l; ++i){\r
                                if( _classes[ i] === _className) return true;\r
                        }\r
@@ -472,6 +472,21 @@ pettanr.util = ( function(){
                                _node.parentNode && _node.parentNode.removeChild( _node);\r
                        }\r
                },\r
+               getIndex: function( _array, _element){\r
+                       if( Array.prototype.indexof){\r
+                               pettanr.util.getIndex = function( _array, _element){\r
+                                       return _array.indexof( _element);\r
+                               }\r
+                       } else {\r
+                               pettanr.util.getIndex = function( _array, _element){\r
+                                       for( var i=0, l = _array.length; i<l; ++i){\r
+                                               if( _array[ i] === _element) return i;\r
+                                       }\r
+                                       return -1;                                      \r
+                               }\r
+                       }\r
+                       return pettanr.util.getIndex( _array, _element);\r
+               },\r
                /*\r
                 * \r
                 */\r
@@ -557,33 +572,54 @@ pettanr.ua = ( function(){
                ieVersion = isIE === true ? parseInt( navigator.appVersion.toLowerCase().replace( /.*msie[ ]/, '').match( /^[0-9]+/)) : 0,\r
                ieRenderingVersion = ieVersion === 8 ? document.documentMode : ieVersion,\r
                isStanderdMode = document.compatMode === 'CSS1Compat',\r
-               VML = ( function(){\r
+               ActiveX = ( function(){\r
                        if( isIE === false || ieVersion > 8) return false;\r
+                       var     b = document.body,\r
+                               c = b.className || '',\r
+                               x,\r
+                               ret = pettanr.URL_PARAMS.ActiveX,\r
+                               ns = 'pettanr-ActiveX-',\r
+                               enabled = 'enabled',\r
+                               disabled = 'disabled';\r
+                       if( ret !== true && ret !== false){\r
+                               if( pettanr.util.hasClassName( b, ns + enabled) === true) return true;\r
+                               if( pettanr.util.hasClassName( b, ns + disabled) === true) return false;\r
+                               x = document.createElement('div');\r
+                               b.appendChild(x);\r
+                               x.style.cssText = 'width:1px;height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';\r
+                               ret = x.offsetHeight > 1;\r
+                               b.removeChild(x);\r
+                       }\r
+                       b.className += [ c !== '' ? ' ' : c, ns, ret === true ? enabled : disabled ].join( '');\r
+                       return ret;\r
+               })(),\r
+               VML = ( function(){\r
+                       if( ActiveX === false || isIE === false || ieVersion > 8) return false;\r
                        var globalObjectName = pettanr.util.createGlobalUniqueName(),\r
-                               script;\r
-                       document.write( [ '<!--[if gte vml 1]><script id="detectVML">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
+                               script,\r
+                               id = 'detectVML';\r
+                       document.write( [ '<!--[if gte vml 1]><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
                        if( window[globalObjectName] === 1){\r
-                               script = document.getElementById( 'detectVML');\r
+                               script = document.getElementById( id);\r
                                script.parentNode.removeChild( script);\r
-                               window[globalObjectName] = script = null;\r
+                               window[globalObjectName] = null;\r
                                return true;\r
                        }\r
-                       //pettanr.util.cleanCommnetNode();\r
                        return false;\r
                })(),\r
                isStandAloneMode = ( function(){\r
                        if( isIE === false) return false;\r
                        if( VML === true) return false;\r
                        var globalObjectName = pettanr.util.createGlobalUniqueName(),\r
-                               script;\r
-                       document.write( [ '<!--[if IE ', Math.floor( ieVersion), ']><script id="detectStandAlone">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
+                               script,\r
+                               id = 'detectStandAlone';\r
+                       document.write( [ '<!--[if IE ', Math.floor( ieVersion), ']><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
                        if( window[globalObjectName] === 1){\r
-                               script = document.getElementById( 'detectStandAlone');\r
+                               script = document.getElementById( id);\r
                                script.parentNode.removeChild( script);\r
-                               window[globalObjectName] = script = null;\r
+                               window[globalObjectName] = null;\r
                                return false;\r
                        }\r
-                       //pettanr.util.cleanCommnetNode();\r
                        return true;\r
                })();\r
        return {\r
@@ -610,24 +646,7 @@ pettanr.ua = ( function(){
                        }\r
                        return '';\r
                })(),\r
-               ACTIVEX: ( function(){\r
-                       if( isIE === false || ieVersion > 8) return false;\r
-                       var     b = document.body,\r
-                               c = b.className || '',\r
-                               x,\r
-                               ret = pettanr.URL_PARAMS.ActiveX;\r
-                       if( ret === undefined){\r
-                               if( pettanr.util.hasClassName( b, 'pettanr-ActiveX-enabled') === true) return true;\r
-                               if( pettanr.util.hasClassName( b, 'pettanr-ActiveX-disabled') === true) return false;\r
-                               x = document.createElement('div');\r
-                               b.appendChild(x);\r
-                               x.style.cssText = 'width:1px;height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';\r
-                               ret = x.offsetHeight > 1;\r
-                               b.removeChild(x);\r
-                       }\r
-                       b.className += [ c !== '' ? ' ' : c, 'pettanr-ActiveX-', ret === true ? 'enabled' : 'disabled'].join( '');\r
-                       return ret;\r
-               })(),\r
+               ACTIVEX: ActiveX,\r
                VML: VML,\r
                STANDALONE: isStandAloneMode,\r
                startVML: function(){\r
@@ -644,13 +663,15 @@ pettanr.ua = ( function(){
 \r
 pettanr.CONST = ( function(){\r
        var isLocal = pettanr.LOCAL === true || pettanr.URL_PARAMS.exjson === false,\r
-               RETTANR_ROOOT_PATH = 'http:\/\/pettanr.heroku.com\/';\r
+               isLocalhost = document.location.href.indexOf( 'http:\/\/localhost:3000\/' ) === 0,\r
+               RETTANR_ROOT_PATH = isLocalhost === true ? 'http:\/\/localhost:3000\/' : 'http:\/\/pettanr.heroku.com\/';\r
+               \r
        return {\r
-               PETTANR_ROOT_PATH:                      RETTANR_ROOOT_PATH,\r
-               URL_ORIGINAL_PICTURES_JSON: ( isLocal === true ? 'json\/' : RETTANR_ROOOT_PATH) + 'original_pictures.json',\r
-               URL_PANELS_JSON:                        ( isLocal === true ? 'json\/' : RETTANR_ROOOT_PATH) + 'panels.json',\r
+               PETTANR_ROOT_PATH:                      RETTANR_ROOT_PATH,\r
+               URL_ORIGINAL_PICTURES_JSON: ( isLocal === true ? 'json\/' : RETTANR_ROOT_PATH) + 'original_pictures.json',\r
+               URL_PANELS_JSON:                        ( isLocal === true ? 'json\/' : RETTANR_ROOT_PATH) + 'panels.json',\r
                NS_PETTANR_COMIC:                       'pettanr-comic',\r
-               RESOURCE_PICTURE_PATH:          ( isLocal === true ? pettanr.ROOT_PATH : RETTANR_ROOOT_PATH) + 'resource_pictures\/'\r
+               RESOURCE_PICTURE_PATH:          ( isLocal === true ? pettanr.ROOT_PATH : RETTANR_ROOT_PATH) + 'resource_pictures\/'\r
        }\r
 })();\r
 \r
@@ -658,135 +679,40 @@ pettanr.CONST = ( function(){
 pettanr.view = ( function(){\r
        /* create iframe overlay for user console */\r
        var location = document.location.pathname,\r
-               isWorkPage = location.indexOf( '\/work.html') !== -1 || location.indexOf( '\work.html') !== -1,\r
+               isWorkPage =    document.location.href.indexOf( 'http:\/\/localhost:3000\/' ) === 0 ||\r
+                                               location.indexOf( pettanr.CONST.PETTANR_ROOT_PATH ) === 0 ||\r
+                                               location.indexOf( '\/work.html') !== -1 ||\r
+                                               location.indexOf( '\work.html') !== -1,\r
                deep =  location.indexOf( '\/diary\/') !== -1 ||\r
                                location.indexOf( '\/test\/') !== -1 ||\r
                                location.indexOf( '\/help\/') !== -1 ||\r
                                location.indexOf( '\/sitemap\/') !== -1 ||\r
                                location.indexOf( '\/wiki\/') !== -1,\r
                LoginUserNavi;\r
-\r
+       \r
        if( isWorkPage === false){\r
                LoginUserNavi = ( function(){\r
                        var _body = document.body,\r
-                               _root = document.getElementsByTagName( 'html')[ 0],\r
+                               _root = document.getElementsByTagName( 'html' )[ 0 ],\r
                                filter,\r
                                iframe, visible = false;\r
                        return {\r
-                               init: function( viewIndex){\r
-                                       filter = document.createElement( 'div');\r
-                                       filter.style.position = 'absolute';\r
-                                       filter.style.left = filter.style.top = '0px';\r
-                                       filter.style.width = filter.style.height ='100%';\r
-                                       filter.style.backgroundColor = '#fff';\r
-       \r
-                                       var ua = pettanr.ua,\r
-                                               id = 'work',\r
-                                               src = [\r
-                                                               deep === true ? '../' : '',\r
-                                                               'work.html',\r
-                                                               typeof viewIndex === 'number' ? '?view=' +viewIndex : ''\r
-                                               ].join( '');\r
-                                       \r
-                                       var el = document.createElement(ua.isIE ? '<iframe name="' + id + '" src="' + src + '">' : 'iframe');\r
-                                       el.id = el.name = id;\r
-                                       el.setAttribute( 'name', id);\r
-                                       \r
-                                       el.style.position = 'absolute';\r
-                                       el.style.left = el.style.top = '0px';\r
-                                       el.style.width = el.style.height ='100%';\r
-                                       //el.style.overflow = 'hidden';\r
-                                       el.hspace = el.vspace = el.marginheight = el.marginwidth = 0;\r
-                                       \r
-                                       _body.appendChild(el);\r
-                                       window[id] = el;\r
-                                       iframe = el;\r
-                                       \r
-                                       if (!ua.isIE) {\r
-                                               var idoc;//WebKit > 521 corresponds with Safari 3, which started with 522 WebKit version.\r
-                                               if (ua.isWebKit > 521) {\r
-                                                       idoc = el.contentWindow.document;\r
-                                               } else if (ua.isSafari) {\r
-                                                       idoc = el.document;\r
-                                               } else { //  if(d.isMozilla){\r
-                                                       idoc = el.contentWindow;\r
-                                               }\r
-                                               \r
-                                               if ( !idoc) {\r
-                                                       try {\r
-                                                               el.src = src;\r
-                                                               el.contentWindow.location.replace = src;                                                        \r
-                                                       } catch (e){}\r
-                                                       try {\r
-                                                               //el.contentWindow.location = src;                                                      \r
-                                                       } catch (e){}\r
-                                                       try {\r
-                                                               el.location = src; // for Safari 2.0.3 ??\r
-                                                       } catch (e){}\r
-                                                       \r
-                                               } else if( ua.isOpera){\r
-                                                       el.src = src; // for Opera\r
-                                                       el.contentWindow.location.replace = src; // for Opera\r
-                                               } else {\r
-                                                       //el.src = src; // for firefox\r
-                                                       idoc.location.replace(src);\r
-                                               }\r
-                                       }\r
-                                       \r
-                                       delete LoginUserNavi.init;\r
-                               },\r
                                show: function(){\r
-                                       if(visible === true) return;\r
-                                       if (_root) {\r
-                                               _root.style.overflow = 'hidden';\r
-                                       }\r
-                                       _body.style.overflow = 'hidden';\r
-                                       \r
-                                       var index = ( function( a){\r
-                                               var node = a.parentNode.getElementsByTagName( 'a'),\r
-                                                       l = node.length;\r
-                                               for( var i=0; i<l; ++i){\r
-                                                       if( node[ i] === a) return i\r
-                                               }\r
-                                               return -1;\r
-                                       })( this);\r
-                                       if( index === -1) return false;\r
-                                       \r
-                                       LoginUserNavi.init && LoginUserNavi.init( index);\r
-                                       \r
-                                       iframe.parentNode !== _body && _body.appendChild( iframe);\r
-                                       \r
-                                       _body.insertBefore( filter, iframe);\r
-                                       \r
-                                       visible = true;\r
-                                       \r
-                                       return false;\r
+                                       document.location.href = [\r
+                                                       deep === true ? '../' : '',\r
+                                                       'work.html',\r
+                                                       typeof viewIndex === 'number' ? '?view=' + viewIndex : ''\r
+                                               ].join( '');\r
                                },\r
-                               hide: function(){\r
-                                       if(visible === false) return;\r
-                                       \r
-                                       _body.removeChild(filter);\r
-                                       _body.style.overflow = '';\r
-                                       if (_root) {\r
-                                               _root.style.overflow = '';\r
-                                       }\r
-                                       _body.removeChild(iframe);\r
-                                       \r
-                                       visible = false;\r
-                               }\r
+                               hide: function(){}\r
                        }\r
                })();\r
        } else {\r
                LoginUserNavi = ( function(){\r
                        return {\r
                                show: function(){\r
-                                       var _nodes = this.parentNode.getElementsByTagName( 'a');\r
-                                       for( var i=0, l=_nodes.length; i<l; ++i){\r
-                                               if( _nodes[ i] === this){\r
-                                                       pettanr.view.show( i);\r
-                                                       break;\r
-                                               }\r
-                                       }\r
+                                       var i = pettanr.util.getChildIndex( this.parentNode, this );\r
+                                       i !== -1 && pettanr.view.show( i );\r
                                        return false;\r
                                },\r
                                hide: function(){}\r
@@ -1992,7 +1918,7 @@ pettanr.image = ( function(){
 })();\r
 \r
 /*\r
- * bind : 出版
+ * bind : 製本
  */\r
 pettanr.bind = ( function(){\r
        var BIND_WORKER_ARRAY = [],\r
@@ -2197,6 +2123,7 @@ var VisualEffect = ( function(){
                TIMER = null,\r
                FILTER = 'filter',\r
                OPACITY = 'opacity',\r
+               REG_ALPHA = /alpha\([^)]*\)/i,\r
                CORON = ':',\r
                EMPTY = '',\r
                SEMICORON = ';';\r
@@ -2211,7 +2138,29 @@ var VisualEffect = ( function(){
                        }\r
                }\r
                //  coputedStyle と _cssObject を比較して , 一致及び非数は削除しつつ コピー\r
+               //  filter opacity の追加 REG_ALPHA.test( _value ) ? _value.replace( REG_ALPHA, opacity ) : _value + " " + opacity\r
+               /*\r
+                * cssObject をまわす\r
+                * 非数は削除\r
+                * cssText と一致も削除\r
+                * coputedStyle と一致も削除\r
+                * updateTraget ととして記録\r
+                * 初期値を cssObject としてセット\r
+                * cssTest にセット zoom もセット 
+                */\r
+               \r
                //\r
+               /*\r
+                       var style = elem.style,\r
+                               currentStyle = elem.currentStyle,\r
+                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",\r
+                               filter = currentStyle && currentStyle.filter || style.filter || "";\r
+\r
+                       // IE has trouble with opacity if it does not have layout\r
+                       // Force it by setting the zoom level\r
+                       style.zoom = 1;
+                */\r
+               \r
                var _currentParameters = [],\r
                        _offsetParameters = [],\r
                        _endParameters = [],\r
@@ -2250,7 +2199,7 @@ var VisualEffect = ( function(){
                if( _numAttributes > 1){\r
                        var _cssTexts = _elm.style.cssText.split( ';'), _css,\r
                                _separate,\r
-                               _cssObject = {}, _target, _value, _number, _type, _new,\r
+                               _cssObject = {}, _target, _value, _number, _px,\r
                                j;\r
                        for(var i=0, l=_cssTexts.length; i<l; ++i){\r
                                _css = _cssTexts[ i];\r
@@ -2264,9 +2213,10 @@ var VisualEffect = ( function(){
                                        if( _target === FILTER){\r
                                                for( j=0; j<_numAttributes; ++j){\r
                                                        if( _targetAttributes[ j] === OPACITY){\r
-                                                               \r
-                                                               \r
-                                                               \r
+                                                               _cssTexts[ i] = [\r
+                                                                               _target, ':',\r
+                                                                               _value.replace( REG_ALPHA, "alpha(opacity=" + _updateParameters[ j] * 100 + ")")\r
+                                                                       ].join( '');\r
                                                                break;\r
                                                        }\r
                                                }\r
@@ -2275,11 +2225,11 @@ var VisualEffect = ( function(){
                                         */\r
                                        } else {\r
                                                _number = '' + parseFloat( _value);\r
-                                               _type = _value.indexOf( _number);\r
-                                               _type = _type > 0 ? _value.substr( _type + _number.length) : '';\r
+                                               _px = _value.indexOf( _number);\r
+                                               _px = _px > 0 ? _value.substr( _px + _number.length) : '';\r
                                                for( j=0; j<_numAttributes; ++j){\r
                                                        if( _targetAttributes[ j] === _target){\r
-                                                               _cssTexts[ i] = [ _target, ':', _updateParameters[ j], _type].join( '');\r
+                                                               _cssTexts[ i] = [ _target, ':', _updateParameters[ j], _px].join( '');\r
                                                                break;\r
                                                        }\r
                                                }                                               \r
@@ -2292,7 +2242,6 @@ var VisualEffect = ( function(){
                /*\r
                 * 一度に update する Attributes が少ない場合、cssText は使用しない.
                 */\r
-               \r
        }\r
        \r
        var AnimationTaskClass = function( ELM, currentParameters, offsetParameters, endParameters, targetAttributes, onComplete, onEnterFrame, numFrames){\r
index 88a4ac3..2b342b3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * pettanR system.js
- *   version 0.4.2
+ *   version 0.4.4
  *   
  * author:
  *   itozyun
@@ -35,41 +35,14 @@ pettanr.io = ( function(){
  * 画像一覧を読み込むタイミング
  */
 pettanr.file = ( function(){
-       var TREE_TYPE_IS_COMIC = 1,
-               TREE_TYPE_IS_IMAGE = 2,
-               FILE_TYPE_IS_FOLDER = 1,
-               FILE_TYPE_IS_COMIC = 10,
-               FILE_TYPE_IS_PANEL = 11,
-               FILE_TYPE_IS_IMAGE = 20,
-               FILE_TYPE_IS_HTML = 30,
-               FILE_TYPE_IS_SETTING = 40,
-               FOLDER_TYPE_IS_COMIC = 1,
-               FILE_STATE_IS_UNKNOWN = 0,
-               FILE_STATE_IS_OK = 1,
-               FILE_STATE_IS_LOADING = 2,
-               FILE_STATE_IS_ERROR = 3,
-               FILE_STATE_IS_BROKEN = 4,
-               TREE_EVENT_UPDATE = 'onTreeUpdate',
-               FILE_EVENT_UPDATE_ATTRIVUTE = 'onFileUpdate',
-               FILE_EVENT_GET_SEQENTIAL_FILES = 'gotSeqentilFiles',
-               ROLE_IS_SUPER_USER = 2^4,
-               ROLE_IS_OWNER = 2^3,
-               ROLE_IS_CREATOR = 2^2,
-               ROLE_IS_ARTIST = 2^1,
-               ROLE_IS_VISITOR = 2^0,
-               ROLE_IS_UNKROWN = 2^-1,
-               UPDATE_POLICY_SOCAV = parseInt( '11111', 2),// s: super user
-               UPDATE_POLICY_SOCA_ = parseInt( '11110', 2),// o: owner( comic || panel || picture )
-               UPDATE_POLICY_SOC__ = parseInt( '11100', 2),// c: creator
-               UPDATE_POLICY_SO_A_ = parseInt( '11010', 2),// a: artist
-               UPDATE_POLICY_SO___ = parseInt( '11000', 2),// v: visitor
-               UPDATE_POLICY__O___ = parseInt( '01000', 2),// l: lisence manager
-               UPDATE_POLICY_S____ = parseInt( '10000', 2),
-               UPDATE_POLICY______ = parseInt( '00000', 2),
+       var FILE_TYPE_IS_FOLDER = 1,
+               numFileType = FILE_TYPE_IS_FOLDER,
                FILEDATA_RESITER = [],                  // store all of fileData( json object )
-               FILEDATA_HAS_domainID_RESISTER = {},
                FILEDATA_ACCESS = [],                   // file operations for Kernel only ! hide from Out of pettanr.file
-               FILE_OBJECT_POOL = [];
+               FILE_OBJECT_POOL = [],
+               EVENT_LISTENER_RESISTER = [],
+               TREE_ARRAY = [],
+               TREE_ACCESS_ARRAY = [];
        
        var REQUEST_CONTROLER = ( function(){
                var REQUEST_TICKET_RESISTER = [],
@@ -106,9 +79,6 @@ pettanr.file = ( function(){
                }
                
                return {
-                       init: function(){
-                               delete REQUEST_CONTROLER.init;
-                       },
                        getNumTask: function(){
                                return REQUEST_TICKET_RESISTER.length;
                        },
@@ -125,299 +95,46 @@ 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; ++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;
-                       
-                       if( typeof UIDorFILEorFILEDATA === 'number'){
-                               _data = FILEDATA_RESITER[ UIDorFILEorFILEDATA] || null;
-                       } else
-                       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<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 = [];
-                       }
-                       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);
-                               }
-                       }
-                       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;
-                       }
-               }
-               function buildFileData( _data, _url, _parent, _type){
-                       _data.type = _type;
-
-                       if( _type === FILE_TYPE_IS_PANEL){
-                               _data.comicFileData = _parent;
-                       }
-
-                       FILEDATA_RESITER.push( _data);
-                       
-                       return _data;
-               }
-               function buildDomainID( _url, _type){
-                       if( !_url) return null;
-                       var _typeStr = null;
-                       
-                       if( typeof _type !== 'number'){
-                               _typeStr = _type
-                       } else
-                       if( _type === FILE_TYPE_IS_IMAGE){
-                               _typeStr = 'image';
-                       } else
-                       if( _type === FILE_TYPE_IS_COMIC){
-                               _typeStr = 'comic';
-                       }
-                       if( _type === FILE_TYPE_IS_PANEL){
-                               _typeStr = 'panel';
-                       }
-                       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;
-                       
-                       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);
-                               }
-                       }
-                       
-                       return _newData;
-               }
-               
-               function destroyTree(){
-                       
-               }
                
                return {
-                       init: function(){
-                               instance = this;
-                               delete FILE_CONTROLER.init;
-                       },
                        createTree: function( _rootFileData){
                                var _tree = new TreeClass( _rootFileData);
                                _tree.init();
                                TREE_ARRAY.push( _tree);
                                return _tree;
                        },
-                       getFileData: function( _file){
-                               var _access = getFileDataAccess( _file);
+                       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;
+                               } else
+                               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, l = FILEDATA_ACCESS.length; i<l; ++i){
+                                       _access = FILEDATA_ACCESS[ i];
+                                       if( _access.DATA === _data) return _access;
+                               }
+                               return null;
+                       },
+                       getDriver: function( _file){
+                               var _data = FILE_CONTROLER.getFileData( _file);
+                               return _data !== null && _data.driver ? ( _data.driver || FileDriverBase) : null;
+                       },
                        getUID: function ( _filedata){
                                var l = FILEDATA_RESITER.length;
                                for( var i=0; i<l; ++i){
@@ -426,42 +143,56 @@ pettanr.file = ( function(){
                                return -1;
                        },
                        getSeqentialFiles: function( _file){
-                               var _data = this.getFileData( _file),
-                                       _json = _data ? _data.json : null;
-                               if( _json !== null){
-                                       REQUEST_CONTROLER.getJson( _file, _json, onLoadJson, onErrorJson);
+                               var _driver = FILE_CONTROLER.getDriver( _file);
+                               if( _driver !== null && typeof _driver.getSeqentialFiles === 'function'){
+                                       _driver.getSeqentialFiles( _file);
                                }
                        },
                        updateFileAttribute: function( _uid, key, _value, _opt_callback){
-                               var _data = getFileDataAccess( _uid),
+                               var _data = FILE_CONTROLER.getFileDataAccess( _uid),
                                        _type = _data.TYPE;
                                
                        },                      
                        getFileAttribute: function( _uid, KEYorKEYARRAY){
-                               var _fileData = getFileDataAccess( _uid),
+                               var _fileData = FILE_CONTROLER.getFileDataAccess( _uid),
                                        _type = _fileData.TYPE;
                        },
                        move: function( _prentUID, _targetfile, _newFolder, _newIndex, _opt_callback){
-                               var _parentData = getFileDataAccess( _prentUID),
+                               var _parentData = FILE_CONTROLER.getFileDataAccess( _prentUID),
                                        _parentType = _parentData.TYPE,
-                                       _targetData = getFileDataAccess( _targetfile),
+                                       _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_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();
+                                       }
+                               }
+                       },
                        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);
+                               _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.fileEventChatcher( _event);
+                                                       TREE_ACCESS_ARRAY[ _tree.getUID()].dispatchFileEvent( _event);
                                                }
                                        }
                                }
@@ -469,24 +200,113 @@ pettanr.file = ( function(){
                }
        })();
 
-       var FileEventTicketClass = function( UID, _eventType, _callback){
+       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;
+                       
+               TREE_ACCESS_ARRAY.push( ACCESS);
+               
+               function onDestroy(){
+                       
+               }
+               
+               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 {
-                       fileUID:        UID,
-                       eventType:      _eventType,
-                       callBack:       _callback,
+                       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){
+                               FILE_CONTROLER.addEventListener( null, _eventType, _callback);
+                       },
+                       removeTreeEventListener: function( _eventType, _callback){
+                               FILE_CONTROLER.removeEventListener( null, _eventType, _callback);
+                       },
                        destroy: function(){
-                               this.callBack = _callback = null;
+                               FILE_CONTROLER.destroyTree( UID);
                        }
                }
+       };
+
+       var FileEventTicketClass = function( UID, _eventType, _callback){
+               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;
        }
 
 /*
@@ -502,14 +322,14 @@ pettanr.file = ( function(){
                        data.children = [];
                }
                var TYPE = data.type,
-                       name = data.name || null,
+                       name = null,
+                       driver = data.driver || FileDriverBase,
                        thumbnail = null,
                        uid = FILE_CONTROLER.getUID( data),
                        CHILDREN = data.children,
-                       instance;
+                       instance = this;
                
                if( uid === -1){
-                       //alert( 'invalid uid');
                        uid = FILEDATA_RESITER.length;
                        FILEDATA_RESITER.push( data);
                }
@@ -520,11 +340,11 @@ pettanr.file = ( function(){
                                DATA:                           data,
                                destroy:                        destroy,
                                updateParent:           updateParent,
-                               fileEventChatcher:      dispatchEvent
+                               dispatchFileEvent:      dispatchEvent
                        }
                );
                function destroy(){
-                       name = thumbnail = parentFile = data = CHILDREN = null;
+                       name = thumbnail = parentFile = data = CHILDREN = driver = null;
                        
                }
                function updateParent( _parent){
@@ -536,48 +356,65 @@ pettanr.file = ( function(){
                
                /* grobal Methods */
                this.init = function(){
-                       instance = this;
+                       //instance = this;
                        delete this.init;
                }
-               this.TYPE = function(){
+               this.getType = 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;
+                       if( typeof driver.getName === 'function'){
+                               name = driver.getName( instance);
                        }
-                       return name || 'no_name';
+                       return name;
                }
                this.getThumbnail = function(){
                        if( thumbnail !== null) return thumbnail;
-                       if( TYPE === FILE_TYPE_IS_IMAGE){
-                               thumbnail = [ 'thumbnail/', data.id, '.', data.ext].join( '');
+                       if( typeof driver.getThumbnail === 'function'){
+                               thumbnail = driver.getThumbnail( instance);
                        }
                        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){
+               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(){
+                       
+               }
+       };
+       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 && typeof CHILDREN.length === 'number' ? CHILDREN.length : 0;
+               },
+               getChildFileIndex: function( _FILEorFILEDATA){
+                       var CHILDREN = FILE_CONTROLER.getChildren( this);
+                       
                        if( !CHILDREN || typeof CHILDREN.length !== 'number') return -1;
                        var l = CHILDREN.length,
                                _fileData = FILE_CONTROLER.getFileData( _FILEorFILEDATA);
@@ -586,107 +423,163 @@ pettanr.file = ( function(){
                                if( CHILDREN[ i] === _fileData) return i;
                        }
                        return -1;
+               },
+               getState: function(){
+                       var _data = FILE_CONTROLER.getFileData( this);
+                       return _data.state !== undefined ? _data.state : pettanr.file.FILE_STATE.OK;
                }
-               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(){
+       }
+
+       /*
+        * 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
+                       }
+               },
+               isWritable: function( _file){
+                       return false;
+               },
+               isSortable: function( _file){
+                       return false;
+               },              
+               isCreatable: function( _file){
+                       return false;
+               },
+               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: {
+                       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
+               },
+               TREE_EVENT: {
+                       UPDATE:                         'onTreeUpdate'
+               },
+               FILE_EVENT: {
+                       UPDATE_ATTRIVUTE:       'onFileUpdate',
+                       GET_SEQENTIAL_FILES:'gotSeqentilFiles'
+               },
+               FILE_DATA_PROPERTY_RESERVED: [
+                       'children', 'driver', 'state', 'type', 'name'
+               ]
        }
 })();
 
@@ -714,11 +607,11 @@ pettanr.finder = ( function(){
 
                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();
@@ -761,7 +654,7 @@ pettanr.finder = ( function(){
                        onResize: function( w){
                                
                        },
-                       collect: function(){
+                       destroy: function(){
                                elmContainer.removeChild( ELM_WRAPPER);
                                file = elmContainer = null;
                                FINDER_ICON_POOL.push( instansce);
@@ -779,7 +672,7 @@ pettanr.finder = ( function(){
                        callback;
                ELM_WRAPPER.onclick = onClick;
                function draw(){
-                       ELM_FILENAME.className = 'file-icon-' +file.TYPE();
+                       ELM_FILENAME.className = 'file-icon-' +file.getType();
                        ELM_FILENAME.innerHTML = file.getName();
                }
                function resize( index){
@@ -787,6 +680,7 @@ pettanr.finder = ( function(){
                }
                function onClick(){
                        callback( index);
+                       return false;
                }
 
                return {
@@ -814,7 +708,7 @@ pettanr.finder = ( function(){
                        onResize: function( w){
                                
                        },
-                       collect: function(){
+                       destroy: function(){
                                elmContainer.removeChild( ELM_WRAPPER);
                                file = elmContainer = null;
                                BREAD_OBJECT_POOL.push( this);
@@ -822,7 +716,7 @@ pettanr.finder = ( function(){
                }
        }
        
-       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),
@@ -832,7 +726,7 @@ pettanr.finder = ( function(){
                        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,
@@ -845,7 +739,7 @@ pettanr.finder = ( function(){
                        style = 0;
                        w = 800;
 
-               tree.addTreeEventListener( 'onTreeUpdate', draw);
+               tree.addTreeEventListener( pettanr.file.TREE_EVENT.UPDATE, draw);
                
                function draw(){
                        var     l = tree.hierarchy() +1,
@@ -860,7 +754,7 @@ pettanr.finder = ( function(){
                                }
                        }
                        while( l < BREAD_ARRAY.length){
-                               BREAD_ARRAY.pop().collect();
+                               BREAD_ARRAY.pop().destroy();
                        }
                        
                        l = _file.getChildFileLength();
@@ -874,7 +768,7 @@ pettanr.finder = ( function(){
                                }
                        }
                        while( l < ICON_ARRAY.length){
-                               ICON_ARRAY.pop().collect();
+                               ICON_ARRAY.pop().destroy();
                        }
                }
                function onHeadClick( i){
@@ -891,34 +785,32 @@ pettanr.finder = ( function(){
                        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){
@@ -947,14 +839,315 @@ 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, 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.name + '先生';
+                               } else
+                               if( _type === pettanr.driver.FILE_TYPE.AUTHOR){
+                                       return _data.name + '先生';
+                               }
+                               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),
+                                       _comics = getFolderData( _data, 'author', FILE_DATA_AUTHOR_ROOT).children;
+                               _comic.children.push( _data);
+                               pettanr.util.getIndex( _comics, _comic) === -1 && _comics.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){
+                       _data.artist && getFolderData( _data, 'artist', FILE_DATA_ARTIST_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;// このタイミングで参照が切れるので注意!!
+               }
+               
+               _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;
+                       _id === MyAuthorID && FILE_DATA_MY_COMICS_ROOT.children.push( _ret);
+               } else
+               if( _parentData === FILE_DATA_ARTIST_ROOT){
+                       _ret.type = pettanr.driver.FILE_TYPE.ARTIST;
+                       _id === MyArtistID && FILE_DATA_MY_PICTURES_ROOT.children.push( _ret);
+               } 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);
+               },
+               isPettanrFile: function( _file){
+                       
+               },
+               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'),
@@ -966,7 +1159,7 @@ pettanr.gallery = ( function(){
                        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(){
@@ -994,7 +1187,7 @@ pettanr.cabinet = ( 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(){
index 1dffaec..7a6312a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * pettanR work.js\r
- *   version 0.4.2\r
+ *   version 0.4.4\r
  *   \r
  * author:\r
  *   itozyun\r
@@ -35,7 +35,7 @@
 /* ----------------------------------------\r
  *   pettanr.editor\r
  *    - MENU_BAR_CONTROL\r
- *    - HISTORY\r
+ *    - HISTORY_CONTROL\r
  *    - SAVE_CONTROL\r
  *    - TEXT_EDITOR_CONTROL\r
  *    - IMAGE_GROUP_EXPROLER\r
@@ -87,6 +87,9 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * MENU BAR\r
+ *  - mouseEventListener\r
+ *  - controler\r
+ * \r
  * div\r
  *   div.title\r
  *   ul\r
@@ -180,15 +183,7 @@ pettanr.editor = ( function(){
                        \r
                        function onClick( e){\r
                                var that = this,\r
-                                       i = ( function(){\r
-                                               var parent = that.parentNode,\r
-                                                       children = parent.getElementsByTagName( 'li'),\r
-                                                       l = children.length;\r
-                                               for(var i=0; i<l; ++i){\r
-                                                       if( children[ i] === that) return i;\r
-                                               }\r
-                                               return -1;\r
-                                       })();\r
+                                       i = pettanr.util.getChildIndex( this.parentNode, this);\r
                                i !== -1 && this.className !== 'disabled' && SELECTION_CALLBACK_ARRAY[ i]( i);\r
                                e.stopPropagation();\r
                                return false;\r
@@ -317,9 +312,10 @@ pettanr.editor = ( function(){
 \r
 \r
 /* ----------------------------------------\r
- * HISTORY\r
+ * HISTORY_CONTROL\r
+ *  - controler\r
  */\r
-       var HISTORY = ( function() {\r
+       var HISTORY_CONTROL = ( function() {\r
                var     STACK_BACK = [],\r
                        STACK_FORWARD = [],\r
                        MENUBAR_BACK = MENU_BAR_CONTROL.EDIT.createSelection( 'back', 'ctrl + z', back, false),\r
@@ -378,10 +374,10 @@ pettanr.editor = ( function(){
                return {\r
                        init: function(){\r
                                log = $( '#history-log');\r
-                               delete HISTORY.init;\r
+                               delete HISTORY_CONTROL.init;\r
                        },\r
                        open: function(){\r
-                               HISTORY.init && HISTORY.init();\r
+                               HISTORY_CONTROL.init && HISTORY_CONTROL.init();\r
                        },\r
                        close: function(){\r
                                MENUBAR_BACK.visible( false);\r
@@ -415,9 +411,9 @@ pettanr.editor = ( function(){
 \r
 \r
 /* ----------------------------------------\r
- *     Save Control\r
+ * OUTPUT_CONSOLE\r
+ *  - overlay\r
  */\r
-\r
        var OUTPUT_CONSOLE = ( function(){\r
                var jqWrap, jqOutputArea,\r
                        ID = 'outputConsole';\r
@@ -465,20 +461,21 @@ pettanr.editor = ( function(){
                }\r
        })();\r
 \r
+/* ----------------------------------------\r
+ * SAVE_CONTROL\r
+ *  - controler\r
+ */\r
        var SAVE_CONTROL = ( function(){\r
                var SAVE = MENU_BAR_CONTROL.QUIT.createSelection( 'save', 'ctrl + S', quit, false),\r
                        SAVE_AND_QUIT = MENU_BAR_CONTROL.QUIT.createSelection( 'save & quit', null, quit, false, false, true),\r
                        SAVE_AS_HTML = MENU_BAR_CONTROL.QUIT.createSelection( 'get as html', null, outputAsHtml, true, false, true),\r
                        SAVE_AS_JSON_STRING = MENU_BAR_CONTROL.QUIT.createSelection( 'get JsonStr', null, outputAsJsonString, true, false, true),\r
-                       OUTPUT = MENU_BAR_CONTROL.QUIT.createSelection( 'output', null, onOutputClick, true, false, true),\r
                        QUIT = MENU_BAR_CONTROL.QUIT.createSelection( 'quit', null, quit, true, true),\r
                        updated = false;\r
                \r
                function quit(){\r
-               }\r
-               \r
-               function onOutputClick(){\r
-                       // OUTPUT_CONSOLE.show();\r
+                       // 本来は os.application.close();\r
+                       pettanr.view.show( 'entrance');\r
                }\r
                \r
                function outputAsHtml(){\r
@@ -488,6 +485,8 @@ pettanr.editor = ( function(){
                        OUTPUT_CONSOLE.show( COMIC_ELEMENT_CONTROL.getAsJsonString());\r
                }\r
                return {\r
+                       open: function(){},\r
+                       close: function(){},\r
                        quit: quit,\r
                        panelUpdated: function( _updated){\r
                                if( _updated !== undefined && updated !== _updated){\r
@@ -504,9 +503,9 @@ pettanr.editor = ( function(){
        })();\r
 \r
 /* ----------------------------------------\r
- *     Text Editor (Overlay)\r
+ * Text Editor\r
+ *  - overlay\r
  */\r
-       \r
        var TEXT_EDITOR_CONTROL = ( function(){\r
                var jqWrap, jqTextarea, jqButton,\r
                        textElement, onUpdateFunction,\r
@@ -574,7 +573,8 @@ pettanr.editor = ( function(){
        })();\r
 \r
 /* ----------------------------------------\r
- *     Image Group Exproler (Overlay)\r
+ * Image Group Exproler\r
+ *  - overlay\r
  */\r
        var IMAGE_GROUP_EXPROLER = ( function(){\r
                var ICON_ARRAY = [],\r
@@ -816,19 +816,6 @@ pettanr.editor = ( function(){
                                                        ].join( ''));\r
                                                pettanr.util.loadImage( SRC, window[ _onLoad], window[ _onError]);\r
                                                window[ _onLoad] = window[ _onError] = undefined;\r
-                                               /*\r
-                                               ( function( onUpdate){\r
-                                                       pettanr.util.loadImage( SRC,\r
-                                                               function( _abspath, imgW, imgH){\r
-                                                                       onUpdate( SRC, imgW, imgH);\r
-                                                                       onUpdate = null;\r
-                                                               },\r
-                                                               function( _abspath){\r
-                                                                       onUpdate( SRC, data.width || 64, data.height || 64);\r
-                                                                       onUpdate = null;\r
-                                                               }\r
-                                                       );                                                                              \r
-                                               })( onUpdateFunction);*/ // close()で値が消えるので、クロージャに保持\r
                                        }\r
                                }\r
                                close();\r
@@ -861,7 +848,7 @@ pettanr.editor = ( function(){
                                ICON_ARRAY.shift().destroy();\r
                        }\r
                        onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
-                       onEnterInterval = null;// onUpdateFunction = \r
+                       onEnterInterval = _g_onUpdateFunction = null;\r
                }\r
                function onEnterShowImage(){\r
                        var l = ICON_ARRAY.length,\r
@@ -875,7 +862,6 @@ pettanr.editor = ( function(){
                }\r
                function clickOK(){\r
                        pettanr.overlay.hide();\r
-                       // onUpdateFunction && onUpdateFunction( textElement);\r
                        close();\r
                }\r
                function onMouseWheel( e, delta){\r
@@ -981,6 +967,8 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * WINDOWS_CONTROL\r
+ *  - contloler\r
+ *  - mouseEventListener\r
  */    \r
        var WINDOWS_CONTROL = ( function(){\r
                /*\r
@@ -1217,7 +1205,7 @@ pettanr.editor = ( function(){
                        }\r
                };\r
                \r
-               function getCurrentWindow( _mouseX, _mouseY){\r
+               function getCurrentIndex( _mouseX, _mouseY){\r
                        if( currentWindow && currentWindow.busy() === true) return currentWindowIndex;\r
                        var l = WINDOW_ARRAY.length,\r
                                _currentWindow = null,\r
@@ -1261,13 +1249,19 @@ pettanr.editor = ( function(){
                                \r
                                delete WINDOWS_CONTROL.init;\r
                        },\r
+                       open: function(){\r
+                               WINDOWS_CONTROL.init && WINDOWS_CONTROL.init();\r
+                       },\r
+                       close: function(){\r
+                               \r
+                       },\r
                        onMouseMove: function( _mouseX, _mouseY){\r
-                               var _index = getCurrentWindow( _mouseX, _mouseY);\r
+                               var _index = getCurrentIndex( _mouseX, _mouseY);\r
                                if( _index === 0){\r
                                        currentWindow.onMouseMove( _mouseX, _mouseY);\r
                                        return true;\r
                                } else\r
-                               if( _index !== -1){ // 先頭のクリックでない場合\r
+                               if( _index > 0){ // 先頭のクリックでない場合\r
                                // Array を前に\r
                                        WINDOW_ARRAY.splice( currentWindowIndex, 1);\r
                                        WINDOW_ARRAY.unshift( currentWindow);\r
@@ -1279,14 +1273,14 @@ pettanr.editor = ( function(){
                                return false;\r
                        },\r
                        onMouseUp: function( _mouseX, _mouseY){\r
-                               if( getCurrentWindow( _mouseX, _mouseY) === 0){\r
+                               if( getCurrentIndex( _mouseX, _mouseY) === 0){\r
                                        currentWindow.onMouseUp( _mouseX, _mouseY);\r
                                        return true;\r
                                }\r
                                return false;\r
                        },\r
                        onMouseDown: function( _mouseX, _mouseY){\r
-                               if( getCurrentWindow( _mouseX, _mouseY) === 0){\r
+                               if( getCurrentIndex( _mouseX, _mouseY) === 0){\r
                                        currentWindow.onMouseDown( _mouseX, _mouseY);\r
                                        return true;\r
                                }\r
@@ -1300,7 +1294,7 @@ pettanr.editor = ( function(){
                                 * 画面外に出るwindowの移動\r
                                 */\r
                        },\r
-                       createWindow: function( scope, EXTENDS, bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH){\r
+                       createWindow: function( EXTENDS, bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH){\r
                                opt_visible = opt_visible !== false;\r
                                opt_closeButtonEnabled = opt_closeButtonEnabled === true;\r
                                opt_resizeButtonEnabled = opt_resizeButtonEnabled === true;\r
@@ -1308,7 +1302,9 @@ pettanr.editor = ( function(){
                                opt_minWindowH = opt_minWindowH || ( h < DEFAULT_MIN_WINDOW_HEIGHT) ? h : DEFAULT_MIN_WINDOW_HEIGHT;\r
                                \r
                                var _window = pettanr.util.extend(\r
-                                       WindowClass.apply( scope, [ bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH]),\r
+                                       new WindowClass(\r
+                                               bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH\r
+                                       ),\r
                                        EXTENDS\r
                                );\r
                                WINDOW_ARRAY.unshift( _window);\r
@@ -1321,6 +1317,7 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * TOOL_BOX_WINDOW\r
+ * - window\r
  */\r
        var TOOL_BOX_WINDOW = ( function(){\r
                var addImageButton, addTextButton, editBgButton, switchGridButton, popupHelpButton, postButton,\r
@@ -1337,34 +1334,33 @@ pettanr.editor = ( function(){
 \r
                function addImage( e){\r
                        setTimeout( COMIC_ELEMENT_CONTROL.createImageElement, 0);\r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                function addText( e){\r
                        setTimeout( COMIC_ELEMENT_CONTROL.createTextElement, 0);\r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                function switchGrid( e){\r
                        setTimeout( GRID_CONTROL.update, 0);\r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                function popupHelp( e){\r
                        instance.bodyBackOrForward( true);\r
                        setTimeout( HELP_DOCUMENTS_WINDOW.open, 0);\r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                function editBG( e){\r
                        instance.bodyBackOrForward( true);\r
                        setTimeout( INFOMATION_WINDOW.open, 0); \r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                \r
                return WINDOWS_CONTROL.createWindow(\r
-                       this,\r
                        {\r
                                onInit: function(){\r
                                        instance = this;\r
@@ -1389,19 +1385,19 @@ pettanr.editor = ( function(){
        \r
 /* ----------------------------------------\r
  * IMAGE_EXPROLER\r
+ *  - window\r
  */\r
        var IMAGE_EXPLORER_WINDOW = ( function(){\r
                var instance, finder;\r
                \r
                return WINDOWS_CONTROL.createWindow(\r
-                       this,\r
                        {\r
                                onInit: function(){\r
                                        instance = this;\r
                                        delete this.onInit;\r
                                },\r
                                onFirstOpen: function( _w, _h){\r
-                                       finder = pettanr.finder.createFinder( document.getElementById( 'image-exproler-container'), pettanr.file.TREE_TYPE_IS_IMAGE);\r
+                                       finder = pettanr.finder.createFinder( document.getElementById( 'image-exproler-container'), pettanr.driver.createPictureTree());\r
                                        delete this.onFirstOpen;\r
                                },\r
                                onOpen: function( _w, _h){\r
@@ -1418,6 +1414,7 @@ pettanr.editor = ( function(){
        \r
 /* ----------------------------------------\r
  * INFOMATION_WINDOW\r
+ *  - window\r
  */                    \r
        var INFOMATION_WINDOW = ( function(){\r
                var FADE_EFFECT_ENABLED = true, //pettanr.ua.isIE === false || pettanr.ua.ieVersion >= 8,\r
@@ -1432,7 +1429,6 @@ pettanr.editor = ( function(){
                        currentLock = false;\r
 \r
                return WINDOWS_CONTROL.createWindow(\r
-                       this,\r
                        {\r
                                onFirstOpen: function( _w, _h){\r
                                        backgroundInfomationElm = $( '#panel-background-information');\r
@@ -1524,6 +1520,7 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * HELP_WINDOW\r
+ *  - window\r
  */\r
        var HELP_DOCUMENTS_WINDOW = ( function(){\r
                var visible = true,\r
@@ -1531,22 +1528,12 @@ pettanr.editor = ( function(){
                        jqNaviItems,\r
                        jqPages,\r
                        currentPageIndex = 0,\r
+                       numPage = 0,\r
                        HELP = MENU_BAR_CONTROL.HELP,\r
-                       onLoadFunction = HELP.createAjaxSelection( onFirstOpen),\r
+                       onLoadFunction = HELP.createAjaxSelection( onAjaxStart),\r
                        instance;\r
-               function jumpPage( _index){\r
-                       \r
-               }\r
-               function onSelectionClick( _pageIndex){\r
-                       currentPageIndex = _pageIndex || currentPageIndex;\r
-                       HELP_DOCUMENTS_WINDOW.open();\r
-                       onOpen();\r
-               }\r
-               function onOpen(){\r
-                       jqNaviItems.removeClass( 'current').eq( currentPageIndex).addClass( 'current');\r
-                       jqPages.hide().eq( currentPageIndex).show();\r
-               }\r
-               function onFirstOpen( _pageIndex){\r
+\r
+               function onAjaxStart( _pageIndex){\r
                        currentPageIndex = _pageIndex || currentPageIndex;\r
                        if( onHelpLoad !== null){\r
                                $.ajax({\r
@@ -1556,6 +1543,7 @@ pettanr.editor = ( function(){
                                });\r
                                onHelpLoad = null;\r
                        }\r
+                       onAjaxStart = new Function;\r
                }\r
                var onHelpLoad = function( _xml){\r
                        var jqXML = $( _xml),\r
@@ -1565,8 +1553,7 @@ pettanr.editor = ( function(){
                                elmPages = document.createElement( 'div'),\r
                                elmPageOrigin = document.createElement( 'div'),\r
                                elmTitleOrigin = document.createElement( 'h2'),\r
-                               elmPage,\r
-                               numPage = 0;\r
+                               elmPage;\r
                        elmNavi.className = 'sidenavi';\r
                        elmItemOrigin.className = 'sidenavi-item';\r
                        elmItemOrigin.href = '#';\r
@@ -1574,7 +1561,7 @@ pettanr.editor = ( function(){
                        elmPageOrigin.className = 'page-content main';\r
                        elmPageOrigin.appendChild( elmTitleOrigin);\r
                        \r
-                       // helpTitle && instance.title( helpTitle);\r
+                       //helpTitle && instance.title( helpTitle);\r
                        \r
                        jqXML.find( 'page').each( function(){\r
                                var xmlPage = $( this),\r
@@ -1585,6 +1572,7 @@ pettanr.editor = ( function(){
                                elmNavi.appendChild( elmItemOrigin.cloneNode( true));\r
                                \r
                                elmTitleOrigin.innerHTML = title;\r
+                               \r
                                elmPage = elmPageOrigin.cloneNode( true);\r
                                elmPage.innerHTML = content;\r
                                \r
@@ -1606,51 +1594,50 @@ pettanr.editor = ( function(){
                        jqAjaxContents.removeClass( 'loading').append( elmNavi, elmPages);\r
                        \r
                        jqNaviItems = jqAjaxContents.find( 'a.' +elmItemOrigin.className).click( onNaviClick);\r
-                       jqAjaxContents.find( '.' +elmPageOrigin.className).find( 'a').click( onInnerLinkClick);\r
                        jqPages = jqAjaxContents.find( '.page-content');\r
-                       setTimeout( onOpen, 0);\r
+                       jqPages.find( 'a').click( onInnerLinkClick);\r
+                       \r
+                       setTimeout( jumpPage, 0);\r
+               }\r
+               function onSelectionClick( _pageIndex){\r
+                       HELP_DOCUMENTS_WINDOW.open();\r
+                       jumpPage( _pageIndex);\r
+               }\r
+               function jumpPage( _index){\r
+                       if( typeof _index === 'number' && 0 <= _index && _index < numPage && currentPageIndex !== _index){\r
+                               currentPageIndex = _index;\r
+                       }\r
+                       jqNaviItems.removeClass( 'current').eq( currentPageIndex).addClass( 'current');\r
+                       jqPages.hide().eq( currentPageIndex).show();\r
                }\r
                function onNaviClick( e){\r
                        // this は <a>\r
-                       var children = this.parentNode.getElementsByTagName( 'a'),\r
-                               l = children.length;\r
-                       for( var i=0; i<l; ++i){\r
-                               if( children[ i] === this) break;\r
-                       }\r
+                       jumpPage( pettanr.util.getChildIndex( this.parentNode, this));\r
                        e.stopPropagation();\r
-                       if( i === l) return false;\r
-                       jqNaviItems.removeClass( 'current').eq( i).addClass( 'current');\r
-                       jqPages.hide().eq( i).show();\r
                        return false;\r
                }\r
                function onInnerLinkClick( e){\r
-                       var jump = this.href.split( '#jump'),\r
-                               n = jump[1],\r
-                               i = ( n && '' +parseFloat( n) === n) ? parseFloat( n) : -1;\r
+                       var jump = ( this.href || '').split( '#jump'),\r
+                               n = jump[1];\r
+                       if( !n) return;\r
+                       jumpPage( '' + parseFloat( n) === n ? parseFloat( n) : -1);\r
                        e.stopPropagation();\r
-                       if( i === -1) return false;\r
-                       jqNaviItems.removeClass( 'current').eq( i).addClass( 'current');\r
-                       jqPages.hide().eq( i).show();\r
-                       currentPageIndex = i;\r
                        return false;                           \r
                }\r
                return WINDOWS_CONTROL.createWindow(\r
-                       this,\r
                        {\r
                                onInit: function(){\r
                                        instance = this;\r
-                                       jqAjaxContents = this.$.find( '.window-body').addClass( 'loading').css( { height: this.bodyHeight()});\r
+                                       jqAjaxContents = this.$.find( '.window-body').addClass( 'loading');\r
                                        delete this.onInit;\r
                                },\r
-                               onFirstOpen: function(){\r
-                                       onFirstOpen();\r
-                               },\r
-                               onResize: function( w, h){\r
-                                       jqAjaxContents && jqAjaxContents.css( { height: h});\r
+                               onFirstOpen: function( _w, _h){\r
+                                       jqAjaxContents.css( { height: _h});\r
+                                       onAjaxStart();\r
+                                       delete this.onFirstOpen;\r
                                },\r
-                               setAjaxContent: function( html){\r
-                                       \r
-                                       delete this.onLoadAjaxContent;\r
+                               onResize: function( _w, _h){\r
+                                       jqAjaxContents && jqAjaxContents.css( { height: _h});\r
                                }\r
                        },\r
                        null, 'Help', 0, 215, 400, 350, false, true, true, 300, 300\r
@@ -1659,9 +1646,12 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * GRID_CONTROL\r
+ *  - control\r
+ *  - panelResizeListener\r
  */\r
        var GRID_CONTROL = ( function(){\r
                var ELM_GRID = document.getElementById( 'grid'),\r
+                       BG_URL = "url('images/grid.gif')",\r
                        jqGrid,\r
                        visible = false;\r
 \r
@@ -1670,6 +1660,12 @@ pettanr.editor = ( function(){
                                jqGrid = $( ELM_GRID);\r
                                delete GRID_CONTROL.init;\r
                        },\r
+                       open: function(){\r
+                               GRID_CONTROL.init && GRID_CONTROL.init();\r
+                       },\r
+                       close: function(){\r
+                               \r
+                       },\r
                        onPanelResize: function( _panelX, _panelY){\r
                                ELM_GRID.style.backgroundPosition = [ _panelX % 10, 'px ', _panelY % 10, 'px'].join( '');\r
                                ELM_GRID.style.height = windowH +'px';\r
@@ -1685,17 +1681,19 @@ pettanr.editor = ( function(){
                                \r
                                visible = !visible;\r
                                \r
-                               if( visible === true && !ELM_GRID.style.backgroundImage){\r
-                                       ELM_GRID.style.backgroundImage = "url('images/grid.gif')";\r
+                               if( visible === true && BG_URL !== null){\r
+                                       ELM_GRID.style.backgroundImage = BG_URL;\r
+                                       BG_URL = null;\r
                                }\r
                                return visible;                         \r
                        }\r
                }\r
        })();\r
                \r
-       /*\r
-        *      WHITE_GLASS_CONTROL\r
-        */     \r
+/* ----------------------------------------\r
+ * WHITE_GLASS_CONTROL\r
+ *  - panelResizeListener\r
+ */\r
        var WHITE_GLASS_CONTROL = ( function(){\r
                var styleTop = document.getElementById( 'whiteGlass-top').style,\r
                        styleLeft = document.getElementById( 'whiteGlass-left').style,\r
@@ -1731,8 +1729,11 @@ pettanr.editor = ( function(){
        })();\r
 \r
 \r
-/*\r
+/* ----------------------------------------\r
  * PANEL_CONTROL\r
+ *  - controler\r
+ *  - mouseEventListener\r
+ * \r
  * panel-border の表示と onPanelResize の通知.\r
  * panel drag.\r
  * \r
@@ -1748,6 +1749,8 @@ pettanr.editor = ( function(){
                        isDragging = false,\r
                        isDraggable = false;\r
                \r
+               pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 32, false, false, onSpaceUpdate);\r
+               \r
                function onSpaceUpdate(e){\r
                        if( e.type === 'keyup'){\r
                                currentListener === null && updateMouseCursor( '');\r
@@ -1759,18 +1762,17 @@ pettanr.editor = ( function(){
                }\r
                \r
                return {\r
-                       init: function( _panelW, _panelH, _borderSize){\r
+                       open: function( _panelW, _panelH, _borderSize){\r
                                panelW = _panelW || DEFAULT_PANEL_WIDTH;\r
                                panelH = _panelH || DEFAULT_PANEL_HEIGHT;\r
-                               panelX = Math.floor( ( windowW -panelW) /2);\r
-                               panelY = Math.floor( ( windowH -panelH) /2);\r
+                               //panelX = Math.floor( ( windowW -panelW) /2);\r
+                               //panelY = Math.floor( ( windowH -panelH) /2);\r
                                borderSize = _borderSize !== undefined ? _borderSize : borderSize;\r
                                \r
-                               pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 32, false, false, onSpaceUpdate);\r
-                               \r
-                               setTimeout( PANEL_CONTROL.resize, 0);\r
+                               //setTimeout( PANEL_CONTROL.resize, 0);\r
+                       },\r
+                       close: function(){\r
                                \r
-                               delete PANEL_CONTROL.init;\r
                        },\r
                        x: function(){\r
                                return panelX;\r
@@ -1828,9 +1830,9 @@ pettanr.editor = ( function(){
                }\r
        })();\r
 \r
-/*\r
- * --------------------------------------------------------------------------------------------\r
- * panel resizer\r
+/* --------------------------------------------------------------------------------------------\r
+ * PanelResizerClass\r
+ *  - mouseEventListener\r
  */\r
        var PanelResizerClass = function( ID, isTop){\r
                var ELM = document.getElementById( ID),\r
@@ -1852,9 +1854,6 @@ pettanr.editor = ( function(){
                }\r
                        \r
                return {\r
-                       busy: function(){\r
-                               return isDragging;\r
-                       },\r
                        onMouseDown: function( _mouseX, _mouseY){\r
                                var _x = _mouseX -panelX,\r
                                        _y = _mouseY -panelY;\r
@@ -1892,7 +1891,7 @@ pettanr.editor = ( function(){
                        },\r
                        onMouseUp: function( _mouseX, _mouseY){\r
                                if( isDragging !== true) return;\r
-                               ( startY !== panelY || startH !== panelH) && HISTORY.saveState( restoreState, [ NaN, startY, NaN, startH], [ NaN, panelY, NaN, panelH]);\r
+                               ( startY !== panelY || startH !== panelH) && HISTORY_CONTROL.saveState( restoreState, [ NaN, startY, NaN, startH], [ NaN, panelY, NaN, panelH]);\r
                                isDragging = false;\r
                                MOUSE_CURSOR( '');\r
                        },\r
@@ -1917,14 +1916,16 @@ pettanr.editor = ( function(){
                \r
        PanelResizerClass = undefined;\r
 \r
-\r
+/* --------------------------------------------------------------------------------------------\r
+ * CONSOLE_CONTROLER\r
+ */\r
        var CONSOLE_CONTROLER = ( function(){\r
                var LAYER_BACK_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'layer back', 'ctrl + B', layerBack, false, true, false),\r
                        LAYER_FORWARD_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'layer forward', 'ctrl + F', layerForward, false, false, false),\r
                        DELETE_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'delete', 'ctrl + D', del, false, true, true),\r
                        EDIT_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'Edit Text', 'ctrl + E', edit, false, true, false),\r
                        CHANGE_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'change', 'ctrl + U', change, false, false, true),\r
-                       SAVE = HISTORY.saveState,\r
+                       SAVE = HISTORY_CONTROL.saveState,\r
                        jqStage,\r
                        jqConsoleParent,\r
                        jqConsoleWrapper,\r
@@ -2080,7 +2081,10 @@ pettanr.editor = ( function(){
                }\r
        })();\r
 \r
-\r
+/* --------------------------------------------------------------------------------------------\r
+ * TAIL_OPERATOR\r
+ *  - comicElementOperator\r
+ */\r
        var TAIL_OPERATOR = ( function(){\r
                var     MOUSE_CURSOR = updateMouseCursor,\r
                        ELM_MOVER = document.getElementById( 'balloon-tail-mover'),\r
@@ -2166,7 +2170,11 @@ pettanr.editor = ( function(){
                        }\r
                }\r
        })();\r
-       \r
+\r
+/* --------------------------------------------------------------------------------------------\r
+ * RESIZE_OPERATOR\r
+ *  - comicElementOperator\r
+ */\r
        var RESIZE_OPERATOR = ( function(){\r
                var     MOUSE_CURSOR = updateMouseCursor,\r
                        GRID_ENABLED = GRID_CONTROL.enabled;\r
@@ -2461,7 +2469,11 @@ pettanr.editor = ( function(){
                        onCtrlUpdate: update\r
                }\r
        })();\r
-       \r
+\r
+/* --------------------------------------------------------------------------------------------\r
+ * POSITION_OPERATOR\r
+ *  - comicElementOperator\r
+ */\r
        var POSITION_OPERATOR = ( function(){\r
                var     MOUSE_CURSOR = updateMouseCursor,\r
                        GRID_ENABLED = GRID_CONTROL.enabled;\r
@@ -2518,13 +2530,12 @@ pettanr.editor = ( function(){
        })();\r
 \r
 \r
-/*\r
- * --------------------------------------------------------------------------------------------\r
+/* --------------------------------------------------------------------------------------------\r
  * COMIC_ELEMENT_OPERATION_MANAGER\r
  */\r
        var COMIC_ELEMENT_OPERATION_MANAGER = ( function(){\r
                var     MOUSE_CURSOR = updateMouseCursor,\r
-                       SAVE = HISTORY.saveState,\r
+                       SAVE = HISTORY_CONTROL.saveState,\r
                        GRID_ENABLED = GRID_CONTROL.enabled,\r
                        HIT_AREA = MOUSE_HIT_AREA,\r
                        currentIsTextElement = false,\r
@@ -2561,15 +2572,34 @@ pettanr.editor = ( function(){
                                        );\r
                                }\r
                        }\r
-                       function hide(){\r
+\r
+                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 16, undefined, undefined, function( e){\r
+                               currentOperator !== null && currentOperator.onShiftUpdate && currentOperator.onShiftUpdate();\r
+                       });\r
+                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 17, undefined, undefined, function( e){\r
+                               currentOperator !== null && currentOperator.onCtrlUpdate && currentOperator.onCtrlUpdate();\r
+                       });\r
+                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 27, false, false, function( e){\r
+                               currentOperator !== null && currentOperator.onCancel && currentOperator.onCancel();\r
+                               currentOperator = null;\r
+                       });\r
+               return {\r
+                       open: function(){\r
+                               this.hide();\r
+                       },\r
+                       close: function(){\r
+                               \r
+                       },\r
+                       hide: function(){\r
                                currentElement !== null && RESIZE_OPERATOR.hide();\r
                                currentElement = null;\r
                                MOUSE_CURSOR( '');\r
                                TAIL_OPERATOR.hide();\r
                                CONSOLE_CONTROLER.hide();\r
                                INFOMATION_WINDOW.update( null);\r
-                       }\r
-                       function restoreState( arg){\r
+                       },\r
+                       resize: resize,\r
+                       restoreState: function( arg){\r
                                if( arg && arg.length !== 8) return;\r
                                var _currentElement = arg[ 0],\r
                                        _x = arg[ 1], _y = arg[ 2], _w = arg[ 3], _h = arg[ 4],\r
@@ -2582,8 +2612,8 @@ pettanr.editor = ( function(){
                                currentOperator !== null && currentOperator.onCancel && currentOperator.onCancel();\r
                                currentOperator = null;\r
                                currentElement === _currentElement ? resize( _x, _y, _w, _h, _a) : show( _currentElement);\r
-                       }\r
-                       function saveComicElementStatus( startX, startY, startW, startH, startA, startFilpV, startFilpH){\r
+                       },\r
+                       saveStatus: function( startX, startY, startW, startH, startA, startFilpV, startFilpH){\r
                                startX = startX !== undefined ? startX : currentx;\r
                                startY = startY !== undefined ? startY : currenty;\r
                                startW = startW !== undefined ? startW : currentw;\r
@@ -2591,30 +2621,11 @@ pettanr.editor = ( function(){
                                startA = startA !== undefined ? startA : angle;\r
                                startFilpV = startFilpV !== undefined ? startFilpV : flipV;\r
                                startFilpH = startFilpH !== undefined ? startFilpH : flipH;\r
-                               currentElement && SAVE( restoreState,\r
+                               currentElement && SAVE( COMIC_ELEMENT_OPERATION_MANAGER.restoreState,\r
                                        [ currentElement, startX, startY, startW, startH, startA, startFilpV, startFilpH],\r
                                        [ currentElement, currentx, currenty, currentw, currenth, angle, flipV, flipH]\r
                                );\r
-                       }\r
-                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 16, undefined, undefined, function( e){\r
-                               currentOperator !== null && currentOperator.onShiftUpdate && currentOperator.onShiftUpdate();\r
-                       });\r
-                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 17, undefined, undefined, function(){\r
-                               currentOperator !== null && currentOperator.onCtrlUpdate && currentOperator.onCtrlUpdate();\r
-                       });\r
-                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 27, false, false, function(){\r
-                               currentOperator !== null && currentOperator.onCancel && currentOperator.onCancel();\r
-                               currentOperator = null;\r
-                       });\r
-               return {\r
-                       init: function(){\r
-                               hide();\r
-                               delete COMIC_ELEMENT_OPERATION_MANAGER.init;\r
                        },\r
-                       hide: hide,\r
-                       resize: resize,\r
-                       restoreState: restoreState,\r
-                       saveStatus: saveComicElementStatus,\r
                        busy: function(){\r
                                return currentOperator !== null;\r
                        },\r
@@ -2699,8 +2710,8 @@ pettanr.editor = ( function(){
                        }\r
                }\r
        };\r
-/*\r
- * --------------------------------------------------------------------------------------------\r
+\r
+/* --------------------------------------------------------------------------------------------\r
  * ImageElementClass\r
  */\r
        var     jqImageElementOrigin;\r
@@ -2709,7 +2720,7 @@ pettanr.editor = ( function(){
                \r
                var JQ_WRAPPER = jqImageElementOrigin.clone( true),\r
                        OPERATOR = COMIC_ELEMENT_OPERATION_MANAGER,\r
-                       SAVE = HISTORY.saveState,\r
+                       SAVE = HISTORY_CONTROL.saveState,\r
                        HIT_AREA = MOUSE_HIT_AREA,\r
                        reversibleImage = null,\r
                        actualW = 0, actualH = 0,\r
@@ -2835,12 +2846,9 @@ pettanr.editor = ( function(){
  */\r
 \r
 \r
-/*\r
- * --------------------------------------------------------------------------------------------\r
+/* --------------------------------------------------------------------------------------------\r
  * TextElementClass\r
  * \r
- * ELM はpettanr.domで書き出したものを突っ込むcreateの場合\r
- * \r
  * type\r
  * 0.none\r
  * 1.speach balloon\r
@@ -2863,7 +2871,7 @@ pettanr.editor = ( function(){
                        TEXT_ELM = JQ_WRAPPER.find( 'td,.speach-inner').eq( 0),\r
                        OPERATOR = COMIC_ELEMENT_OPERATION_MANAGER,\r
                        HIT_AREA = MOUSE_HIT_AREA,\r
-                       SAVE = HISTORY.saveState,\r
+                       SAVE = HISTORY_CONTROL.saveState,\r
                        instance;\r
                        \r
                JQ_WRAPPER.find( 'img').eq( 0).replaceWith( XBROWSER_BALLOON.elm);\r
@@ -2990,21 +2998,22 @@ pettanr.editor = ( function(){
                                        ].join( '');\r
                                },\r
                                getAsXML: function(){}\r
-                               \r
                        }\r
                );\r
        }\r
 \r
-\r
+/* --------------------------------------------------------------------------------------------\r
+ * COMIC_ELEMENT_CONTROL\r
+ *  - mouseEventListener\r
+ */\r
        var COMIC_ELEMENT_CONTROL = ( function(){\r
-               var     SAVE = HISTORY.saveState,\r
+               var     SAVE = HISTORY_CONTROL.saveState,\r
                        ELM_CONTAINER = document.getElementById( 'comic-element-container'),\r
                        currentElement = null,\r
                        currentLockTest = false,\r
                        currentLock = false,\r
                        panelX, panelY, panelW, panelH,\r
                        startX, startY;\r
-       \r
        /*\r
         * append, remove, replace\r
         * \r
@@ -3127,6 +3136,14 @@ pettanr.editor = ( function(){
                                \r
                                delete COMIC_ELEMENT_CONTROL.init;\r
                        },\r
+                       open: function(){\r
+                               COMIC_ELEMENT_CONTROL.init && COMIC_ELEMENT_CONTROL.init();\r
+                       },\r
+                       close: function(){\r
+                               while( COMIC_ELEMENT_ARRAY.length > 0){\r
+                                       COMIC_ELEMENT_ARRAY.shift().destroy();\r
+                               }\r
+                       },\r
                        remove: removeComicElement,\r
                        restore: restoreComicElement,\r
                        replace: replaceComicElement,\r
@@ -3372,37 +3389,21 @@ pettanr.editor = ( function(){
        return {\r
                init: function( _option){\r
                        option = _option;\r
+                       \r
                },\r
                firstOpen: function(){\r
-                       var jqWindow = pettanr.jqWindow();\r
-                       windowW = jqWindow.width();\r
-                       windowH = jqWindow.height();\r
-                       \r
-                       jqEditor = $( '#editor');\r
-\r
                /*\r
                 * MOUSE_LISTENER_ARRAY は、表示順に格納.手前の要素が最初\r
                 * MENU_BAR_CONTROL,\r
                 * WINDOW_CONTROL,\r
                 * COMIC_ELEMENT_CONTROL,\r
                 * PANEL_CONTROL\r
-                * .busy() === true なら、そのままonMouseMove()にイベントを流す.これはArrayの後ろから、奥の表示要素から\r
+                * .busy() === true なら、そのままonMouseMove()にイベントを流す.\r
                 * onMouseMove()に流してみて、false が帰れば、次にリスナーにも流す.\r
                 */\r
                        MOUSE_LISTENER_ARRAY.push( MENU_BAR_CONTROL, WINDOWS_CONTROL, PANEL_RESIZER_TOP, PANEL_RESIZER_BOTTOM, COMIC_ELEMENT_CONTROL, PANEL_CONTROL);\r
-\r
-                       HISTORY.init();\r
-                       \r
-                       WINDOWS_CONTROL.init();\r
                        \r
-                       GRID_CONTROL.init();\r
-                       PANEL_CONTROL.init();\r
                        CONSOLE_CONTROLER.init();\r
-                       COMIC_ELEMENT_OPERATION_MANAGER.init();\r
-                       COMIC_ELEMENT_CONTROL.init();\r
-                       \r
-                       // last\r
-                       MENU_BAR_CONTROL.init();\r
                        \r
                        OUTPUT_CONSOLE.init();\r
                        TEXT_EDITOR_CONTROL.init();\r
@@ -3427,17 +3428,41 @@ pettanr.editor = ( function(){
                        \r
                        delete pettanr.editor.firstOpen;\r
                },\r
-               onOpen: function( _option){\r
+               onOpen: function( _file){\r
+                       if( pettanr.file.isFileInstance( _file) === true){\r
+                               // pettanr.file.isPettanFileInstance( _file) === true\r
+                               // \r
+                       }\r
+                       jqEditor = jqEditor || $( '#editor');\r
+                       \r
+                       HISTORY_CONTROL.open();\r
+                       \r
+                       WINDOWS_CONTROL.open();\r
+                       \r
+                       GRID_CONTROL.open();\r
+                       PANEL_CONTROL.open();\r
+                       \r
+                       COMIC_ELEMENT_OPERATION_MANAGER.open();\r
+                       COMIC_ELEMENT_CONTROL.open();\r
+                       \r
+                       // last\r
+                       MENU_BAR_CONTROL.open();\r
+                       \r
                        pettanr.editor.firstOpen !== undefined && pettanr.editor.firstOpen();\r
-\r
-                       // HISTORY.onOpen();\r
-                       // WINDOWS_CONTROL.onOpen();\r
-                       // COMIC_ELEMENT_CONTROL.onOpen();\r
-                       // MENU_BAR_CONTROL.onOpen();\r
-                       // TEXT_EDITOR_CONTROL.onOpen();\r
-                       // IMAGE_GROUP_EXPROLER.onOpen();\r
                },\r
                onClose: function(){\r
+                       HISTORY_CONTROL.close();\r
+                       \r
+                       WINDOWS_CONTROL.close();\r
+                       \r
+                       GRID_CONTROL.close();\r
+                       PANEL_CONTROL.close();\r
+                       \r
+                       COMIC_ELEMENT_OPERATION_MANAGER.close();\r
+                       COMIC_ELEMENT_CONTROL.close();\r
+                       \r
+                       // last\r
+                       MENU_BAR_CONTROL.open();\r
                },\r
                onWindowResize: function( _windowW, _windowH){\r
                        windowW = _windowW;\r
similarity index 73%
rename from 0.4.x/resource_pictures/original_pictures.json
rename to 0.4.x/json/original_pictures.json
index 58e59c4..5e00fbb 100644 (file)
@@ -1,11 +1,11 @@
-[\r
+[\r
     {\r
         "artist": {\r
             "api_url": null, \r
             "author_id": 1, \r
             "created_at": "2012-01-05T23:58:39Z", \r
             "crowled_at": null, \r
-            "default_lisence_id": 1, \r
+            "default_license_id": 1, \r
             "email": null, \r
             "homepage_url": null, \r
             "id": 1, \r
@@ -18,7 +18,7 @@
         "filesize": 11881, \r
         "height": 474, \r
         "id": 1, \r
-        "lisence": {\r
+        "license": {\r
             "cc_by": 0, \r
             "cc_nc": 0, \r
             "cc_nd": 0, \r
             "created_at": "2012-01-11T07:49:36Z", \r
             "id": 1, \r
             "keep_aspect_ratio": 0, \r
-            "name": "%%<\81\84\82 \82 \82 ", \r
+            "name": "%%<>あああ", \r
             "no_convert": 0, \r
             "no_flip": 0, \r
             "no_resize": 0, \r
             "updated_at": "2012-01-11T07:49:36Z", \r
-            "url": "\82¨\82¨~"\r
+            "url": "おお~"\r
         }, \r
-        "lisence_id": 1, \r
+        "license_id": 1, \r
         "resource_picture": {\r
             "artist_id": 1, \r
             "created_at": "2012-01-05T23:59:01Z", \r
@@ -41,7 +41,7 @@
             "filesize": 11881, \r
             "height": 474, \r
             "id": 1, \r
-            "lisence_id": 1, \r
+            "license_id": 1, \r
             "original_picture_id": 1, \r
             "updated_at": "2012-01-15T07:49:12Z", \r
             "width": 449\r
@@ -55,7 +55,7 @@
             "author_id": 1, \r
             "created_at": "2012-01-05T23:58:39Z", \r
             "crowled_at": null, \r
-            "default_lisence_id": 1, \r
+            "default_license_id": 1, \r
             "email": null, \r
             "homepage_url": null, \r
             "id": 1, \r
@@ -68,7 +68,7 @@
         "filesize": 9960, \r
         "height": 463, \r
         "id": 2, \r
-        "lisence": {\r
+        "license": {\r
             "cc_by": 0, \r
             "cc_nc": 0, \r
             "cc_nd": 0, \r
             "created_at": "2012-01-11T07:49:36Z", \r
             "id": 1, \r
             "keep_aspect_ratio": 0, \r
-            "name": "%%<\81\84\82 \82 \82 ", \r
+            "name": "%%<>あああ", \r
             "no_convert": 0, \r
             "no_flip": 0, \r
             "no_resize": 0, \r
             "updated_at": "2012-01-11T07:49:36Z", \r
-            "url": "\82¨\82¨~"\r
+            "url": "おお~"\r
         }, \r
-        "lisence_id": 1, \r
+        "license_id": 1, \r
         "resource_picture": {\r
             "artist_id": 1, \r
             "created_at": "2012-01-05T23:59:18Z", \r
@@ -91,7 +91,7 @@
             "filesize": 9960, \r
             "height": 463, \r
             "id": 2, \r
-            "lisence_id": 1, \r
+            "license_id": 1, \r
             "original_picture_id": 2, \r
             "updated_at": "2012-01-15T07:49:12Z", \r
             "width": 333\r
             "author_id": 1, \r
             "created_at": "2012-01-05T23:58:39Z", \r
             "crowled_at": null, \r
-            "default_lisence_id": 1, \r
+            "default_license_id": 1, \r
             "email": null, \r
             "homepage_url": null, \r
             "id": 1, \r
         "filesize": 8492, \r
         "height": 450, \r
         "id": 3, \r
-        "lisence": {\r
+        "license": {\r
             "cc_by": 0, \r
             "cc_nc": 0, \r
             "cc_nd": 0, \r
             "created_at": "2012-01-11T07:49:36Z", \r
             "id": 1, \r
             "keep_aspect_ratio": 0, \r
-            "name": "%%<\81\84\82 \82 \82 ", \r
+            "name": "%%<>あああ", \r
             "no_convert": 0, \r
             "no_flip": 0, \r
             "no_resize": 0, \r
             "updated_at": "2012-01-11T07:49:36Z", \r
-            "url": "\82¨\82¨~"\r
+            "url": "おお~"\r
         }, \r
-        "lisence_id": 1, \r
+        "license_id": 1, \r
         "resource_picture": {\r
             "artist_id": 1, \r
             "created_at": "2012-01-05T23:59:34Z", \r
             "filesize": 8492, \r
             "height": 450, \r
             "id": 3, \r
-            "lisence_id": 1, \r
+            "license_id": 1, \r
             "original_picture_id": 3, \r
             "updated_at": "2012-01-15T07:49:12Z", \r
             "width": 333\r
             "author_id": 1, \r
             "created_at": "2012-01-05T23:58:39Z", \r
             "crowled_at": null, \r
-            "default_lisence_id": 1, \r
+            "default_license_id": 1, \r
             "email": null, \r
             "homepage_url": null, \r
             "id": 1, \r
         "filesize": 9232, \r
         "height": 500, \r
         "id": 4, \r
-        "lisence": {\r
+        "license": {\r
             "cc_by": 0, \r
             "cc_nc": 0, \r
             "cc_nd": 0, \r
             "created_at": "2012-01-11T07:49:36Z", \r
             "id": 1, \r
             "keep_aspect_ratio": 0, \r
-            "name": "%%<\81\84\82 \82 \82 ", \r
+            "name": "%%<>あああ", \r
             "no_convert": 0, \r
             "no_flip": 0, \r
             "no_resize": 0, \r
             "updated_at": "2012-01-11T07:49:36Z", \r
-            "url": "\82¨\82¨~"\r
+            "url": "おお~"\r
         }, \r
-        "lisence_id": 1, \r
+        "license_id": 1, \r
         "resource_picture": {\r
             "artist_id": 1, \r
             "created_at": "2012-01-06T00:00:01Z", \r
             "filesize": 9232, \r
             "height": 500, \r
             "id": 4, \r
-            "lisence_id": 1, \r
+            "license_id": 1, \r
             "original_picture_id": 4, \r
             "updated_at": "2012-01-15T07:49:12Z", \r
             "width": 500\r
             "author_id": 1, \r
             "created_at": "2012-01-05T23:58:39Z", \r
             "crowled_at": null, \r
-            "default_lisence_id": 1, \r
+            "default_license_id": 1, \r
             "email": null, \r
             "homepage_url": null, \r
             "id": 1, \r
-            "name": "no name", \r
+            "name": "yas", \r
             "updated_at": "2012-01-05T23:58:39Z"\r
         }, \r
         "artist_id": 1, \r
         "filesize": 7875, \r
         "height": 425, \r
         "id": 5, \r
-        "lisence": {\r
+        "license": {\r
             "cc_by": 0, \r
             "cc_nc": 0, \r
             "cc_nd": 0, \r
             "created_at": "2012-01-11T07:49:36Z", \r
             "id": 1, \r
             "keep_aspect_ratio": 0, \r
-            "name": "%%<\81\84\82 \82 \82 ", \r
+            "name": "%%<>あああ", \r
             "no_convert": 0, \r
             "no_flip": 0, \r
             "no_resize": 0, \r
             "updated_at": "2012-01-11T07:49:36Z", \r
-            "url": "\82¨\82¨~"\r
+            "url": "おお~"\r
         }, \r
-        "lisence_id": 1, \r
+        "license_id": 1, \r
         "resource_picture": {\r
             "artist_id": 1, \r
             "created_at": "2012-01-06T00:00:20Z", \r
             "filesize": 7875, \r
             "height": 425, \r
             "id": 5, \r
-            "lisence_id": 1, \r
+            "license_id": 1, \r
             "original_picture_id": 5, \r
             "updated_at": "2012-01-15T07:49:12Z", \r
             "width": 252\r
         }, \r
         "updated_at": "2012-01-15T07:49:12Z", \r
         "width": 252\r
+    }, \r
+    {\r
+        "artist": {\r
+            "api_url": null, \r
+            "author_id": 2, \r
+            "created_at": "2012-01-22T10:13:10Z", \r
+            "crowled_at": null, \r
+            "default_license_id": 0, \r
+            "email": null, \r
+            "homepage_url": null, \r
+            "id": 2, \r
+            "name": "iz", \r
+            "updated_at": "2012-01-22T10:13:10Z"\r
+        }, \r
+        "artist_id": 2, \r
+        "created_at": "2012-01-22T10:14:57Z", \r
+        "ext": "jpeg", \r
+        "filesize": 140234, \r
+        "height": 800, \r
+        "id": 6, \r
+        "license_id": 0, \r
+        "resource_picture": {\r
+            "artist_id": 2, \r
+            "created_at": "2012-01-22T10:14:57Z", \r
+            "ext": "jpeg", \r
+            "filesize": 140234, \r
+            "height": 800, \r
+            "id": 6, \r
+            "license_id": 0, \r
+            "original_picture_id": 6, \r
+            "updated_at": "2012-01-22T10:14:57Z", \r
+            "width": 712\r
+        }, \r
+        "updated_at": "2012-01-22T10:14:57Z", \r
+        "width": 712\r
     }\r
 ]
\ No newline at end of file
diff --git a/0.4.x/json/panels.json b/0.4.x/json/panels.json
new file mode 100644 (file)
index 0000000..ea9f3f3
--- /dev/null
@@ -0,0 +1,92 @@
+[\r
+    {\r
+        "author": {\r
+            "id": 1, \r
+            "name": "no name"\r
+        }, \r
+        "author_id": 1, \r
+        "border": 1, \r
+        "comic": {\r
+            "author_id": 1, \r
+            "created_at": "2012-01-06T07:39:55Z", \r
+            "editable": 0, \r
+            "height": 200, \r
+            "id": 1, \r
+            "title": "コミック作るテスト", \r
+            "updated_at": "2012-01-06T07:39:55Z", \r
+            "visible": 0, \r
+            "width": 400\r
+        },\r
+        "comic_id": 1, \r
+        "created_at": "2012-01-06T07:40:25Z",\r
+        "height": 200, \r
+        "id": 1, \r
+        "resource_picture_id": 1, \r
+        "t": 1, \r
+        "updated_at": "2012-01-06T07:40:25Z", \r
+        "width": 400, \r
+        "x": 0, \r
+        "y": 0, \r
+        "z": 1\r
+    }, \r
+    {\r
+        "author": {\r
+            "id": 1, \r
+            "name": "no name"\r
+        }, \r
+        "author_id": 1, \r
+        "border": 1, \r
+        "comic": {\r
+            "author_id": 1, \r
+            "created_at": "2012-01-06T07:39:55Z", \r
+            "editable": 0, \r
+            "height": 200, \r
+            "id": 1, \r
+            "title": "コミック作るテスト", \r
+            "updated_at": "2012-01-06T07:39:55Z", \r
+            "visible": 0, \r
+            "width": 400\r
+        }, \r
+        "comic_id": 1, \r
+        "created_at": "2012-01-10T08:23:36Z", \r
+        "height": 300, \r
+        "id": 2, \r
+        "resource_picture_id": 1, \r
+        "t": 2, \r
+        "updated_at": "2012-01-10T08:23:36Z", \r
+        "width": 400, \r
+        "x": 0, \r
+        "y": 0, \r
+        "z": 0\r
+    }, \r
+    {\r
+        "author": {\r
+            "id": 1, \r
+            "name": "Tester"\r
+        }, \r
+        "author_id": 1, \r
+        "border": 1, \r
+        "comic": {\r
+            "author_id": 1, \r
+            "created_at": "2012-01-06T07:39:55Z", \r
+            "editable": 0, \r
+            "height": 200, \r
+            "id": 1, \r
+            "title": "コミック作るテスト", \r
+            "updated_at": "2012-01-06T07:39:55Z", \r
+            "visible": 0, \r
+            "width": 400\r
+        }, \r
+        "comic_id": 1, \r
+        "created_at": "2012-01-10T08:25:41Z", \r
+        "height": 300, \r
+        "id": 3, \r
+        "resource_picture_id": 1, \r
+        "t": 3, \r
+        "updated_at": "2012-01-10T08:25:41Z", \r
+        "width": 400, \r
+        "x": 0, \r
+        "y": 0, \r
+        "z": 0\r
+    }\r
+]
\ No newline at end of file
index 3e075c5..fd431a5 100644 (file)
@@ -563,7 +563,7 @@ version: 2.7.0
                                height:                         100%;\r
                                border:                         0;\r
                                padding:                        0;\r
-                               margin:                         0;\r
+                               margin:                         0 !important;\r
                                text-align:                     center;\r
                                vertical-align:         middle;\r
                        }\r
index bd5de55..a81089e 100644 (file)
                                -moz-opacity:           0.7;\r
                                -khtml-opacity:         0.7;\r
                        }\r
-                       .pettanr-ActiveX-disabled #whiteGlass-container div {\r
+                       .pettanr-ActiveX-enabled #whiteGlass-container div {\r
                                filter:                         alpha(opacity=70);\r
                                -ms-filter:                     alpha(opacity=70);                              \r
                        }\r
                                margin:                                 0;\r
                        }\r
                        .finder-header li a,\r
-                       .finder-header li a:link\r
+                       .finder-header li a:link,\r
                        .finder-header li a:visited {\r
                                display:                                block;\r
                                height:                                 14px;\r
                                padding:                                16px 0 10px 20px;\r
                                margin:                                 0;\r
                                color:                                  #eee;\r
+                               overflow:                               hidden;\r
                        }\r
                        .finder-header li a:hover {\r
                                text-decoration:                none;\r
                        background-position:            50% 50%;\r
                        background-repeat:                      no-repeat;\r
                }\r
-               .finder-icon .file-type-1 {\r
-                       background-image:                       url('../images/folder_general.png');\r
+               .finder-icon-thumbnail {\r
+                       background-image:                       url('../images/sprite.gif');\r
+               }\r
+               \r
+               .finder-icon .file-type-folder {\r
+                       background-position:            0 -80px;\r
                }\r
-               .finder-icon .file-type-2 {\r
+               .finder-icon .file-type-album {\r
                        background-image:                       url('../images/folder_album.png');\r
                }\r
-               .finder-icon .file-type-11 {\r
-                       background-image:                       url('../images/cabinet.png');\r
+               .finder-icon .file-type-author {\r
+                       background-position:            -70px -80px;\r
+               }               \r
+               .finder-icon .file-type-comic {\r
+                       background-position:            0 -150px;\r
                }\r
-               \r
+               .finder-icon .file-type-cabinet {\r
+                       background-position:            -70px -150px;\r
+               }\r
+               .finder-icon .file-type-panel {\r
+                       background-position:            0 -220px;\r
+               }\r
+               .finder-icon .file-type-artist {\r
+                       background-position:            -70px -220px;\r
+               }\r
+               .finder-icon .file-type-balloon {\r
+                       background-position:            0 -290px;\r
+               }\r
+               .finder-icon .file-type-charactor {\r
+                       background-position:            -70px -290px;\r
+               }               \r
                .has-thumbnail {\r
                        background-image:                       url('../images/folder_album.png');\r
                }\r
                /*\r
                 * http://www.iconfinder.com/icondetails/18336/64/folder_image_photo_icon\r
                 * http://www.iconfinder.com/icondetails/27849/48/folder_yellow_icon\r
-                * http://www.iconfinder.com/icondetails/45347/64/cabinet_icon
+                * http://www.iconfinder.com/icondetails/45347/64/cabinet_icon\r
+                * http://www.iconfinder.com/icondetails/3659/64/broken_file_icon\r
+                * http://www.iconfinder.com/icondetails/44733/64/address_book_icon
                 */\r
                .finder-icon-filename {\r
                        position:                                       absolute;\r