OSDN Git Service

Client is version 0.5.44, fetch pettanR resourcies working!
[pettanr/pettanr.git] / app / assets / javascripts / peta-common.js
index 19b96eb..21b701b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * pettanR peta.common.js\r
- *   version 0.5.14\r
+ *   version 0.5.44\r
  * \r
  *   author:\r
  *     itozyun\r
@@ -24,23 +24,23 @@ var pettanr = ( function(){
                                                v = decodeURIComponent( elm[ 1]);\r
                                                if( '' + parseFloat( v ) === v ) v = parseFloat( v );\r
                                                if( '' + parseInt( v, 10 ) === '0' + v ) v = parseInt( v, 10 );\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
+                                               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
-                                       }\r
-                       }\r
+                                       };\r
+                               };\r
                        return ret;\r
-                   }\r
+                   };\r
                    return {};\r
                })(),\r
                IS_DEBUG = Type.isBoolean( URL_PARAMS.debug ) ? URL_PARAMS.debug : IS_LOCAL === true;\r
        return {\r
-               version: '0.5.8',\r
+               version: '0.5.40',\r
                URL_PARAMS: URL_PARAMS,\r
                LOCAL: IS_LOCAL,\r
                DEBUG: IS_DEBUG,\r
@@ -84,23 +84,26 @@ pettanr.CONST = ( function(){
                })();\r
                \r
        return {\r
-               PETTANR_ROOT_PATH:                      PETTANR_ROOT_PATH,\r
-               URL_ORIGINAL_PICTURES_JSON: ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'original_pictures.json',\r
-               URL_RESOURCE_PICTURES_JSON: ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'resource_pictures.json',\r
-               URL_COMICS_JSON:                        ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'comics.json',\r
-               URL_PANELS_JSON:                        ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'panels.json',\r
-               URL_MY_PANELS_JSON:                     ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'home\/panel.json',\r
-               NS_PETTANR_COMIC:                       'pettanr-comic',\r
-               THUMBNAIL_PATH:             SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/thumbnail\/' : PETTANR_ROOT_PATH + 'resource_pictures\/',\r
-               RESOURCE_PICTURE_PATH:          SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/' : PETTANR_ROOT_PATH + 'resource_pictures\/full\/',\r
-               PANEL_PICTURE_PATH:                 SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/' : PETTANR_ROOT_PATH + 'pictures\/',\r
-               SYSTEM_PICTURE_PATH:            ( SERVER_SUPPORT === false ? RELATIVE : PETTANR_ROOT_PATH ) + 'system_pictures\/',\r
-               CREATE_COMIC_JS:                        SERVER_SUPPORT === false ? 'js\/create_new_comic.js' : PETTANR_ROOT_PATH + 'comics\/new.js',\r
-               CREATE_PANEL_JS:                        SERVER_SUPPORT === false ? 'js\/create_new_panel.js' : PETTANR_ROOT_PATH + 'panels\/new.js',\r
-               UPLOAD_PICTURE_JS:                      SERVER_SUPPORT === false ? 'js\/upload_picture.js' : PETTANR_ROOT_PATH + 'original_pictures\/new.js',\r
-               REGISTER_ARTIST_JS:                     SERVER_SUPPORT === false ? 'js\/register_artist.js' : PETTANR_ROOT_PATH + 'artists\/new.js',\r
-               SERVER_SUPPORT:                         SERVER_SUPPORT,\r
-               URL_PETA_APPS_CSS:                      ( SERVER_SUPPORT === false ? 'stylesheets' : '\/assets' ) + '\/peta.apps.css'\r
+               PETTANR_ROOT_PATH             : PETTANR_ROOT_PATH,\r
+               URL_MY_ORIGINAL_PICTURES_JSON : ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'original_pictures.json',\r
+               URL_MY_RESOURCE_PICTURES_JSON : ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'home\/resource_pictures.json',\r
+               URL_RESOURCE_PICTURES_JSON    : ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'resource_pictures.json',\r
+               URL_MY_RESOURCE_PICTURES_JSON : ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'home\/resource_picture.json',\r
+               URL_COMICS_JSON               : ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'comics.json',\r
+               URL_MY_COMICS_JSON            : ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'home\/comic.json',\r
+               URL_PANELS_JSON               : ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'panels.json',\r
+               URL_MY_PANELS_JSON            : ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'home\/panel.json',\r
+               NS_PETTANR_COMIC              : 'pettanr-comic',\r
+               THUMBNAIL_PATH                : SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/thumbnail\/' : PETTANR_ROOT_PATH + 'resource_pictures\/',\r
+               RESOURCE_PICTURE_PATH         : SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/' : PETTANR_ROOT_PATH + 'resource_pictures\/full\/',\r
+               PANEL_PICTURE_PATH            : SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/' : PETTANR_ROOT_PATH + 'pictures\/',\r
+               SYSTEM_PICTURE_PATH           : ( SERVER_SUPPORT === false ? RELATIVE : PETTANR_ROOT_PATH ) + 'system_pictures\/',\r
+               CREATE_COMIC_JS               : SERVER_SUPPORT === false ? 'js\/create_new_comic.js' : PETTANR_ROOT_PATH + 'comics\/new.js',\r
+               CREATE_PANEL_JS               : SERVER_SUPPORT === false ? 'js\/create_new_panel.js' : PETTANR_ROOT_PATH + 'panels\/new.js',\r
+               UPLOAD_PICTURE_JS             : SERVER_SUPPORT === false ? 'js\/upload_picture.js' : PETTANR_ROOT_PATH + 'original_pictures\/new.js',\r
+               REGISTER_ARTIST_JS            : SERVER_SUPPORT === false ? 'js\/register_artist.js' : PETTANR_ROOT_PATH + 'artists\/new.js',\r
+               SERVER_SUPPORT                : SERVER_SUPPORT,\r
+               URL_PETA_APPS_CSS             : ( SERVER_SUPPORT === false ? 'stylesheets' : '\/assets' ) + '\/peta.apps.css'\r
        }\r
 })();\r
 \r
@@ -624,11 +627,11 @@ pettanr.image = ( function(){
  * bind : 製本\r
  */\r
 pettanr.bind = ( function(){\r
-       var BIND_WORKER_ARRAY = [],\r
+       var BIND_WORKER_ARRAY   = [],\r
                NAMESPACE_CLASSNAME = pettanr.CONST.NS_PETTANR_COMIC + '-',\r
-               PICTURE_PATH = pettanr.CONST.PANEL_PICTURE_PATH,\r
-               ELM_DETECT_WIDTH = ( function(){\r
-                       var ret = document.createElement( 'div');\r
+               PICTURE_PATH        = pettanr.CONST.PANEL_PICTURE_PATH,\r
+               ELM_DETECT_WIDTH    = ( function(){\r
+                       var ret = document.createElement( 'div' );\r
                        ret.style.cssText = 'width: auto;height: 0;padding: 0;margin: 0;display: block;visibility: hidden;float: none;position: static;';\r
                        return ret;\r
                })(),\r
@@ -673,171 +676,207 @@ pettanr.bind = ( function(){
        };\r
        \r
        \r
-       var ElementBuilderClass = function( elmTarget, noClassnameMode ){\r
-               var RIMG_ARRAY     = [],\r
-                       BALLOON_ARRAY  = [];\r
-               \r
-               function buildComicElement(){\r
+       var ElementBuilder = function( elmTarget, noClassname ){\r
+               this.imageList    = [];\r
+               this.balloonList  = [];\r
+               this.elmTarget    = elmTarget;\r
+               this.noClassname  = noClassname;\r
+       };\r
+       ElementBuilder.prototype = {\r
+               build : function( json, zoom ){\r
+                       this.clean();\r
                        \r
-               };\r
-               \r
-               function buildPanelElement( json, zoom ){\r
-                       var _elmPanel = document.createElement( 'div' ),\r
-                               _style = {\r
+                       // json is Comic ? Panel ?\r
+                       var stories = json.children || json.stories,\r
+                               i, l;\r
+                       if( Type.isArray( stories ) === true ){\r
+                               // comic\r
+                               for( i = 0, l = stories.length; i<l; ++i ){\r
+                                       this.buildPanelElement( stories[ i ], zoom );\r
+                               };\r
+                       } else\r
+                       if( json.elements ){\r
+                               // panel\r
+                               this.buildPanelElement( json, zoom );\r
+                       } else {\r
+                               // invalid json\r
+                       };\r
+               },\r
+               buildFromFile : function( file, zoom ){\r
+                       this.clean();\r
+                       \r
+                       var l    = file.getChildFileLength(),\r
+                               data = file.read(),\r
+                               i, story;\r
+                       if( data.title ){\r
+                               // comic\r
+                               for( i = 0; i<l; ++i ){\r
+                                       story = file.getChildFileAt( i ).read();\r
+                                       this.buildPanelElement( story.panel, zoom );\r
+                               };\r
+                       } else\r
+                       if( data.panel ){\r
+                               // story\r
+                               this.buildPanelElement( data.panel, zoom );\r
+                       } else\r
+                       if( data.border ){\r
+                               // panel\r
+                               this.buildPanelElement( data, zoom );\r
+                       } else {\r
+                               // invalid json\r
+                       };\r
+               },\r
+               buildComicElement : function(){\r
+                       \r
+               },\r
+               buildPanelElement : function( json, zoom ){\r
+                       var elmPanel = document.createElement( 'div' ),\r
+                               style = {\r
                                                'border-width':         typeof json.border === 'number' ? json.border + 'px' : 0,\r
-                                               width:                          json.width + 'px',\r
+                                               width:                          json.width  + 'px',\r
                                                height:                         json.height + 'px'\r
                                },\r
-                               _cssText = [],\r
-                               _comicElements = json.panel_elements || [],\r
-                               _comicElement, _elmImg, _rImg, _rPic,\r
-                               _balloon, _elmBalloonWrap, _elmText, _text, _speechesAttributes, _key;\r
-                       elmTarget.appendChild( _elmPanel );\r
+                               cssText  = [],\r
+                               elements = json.elements,\r
+                               rPic,\r
+                               p, i, l;\r
+                       this.elmTarget.appendChild( elmPanel );\r
                        \r
-                       if( noClassnameMode === true ){\r
+                       if( this.noClassname === true ){\r
                                \r
                        } else {\r
-                               _elmPanel.className = NAMESPACE_CLASSNAME + 'panel';\r
-                       }\r
-                       for( var _key in _style ){\r
-                               _cssText.push( _key + ':' + _style[ _key ] );\r
-                       }\r
-                       _elmPanel.style.cssText = _cssText.join( ';' );\r
+                               elmPanel.className = NAMESPACE_CLASSNAME + 'panel';\r
+                       };\r
+                       for( p in style ){\r
+                               cssText.push( p + ':' + style[ p ] );\r
+                       };\r
+                       elmPanel.style.cssText = cssText.join( ';' );\r
                        \r
-                       for( var i=0, l=_comicElements.length; i<l; ++i ){\r
-                               _comicElement = _comicElements[ i ];\r
-                               _rPic = _comicElement.resource_picture;\r
-                               if( _rPic ){\r
-                                       _rImg = pettanr.image.createReversibleImage(\r
-                                                       [ PICTURE_PATH, _rPic.id, '.', _rPic.ext ].join( ''),\r
-                                                       _comicElement.width, _comicElement.height\r
-                                               );\r
-                                       _elmImg = _rImg.elm;\r
-                                       _elmPanel.appendChild( _elmImg );\r
-                                       _elmImg.className = NAMESPACE_CLASSNAME + 'image';\r
-                                       _elmImg.style.cssText = [\r
-                                               'left:',   _comicElement.x, 'px;',\r
-                                               'top:',    _comicElement.y, 'px;',\r
-                                               'z-index:',_comicElement.z, ';'\r
-                                       ].join( '');                                    \r
-                                       if( _elmImg.tagName === 'img' ){\r
-                                               _elmImg.width        = Math.abs( _comicElement.width );\r
-                                               _elmImg.height       = Math.abs( _comicElement.height );\r
-                                       } else {\r
-                                               _elmImg.style.width  = Math.abs( _comicElement.width ) + 'px';\r
-                                               _elmImg.style.height = Math.abs( _comicElement.height ) + 'px';\r
-                                       };\r
-                                       \r
-                                       RIMG_ARRAY.push( _rImg );\r
+                       if( !elements ) return;\r
+                       for( i = 0, l = elements.length; i < l; ++i ){\r
+                               data = elements[ i ];\r
+                               rPic = data.picture;\r
+                               if( rPic ){\r
+                                       this.buildImage( elmPanel, data, rPic );\r
                                } else {\r
-                                       _elmBalloonWrap = document.createElement( 'div' );\r
-                                       _elmPanel.appendChild( _elmBalloonWrap );\r
-                                       _elmBalloonWrap.className = NAMESPACE_CLASSNAME + 'balloon';\r
-                                       _elmBalloonWrap.style.cssText = [\r
-                                               'width:',   _comicElement.width, 'px;',\r
-                                               'height:',  _comicElement.height, 'px;',\r
-                                               'left:',    _comicElement.x, 'px;',\r
-                                               'top:',     _comicElement.y, 'px;',\r
-                                               'z-index:', _comicElement.z, ';'\r
-                                       ].join( '');\r
-\r
-                                       _balloon = pettanr.balloon.createBalloon( _comicElement.width, _comicElement.height, _comicElement.tail );\r
-                                       _elmBalloonWrap.appendChild( _balloon.elm );\r
-                                       \r
-                                       _elmText = document.createElement( 'p' );\r
-                                       _elmBalloonWrap.appendChild( _elmText );\r
-                                       \r
-                                       _elmText.appendChild( document.createElement( 'span' ) );\r
-                                       \r
-                                       _text = '';\r
-                                       _speechesAttributes = _comicElement.speeches_attributes;\r
-                                       if( _speechesAttributes ){\r
-                                               for( _key in _speechesAttributes ){\r
-                                                       _text += _speechesAttributes[ _key ] && _speechesAttributes[ _key ].content ? _speechesAttributes[ _key ].content : '';\r
-                                               };\r
-                                       };\r
-                                       _elmText.firstChild.appendChild( document.createTextNode( _text ));\r
-                                       BALLOON_ARRAY.push( _balloon );\r
+                                       this.buildBalloon( elmPanel, data );\r
                                };\r
                        };\r
-               };\r
-               \r
-               function clean(){\r
-                       // clean elmTarget\r
-                       while( RIMG_ARRAY.length > 0 ){\r
-                               RIMG_ARRAY.shift().destroy();\r
-                       };\r
-                       while( BALLOON_ARRAY.length > 0 ){\r
-                               BALLOON_ARRAY.shift().destroy();\r
+               },\r
+               buildImage : function( elmPanel, data, rPic ){\r
+                       var oPic = rPic.original_picture,\r
+                               rImg = pettanr.image.createReversibleImage(\r
+                                       [ PICTURE_PATH, oPic.id, '.', oPic.ext ].join( '' ),\r
+                                       data.width, data.height\r
+                               ),\r
+                               elmImg = rImg.elm;\r
+                       elmPanel.appendChild( elmImg );\r
+                       elmImg.className = NAMESPACE_CLASSNAME + 'image';\r
+                       elmImg.style.cssText = [\r
+                               'left:',    data.x, 'px;',\r
+                               'top:',     data.y, 'px;',\r
+                               'z-index:', data.z, ';'\r
+                       ].join( '');                                    \r
+                       if( elmImg.tagName === 'img' ){\r
+                               elmImg.width        = Math.abs( data.width );\r
+                               elmImg.height       = Math.abs( data.height );\r
+                       } else {\r
+                               elmImg.style.width  = Math.abs( data.width ) + 'px';\r
+                               elmImg.style.height = Math.abs( data.height ) + 'px';\r
                        };\r
-                       Util.removeAllChildren( elmTarget );            \r
-               };\r
-               \r
-               this.build = function( json, zoom ){\r
-                       clean();\r
                        \r
-                       // json is Comic ? Panel ?\r
-                       var panels = json.stories;\r
-                       if( Type.isArray( panels ) === true ){\r
-                               // comic\r
-                               for( var i=0, l=panels.length; i<l; ++i ){\r
-                                       buildPanelElement( panels[ i ], zoom );\r
+                       this.imageList.push( rImg );                    \r
+               },\r
+               buildBalloon : function( elmPanel, data ){\r
+                       var elmBalloonWrap = document.createElement( 'div' ),\r
+                               elmText        = document.createElement( 'p' ),\r
+                               content        = '',\r
+                               speechesAttr   = data.speeches_attributes,\r
+                               balloon, p;\r
+                       elmPanel.appendChild( elmBalloonWrap );\r
+                       elmBalloonWrap.className = NAMESPACE_CLASSNAME + 'balloon';\r
+                       elmBalloonWrap.style.cssText = [\r
+                               'width:',   data.width, 'px;',\r
+                               'height:',  data.height, 'px;',\r
+                               'left:',    data.x, 'px;',\r
+                               'top:',     data.y, 'px;',\r
+                               'z-index:', data.z, ';'\r
+                       ].join( '' );\r
+\r
+                       balloon = pettanr.balloon.createBalloon( data.width, data.height, data.tail );\r
+                       elmBalloonWrap.appendChild( balloon.elm );\r
+                       \r
+                       elmBalloonWrap.appendChild( elmText );\r
+                       \r
+                       elmText.appendChild( document.createElement( 'span' ) );\r
+                       \r
+                       if( speechesAttr ){\r
+                               for( p in speechesAttr ){\r
+                                       content += speechesAttr[ p ] && speechesAttr[ p ].content ? speechesAttr[ p ].content : '';\r
                                };\r
-                       } else\r
-                       if( json.panel_elements ){\r
-                               // panel\r
-                               buildPanelElement( json, zoom );\r
-                       } else {\r
-                               // invalid json\r
                        };\r
-               };\r
-               this.zoom = function(){\r
-                       \r
-               };\r
-               this.destroy = function(){\r
-                       clean();\r
-               };\r
+                       elmText.firstChild.appendChild( document.createTextNode( content ));\r
+                       this.balloonList.push( balloon );\r
+               },\r
+               clean : function(){\r
+                       // clean elmTarget\r
+                       while( this.imageList.length > 0 ){\r
+                               this.imageList.shift().destroy();\r
+                       };\r
+                       while( this.balloonList.length > 0 ){\r
+                               this.balloonList.shift().destroy();\r
+                       };\r
+                       Util.removeAllChildren( this.elmTarget );\r
+               },\r
+               zoom : function(){},\r
+               destroy : function(){\r
+                       this.clean();\r
+               }                       \r
        };\r
        \r
-       var BindWorkerClass = function( elmTarget, json, zoomSelfEnabled, noClassnameMode ){\r
-               var builder    = new ElementBuilderClass( elmTarget, noClassnameMode );\r
-               var elmDetectW = ELM_DETECT_WIDTH.cloneNode( false );\r
-               var resizer    = null;\r
-               \r
+       var BindWorker = function( elmTarget, json, zoomSelfEnabled, noClassname ){\r
+               this.builder     = new ElementBuilder( elmTarget, noClassname );\r
+               this.elmDetectW  = ELM_DETECT_WIDTH.cloneNode( false );\r
+               this._json        = json;\r
+               this.noClassname = noClassname;\r
                if( zoomSelfEnabled === true ){\r
-                       elmTarget.parentNode.insertBefore( elmDetectW, elmTarget );\r
-                       resizer = new ResizeAgentClass( onResize, elmDetectW );\r
+                       elmTarget.parentNode.insertBefore( this.elmDetectW, elmTarget );\r
+                       this.resizer = new ResizeAgentClass( onResize, this.elmDetectW );\r
                };\r
                function onResize(){\r
                        \r
                };\r
-               json && typeof json === 'object' && builder.build( json );\r
-               \r
-               this.init = function(){\r
+               json && typeof json === 'object' && this.builder.build( json );\r
+       };\r
+       BindWorker.prototype = {\r
+               init : function(){\r
                                \r
-               };\r
-               this.zoom = function(){\r
-                       builder.zoom();\r
-               };\r
-               this.json = function( _json ){\r
-                       json = _json;\r
-                       builder.build( _json );\r
-               };\r
-               this.targetElement = function(){\r
+               },\r
+               zoom : function(){\r
+                       this.builder.zoom();\r
+               },\r
+               json : function( json ){\r
+                       this._json = json;\r
+                       this.builder.build( json, this.noClassname );\r
+               },\r
+               file : function( file ){\r
+                       this.builder.buildFromFile( file, this.noClassname );\r
+               },\r
+               targetElement : function(){\r
                                \r
-               };\r
-               this.layout = function(){\r
+               },\r
+               layout : function(){\r
                                \r
-               };\r
-               this.destroy = function(){\r
-                       builder.destroy();\r
-                       elmTarget = json = builder = null;\r
-               };\r
+               },\r
+               destroy : function(){\r
+                       this.builder.destroy();\r
+                       delete this.json;\r
+                       delete this.builder;\r
+               }               \r
        };\r
-       \r
        return {\r
                createBindWorker: function( elmTarget, opt_COMICJSONorPANELJSON, opt_zoomSelfEnabled, opt_noClassnameMode ){\r
-                       var ret = new BindWorkerClass( elmTarget, opt_COMICJSONorPANELJSON, !!opt_zoomSelfEnabled, !!opt_noClassnameMode);\r
+                       var ret = new BindWorker( elmTarget, opt_COMICJSONorPANELJSON, !!opt_zoomSelfEnabled, !!opt_noClassnameMode );\r
                        BIND_WORKER_ARRAY.push( ret );\r
                        return ret;\r
                },\r
@@ -852,14 +891,14 @@ pettanr.bind = ( function(){
  *  Google Analytics\r
  */\r
 \r
-if( pettanr.LOCAL === false ){\r
+if( pettanr.LOCAL === false || document.location.href.indexOf( 'localhost:' ) === -1 ){\r
        var _gaq = _gaq || [];\r
        _gaq.push(['_setAccount', 'UA-28023955-1']);\r
        _gaq.push(['_trackPageview']);\r
        \r
-       (function() {\r
+       ( function(){\r
                var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\r
                ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\r
                var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\r
        })();   \r
-}
\ No newline at end of file
+};
\ No newline at end of file