/*\r
* pettanR libs.js\r
- * version 0.5.39\r
+ * version 0.5.44\r
* \r
* \r
* Type\r
};\r
}, 0 );\r
\r
- function clone( src ) {\r
- var ret;\r
+ var objSrc = [],\r
+ objCopy = [],\r
+ getIndex; \r
+ function clone( src ){\r
+ var ret, i, key;\r
if( Type.isArray(src) === true ){\r
+ i = getIndex( objSrc, src );\r
+ if( i !== -1 ) return objCopy[ i ];\r
ret = [];\r
+ objSrc[ objSrc.length ] = src;\r
+ objCopy[ objCopy.length ] = ret;\r
} else\r
if( Type.isObject(src) === true ){\r
+ i = getIndex( objSrc, src );\r
+ if( i !== -1 ) return objCopy[ i ];\r
ret = {};\r
+ objSrc[ objSrc.length ] = src;\r
+ objCopy[ objCopy.length ] = ret;\r
} else\r
if( Type.isNumber(src) === true || Type.isString(src) === true || Type.isBoolean( src ) === true ){\r
return src;\r
} else {\r
return null;\r
};\r
- for( var key in src ){\r
- ret[ key ] = clone( src[ key ]);\r
+ for( key in src ){\r
+ ret[ key ] = clone( src[ key ] );\r
};\r
return ret;\r
};\r
return target;\r
},\r
copy: function( objOrArray ){\r
+ objSrc.length = objCopy.length = 0;\r
+ getIndex = Util.getIndex;\r
return clone( objOrArray );\r
},\r
cleanCommentNode: function ( _targetElm ){\r
_node.parentNode && _node.parentNode.removeChild( _node);\r
}\r
},\r
- getIndex: function( _array, _element ){\r
+ getIndex: function( array, element ){\r
if( Array.prototype.indexof ){\r
- Util.getIndex = function( _array, _element ){\r
- return _array.indexof( _element );\r
+ Util.getIndex = function( array, element ){\r
+ return array.indexof( element );\r
};\r
} else {\r
- Util.getIndex = function( _array, _element ){\r
- var i = _array.length;\r
+ Util.getIndex = function( array, element ){\r
+ var i = array.length;\r
for( ; i; ){\r
- if( _array[ --i ] === _element ) return i;\r
+ if( array[ --i ] === element ) return i;\r
};\r
return -1;\r
};\r
};\r
- return Util.getIndex( _array, _element );\r
+ return Util.getIndex( array, element );\r
},\r
copyArray: function( _array ){\r
var l = _array.length,\r
\r
return _special;\r
})();\r
- \r
- function cssToObject( css ){\r
- var ret = {}, i, nv, n, v,\r
- parse = Util.parse,\r
- isNumber = Type.isNumber,\r
- camelize = Util.camelize;\r
- if( Type.isString( css ) === true ){\r
- css = css.split( ';' );\r
- for( i = css.length; i; ){\r
- nv = css[ --i ].split( ':' ); // filter の場合, progid: がくる\r
- n = nv.shift();\r
- if( isNumber( parse( n ) ) === true ) continue;\r
- v = nv.join( '' );\r
- while( v.charAt( 0 ) === ' ' ) v = v.substr( 1 );\r
- ret[ camelize( n ) ] = parse( v );\r
- };\r
- } else {\r
- for( n in css ){\r
- if( Type.isNumber( parse( n ) ) === false ) ret[ n ] = parse( css[ n ] );\r
- };\r
- };\r
-\r
- if( SPECIAL.setFilters ){\r
- SPECIAL.setFilters( ret );\r
- } else {\r
- ret.opacity = SPECIAL.opacity !== null ? ret[ SPECIAL.opacity ] : 1;\r
- };\r
- \r
- SPECIAL.setBackgroundPositionXY && SPECIAL.setBackgroundPositionXY( ret );\r
- SPECIAL.setClipTopRightBottomLeft && SPECIAL.setClipTopRightBottomLeft( ret );\r
- \r
- return ret;\r
- };\r
\r
var COLOR = ( function(){\r
var ret = {}, v, name,\r
list = [\r
- 0, 'BLACK',\r
- parseInt( 'FF0000', 16 ), 'RED',\r
- parseInt( '00FF00', 16 ), 'LIME',\r
- parseInt( '0000FF', 16 ), 'BLUE',\r
- parseInt( 'FFFF00', 16 ), 'YELLOW',\r
- parseInt( '00FFFF', 16 ), 'AQUA or CYAN',\r
- parseInt( 'FF00FF', 16 ), 'FUCHSIA or MAGENTA',\r
- parseInt( 'FFFFFF', 16 ), 'WHITE',\r
- parseInt( '008000', 16 ), 'GREEN',\r
- parseInt( '800080', 16 ), 'PURPLE',\r
- parseInt( '800000', 16 ), 'MAROON',\r
- parseInt( '000080', 16 ), 'NAVY',\r
- parseInt( '808000', 16 ), 'OLIVE',\r
- parseInt( '008080', 16 ), 'TEAL',\r
- parseInt( '808080', 16 ), 'GRAY',\r
- parseInt( 'C0C0C0', 16 ), 'SILVER',\r
- parseInt( '696969', 16 ), 'DIMGRAY',\r
- parseInt( '708090', 16 ), 'SLATEGRAY',\r
- parseInt( 'A9A9A9', 16 ), 'DARKGRAY',\r
- parseInt( 'DCDCDC', 16 ), 'GAINSBORO',\r
- parseInt( '191970', 16 ), 'MIDNIGHTBLUE',\r
- parseInt( '6A5ACD', 16 ), 'SLATEBLUE',\r
- parseInt( '0000CD', 16 ), 'MEDIUMBLUE',\r
- parseInt( '4169E1', 16 ), 'ROYALBLUE',\r
- parseInt( '1E90FF', 16 ), 'DODGERBLUE',\r
- parseInt( '87CEEB', 16 ), 'SKYBLUE',\r
- parseInt( '4682B4', 16 ), 'STEELBLUE',\r
- parseInt( 'ADD8E6', 16 ), 'LIGHTBLUE',\r
- parseInt( 'AFEEEE', 16 ), 'PALETURQUOISE',\r
- parseInt( '40E0D0', 16 ), 'TURQUOISE',\r
- parseInt( 'E0FFFF', 16 ), 'LIGHTCYAN',\r
- parseInt( '7FFFD4', 16 ), 'AQUAMARINE',\r
- parseInt( '006400', 16 ), 'DARKGREEN',\r
- parseInt( '2E8B57', 16 ), 'SEAGREEN',\r
- parseInt( '90EE90', 16 ), 'LIGHTGREEN',\r
- parseInt( '7FFF00', 16 ), 'CHARTREUSE',\r
- parseInt( 'ADFF2F', 16 ), 'GREENYELLOW',\r
- parseInt( '32CD32', 16 ), 'LIMEGREEN',\r
- parseInt( '9ACD32', 16 ), 'YELLOWGREEN',\r
- parseInt( '6B8E23', 16 ), 'OLIVEDRAB',\r
- parseInt( 'BCB76B', 16 ), 'DARKKHAKI',\r
- parseInt( 'EEE8AA', 16 ), 'PALEGOLDENROD',\r
- parseInt( 'FFFFE0', 16 ), 'LIGHTYELLOW',\r
- parseInt( 'FFD700', 16 ), 'GOLD',\r
- parseInt( 'DAA520', 16 ), 'GOLDENROD',\r
- parseInt( 'B8860B', 16 ), 'DARKGOLDENROD',\r
- parseInt( 'BC8F8F', 16 ), 'ROSYBROWN',\r
- parseInt( 'CD5C5C', 16 ), 'INDIANRED',\r
- parseInt( '8B4513', 16 ), 'SADDLEBROWN',\r
- parseInt( 'A0522D', 16 ), 'SIENNA',\r
- parseInt( 'CD853F', 16 ), 'PERU',\r
- parseInt( 'DEB887', 16 ), 'BURLYWOOD',\r
- parseInt( 'F5F5DC', 16 ), 'BEIGE',\r
- parseInt( 'F5DEB3', 16 ), 'WHEAT',\r
- parseInt( 'F4A460', 16 ), 'SANDYBROWN',\r
- parseInt( 'D2B48C', 16 ), 'TAN',\r
- parseInt( 'D2691E', 16 ), 'CHOCOLATE',\r
- parseInt( 'B22222', 16 ), 'FIREBRICK',\r
- parseInt( 'A52A2A', 16 ), 'BROWN',\r
- parseInt( 'FA8072', 16 ), 'SALMON',\r
- parseInt( 'FFA500', 16 ), 'ORANGE',\r
- parseInt( 'FF7F50', 16 ), 'CORAL',\r
- parseInt( 'FF6347', 16 ), 'TOMATO',\r
- parseInt( 'FF69B4', 16 ), 'HOTPINK',\r
- parseInt( 'FFC0CB', 16 ), 'PINK',\r
- parseInt( 'FF1493', 16 ), 'DEEPPINK',\r
- parseInt( 'DB7093', 16 ), 'PALEVIOLETRED',\r
- parseInt( 'EE82EE', 16 ), 'VIOLET',\r
- parseInt( 'DDA0DD', 16 ), 'PLUM',\r
- parseInt( 'DA70D6', 16 ), 'ORCHILD',\r
- parseInt( '9400D3', 16 ), 'DARKVIOLET',\r
- parseInt( '8A2BE2', 16 ), 'BLUEVIOLET',\r
- parseInt( '9370DB', 16 ), 'MEDIUMPURPLE',\r
- parseInt( 'D8BFD8', 16 ), 'THISTLE',\r
- parseInt( 'E6E6FA', 16 ), 'LAVENDER',\r
- parseInt( 'FFE4E1', 16 ), 'MISTYROSE',\r
- parseInt( 'FFFFF0', 16 ), 'IVORY',\r
- parseInt( 'FFFACD', 16 ), 'LEMONCHIFFON'\r
+ '0', 'BLACK',\r
+ 'FF0000', 'RED',\r
+ '00FF00', 'LIME',\r
+ '0000FF', 'BLUE',\r
+ 'FFFF00', 'YELLOW',\r
+ '00FFFF', 'AQUA',\r
+ '00FFFF', 'CYAN',\r
+ 'FF00FF', 'MAGENTA',\r
+ 'FF00FF', 'FUCHSIA',\r
+ 'FFFFFF', 'WHITE',\r
+ '008000', 'GREEN',\r
+ '800080', 'PURPLE',\r
+ '800000', 'MAROON',\r
+ '000080', 'NAVY',\r
+ '808000', 'OLIVE',\r
+ '008080', 'TEAL',\r
+ '808080', 'GRAY',\r
+ 'C0C0C0', 'SILVER',\r
+ '696969', 'DIMGRAY',\r
+ '708090', 'SLATEGRAY',\r
+ 'A9A9A9', 'DARKGRAY',\r
+ 'DCDCDC', 'GAINSBORO',\r
+ '191970', 'MIDNIGHTBLUE',\r
+ '6A5ACD', 'SLATEBLUE',\r
+ '0000CD', 'MEDIUMBLUE',\r
+ '4169E1', 'ROYALBLUE',\r
+ '1E90FF', 'DODGERBLUE',\r
+ '87CEEB', 'SKYBLUE',\r
+ '4682B4', 'STEELBLUE',\r
+ 'ADD8E6', 'LIGHTBLUE',\r
+ 'AFEEEE', 'PALETURQUOISE',\r
+ '40E0D0', 'TURQUOISE',\r
+ 'E0FFFF', 'LIGHTCYAN',\r
+ '7FFFD4', 'AQUAMARINE',\r
+ '006400', 'DARKGREEN',\r
+ '2E8B57', 'SEAGREEN',\r
+ '90EE90', 'LIGHTGREEN',\r
+ '7FFF00', 'CHARTREUSE',\r
+ 'ADFF2F', 'GREENYELLOW',\r
+ '32CD32', 'LIMEGREEN',\r
+ '9ACD32', 'YELLOWGREEN',\r
+ '6B8E23', 'OLIVEDRAB',\r
+ 'BCB76B', 'DARKKHAKI',\r
+ 'EEE8AA', 'PALEGOLDENROD',\r
+ 'FFFFE0', 'LIGHTYELLOW',\r
+ 'FFD700', 'GOLD',\r
+ 'DAA520', 'GOLDENROD',\r
+ 'B8860B', 'DARKGOLDENROD',\r
+ 'BC8F8F', 'ROSYBROWN',\r
+ 'CD5C5C', 'INDIANRED',\r
+ '8B4513', 'SADDLEBROWN',\r
+ 'A0522D', 'SIENNA',\r
+ 'CD853F', 'PERU',\r
+ 'DEB887', 'BURLYWOOD',\r
+ 'F5F5DC', 'BEIGE',\r
+ 'F5DEB3', 'WHEAT',\r
+ 'F4A460', 'SANDYBROWN',\r
+ 'D2B48C', 'TAN',\r
+ 'D2691E', 'CHOCOLATE',\r
+ 'B22222', 'FIREBRICK',\r
+ 'A52A2A', 'BROWN',\r
+ 'FA8072', 'SALMON',\r
+ 'FFA500', 'ORANGE',\r
+ 'FF7F50', 'CORAL',\r
+ 'FF6347', 'TOMATO',\r
+ 'FF69B4', 'HOTPINK',\r
+ 'FFC0CB', 'PINK',\r
+ 'FF1493', 'DEEPPINK',\r
+ 'DB7093', 'PALEVIOLETRED',\r
+ 'EE82EE', 'VIOLET',\r
+ 'DDA0DD', 'PLUM',\r
+ 'DA70D6', 'ORCHILD',\r
+ '9400D3', 'DARKVIOLET',\r
+ '8A2BE2', 'BLUEVIOLET',\r
+ '9370DB', 'MEDIUMPURPLE',\r
+ 'D8BFD8', 'THISTLE',\r
+ 'E6E6FA', 'LAVENDER',\r
+ 'FFE4E1', 'MISTYROSE',\r
+ 'FFFFF0', 'IVORY',\r
+ 'FFFACD', 'LEMONCHIFFON'\r
];\r
- for( i=list.length; i; ){\r
+ for( i = list.length; i; ){\r
v = list[ --i ];\r
name = list[ --i ];\r
- ret[ name ] = v;\r
+ ret[ name ] = parseInt( v, 16 );\r
};\r
return ret;\r
})();\r
// top, bottom, left, right, topbottom, leftright, all\r
};\r
FrexiblePropertyClass.prototype = PropertyGroupClass.prototype = {\r
- name: '',\r
- equal: function( prop ){\r
+ name : '',\r
+ equal : function( prop ){\r
var ps = this.props, i = ps.length;\r
for( ; i; ){\r
--i;\r
};\r
return true;\r
},\r
- convert: function( prop ){\r
+ convert : function( prop ){\r
var ps = this.props, i = ps.length;\r
for( ; i; ){\r
--i;\r
ps[ i ].convert( prop[ i ] );\r
};\r
},\r
- setValue: function( ary ){\r
+ setValue : function( ary ){\r
var ps = this.props, i = 0, l = ps.length;\r
for( ; i<l; ++i ){\r
ps[ i ].setValue( ary[ i ] );\r
};\r
},\r
- getValue: function(){\r
+ getValue : function(){\r
var ret = [], ps = this.props, i = 0, l = ps.length;\r
for( ; i<l; ++i ){\r
ret.push( ps[ i ].getValue() );\r
};\r
return ret;\r
},\r
- getOffset: function( prop ){\r
+ getOffset : function( prop ){\r
var ret = [],\r
ps = this.props,\r
_ps = prop.props,\r
};\r
return ret;\r
},\r
- getUnit: function(){\r
+ getUnit : function(){\r
var ret = [], ps = this.props, i = 0, l = ps.length;\r
for( ; i<l; ++i ){\r
ret.push( ps[ i ].getUnit() );\r
};\r
return ret;\r
},\r
- getValueText: function(){\r
+ getValueText : function(){\r
var ret = [], ps = this.props, i = 0, l = ps.length;\r
for( ; i<l; ++i ){\r
ret.push( ps[ i ].getValueText() );\r
};\r
return ret.join( ' ' );\r
},\r
- clear: function(){\r
+ clear : function(){\r
var ps = this.props, i = ps.length;\r
for( ; i; ){\r
ps[ --i ].clear();\r
delete this.name;\r
delete this.props;\r
},\r
- isValid: function( t ){\r
+ isValid : function( t ){\r
t = t || this;\r
var ps = t.props, i = ps.length;\r
for( ; i; ){\r
this.pct = pct;\r
};\r
ColorPropertyClass.prototype = {\r
- name: '',\r
- equal: function( prop ){\r
+ name : '',\r
+ equal : function( prop ){\r
if( this.pct === prop.pct ){\r
return this.r === prop.r && this.g === prop.g && this.b === prop.b;\r
};\r
};\r
return true;\r
},\r
- convert: function( prop ){\r
- var u = prop.pct;\r
+ convert : function( prop ){\r
+ var u = prop.pct, x;\r
if( this.pct === u ) return;\r
- var x = u === true ? 100 / 255 : 2.55;\r
+ x = u === true ? 100 / 255 : 2.55;\r
this.r *= x;\r
this.g *= x;\r
this.b *= x;\r
this.pct = u;\r
},\r
- setValue: function( rgb ){\r
+ setValue : function( rgb ){\r
this.r = rgb[ 0 ];\r
this.g = rgb[ 1 ];\r
this.b = rgb[ 2 ];\r
},\r
- getValue: function(){\r
+ getValue : function(){\r
return [ this.r, this.g, this.b ];\r
},\r
- getOffset: function( prop ){\r
+ getOffset : function( prop ){\r
return [ prop.r - this.r, prop.g - this.g, prop.b - this.b ];\r
},\r
- getUnit: function(){\r
+ getUnit : function(){\r
return this.pct === true ? '%' : '';\r
},\r
- getValueText: function(){\r
+ getValueText : function(){\r
if( this.pct === true ){\r
return [ 'rgb(', this.r, '%,', this.g, '%,', this.b, '%)' ].join( '' );\r
};\r
var rgb = '00000' + ( ( round( this.r ) << 16 ) + ( round( this.g ) << 8 ) + round( this.b ) ).toString( 16 );\r
return '#' + rgb.substr( rgb.length - 6 );\r
},\r
- clear: function(){\r
+ clear : function(){\r
var t = this, p;\r
for( p in t ){\r
if( t.hasOwnProperty && !t.hasOwnProperty( p ) ) continue;\r
delete t[ p ];\r
};\r
},\r
- _toPct: function(){\r
+ _toPct : function(){\r
if( this.pct === true ) return [ this.r, this.g, this.b ];\r
return [ this.r / 2.55, this.g / 2.55, this.b / 2.55 ];\r
},\r
- isValid: function( t ){\r
+ isValid : function( t ){\r
var isFinite = window.isFinite;\r
if( !isFinite( this.r ) || !isFinite( this.g ) || !isFinite( this.b ) ) return false;\r
if( 0 > this.r || 0 > this.g || 0 > this.b ) return false;\r
obj[ _p ] = obj[ _p ] || obj[ p ];\r
delete obj[ p ];\r
};\r
+ return obj;\r
+ };\r
+ function cssToObject( css ){\r
+ var ret = {}, i, nv, n, v,\r
+ parse = Util.parse,\r
+ isNumber = Type.isNumber,\r
+ camelize = Util.camelize;\r
+ if( Type.isString( css ) === true ){\r
+ css = css.split( ';' );\r
+ for( i = css.length; i; ){\r
+ nv = css[ --i ].split( ':' ); // filter の場合, progid: がくる\r
+ n = nv.shift();\r
+ if( isNumber( parse( n ) ) === true ) continue;\r
+ v = nv.join( '' );\r
+ while( v.charAt( 0 ) === ' ' ) v = v.substr( 1 );\r
+ ret[ camelize( n ) ] = parse( v );\r
+ };\r
+ } else {\r
+ for( n in css ){\r
+ if( Type.isNumber( parse( n ) ) === false ) ret[ n ] = parse( css[ n ] );\r
+ };\r
+ };\r
+\r
+ if( SPECIAL.setFilters ){\r
+ SPECIAL.setFilters( ret );\r
+ } else {\r
+ ret.opacity = SPECIAL.opacity !== null ? ret[ SPECIAL.opacity ] : 1;\r
+ };\r
+ \r
+ SPECIAL.setBackgroundPositionXY && SPECIAL.setBackgroundPositionXY( ret );\r
+ SPECIAL.setClipTopRightBottomLeft && SPECIAL.setClipTopRightBottomLeft( ret );\r
+ \r
+ return ret;\r
};\r
- \r
return {\r
getWrappedStyle: function( elm, opt_css ){\r
- opt_css && camelizeHash( opt_css );\r
- return new WrappedStyleClass( elm, opt_css || CSS.getComputedStyle( elm ) );\r
+ return new WrappedStyleClass( elm, opt_css ? camelizeHash( opt_css ) : CSS.getComputedStyle( elm ) );\r
},\r
getInlineStyle: function( _elm ){\r
return cssToObject( _elm.style.cssText );\r
/*
* pettanR peta.apps.js
- * version 0.5.39
+ * version 0.5.44
*
* author:
* itozyun
MyArtistID = 'current_artist' in window ? current_artist.id : ( pettanr.CONST.SERVER_SUPPORT === false ? 1 : -1 ),
Driver = null,
FileAPI = gOS.registerDriver( function(){
- var self = Driver = this;
+ var self = Driver = this,
+ unregisteredFileDataJsonList = [];
- function onLoadJson( _file, _json ){
- var _access = FileAPI.getFileDataAccess( _file ),
- _data = _access !== null ? _access.DATA : null,
- i, l;
- if( _data === null ){
- onErrorJson( _file );
+ function onLoadJson( file, json ){
+ var access = FileAPI.getFileDataAccess( file ),
+ data = access !== null ? access.DATA : null,
+ i, l, args;
+ if( data === null ){
+ onErrorJson( file );
return;
};
- _data.state = Const.FILE.STATE.OK;
-
- if( Type.isArray( _json ) === true ){
- for( i = 0, l = _json.length; i < l; ++i ){
- buildFileData( _json[ i ], _data );
+ data.state = Const.FILE.STATE.OK;
+ if( Type.isArray( json ) === true ){
+ for( i = 0, l = json.length; i < l; ++i ){
+ registerFileData( json[ i ], data );
};
} else
- if( Type.isNumber( _json.id ) === true ){
- buildFileData( _json, _data );
+ if( Type.isNumber( json.id ) === true ){
+ registerFileData( json, data );
+ };
+ while( 0 < unregisteredFileDataJsonList.length ){
+ args = unregisteredFileDataJsonList.shift();
+ registerFileData( args[ 0 ], args[ 1 ] );
+ //alert( unregisteredFileDataJsonList.length )
};
- _file.dispatchEvent( FileAPI.createFileEvent( Const.FILE.EVENT.GET_SEQENTIAL_FILES, _file, 'children', null ) );
+ file.dispatchEvent( FileAPI.createFileEvent( Const.FILE.EVENT.GET_SEQENTIAL_FILES, file, 'children', null ) );
};
- function onErrorJson( _file ){
- var _data = FileAPI.getFileData( _file);
- if( _data !== null){
- _data.state = Const.FILE.STATE.ERROR;
+ function onErrorJson( file ){
+ var data = FileAPI.getFileData( file );
+ if( data !== null){
+ data.state = Const.FILE.STATE.ERROR;
};
- _file.dispatchEvent( FileAPI.createFileEvent( Const.FILE.EVENT.GET_SEQENTIAL_FILES, _file, 'children', null ) );
+ file.dispatchEvent( FileAPI.createFileEvent( Const.FILE.EVENT.GET_SEQENTIAL_FILES, file, 'children', null ) );
};
- function buildFileData( _data, _parent ){
- var _array, i, l;
- // Panel
- if( _parent === FILE_DATA_PANELS_ROOT || _parent === FILE_DATA_MY_PANELS_ROOT ){
- _data.type = FILE_TYPE.PANEL;
- _array = PANEL_ARRAY;
- } else
- // Comic
- if( _parent === FILE_DATA_COMICS_ROOT || _parent === FILE_DATA_MY_COMICS_ROOT ){
- _data.type = FILE_TYPE.COMIC;
- _array = COMIC_ARRAY;
- } else
- if( _parent.type === FILE_TYPE.COMIC ){
- _array = PANEL_ARRAY;
- } else
- // Lisence
- if( _parent === FILE_DATA_LISENCE_ROOT ){
- _data.type = FILE_TYPE.LICENSE;
- _array = ORIGINAL_LICENSE_ARRAY;
- } else
- // Author
- if( _parent === FILE_DATA_AUTHOR_ROOT ){
- _data.type = FILE_TYPE.AUTHOR;
- _array = AUTHOR_ARRAY;
- } else
- // Artist
- if( _parent === FILE_DATA_ARTIST_ROOT ){
- _data.type = FILE_TYPE.ARTIST;
- _array = ARTIST_ARRAY;
- } else
- // Picture
- if( _parent === FILE_DATA_PICTURE_ROOT || _parent === FILE_DATA_MY_PICTURES_ROOT ){
- _data.type = FILE_TYPE.PICTURE;
- _array = RESOURCE_PICTURE_ARRAY;
- // original_license を含まなければ、license object を削除して ビットデータ で保持
- // original_license なら ファイルを作る buildFileData( _license, FILE_DATA_LISENCE_ROOT)
- var _license = _data.license,
- _rule,
- _Math_pow = Math.pow,
- _bits = 0;
- if( typeof _license === 'object' ){
- for( i=0, l=BASIC_LICENSES.length; i<l; ++i ){
- _rule = _license[ BASIC_LICENSES[ i]];
- if( typeof _rule === 'number' && _rule === 1 ){
- _bits += _Math_pow( 2, i );
- };
+ function registerFileData( json, parent ){
+ var data;
+ switch( parent ){
+ // Comic
+ case FILE_DATA_COMICS_ROOT :
+ case FILE_DATA_MY_COMICS_ROOT :
+ case COMIC_ARRAY :
+ json.type = FILE_TYPE.COMIC;
+ data = createFileData( json, COMIC_ARRAY, 'title' );
+ if( data.json !== null ) data.json = true;
+ if( data.author ){
+ addChildData( data.author, data );
+ data.author.id === MyAuthorID && addChildData( FILE_DATA_MY_COMICS_ROOT, data );
};
- _data.license = _bits;
- };
- } else {
- alert( 'error' );
- };
+ parent === FILE_DATA_COMICS_ROOT && addChildData( FILE_DATA_LATEST_COMICS, data );
+ break;
+
+ case STORY_ARRAY :
+ json.type = FILE_TYPE.STORY;
+ data = createFileData( json, STORY_ARRAY, 'x,y,z,t' );
+ addChildData( FILE_DATA_STORY_ROOT, data );
+ break;
+
+ // Lisence
+ case FILE_DATA_LISENCE :
+ case LICENSE_ARRAY :
+ json.type = FILE_TYPE.LICENSE;
+ data = createFileData( json, LICENSE_ARRAY, 'name,caption,url,system_picture_id,settings,credit_pictures' );
+ addChildData( FILE_DATA_LISENCE, data );
+ break;
+ // License Group
+ case FILE_DATA_LISENCE_GROUP :
+ case LICENSE_GROUP_ARRAY :
+ json.type = FILE_TYPE.LICENSE_GROUP;
+ data = createFileData( json, LICENSE_GROUP_ARRAY, 'name,caption,url,classname' );
+ addChildData( FILE_DATA_LISENCE_GROUP, data );
+ break;
+
+ // Author
+ case FILE_DATA_AUTHOR_ROOT :
+ case AUTHOR_ARRAY :
+ json.type = FILE_TYPE.AUTHOR;
+ data = createFileData( json, AUTHOR_ARRAY, 'name,email,homepage_url' );
+ addChildData( FILE_DATA_AUTHOR_ROOT, data );
+ break;
+
+ // Artist
+ case FILE_DATA_ARTIST_ROOT :
+ case ARTIST_ARRAY :
+ json.type = FILE_TYPE.ARTIST;
+ data = createFileData( json, ARTIST_ARRAY, 'name,email,homepage_url' );
+ addChildData( FILE_DATA_ARTIST_ROOT, data );
+ break;
+
+ case PICTURE_ARRAY :
+ json.type = FILE_TYPE.PICTURE;
+ data = createFileData( json, PICTURE_ARRAY, 'ext,revision,credit,settings' );
+ break;
- _data.driver = Driver;
- // alert( ' _array ' + _data.id + Type.isNumber( _data.id ) );
- // _array に _data を格納 または 上書き
- if( Type.isNumber( _data.id ) === true && _data.id > 0 ){
- var _id = _data.id - 1,
- __data = _array[ _id ],
- _reserved = Const.FILE.DATA_PROPERTY_RESERVED.join( ', ' );
- if( __data ){
- for( var key in _data ){
- if( _reserved.indexOf( key ) === -1 ){
- __data[ key ] = _data[ key ];
- };
+ // Resource Picture
+ case FILE_DATA_RESOURCE_PICTURES_ROOT :
+ case FILE_DATA_MY_RESOURCE_PICTURES_ROOT :
+ case RESOURCE_PICTURE_ARRAY :
+ json.type = FILE_TYPE.RESOURCE_PICTURE;
+ data = createFileData( json, RESOURCE_PICTURE_ARRAY, 'ext' );
+ if( data.artist ){
+ addChildData( data.artist, data );
+ data.artist.id === MyArtistID && addChildData( FILE_DATA_MY_RESOURCE_PICTURES_ROOT, data );
};
- _data = __data; // このタイミングで参照が切れるので注意!!
- } else {
- _array[ _id ] = _data;
- };
- } else {
- // alert( 'error' + _parent.name + ' ' + _data.id );
- };
-
- // Author
- // Artist
- if( _parent === FILE_DATA_AUTHOR_ROOT || _parent === FILE_DATA_ARTIST_ROOT ){
- addChildData( _parent, _data );
- } else
- // Comic + Panels
- if( _parent === FILE_DATA_COMICS_ROOT || _parent === FILE_DATA_MY_COMICS_ROOT ){
- var _stories = _data.stories,
- _panel;
- if( Type.isArray( _stories ) === true ){
- for( i=0, l=_stories.length; i<l; ++i ){
- _panel = buildFileData( _stories[ i ].panel, FILE_DATA_PANELS_ROOT );
- /*
- * 間違い! t 順に格納
- */
- addChildData( _data, _panel );
+ break;
+
+ // Original Picture
+ case FILE_DATA_MY_ORIGINAL_PICTURES_ROOT :
+ case ORIGINAL_PICTURE_ARRAY :
+ json.type = FILE_TYPE.ORIGINAL_PICTURE;
+ data = createFileData( json, ORIGINAL_PICTURE_ARRAY, 'ext,filesize,width,height,md5' );
+ if( data.artist ){
+ // addChildData( data.artist, data );
+ data.artist.id === MyArtistID && addChildData( FILE_DATA_MY_ORIGINAL_PICTURES_ROOT, data );
};
- delete _data.stories;
- }// else {
- if( _data.json !== null ){
- _data.json = true;
+ break;
+ // Panel
+ case FILE_DATA_PANELS_ROOT :
+ case FILE_DATA_MY_PANELS_ROOT :
+ case PANEL_ARRAY :
+ json.type = FILE_TYPE.PANEL;
+ data = createFileData( json, PANEL_ARRAY, 'border,publish,width,height' );
+ addChildData( FILE_DATA_LATEST_PANELS, data );
+ data.author.id === MyAuthorID && addChildData( FILE_DATA_MY_PANELS_ROOT, data );
+ break;
+
+ // 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' ); // 画像の分
+ // 噴出しの分
+ // 景色の分
+ break;
+
+ default :
+ if( parent.type === FILE_TYPE.COMIC ){
+ //alert( 'comicstory' )
+ data = registerFileData( json, STORY_ARRAY );
+ //addChildData( parent, data );
+ break;
};
- //if( Type.isArray( _data.elements ) === false ){
- // _data.elements = [];
- //};
- //};
- var _author = _data.author || getResource( AUTHOR_ARRAY, _data.author_id );
- if( _author ){
- _data.author = _author = buildFileData( _author, FILE_DATA_AUTHOR_ROOT );
- addChildData( _author, _data );
- _author.id === MyAuthorID && addChildData( FILE_DATA_MY_COMICS_ROOT, _data );
- };
- if( _parent === FILE_DATA_COMICS_ROOT ){
- addChildData( FILE_DATA_LATEST_COMICS, _data );
+ throw new Error( 'build file error!' );
+ };
+ return data;
+ };
+ /*
+ * 1. すでに一度以上ファイルを取得している場合、そのオブジェクトを取得.または、新規に作成.
+ * 2. オブジェクトに値をコピー・上書き
+ * 3.
+ */
+ function createFileData( json, array, copyProps ){
+ copyProps = copyProps + ',id,type';
+
+ var getIndex = Util.getIndex,
+ id = json.id,
+ data = getResource( array, id ),
+ p, i, l,
+ histories, history,
+ stories, story,
+ elements;
+
+ // Copy Props
+ copyProps = copyProps.split( ',' );
+ for( p in json ){
+ if( getIndex( copyProps, p ) !== -1 ) data[ p ] = json[ p ];
+ };
+
+ // Common
+ data.driver = Driver;
+ if( Type.isString( json.created_at ) === true ) data.created_at = Math.floor( new Date( json.created_at ).getTime() / 1000 );
+ if( Type.isString( json.updated_at ) === true ) data.updated_at = Math.floor( new Date( json.updated_at ).getTime() / 1000 );
+
+ // 実素材履歴
+ histories = json.pictures;
+ if( Type.isArray( histories ) === true ){
+ for( i = 0, l = histories.length; i < l; ++i ){
+ history = getResource( PICTURE_ARRAY, histories[ i ] );
+ addChildData( data, history );
};
- } else
- // Panel
- if( _parent.type === FILE_TYPE.COMIC || _parent === FILE_DATA_PANELS_ROOT || _parent === FILE_DATA_MY_PANELS_ROOT ){
- _data.comic && buildFileData( _data.comic, FILE_DATA_COMICS_ROOT );
- _data.author && buildFileData( _data.author, FILE_DATA_AUTHOR_ROOT );
-
- _data.comic = getResource( COMIC_ARRAY, _data.comic_id );
- _data.author = getResource( AUTHOR_ARRAY, _data.author_id );
-
- // picture data をファイルに取り出し
- var _elements = _data.elements || ( _data.panel ? _data.panel.elements : null ),
- _elm;
- if( Type.isArray( _elements ) === true ){
- for( i = 0, l = _elements.length; i<l; ++i ){
- _elm = _elements[ i ];
- if( _elm.picture ){
- _elm.picture = buildFileData( _elm.picture, FILE_DATA_PICTURE_ROOT ); // 上記参照切れに備えてここで上書き
- } else {
- _elm.picture = getResource( RESOURCE_PICTURE_ARRAY, _elm.picture_id );
- };
- };
+ data.picture = history;
+ };
+
+ // ストーリー
+ stories = json.stories;
+ if( Type.isArray( stories ) === true ){
+ for( i = 0, l = stories.length; i < l; ++i ){
+ story = getResource( STORY_ARRAY, stories[ i ] );
+ /*
+ * 間違い! t 順に格納
+ */
+ addChildData( data, story );
};
- /* _data.publish === 1 && */ addChildData( FILE_DATA_LATEST_PANELS, _data );
- _data.author_id === MyAuthorID && addChildData( FILE_DATA_MY_PANELS_ROOT, _data );
- } else
- // Picture
- if( _data.type == FILE_TYPE.PICTURE ){
- var _artist = _data.artist || getResource( ARTIST_ARRAY, _data.artist_id );
- if( _artist){
- _data.artist = _artist = buildFileData( _artist, FILE_DATA_ARTIST_ROOT );
- addChildData( _artist, _data );
- if( _artist.id === MyArtistID ){
- addChildData( FILE_DATA_MY_PICTURES_ROOT, _data );
- //FILE_DATA_MY_PICTURES_ROOT.type = FILE_TYPE.ARTIST;
- //FILE_DATA_MY_PICTURES_ROOT.id = MyArtistID;
- };
+ };
+
+ // パネル要素
+ elements = json.elements;
+ if( Type.isArray( elements ) === true ){
+ for( i = 0, l = elements.length; i<l; ++i ){
+ /*
+ * 間違い! t 順に格納
+ */
+ addChildData( data, getResource( PANEL_ELEMENT_ARRAY, elements[ i ] ) );
};
};
- return _data;
+
+ // Artist
+ if( json.artist || json.artist_id ){
+ data.artist = getResource( ARTIST_ARRAY, json.artist || json.artist_id );
+ };
+
+ // Author
+ if( json.author || json.author_id ){
+ data.author = getResource( AUTHOR_ARRAY, json.author || json.author_id );
+ };
+
+ // Comic
+ if( json.comic || json.comic_id ){
+ data.comic = getResource( COMIC_ARRAY, json.comic || json.comic_id );
+ };
+
+ // Panel
+ if( json.panel || json.panel_id ){
+ data.panel = getResource( PANEL_ARRAY, json.panel || json.panel_id );
+ };
+
+ // 実素材
+ if( json.picture || json.picture_id ){
+ data.picture = getResource( PICTURE_ARRAY, json.picture || json.picture_id );
+ };
+
+ // License
+ if( json.license || json.license_id ){
+ data.license = getResource( LICENSE_ARRAY, json.license || json.license_id );
+ };
+
+ // License Group
+ if( json.license_group || json.license_group_id ){
+ data.license_group = getResource( LICENSE_GROUP_ARRAY, json.license_group || json.license_group_id );
+ };
+
+ // 原画
+ if( json.original_picture || json.original_picture_id ){
+ data.original_picture = getResource( ORIGINAL_PICTURE_ARRAY, json.original_picture || {
+ id : json.original_picture_id,
+ ext : json.ext,
+ filesize : json.filesize,
+ width : json.width,
+ height : json.height,
+ md5 : json.md5,
+ artist : json.artist,
+ artist_id : json.artist_id
+ } );
+ };
+
+ return data;
};
- function addChildData( _parent, _child ){
- if( Type.isArray( _parent.children ) === false ){
- _parent.children = [];
+ function addChildData( parent, child ){
+ if( Type.isArray( parent.children ) === false ){
+ parent.children = [ child ];
+ return;
};
- Util.getIndex( _parent.children, _child ) === -1 && _parent.children.push( _child );
+ Util.getIndex( parent.children, child ) === -1 && parent.children.push( child );
};
- function getResource( _array, _id ){
- if( Type.isArray( _array ) === false || Type.isNumber( _id ) === false || _id < 1 ) return null;
- var _data = _array[ _id - 1 ];
- if( !_data ){
- _data = _array[ _id - 1 ] = {};
+ function getResource( list, IDorOBJECT ){
+ var data, id, obj;
+ if( Type.isNumber( IDorOBJECT ) === true ){
+ id = IDorOBJECT;
+ } else
+ if( IDorOBJECT && Type.isNumber( IDorOBJECT.id ) === true ){
+ obj = IDorOBJECT;
+ id = obj.id;
+ unregisteredFileDataJsonList.push( [ obj, list ] );
+ } else {
+ alert( 'getResource error' + IDorOBJECT.toString() );
+ return undefined;
};
- return _data;
+ data = list[ id ];
+ if( !data ) data = list[ id ] = { id : id };
+ return data;
};
- this.getSeqentialFiles = function( _file ){
- var _data = FileAPI.getFileData( _file ),
- _json = _data !== null ? _data.json : null;
- if( _data.type === FILE_TYPE.COMIC && _json === true ){
+ this.getSeqentialFiles = function( file ){
+ var data = FileAPI.getFileData( file ),
+ json = data.json || null;
+ if( data.type === FILE_TYPE.COMIC && json === true ){
if( pettanr.CONST.SERVER_SUPPORT === false ){
- _json = [ 'json\/comics_', _data.id, '.json' ].join( '' );
+ json = [ 'json\/comics_', data.id, '.json' ].join( '' );
} else {
- _json = [ pettanr.CONST.PETTANR_ROOT_PATH, 'stories\/', _data.id, '\/comic.json' ].join( '' );
+ json = [ pettanr.CONST.PETTANR_ROOT_PATH, 'stories\/', data.id, '\/comic.json' ].join( '' );
};
+ data.json = null;
};
- if( typeof _json === 'string' ){
- FileAPI.getJson( _file, _json, onLoadJson, onErrorJson );
- _data.state = Const.FILE.STATE.LOADING;
- _data.json = null;
+ if( typeof json === 'string' ){
+ FileAPI.getJson( file, json, onLoadJson, onErrorJson );
+ data.state = Const.FILE.STATE.LOADING;
+ if( data.json !== null ) delete data.json;
return;
};
};
- this.getName = function( _file ){
- var _data = FileAPI.getFileData( _file ),
- _type = _data !== null ? _data.type : null;
- if( _type === FILE_TYPE.PICTURE ){
- return [ _data.id, _data.ext ].join( '.' );
- } else
- if( _type === FILE_TYPE.PANEL ){
- return [ 'id:' + _data.id + ', ' + ( _data.t || '' ) + ':', _data.comic ? _data.comic.title : 'no comic' ].join( '' );
- } else
- if( _type === FILE_TYPE.COMIC ){
- return _data.title;
- } else
- if( _type === FILE_TYPE.ARTIST ){
- return [ _data.name, '画伯' ].join( '' );
- } else
- if( _type === FILE_TYPE.AUTHOR ){
- return [ _data.name, '先生' ].join( '' );
+ this.getName = function( file ){
+ var data = FileAPI.getFileData( file ),
+ type = data !== null ? data.type : null;
+ switch( type ){
+ case FILE_TYPE.BALLOON :
+ break;
+ case FILE_TYPE.PANEL_ELEMENT :
+ return 'パネル要素';
+ case FILE_TYPE.RESOURCE_PICTURE :
+ return [ '素材 ' + data.id, '.', data.ext ].join( '' );
+ case FILE_TYPE.PICTURE :
+ return [ '実素材 ' + data.id, '.', data.ext ].join( '' );
+ case FILE_TYPE.ORIGINAL_PICTURE :
+ return [ '原画 ', data.id, '.', data.ext ].join( '' );
+ case FILE_TYPE.COMIC :
+ return data.title;
+ case FILE_TYPE.STORY :
+ return [ 'story id:', data.id, ' ', data.comic ? data.comic.title : 'no comic', ':', data.t ].join( '' );
+ case FILE_TYPE.PANEL :
+ return [ 'panel id:', data.id ].join( '' );
+ case FILE_TYPE.AUTHOR :
+ return [ data.name, '先生' ].join( '' );
+ case FILE_TYPE.ARTIST :
+ return [ data.name, '画伯' ].join( '' );
+ case FILE_TYPE.FOLDER :
};
- return _data.name;
+ return data.name;
};
- this.getThumbnail = function( _file ){
- var _data = FileAPI.getFileData( _file ),
- _type = _data !== null ? _data.type : null;
- if( _type === FILE_TYPE.PICTURE ){
- return { image: [ pettanr.CONST.THUMBNAIL_PATH, _data.id, '.', _data.ext ].join( '' )};
- };
- if( _data === FILE_DATA_COMICS_ROOT ){
- return { className: 'file-type-cabinet' };
- };
- if( _type === FILE_TYPE.COMIC ){
- return { className: 'file-type-comic' };
- };
- if( _type === FILE_TYPE.PANEL ){
- return { className: 'file-type-panel' };
- };
- if( _type === FILE_TYPE.AUTHOR ){
- return { className: 'file-type-author' };
- };
- if( _type === FILE_TYPE.ARTIST ){
- return { className: 'file-type-artist' };
- };
- if( _type === FILE_TYPE.FOLDER){
- return { className: 'file-type-folder' };
+ this.getThumbnail = function( file ){
+ var data = FileAPI.getFileData( file ),
+ type = data !== null ? data.type : null;
+ if( data === FILE_DATA_COMICS_ROOT ) return { className: 'file-type-cabinet' };
+ switch( type ){
+
+ case FILE_TYPE.PANEL_ELEMENT :
+ return { className: 'file-type-charactor' };
+ case FILE_TYPE.RESOURCE_PICTURE :
+ return { image: [ pettanr.CONST.THUMBNAIL_PATH, data.id, '.', data.ext ].join( '' )};
+ case FILE_TYPE.PICTURE :
+ //data = data.original_picture;
+ return { image: [ pettanr.CONST.THUMBNAIL_PATH, data.id, '.', data.ext ].join( '' )};
+ case FILE_TYPE.ORIGINAL_PICTURE :
+ return { className: 'file-type-charactor' };
+ // return { image: [ pettanr.CONST.THUMBNAIL_PATH, data.id, '.', data.ext ].join( '' )};
+ case FILE_TYPE.BALLOON :
+ break;
+ case FILE_TYPE.COMIC :
+ return { className: 'file-type-comic' };
+ case FILE_TYPE.STORY :
+ data = data.panel;
+ case FILE_TYPE.PANEL :
+ return { className: 'file-type-panel' };
+ case FILE_TYPE.AUTHOR :
+ return { className: 'file-type-author' };
+ case FILE_TYPE.ARTIST :
+ return { className: 'file-type-artist' };
+ case FILE_TYPE.FOLDER :
+ return { className: 'file-type-folder' };
};
return { className: 'file-type-broken' };
};
- this.getSummary = function( _file ){
- var _data = FileAPI.getFileData( _file ),
- _type = _data !== null ? _data.type : null;
- if( _type === FILE_TYPE.PICTURE ){
- return [ _data.width, 'x', _data.height, ', filesize:', _data.filesize, ', lisence:', _data.license ].join( '' );
- };
- if( _data === FILE_DATA_COMICS_ROOT ){
- return 'cabinet file';
- };
- if( _type === FILE_TYPE.COMIC ){
- return 'comic file, id:' + _data.id;
- };
- if( _type === FILE_TYPE.PANEL ){
- return [ _data.width, 'x', _data.height ].join( '' );
- };
- if( _type === FILE_TYPE.AUTHOR ){
- return 'author file, id:' + _data.id;
- };
- if( _type === FILE_TYPE.ARTIST ){
- return [ 'id:', _data.id, ' Email:', _data.email || 'empty' , ', HP:', _data.homepage_url || 'empty' ].join( '' );
- };
- if( _type === FILE_TYPE.FOLDER ){
- return 'pettanR folder';
+ this.getSummary = function( file ){
+ var data = FileAPI.getFileData( file ),
+ type = data !== null ? data.type : null;
+ if( data === FILE_DATA_COMICS_ROOT ) return 'cabinet file';
+ switch( type ){
+ case FILE_TYPE.BALLOON :
+ break;
+ case FILE_TYPE.PANEL_ELEMENT :
+ return 'caption:' + data.caption + ' url:' + data.url + ' ' + data.width + 'x' + data.height + ' x:' + data.x + ' y:' + data.y + ' z:' + data.z + ' t:' + data.t;
+ case FILE_TYPE.RESOURCE_PICTURE :
+ data = data.picture;
+ case FILE_TYPE.PICTURE :
+ return '実素材情報 revision:' + data.revision + ' ' + 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 'comic id:' + data.id;
+ case FILE_TYPE.STORY :
+ data = data.panel;
+ case FILE_TYPE.PANEL :
+ return [ 'panel id:', data.id, ', width:', data.width, ', height:', data.height, ', 枠線:', data.border, ', 公開:', data.publish ].join( '' );
+ case FILE_TYPE.AUTHOR :
+ 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.FOLDER :
+ return 'pettanR folder';
};
return 'pettanR unknown file';
};
- this.read = function( _file ){
- var _data = FileAPI.getFileData( _file ),
- _type = _data !== null ? _data.type : null,
- ret;
- if( _type === FILE_TYPE.COMIC ){
- // children を panels に deepcopy
- ret = {};
- for( var key in _data ){
- ret[ key ] = _data[ key ]
- }
- ret.stories = _data.children;
- return ret;
- }
- if( _type === FILE_TYPE.PANEL ){
- };
- if( _type === FILE_TYPE.PANEL_PICTURE ){
-
- };
- if( _type === FILE_TYPE.BALLOON ){
- };
- if( _type === FILE_TYPE.PICTURE ){
+ this.read = function( file ){
+ var data = FileAPI.getFileData( file ),
+ type = data !== null ? data.type : null,
+ ret, i, elm;
+ switch( type ){
+ case FILE_TYPE.COMIC :
+ ret = Util.copy( data );
+ ret.panels = ret.children;
+ if( Type.isArray( ret.panels ) === true ){
+ for( i = ret.panels.length; i; ){
+ elm = ret.panels[ --i ];
+ elm.elements = elm.children;
+ };
+ };
+ return ret;
+ case FILE_TYPE.STORY :
+ ret = Util.copy( data );
+ ret.panel.elements = ret.panel.children;
+ return ret;
+ case FILE_TYPE.PANEL :
+ ret = Util.copy( data );
+ ret.elements = ret.children;
+ return ret;
+ case FILE_TYPE.PANEL_ELEMENT :
+ case FILE_TYPE.BALLOON :
+ case FILE_TYPE.ORIGINAL_PICTURE :
};
};
- this.write = function( _file, _newData, _onUpdate ){
- var _data = FileAPI.getFileData( _file ),
- _type = _data !== null ? _data.type : null;
- if( _type === FILE_TYPE.COMIC ){
- };
- if( _type === FILE_TYPE.PANEL ){
- };
- if( _type === FILE_TYPE.PANEL_PICTURE ){
-
- };
- if( _type === FILE_TYPE.BALLOON ){
- };
- if( _type === FILE_TYPE.PICTURE ){
+ this.write = function( file, newData, onUpdate ){
+ var data = FileAPI.getFileData( file ),
+ type = data !== null ? data.type : null;
+ switch( type ){
+ case FILE_TYPE.COMIC :
+ case FILE_TYPE.PANEL :
+ case FILE_TYPE.PANEL_ELEMENT :
+ case FILE_TYPE.BALLOON :
+ case FILE_TYPE.ORIGINAL_PICTURE :
};
};
- this.viewerApplicationList = function( _file ){
- var _data = FileAPI.getFileData( _file ),
- _type = _data !== null ? _data.type : null;
- if( _type === FILE_TYPE.PANEL ){
- return [ Reader ];
- };
- if( _type === FILE_TYPE.COMIC ){
- return [ Reader ];
- };
- if( _data === FILE_DATA_MY_PICTURES_ROOT ){
- return [ PremiumSatge ];
- };
- if( _type === FILE_TYPE.ARTIST ){
- return [ PremiumSatge ];
+ this.viewerApplicationList = function( file ){
+ var data = FileAPI.getFileData( file ),
+ type = data !== null ? data.type : null;
+ switch( type ){
+ case FILE_TYPE.COMIC :
+ case FILE_TYPE.PANEL :
+ case FILE_TYPE.STORY :
+ return [ Reader ];
+ case FILE_TYPE.PANEL_ELEMENT :
+ case FILE_TYPE.BALLOON :
+ case FILE_TYPE.ORIGINAL_PICTURE :
+ break;
+ case FILE_TYPE.ARTIST :
+ return [ PremiumSatge ];
+ default :
+ if( data === FILE_DATA_MY_ORIGINAL_PICTURES_ROOT ){
+ return [ PremiumSatge ];
+ };
};
return [];
};
- this.editorApplicationList = function( _file ){
- var _data = FileAPI.getFileData( _file ),
- _type = _data !== null ? _data.type : null;
- if( _type === FILE_TYPE.PANEL ){
- return [ Editor ];
- }
- if( _type === FILE_TYPE.COMIC ){
- return [ Editor, ComicConsole ];
- }
+ this.editorApplicationList = function( file ){
+ var data = FileAPI.getFileData( file ),
+ type = data !== null ? data.type : null;
+ switch( type ){
+ case FILE_TYPE.COMIC :
+ return [ Editor, ComicConsole ];
+ case FILE_TYPE.PANEL :
+ return [ Editor ];
+ case FILE_TYPE.PANEL_ELEMENT :
+ case FILE_TYPE.BALLOON :
+ case FILE_TYPE.ORIGINAL_PICTURE :
+ case FILE_TYPE.ARTIST :
+ default :
+ };
return [];
}
}),
FILE_TYPE = Util.extend(
Const.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()
+ COMIC : FileAPI.createFileTypeID(),
+ STORY : FileAPI.createFileTypeID(),
+ PANEL : FileAPI.createFileTypeID(),
+ PANEL_ELEMENT : FileAPI.createFileTypeID(),
+ BALLOON : 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()
}
),
+ AUTHOR_ARRAY = [],
+ ARTIST_ARRAY = [],
+ COMIC_ARRAY = [],
+ STORY_ARRAY = [],
+ PANEL_ARRAY = [],
+ LICENSE_ARRAY = [],
+ PICTURE_ARRAY = [],
+ LICENSE_GROUP_ARRAY = [],
+ PANEL_ELEMENT_ARRAY = [],
+ ORIGINAL_PICTURE_ARRAY = [],
+ RESOURCE_PICTURE_ARRAY = [],
+ BALLOON_TEMPLETE_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 = {
name: 'PettanR root',
type: FILE_TYPE.FOLDER,
driver: Driver,
json: pettanr.CONST.URL_PANELS_JSON
},
- FILE_DATA_PICTURE_ROOT = {
- name: 'Picutures',
+ FILE_DATA_RESOURCE_PICTURES_ROOT = {
+ name: '素材',
type: FILE_TYPE.FOLDER,
children: [],
driver: Driver,
json: pettanr.CONST.URL_RESOURCE_PICTURES_JSON
},
+ FILE_DATA_ORIGINAL_PICTURES_ROOT = {
+ name: '原画',
+ type: FILE_TYPE.FOLDER,
+ children: [],
+ driver: Driver
+ },
FILE_DATA_MY_COMICS_ROOT = {
name: 'My Comics',
type: FILE_TYPE.FOLDER,
type: FILE_TYPE.FOLDER,
children: []
},
+ FILE_DATA_STORY_ROOT = {
+ name: 'Stories',
+ type: FILE_TYPE.FOLDER,
+ children: [],
+ driver: Driver
+ },
FILE_DATA_LATEST_PANELS = {
name: 'Latest Panels',
type: FILE_TYPE.FOLDER,
driver: Driver,
json: pettanr.CONST.URL_MY_PANELS_JSON
},
- FILE_DATA_MY_PICTURES_ROOT = {
- name: 'My Pictures',
+ FILE_DATA_MY_RESOURCE_PICTURES_ROOT = {
+ name: 'My 素材画像',
+ type: FILE_TYPE.FOLDER,
+ children: [],
+ driver: Driver,
+ // json: pettanr.CONST.URL_RESOURCE_PICTURES_JSON,
+ id: MyArtistID
+ },
+ FILE_DATA_MY_ORIGINAL_PICTURES_ROOT = {
+ name: 'My 原画',
type: FILE_TYPE.FOLDER,
children: [],
driver: Driver,
- json: pettanr.CONST.URL_ORIGINAL_PICTURES_JSON,
+ json: pettanr.CONST.URL_MY_ORIGINAL_PICTURES_JSON,
id: MyArtistID
},
FILE_DATA_AUTHOR_ROOT = {
children: []
},
FILE_DATA_LISENCE_ROOT = {
- name: 'Original Lisences',
+ name: 'Lisence Root',
+ type: FILE_TYPE.FOLDER,
+ children: []
+ },
+ FILE_DATA_LISENCE = {
+ name: 'Lisence',
+ type: FILE_TYPE.FOLDER,
+ children: []
+ },
+ FILE_DATA_LISENCE_GROUP = {
+ name: 'Lisence Group',
type: FILE_TYPE.FOLDER,
children: []
},
name: 'Balloon templetes',
type: FILE_TYPE.FOLDER,
children: []
- },
- AUTHOR_ARRAY = [],
- ARTIST_ARRAY = [],
- PANEL_ARRAY = [],
- COMIC_ARRAY = [],
- RESOURCE_PICTURE_ARRAY = [],
- BALLOON_TEMPLETE_ARRAY = [],
- ORIGINAL_LICENSE_ARRAY = [],
- BASIC_LICENSES = 'cc_by,cc_nc,cc_nd,cc_sa,keep_aspect_ratio,no_convert,no_flip,no_resize'.split( ',');
- FILE_DATA_SERVICE_ROOT.children.push( FILE_DATA_COMICS_ROOT, FILE_DATA_PICTURE_ROOT, FILE_DATA_PANELS_ROOT, FILE_DATA_LISENCE_ROOT, FILE_DATA_BALLOON_ROOT );
- FILE_DATA_COMICS_ROOT.children.push( FILE_DATA_MY_COMICS_ROOT, FILE_DATA_LATEST_COMICS, FILE_DATA_AUTHOR_ROOT );
+ };
+ FILE_DATA_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_PANELS_ROOT.children.push( FILE_DATA_LATEST_PANELS, FILE_DATA_MY_PANELS_ROOT );
- FILE_DATA_PICTURE_ROOT.children.push( FILE_DATA_MY_PICTURES_ROOT, FILE_DATA_ARTIST_ROOT );
+ FILE_DATA_RESOURCE_PICTURES_ROOT.children.push( FILE_DATA_MY_RESOURCE_PICTURES_ROOT, FILE_DATA_ARTIST_ROOT );
+ FILE_DATA_LISENCE_ROOT.children.push( FILE_DATA_LISENCE_GROUP, FILE_DATA_LISENCE );
+ FILE_DATA_ORIGINAL_PICTURES_ROOT.children.push( FILE_DATA_MY_ORIGINAL_PICTURES_ROOT );
FileAPI.createFolderUnderRoot( FILE_DATA_SERVICE_ROOT );
- Driver.isPettanrFileInstance = function( _file ){
- if( FileAPI.isFileInstance( _file ) === true ){
- var _data = FileAPI.getFileData( _file.getUID() );// _file でなく _file.getUID()
+ Driver.isPettanrFileInstance = function( file ){
+ if( FileAPI.isFileInstance( file ) === true ){
+ var _data = FileAPI.getFileData( file.getUID() );// file でなく file.getUID()
return _data !== null && _data.driver === Driver;
};
return false;
self.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
- tree = FileAPI.createTree( FILE_DATA_PICTURE_ROOT );
+ tree = FileAPI.createTree( FILE_DATA_RESOURCE_PICTURES_ROOT );
var _root = tree.getRootFile(),
_myPic = _root.getChildFileAt( 0 ),
_pic = _root.getChildFileAt( 1 );
var ImageGroupIconClass = function( index, data ){
var elmIconWrap = elmIconOrigin.cloneNode( true ),
elmIconTitle = Util.getElementsByClassName( elmIconWrap, 'image-group-item-title' )[ 0 ],
+ originalPicture = data.original_picture,
SRC = [ BASE_PATH, data.id, '.', data.ext ].join( ''),
- LOW_SRC = data.filesize && data.filesize > LIMIT_FILESIZE ? [ THUMB_PATH, data.id, '.', data.ext ].join( '') : null,
+ LOW_SRC = originalPicture.filesize && originalPicture.filesize > LIMIT_FILESIZE ? [ THUMB_PATH, data.id, '.', originalPicture.ext ].join( '') : null,
reversibleImage = null,
timer = null,
onEnterFlag = false,
instance = this;
elmContainer.appendChild( elmIconWrap );
elmIconWrap.style.left = ( index * itemW ) + 'px';
- elmIconTitle.appendChild( document.createTextNode( data.filesize + 'bytes' ) );
+ elmIconTitle.appendChild( document.createTextNode( originalPicture.filesize + 'bytes' ) );
function onImageLoad( url, _imgW, _imgH ){
- data.width = _imgW = _imgW || data.width || 64;
- data.height = _imgH = _imgH || data.height || 64;
+ data.width = _imgW = _imgW || originalPicture.width || 64;
+ data.height = _imgH = _imgH || originalPicture.height || 64;
elmIconTitle.firstChild.data = _imgW + 'x' + _imgH;
var zoom = 128 /( _imgW > _imgH ? _imgW : _imgH ),
MATH_FLOOR = Math.floor,
self.removeTimer( onEnterShowImage );
self.addTimer( onEnterShowImage, 500 );
- }
+ };
return false;
- }
+ };
function drawIcons(){
while( ICON_ARRAY.length > 0 ){
ICON_ARRAY.shift().destroy();
- }
+ };
var _index = rootFile.search( {
- id: artistID,
- type: FILE_TYPE.ARTIST
+ id : artistID,
+ type : FILE_TYPE.ARTIST
})[ 0 ],
_artistFile = rootFile.getChildFileAt( _index ),
- _file;
+ file;
if( _artistFile !== null ){
- for(var i=0, l=_artistFile.getChildFileLength(); i<l; ++i ){
- _file = _artistFile.getChildFileAt( i );
- ICON_ARRAY.push( new ImageGroupIconClass( i, FileAPI.getFileData( _file ) ));
- _file.destroy();
- }
+ for( var i=0, l=_artistFile.getChildFileLength(); i<l; ++i ){
+ file = _artistFile.getChildFileAt( i );
+ ICON_ARRAY.push( new ImageGroupIconClass( i, FileAPI.getFileData( file ) ));
+ file.destroy();
+ };
elmName.firstChild.data = _artistFile.getName();
_artistFile.destroy();
- }
- }
+ };
+ };
function onFadeout(){
while( ICON_ARRAY.length > 0 ){
ICON_ARRAY.shift().destroy();
- }
+ };
onUpdate !== null && onUpdateData !== null && onUpdate.call( onUpdateContext, onUpdateData );
onUpdate = onUpdateData = onUpdateContext = null;
PremiumSatge.shutdown();
- }
+ };
this.MIN_WIDTH = 320;
this.MIN_HEIGHT = 320;
this.onInit = function(){
- self.rootElement.id = 'image-group-wrapper';
+ self.rootElement.id = 'image-group-wrapper';
- self.rootElement.innerHTML = [
- '<div id="image-group-icon-container"></div>',
- '<div id="image-group-name">NO DATA...</div>',
- '<div id="image-group-button" class="button">close</div>'
- ].join( '' );
-
- self.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
-
- tree = FileAPI.createTree( FILE_DATA_ARTIST_ROOT );
- rootFile = tree.getRootFile();
+ self.rootElement.innerHTML = [
+ '<div id="image-group-icon-container"></div>',
+ '<div id="image-group-name">NO DATA...</div>',
+ '<div id="image-group-button" class="button">close</div>'
+ ].join( '' );
+
+ self.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+
+ tree = FileAPI.createTree( FILE_DATA_ARTIST_ROOT );
+ rootFile = tree.getRootFile();
};
this.onOpen = function( _windowW, _windowH, _ARTISTIDorFILE, _onUpdate, opt_thisObj ){
elmContainer = document.getElementById( 'image-group-icon-container' );
tree.addTreeEventListener( Const.TREE.EVENT.UPDATE, drawIcons );
var data = FileAPI.getFileData( _ARTISTIDorFILE );
- if( data.type === FILE_TYPE.ARTIST || FILE_DATA_MY_PICTURES_ROOT === data ){
+ if( !data ){
+ artistID = MyArtistID || -1;
+ } else
+ if( data.type === FILE_TYPE.ARTIST || FILE_DATA_MY_ORIGINAL_PICTURES_ROOT === data ){
artistID = data.id || -1;
} else
if( Type.isNumber( _ARTISTIDorFILE ) === true ){
- alert( _ARTISTIDorFILE )
artistID = _ARTISTIDorFILE;
};
}
function draw(){
- var fileData, title, author;
+ var fileData, title, author, story;
if( Driver.isPettanrFileInstance( currentFile ) === true ){
- if( currentFile.getType() === FILE_TYPE.COMIC ){
- fileData = currentFile.read();
- title = fileData.title;
- author = fileData.author.name;
- comicData = fileData;
- numPanel = currentFile.getChildFileLength();
- } else
- if( currentFile.getType() === FILE_TYPE.PANEL ){
- fileData = currentFile.read();
- title = fileData.comic.title;
- author = fileData.comic.author.name;
- comicData = fileData;
- numPanel = 1;
- }
+ switch( currentFile.getType() ){
+ case FILE_TYPE.COMIC :
+ fileData = currentFile.read();
+ title = fileData.title;
+ author = fileData.author.name;
+ comicData = fileData;
+ numPanel = currentFile.getChildFileLength();
+ break;
+ case FILE_TYPE.STORY :
+ story = currentFile.read();
+ fileData = story.panel;
+ title = story.comic.title;
+ author = fileData.author.name;
+ comicData = fileData;
+ numPanel = 1;
+ break;
+ case FILE_TYPE.PANEL :
+ fileData = currentFile.read();
+ title = 'No comic';
+ author = fileData.author.name;
+ comicData = fileData;
+ numPanel = 1;
+ break;
+ };
} else {
};
if( comicData !== null ){
elmTitle.data = title;
elmAuthor.data = author;
- bindWorker.json( comicData );
+ // bindWorker.json( comicData );
+ bindWorker.file( currentFile );
self.addAsyncCall( asyncResize );
};
}
self.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
};
- this.onOpen = function( _w, _h, _file ){
+ this.onOpen = function( _w, _h, file ){
headerH = Util.getElementSize( document.getElementById( 'comic-reader-header' ) ).height;
consoleH = Util.getElementSize( document.getElementById( 'comic-reader-console' ) ).height;
elmContainer = document.getElementById( 'comic-reader-panel-container' );
windowW = _w;
windowH = _h;
- if( FileAPI.isFileInstance( _file ) === true ){
- currentFile = _file;
- _file.addEventListener( Const.FILE.EVENT.GET_SEQENTIAL_FILES, draw );
- _file.getSeqentialFiles();
+ if( FileAPI.isFileInstance( file ) === true ){
+ currentFile = file;
+ file.addEventListener( Const.FILE.EVENT.GET_SEQENTIAL_FILES, draw );
+ file.getSeqentialFiles();
draw();
};
};
var IMAGE_EXPLORER_WINDOW = ( function(){
var tree, finder;
- function onFileSelect( _file ){
+ function onFileSelect( file ){
// 他の image ファイルも許可する?
- if( Driver.isPettanrFileInstance( _file ) === true ){
- if( _file.getType() === FILE_TYPE.PICTURE ){
- PANEL_ELEMENT_CONTROL.onImageSelect( FileAPI.getFileData( _file ) );
+ if( Driver.isPettanrFileInstance( file ) === true ){
+ if( file.getType() === FILE_TYPE.RESOURCE_PICTURE ){
+ PANEL_ELEMENT_CONTROL.onImageSelect( FileAPI.getFileData( file ) );
};
};
};
{
onInit: function(){},
onFirstOpen: function( _w, _h, nodeBody ){
- tree = FileAPI.createTree( FILE_DATA_PICTURE_ROOT );
+ tree = FileAPI.createTree( FILE_DATA_RESOURCE_PICTURES_ROOT );
var _root = tree.getRootFile(),
_myPic = _root.getChildFileAt( 0 ),
_pic = _root.getChildFileAt( 1 );
this.keepSize = false;
this.flipV = data.height < 0 ? -1 : 1;
this.flipH = data.width < 0 ? -1 : 1;
- this.rPicture = data.resource_picture;
- this.artistID = this.rPicture.artist_id || this.rPicture.artist.id || -1;
+ this.rPicture = data.picture;
+ //this.oPicture = this.rPicture.original_picture;
+ //this.artistID = this.oPicture.artist.id || -1;
var self = this;
function animeComplete(){
},
_updateResourcePicture : function( _rPicture ){
this.rPicture = _rPicture;
-
- this.actualW = _rPicture.width;
- this.actualH = _rPicture.height;
+ this.oPicture = this.rPicture.original_picture;
+ this.artistID = this.oPicture.artist.id || -1;
+
+ this.actualW = this.oPicture.width;
+ this.actualH = this.oPicture.height;
var _reversibleImage = pettanr.image.createReversibleImage(
- [ pettanr.CONST.RESOURCE_PICTURE_PATH, _rPicture.id, '.', _rPicture.ext ].join(''),
+ [ pettanr.CONST.RESOURCE_PICTURE_PATH, this.rPicture.id, '.', this.rPicture.ext ].join( '' ),
this.flipH * this.w, this.flipV * this.h
);
if( this.reversibleImage !== null ){
var _panelElement;
if( isPanelPictureData !== true ){
_panelElement = new ImageElementClass( {
- resource_picture:data,
- x: Math.floor( panelW / 2 - data.width / 2 ),
- y: Math.floor( panelH / 2 - data.height / 2 ),
- z: -1,
- t: PANEL_ELEMENT_ARRAY.length + 1,
- width: 1,
- height: 1
+ picture : data,
+ x : Math.floor( panelW / 2 - data.width / 2 ),
+ y : Math.floor( panelH / 2 - data.height / 2 ),
+ z : -1,
+ t : PANEL_ELEMENT_ARRAY.length + 1,
+ width : 1,
+ height : 1
});
_panelElement.init();
PANEL_ELEMENT_CONTROL.add( _panelElement );
- _panelElement.animate( undefined, undefined, Math.abs( data.width ), Math.abs( data.height ) );
+ _panelElement.animate( undefined, undefined, Math.abs( data.picture.original_picture.width ), Math.abs( data.picture.original_picture.height ) );
} else {
_panelElement = new ImageElementClass( data );
_panelElement.init();
delete app.onInit;
};
- this.onOpen = function( _w, _h, _file ){
+ this.onOpen = function( _w, _h, file ){
// 表示奥の物から順に init() していく
PANEL_ELEMENT_CONTROL.init();
PANEL_CONTROL.init();
borderSize,
fileData, panelElements, panelElm;
- if( FileAPI.isFileInstance( _file ) === true ){
- if( Driver.isPettanrFileInstance( _file ) === true ){
- if( _file.getType() === FILE_TYPE.COMIC ){
- fileData = _file.read();
+ if( FileAPI.isFileInstance( file ) === true ){
+ if( Driver.isPettanrFileInstance( file ) === true ){
+ if( file.getType() === FILE_TYPE.COMIC ){
+ fileData = file.read();
panelW = fileData.width;
panelH = fileData.height;
comicID = fileData.id || -1;
} else
- if( _file.getType() === FILE_TYPE.PANEL ){
- fileData = _file.read();
+ if( file.getType() === FILE_TYPE.PANEL ){
+ fileData = file.read();
panelW = fileData.width;
panelH = fileData.height;
borderSize = fileData.border;
if( Type.isArray( panelElements ) === true ){
for( var i=0; i<panelElements.length; ++i ){
panelElm = panelElements[ i ];
- if( panelElm.resource_picture ){
+ if( panelElm.picture ){
PANEL_ELEMENT_CONTROL.createImageElement( panelElm );
} else
if( panelElm.balloon_template_id ){
/*\r
* pettanR peta.common.js\r
- * version 0.5.41\r
+ * version 0.5.44\r
* \r
* author:\r
* itozyun\r
})();\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_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
+ 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
this.clean();\r
\r
// json is Comic ? Panel ?\r
- var panels = json.children || json.stories,\r
+ var stories = json.children || json.stories,\r
i, l;\r
- if( Type.isArray( panels ) === true ){\r
+ if( Type.isArray( stories ) === true ){\r
// comic\r
- for( i = 0, l = panels.length; i<l; ++i ){\r
- this.buildPanelElement( panels[ i ], zoom );\r
+ for( i = 0, l = stories.length; i<l; ++i ){\r
+ this.buildPanelElement( stories[ i ], zoom );\r
};\r
} else\r
if( json.elements ){\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
width: json.width + 'px',\r
height: json.height + 'px'\r
},\r
- cssText = [],\r
- elements = json.elements || ( json.panel ? json.panel.elements : [] ),\r
+ cssText = [],\r
+ elements = json.elements,\r
rPic,\r
p, i, l;\r
this.elmTarget.appendChild( elmPanel );\r
};\r
elmPanel.style.cssText = cssText.join( ';' );\r
\r
+ if( !elements ) return;\r
for( i = 0, l = elements.length; i < l; ++i ){\r
data = elements[ i ];\r
rPic = data.picture;\r
};\r
},\r
buildImage : function( elmPanel, data, rPic ){\r
- var rImg = pettanr.image.createReversibleImage(\r
- [ PICTURE_PATH, data.picture_id, '.', rPic.ext ].join( '' ),\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
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
/*
* pettanR system.js
- * version 0.5.43
+ * version 0.5.44
*
* gadgetOS
* author:
if( i !== -1 ){
throw new Error( 'PrivateData already exist!' );
};
- dataUser = user;
- data = new privateClass( args );
- dataUser = null;
+ dataUser = user;
+ data = new privateClass( args );
+ data.User = user;
+ dataUser = null;
return data;
};
function getPrivateData( instance ){
f = false;
instance = def.pool && def.pool.length > 0 ? def.pool.shift() : instance = new klass();
f = true;
- if( def.Super && !instance.Super ){
- instance.Super = def.Super;
- };
+ if( def.Super && !instance.Super ) instance.Super = def.Super;
if( def.isPrivate === true ){
userDef = getClassDef( dataUser );
userDef.dataList.push( instance );
userDef.userList.push( dataUser );
} else {
def.live && def.live.push( instance );
+ args = c( arguments );
};
- def[ CONSTRUCTOR ] && def[ CONSTRUCTOR ].apply( instance, dataUser === null ? c( arguments ) : args );
+ def[ CONSTRUCTOR ] && def[ CONSTRUCTOR ].apply( instance, args );
return instance;
};
PRIVATE_DEF_LIST.push( classDef );
} else {
if( classDef.privateClass ){
- klass.newPrivateData = newPrivateData;
- klass.getPrivateData = getPrivateData;
+ klass.newPrivateData = newPrivateData;
+ klass.getPrivateData = getPrivateData;
};
CLASS_LIST.push( klass );
DEF_LIST.push( classDef );
},
getClass : function( instance ){
-
+ return getClass( instance );
},
getClassDef : function(){
if( typeof driver.getName === 'function'){
return driver.getName( this );
}
- return BASE_DRIVER.getName( this);
+ return BASE_DRIVER.getName( this );
},
getThumbnail: function(){
var driver = FILE_CONTROLER.getDriver( this );
// simpleDeepCopy
var driver = FILE_CONTROLER.getDriver( this ),
data;
- if( typeof driver.read === 'function'){
+ if( Type.isFunction( driver.read ) === true ){
data = driver.read( this );
- }
+ };
return BASE_DRIVER.read( data || this );
},
write: function( _newData, _onUpdateFunction ){
// debug用 全てのメニューを許可
return Const.FILE.UPDATE_POLICY.DSRWC;
};
- this.read = function( _FILEorDATA ){
+ this.read = function( FILEorDATA ){
var data,
- protects = Const.FILE.DATA_PROPERTY_RESERVED;
- if( _FILEorDATA instanceof FileClass ){
- data = FILE_CONTROLER.getFileData( _FILEorDATA )
+ protects = Const.FILE.DATA_PROPERTY_RESERVED,
+ objSrc = [],
+ objCopy = [],
+ getIndex = Util.getIndex;
+ if( FILEorDATA instanceof FileClass ){
+ data = FILE_CONTROLER.getFileData( FILEorDATA )
} else {
- data = _FILEorDATA;
- }
-
+ data = FILEorDATA;
+ };
+
function clone( src ) {
- var ret;
- if( Type.isArray(src) === true ){
+ var ret, i, key;
+ if( Type.isArray( src ) === true ){
+ i = getIndex( objSrc, src );
+ if( i !== -1 ) return objCopy[ i ];
ret = [];
+ objSrc[ objSrc.length ] = src;
+ objCopy[ objCopy.length ] = ret;
} else
- if( Type.isObject(src) === true ){
+ if( Type.isObject( src ) === true ){
+ i = getIndex( objSrc, src );
+ if( i !== -1 ) return objCopy[ i ];
ret = {};
+ objSrc[ objSrc.length ] = src;
+ objCopy[ objCopy.length ] = ret;
} else
- if( Type.isNumber(src) === true || Type.isString(src) === true || Type.isBoolean( src ) === true ){
+ if( Type.isNumber( src ) === true || Type.isString( src ) === true || Type.isBoolean( src ) === true ){
return src;
} else {
- return null;
- }
- for( var key in src ){
- if( Util.getIndex( protects, key ) === -1 ){
+ return src;
+ };
+ for( key in src ){
+ if( getIndex( protects, key ) === -1 ){
ret[ key ] = clone( src[ key ]);
- }
- }
+ };
+ };
return ret;
- };
-
+ };
return clone( data );
};
this.write = function( _file, _newData, _onUpdateFunction ){
gOS.registerApplication = Application.register;
gOS.registerDriver = File.registerDriver;
+var BoxModel
+
+var DOM = ( function( window, document ){
+ var DIV_LIST = [],
+ SPAN_LIST = [],
+ TEXT_LIST = [];
+
+ var elmTextSize;
+
+ function correctNodes( node ){
+ var child;
+ if( node && node.parentNode ){
+ while( node.lastChild ) correctNodes( node.lastChild );
+ node.parentNode.removeChild( node );
+ if( node.nodeType === 1 ){
+ switch( node.tagName ){
+ case 'DIV':
+ DIV_LIST.push( node );
+ break;
+ case 'SPAN':
+ SPAN_LIST.push( node );
+ break;
+
+ };
+ node.removeAttribute( 'className' );
+ node.removeAttribute( 'style' );
+ node.removeAttribute( 'id' );
+ } else
+ if( node.nodeType === 3 ){
+ node.data = '';
+ TEXT_LIST.push( node );
+ };
+ };
+ };
+
+ return {
+ createDiv : function(){
+ return 0 < DIV_LIST.length ? DIV_LIST.shift() : document.createElement( 'div' );
+ },
+ createSpan : function(){
+
+ },
+ createText : function(){
+
+ },
+ getTextSize : function( elm, content ){
+ var span = DOM.createSpan(),
+ text = DOM.createText(),
+ w, h;
+ elm.appendChild( span );
+ span.style.cssText = 'visibility:hidden;position:absolute;';
+ span.appendChild( text );
+ text.data = content;
+ w = span.offsetWidth;
+ h = span.offsetHeight;
+ DOM.correctNodes( span );
+ return [ w, h ];
+ },
+ correctNodes : function( node ){
+ var child;
+ if( node && node.parentNode ){
+ while( node.lastChild ) DOM.correctNodes( node.lastChild );
+ node.parentNode.removeChild( node );
+ if( node.nodeType === 1 ){
+ switch( node.tagName ){
+ case 'DIV':
+ DIV_LIST.push( node );
+ break;
+ case 'SPAN':
+ SPAN_LIST.push( node );
+ break;
+
+ };
+ node.removeAttribute( 'className' );
+ node.removeAttribute( 'style' );
+ node.removeAttribute( 'id' );
+ } else
+ if( node.nodeType === 3 ){
+ node.data = '';
+ TEXT_LIST.push( node );
+ };
+ };
+ }
+ }
+})( window, document );
+
+var XBrowserStyle = ( function(){
+ var EMPTY = '',
+ CORON = ':',
+ SEMICORON = ';',
+ SPACE = ' ',
+ UNITS = 'px,cm,mm,in,pt,pc,em,%'.split( ',' ),
+ CLIP_SEPARATOR = UA.isIE === true && UA.ieVersion < 8 ? ' ' : ',';
+
+ var SPECIAL = ( function(){
+ var special = {};
+ if( UA.isIE === true && UA.ieVersion < 9 ){
+ if( UA.ACTIVEX === true ){
+ // special.opacity = 'ActiveXOpacity';
+ special.setFilters = function( style ){
+ var filters = ( style.filter || '' ).split( ') ' ),
+ data = {},
+ i = filters.length,
+ filter, names, props, prop, j, l, key, v;
+ for( ; i; ){
+ filter = filters[ --i ].split( ' ' ).join( '' ).split( '(' );
+ if( filter.length !== 2 ) continue;
+ names = filter[ 0 ].split( '.' ); // progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=120,strength=9)
+ props = filter[ 1 ].split( ',' ); //
+ filter = {};
+ for( j = 0, l = props.length; j < l; ++j ){
+ prop = props[ j ].split( '=' );
+ key = prop[ 0 ].toLowerCase();
+ v = prop[ 1 ];
+ filter[ key ] = v; //v.charAt( 0 ) === '#' ? v : parseInt( v );
+ };
+ data[ names[ names.length - 1 ] ] = filter;
+ };
+
+ style.filter = data;
+ style.opacity = data.alpha && data.alpha.opacity ? data.alpha.opacity / 100 : 1;
+ };
+ special.hasLayout = function( elm ){
+ return elm.currentStyle.hasLayout;
+ };
+ } else {
+ special.opacity = null;
+ };
+ } else {
+ var style = document.documentElement.style;
+ special.opacity = style.opacity !== undefined ? 'opacity' :
+ style.MozOpacity !== undefined ? 'MozOpacity' :
+ style.KhtmlOpacity !== undefined ? 'KhtmlOpacity' :
+ style[ '-khtml-opacity' ] !== undefined ? 'KhtmlOpacity' : null;
+
+ // if( style.backgroundPositionX === undefined ){
+ special.setBackgroundPositionXY = function( style ){
+ var bgp = ( style.backgroundPosition || '' ).split( ' ' );
+ style.backgroundPositionX = bgp[ 0 ] || 0;
+ style.backgroundPositionY = bgp[ 1 ] || 0;
+ };
+ // };
+ if( style.clipTop === undefined && style[ 'clip-top' ] === undefined ){
+ special.setClipTopRightBottomLeft = function( style ){
+ var clip = style.clip;
+ if( !cliop || clip.indexOf( 'rect(' ) === -1 ){
+ style.clipTop = 0;
+ style.clipRight = 0;
+ style.clipBottom = 0;
+ style.clipLeft = 0;
+ return;
+ };
+ clip = clip.split( '(' )[ 1 ].split( ')' )[ 0 ].split( clip.indexOf( ',' ) !== -1 ? ',' : ' ' );
+ ret.clipTop = clip[ 0 ];
+ ret.clipRight = clip[ 1 ];
+ ret.clipBottom = clip[ 2 ];
+ ret.clipLeft = clip[ 3 ];
+ };
+ };
+ };
+ return special;
+ })();
+
+ function cssToObject( css ){
+ var ret = {}, i, nv, n, v,
+ parse = Util.parse,
+ isNumber = Type.isNumber,
+ camelize = Util.camelize;
+ if( Type.isString( css ) === true ){
+ css = css.split( SEMICORON );
+ for( i = css.length; i; ){
+ nv = css[ --i ].split( CORON ); // filter の場合, progid: がくる
+ n = nv.shift();
+ if( isNumber( parse( n ) ) === true ) continue;
+ v = nv.join( EMPTY );
+ while( v.charAt( 0 ) === ' ' ) v = v.substr( 1 );
+ ret[ camelize( n ) ] = parse( v );
+ };
+ } else {
+ for( n in css ){
+ if( Type.isNumber( parse( n ) ) === false ) ret[ n ] = parse( css[ n ] );
+ };
+ };
+
+ if( SPECIAL.setFilters ){
+ SPECIAL.setFilters( ret );
+ } else {
+ ret.opacity = SPECIAL.opacity !== null ? ret[ SPECIAL.opacity ] : 1;
+ };
+
+ SPECIAL.setBackgroundPositionXY && SPECIAL.setBackgroundPositionXY( ret );
+ SPECIAL.setClipTopRightBottomLeft && SPECIAL.setClipTopRightBottomLeft( ret );
+
+ return ret;
+ };
+
+ var COLOR = ( function(){
+ var ret = {}, v, name,
+ list = [
+ '0', 'BLACK',
+ 'FF0000', 'RED',
+ '00FF00', 'LIME',
+ '0000FF', 'BLUE',
+ 'FFFF00', 'YELLOW',
+ '00FFFF', 'AQUA',
+ '00FFFF', 'CYAN',
+ 'FF00FF', 'MAGENTA',
+ 'FF00FF', 'FUCHSIA',
+ 'FFFFFF', 'WHITE',
+ '008000', 'GREEN',
+ '800080', 'PURPLE',
+ '800000', 'MAROON',
+ '000080', 'NAVY',
+ '808000', 'OLIVE',
+ '008080', 'TEAL',
+ '808080', 'GRAY',
+ 'C0C0C0', 'SILVER',
+ '696969', 'DIMGRAY',
+ '708090', 'SLATEGRAY',
+ 'A9A9A9', 'DARKGRAY',
+ 'DCDCDC', 'GAINSBORO',
+ '191970', 'MIDNIGHTBLUE',
+ '6A5ACD', 'SLATEBLUE',
+ '0000CD', 'MEDIUMBLUE',
+ '4169E1', 'ROYALBLUE',
+ '1E90FF', 'DODGERBLUE',
+ '87CEEB', 'SKYBLUE',
+ '4682B4', 'STEELBLUE',
+ 'ADD8E6', 'LIGHTBLUE',
+ 'AFEEEE', 'PALETURQUOISE',
+ '40E0D0', 'TURQUOISE',
+ 'E0FFFF', 'LIGHTCYAN',
+ '7FFFD4', 'AQUAMARINE',
+ '006400', 'DARKGREEN',
+ '2E8B57', 'SEAGREEN',
+ '90EE90', 'LIGHTGREEN',
+ '7FFF00', 'CHARTREUSE',
+ 'ADFF2F', 'GREENYELLOW',
+ '32CD32', 'LIMEGREEN',
+ '9ACD32', 'YELLOWGREEN',
+ '6B8E23', 'OLIVEDRAB',
+ 'BCB76B', 'DARKKHAKI',
+ 'EEE8AA', 'PALEGOLDENROD',
+ 'FFFFE0', 'LIGHTYELLOW',
+ 'FFD700', 'GOLD',
+ 'DAA520', 'GOLDENROD',
+ 'B8860B', 'DARKGOLDENROD',
+ 'BC8F8F', 'ROSYBROWN',
+ 'CD5C5C', 'INDIANRED',
+ '8B4513', 'SADDLEBROWN',
+ 'A0522D', 'SIENNA',
+ 'CD853F', 'PERU',
+ 'DEB887', 'BURLYWOOD',
+ 'F5F5DC', 'BEIGE',
+ 'F5DEB3', 'WHEAT',
+ 'F4A460', 'SANDYBROWN',
+ 'D2B48C', 'TAN',
+ 'D2691E', 'CHOCOLATE',
+ 'B22222', 'FIREBRICK',
+ 'A52A2A', 'BROWN',
+ 'FA8072', 'SALMON',
+ 'FFA500', 'ORANGE',
+ 'FF7F50', 'CORAL',
+ 'FF6347', 'TOMATO',
+ 'FF69B4', 'HOTPINK',
+ 'FFC0CB', 'PINK',
+ 'FF1493', 'DEEPPINK',
+ 'DB7093', 'PALEVIOLETRED',
+ 'EE82EE', 'VIOLET',
+ 'DDA0DD', 'PLUM',
+ 'DA70D6', 'ORCHILD',
+ '9400D3', 'DARKVIOLET',
+ '8A2BE2', 'BLUEVIOLET',
+ '9370DB', 'MEDIUMPURPLE',
+ 'D8BFD8', 'THISTLE',
+ 'E6E6FA', 'LAVENDER',
+ 'FFE4E1', 'MISTYROSE',
+ 'FFFFF0', 'IVORY',
+ 'FFFACD', 'LEMONCHIFFON'
+ ];
+ for( i = list.length; i; ){
+ v = list[ --i ];
+ name = list[ --i ];
+ ret[ name ] = parseInt( v, 16 );
+ };
+ return ret;
+ })();
+
+ var PARAMS = ( function(){
+ var ret = {};
+ register( ret.percent = {},
+ 'marginBottom,marginLeft,marginRight,marginTop,paddingBottom,paddingLeft,paddingRight,paddingTop,fontSize,textIndent'
+ );
+ register( ret.offset = {},
+ 'height,width,bottom,left,right,top'
+ );
+ register( ret.size = {},
+ 'borderBottomWidth,borderLeftWidth,borderRightWidth,borderTopWidth,letterSpacing'
+ );
+ register( ret.color = {},
+ 'backgroundColor,borderBottomColor,borderLeftColor,borderRightColor,borderTopColor,color'
+ );
+ register( ret.region = {},
+ 'margin,padding,borderWidth,borderColor'
+ );
+ register( ret.special = {},
+ 'clip,backgroundPosition,opacity,lineHeight,zIndex'
+ );
+ register( ret.unit = {}, 'px,cm,mm,in,pt,pc,em,%' );
+
+ register( ret.margin = {}, 'marginBottom,marginLeft,marginRight,marginTop,paddingBottom' );
+ register( ret.padding = {}, 'paddingBottom,paddingLeft,paddingRight,paddingTop' );
+ register( ret.borderWidth = {}, 'borderBottomWidth,borderLeftWidth,borderRightWidth,borderTopWidth' );
+ register( ret.borderColor = {}, 'borderBottomColor,borderLeftColor,borderRightColor,borderTopColor' );
+
+ function register( obj, params ){
+ params = params.split( ',' );
+ for( var i=params.length; i; ) obj[ params[ --i ] ] = true;
+ };
+ return ret;
+ })();
+
+ /*
+ *
+ */
+ var Property = Class.create(
+ 'Property',
+ Class.POOL_OBJECT,
+ {
+ Constructor : function( name, value, unit, pxPerEm ){
+ this.name = name;
+ this.value = value;
+ this.unit = unit;
+ this.pxPerEm = pxPerEm; // XXpx = 1em;
+ },
+ name : '',
+ value : 0,
+ pxPerEm : 12, // 1em === ??px
+ unit : '',
+ equal : function( prop ){
+ if( this.unit === prop.unit ){
+ return this.value === prop.value;
+ };
+ return Math.abs( this.toPx() - prop.toPx() ) < 1;
+ },
+ convert: function( prop ){
+ var u = prop.unit, v;
+ if( this.unit === u ) return;
+ this.value = v = this.toPx();
+ this.unit = u;
+ if( u !== px ){
+ this.value = u === 'em' ? v / this.pxPerEm : Util.pxTo( v, u );
+ };
+ },
+ setValue: function( v ){
+ this.value = v;
+ },
+ getValue: function(){
+ return this.value;
+ },
+ getOffset: function( prop ){
+ return prop.value - this.value;
+ },
+ getUnit: function(){
+ return this.unit;
+ },
+ getValueText: function(){
+ return this.value === 0 ? '0' : this.value + this.unit;
+ },
+ toPx: function(){
+ var v = this.value, u = this.unit;
+ if( u === px ) return v;
+ if( u === 'em' ) return v * this.pxPerEm;
+ if( u === '' && this.name === 'lineHeight' ) return v * this.pxPerEm;
+ return Util.toPx( v, u );
+ },
+ isValid: function( t ){
+ t = t || this;
+ var n = t.name,
+ v = t.value,
+ u = t.unit,
+ z = u !== '' ? true : v === 0;
+ if( PARAMS.percent[ n ] === true ) return z;
+ if( PARAMS.offset[ n ] === true ) return z;
+ if( PARAMS.size[ n ] === true ) return z && u !== '%';
+ if( PARAMS.special[ n ] === true ){
+ if( n === 'lineHeight' ) return true;
+ if( n === 'opacity' ) return 0 <= v && v <= 1 && u === '';
+ if( n === 'zIndex' ) return u === '';
+ };
+ return false;
+ }
+ }
+ );
+
+ /**
+ * backgroundPosition, clip
+ */
+ var PropertyGroup = Class.create(
+ 'PropertyGroup',
+ Class.POOL_OBJECT,
+ {
+ Constructor : function( name ){
+ this.name = name;
+ this.props = [];
+ for( var i = 1, l = arguments.length; i<l; ++i ){
+ this.props.push( arguments[ i ] );
+ };
+ },
+ name : '',
+ equal : function( prop ){
+ var ps = this.props, i = ps.length;
+ for( ; i; ){
+ --i;
+ if( ps[ i ].equal( prop[ i ] ) === false ) return false;
+ };
+ return true;
+ },
+ convert : function( prop ){
+ var ps = this.props, i = ps.length;
+ for( ; i; ){
+ --i;
+ ps[ i ].convert( prop[ i ] );
+ };
+ },
+ setValue : function( ary ){
+ var ps = this.props, i = 0, l = ps.length;
+ for( ; i<l; ++i ){
+ ps[ i ].setValue( ary[ i ] );
+ };
+ },
+ getValue : function(){
+ var ret = [], ps = this.props, i = 0, l = ps.length;
+ for( ; i<l; ++i ){
+ ret.push( ps[ i ].getValue() );
+ };
+ return ret;
+ },
+ getOffset : function( prop ){
+ var ret = [],
+ ps = this.props,
+ _ps = prop.props,
+ i = 0,
+ l = ps.length;
+ for( ; i<l; ++i ){
+ ret.push( ps[ i ].getOffset( _ps[ i ] ) );
+ };
+ return ret;
+ },
+ getUnit : function(){
+ var ret = [], ps = this.props, i = 0, l = ps.length;
+ for( ; i<l; ++i ){
+ ret.push( ps[ i ].getUnit() );
+ };
+ return ret;
+ },
+ getValueText : function(){
+ var ret = [], ps = this.props, i = 0, l = ps.length;
+ for( ; i<l; ++i ){
+ ret.push( ps[ i ].getValueText() );
+ };
+ if( this.name === 'clip' ){
+ return 'rect(' + ret.join( CLIP_SEPARATOR ) + ')';
+ };
+ return ret.join( ' ' );
+ },
+ onKill : function(){
+ var ps = this.props, i = ps.length;
+ for( ; i; ){
+ ps[ --i ].kill();
+ };
+ },
+ isValid : function( t ){
+ t = t || this;
+ var ps = t.props, i = ps.length;
+ for( ; i; ){
+ if( ps[ --i ].isValid() === false ) return false;
+ };
+ return true;
+ }
+ }
+ );
+
+ /**
+ * margin, padding, borderWidth, borderColor
+ */
+ var FrexibleProperty = PropertyGroup.inherits(
+ 'FrexibleProperty',
+ Class.POOL_OBJECT, {
+ Constructor : function( name ){
+ this.name = name;
+ this.props = [];
+ for( var i = 1, l = arguments.length; i<l; ++i ){
+ this.props.push( arguments[ i ] );
+ };
+ // top, bottom, left, right, topbottom, leftright, all
+ }
+ }
+ );
+
+ var ColorProperty = Class.create(
+ 'ColorProperty',
+ Class.POOL_OBJECT, {
+ Constructor : function( name, r, g, b, pct ){
+ this.name = name;
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ this.pct = pct;
+ },
+ name : '',
+ equal : function( prop ){
+ if( this.pct === prop.pct ){
+ return this.r === prop.r && this.g === prop.g && this.b === prop.b;
+ };
+ var rgb = this._toPct(),
+ _rgb = prop._toPct(),
+ i = rgb.length;
+ for( ; i; ){
+ --i;
+ if( Math.abs( rgb[ i ] - _rgb[ i ] ) > 1 ) return false;
+ };
+ return true;
+ },
+ convert : function( prop ){
+ var u = prop.pct, x;
+ if( this.pct === u ) return;
+ x = u === true ? 100 / 255 : 2.55;
+ this.r *= x;
+ this.g *= x;
+ this.b *= x;
+ this.pct = u;
+ },
+ setValue : function( rgb ){
+ this.r = rgb[ 0 ];
+ this.g = rgb[ 1 ];
+ this.b = rgb[ 2 ];
+ },
+ getValue : function(){
+ return [ this.r, this.g, this.b ];
+ },
+ getOffset : function( prop ){
+ return [ prop.r - this.r, prop.g - this.g, prop.b - this.b ];
+ },
+ getUnit : function(){
+ return this.pct === true ? '%' : '';
+ },
+ getValueText : function(){
+ if( this.pct === true ){
+ return [ 'rgb(', this.r, '%,', this.g, '%,', this.b, '%)' ].join( '' );
+ };
+ var round = Math.round;
+ //return [ 'rgb(', round( this.r ), ',', round( this.g ), ',', round( this.b ), ')' ].join( '' );
+
+ var rgb = '00000' + ( ( round( this.r ) << 16 ) + ( round( this.g ) << 8 ) + round( this.b ) ).toString( 16 );
+ return '#' + rgb.substr( rgb.length - 6 );
+ },
+ _toPct : function(){
+ if( this.pct === true ) return [ this.r, this.g, this.b ];
+ return [ this.r / 2.55, this.g / 2.55, this.b / 2.55 ];
+ },
+ isValid : function( t ){
+ var isFinite = window.isFinite;
+ if( !isFinite( this.r ) || !isFinite( this.g ) || !isFinite( this.b ) ) return false;
+ if( 0 > this.r || 0 > this.g || 0 > this.b ) return false;
+ if( this.pct === true ) return this.r <= 100 && this.g <= 100 && this.b <= 100;
+ return this.r <= 255 && this.g <= 255 && this.b <= 255;
+ }
+ }
+ );
+
+ var isString = Type.isString,
+ isNumber = Type.isNumber;
+ var REG_UINIT = /.*\d(\w{1,2})?/,
+ $1 = '$1',
+ px = 'px',
+ REG_XXXXXX = /^#[\da-fA-F]{6}?/,
+ REG_XXX = /^#[\da-fA-F]{3}?/;
+
+ var WrappedStyle = Class.create(
+ 'WrappedStyle',
+ Class.POOL_OBJECT,
+ {
+ Constructor : function( style ){
+ this.style = style;
+ var fontsize = this.get( 'fontSize' );
+ this.pxPerEm = fontsize.toPx();
+ fonstsize.kill();
+ },
+ get: function( p ){
+ if( PARAMS.special[ p ] === true || PARAMS.region[ p ] === true ){
+ if( p === 'clip' ) return this.getClip();
+ if( p === 'margin' ) return this.getMarginPaddingBorder( p, '' );
+ if( p === 'padding' ) return this.getMarginPaddingBorder( p, '' );
+ if( p === 'borderWidth' ) return this.getMarginPaddingBorder( 'border', 'Width' );
+ if( p === 'borderColor' ) return this.getBorderColor( 'borderColor' );
+ if( p === 'backgroundPosition' ) return this.getBackgroundPosition( p );
+ // opacity, zindex, lineHeight
+ return new Property( p, this.getValue( x ), this.getUnit( x ), this.pxPerEm );
+ };
+ var x = this.style[ p ], e, v, u;
+ if( PARAMS.offset[ p ] === true ){
+ return new Property( p, this.getValue( x ), this.getUnit( x, p ), this.pxPerEm );
+ /*
+ e = this.elm;
+ if( p === 'width' ) v = e.offsetWidth;
+ if( p === 'height' ) v = e.offsetHeight;
+ if( p === 'top' ) v = e.offsetTop;
+ if( p === 'bottom' ) v = e.offsetBottom;
+ if( p === 'left' ) v = e.offsetLeft;
+ if( p === 'right' ) v = e.offsetRight;
+ u = this.getUnit( x, p );
+ // alert( p + this.pxTo( v, u ) + u )
+ return new Property( p, this.pxTo( v, u ), u, this.pxPerEm ); */
+ };
+ if( p === 'fontSize' ){ // xx-small 等
+ v = Util.absoluteFontSizeToPx( x );
+ if( v !== 0 ){
+ return new Property( p, v, px, this.pxPerEm );
+ };
+ };
+ if( PARAMS.percent[ p ] === true ){
+ // alert( p + ' , ' + x + ' , ' + this.getUnit( x, p ) )
+ return new Property( p, this.getValue( x ), this.getUnit( x, p ), this.pxPerEm );
+ };
+ if( PARAMS.size[ p ] === true ){
+ return new Property( p, this.getValue( x ), this.getUnit( x, p ), this.pxPerEm );
+ };
+ if( PARAMS.color[ p ] === true ){
+ return this.getColor( x, p );
+ };
+ },
+ pxTo: function( px, unit ){
+ if( unit === 'em' ) return px / this.pxPerEm;
+ return Util.pxTo( px, unit );
+ },
+ getValue: function( x ){
+ return isString( x ) === true ? parseInt( x ) :
+ isNumber( x ) === true ? x : 0;
+ },
+ getUnit: function( x, p ){
+ var u;
+ if( isString( x ) === true ){
+ u = x.replace( REG_UINIT, $1 );
+ if( p === 'lineHeight' ) return u;
+ if( PARAMS.unit[ u ] !== true ) return px;
+ return u;
+ };
+ return px;
+ },
+ getColor: function( x, p ){
+ var rgb = COLOR[ x.toUpperCase() ],
+ pct = false,
+ r = 0,
+ g = 0,
+ b = 0;
+ if( isNumber( rgb ) === true ){
+ r = ( rgb & 0xff0000 ) >> 16;
+ g = ( rgb & 0xff00 ) >> 8;
+ b = ( rgb & 0xff );
+ } else
+ if( x.match( REG_XXXXXX ) ){
+ r = parseInt( x.charAt( 1 ) + x.charAt( 2 ), 16 );
+ g = parseInt( x.charAt( 3 ) + x.charAt( 4 ), 16 );
+ b = parseInt( x.charAt( 5 ) + x.charAt( 6 ), 16 );
+ //alert( x + ' g: ' + g )
+ } else
+ if( x.match( REG_XXX ) ){
+ r = parseInt( x.charAt( 1 ) + x.charAt( 1 ), 16 );
+ g = parseInt( x.charAt( 2 ) + x.charAt( 2 ), 16 );
+ b = parseInt( x.charAt( 3 ) + x.charAt( 3 ), 16 );
+ } else
+ if( x.indexOf( 'rgb(' ) === 0 ){
+ rgb = x.substr( 4 ).split( ',' );
+ r = parseFloat( rgb[ 0 ] );
+ g = parseFloat( rgb[ 1 ] );
+ b = parseFloat( rgb[ 2 ] );
+ if( x.indexOf( '%' ) !== -1 ) pct = true;
+ } else {
+ r = 255;
+ g = 255;
+ b = 255;
+ };
+ return new ColorProperty( p, r, g, b, pct );
+ },
+ getClip: function( name ){
+ // rect(...) クリップします。<top>, <bottom> は上端からの、 <right>, <left> は左端からのオフセットで指定します。Internet Explorer 4~7 では、カンマの代わりにスペースで区切る必要があります。
+ // position:absolute または position:fixed を適用した要素に対してのみ有効です。
+ var top = this.get( name + 'Top' ),
+ right = this.get( name + 'Right' ),
+ bottom = this.get( name + 'Bottom' ),
+ left = this.get( name + 'Left' ),
+ ret = new PropertyGroup( name, top, right, bottom, left );
+ if( ret.isValid() === true ) return ret;
+ ret.kill();
+ all = this.style[ name ].split( '(' )[ 1 ].split( ')' )[ 0 ].split( CLIP_SEPARATOR );
+ return new PropertyGroup( name,
+ new Property( name + 'Top', all[ 0 ], px, this.pxPerEm ),
+ new Property( name + 'Right', all[ 1 ], px, this.pxPerEm ),
+ new Property( name + 'Bottom', all[ 2 ], px, this.pxPerEm ),
+ new Property( name + 'Left', all[ 3 ], px, this.pxPerEm )
+ );
+ },
+ getBackgroundPosition: function( name ){
+ var x = this.get( name + 'X' ),
+ y = this.get( name + 'Y' ),
+ ret = new PropertyGroup( name, x, y ),
+ xy;
+ if( ret.isValid() === true ) return ret;
+ ret.kill();
+ xy = this.style[ name ].split( ' ' );
+ return new PropertyGroup( name,
+ new Property( name + 'X', this.getValue( xy[ 0 ] ), this.getUnit( xy[ 0 ] ), this.pxPerEm ),
+ new Property( name + 'Y', this.getValue( xy[ 1 ] ), this.getUnit( xy[ 1 ] ), this.pxPerEm )
+ );
+ },
+ getMarginPaddingBorder: function( name, width ){
+ var props = [ name + 'Top' + width,
+ name + 'Right' + width,
+ name + 'Bottom' + width,
+ name + 'Left' + width ],
+ top = this.get( props[ 0 ] ),
+ right = this.get( props[ 1 ] ),
+ bottom = this.get( props[ 2 ] ),
+ left = this.get( props[ 3 ] ),
+ ret = new FrexibleProperty( name, top, right, bottom, left ),
+ klass, pxPerEm, getValue, getUnit,
+ all, _0, _1, _2, _3, v, u;
+ if( ret.isValid() === true ) return ret;
+ ret.kill();
+ klass = Property;
+ pxPerEm = this.pxPerEm;
+ getValue = this.getValue;
+ getUnit = this.getUnit;
+ all = this.style[ name + width ].split( ' ' );
+ _0 = all[ 0 ];
+ _1 = all[ 1 ];
+ _2 = all[ 2 ];
+ _3 = all[ 3 ];
+ v = getValue( _0 );
+ u = getUnit( _0 );
+ switch( all.length ){
+ case 1 :
+ top = new klass( props[ 0 ], v, u, pxPerEm );
+ right = new klass( props[ 1 ], v, u, pxPerEm );
+ bottom = new klass( props[ 2 ], v, u, pxPerEm );
+ left = new klass( props[ 3 ], v, u, pxPerEm );
+ break;
+ case 2 :
+ top = new klass( props[ 0 ], v, u, pxPerEm );
+ bottom = new klass( props[ 2 ], v, u, pxPerEm );
+ v = getValue( _1 );
+ u = getUnit( _1 );
+ right = new klass( props[ 1 ], v, u, pxPerEm );
+ left = new klass( props[ 3 ], v, u, pxPerEm );
+ break;
+ case 3 :
+ top = new klass( props[ 0 ], v, u, pxPerEm );
+ v = getValue( _1 );
+ u = getUnit( _1 );
+ right = new klass( props[ 1 ], v, u, pxPerEm );
+ left = new klass( props[ 3 ], v, u, pxPerEm );
+ bottom = new klass( props[ 2 ], getValue( _2 ), getUnit( _2 ), pxPerEm );
+ break;
+ case 4 :
+ top = new klass( props[ 0 ], v, u, pxPerEm );
+ right = new klass( props[ 1 ], getValue( _1 ), getUnit( _1 ), pxPerEm );
+ bottom = new klass( props[ 2 ], getValue( _2 ), getUnit( _2 ), pxPerEm );
+ left = new klass( props[ 3 ], getValue( _3 ), getUnit( _3 ), pxPerEm );
+ break;
+ };
+ return new FrexibleProperty( name, top, right, bottom, left );
+ },
+ getBorderColor: function( name ){
+ var props = 'borderTopColor,borderRightColor,borderBottomColor,borderLeftColor'.split( ',' ),
+ top = this.get( props[ 0 ] ),
+ right = this.get( props[ 1 ] ),
+ bottom = this.get( props[ 2 ] ),
+ left = this.get( props[ 3 ] ),
+ ret = new FrexibleProperty( name, top, right, bottom, left ),
+ all, _0, _1, getColor;
+ if( ret.isValid() === true ) return ret;
+ ret.kill();
+ getColor = this.getColor;
+ all = this.style[ name ].split( ' ' );
+ _0 = all[ 0 ];
+ _1 = all[ 1 ];
+ switch( all.length ){
+ case 1 :
+ top = getColor( _0, props[ 0 ] );
+ right = getColor( _0, props[ 1 ] );
+ bottom = getColor( _0, props[ 2 ] );
+ left = getColor( _0, props[ 3 ] );
+ break;
+ case 2 :
+ top = getColor( _0, props[ 0 ] );
+ right = getColor( _1, props[ 1 ] );
+ bottom = getColor( _0, props[ 2 ] );
+ left = getColor( _1, props[ 3 ] );
+ break;
+ case 3 :
+ top = getColor( _0, props[ 0 ] );
+ right = getColor( _1, props[ 1 ] );
+ bottom = getColor( all[ 2 ], props[ 2 ] );
+ left = getColor( _1, props[ 3 ] );
+ break;
+ case 4 :
+ top = getColor( _0, props[ 0 ] );
+ right = getColor( _1, props[ 1 ] );
+ bottom = getColor( all[ 2 ], props[ 2 ] );
+ left = getColor( all[ 3 ], props[ 3 ] );
+ break;
+ };
+ return new FrexibleProperty( name, top, right, bottom, left );
+ }
+ }
+ );
+ function camelizeHash( obj ){
+ var p, _p, came = Util.camelize;
+ for( p in obj ){
+ _p = came( p );
+ if( _p === p ) continue;
+ obj[ _p ] = obj[ _p ] || obj[ p ];
+ delete obj[ p ];
+ };
+ };
+ return {
+ create: function( css ){
+ return new WrappedStyle( camelizeHash( p ) );
+ }
+ };
+})();
+
+var XDocument = ( function( window, document ){
+
+ var getIndex = Util.getIndex;
+
+ var DEF_ATTRS = [];
+
+ var AbstractLayoutManager = Class.create(
+ 'AbstractLayoutManager',
+ Class.ABSTRACT, {
+ reflow : function(){}
+ }
+ );
+
+ var BasicLayoutManager = AbstractLayoutManager.inherits(
+ 'BasicLayoutManager',
+ {
+ Constructor : function(){
+
+ }
+ }
+ );
+
+ var AbstractStylePrivate = Class.create(
+ Class.ABSTRACT | Class.PRIVATE_DATA,
+ {
+ register : function( node ){
+ var list = this.nodeList;
+ if( !list ){
+ this.nodeList = [ node ];
+ return;
+ };
+ if( getIndex( list, node ) === -1 ) list[ list.length ] = node;
+ },
+ unRegister : function( node ){
+ var list = this.nodeList,
+ i = getIndex( list, node );
+ if( i !== -1 && list.splice( i, 1 ) && list.length === 0 ) delete this.nodeList;
+ },
+ clone : function(){
+ var styleClass = Class.getClass( this.User ),
+ dataClass = Class.getClass( this );
+ },
+ attr : function( prop, v ){
+ var update = prop[ 0 ],
+ propID = prop[ 1 ],
+ type = prop[ 2 ],
+ list = prop[ 3 ],
+ length = !!( type & DEF_ATTRS.LENGTH ),
+ percent = !!( type & DEF_ATTRS.PERCENT ),
+ color = !!( type & DEF_ATTRS.COLOR ),
+ uDecimal = !!( type & DEF_ATTRS.U_DECIMAL ),
+ numerical = !!( type & DEF_ATTRS.NUMERICAL ),
+ flag = !!( type & DEF_ATTRS.BOOLEAN ),
+ quartet = !!( type & DEF_ATTRS.QUARTET ),
+ url = !!( type & DEF_ATTRS.URL ),
+ fontName = !!( type & DEF_ATTRS.FONT_NAME ),
+ list = !!( type & DEF_ATTRS.LIST ),
+ combi = !!( type & DEF_ATTRS.COMBI ),
+ data = this.data,
+ _v = -1,
+ _type, i, l, nodes;
+
+ if( v !== undefined ){
+ if( Type.isNumber( v ) === true ){
+ if( numerical === false ){
+ if( uDecimal === false || v < 0 || 1 < v ) throw new Error( '' );
+ };
+ } else
+ if( Type.isBoolean( v ) === true ){
+ if( flag === false ) throw new Error( '' );
+ } else
+ if( Type.isString( v ) === true ){
+ if( url === false && fontName === false ){
+ if( v.indexOf( ' ' ) !== -1 ){
+ v = v.split( ' ' );
+ } else {
+ if( length === false && percent === false && color === false ) throw new Error( '' );
+ };
+ };
+ };
+ if( Type.isArray( v ) === true ){
+ if( v.length <= 4 && quartet === true ){
+ _type = type ^ DEF_ATTRS.QUARTET;
+ } else
+ if( v.length === 2 && combi === true ){
+ _type = type ^ DEF_ATTRS.COMBI;
+ } else {
+ throw new Error( '' );
+ };
+ switch( v.length ){
+ case 1 :
+ this.attr( [ propID , _type, list ], v[ 0 ] );
+ this.attr( [ ++propID, _type, list ], v[ 0 ] );
+ this.attr( [ ++propID, _type, list ], v[ 0 ] );
+ this.attr( [ ++propID, _type, list ], v[ 0 ] );
+ break;
+ case 2 :
+ this.attr( [ propID , _type, list ], v[ 0 ] );
+ this.attr( [ ++propID, _type, list ], v[ 1 ] );
+ this.attr( [ ++propID, _type, list ], v[ 0 ] );
+ this.attr( [ ++propID, _type, list ], v[ 1 ] );
+ break;
+ case 3 :
+ this.attr( [ propID , _type, list ], v[ 0 ] );
+ this.attr( [ ++propID, _type, list ], v[ 1 ] );
+ this.attr( [ ++propID, _type, list ], v[ 2 ] );
+ this.attr( [ ++propID, _type, list ], v[ 1 ] );
+ break;
+ case 4 :
+ this.attr( [ propID , _type, list ], v[ 0 ] );
+ this.attr( [ ++propID, _type, list ], v[ 1 ] );
+ this.attr( [ ++propID, _type, list ], v[ 2 ] );
+ this.attr( [ ++propID, _type, list ], v[ 3 ] );
+ break;
+ default :
+ };
+ return this.User;
+ };
+ if( this.invalidateLayout < update ) this.invalidate = update;
+
+ if( list ) _v = Util.getIndex( list, v );
+ data[ propID ] = _v !== -1 ? _v : v;
+ return this.User;
+ };
+ if( this.invalidate === DEF_ATTRS.REFLOW ){
+ nodes = this.nodeList;
+ if( nodes ){
+ for( i = 0, l = nodes.length; i < l; ++i ){
+ nodes[ i ].reflow();
+ };
+ };
+ };
+ v = data[ propID ];
+ if( quartet === true ) return [ v, data[ ++propID ], data[ ++propID ], data[ ++propID ] ];
+ if( combi === true ) return [ v, data[ ++propID ] ];
+ if( list && Type.isNumber( v ) === true ) return list[ v ];
+ return v;
+ }
+ }
+ );
+
+ var PaintPrivate = AbstractStylePrivate.inherits(
+ 'PaintPrivate',
+ Class.PRIVATE_DATA | Class.POOL_OBJECT,
+ {
+ Constructor : function(){
+ this.data = [];
+ this.invalidate = 0;
+ },
+ cssText : function(){
+
+ },
+ cssObject : function(){
+
+ },
+ paint : function( node ){
+
+ }
+ }
+ );
+
+ var PaintStyle = Class.create(
+ 'PaintStyle',
+ Class.POOL_OBJECT,
+ PaintPrivate,
+ {
+ Constructor : function(){
+ PaintStyle.newPrivateData( this );
+ },
+ borderWidth : function( v ){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.borderWidth, v );
+ },
+ borderColor : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.borderColor, v );
+ },
+ borderStyle : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.borderStyle, v );
+ },
+ cornerRadius : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.cornerRadius, v );
+ },
+ bgColor : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.bgColor, v );
+ },
+ bgAlpha : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.bgAlpha, v );
+ },
+ bgImgUrl : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.bgImgUrl, v );
+ },
+ bgImgRepeatX : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.bgImgRepeatX, v );
+ },
+ bgImgRepeatY : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.bgImgRepeatY, v );
+ },
+ bgImgPositionX : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.bgImgPositionX, v );
+ },
+ bgImgPositionY : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.bgImgPositionY, v );
+ },
+ shadowColor : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.shadowColor, v );
+ },
+ shadowAlpha : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.shadowAlpha, v );
+ },
+ shadowOffsetX : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.shadowOffsetX, v );
+ },
+ shadowOffsetY : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.shadowOffsetY, v );
+ },
+ shadowBlur : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.shadowBlur, v );
+ },
+ shadowSpread : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.shadowSpread, v );
+ },
+ shadowInset : function(){
+ return PaintStyle.getPrivateData( this ).attr( PaintPrivate.shadowInset, v );
+ }
+ }
+ );
+
+ var TypoPrivate = AbstractStylePrivate.inherits(
+ 'TypoPrivate',
+ Class.PRIVATE_DATA | Class.POOL_OBJECT,
+ {
+ Constructor : function(){
+ this.data = [];
+ this.invalidate = 0;
+ },
+ cssText : function(){
+
+ },
+ cssObject : function(){
+
+ }
+ }
+ );
+
+ var TypoStyle = Class.create(
+ 'TypoStyle',
+ Class.POOL_OBJECT,
+ TypoPrivate,
+ {
+ Constructor : function( v ){
+ TypoStyle.newPrivateData( this );
+ },
+ color : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.color, v );
+ },
+ fontFamily : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.fontFamily, v );
+ },
+ fontSize : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.fontSize, v );
+ },
+ bold : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.bold, v );
+ },
+ italic : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.italic, v );
+ },
+ lineHeight : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.lineHeight, v );
+ },
+ letterSpacing : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.letterSpacing, v );
+ },
+ wordSpacing : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.wordSpacing, v );
+ },
+ align : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.align, v );
+ },
+ decoration : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.decoration, v );
+ },
+ transform : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.transform, v );
+ },
+ shadowColor : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.shadowColor, v );
+ },
+ shadowOffsetX : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.shadowOffsetX, v );
+ },
+ shadowOffsetY : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.shadowOffsetY, v );
+ },
+ shadowBlur : function( v ){
+ return TypoStyle.getPrivateData( this ).attr( TypoPrivate.shadowBlur, v );
+ }
+ }
+ );
+
+ var LayoutPrivate = AbstractStylePrivate.inherits(
+ 'LayoutPrivate',
+ Class.PRIVATE_DATA | Class.POOL_OBJECT,
+ {
+ Constructor : function(){
+ this.data = [];
+ this.invalidate = 0;
+ },
+ cssText : function(){
+
+ },
+ cssObject : function(){
+
+ }
+ }
+ );
+
+ DEF_ATTRS.LENGTH = 1;
+ DEF_ATTRS.PERCENT = 2;
+ DEF_ATTRS.COLOR = 4;
+ DEF_ATTRS.U_DECIMAL = 8;
+ DEF_ATTRS.NUMERICAL = 16;
+ DEF_ATTRS.BOOLEAN = 32;
+ DEF_ATTRS.QUARTET = 64;
+ DEF_ATTRS.URL = 128;
+ DEF_ATTRS.FONT_NAME = 256;
+ DEF_ATTRS.LIST = 512;
+ DEF_ATTRS.AUTO = 1024;
+ DEF_ATTRS.COMBI = 2048;
+ DEF_ATTRS.BORDER_STYLE = 'none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset'.split(',');
+ DEF_ATTRS.POSITION_X = 'left,center,right'.split(',');
+ DEF_ATTRS.POSITION_Y = 'top,center,bottom'.split(',');
+ DEF_ATTRS.ALIGN = 'left,center,right,justify'.split(',');
+ DEF_ATTRS.TEXT_DECORATION = 'none,underline,overline,line-through,blink'.split(',');
+ DEF_ATTRS.TEXT_TRANSFORM = 'none,capitalize,lowercase,uppercase'.split(',');
+ DEF_ATTRS.WIDTH_HEIGHT = 'auto'.split(',');
+ DEF_ATTRS.PAINT = 1; // 再描画のみ必要
+ DEF_ATTRS.REFLOW = 2; // レイアウトの再計算が必要
+
+ PaintPrivate.borderWidth = [ DEF_ATTRS.REFLOW, 0, DEF_ATTRS.QUARTET | DEF_ATTRS.LENGTH ]; // em [ top, right, bottom, left ]
+ PaintPrivate.borderColor = [ DEF_ATTRS.PAINT, 4, DEF_ATTRS.QUARTET | DEF_ATTRS.DEF_COLOR ]; // color [ top, right, bottom, left ]
+ PaintPrivate.borderStyle = [ DEF_ATTRS.REFLOW, 8, DEF_ATTRS.QUARTET | DEF_ATTRS.LIST, DEF_ATTRS.BORDER_STYLE ]; // string [ top, right, bottom, left ]
+ PaintPrivate.cornerRadius = [ DEF_ATTRS.PAINT, 12, DEF_ATTRS.QUARTET | DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT ]; // em, px [ top, right, bottom, left ]
+ PaintPrivate.bgColor = [ DEF_ATTRS.PAINT, 16, DEF_ATTRS.COLOR ]; // color
+ PaintPrivate.bgAlpha = [ DEF_ATTRS.PAINT, 17, DEF_ATTRS.U_DECIMAL ]; // 0 - 1
+ PaintPrivate.bgImgUrl = [ DEF_ATTRS.PAINT, 18, DEF_ATTRS.URL ]; // url
+ PaintPrivate.bgImgRepeatX = [ DEF_ATTRS.PAINT, 19, DEF_ATTRS.BOOLEAN ]; // true / false
+ PaintPrivate.bgImgRepeatY = [ DEF_ATTRS.PAINT, 20, DEF_ATTRS.BOOLEAN ]; // true / false
+ PaintPrivate.bgImgPositionX = [ DEF_ATTRS.PAINT, 21, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT | DEF_ATTRS.LIST, DEF_ATTRS.POSITION_X ]; // em %, px, string
+ PaintPrivate.bgImgPositionY = [ DEF_ATTRS.PAINT, 22, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT | DEF_ATTRS.LIST, DEF_ATTRS.POSITION_Y ]; // em %, px, string
+ PaintPrivate.shadowColor = [ DEF_ATTRS.PAINT, 23, DEF_ATTRS.COLOR ]; // color
+ PaintPrivate.shadowAlpha = [ DEF_ATTRS.PAINT, 24, DEF_ATTRS.U_DECIMAL ]; // 0 - 1
+ PaintPrivate.shadowOffsetX = [ DEF_ATTRS.PAINT, 25, DEF_ATTRS.LENGTH ]; // em
+ PaintPrivate.shadowOffsetY = [ DEF_ATTRS.PAINT, 26, DEF_ATTRS.LENGTH ]; // em
+ PaintPrivate.shadowBlur = [ DEF_ATTRS.PAINT, 27, DEF_ATTRS.LENGTH ]; // em
+ PaintPrivate.shadowSpread = [ DEF_ATTRS.PAINT, 28, DEF_ATTRS.LENGTH ]; // em
+ PaintPrivate.shadowInset = [ DEF_ATTRS.PAINT, 29, DEF_ATTRS.BOOLEAN ]; // true / false
+
+ TypoPrivate.color = [ DEF_ATTRS.PAINT, 0, DEF_ATTRS.COLOR ]; // color
+ TypoPrivate.fontFamily = [ DEF_ATTRS.REFLOW, 1, DEF_ATTRS.FONT_NAME ]; // string
+ TypoPrivate.fontSize = [ DEF_ATTRS.REFLOW, 2, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT ]; // em, %
+ TypoPrivate.bold = [ DEF_ATTRS.REFLOW, 3, DEF_ATTRS.BOOLEAN ]; // true / false
+ TypoPrivate.italic = [ DEF_ATTRS.REFLOW, 4, DEF_ATTRS.BOOLEAN ]; // true / false
+ TypoPrivate.lineHeight = [ DEF_ATTRS.REFLOW, 5, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT | DEF_ATTRS.NUMERICAL ]; // em, %,
+ TypoPrivate.letterSpacing = [ DEF_ATTRS.REFLOW, 6, DEF_ATTRS.LENGTH ]; // em
+ TypoPrivate.wordSpacing = [ DEF_ATTRS.REFLOW, 7, DEF_ATTRS.LENGTH ];
+ TypoPrivate.align = [ DEF_ATTRS.REFLOW, 8, DEF_ATTRS.LIST, DEF_ATTRS.ALIGN ];
+ TypoPrivate.decoration = [ DEF_ATTRS.PAINT, 9, DEF_ATTRS.LIST, DEF_ATTRS.TEXT_DECORATION ];
+ TypoPrivate.transform = [ DEF_ATTRS.REFLOW, 10, DEF_ATTRS.LIST, DEF_ATTRS.TEXT_TRANSFORM ];
+ TypoPrivate.shadowColor = [ DEF_ATTRS.PAINT, 11, DEF_ATTRS.COLOR ];
+ TypoPrivate.shadowOffsetX = [ DEF_ATTRS.PAINT, 12, DEF_ATTRS.LENGTH ];
+ TypoPrivate.shadowOffsetY = [ DEF_ATTRS.PAINT, 13, DEF_ATTRS.LENGTH ];
+ TypoPrivate.shadowBlur = [ DEF_ATTRS.PAINT, 14, DEF_ATTRS.LENGTH ];
+
+ LayoutPrivate.width = [ DEF_ATTRS.REFLOW, 0, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT, DEF_ATTRS.WIDTH_HEIGHT ];
+ LayoutPrivate.minWidth = [ DEF_ATTRS.REFLOW, 1, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT ];
+ LayoutPrivate.maxWidth = [ DEF_ATTRS.REFLOW, 2, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT ];
+ LayoutPrivate.height = [ DEF_ATTRS.REFLOW, 3, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT, DEF_ATTRS.WIDTH_HEIGHT ];
+ LayoutPrivate.minHeight = [ DEF_ATTRS.REFLOW, 4, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT ];
+ LayoutPrivate.maxHeight = [ DEF_ATTRS.REFLOW, 5, DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT ];
+ LayoutPrivate.padding = [ DEF_ATTRS.REFLOW, 6, DEF_ATTRS.QUARTET | DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT ];
+ LayoutPrivate.margin = [ DEF_ATTRS.REFLOW, 10, DEF_ATTRS.QUARTET | DEF_ATTRS.LENGTH | DEF_ATTRS.PERCENT ];
+
+
+ var NodePrivate = Class.create(
+ 'NodePrivate',
+ Class.PRIVATE_DATA | Class.POOL_OBJECT,
+ {
+ elmWrap : null,
+ textNode : null,
+ contentWidth : 0,
+ contentHeight : 0,
+ Constructor : function( __root, __parent ){
+ this.__root = __root;
+ if( __parent ) this.__parent = __parent;
+ },
+ paint : function( v ){
+ if( v instanceof PaintStyle ){
+ this.__paint && this.__paint.unRegister( this );
+ this._paint = v;
+ this.__paint = PaintStyle.getPrivateData( v );
+ this.__paint.register( this );
+ return this.User;
+ } else
+ if( v === null ){
+ this.__paint && this.__paint.unRegister( this );
+ delete this._paint;
+ delete this.__paint;
+ return this.User;
+ };
+ return this._paint;
+ },
+ typo : function( v ){
+ if( v instanceof TypoStyle ){
+ this.__typo && this.__typo.unRegister( this );
+ this._typo = v;
+ this.__typo = TypoStyle.getPrivateData( v );
+ this.__typo.register( this );
+ return this.User;
+ } else
+ if( v === null ){
+ this.__typo && this.__typo.unRegister( this );
+ delete this._typo;
+ delete this.__typo;
+ return this.User;
+ };
+ return this._typo;
+ },
+ /**
+ * 1. 要素の追加・削除
+ * 2. auto 指定時は要素の高さ取得.
+ * 3. 親の許す子の最大サイズと自信のスタイル指定から、自身の位置とサイズを計算
+ * 4. 描画更新リストに追加
+ */
+ reflow : function(){
+ var content = this._textContent,
+ layout = this.__layout,
+ targetW = this.__parent.childWidth,
+ targetH = this.__parent.childHeight,
+ size, data, w, h;
+
+ if( content || ( this.__paint && this.__paint.hasStyle === true ) || ( this.__typo && this.__typo.hasStyle === true ) ){
+ if( !this.elmWrap ) this.elmWrap = DOM.createDiv();
+ this.__parent.addDiv( this );
+ if( conetnt ){
+ if( !this.textNode ){
+ this.textNode = DOM.cerateText();
+ this.elmWrap.appendChild( this.textNode );
+ };
+ if( layout && ( layout.autoWidth === true || layout.autoHeight === true ) ){
+ size = DOM.getTextSize( this.elmWrap, content );
+ this.contentWidth = size[ 0 ];
+ this.conetntHeight = size[ 1 ];
+ };
+ this.textNode.data = content;
+ } else
+ if( this.textNode ){
+ DOM.correct( this.textNode );
+ delete this.textNode;
+ delete this.contentWidth;
+ delete this.conetntHeight;
+ };
+ this.currentWidth = this.elmWrap.offsetWidth;
+ this.currentHeight = this.elmWrap.offsetHeight;
+ } else
+ if( this.elmWrap ){
+ DOM.correct( this.elmWrap );
+ delete this.elmWrap;
+ delete this.textNode;
+ delete this.contentWidth;
+ delete this.conetntHeight;
+ delete this.currentWidth;
+ delete this.currentHeight
+ };
+
+ // this.__parent.layoutManager.reflow();
+ },
+ addDiv : function( nodeData ){
+
+ }
+ }
+ );
+ var Node = Class.create(
+ 'Node',
+ Class.POOL_OBJECT,
+ NodePrivate,
+ {
+ Constructor : function( root, parent ){
+ Node.newPrivateData( this, LayoutBox.getPrivateData( root ), parent ? LayoutBox.getPrivateData( parent ) : undefined, this );
+ },
+ paint : function( v ){
+ return Node.getPrivateData( this ).paint( v );
+ },
+ typo : function( v ){
+ return Node.getPrivateData( this ).typo( v );
+ },
+ remove : function(){
+ Node.getPrivateData( this ).remove();
+ },
+ nodeIndex : function( v ){
+ return Node.getPrivateData( this ).nodeIndex( v );
+ },
+ displayIndex : function(){
+
+ },
+ disabled : function( v ){
+ return Node.getPrivateData( this ).disabled( v );
+ },
+ cursor : function( v ){
+ return Node.getPrivateData( this ).cursor( v );
+ },
+ getAbsolutePositionX : function(){
+ return Node.getPrivateData( this ).getAbsolutePositionX();
+ },
+ getAbsolutePositionY : function(){
+ return Node.getPrivateData( this ).getAbsolutePositionY();
+ },
+ addEventListener : function( type, handler, opt_thisObject ){
+ Node.getPrivateData( this ).addEventListener( type, handler, opt_thisObject );
+ },
+ removeEventListener : function( type, handler ){
+ Node.getPrivateData( this ).removeEventListener( type, handler );
+ },
+ scrollTo : function( x, y ){
+ Node.getPrivateData( this ).scrollTo( x, y );
+ },
+ scrollX : function( v ){
+ return Node.getPrivateData( this ).scrollX( v );
+ },
+ scrollY : function( v ){
+ return Node.getPrivateData( this ).scrollY( v );
+ }
+ }
+ );
+
+ var LayoutBoxPrivate = NodePrivate.inherits(
+ 'LayoutBoxPrivate',
+ Class.POOL_OBJECT,
+ {
+ Constructor : function( layoutManager, root, parent ){
+ this.layoutManager = layoutManager;
+ this._root = _root;
+ if( _parent ) this._parent = _parent;
+ },
+ reflow : function(){
+ this.manager.reflow( this );
+ },
+ repaint : function(){
+ this.manager.repaint( this );
+ }
+ }
+ );
+
+ var LayoutBox = Node.inherits(
+ 'LayoutBox',
+ Class.POOL_OBJECT,
+ LayoutBoxPrivate,
+ {
+ Constructor : function( layoutManager, root, parent ){
+ LayoutBox.newPrivateData( this, layoutManager, LayoutBox.getPrivateData( root ), parent ? LayoutBox.getPrivateData( parent ) : undefined );
+ },
+ layoutManager : function( v ){
+
+ },
+ createLayoutBox : function(){
+
+ },
+ createContentBox : function(){
+
+ }
+ }
+ );
+
+})( window, document );
+
})( window, document );