OSDN Git Service

Merge branch 'v05dev' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v05
[pettanr/pettanr.git] / app / assets / javascripts / peta-apps.js
index 8065af1..ba248bb 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * pettanR peta.apps.js
- *   version 0.5.46
+ *   version 0.5.53
  *   
  * author:
  *   itozyun
                                                data = createFileData( json, LICENSE_GROUP_ARRAY, 'name,caption,url,classname' );
                                                addChildData( FILE_DATA_LISENCE_GROUP, data );
                                                break;
-                                               
+                                       
+                                       // Speech Balloon Templete
+                                       case FILE_DATA_BALLOON_ROOT :
+                                       case BALLOON_TEMPLETE_ARRAY :
+                                               json.type = FILE_TYPE.BALLOON_TEMPLETE;
+                                               // register pettanr.balloon
+                                               pettanr.newBalloon.register( json.id, json.classname, json.settings );
+                                               data = createFileData( json, BALLOON_TEMPLETE_ARRAY, 'name,caption,classname,settings' );
+                                               addChildData( FILE_DATA_BALLOON_ROOT, data );
+                                               break;
+                                       
                                        // Author
                                        case FILE_DATA_AUTHOR_ROOT :
                                        case AUTHOR_ARRAY          :
                                        // Panel Element
                                        case PANEL_ELEMENT_ARRAY :
                                                json.type = FILE_TYPE.PANEL_ELEMENT;
-                                               data = createFileData( json, PANEL_ELEMENT_ARRAY, 'caption,url,width,height,x,y,z,t' ); // 画像の分
+                                               data = createFileData( json, PANEL_ELEMENT_ARRAY, 'caption,url,width,height,x,y,z,t,balloons,speeches,settings' ); // 画像の分
                                                // 噴出しの分
                                                // 景色の分
                                                break;
                                        };
                                };
 
-                               // パネル要素
+                               // パネル要素 配列
                                elements = json.elements;
                                if( Type.isArray( elements ) === true ){
                                        for( i = 0, l = elements.length; i<l; ++i ){
                                                addChildData( data, getResource( PANEL_ELEMENT_ARRAY, elements[ i ] ) );
                                        };
                                };
+                               //パネル要素,吹き出し
+                               if( json.speech_balloon_template_id ){
+                                       data.balloon_template = getResource( BALLOON_TEMPLETE_ARRAY, json.speech_balloon_template_id );
+                               };
                                
                                // Artist
                                if( json.artist || json.artist_id ){
                                                return [ data.name, '先生' ].join( '' );
                                        case FILE_TYPE.ARTIST :
                                                return [ data.name, '画伯' ].join( '' );
+                                       case FILE_TYPE.BALLOON_TEMPLETE :
+                                               return [ data.id, data.caption ].join( ':' );
                                        case FILE_TYPE.FOLDER :
                                };
                                return data.name;
                                                return { className: 'file-type-author' };
                                        case FILE_TYPE.ARTIST :
                                                return { className: 'file-type-artist' };
+                                       case FILE_TYPE.BALLOON_TEMPLETE :
+                                               return { className: 'file-type-balloon' };
                                        case FILE_TYPE.FOLDER :
                                                return { className: 'file-type-folder' };
                                };
                                        case FILE_TYPE.RESOURCE_PICTURE :
                                                data = data.picture;
                                        case FILE_TYPE.PICTURE :
-                                               return '実素材情報 revision:' + data.revision + ' ' + data.credit + ' ' + data.settings;
+                                               return '実素材情報  revision: ' + data.revision + ' credit: ' + data.credit;// + ' ' + data.settings;
                                        case FILE_TYPE.ORIGINAL_PICTURE :
                                                return [ '原画情報 ', data.width, 'x', data.height, ', filesize:', data.filesize, ' md5', data.md5 ].join( '' );
                                        case FILE_TYPE.COMIC :
                                                return 'author id:' + data.id;
                                        case FILE_TYPE.ARTIST :
                                                return [ 'artist id:', data.id, ' Email:', data.email || 'empty' , ', HP:', data.homepage_url || 'empty' ].join( '' );
+                                       case FILE_TYPE.BALLOON_TEMPLETE :
+                                               return data.name;// + ', ' + data.settings;
                                        case FILE_TYPE.FOLDER :
                                                return 'pettanR folder';
                                };
                                STORY            : FileAPI.createFileTypeID(),
                                PANEL            : FileAPI.createFileTypeID(),
                                PANEL_ELEMENT    : FileAPI.createFileTypeID(),
-                               BALLOON          : FileAPI.createFileTypeID(),                          
+                               BALLOON          : FileAPI.createFileTypeID(),
+                               BALLOON_TEMPLETE : FileAPI.createFileTypeID(),  
                                ORIGINAL_PICTURE : FileAPI.createFileTypeID(),
                                RESOURCE_PICTURE : FileAPI.createFileTypeID(),
                                PICTURE          : FileAPI.createFileTypeID(),
                                AUTHOR           : FileAPI.createFileTypeID(),
                                ARTIST           : FileAPI.createFileTypeID(),
                                LICENSE          : FileAPI.createFileTypeID(),
-                               LICENSE_GROUP    : FileAPI.createFileTypeID()
+                               LICENSE_GROUP    : FileAPI.createFileTypeID(),
                        }
                ),
                AUTHOR_ARRAY  = [],
                        children:       []
                },
                FILE_DATA_BALLOON_ROOT = {
-                       name:           'Balloon templetes',
+                       name:           'Balloon Templetes',
                        type:           FILE_TYPE.FOLDER,
-                       children:       []
+                       children:       [],
+                       driver:         Driver,
+                       json:           pettanr.CONST.SPEECH_BALOON_TEMPLETE
                };
        FILE_DATA_SERVICE_ROOT.children.push( FILE_DATA_COMICS_ROOT, FILE_DATA_RESOURCE_PICTURES_ROOT, FILE_DATA_ORIGINAL_PICTURES_ROOT, FILE_DATA_LISENCE_ROOT, FILE_DATA_BALLOON_ROOT );
        FILE_DATA_COMICS_ROOT.children.push( FILE_DATA_MY_COMICS_ROOT, FILE_DATA_LATEST_COMICS, FILE_DATA_AUTHOR_ROOT, FILE_DATA_STORY_ROOT, FILE_DATA_PANELS_ROOT );
        FILE_DATA_ORIGINAL_PICTURES_ROOT.children.push( FILE_DATA_MY_ORIGINAL_PICTURES_ROOT );
        
        FileAPI.createFolderUnderRoot( FILE_DATA_SERVICE_ROOT );
+       
+       // Balloon Templete の取得
+       // Reader, Editor で必要
+       (function( tree ){
+               tree.getRootFile().getSeqentialFiles();
+       })( FileAPI.createTree( FILE_DATA_BALLOON_ROOT ) );
+
 
        Driver.isPettanrFileInstance = function( file ){
                if( FileAPI.isFileInstance( file ) === true ){
@@ -1388,7 +1418,7 @@ var Editor = gOS.registerApplication( function(){
                var ELM_ITEM_CLASSNAME = 'menubar-item',
                        currentMenu        = null,
                        elmBar, elmBox,
-                       nodeBar, nodeBox,
+                       nodeBar, nodeBox, layerBox,
                        barH, menuW;
        /** -----------------------------------------
         *  PrivateOptionDataClass
@@ -1581,7 +1611,7 @@ var Editor = gOS.registerApplication( function(){
                };
                MenuClass.prototype = {
                        show: function(){
-                               data = MenuPrivateDataClass.get( this );
+                               var data = MenuPrivateDataClass.get( this );
                                if( data.visible === true ) return;
                                
                                data.elm.className = ELM_ITEM_CLASSNAME + '-focus';
@@ -1986,7 +2016,7 @@ var Editor = gOS.registerApplication( function(){
                        },
                        firstOpen : function(){
                                var win       = this.window,
-                                       elmHead   = this.elmHead = Util.getElementsByClassName( this.elm, 'window-header' )[ 0 ];
+                                       elmHead   = this.elmHead = Util.getElementsByClassName( this.elm, 'window-header' )[ 0 ],
                                        elmBody   = this.elmBody = Util.getElementsByClassName( this.elm, 'window-body' )[ 0 ],
                                        elmClose  = Util.getElementsByClassName( this.elm, 'window-close-button' )[ 0 ],
                                        elmFoot   = Util.getElementsByClassName( this.elm, 'window-footer' )[ 0 ],
@@ -2302,7 +2332,48 @@ var Editor = gOS.registerApplication( function(){
                        'toolbox-window', 'Tool box', 0, 215, 110, 290, true
                );
        })();
-       
+
+/* ----------------------------------------
+ * BALLOON_TEMPLETE_EXPROLER
+ *  - window
+ */
+       var BALLOON_EXPLORER_WINDOW = ( function(){
+               var tree, finder;
+               
+               function onFileSelect( file ){
+                       // 他の image ファイルも許可する?
+                       if( Driver.isPettanrFileInstance( file ) === true ){
+                               if( file.getType() === FILE_TYPE.BALLOON_TEMPLETE ){
+                                       PANEL_ELEMENT_CONTROL.onBalloonSelect( FileAPI.getFileData( file ) );
+                               };
+                       };
+               };
+               
+               return WINDOWS_CONTROL.createWindow(
+                       {
+                               onInit: function(){},
+                               onFirstOpen: function( _w, _h, nodeBody ){
+                                       tree = FileAPI.createTree( FILE_DATA_BALLOON_ROOT );
+                                       var     _root  = tree.getRootFile();
+                                       _root.getSeqentialFiles();
+                       
+                                       finder = app.createFinder(
+                                               nodeBody,
+                                               tree,
+                                               onFileSelect
+                                       );
+                                       finder.createPath( BALLOON_EXPLORER_WINDOW.createHeaderItem() );
+                               },
+                               onOpen: function( _w, _h ){
+                                       finder.resize( _w, _h );
+                               },
+                               onResize: function( _w, _h ){
+                                       finder.resize( _w, _h );
+                               }
+                       },
+                       null, 'Balloon', 0, 215, 600, 350, false, true, true, 300, 300
+               );
+       })();   
        
 /* ----------------------------------------
  * IMAGE_EXPROLER
@@ -2947,7 +3018,8 @@ var Editor = gOS.registerApplication( function(){
                                { x:    1, w:   -1, y:  0, h:    1}, //bottom-left
                                { x:    0, w:    1, y:  0, h:    1}  //bottom-right
                        ],
-                       startX, startY, startW, startH, startFilpV, startFilpH, startAspect,
+                       startX, startY, startW, startH,
+            flipV, flipH, startFilpV, startFilpH, startAspect,
                        baseX, baseY, baseW, baseH,
                        currentX, currentY, currentW, currentH,
                        offsetX, offsetY,
@@ -3451,9 +3523,10 @@ var Editor = gOS.registerApplication( function(){
                        pushoutH        = 0,
                        pushout         = false,
                        currentType     = -1,
+            currentElement  = null,
                        visible         = false,
                        node            = null,
-                       ui, inputX, inputY, inputZ, inputA, inputW, inputH, inputAspectRatio,
+                       ui, inputX, inputY, inputZ, inputA, inputW, inputH, inputPercentW, inputPercentH, inputAspectRatio,
                        buttonBack, buttonForward, buttonDel, buttonEdit, butonChange;
                        
                function layerBack(){
@@ -3678,7 +3751,7 @@ var Editor = gOS.registerApplication( function(){
                this.$        = jqImageElementOrigin.clone( true );
                this.data     = data;
                this.z        = data.z;
-               this.timing   = data.t || PANEL_ELEMENT_ARRAY.length + 1;
+               this.timing   = data.t || PANEL_ELEMENT_ARRAY.length;
                this.keepSize = false;
                this.flipV    = data.height < 0 ? -1 : 1;
                this.flipH    = data.width  < 0 ? -1 : 1;
@@ -3780,14 +3853,6 @@ var Editor = gOS.registerApplication( function(){
 /* --------------------------------------------------------------------------------------------
  * TextElementClass
  * 
- * type
- * 0.none
- * 1.speach balloon
- * 2.think
- * 3.bom
- * 4.black-box( dq style)
- * 5.blue-box( ff style)
- * 
  */
        var jqTextElementOrigin;
        var TextElementClass = function( data ){
@@ -3800,17 +3865,31 @@ var Editor = gOS.registerApplication( function(){
                this.$       = jqTextElementOrigin.clone( true );
                this.data    = data;
                this.elmText = this.$.find( 'td,.speach-inner' ).get( 0 );
-               this.type    = data.balloon_template_id;
-               this.content = ( function(){
-                       var _speachs = data.speeches_attributes;
-                       for( var k in _speachs ){
-                               return _speachs[ k ].content || '';
-                       }
-                       return '';
-               })();
-               this.balloon = pettanr.balloon.createBalloon( data.width, data.height, data.tail, this.type );
+               this.type    = data.balloon_template_id || data.balloon_template.id;
+               this.content = '';
+               
+               var speachs = data.speeches;
+               for( var k in speachs ){
+                       this.content += speachs[ k ].content || '';
+               };
+               
+               var balloons = data.balloons,
+                       p, balloonData;
+               if( balloons ){
+                       for( p in balloons ){
+                               balloonData = balloons[ p ];
+                               break;
+                       };
+               };
+               // this.balloon = pettanr.balloon.createBalloon( data.width, data.height, data.tail, this.type );
+               this.balloon = pettanr.newBalloon.create( this.type, balloonData.width, balloonData.height, balloonData.settings );
+               data.x       = balloonData.x;
+               data.y       = balloonData.y;
+               data.width   = balloonData.width;
+               data.height  = balloonData.height;
+               
                this.z       = data.z;
-               this.timing  = data.t || PANEL_ELEMENT_ARRAY.length + 1;
+               this.timing  = data.t || PANEL_ELEMENT_ARRAY.length;
                
                this.$.find( 'img' ).eq( 0 ).replaceWith( this.balloon.elm );
                
@@ -3831,16 +3910,18 @@ var Editor = gOS.registerApplication( function(){
                                this.resize( this.data.x, this.data.y, this.data.width, this.data.height, this.data.tail );
                                this.init = null;
                        },
+                       /*
                        _updateType : function( _type ){
                                if( this.type !== _type ){
                                        this.type = _type || this.type;
                                        this.balloon.type( this.type );
                                };
-                       },
+                       }, */
                        _updateAngle : function( _a ){
                                if( _a !== undefined && a !== _a ){
                                        this.a = _a !== undefined ? _a : this.a;
-                                       this.balloon.angle( this.a );
+                                       //this.balloon.angle( this.a );
+                                       this.balloon.update( this.w, this.h, this.a );
                                };
                        },
                        /* history */
@@ -3849,7 +3930,8 @@ var Editor = gOS.registerApplication( function(){
                                this.elmText.firstChild.data = this.content;
                        },
                        _resizeBalloon : function(){
-                               this.balloon && this.balloon.resize( this.a, this.w, this.h );
+                               //this.balloon && this.balloon.resize( this.a, this.w, this.h );
+                               this.balloon && this.balloon.update( this.w, this.h, this.a );
                        },
                        angle : function( _a ){
                                _a !== undefined && this.resize( this.x, this.y, this.w, this.h, _a );
@@ -4071,7 +4153,7 @@ var Editor = gOS.registerApplication( function(){
                                                x       : Math.floor( panelW / 2 - data.width / 2 ),
                                                y       : Math.floor( panelH / 2 - data.height / 2 ),
                                                z       : -1,
-                                               t       : PANEL_ELEMENT_ARRAY.length + 1,
+                                               t       : 0,
                                                width   : 1,
                                                height  : 1
                                        });
@@ -4086,21 +4168,31 @@ var Editor = gOS.registerApplication( function(){
                                HISTORY_CONTROL.saveState( PANEL_ELEMENT_CONTROL.restore, [ false, _panelElement ], [ true, _panelElement ], true );
                        },
                        createTextElement: function( data ){
-                               var _panelElement;
                                if( Type.isObject( data ) === false ){
+                                       BALLOON_EXPLORER_WINDOW.open();
+                               } else {
+                                       PANEL_ELEMENT_CONTROL.onBalloonSelect( data );
+                               };
+                       },
+                       onBalloonSelect : function( data ){
+                               var _panelElement;
+                               if( data.classname ){
                                        data = {
-                                               balloon_template_id:1,
-                                               size:               1,
-                                               tail:               90,
-                                               x:                                      Math.floor( panelW / 2 - 100 + Math.random() * 10 ),
-                                               y:                  Math.floor( panelH / 2 - 100 + Math.random() * 10 ),
-                                               z:                  -1,
-                                               t:                  PANEL_ELEMENT_ARRAY.length + 1,
-                                               width:              200,
-                                               height:             200,
-                                               speeches_attributes: {
-                                                       text1: {
-                                                               content:    'Hello'
+                                               balloon_template_id : data.id,
+                                               z                   : -1,
+                                               t                   : 0,      
+                                               balloons : {
+                                                       balloon1 : {
+                                                               width    : 200,
+                                                               height   : 200,
+                                                               x        : Math.floor( panelW / 2 - 100 + Math.random() * 10 ),
+                                                               y        : Math.floor( panelH / 2 - 100 + Math.random() * 10 ),
+                                                               settings : {}                                                                                                           
+                                                       }
+                                               },
+                                               speeches : {
+                                                       speech1 : {
+                                                               content : 'Hello'
                                                        }
                                                }
                                        };
@@ -4357,13 +4449,13 @@ var Editor = gOS.registerApplication( function(){
                
 
                if( Type.isArray( panelElements ) === true ){
-                       for( var i=0; i<panelElements.length; ++i ){
+                       for( var i = 0; i < panelElements.length; ++i ){
                                panelElm = panelElements[ i ];
+                               if( panelElm.balloons ){
+                                       PANEL_ELEMENT_CONTROL.createTextElement( panelElm );
+                               } else
                                if( panelElm.picture ){
                                        PANEL_ELEMENT_CONTROL.createImageElement( panelElm );
-                               } else
-                               if( panelElm.balloon_template_id ){
-                                       PANEL_ELEMENT_CONTROL.createTextElement( panelElm );
                                };
                        };
                };
@@ -5108,7 +5200,7 @@ var Model = ( function(){
                                '}'
                        ].join( '');
                };
-               function imageToJson( _imageElement, _timing ){
+               function imageToJson( _imageElement, t ){
                        var cr = pettanr.LINE_FEED_CODE_TEXTAREA;
                        return [
                                '{', cr,
@@ -5116,36 +5208,40 @@ var Model = ( function(){
                                        '"x": ',          _imageElement.x, ',', cr,
                                        '"y": ',          _imageElement.y, ',', cr,
                                        '"z": ',          _imageElement.z + 1, ',', cr,
-                                       '"t": ',          _timing, ',', cr,
+                                       '"t": ',          t, ',', cr,
                                        '"width": ',      _imageElement.flipH * _imageElement.w, ',', cr,
                                        '"height": ',     _imageElement.flipV * _imageElement.h, cr,
                                '}'
                        ].join( '');
                };
 
-               function balloonToJson( _textElement, _timing ){
+               function balloonToJson( _textElement, t ){
                        var cr = pettanr.LINE_FEED_CODE_TEXTAREA;
                        return [
                                '{', cr,
-                                       '"balloon_template_id": ', 1, ',', cr,
-                                       '"system_picture_id": ',   1, ',', cr,
-                                       '"size": ',                1, ',', cr,
-                                       '"tail": ',                _textElement.a, ',', cr,
-                                       '"x": ',                   _textElement.x, ',', cr,
-                                       '"y": ',                   _textElement.y, ',', cr,
-                                       '"z": ',                   _textElement.z + 1, ',', cr,
-                                       '"t": ',                   timing, ',', cr,
-                                       '"width": ',               _textElement.w, ',', cr,
-                                       '"height": ',              _textElement.h, ',', cr,
-                                       '"speeches_attributes": {', cr,
-                                               '"newf', timing, '": {', cr,
-                                               '"content": "', _textElement.content, '",', cr,
+                                       '"speech_balloon_template_id": ', _textElement.type, ',', cr,
+                                       '"classname": "Square",',
+                                       '"z": ',                _textElement.z + 1, ',', cr,
+                                       '"t": ',                t, ',', cr,
+                                       '"settings": "{\'tail\':' + _textElement.a + '}",',
+                           '"balloons_attributes": {', cr,
+                               '"newb', t, '": {', cr,
+                                                       '"system_picture_id": ',  _textElement.balloon.src, ',', cr,
+                                               '"caption": "alt text",', cr,
                                                        '"x": ',        _textElement.x, ',', cr,
                                                        '"y": ',        _textElement.y, ',', cr,
-                                                       '"t": ',        timing, ',', cr,
                                                        '"width": ',    _textElement.w, ',', cr,
                                                        '"height": ',   _textElement.h, cr,
                                                '}', cr,
+                                       '},', cr,
+                                       '"speeches_attributes": {', cr,
+                                               '"news', t, '": {', cr,
+                                               '"content": "', _textElement.content, '",', cr,
+                                                       '"x": ',        Math.floor( _textElement.w * 0.16 ), ',', cr,
+                                                       '"y": ',        Math.floor( _textElement.w * 0.16 ), ',', cr,
+                                                       '"width": ',    Math.floor( _textElement.w * 0.66 ), ',', cr,
+                                                       '"height": ',   Math.floor( _textElement.h * 0.66 ), cr,
+                                               '}', cr,
                                        '}', cr,
                                '}'
                        ].join( '');
@@ -5277,7 +5373,6 @@ var OutputConsole = gOS.registerApplication( function(){
                comboboxFormat, inputOption,
                buttonSubmit, buttonClose,
                windowW, windowH,
-               timing   = 0,
                comicID, panelID, panelTimming, panelW, panelH, borderSize, panelElementArray,
                app      = this,
                model    = null;
@@ -5384,7 +5479,7 @@ var OutputConsole = gOS.registerApplication( function(){
        this.onClose = function(){
                elmOutputArea.value = '';
                model.destroy();
-               elmOutputArea = comboboxFormat = inputOption = buttonSubmit = buttonClose = panelElementArray = instance = model = null;
+               elmOutputArea = comboboxFormat = inputOption = buttonSubmit = buttonClose = panelElementArray = model = null;
        };
 }, true, false, 'Output Console', 'outputConsole', null, '#2D89F0' );