/*
* pettanR peta.apps.js
- * version 0.5.8
+ * version 0.5.15
*
* author:
* itozyun
* 3-clause BSD
*/
-( function( pettanr, gOS, window, undefined ){
-
+( function( pettanr, gOS, window, document, undefined ){
/*
* PettanR service driver.
*/
function onLoadJson( _file, _json ){
var _access = FileAPI.getFileDataAccess( _file ),
- _data = _access !== null ? _access.DATA : null,
- l;
+ _data = _access !== null ? _access.DATA : null;
if( _data === null ){
- onErrorJson( _file);
+ onErrorJson( _file );
return;
}
_data.state = Const.FILE.STATE.OK;
if( Type.isArray( _json ) === true ){
- l = _json.length;
- if( l === 0) return;
- for( var i=0; i<l; ++i ){
- buildFileData( _json[ i], _data);
+ for( var i=0, l = _json.length; i<l; ++i ){
+ buildFileData( _json[ i ], _data );
};
} else
- if( _json.id ){
+ if( Type.isNumber( _json.id ) === true ){
buildFileData( _json, _data );
};
- _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;
};
+ _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 ){
+ if( _parent === FILE_DATA_PANELS_ROOT || _parent === FILE_DATA_MY_PANELS_ROOT ){
_data.type = FILE_TYPE.PANEL;
_array = PANEL_ARRAY;
} else
};
_data.driver = Driver;
-
+ // alert( ' _array ' + _data.id + Type.isNumber( _data.id ) );
// _array に _data を格納 または 上書き
- if( typeof _data.id === 'number' && _data.id > 0 ){
- var _id = _data.id - 1,
- __data = _array[ _id ],
+ 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){
+ for( var key in _data ){
if( _reserved.indexOf( key ) === -1 ){
__data[ key ] = _data[ key ];
};
_array[ _id ] = _data;
};
} else {
- alert( 'error' );
+ // alert( 'error' + _parent.name + ' ' + _data.id );
};
// Author
if( _parent.type === FILE_TYPE.COMIC || _parent === FILE_DATA_COMICS_ROOT ){
var _panels = _data.stories,
_panel;
- if( _panels && Type.isArray( _panels ) === true ){
+ if( Type.isArray( _panels ) === true ){
for( i=0, l=_panels.length; i<l; ++i ){
_panel = buildFileData( _panels[ i ], FILE_DATA_PANELS_ROOT );
_author.id === MyAuthorID && addChildData( FILE_DATA_MY_COMICS_ROOT, _data );
};
if( _parent === FILE_DATA_COMICS_ROOT ){
- addChildData( FILE_DATA_LATEST_COMICS, _data);
+ addChildData( FILE_DATA_LATEST_COMICS, _data );
};
} else
// Panel
- if( _parent === FILE_DATA_PANELS_ROOT ){
- _data.comic = getResource( COMIC_ARRAY, _data.comic_id );
+ if( _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.panel_elements,
_elm;
if( Type.isArray( _elements ) === true ){
- for( i=0, l=_elements.length; i<l; ++i){
+ for( i=0, l=_elements.length; i<l; ++i ){
_elm = _elements[ i];
if( _elm.resource_picture ){
_elm.resource_picture = buildFileData( _elm.resource_picture, FILE_DATA_PICTURE_ROOT ); // 上記参照切れに備えてここで上書き
};
};
};
+ _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 ){
return _data;
};
function addChildData( _parent, _child ){
- if( Type.isArray( _parent.children ) === false){
+ if( Type.isArray( _parent.children ) === false ){
_parent.children = [];
};
Util.getIndex( _parent.children, _child ) === -1 && _parent.children.push( _child );
return [ _data.id, _data.ext ].join( '.' );
} else
if( _type === FILE_TYPE.PANEL ){
- return [ _data.t, ':', _data.comic.title ].join( '' );
+ return [ 'id:' + _data.id + ', ' + ( _data.t || '' ) + ':', _data.comic ? _data.comic.title : 'no comic' ].join( '' );
} else
if( _type === FILE_TYPE.COMIC ){
return _data.title;
var _data = FileAPI.getFileData( _file ),
_type = _data !== null ? _data.type : null;
if( _type === FILE_TYPE.PICTURE ){
- return { image: [ pettanr.CONST.RESOURCE_PICTURE_PATH, 'thumbnail/', _data.id, '.', _data.ext ].join( '' )};
+ return { image: [ pettanr.CONST.THUMBNAIL_PATH, _data.id, '.', _data.ext ].join( '' )};
};
if( _data === FILE_DATA_COMICS_ROOT ){
return { className: 'file-type-cabinet' };
type: FILE_TYPE.FOLDER,
children: []
},
+ FILE_DATA_LATEST_PANELS = {
+ name: 'Latest Panels',
+ type: FILE_TYPE.FOLDER,
+ children: []
+ },
+ FILE_DATA_MY_PANELS_ROOT = {
+ name: 'My Panels',
+ type: FILE_TYPE.FOLDER,
+ children: [],
+ driver: Driver,
+ json: pettanr.CONST.URL_MY_PANELS_JSON
+ },
FILE_DATA_MY_PICTURES_ROOT = {
name: 'My Pictures',
type: FILE_TYPE.FOLDER,
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_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 );
FileAPI.createFolderUnderRoot( FILE_DATA_SERVICE_ROOT );
*/
var PremiumSatge = gOS.registerApplication( function(){
var BASE_PATH = pettanr.CONST.RESOURCE_PICTURE_PATH,
- THUMB_PATH = BASE_PATH, // + 'thumbnail/',
- LIMIT_FILESIZE = 1024 * 10,
+ THUMB_PATH = pettanr.CONST.THUMBNAIL_PATH,
+ LIMIT_FILESIZE = 1024 * 100,
ICON_ARRAY = [];
var self = this,
Editor.shutdown();
};
function onSave(){
- var model = Model.createPanel( {
+ PanelConsole.boot( Model.createPanel( {
comicID : comicID,
panelID : panelID,
panelTimming : panelTimming,
panelW : PANEL_CONTROL.w,
panelH : PANEL_CONTROL.h,
borderSize : 2,
- panelElementArray : PANEL_ELEMENT_ARRAY
- } );
- PanelConsole.boot( model.getJsonPostString().replace( /\n/g, '' ) );
- model.destroy();
+ panelElementArray : PANEL_ELEMENT_ARRAY,
+ publish : true
+ } ) );
};
function onSaveQuit(){
// Editor.shutdown();
ui, inputX, inputY, inputZ, inputA, inputW, inputH, inputAspectRatio,
inputPercentW, inputPercentH,
currentPanelElement = null,
- currentElementType = -1,
- currentLock = false;
+ currentElementType = -1;
return WINDOWS_CONTROL.createWindow(
{
});
},
update: function( currentElement ){
- if( currentLock === true && currentElement === null ) return;
-
var _elementType = currentElement === null ? -1 : currentElement.type,
x = currentElement !== null ? currentElement.x : 0,
y = currentElement !== null ? currentElement.y : 0,
} else {
}
- },
- lock: function( _currentLock ){
- currentLock = !!_currentLock;
- INFOMATION_WINDOW.bodyBackOrForward( !currentLock );
}
},
'infomation-window', 'Infomation', 0, 30, 200, 180, true
baseX, baseY, baseW, baseH,
currentX, currentY, currentW, currentH,
offsetX, offsetY,
- lock = false,
error = 0;
function draw( _x, _y, _w, _h ){
elmResizerContainerStyle.height = _h + 'px';
elmResizerTopStyle.left = elmResizerBottomStyle.left = FLOOR( _w / 2 - 5 ) + 'px';
elmResizerLeftStyle.top = elmResizerRightStyle.top = FLOOR( _h / 2 - 5 ) + 'px';
- } catch(e){
+ } catch( e ){
alert( [x, y, w, h].join( ','));
return;
- }
+ };
POSITION_ARRAY.splice( 0, POSITION_ARRAY.length );
POSITION_ARRAY.push(
{x: _x -HIT_AREA, y: _y +_h -5, w: HIT_AREA +5, h: HIT_AREA +5},
{x: _x +_w -5, y: _y +_h -5, w: HIT_AREA +5, h: HIT_AREA +5}
);
- }
+ };
function update( _x, _y, _w, _h ){
var __w, __h;
_h = _h !== undefined ? _h : baseH +moveY *com.h;
error += _thisError === 0 ? 0 : 1;
++_thisError;
- if( _thisError > 9999){
+ if( _thisError > 9999 ){
++error
//alert( 'opera error' +error);
- this.onCancel;
+ this.onCancel();
return;
}
}
currentElement.animate( startX, startY, startW, startH, startFilpV, startFilpH) :
currentElement.animate( startX, startY, startW, startH, angle);
},
- lock: function( _lock ){
- if( _lock !== undefined){
- elmResizerContainerStyle.borderColor = _lock === true ? 'blue' : '';
- lock = _lock;
- }
- return lock;
- },
onShiftUpdate: update,
onCtrlUpdate: update
}
var PANEL_ELEMENT_CONTROL = ( function(){
var elmContainer,
currentElement = null,
- currentLockTest = false,
- currentLock = false,
panelX, panelY, panelW, panelH,
startX, startY;
/*
_elm = currentElement;
if( _elm !== null ){
- currentLockTest = currentLockTest === true && _x === 0 && _y === 0;
if( _elm.busy() === true ){
_elm.mousemove( _x, _y );
return true;
_elm.mousemove( _x, _y ); // cursor
return true;
}
- if( currentLock === true ){
- currentLockTest = true;
- return true;
- }
};
for( var i=0; i<l; ++i ){
_elm = PANEL_ELEMENT_ARRAY[ i ];
mouseup: function( _mouseX, _mouseY ){
var ret = currentElement !== null && currentElement.busy() === true;
ret === true && currentElement.mouseup( _mouseX -startX || panelX, _mouseY -startY || panelY );
- currentLock = currentLockTest === true && currentElement.hitTest( _mouseX -panelX, _mouseY -panelY ) === true;
- RESIZE_OPERATOR.lock( currentLock );
- INFOMATION_WINDOW.lock( currentLock );
return ret;
},
mousedown: function( _mouseX, _mouseY ){
startY = panelY;
if( currentElement === null) return false
currentElement.mousedown( _mouseX -startX, _mouseY -startY);
- currentLockTest = true;
return true;
},
busy: function(){
};
}, false, true, 'Panel Editor', 'paneleditor', null, '#2D89F0' );
+var FormApplicationHelper = function( app ){
+ app.isUploading = false;
+ app.elmProgress = null;
+ app.elmUploader = null;
+ app.elmScript = null;
+ app.elmIframe = null;
+ app.elmForm = null;
+ app.fetchScript = function(){
+ app.elmProgress = document.getElementById( app.elmProgressID );
+
+ if( !( app.elmUploader = document.getElementById( app.elmUploaderID ) ) ){
+ app.elmUploader = document.createElement( 'div' );
+ app.rootElement.appendChild( app.elmUploader );
+ app.elmUploader.id = app.elmUploaderID;
+ if( app.hideUploader === true ){
+ app.elmUploader.style.cssText = 'height:1px;line-height:1px;visibility:hidden;overflow:hidden;';
+ };
+ };
+
+ app.elmScript = document.createElement( 'script' );
+ document.body.appendChild( app.elmScript );
+ app.elmScript.type = 'text\/javascript';
+ app.elmScript.src = app.scriptSrc;
+
+ app.elmProgress.innerHTML = 'loading form.';
+
+ app.addTimer( app.detectForm, 250 );
+
+ delete app.fetchScript;
+ };
+ app.detectForm = function(){
+ app.elmForm = app.elmUploader.getElementsByTagName( 'form' )[ 0 ];
+ if( !app.elmForm ) return;
+
+ app.removeTimer( app.detectForm );
+ Util.createIframe( 'targetFrame', app.onCreateIframe );
+ app.elmProgress.innerHTML = 'create iframe';
+
+ delete app.detectForm;
+ };
+ app.onCreateIframe = function( _iframe ){
+ app.elmUploader.appendChild( _iframe );
+ app.elmIframe = _iframe;
+ app.elmForm.target = _iframe.name;
+ app.elmProgress.innerHTML = '';
+ app.onFormReady && app.onFormReady();
+
+ delete app.onCreateIframe;
+ };
+ app.submit = function(){
+ app.elmProgress.innerHTML = 'submit!';
+ try {
+ app.elmForm.submit();
+ app.isUploading = true;
+ } catch( e ){
+ app.elmProgress.innerHTML = 'submit err..';
+ app.submitError && app.submitError();
+ return;
+ };
+ if( app.detectIframe ){
+ app.elmIframe.onreadystatechange = app.detectIframe;
+ } else {
+ app.elmIframe.onload = app.onIframeUpdate;
+ };
+ app.elmProgress.innerHTML = 'uploading..';
+
+ delete app.submit;
+ };
+ if( UA.isIE ){
+ app.detectIframe = function(){
+ if ( this.readyState !== 'complete' ) return;
+ this.onreadystatechange = new Function();
+ this.onreadystatechange = null;
+ app.onIframeUpdate();
+ delete app.detectIframe;
+ };
+ };
+ app.onIframeUpdate = function(){
+ app.elmIframe.onload = null;
+ try {
+ console.log( ( app.elmIframe.contentWindow || app.elmIframe.contentDocument.parentWindow ).document.body.innerHTML );
+ console.log( ( app.elmIframe.contentWindow || app.elmIframe.contentDocument.parentWindow )[ 'current_author' ] );
+ } catch(e){
+
+ };
+ ( app.elmIframe.contentWindow || app.elmIframe.contentDocument.parentWindow ).close();
+ app.elmIframe = null;
+ app.elmProgress.innerHTML = 'success!';
+ app.isUploading = false;
+ app.submitSuccess && app.submitSuccess();
+ delete app.onIframeUpdate;
+ };
+ app.destroyHelper = function(){
+ app = null;
+ };
+};
var ComicConsole = gOS.registerApplication( function(){
var elmHeader, elmProgress,
- winW, winH,
+ windowW, windowH,
inputTitle, inputW, inputH,
comboboxVisible, // comboboxEditable,
buttonSubmit, buttonCancel,
- elmUploader = null,
- elmScript = null,
- elmIframe = null,
- elmForm = null,
- isUploading = false,
- instance = this;
- //pettanr.key.addKeyDownEvent( ID, 69, false, false, clickOK);
-
+ app = this;
+
function clickOK(){
- if( !elmForm || !elmIframe || isUploading === true ) return false;
+ if( !app.elmForm || !app.elmIframe || app.isUploading === true ) return false;
// validate
- isUploading = true;
- elmProgress.innerHTML = '■';
- copyAndSubmit();
- };
- function copyAndSubmit(){
- var _inputList = elmForm.getElementsByTagName( 'input' ),
- _input, _name;
- for( var i = _inputList.length; i; ){
- _input = _inputList[ --i ];
- _name = _input.name;
- if( _name === 'comic[title]'){
- _input.value = inputTitle.value();
- } else
- if( _name === 'comic[width]'){
- _input.value = inputW.value();
- } else
- if( _name === 'comic[height]'){
- _input.value = inputH.value();
- };
- };
- var _selectList = elmForm.getElementsByTagName( 'select' ),
- _select, _optionList;
- for( i = _selectList.length; i; ){
- _select = _selectList[ --i ];
- _name = _select.name;
- _optionList = _select.getElementsByTagName( 'option' )
- if( _name === 'comic[visible]'){
- _select.selectedIndex = comboboxVisible.selectIndex();
- } else
- if( _name === 'comic[editable]'){
- // _select.selectedIndex = comboboxEditable.selectIndex();
- };
- };
- try {
- elmForm.submit();
- } catch( e ){
- elmProgress.innerHTML = 'submit() err..';
- isUploading = false;
- instance.addTimer( clickCancel , 3000, true );
- return;
- };
- if( UA.isIE ){
- elmIframe.onreadystatechange = detectIframe;
- } else {
- elmIframe.onload = onIframeUpdate;
+ var _inputList = app.elmForm.getElementsByTagName( 'input' ),
+ _input, _name;
+ for( var i = _inputList.length; i; ){
+ _input = _inputList[ --i ];
+ _name = _input.name;
+ if( _name === 'comic[title]' ){
+ _input.value = inputTitle.value();
+ } else
+ if( _name === 'comic[width]' ){
+ _input.value = inputW.value();
+ } else
+ if( _name === 'comic[height]' ){
+ _input.value = inputH.value();
};
- elmProgress.innerHTML = 'uploading..';
};
- /*
- * ie の 場合、readyState をチェック.
- */
- function detectIframe(){
- if ( elmIframe.readyState === 'complete' ){
- elmIframe.onreadystatechange = new Function();
- elmIframe.onreadystatechange = null;
- onIframeUpdate();
- };
- };
- function onIframeUpdate(){
- elmIframe.onload = null;
- try {
- console.log( ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).document.body.innerHTML );
- } catch(e){
-
- }
-
- ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();
- elmIframe = null;
- elmProgress.innerHTML = 'success!';
- instance.addTimer( clickCancel , 1000 );
- isUploading = false;
- };
-
- function clickCancel(){
- if( isUploading === true ) return false;
- ComicConsole.shutdown();
- };
- function detectForm(){
- elmForm = elmUploader.getElementsByTagName( 'form' )[ 0 ];
- if( elmForm ){
- var selectList = elmForm.getElementsByTagName( 'select' ),
- select,
- j, m,
- optionList, option;
- for( var i=0, l=selectList.length; i<l; ++i ){
- select = selectList[ i ];
- optionList = select.getElementsByTagName( 'option' );
- for( j=0, m=optionList.length; j<m; ++j ){
- option = optionList[ j ];
- if( select.name === 'comic[visible]' ){
- comboboxVisible.createOption( option.innerHTML, option.value, option.selected );
- } else
- if( select.name === 'comic[editable]' ){
- // comboboxEditable.createOption( option.innerHTML, option.value, option.selected );
- };
- };
+ var _selectList = app.elmForm.getElementsByTagName( 'select' ),
+ _select, _optionList;
+ for( i = _selectList.length; i; ){
+ _select = _selectList[ --i ];
+ _name = _select.name;
+ _optionList = _select.getElementsByTagName( 'option' )
+ if( _name === 'comic[visible]' ){
+ _select.selectedIndex = comboboxVisible.selectIndex();
+ } else
+ if( _name === 'comic[editable]' ){
+ // _select.selectedIndex = comboboxEditable.selectIndex();
};
-
- instance.removeTimer( detectForm );
- Util.createIframe( 'targetFrameCreateComic', onCreateIframe );
- elmProgress.innerHTML = 'create iframe';
-
- instance.onPaneResize( winW, winH );
- inputTitle.focus();
};
+ app.submit();
};
- function onCreateIframe( _iframe ){
- elmUploader.appendChild( _iframe );
- elmIframe = _iframe;
- elmForm.target = _iframe.name;
- elmProgress.innerHTML = '';
+ function clickCancel(){
+ if( app.isUploading === true ) return false;
+ ComicConsole.shutdown();
};
/* grobal method */
this.MIN_WIDTH = 320;
this.MIN_HEIGHT = 320;
this.onInit = function(){
- instance.rootElement.id = 'comic-console-wrapper';
- instance.rootElement.className = 'console-wrapper';
- instance.rootElement.innerHTML = [
+ app.rootElement.id = 'comic-console-wrapper';
+ app.rootElement.className = 'console-wrapper';
+ app.rootElement.innerHTML = [
'<div id="comic-console-header" class="console-header">Create New Comic</div>',
'<div id="comic-console" class="console-inner">',
'<div id="comic-console-title" class="field">',
'</div>'
].join( '' );
- instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+ app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+
+ delete app.onInit;
+ };
+ this.elmProgressID = 'comic-console-progress';
+ this.elmUploaderID = 'newcomic';
+ this.elmIframeName = 'targetFrameCreateComic'
+ this.scriptSrc = pettanr.CONST.CREATE_COMIC_JS;
+ this.hideUploader = true;
+ FormApplicationHelper( this );
+ this.onFormReady = function(){
+ app.onPaneResize( windowW, windowH );
+
+ var selectList = app.elmForm.getElementsByTagName( 'select' ),
+ select,
+ j, m,
+ optionList, option;
+ for( var i=0, l=selectList.length; i<l; ++i ){
+ select = selectList[ i ];
+ optionList = select.getElementsByTagName( 'option' );
+ for( j=0, m=optionList.length; j<m; ++j ){
+ option = optionList[ j ];
+ if( select.name === 'comic[visible]' ){
+ comboboxVisible.createOption( option.innerHTML, option.value, option.selected );
+ } else
+ if( select.name === 'comic[editable]' ){
+ // comboboxEditable.createOption( option.innerHTML, option.value, option.selected );
+ };
+ };
+ };
+ inputTitle.focus();
- delete instance.onInit;
+ delete app.onFoemReady;
+ };
+ this.submitError = function(){
+ app.addTimer( clickCancel , 5000, true );
+ };
+ this.submitSuccess = function(){
+ app.addTimer( clickCancel , 5000, true );
};
this.onOpen = function( w, h ){
- var ui = instance.createUIGroup();
+ var ui = app.createUIGroup();
inputTitle = ui.createInputText( document.getElementById( 'comic-console-title') );
inputW = ui.createInputText( document.getElementById( 'comic-console-width') );
buttonSubmit = ui.createButton( document.getElementById( 'comic-console-post-button'), clickOK );
buttonCancel = ui.createButton( document.getElementById( 'comic-console-cancel-button'), clickCancel );
- elmHeader = document.getElementById( 'comic-console-header' );
- elmProgress = document.getElementById( 'comic-console-progress' );
-
- elmUploader = document.createElement( 'div' );
- instance.rootElement.appendChild( elmUploader );
- elmUploader.id = 'newcomic';
- elmUploader.style.cssText = 'height:1px;line-height:1px;visibility:hidden;overflow:hidden;';
-
- elmScript = document.createElement( 'script' );
- document.body.appendChild( elmScript );
- elmScript.type = 'text\/javascript';
- elmScript.src = pettanr.CONST.CREATE_COMIC_JS;
-
- elmProgress.innerHTML = 'loading form.';
-
- instance.addTimer( detectForm, 250 );
- instance.onPaneResize( w, h );
-
- delete instance.onOpen;
+ app.onPaneResize( w, h );
+ app.fetchScript();
+ delete app.onOpen;
};
this.onPaneResize = function( _w, _h ){
- winW = _w;
- winH = _h;
- instance.rootElement.style.cssText = [
- 'left:', Math.floor( ( _w - instance.rootElement.offsetWidth ) /2 ), 'px;',
- 'top:', Math.floor( ( _h- instance.rootElement.offsetHeight ) /2 ), 'px;'
+ windowW = _w;
+ windowH = _h;
+ app.rootElement.style.cssText = [
+ 'left:', Math.floor( ( _w - app.rootElement.offsetWidth ) /2 ), 'px;',
+ 'top:', Math.floor( ( _h- app.rootElement.offsetHeight ) /2 ), 'px;'
].join( '' );
};
this.onClose = function(){
- elmHeader = elmProgress = elmForm = elmUploader = instance = null;
- isUploading = false;
+ app.destroyHelper();
+ app = inputTitle = inputW = inputH = comboboxVisible = buttonSubmit = buttonCancel = null;
};
}, true, true, 'Comic Console', 'comicConsole', null, '#D44A26' );
var UploadConsole = gOS.registerApplication( function(){
var windowW, windowH,
- TARGET_FRAME_NAME = 'targetFrame',
- elmContainer,
- elmProgress,
- elmScript = null,
- elmForm = null,
- elmFile = null,
- elmIframe = null,
- isUploading = false,
- instance = this;
- /*
- * upload ボタンが押されたらまず iframe をつくる.
- */
+ buttonSubmit, buttonCancel,
+ elmFile,
+ app = this;
+
function clickOK(){
- if( !elmForm || !elmIframe || isUploading === true ) return false;
+ if( !app.elmForm || !app.elmIframe || app.isUploading === true ) return false;
if( elmFile.value.length === 0 ) return false;
- elmProgress.innerHTML = 'uploading.';
- isUploading = true;
- submit();
+ app.submit();
return false;
};
- /*
- * form の target に iframe を指定したのち submit();
- */
- function submit(){
- try {
- elmForm.submit();
- } catch( e){
- elmProgress.innerHTML = 'submit() err..';
- isUploading = false;
- instance.addTimer( clickCancel , 3000, true );
- return;
- };
-
- if( UA.isIE){
- elmIframe.onreadystatechange = detectIframe;
- } else {
- elmIframe.onload = onLoad;
- };
- elmProgress.innerHTML = 'uploading..';
- };
- /*
- * ie の 場合、readyState をチェック.
- */
- function detectIframe(){
- if ( elmIframe.readyState === 'complete') {
- elmIframe.onreadystatechange = new Function();
- elmIframe.onreadystatechange = null;
- onLoad();
- };
- };
- function onLoad(){
- elmIframe.onload = null;
- ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();
- elmProgress.innerHTML = 'success!';
- instance.addTimer( clickCancel , 1000 );
- isUploading = false;
- };
-
- function detectForm(){
- elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];
- if( elmForm ){
- var _inputList = elmForm.getElementsByTagName( 'input' ),
- _input;
- for( var i = _inputList.length; i; ){
- _input = _inputList[ --i ];
- if( _input.type === 'file' ){
- elmFile = _input;
- };
- if( _input.type === 'submit' ){
- _input.style.display = 'none';
- };
- };
- instance.removeTimer( detectForm );
- Util.createIframe( TARGET_FRAME_NAME, onCreateIframe );
- elmProgress.innerHTML = 'create iframe';
- };
- };
- function onCreateIframe( _iframe ){
- elmContainer.appendChild( _iframe );
- elmIframe = _iframe;
- elmForm.target = _iframe.name;
- elmProgress.innerHTML = '';
- instance.onPaneResize( windowW, windowH );
- };
function clickCancel(){
- if( isUploading === true ) return false;
+ if( app.isUploading === true ) return false;
UploadConsole.shutdown();
return false;
};
this.MIN_WIDTH = 320;
this.MIN_HEIGHT = 320;
this.onInit = function(){
- instance.rootElement.id = 'upload-console-wrapper';
- instance.rootElement.className = 'console-wrapper';
- instance.rootElement.innerHTML = [
+ app.rootElement.id = 'upload-console-wrapper';
+ app.rootElement.className = 'console-wrapper';
+ app.rootElement.innerHTML = [
'<div id="upload-console-header" class="console-header">Upload Picture</div>',
'<div id="upload-console" class="console-inner">',
'<div id="uploader"></div>',
'</div>'
].join( '' );
- instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+ app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
- delete instance.onInit;
- }
+ delete app.onInit;
+ };
+ this.elmProgressID = 'upload-console-progress';
+ this.elmUploaderID = 'uploader';
+ this.elmIframeName = 'targetFrameUpload'
+ this.scriptSrc = pettanr.CONST.UPLOAD_PICTURE_JS;
+ this.hideUploader = false;
+ FormApplicationHelper( this );
+ this.onFormReady = function(){
+ app.onPaneResize( windowW, windowH );
+
+ var _inputList = app.elmForm.getElementsByTagName( 'input' ),
+ _input;
+ for( var i = _inputList.length; i; ){
+ _input = _inputList[ --i ];
+ if( _input.type === 'file' ){
+ elmFile = _input;
+ } else
+ if( _input.type === 'submit' ){
+ _input.style.display = 'none';
+ };
+ };
+ delete app.onFoemReady;
+ };
+ this.submitError = function(){
+ app.addTimer( clickCancel , 5000, true );
+ };
+ this.submitSuccess = function(){
+ app.addTimer( clickCancel , 5000, true );
+ };
this.onOpen = function( w, h ){
- elmContainer = document.getElementById( 'uploader' );
- elmProgress = document.getElementById( 'upload-console-progress' );
-
- instance.addMouseEventListener( document.getElementById( 'upload-console-post-button' ), 'click', clickOK );
- instance.addMouseEventListener( document.getElementById( 'upload-console-cancel-button' ), 'click', clickCancel );
- /*
- * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.
- */
- elmScript = document.createElement( 'script' );
- document.body.appendChild( elmScript );
- elmScript.type = 'text\/javascript';
- elmScript.src = pettanr.CONST.UPLOAD_PICTURE_JS;
+ var ui = app.createUIGroup();
+ buttonSubmit = ui.createButton( document.getElementById( 'upload-console-post-button'), clickOK );
+ buttonCancel = ui.createButton( document.getElementById( 'upload-console-cancel-button'), clickCancel );
- instance.addTimer( detectForm, 250 );
- instance.onPaneResize( w, h );
-
- elmProgress.innerHTML = 'loading form.';
+ app.onPaneResize( w, h );
+ app.fetchScript();
};
this.onPaneResize = function( _windowW, _windowH){
windowW = _windowW;
windowH = _windowH;
- instance.rootElement.style.cssText = [
- 'left:', Math.floor( ( _windowW - instance.rootElement.offsetWidth ) /2 ), 'px;',
- 'top:', Math.floor( ( _windowH - instance.rootElement.offsetHeight ) /2 ), 'px;'
+ app.rootElement.style.cssText = [
+ 'left:', Math.floor( ( _windowW - app.rootElement.offsetWidth ) /2 ), 'px;',
+ 'top:', Math.floor( ( _windowH - app.rootElement.offsetHeight ) /2 ), 'px;'
].join( '' );
- }
+ };
this.onClose = function(){
- elmHeader = elmProgress = elmForm = elmUploader = instance = null;
- isUploading = false;
- }
+ app.destroyHelper();
+ app = elmFile = buttonSubmit = buttonCancel = null;
+ };
}, true, true, 'Upload Console', 'uploadConsole', null, '#01A31C' );
var ArtistConsole = gOS.registerApplication( function(){
var windowW, windowH,
- TARGET_FRAME_NAME = 'targetFrameRegisterArtist',
- elmContainer, elmProgress,
- elmScript = null,
- elmForm = null,
- elmIframe = null,
- isUploading = false,
- instance = this;
- /*
- * upload ボタンが押されたらまず iframe をつくる.
- */
+ buttonSubmit, buttonCancel,
+ app = this;
+
function clickOK(){
- if( !elmForm || !elmIframe || isUploading === true ) return false;
- elmProgress.innerHTML = 'uploading.';
- isUploading = true;
- submit();
+ if( !app.elmForm || !app.elmIframe || app.isUploading === true ) return false;
+ app.submit();
return false;
- }
- /*
- * form の target に iframe を指定したのち submit();
- */
- function submit(){
- try {
- elmForm.submit();
- } catch( e){
- elmProgress.innerHTML = 'submit() err..';
- isUploading = false;
- instance.addTimer( clickCancel , 3000, true );
- return;
- }
-
- if( UA.isIE){
- elmIframe.onreadystatechange = detectIframe;
- } else {
- elmIframe.onload = onLoad;
- }
- elmProgress.innerHTML = 'uploading..';
- }
- /*
- * ie の 場合、readyState をチェック.
- */
- function detectIframe(){
- if ( elmIframe.readyState === 'complete' ){
- elmIframe.onreadystatechange = new Function();
- elmIframe.onreadystatechange = null;
- onLoad();
- }
- }
- function onLoad(){
- elmIframe.onload = null;
- ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();
- elmProgress.innerHTML = 'success!';
- instance.addTimer( clickCancel , 1000, true );
- isUploading = false;
- }
-
- function detectForm(){
- elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];
- if( elmForm){
- var _inputList = elmForm.getElementsByTagName( 'input' ),
- _input;
- for( var i = _inputList.length; i; ){
- _input = _inputList[ --i ];
- if( _input.type === 'submit' ){
- _input.style.display = 'none';
- }
- }
- instance.removeTimer( detectForm );
- Util.createIframe( TARGET_FRAME_NAME, onCreateIframe);
- elmProgress.innerHTML = 'create iframe';
- }
- }
- function onCreateIframe( _iframe ){
- elmContainer.appendChild( _iframe );
- elmIframe = _iframe;
- elmForm.target = _iframe.name;
- elmProgress.innerHTML = '';
- instance.onPaneResize( windowW, windowH );
- }
+ };
function clickCancel(){
- if( isUploading === true) return false;
+ if( app.isUploading === true) return false;
ArtistConsole.shutdown();
return false;
- }
+ };
/* grobal method */
this.MIN_WIDTH = 320;
this.MIN_HEIGHT = 320;
this.onInit = function(){
- instance.rootElement.id = 'artist-console-wrapper';
- instance.rootElement.className = 'console-wrapper';
- instance.rootElement.innerHTML = [
+ app.rootElement.id = 'artist-console-wrapper';
+ app.rootElement.className = 'console-wrapper';
+ app.rootElement.innerHTML = [
'<div id="artist-console-header" class="console-header">Register Artist</div>',
'<div id="artist-console" class="console-inner">',
'<div id="register"></div>',
'</div>'
].join( '' );
- instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+ app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
- delete instance.onInit;
+ delete app.onInit;
+ };
+ this.elmProgressID = 'artist-console-progress';
+ this.elmUploaderID = 'register';
+ this.elmIframeName = 'targetFrameArtistRegister'
+ this.scriptSrc = pettanr.CONST.REGISTER_ARTIST_JS;
+ this.hideUploader = false;
+ FormApplicationHelper( this );
+ this.onFormReady = function(){
+ app.onPaneResize( windowW, windowH );
+
+ var _inputList = app.elmForm.getElementsByTagName( 'input' ),
+ _input;
+ for( var i = _inputList.length; i; ){
+ _input = _inputList[ --i ];
+ if( _input.type === 'submit' ){
+ _input.style.display = 'none';
+ };
+ };
+ delete app.onFoemReady;
+ };
+ this.submitError = function(){
+ app.addTimer( clickCancel , 5000, true );
+ };
+ this.submitSuccess = function(){
+ app.addTimer( clickCancel , 5000, true );
};
this.onOpen = function( w, h ){
- elmContainer = document.getElementById( 'register');
- elmProgress = document.getElementById( 'artist-console-progress');
-
- instance.addMouseEventListener( document.getElementById( 'artist-console-post-button' ), 'click', clickOK );
- instance.addMouseEventListener( document.getElementById( 'artist-console-cancel-button' ), 'click', clickCancel );
- /*
- * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.
- */
- elmScript = document.createElement( 'script' );
- document.body.appendChild( elmScript );
- elmScript.type = 'text\/javascript';
- elmScript.src = pettanr.CONST.REGISTER_ARTIST_JS;
+ var ui = app.createUIGroup();
+ buttonSubmit = ui.createButton( document.getElementById( 'artist-console-post-button'), clickOK );
+ buttonCancel = ui.createButton( document.getElementById( 'artist-console-cancel-button'), clickCancel );
- instance.addTimer( detectForm, 250 );
- instance.onPaneResize( w, h );
-
- elmProgress.innerHTML = 'loading form.';
+ app.onPaneResize( w, h );
+ app.fetchScript();
};
this.onPaneResize = function( _windowW, _windowH ){
windowW = _windowW;
windowH = _windowH;
- instance.rootElement.style.cssText = [
- 'left:', Math.floor( ( _windowW - instance.rootElement.offsetWidth ) /2 ), 'px;',
- 'top:', Math.floor( ( _windowH - instance.rootElement.offsetHeight ) /2 ), 'px;'
+ app.rootElement.style.cssText = [
+ 'left:', Math.floor( ( _windowW - app.rootElement.offsetWidth ) /2 ), 'px;',
+ 'top:', Math.floor( ( _windowH - app.rootElement.offsetHeight ) /2 ), 'px;'
].join( '' );
};
this.onClose = function(){
- elmHeader = elmProgress = elmForm = elmUploader = instance = null;
- isUploading = false;
+ app.destroyHelper();
+ app = buttonSubmit = buttonCancel = null;
};
}, true, true, 'Artist Console', 'artistConsole', null, '#FFC40D' );
var Model = ( function(){
var PanelModelClass = function( panel ){
- var comicID = panel.comicID,
- panelID = panel.panelID,
- panelTimming = panel.panelTimming,
+ var comicID = panel.comicID || -1,
+ panelID = panel.panelID || -1,
+ panelTimming = panel.panelTimming || -1,
panelW = panel.panelW,
panelH = panel.panelH,
borderSize = panel.borderSize,
panelElementArray = panel.panelElementArray,
+ publish = panel.publish,
timing = 0;
function getPanelElementByTiming(){
};
return [
'{', cr,
- //'"panel": {', cr,
- //'"id": ', panelID, ',', cr,
- '"width": ', panelW, ',', cr,
- '"height": ', panelH, ',', cr,
- '"border": ', borderSize, ',', cr,
- // '"comic_id": ', comicID, ',', cr,
- // '"picture_id": 1,', cr,
- '"x": ', 0, ',', cr,
- '"y": ', 0, ',', cr,
- '"z": ', 1, ',', cr,
- // '"t": ', panelTimming, ',', cr,
- '"panel_pictures_attributes": {', cr,
- IMAGE_ARRAY.join( ',' + cr ), cr,
- '},', cr,
- '"speech_balloons_attributes": {', cr,
- BALLOON_ARRAY.join( ',' + cr ), cr,
- '}', cr,
- //'}', cr,
+ panelID !== -1 ? ( '"id": ' + panelID + ',' + cr ) : '',
+ comicID !== -1 ? ( '"comic_id": ' + comicID + ',' + cr ) : '',
+ '"width": ', panelW, ',', cr,
+ '"height": ', panelH, ',', cr,
+ '"border": ', borderSize, ',', cr,
+
+ // '"picture_id": 1,', cr,
+ '"x": ', 0, ',', cr,
+ '"y": ', 0, ',', cr,
+ '"z": ', 1, ',', cr,
+ panelTimming !== -1 ? ( '"t": ' + panelTimming + ',' + cr ) : '',
+ '"panel_pictures_attributes": {', cr,
+ IMAGE_ARRAY.join( ',' + cr ), cr,
+ '},', cr,
+ '"speech_balloons_attributes": {', cr,
+ BALLOON_ARRAY.join( ',' + cr ), cr,
+ '}', ',', cr,
+ '"publish": ', ( publish === true ? 1 : 0 ), cr,
'}'
].join( '' );
};
return HTML_ARRAY.join( pettanr.LINE_FEED_CODE_TEXTAREA );
};
+ this.publish = function( v ){
+ return publish = Type.isBoolean( v ) === true ? v : publish;
+ };
this.destroy = function(){
panel = panelElementArray = null;
};
windowW, windowH,
timing = 0,
comicID, panelID, panelTimming, panelW, panelH, borderSize, panelElementArray,
- instance = this,
+ app = this,
model = null;
function clickOK(){
this.MIN_WIDTH = 320;
this.MIN_HEIGHT = 320;
this.onInit = function(){
- instance.rootElement.id = 'output-console-wrapper';
- instance.rootElement.className = 'console-wrapper';
- instance.rootElement.innerHTML = [
+ app.rootElement.id = 'output-console-wrapper';
+ app.rootElement.className = 'console-wrapper';
+ app.rootElement.innerHTML = [
'<div id="output-console-header" class="console-header">Output Console</div>',
'<div id="output-console" class="console-inner">',
'<div id="output-console-format" class="field">',
'</div>'
].join( '' );
- instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+ app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
- delete instance.onInit;
+ delete app.onInit;
};
this.onOpen = function( _w, _h, _comicID, _panelID, _panelTimming, _panelW, _panelH, _borderSize, _panelElementArray ){
elmOutputArea = document.getElementById( 'output-area' );
- var ui = instance.createUIGroup();
+ var ui = app.createUIGroup();
comboboxFormat = ui.createCombobox( document.getElementById( 'output-console-format' ), formatUpdate );
for( var i=0; FORMAT_LIST[ 0 ]; ++i ){
inputOption = ui.createInputText( document.getElementById( 'output-console-option' ), null );
// buttonPost = ui.createButton( document.getElementById( 'output-console-post-button' ), clickPost );
buttonClose = ui.createButton( document.getElementById( 'output-console-close-button' ), clickClose );
- instance.onPaneResize( _w, _h );
+
+ app.onPaneResize( _w, _h );
+
+ comboboxFormat.focus( true );
model = Model.createPanel( {
comicID : _comicID,
panelW : _panelW,
panelH : _panelH,
borderSize : _borderSize,
- panelElementArray : _panelElementArray
+ panelElementArray : _panelElementArray,
+ publish : true
} );
formatUpdate();
this.onPaneResize = function( _windowW, _windowH ){
windowW = _windowW;
windowH = _windowH;
- instance.rootElement.style.cssText = [
- 'left:', Math.floor( ( _windowW - instance.rootElement.offsetWidth ) /2 ), 'px;',
- 'top:', Math.floor( ( _windowH - instance.rootElement.offsetHeight ) /2 ), 'px;'
+ app.rootElement.style.cssText = [
+ 'left:', Math.floor( ( _windowW - app.rootElement.offsetWidth ) /2 ), 'px;',
+ 'top:', Math.floor( ( _windowH - app.rootElement.offsetHeight ) /2 ), 'px;'
].join( '' );
};
this.onClose = function(){
var PanelConsole = gOS.registerApplication( function(){
var windowW, windowH,
- TARGET_FRAME_NAME = 'targetFrameCreateNewPanel',
- elmContainer, elmProgress,
- elmScript = null,
- elmForm = null,
- elmIframe = null,
- isUploading = false,
- instance = this,
- json;
+ comboboxPublish, buttonPost, buttonClose,
+ elmInput,
+ app = this,
+ model = null;
+
/*
* upload ボタンが押されたらまず iframe をつくる.
*/
function clickOK(){
- if( !elmForm || !elmIframe || isUploading === true ) return false;
- elmProgress.innerHTML = 'uploading.';
- isUploading = true;
- submit();
+ if( !app.elmForm || !app.elmIframe || app.isUploading === true ) return false;
+ app.submit();
return false;
}
- /*
- * form の target に iframe を指定したのち submit();
- */
- function submit(){
- try {
- elmForm.submit();
- } catch( e ){
- elmProgress.innerHTML = 'submit() err..';
- isUploading = false;
- instance.addTimer( clickCancel , 3000, true );
- return;
- }
-
- if( UA.isIE ){
- elmIframe.onreadystatechange = detectIframe;
- } else {
- elmIframe.onload = onLoad;
- }
- elmProgress.innerHTML = 'uploading..';
- }
- /*
- * ie の 場合、readyState をチェック.
- */
- function detectIframe(){
- if ( elmIframe.readyState === 'complete' ){
- elmIframe.onreadystatechange = new Function();
- elmIframe.onreadystatechange = null;
- onLoad();
- };
- };
- function onLoad(){
- try {
- console.log( ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).document.body.innerHTML );
- } catch(e){
-
- }
- elmIframe.onload = null;
- ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();
- elmProgress.innerHTML = 'success!';
- instance.addTimer( clickCancel , 1000, true );
- isUploading = false;
- };
-
- function detectForm(){
- elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];
- if( elmForm){
- var _inputList = elmForm.getElementsByTagName( 'input' ),
- _input;
- for( var i = _inputList.length; i; ){
- _input = _inputList[ --i ];
- if( _input.type === 'submit' ){
- _input.style.display = 'none';
- };
- if( _input.name === 'json' && Type.isString( json ) === true ){
- _input.value = json;
- };
- };
- instance.removeTimer( detectForm );
- Util.createIframe( TARGET_FRAME_NAME, onCreateIframe );
- elmProgress.innerHTML = 'create iframe';
- };
- };
- function onCreateIframe( _iframe ){
- elmContainer.appendChild( _iframe );
- elmIframe = _iframe;
- elmForm.target = _iframe.name;
- elmProgress.innerHTML = '';
- instance.onPaneResize( windowW, windowH );
- };
+
function clickCancel(){
- if( isUploading === true) return false;
+ if( app.isUploading === true ) return false;
PanelConsole.shutdown();
return false;
};
+ function publishUpdate(){
+ if( model ){
+ model.publish( comboboxPublish.selectIndex() === 1 );
+ elmInput.value = model.getJsonPostString().replace( /\n/g, '' );
+ };
+ };
/* grobal method */
this.MIN_WIDTH = 320;
this.MIN_HEIGHT = 320;
this.onInit = function(){
- instance.rootElement.id = 'panel-console-wrapper';
- instance.rootElement.className = 'console-wrapper';
- instance.rootElement.innerHTML = [
+ app.rootElement.id = 'panel-console-wrapper';
+ app.rootElement.className = 'console-wrapper';
+ app.rootElement.innerHTML = [
'<div id="panel-console-header" class="console-header">Create New Panel (dev)</div>',
'<div id="panel-console" class="console-inner">',
'<div id="newpanel"></div>',
+ '<div id="panel-console-publish" class="field">',
+ '<span class="field-label">Publish:</span>',
+ '<span id="panel-console-publish-value" class="combobox"></span>',
+ '</div>',
'<div class="console-button-container">',
'<div id="panel-console-post-button" class="button console-submit-button">post</div>',
'<div id="panel-console-cancel-button" class="button console-cancel-button">cancel</div>',
'</div>'
].join( '' );
- instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+ app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
- delete instance.onInit;
- }
- this.onOpen = function( w, h, _json ){
- elmContainer = document.getElementById( 'newpanel' );
- elmProgress = document.getElementById( 'panel-console-progress' );
-
- instance.addMouseEventListener( document.getElementById( 'panel-console-post-button' ), 'click', clickOK );
- instance.addMouseEventListener( document.getElementById( 'panel-console-cancel-button' ), 'click', clickCancel );
- /*
- * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.
- */
- elmScript = document.createElement( 'script' );
- document.body.appendChild( elmScript );
- elmScript.type = 'text\/javascript';
- elmScript.src = pettanr.CONST.CREATE_PANEL_JS;
+ delete app.onInit;
+ };
+ this.elmProgressID = 'panel-console-progress';
+ this.elmUploaderID = 'newpanel';
+ this.elmIframeName = 'targetFrameNewPanel'
+ this.scriptSrc = pettanr.CONST.CREATE_PANEL_JS;
+ this.hideUploader = false;
+ FormApplicationHelper( this );
+ this.onFormReady = function(){
+ app.onPaneResize( windowW, windowH );
- instance.addTimer( detectForm, 250 );
- instance.onPaneResize( w, h );
+ var _inputList = app.elmForm.getElementsByTagName( 'input' ),
+ _input;
+ for( var i = _inputList.length; i; ){
+ _input = _inputList[ --i ];
+ if( _input.type === 'submit' ){
+ _input.style.display = 'none';
+ };
+ if( _input.name === 'json' ){
+ elmInput = _input;
+ publishUpdate();
+ };
+ };
+
+ delete app.onFoemReady;
+ };
+ this.submitError = function(){
+ app.addTimer( clickCancel , 5000, true );
+ };
+ this.submitSuccess = function(){
+ app.addTimer( clickCancel , 5000, true );
+ };
+ this.onOpen = function( w, h, _model ){
+ var ui = app.createUIGroup(),
+ elm = document.getElementById( 'panel-console-publish' );
+ if( _model ){
+ comboboxPublish = ui.createCombobox( elm, publishUpdate );
+ comboboxPublish.createOption( 'only me', '0', _model.publish() === false );
+ comboboxPublish.createOption( 'publish', '1', _model.publish() === true );
+ model = _model;
+ } else {
+ elm.parentNode.removeChild( elm );
+ };
- json = _json;
+ buttonPost = ui.createButton( document.getElementById( 'panel-console-post-button' ), clickOK );
+ buttonClose = ui.createButton( document.getElementById( 'panel-console-cancel-button' ), clickCancel );
- elmProgress.innerHTML = 'loading form.';
+ app.onPaneResize( w, h );
+ app.fetchScript();
};
this.onPaneResize = function( _windowW, _windowH ){
windowW = _windowW;
windowH = _windowH;
- instance.rootElement.style.cssText = [
- 'left:', Math.floor( ( _windowW - instance.rootElement.offsetWidth ) /2 ), 'px;',
- 'top:', Math.floor( ( _windowH - instance.rootElement.offsetHeight ) /2 ), 'px;'
+ app.rootElement.style.cssText = [
+ 'left:', Math.floor( ( _windowW - app.rootElement.offsetWidth ) /2 ), 'px;',
+ 'top:', Math.floor( ( _windowH - app.rootElement.offsetHeight ) /2 ), 'px;'
].join( '' );
};
this.onClose = function(){
- elmHeader = elmProgress = elmForm = elmUploader = instance = null;
- isUploading = false;
+ app.destroyHelper();
+ model && model.destroy();
+ app = model = comboboxPublish = buttonPost = buttonClose = elmInput = null;
};
}, true, true, 'Panel Console', 'panelConsole', null, '#603CBA' );
-})( pettanr, gOS, window );
+})( pettanr, gOS, window, document );
/*\r
* pettanR system.js\r
- * version 0.5.9\r
+ * version 0.5.16\r
* \r
* \r
* Type\r
* \r
+ * UA\r
+ * \r
* Util\r
* \r
- * UA\r
+ * CSS\r
* \r
* gadgetOS\r
* author:\r
}\r
};\r
\r
+/*\r
+ * UA\r
+ * \r
+ * detect userAgent\r
+ * detect plug in\r
+ */\r
+ var UA = ( function(){\r
+ var ua = (function(){\r
+ var acme = {};\r
+ \r
+ var n = navigator;\r
+ var dua = n.userAgent;\r
+ var dav = n.appVersion;\r
+ var tv = parseFloat(dav);\r
+ acme.isOpera = (dua.indexOf("Opera") >= 0) ? tv: undefined;\r
+ acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;\r
+ acme.isWebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
+ acme.isChrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
+ acme.isGecko = (dua.indexOf("Gecko\/") >= 0) ? parseFloat(dua.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, '$1$2' )) : undefined;\r
+ var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
+ if(index && !acme.isChrome){\r
+ acme.isSafari = parseFloat(dav.split("Version/")[1]);\r
+ if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){\r
+ acme.isSafari = 2;\r
+ }\r
+ }\r
+ if(document.all && !acme.isOpera){\r
+ acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;\r
+ }\r
+ \r
+ return acme;\r
+ })(),\r
+ isIE = navigator.userAgent.toLowerCase().indexOf( 'msie') !== -1,\r
+ ieVersion = isIE === true ? parseInt( navigator.appVersion.toLowerCase().replace( /.*msie[ ]/, '').match( /^[0-9]+/)) : 0,\r
+ ieRenderingVersion = ieVersion === 8 ? document.documentMode : ieVersion,\r
+ isStanderdMode = document.compatMode === 'CSS1Compat',\r
+ ActiveX = ( function(){\r
+ if( isIE === false || ieVersion > 8 ) return false;\r
+ var b = document.body,\r
+ c = b.className || '',\r
+ x,\r
+ ret = undefined, //pettanr.URL_PARAMS.ActiveX,\r
+ ns = 'pettanr-ActiveX-',\r
+ enabled = 'enabled',\r
+ disabled = 'disabled';\r
+ if( ret !== true && ret !== false){\r
+ if( b.className.indexOf( ns + enabled ) !== -1 ) return true;\r
+ if( b.className.indexOf( ns + disabled ) !== -1 ) return false;\r
+ x = document.createElement( 'div' );\r
+ b.appendChild(x);\r
+ x.style.cssText = 'width:1px;height:1px;line-height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';\r
+ ret = x.offsetHeight > 1;\r
+ b.removeChild(x);\r
+ }\r
+ b.className += [ c !== '' ? ' ' : c, ns, ret === true ? enabled : disabled ].join( '');\r
+ return ret;\r
+ })(),\r
+ VML = ( function(){\r
+ if( ActiveX === false || isIE === false || ieVersion > 8) return false;\r
+ var globalObjectName = 'detect_activex',//Util.createGlobalUniqueName(),\r
+ script,\r
+ id = 'detectVML';\r
+ document.write( [ '<!--[if gte vml 1]><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
+ if( window[ globalObjectName ] === 1 ){\r
+ script = document.getElementById( id );\r
+ script.parentNode.removeChild( script );\r
+ window[ globalObjectName ] = null;\r
+ return true;\r
+ }\r
+ return false;\r
+ })(),\r
+ isStandAloneMode = ( function(){\r
+ if( isIE === false) return false;\r
+ if( VML === true) return false;\r
+ var globalObjectName = 'detect_standalone', //Util.createGlobalUniqueName(),\r
+ script,\r
+ id = 'detectStandAlone';\r
+ document.write( [ '<!--[if IE ', Math.floor( ieVersion ), ']><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
+ if( window[globalObjectName] === 1){\r
+ script = document.getElementById( id);\r
+ script.parentNode.removeChild( script);\r
+ window[globalObjectName] = null;\r
+ return false;\r
+ }\r
+ return true;\r
+ })();\r
+ return {\r
+ IE: ua.isIE,\r
+ GECKO: ua.isGecko,\r
+ OPERA: ua.isOpera,\r
+ KHTML: ua.isKhtml,\r
+ WEBKIT: ua.isWebKit,\r
+ CHROME: ua.isChrome,\r
+ isIE: isIE,\r
+ ieVersion: ieVersion,\r
+ ieRenderingVersion: ieRenderingVersion,\r
+ isStanderdMode: isStanderdMode,\r
+ ACTIVEX: ActiveX,\r
+ VML: VML,\r
+ STANDALONE: isStandAloneMode,\r
+ VENDER_PREFIX: ( function() {\r
+ var ua = navigator.userAgent.toLowerCase();\r
+ if ( ua.indexOf('opera') !== -1 ){\r
+ return 'O';\r
+ } else if ( ua.indexOf('msie') !== -1 ){\r
+ return 'ms';\r
+ } else if ( ua.indexOf('webkit') !== -1 ){\r
+ return 'webkit';\r
+ } else if ( navigator.product === 'Gecko' ){\r
+ return 'Moz';\r
+ }\r
+ return '';\r
+ })(),\r
+ startVML: function(){\r
+ delete UA.startVML;\r
+ if( UA.VML !== true) return false;\r
+ if (!document.namespaces["v"]) {\r
+ document.namespaces.add("v", "urn:schemas-microsoft-com:vml", "#default#VML");\r
+ }\r
+ document.createStyleSheet().cssText = "v\:shape,v\:image{behavior:url(#default#VML);display:block;};";\r
+ }\r
+ }\r
+ })();\r
+\r
+\r
/* ----------------------------------------------------\r
* Util\r
* \r
* getGrobalObjectName()\r
* \r
*/\r
- var Util = ( function(){\r
- var doc = window.document,\r
- body = doc.getElementsByTagName( 'body' )[ 0 ];\r
+ var Util = ( function( window, document, undefined ){\r
+ var body = document.getElementsByTagName( 'body' )[ 0 ];\r
\r
var ELM_SIZE_GETTER = ( function(){\r
- var ret = doc.createElement( 'DIV' );\r
+ var ret = document.createElement( 'div' );\r
body.appendChild( ret );\r
\r
- ret.id = 'elmSizeGetter';\r
- ret.style.cssText = 'position:absolute;left:0;top:-9999px;visibility:hidden';\r
+ ret.id = 'elmSizeGetter';\r
+ ret.style.cssText = 'position:absolute;left:0;top:-9999px;visibility:hidden';\r
\r
body.removeChild( ret );\r
return ret;\r
})(),\r
CLEAN_TARGET_ELEMENT = 'script,style,object,applet,embed,iframe,frame,base,bgsound,frameset,listing'.split( ',' );\r
\r
- /* clean comment node */\r
- cleanCommnetNode();\r
- \r
- /* clean noscript */\r
- ( function(){\r
- var nodeNoscript = doc.getElementsByTagName( 'noscript' ),\r
- noscript;\r
- for( var i=0; i<nodeNoscript.length; ++i ){\r
- noscript = nodeNoscript[i];\r
- noscript.parentNode && noscript.parentNode.removeChild( noscript );\r
- };\r
- })();\r
- \r
- function cleanCommnetNode( _targetElm ){\r
- search( _targetElm || body );\r
- \r
- function search( _elm ){\r
- if( !_elm ) return;\r
- if( _elm.nodeType === 8 ){\r
- _elm.parentNode.removeChild( _elm );\r
- return;\r
+ var UNIT_RATIO = ( function( elm ){\r
+ var ret = {},\r
+ unit,\r
+ units = 'cm,mm,in,pt,pc'.split( ',' );\r
+ \r
+ body.appendChild( elm );\r
+ \r
+ for( var i=units.length; i; ){\r
+ unit = units[ --i ];\r
+ elm.style.width = 1000 + unit;\r
+ ret[ unit ] = elm.offsetWidth / 1000;\r
};\r
- var i, l, _children = _elm.childNodes, _array = [];\r
- if( _children && typeof _children.length === 'number' ){\r
- // liveNode > array\r
- for( i=0, l=_children.length; i<l; ++i ){\r
- _array.push( _children[ i ] );\r
- };\r
- while( _array.length !== 0 ){\r
- search( _array.shift() );\r
- };\r
+ elm.style.cssText = '';\r
+ \r
+ body.removeChild( elm );\r
+ return ret;\r
+ })( ELM_SIZE_GETTER );\r
+ \r
+ var FONT_SIZE_RATIO = ( function( elm ){\r
+ var ret = {},\r
+ size,\r
+ list = 'xx-large,x-large,large,larger,medium,small,smaller,x-small,xx-small'.split( ',' );\r
+ \r
+ body.appendChild( elm );\r
+ elm.style.cssText = 'font-size:100px;line-height:1em;';\r
+ elm.appendChild( document.createTextNode( 'X' ) );\r
+ \r
+ base = elm.offsetHeight;\r
+ \r
+ for( var i = list.length; i; ){\r
+ size = list[ --i ];\r
+ elm.style.fontSize = size;\r
+ ret[ size ] = elm.offsetHeight;// / base;\r
};\r
+ \r
+ elm.style.cssText = '';\r
+ elm.removeChild( elm.firstChild );\r
+ body.removeChild( elm );\r
+ return ret;\r
+ })( ELM_SIZE_GETTER );\r
+ \r
+ var REG_LARGE = /[A-Z]/g;\r
+ \r
+ /* clean comment node */\r
+ window.setTimeout( function(){\r
+ Util.cleanCommnetNode();\r
+ \r
+ /* clean noscript */\r
+\r
+ var noscripts = Util.copyArray( document.getElementsByTagName( 'noscript' ) ),\r
+ ns;\r
+ for( var i = noscripts.length; i; ){\r
+ ns = noscripts[ --i ];\r
+ ns.parentNode && ns.parentNode.removeChild( ns );\r
};\r
- };\r
+ }, 0 );\r
\r
return {\r
+ parse: function( v ){\r
+ if( Type.isString( v ) === true ){\r
+ if( v === 'true' ) return true;\r
+ if( v === 'false' ) return false;\r
+ if( v === 'null' ) return null;\r
+ if( v === 'undefined' ) return undefined;\r
+ if( v === 'NaN' ) return NaN;\r
+ if( v === '' ) return v;\r
+ var _v = v.split( ' ' ).join( '' ),\r
+ n = _v - 0;\r
+ if( '' + n === _v || '' + n === '0' + _v ) return n - 0;\r
+ };\r
+ return v;\r
+ },\r
extend: function( baseInstance, extend ){\r
for( var key in extend ){\r
if( Type.isUndefined( baseInstance[ key ] ) === true ){\r
baseInstance[ key ] = extend[ key ];\r
} else {\r
alert( 'extend error' );\r
- }\r
- }\r
+ };\r
+ };\r
return baseInstance;\r
}, \r
- cleanCommnetNode: cleanCommnetNode,\r
+ cleanCommnetNode: function ( _targetElm ){\r
+ search( _targetElm || body );\r
+ \r
+ function search( _elm ){\r
+ if( !_elm ) return;\r
+ if( _elm.nodeType === 8 ){\r
+ _elm.parentNode.removeChild( _elm );\r
+ return;\r
+ };\r
+ if( _elm.nodeType === 1 ){\r
+ var _array = Util.copyArray( _elm.childNodes ); // liveNode > array\r
+ while( _array.length > 0 ) search( _array.shift() );\r
+ };\r
+ };\r
+ },\r
cleanElement: function( _targetElm ){\r
- var _nodes, _elm, _array, j, m;\r
- for( var i=0, l=CLEAN_TARGET_ELEMENT.length; i<l; ++i){\r
- _nodes = _targetElm.getElementsByTagName( CLEAN_TARGET_ELEMENT[ i]);\r
- _array = [];\r
- for( j=0, m = _nodes.length; j<m; ++j){\r
- _array.push( _nodes[ j]);\r
- }\r
- for( j=0, m = _array.length; j<m; ++j){\r
- _elm = _nodes[ j];\r
- _elm.parentNode && _elm.parentNode.removeChild( _elm);\r
- }\r
- }\r
- cleanCommnetNode( _targetElm );\r
+ var _array, _elm, j, _css;\r
+ for( var i = CLEAN_TARGET_ELEMENT.length; i; ){\r
+ _array = Util.copyArray( _targetElm.getElementsByTagName( CLEAN_TARGET_ELEMENT[ --i ] ) );\r
+ for( j = _array.length; j; ){\r
+ _elm = _nodes[ --j ];\r
+ _elm.parentNode && _elm.parentNode.removeChild( _elm );\r
+ };\r
+ };\r
+ Util.cleanCommnetNode( _targetElm );\r
+ \r
if( UA.isIE === false ) return;\r
- _nodes = _targetElm.all || _targetElm.getElementsByName( '*' );\r
- for( i=0, l = _nodes.length; i<l; ++i){\r
- _elm = _nodes[ i ];\r
- _elm.style.filter = '';\r
- _elm.style.behavior = '';\r
- }\r
+ _nodes = _targetElm.all || _targetElm.getElementsByTagName( '*' );\r
+ for( i = _nodes.length; i; ){\r
+ _elm = _nodes[ --i ];\r
+ _css = Util.getInlineStyle( _elm );\r
+ _css.filter = null;\r
+ _css.behavior = null;\r
+ _elm.style.cssText = Util.toCssText( _css );\r
+ };\r
+ },\r
+ camelize: function( cssProp ){\r
+ var parts = cssProp.split( ' ' ).join( '' ).split( '-' ),\r
+ l = parts.length;\r
+ if( l === 1 ) return parts[ 0 ];\r
+ \r
+ var camelized = cssProp.charAt(0) === '-'\r
+ ? parts[ 0 ].charAt( 0 ).toUpperCase() + parts[ 0 ].substring( 1 )\r
+ : parts[ 0 ];\r
+ \r
+ for( var i = 1; i < l; ++i ){\r
+ camelized += parts[ i ].charAt( 0 ).toUpperCase() + parts[ i ].substring( 1 );\r
+ };\r
+ return camelized;\r
+ },\r
+ uncamelize: function( str ){\r
+ return str.split( ' ' ).join( '' ).replace( REG_LARGE, '-$&' ).toLowerCase();\r
+ },\r
+ pxTo: function( _px, _unit ){\r
+ return _px / ( UNIT_RATIO[ _unit ] || 1 );\r
+ },\r
+ toPx: function( x, _unit ){\r
+ return x * ( UNIT_RATIO[ _unit ] || 1 );\r
+ },\r
+ absoluteFontSizeToPx: function( fontsize ){\r
+ return FONT_SIZE_RATIO[ fontsize ] || 0;\r
},\r
getElementSize: function( _elm ){\r
if( Type.isHTMLElement( _elm ) === false ){\r
if (image[key] && image[key].src === image.src) {\r
return image[key];\r
};\r
- if( doc.uniqueID ){ // for IE\r
+ if( document.uniqueID ){ // for IE\r
run = image.runtimeStyle;\r
mem = { w: run.width, h: run.height }; // keep runtimeStyle\r
run.width = "auto"; // override\r
\r
return size;\r
},\r
- getAbsolutePath: function( path) {\r
- var e = document.createElement("div");\r
- e.innerHTML = '<a href=\"' + path + '\" />';\r
- return e.firstChild.href;\r
+ getAbsolutePath: function( path ){\r
+ var elm = document.createElement('div');\r
+ body.appendChild( elm );\r
+ elm.innerHTML = '<a href=\"' + path + '\" />';\r
+ body.removeChild( elm );\r
+ return elm.firstChild.href;\r
},\r
getAbsolutePosition: function( _elm ){\r
// Find the destination's position\r
},\r
pullHtmlAsTemplete: function( html ){\r
var elm = document.createElement( 'div' );\r
+ body.appendChild( elm );\r
elm.innerHTML = html;\r
+ body.removeChild( elm );\r
return elm.firstChild;\r
},\r
getElementsByClassName: function( _elm, _className, opt_tagName ){\r
- var _all = !opt_tagName || opt_tagName === '*',\r
- _nodes = _all === true ? ( _elm.all || _elm.getElementsByTagName( '*' )) : _elm.getElementsByTagName( opt_tagName ),\r
- _node, _classes, ret = [];\r
- for( var i=0, l = _nodes.length; i<l; ++i ){\r
- _node = _nodes[ i ];\r
- _node.nodeType === 1 && Util.hasClassName( _node, _className ) === true && ret.push( _node );\r
- }\r
- return ret;\r
- \r
- var sp = ' ', cn,\r
- _cnames = _className.replace( /\s+/g, sp ).split( sp ),\r
- _nodes = Util.copyArray( _livenodes );\r
- \r
- for( var i = _cnames.length; i; ){\r
- cn = _cnames[ --i ];\r
- for( var j = _nodes.length; j > 0; ){\r
- _node = _nodes[ --j ];\r
- if( _node.nodeType !== 1 || Util.hasClassName( _node, cn ) === false ){\r
- _nodes.split( j, 1 );\r
- --j;\r
- };\r
+ var _all = !opt_tagName || opt_tagName === '*',\r
+ _livenodes = _all === true ? ( _elm.all || _elm.getElementsByTagName( '*' )) : _elm.getElementsByTagName( opt_tagName ),\r
+ _nodes = Util.copyArray( _livenodes );\r
+ for( var j = 0; j < _nodes.length; ){\r
+ _node = _nodes[ j ];\r
+ if( _node.nodeType !== 1 || Util.hasClassName( _node, _className ) === false ){\r
+ _nodes.splice( j, 1 );\r
+ } else {\r
+ ++j;\r
};\r
};\r
+ return _nodes;\r
},\r
getChildIndex: function( _parent, _child ){\r
- var _children = _parent.getElementsByTagName( _child.tagName ),\r
- l = _children.length;\r
- for( var i=0; i<l; ++i ){\r
- if( _children[ i ] === _child ) return i;\r
+ var _children = _parent.getElementsByTagName( _child.tagName );\r
+ for( var i = _children.length; i; ){\r
+ if( _children[ --i ] === _child ) return i;\r
};\r
return -1;\r
},\r
hasClassName: function( _elm, _className ){\r
- return Util.getIndex( ( _elm.className || '' ).split( ' ' ), _className ) !== -1;\r
+ var cnames = ( _elm.className || '' ).split( ' ' ),\r
+ _cnames = _className.split( ' ' ),\r
+ cname;\r
+ for( var i = _cnames.length; i; ){\r
+ cname = _cnames[ --i ];\r
+ if( cname === '' ) continue;\r
+ if( Util.getIndex( cnames, cname ) === -1 ) return false;\r
+ };\r
+ return true;\r
},\r
addClass: function( _elm, _className ){\r
if( Util.hasClassName( _elm, _className ) === false ){\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
- }\r
+ Util.getIndex = function( _array, _element ){\r
+ return _array.indexof( _element );\r
+ };\r
} else {\r
- Util.getIndex = function( _array, _element){\r
- for( var i=0, l = _array.length; i<l; ++i){\r
- if( _array[ i] === _element) return i;\r
- }\r
- return -1; \r
- }\r
- }\r
- return Util.getIndex( _array, _element);\r
+ Util.getIndex = function( _array, _element ){\r
+ for( var i = _array.length; i; ){\r
+ if( _array[ --i ] === _element ) return i;\r
+ };\r
+ return -1;\r
+ };\r
+ };\r
+ return Util.getIndex( _array, _element );\r
},\r
copyArray: function( _array ){\r
- var ret = new Array( l );\r
- for( var i=0, l = _array.length; i<l; ++i ){\r
+ var l = _array.length,\r
+ ret = new Array( l );\r
+ for( var i=0; i<l; ++i ){\r
ret[ i ] = _array[ i ];\r
}\r
return ret;\r
*/\r
createGlobalUniqueName: function(){\r
var randomKey = null;\r
- while(true) {\r
+ while( true ){\r
randomKey = '_uniqueName'+(''+Math.random()).replace(/\./,'');\r
if( typeof window[randomKey] === 'undefined'){\r
break;\r
callback( el );\r
};\r
}\r
- }\r
- })();\r
+ };\r
+ })( window, document );\r
\r
\r
-/*\r
- * UA\r
- * \r
- * detect userAgent\r
- * detect plug in\r
- */\r
- var UA = ( function(){\r
- var ua = (function(){\r
- var acme = {};\r
- \r
- var n = navigator;\r
- var dua = n.userAgent;\r
- var dav = n.appVersion;\r
- var tv = parseFloat(dav);\r
- acme.isOpera = (dua.indexOf("Opera") >= 0) ? tv: undefined;\r
- acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;\r
- acme.isWebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
- acme.isChrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
- acme.isGecko = (dua.indexOf("Gecko\/") >= 0) ? parseFloat(dua.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, '$1$2' )) : undefined;\r
- var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
- if(index && !acme.isChrome){\r
- acme.isSafari = parseFloat(dav.split("Version/")[1]);\r
- if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){\r
- acme.isSafari = 2;\r
- }\r
- }\r
- if(document.all && !acme.isOpera){\r
- acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;\r
- }\r
+var CSS = ( function( window, documwnt, undefined ){\r
+ var CORON = ':',\r
+ EMPTY = '',\r
+ SEMICORON = ';';\r
+ UNITS = 'px,cm,mm,in,pt,pc,em,%'.split( ',' ),\r
+ CLIP_SEPARATOR = UA.isIE === true && UA.ieVersion < 8 ? ' ' : ',';\r
+\r
+ var SPECIAL = ( function(){\r
+ var _special = {};\r
+ if( UA.isIE === true && UA.ieVersion < 9 ){\r
+ if( UA.ACTIVEX === true ){\r
+ // _special.opacity = 'ActiveXOpacity';\r
+ _special.setFilters = function( style ){\r
+ var filters = ( style.filter || '' ).split( ') ' ),\r
+ data = {},\r
+ i = filters.length,\r
+ filter, names, props, prop, j, l, key, v;\r
+ for( ; i; ){\r
+ filter = filters[ --i ].split( ' ' ).join( '' ).split( '(' );\r
+ if( filter.length !== 2 ) continue;\r
+ names = filter[ 0 ].split( '.' ); // progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=120,strength=9)\r
+ props = filter[ 1 ].split( ',' ); // \r
+ filter = {};\r
+ for( j = 0, l = props.length; j < l; ++j ){\r
+ prop = props[ j ].split( '=' );\r
+ key = prop[ 0 ].toLowerCase();\r
+ v = prop[ 1 ];\r
+ filter[ key ] = v; //v.charAt( 0 ) === '#' ? v : parseInt( v );\r
+ };\r
+ data[ names[ names.length - 1 ] ] = filter;\r
+ };\r
+ \r
+ style.filter = data;\r
+ style.opacity = data.alpha && data.alpha.opacity ? data.alpha.opacity / 100 : 1;\r
+ };\r
+ _special.hasLayout = function( elm ){\r
+ return elm.currentStyle.hasLayout;\r
+ };\r
+ } else {\r
+ _special.opacity = null;\r
+ };\r
+ } else {\r
+ var style = document.documentElement.style;\r
+ _special.opacity = style.opacity !== undefined ? 'opacity' : \r
+ style.MozOpacity !== undefined ? 'MozOpacity' :\r
+ style.KhtmlOpacity !== undefined ? 'KhtmlOpacity' :\r
+ style[ '-khtml-opacity' ] !== undefined ? 'KhtmlOpacity' : null;\r
+\r
+ // if( style.backgroundPositionX === undefined ){\r
+ _special.setBackgroundPositionXY = function( style ){\r
+ var bgp = ( style.backgroundPosition || '' ).split( ' ' );\r
+ style.backgroundPositionX = bgp[ 0 ] || 0;\r
+ style.backgroundPositionY = bgp[ 1 ] || 0;\r
+ };\r
+ // };\r
+ if( style.clipTop === undefined && style[ 'clip-top' ] === undefined ){\r
+ _special.setClipTopRightBottomLeft = function( style ){\r
+ var clip = style.clip || '';\r
+ if( clip.indexOf( 'rect(' ) === -1 ){\r
+ style.clipTop = 0;\r
+ style.clipRight = 0;\r
+ style.clipBottom = 0;\r
+ style.clipLeft = 0;\r
+ return;\r
+ };\r
+ clip = clip.split( '(' )[ 1 ].split( ')' )[ 0 ].split( clip.indexOf( ',' ) !== -1 ? ',' : ' ' );\r
+ ret.clipTop = clip[ 0 ];\r
+ ret.clipRight = clip[ 1 ];\r
+ ret.clipBottom = clip[ 2 ];\r
+ ret.clipLeft = clip[ 3 ];\r
+ };\r
+ };\r
+ };\r
\r
- return acme;\r
- })(),\r
- isIE = navigator.userAgent.toLowerCase().indexOf( 'msie') !== -1,\r
- ieVersion = isIE === true ? parseInt( navigator.appVersion.toLowerCase().replace( /.*msie[ ]/, '').match( /^[0-9]+/)) : 0,\r
- ieRenderingVersion = ieVersion === 8 ? document.documentMode : ieVersion,\r
- isStanderdMode = document.compatMode === 'CSS1Compat',\r
- ActiveX = ( function(){\r
- if( isIE === false || ieVersion > 8 ) return false;\r
- var b = document.body,\r
- c = b.className || '',\r
- x,\r
- ret = undefined, //pettanr.URL_PARAMS.ActiveX,\r
- ns = 'pettanr-ActiveX-',\r
- enabled = 'enabled',\r
- disabled = 'disabled';\r
- if( ret !== true && ret !== false){\r
- if( Util.hasClassName( b, ns + enabled) === true ) return true;\r
- if( Util.hasClassName( b, ns + disabled) === true ) return false;\r
- x = document.createElement( 'div' );\r
- b.appendChild(x);\r
- x.style.cssText = 'width:1px;height:1px;line-height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';\r
- ret = x.offsetHeight > 1;\r
- b.removeChild(x);\r
- }\r
- b.className += [ c !== '' ? ' ' : c, ns, ret === true ? enabled : disabled ].join( '');\r
- return ret;\r
- })(),\r
- VML = ( function(){\r
- if( ActiveX === false || isIE === false || ieVersion > 8) return false;\r
- var globalObjectName = Util.createGlobalUniqueName(),\r
- script,\r
- id = 'detectVML';\r
- document.write( [ '<!--[if gte vml 1]><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
- if( window[globalObjectName] === 1){\r
- script = document.getElementById( id);\r
- script.parentNode.removeChild( script);\r
- window[globalObjectName] = null;\r
- return true;\r
- }\r
- return false;\r
- })(),\r
- isStandAloneMode = ( function(){\r
- if( isIE === false) return false;\r
- if( VML === true) return false;\r
- var globalObjectName = Util.createGlobalUniqueName(),\r
- script,\r
- id = 'detectStandAlone';\r
- document.write( [ '<!--[if IE ', Math.floor( ieVersion ), ']><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
- if( window[globalObjectName] === 1){\r
- script = document.getElementById( id);\r
- script.parentNode.removeChild( script);\r
- window[globalObjectName] = null;\r
- return false;\r
- }\r
- return true;\r
- })();\r
- return {\r
- IE: ua.isIE,\r
- GECKO: ua.isGecko,\r
- OPERA: ua.isOpera,\r
- KHTML: ua.isKhtml,\r
- WEBKIT: ua.isWebKit,\r
- CHROME: ua.isChrome,\r
- isIE: isIE,\r
- ieVersion: ieVersion,\r
- ieRenderingVersion: ieRenderingVersion,\r
- isStanderdMode: isStanderdMode,\r
- ACTIVEX: ActiveX,\r
- VML: VML,\r
- STANDALONE: isStandAloneMode,\r
- VENDER_PREFIX: ( function() {\r
- var ua = navigator.userAgent.toLowerCase();\r
- if ( ua.indexOf('opera') !== -1 ){\r
- return 'O';\r
- } else if ( ua.indexOf('msie') !== -1 ){\r
- return 'ms';\r
- } else if ( ua.indexOf('webkit') !== -1 ){\r
- return 'webkit';\r
- } else if ( navigator.product === 'Gecko' ){\r
- return 'Moz';\r
- }\r
- return '';\r
- })(),\r
- startVML: function(){\r
- delete UA.startVML;\r
- if( UA.VML !== true) return false;\r
- if (!document.namespaces["v"]) {\r
- document.namespaces.add("v", "urn:schemas-microsoft-com:vml", "#default#VML");\r
- }\r
- document.createStyleSheet().cssText = "v\:shape,v\:image{behavior:url(#default#VML);display:block;};";\r
- }\r
+ return _special;\r
+ })();\r
+ \r
+ function cssToObject( css ){\r
+ var ret = {}, i, nv, n, v, parse = Util.parse, isNumber = Type.isNumber;\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[ Util.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
+ ];\r
+ for( i=list.length; i; ){\r
+ v = list[ --i ];\r
+ name = list[ --i ];\r
+ ret[ name ] = v;\r
+ };\r
+ return ret;\r
+ })();\r
+ \r
+ var PARAMS = ( function(){\r
+ ret = {};\r
+ register( ret.percent = {},\r
+ 'marginBottom,marginLeft,marginRight,marginTop,paddingBottom,paddingLeft,paddingRight,paddingTop,fontSize,textIndent'\r
+ );\r
+ register( ret.offset = {},\r
+ 'height,width,bottom,left,right,top'\r
+ ); \r
+ register( ret.size = {},\r
+ 'borderBottomWidth,borderLeftWidth,borderRightWidth,borderTopWidth,letterSpacing'\r
+ );\r
+ register( ret.color = {},\r
+ 'backgroundColor,borderBottomColor,borderLeftColor,borderRightColor,borderTopColor,color'\r
+ );\r
+ register( ret.region = {},\r
+ 'margin,padding,borderWidth,borderColor'\r
+ ); \r
+ register( ret.special = {},\r
+ 'clip,backgroundPosition,opacity,lineHeight,zIndex'\r
+ );\r
+ register( ret.unit = {}, 'px,cm,mm,in,pt,pc,em,%' );\r
+ \r
+ register( ret.margin = {}, 'marginBottom,marginLeft,marginRight,marginTop,paddingBottom' );\r
+ register( ret.padding = {}, 'paddingBottom,paddingLeft,paddingRight,paddingTop' );\r
+ register( ret.borderWidth = {}, 'borderBottomWidth,borderLeftWidth,borderRightWidth,borderTopWidth' );\r
+ register( ret.borderColor = {}, 'borderBottomColor,borderLeftColor,borderRightColor,borderTopColor' );\r
+ \r
+ function register( obj, params ){\r
+ params = params.split( ',' );\r
+ for( var i=params.length; i; ) obj[ params[ --i ] ] = true;\r
+ };\r
+ return ret;\r
+ })();\r
+ \r
+ /*\r
+ * \r
+ */\r
+ var PropertyClass = function( name, value, unit, pxPerEm ){\r
+ this.name = name;\r
+ this.value = value;\r
+ this.unit = unit;\r
+ this.pxPerEm = pxPerEm; // XXpx = 1em;\r
+ };\r
+ PropertyClass.prototype = {\r
+ name: '',\r
+ value: 0,\r
+ pxPerEm: 12, // 1em === ??px\r
+ unit: '',\r
+ equal: function( prop ){\r
+ if( this.unit === prop.unit ){\r
+ return this.value === prop.value;\r
+ };\r
+ return Math.abs( this._toPx() - prop._toPx() ) < 1;\r
+ },\r
+ convert: function( prop ){\r
+ var u = prop.unit, v;\r
+ if( this.unit === u ) return;\r
+ this.value = v = this._toPx();\r
+ this.unit = u;\r
+ if( u !== px ){\r
+ this.value = u === 'em' ? v / this.pxPerEm : Util.pxTo( v, u );\r
+ };\r
+ },\r
+ setValue: function( v ){\r
+ this.value = v;\r
+ },\r
+ getValue: function(){\r
+ return this.value;\r
+ },\r
+ getOffset: function( prop ){\r
+ return prop.value - this.value;\r
+ },\r
+ getUnit: function(){\r
+ return this.unit;\r
+ },\r
+ getValueText: function(){\r
+ return this.value === 0 ? '0' : this.value + this.unit;\r
+ },\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
+ _toPx: function(){\r
+ var v = this.value, u = this.unit;\r
+ if( u === px ) return v;\r
+ if( u === 'em' ) return v * this.pxPerEm;\r
+ if( u === '' && this.name === 'lineHeight' ) return v * this.pxPerEm;\r
+ return Util.toPx( v, u );\r
+ },\r
+ isValid: function( t ){\r
+ t = t || this;\r
+ var n = t.name,\r
+ v = t.value,\r
+ u = t.unit,\r
+ z = u !== '' ? true : v === 0;\r
+ if( PARAMS.percent[ n ] === true ) return z;\r
+ if( PARAMS.offset[ n ] === true ) return z;\r
+ if( PARAMS.size[ n ] === true ) return z && u !== '%';\r
+ if( PARAMS.special[ n ] === true ){\r
+ if( n === 'lineHeight' ) return true;\r
+ if( n === 'opacity' ) return 0 <= v && v <= 1 && u === '';\r
+ if( n === 'zIndex' ) return u === '';\r
+ };\r
+ return false;\r
+ }\r
+ };\r
+ \r
+ /**\r
+ * backgroundPosition, clip\r
+ */\r
+ var PropertyGroupClass = function( name ){\r
+ this.name = name;\r
+ this.props = [];\r
+ for( var i = 1, l = arguments.length; i<l; ++i ){\r
+ this.props.push( arguments[ i ] );\r
+ };\r
+ };\r
+ \r
+ /**\r
+ * margin, padding, borderWidth, borderColor\r
+ */\r
+ var FrexiblePropertyClass = function( name ){\r
+ this.name = name;\r
+ this.props = [];\r
+ for( var i = 1, l = arguments.length; i<l; ++i ){\r
+ this.props.push( arguments[ i ] );\r
+ };\r
+ // top, bottom, left, right, topbottom, leftright, all\r
+ };\r
+ FrexiblePropertyClass.prototype = PropertyGroupClass.prototype = {\r
+ name: '',\r
+ equal: function( prop ){\r
+ var ps = this.props, i = ps.length;\r
+ for( ; i; ){\r
+ --i;\r
+ if( ps[ i ].equal( prop[ i ] ) === false ) return false;\r
+ };\r
+ return true;\r
+ },\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
+ 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
+ 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
+ var ret = [],\r
+ ps = this.props,\r
+ _ps = prop.props,\r
+ i = 0,\r
+ l = ps.length;\r
+ for( ; i<l; ++i ){\r
+ ret.push( ps[ i ].getOffset( _ps[ i ] ) );\r
+ };\r
+ return ret;\r
+ },\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
+ var ret = [], ps = this.props, i = 0, l = ps.length;\r
+ for( ; i<l; ++i ){\r
+ ret.push( ps[ i ].getValueText() );\r
+ }; \r
+ if( this.name === 'clip' ){\r
+ return 'rect(' + ret.join( CLIP_SEPARATOR ) + ')';\r
+ };\r
+ return ret.join( ' ' );\r
+ },\r
+ clear: function(){\r
+ var ps = this.props, i = ps.length;\r
+ for( ; i; ){\r
+ ps[ --i ].clear();\r
+ };\r
+ delete this.name;\r
+ delete this.props;\r
+ },\r
+ isValid: function( t ){\r
+ t = t || this;\r
+ var ps = t.props, i = ps.length;\r
+ for( ; i; ){\r
+ --i;\r
+ if( ps[ i ].isValid() === false ) return false;\r
+ };\r
+ return true;\r
+ }\r
+ };\r
+\r
+ var ColorPropertyClass = function( name, r, g, b, pct ){\r
+ this.name = name;\r
+ this.r = r;\r
+ this.g = g;\r
+ this.b = b;\r
+ this.pct = pct;\r
+ };\r
+ ColorPropertyClass.prototype = {\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
+ var rgb = this._toPct(),\r
+ _rgb = prop._toPct();\r
+ for( var i = rgb.length; i; ){\r
+ --i;\r
+ if( Math.abs( rgb[ i ] - _rgb[ i ] ) > 1 ) return false;\r
+ };\r
+ return true;\r
+ },\r
+ convert: function( prop ){\r
+ var u = prop.pct;\r
+ if( this.pct === u ) return;\r
+ var 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
+ this.r = rgb[ 0 ];\r
+ this.g = rgb[ 1 ];\r
+ this.b = rgb[ 2 ];\r
+ },\r
+ getValue: function(){\r
+ return [ this.r, this.g, this.b ];\r
+ },\r
+ getOffset: function( prop ){\r
+ return [ prop.r - this.r, prop.g - this.g, prop.b - this.b ];\r
+ },\r
+ getUnit: function(){\r
+ return this.pct === true ? '%' : '';\r
+ },\r
+ getValueText: function(){\r
+ if( this.pct === true ){\r
+ return [ 'rgb(', this.r, '%,', this.g, '%,', this.b, '%)' ].join( '' );\r
+ };\r
+ var round = Math.round;\r
+ //return [ 'rgb(', round( this.r ), ',', round( this.g ), ',', round( 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
+ 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
+ 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
+ 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
+ if( this.pct === true ){\r
+ return this.r <= 100 && this.g <= 100 && this.b <= 100;\r
+ };\r
+ return this.r <= 255 && this.g <= 255 && this.b <= 255;\r
+ }\r
+ };\r
+ \r
+ var isString = Type.isString,\r
+ isNumber = Type.isNumber;\r
+ var REG_UINIT = /.*\d(\w{1,2})?/,\r
+ $1 = '$1',\r
+ px = 'px',\r
+ REG_XXXXXX = /^#[\da-fA-F]{6}?/,\r
+ REG_XXX = /^#[\da-fA-F]{3}?/;\r
+ \r
+ var WrappedStyleClass = function( elm, style, pxPerEm ){\r
+ this.elm = elm;\r
+ this.style = style;\r
+ this.pxPerEm = this.get( 'fontSize' )._toPx();\r
+ };\r
+\r
+ WrappedStyleClass.prototype = {\r
+ get: function( p ){\r
+ if( PARAMS.special[ p ] === true || PARAMS.region[ p ] === true ){\r
+ if( p === 'clip' ) return this.getClip();\r
+ if( p === 'margin' ) return this.getMarginPaddingBorder( p );\r
+ if( p === 'padding' ) return this.getMarginPaddingBorder( p );\r
+ if( p === 'borderWidth' ) return this.getMarginPaddingBorder( 'border', 'Width' );\r
+ if( p === 'borderColor' ) return this.getBorderColor( 'borderColor' );\r
+ if( p === 'backgroundPosition' ) return this.getBackgroundPosition( p );\r
+ // opacity, zindex, lineHeight\r
+ return new PropertyClass( p, this.getValue( x, p ), this.getUnit( x ), this.pxPerEm );\r
+ };\r
+ var x = this.style[ p ], e, v, u;\r
+ if( PARAMS.offset[ p ] === true ){\r
+ return new PropertyClass( p, this.getValue( x, p ), this.getUnit( x, p ), this.pxPerEm );\r
+ /*\r
+ e = this.elm;\r
+ if( p === 'width' ) v = e.offsetWidth;\r
+ if( p === 'height' ) v = e.offsetHeight;\r
+ if( p === 'top' ) v = e.offsetTop;\r
+ if( p === 'bottom' ) v = e.offsetBottom;\r
+ if( p === 'left' ) v = e.offsetLeft;\r
+ if( p === 'right' ) v = e.offsetRight;\r
+ u = this.getUnit( x, p );\r
+ // alert( p + this.pxTo( v, u ) + u )\r
+ return new PropertyClass( p, this.pxTo( v, u ), u, this.pxPerEm ); */\r
+ };\r
+ if( p === 'fontSize' ){ // xx-small 等\r
+ v = Util.absoluteFontSizeToPx( x );\r
+ if( v !== 0 ){\r
+ return new PropertyClass( p, v, px, this.pxPerEm );\r
+ };\r
+ }; \r
+ if( PARAMS.percent[ p ] === true ){\r
+ // alert( p + ' , ' + x + ' , ' + this.getUnit( x, p ) )\r
+ return new PropertyClass( p, this.getValue( x, p ), this.getUnit( x, p ), this.pxPerEm );\r
+ };\r
+ if( PARAMS.size[ p ] === true ){\r
+ return new PropertyClass( p, this.getValue( x, p ), this.getUnit( x, p ), this.pxPerEm );\r
+ };\r
+ if( PARAMS.color[ p ] === true ){\r
+ return this.getColor( x, p );\r
+ };\r
+ },\r
+ pxTo: function( px, unit ){\r
+ if( unit === 'em' ) return px / this.pxPerEm;\r
+ return Util.pxTo( px, unit );\r
+ },\r
+ getValue: function( x, p ){\r
+ if( isString( x ) === true ){\r
+ return parseInt( x );\r
+ } else\r
+ if( isNumber( x ) === true ){\r
+ return x;\r
+ };\r
+ return 0;\r
+ },\r
+ getUnit: function( x, p ){\r
+ var u;\r
+ if( isString( x ) === true ){\r
+ u = x.replace( REG_UINIT, $1 );\r
+ if( p === 'lineHeight' ) return u;\r
+ if( PARAMS.unit[ u ] !== true ) return px;\r
+ return u;\r
+ };\r
+ return px;\r
+ },\r
+ getColor: function( x, p ){\r
+ var rgb = COLOR[ x.toUpperCase() ],\r
+ pct = false,\r
+ r = 0,\r
+ g = 0,\r
+ b = 0;\r
+ if( isNumber( rgb ) === true ){\r
+ r = ( rgb & 0xff0000 ) >> 16;\r
+ g = ( rgb & 0xff00 ) >> 8;\r
+ b = ( rgb & 0xff );\r
+ } else\r
+ if( x.match( REG_XXXXXX ) ){\r
+ r = parseInt( x.charAt( 1 ) + x.charAt( 2 ), 16 );\r
+ g = parseInt( x.charAt( 3 ) + x.charAt( 4 ), 16 );\r
+ b = parseInt( x.charAt( 5 ) + x.charAt( 6 ), 16 );\r
+ //alert( x + ' g: ' + g )\r
+ } else \r
+ if( x.match( REG_XXX ) ){\r
+ r = parseInt( x.charAt( 1 ) + x.charAt( 1 ), 16 );\r
+ g = parseInt( x.charAt( 2 ) + x.charAt( 2 ), 16 );\r
+ b = parseInt( x.charAt( 3 ) + x.charAt( 3 ), 16 );\r
+ } else\r
+ if( x.indexOf( 'rgb(' ) === 0 ){\r
+ rgb = x.substr( 4 ).split( ',' );\r
+ r = parseFloat( rgb[ 0 ] );\r
+ g = parseFloat( rgb[ 1 ] );\r
+ b = parseFloat( rgb[ 2 ] );\r
+ if( x.indexOf( '%' ) !== -1 ){\r
+ pct = true;\r
+ };\r
+ } else {\r
+ r = 255;\r
+ g = 255;\r
+ b = 255;\r
+ };\r
+ return new ColorPropertyClass( p, r, g, b, pct );\r
+ },\r
+ getClip: function( name ){\r
+ // rect(...) クリップします。<top>, <bottom> は上端からの、 <right>, <left> は左端からのオフセットで指定します。Internet Explorer 4~7 では、カンマの代わりにスペースで区切る必要があります。\r
+ // position:absolute または position:fixed を適用した要素に対してのみ有効です。\r
+ var top = this.get( name + 'Top' ),\r
+ right = this.get( name + 'Right' ),\r
+ bottom = this.get( name + 'Bottom' ),\r
+ left = this.get( name + 'Left' ),\r
+ ret = new PropertyGroupClass( name, top, right, bottom, left );\r
+ if( ret.isValid() === true ) return ret;\r
+ ret.clear();\r
+ all = this.style[ name ].split( '(' )[ 1 ].split( ')' )[ 0 ].split( CLIP_SEPARATOR );\r
+ return new PropertyGroupClass( name,\r
+ new PropertyClass( name + 'Top', all[ 0 ], px, this.pxPerEm ),\r
+ new PropertyClass( name + 'Right', all[ 1 ], px, this.pxPerEm ),\r
+ new PropertyClass( name + 'Bottom', all[ 2 ], px, this.pxPerEm ),\r
+ new PropertyClass( name + 'Left', all[ 3 ], px, this.pxPerEm )\r
+ );\r
+ },\r
+ getBackgroundPosition: function( name ){\r
+ var x = this.get( name + 'X' ),\r
+ y = this.get( name + 'Y' ),\r
+ ret = new PropertyGroupClass( name, x, y ),\r
+ xy;\r
+ if( ret.isValid() === true ) return ret;\r
+ ret.clear();\r
+ xy = this.style[ name ].split( ' ' );\r
+ return new PropertyGroupClass( name,\r
+ new PropertyClass( name + 'X', this.getValue( xy[ 0 ] ), this.getUnit( xy[ 0 ] ), this.pxPerEm ),\r
+ new PropertyClass( name + 'Y', this.getValue( xy[ 1 ] ), this.getUnit( xy[ 1 ] ), this.pxPerEm )\r
+ );\r
+ },\r
+ getMarginPaddingBorder: function( name, widthOrColor ){\r
+ widthOrColor = widthOrColor || '';\r
+ var _class = PropertyClass;\r
+ top = this.get( name + 'Top' + widthOrColor ),\r
+ right = this.get( name + 'Right' + widthOrColor ),\r
+ bottom = this.get( name + 'Bottom' + widthOrColor ),\r
+ left = this.get( name + 'Left' + widthOrColor ),\r
+ ret = new FrexiblePropertyClass( name, top, right, bottom, left ),\r
+ all, x, v, u;\r
+ \r
+ if( ret.isValid() === true ) return ret;\r
+ ret.clear();\r
+ all = this.style[ name + widthOrColor ].split( ' ' );\r
+ \r
+ for( var i=0, l=all.length; i<l; ++i ){\r
+ x = all[ i ];\r
+ v = this.getValue( x );\r
+ u = this.getUnit( x );\r
+ if( l === 4 ){\r
+ if( i === 0 ) top = new _class( name + 'Top' + widthOrColor, v, u, this.pxPerEm );\r
+ if( i === 1 ) right = new _class( name + 'Right' + widthOrColor, v, u, this.pxPerEm );\r
+ if( i === 2 ) bottom = new _class( name + 'Bottom' + widthOrColor, v, u, this.pxPerEm );\r
+ if( i === 3 ) left = new _class( name + 'Left' + widthOrColor, v, u, this.pxPerEm );\r
+ } else\r
+ if( l === 3 ){\r
+ if( i === 0 ) top = new _class( name + 'Top' + widthOrColor, v, u, this.pxPerEm );\r
+ if( i === 1 ){\r
+ right = new _class( name + 'Right' + widthOrColor, v, u, this.pxPerEm );\r
+ left = new _class( name + 'Left' + widthOrColor, v, u, this.pxPerEm );\r
+ } else\r
+ if( i === 2 ) bottom = new _class( name + 'Bottom' + widthOrColor , v, u, this.pxPerEm );\r
+ } else\r
+ if( l === 2 ){\r
+ if( i === 0 ){\r
+ top = new _class( name + 'Top' + widthOrColor, v, u, this.pxPerEm );\r
+ bottom = new _class( name + 'Bottom' + widthOrColor, v, u, this.pxPerEm );\r
+ } else\r
+ if( i === 1 ){\r
+ right = new _class( name + 'Right' + widthOrColor, v, u, this.pxPerEm );\r
+ left = new _class( name + 'Left' + widthOrColor, v, u, this.pxPerEm );\r
+ };\r
+ } else\r
+ if( l === 1 ){\r
+ top = new _class( name + 'Top' + widthOrColor, v, u, this.pxPerEm );\r
+ bottom = new _class( name + 'Bottom' + widthOrColor, v, u, this.pxPerEm );\r
+ right = new _class( name + 'Right' + widthOrColor, v, u, this.pxPerEm );\r
+ left = new _class( name + 'Left' + widthOrColor, v, u, this.pxPerEm );\r
+ };\r
+ };\r
+ return new FrexiblePropertyClass( name, top, right, bottom, left );\r
+ },\r
+ getBorderColor: function( name ){\r
+ var getColor = this.getColor;\r
+ top = this.get( name + 'TopColor' ),\r
+ right = this.get( name + 'RightColor' ),\r
+ bottom = this.get( name + 'BottomColor' ),\r
+ left = this.get( name + 'LeftColor' ),\r
+ ret = new FrexiblePropertyClass( name, top, right, bottom, left ),\r
+ all, x;\r
+ \r
+ if( ret.isValid() === true ) return ret;\r
+ ret.clear();\r
+ all = this.style[ name ].split( ' ' );\r
+ \r
+ for( var i=0, l=all.length; i<l; ++i ){\r
+ x = all[ i ];\r
+ if( l === 4 ){\r
+ if( i === 0 ) top = getColor( x, name + 'Top' );\r
+ if( i === 1 ) right = getColor( x, name + 'Right' );\r
+ if( i === 2 ) bottom = getColor( x, name + 'Bottom' );\r
+ if( i === 3 ) left = getColor( x, name + 'Left' );\r
+ } else\r
+ if( l === 3 ){\r
+ if( i === 0 ) top = getColor( x, name + 'Top' );\r
+ if( i === 1 ){\r
+ right = getColor( x, name + 'Right' );\r
+ left = getColor( x, name + 'Left' );\r
+ } else\r
+ if( i === 2 ) bottom = getColor( x, name + 'Bottom' );\r
+ } else\r
+ if( l === 2 ){\r
+ if( i === 0 ){\r
+ top = getColor( x, name + 'Top' );\r
+ bottom = getColor( x, name + 'Bottom' );\r
+ } else\r
+ if( i === 1 ){\r
+ right = getColor( x, name + 'Right' );\r
+ left = getColor( x, name + 'Left' );\r
+ };\r
+ } else\r
+ if( l === 1 ){\r
+ top = getColor( x, name + 'Top' );\r
+ bottom = getColor( x, name + 'Bottom' );\r
+ right = getColor( x, name + 'Right' );\r
+ left = getColor( x, name + 'Left' );\r
+ };\r
+ };\r
+ return new FrexiblePropertyClass( name, top, right, bottom, left );\r
+ },\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
- })();\r
-\r
+ };\r
+ function camelizeHash( obj ){\r
+ var p, _p;\r
+ for( p in obj ){\r
+ _p = Util.camelize( p );\r
+ if( _p === p ) continue;\r
+ obj[ _p ] = obj[ _p ] || obj[ p ];\r
+ delete obj[ p ];\r
+ };\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
+ },\r
+ getInlineStyle: function( _elm ){\r
+ return cssToObject( _elm.style.cssText );\r
+ },\r
+ getComputedStyle: function( elm ){\r
+ /* if( window.getComputedStyle ){\r
+ CSS.getComputedStyle = function( elm ){\r
+ return cssToObject( window.getComputedStyle( elm, '' ) );\r
+ };\r
+ } else */\r
+ if( document.defaultView && document.defaultView.getComputedStyle ){\r
+ CSS.getComputedStyle = function( elm ){\r
+ var obj = document.defaultView.getComputedStyle( elm, '' );\r
+ return cssToObject( obj.cssText || obj );\r
+ };\r
+ } else {\r
+ CSS.getComputedStyle = function( elm ){\r
+ return cssToObject( elm.currentStyle );\r
+ };\r
+ };\r
+ return CSS.getComputedStyle( elm );\r
+ },\r
+ toCssText: function( _css ){\r
+ var ret = [], v;\r
+ for( var p in _css ){\r
+ if( PARAMS.margin[ p ] === true && _css.margin ) continue;\r
+ if( PARAMS.padding[ p ] === true && _css.padding ) continue;\r
+ if( PARAMS.borderWidth[ p ] === true && _css.borderWidth ) continue;\r
+ if( PARAMS.borderColor[ p ] === true && _css.borderColor ) continue;\r
+ v = _css[ p ];\r
+ v && ret.push( [ Util.uncamelize( p ), v ].join( ':' ) );\r
+ };\r
+ return ret.join( ';' );\r
+ }\r
+ };\r
+ \r
+})( window, document );\r
\r
\r
/* ----------------------------------------------------\r
* \r
*/ \r
\r
-( function( window, undefined ){\r
+( function( window, document, undefined ){\r
\r
var doc = window.document;\r
var body = doc.getElementsByTagName( 'body' )[ 0 ]; //( doc.compatMode || '' ) !== 'CSS1Compat' ? doc.body : doc.documentElement;// \r
var _data = FILE_CONTROLER.getFileData( _file ),\r
_type = _data.type,\r
_className = '';\r
- if( _type === Const.FILE.TYPE.FOLDER){\r
+ if( _type === Const.FILE.TYPE.FOLDER ){\r
_className = 'folder';\r
} else\r
- if( _type === Const.FILE.TYPE.IMAGE){\r
+ if( _type === Const.FILE.TYPE.IMAGE ){\r
\r
} else\r
- if( _type === Const.FILE.TYPE.TEXT){\r
+ if( _type === Const.FILE.TYPE.TEXT ){\r
\r
} else\r
- if( _type === Const.FILE.TYPE.HTML){\r
+ if( _type === Const.FILE.TYPE.HTML ){\r
\r
} else\r
- if( _type === Const.FILE.TYPE.CSV){\r
+ if( _type === Const.FILE.TYPE.CSV ){\r
\r
} else\r
- if( _type === Const.FILE.TYPE.JSON){\r
+ if( _type === Const.FILE.TYPE.JSON ){\r
\r
} else\r
- if( _type === Const.FILE.TYPE.XML){\r
+ if( _type === Const.FILE.TYPE.XML ){\r
\r
- }\r
+ };\r
return {\r
image: null,\r
className: ' file-type-' + _className\r
- }\r
+ };\r
};\r
this.getSummary = function( _file ){\r
var _data = FILE_CONTROLER.getFileData( _file ),\r
}\r
for( var key in src ){\r
if( Util.getIndex( protects, key ) === -1 ){\r
- //alert( key )\r
ret[ key ] = clone( src[ key ]);\r
}\r
}\r
this.init = function(){\r
phase = 1;\r
self = this;\r
+ appClass === Page.appClass && Page.show();\r
self.onInit();\r
phase = 2;\r
};\r
self.rootElement = null;\r
\r
Application.shutdown( self, isOverlay );\r
+ \r
+ appClass === Page.appClass && Page.hide();\r
+ \r
self = appClass = uiList = null;\r
\r
phase = 6;\r
_class.prototype = new AbstractBasicPane();\r
return new _class( _options );\r
};\r
+ this.createDHTML = function( _elm ){\r
+ return DHTML.create( self, _elm );\r
+ };\r
this.fetchCSS = function( _url, opt_onload, opt_onerror ){\r
if( phase === 1 ){\r
++fetchResource;\r
})();\r
\r
var Page = ( function(){\r
- var pageNodes = [];\r
-\r
- var ref;\r
- \r
- var ignoreTagList = [ 'script', 'noscript' ];\r
+ var pageNodes = [],\r
+ appClass, ref,\r
+ ignoreTagList = [ 'script', 'noscript', 'style' ];\r
\r
var MemoryClass = function( node ){\r
- var _nodeType = node.nodeType;\r
- if( _nodeType === 1 && Util.getIndex( ignoreTagList, node.tagName.toLowerCase() ) === -1 ){\r
- this.node = node;\r
- this.type = _nodeType;\r
- this.display = node.style.display;\r
- } else\r
- if( _nodeType === 3 ){\r
- if( node.data.replace( /\s/g, '' ).length !== 0 ){\r
- this.node = node;\r
- this.type = _nodeType;\r
- this.before = pageNodes.length === 0 ? null : pageNodes[ pageNodes.length - 1 ].node;\r
- } else {\r
- body.removeChild( node );\r
- }\r
- } else {\r
- // body.removeChild( node );\r
- return false;\r
- };\r
+ this.node = node;\r
};\r
MemoryClass.prototype = {\r
+ init: function(){\r
+ var node = this.node,\r
+ _nodeType = node.nodeType;\r
+ if( _nodeType === 1 && Util.getIndex( ignoreTagList, node.tagName.toLowerCase() ) === -1 ){\r
+ this.type = _nodeType;\r
+ this.display = node.style.display;\r
+ } else\r
+ if( _nodeType === 3 ){\r
+ if( node.data.replace( /\s/g, '' ).length !== 0 ){\r
+ this.type = _nodeType;\r
+ this.before = pageNodes.length === 0 ? null : pageNodes[ pageNodes.length - 1 ].node;\r
+ } else {\r
+ body.removeChild( node );\r
+ return false;\r
+ }\r
+ } else {\r
+ // body.removeChild( node );\r
+ return false;\r
+ };\r
+ },\r
show: function(){\r
if( this.type === 1 ){\r
if( this.display ){\r
};\r
},\r
hide: function(){\r
+ if( !this.node.parentNode ){\r
+ return;\r
+ };\r
if( this.type === 1 ){\r
this.node.style.display = 'none';\r
} else {\r
_mem;\r
for( var i = 0, l = _children.length; i<l; ++i ){\r
_mem = new MemoryClass( _children[ i ] );\r
- _mem.node && pageNodes.push( _mem );\r
+ _mem.init() !== false && pageNodes.push( _mem );\r
};\r
if( pageNodes.length !== 0 ){\r
- ref = Application.register( function(){\r
- var self = this,\r
- winW = 0,\r
- winH = 0,\r
- tailList = [],\r
- elmContainer, elmHeader;\r
- \r
- this.bgColor = '#ffffff';\r
- this.MIN_WIDTH = 320;\r
- this.MIN_HEIGHT = 320;\r
- this.onInit = function(){\r
- for( var i=0, l = pageNodes.length; i < l; ++i ){\r
- pageNodes[ i ].show();\r
- };\r
- KeyEvent.add( self, Const.KEY.EVENT.KEY_DOWN, ref.shutdown, 27 ); // 27.esc\r
- };\r
- this.onOpen = function( _w, _h ){\r
- \r
- };\r
- this.onPaneResize = function( _w, _h ){\r
+ if( Type.isFunction( gOS.PageApplicationClass ) === true ){\r
+ Page.appClass = gOS.PageApplicationClass;\r
+ Page.appClass.bgColor = Page.appClass.bgColor || '#ffffff';\r
+ Page.appClass.MIN_WIDTH = Page.appClass.MIN_WIDTH || 240;\r
+ Page.appClass.MIN_HEIGHT = Page.appClass.MIN_HEIGHT || 240;\r
+ } else {\r
+ Page.appClass = function(){\r
+ var self = this;\r
\r
- };\r
- this.onClose = function(){\r
- for( var i=0, l = pageNodes.length; i < l; ++i ){\r
- pageNodes[ i ].hide();\r
+ this.bgColor = '#ffffff';\r
+ this.MIN_WIDTH = 200;\r
+ this.MIN_HEIGHT = 200;\r
+ this.onInit = function(){};\r
+ this.onOpen = function( _w, _h ){\r
+ KeyEvent.add( self, Const.KEY.EVENT.KEY_DOWN, ref.shutdown, 27 ); // 27.esc\r
};\r
+ this.onPaneResize = function( _w, _h ){};\r
+ this.onClose = function(){};\r
};\r
- }, false, true, doc.title, 'page', null, '#999999' );\r
+ };\r
+ ref = Application.register( Page.appClass, false, true, document.title, 'page', null, Page.appClass.tailColor || '#999999' );\r
};\r
delete Page.onReady;\r
},\r
+ show: function(){\r
+ for( var i = pageNodes.length; i; ){\r
+ pageNodes[ --i ].show();\r
+ };\r
+ },\r
+ hide: function(){\r
+ for( var i = pageNodes.length; i; ){\r
+ pageNodes[ --i ].hide();\r
+ }; \r
+ },\r
boot: function(){\r
ref && ref.boot();\r
},\r
registered: function(){\r
return !!ref;\r
- }\r
+ },\r
+ appClass: null\r
}\r
})();\r
\r
* \r
* clientX\r
* ウインドウ座標とは、現在のブラウザのウインドウの、ドキュメントを表示している部分の左上原点とした座標である。\r
- * 問題は、ウインドウは、必ずしもドキュメント全体を表示するとは限らない。スクロールと呼ばれるUIによって、ドキュメントの一部だけを表示しているかもしれない。
+ * 問題は、ウインドウは、必ずしもドキュメント全体を表示するとは限らない。スクロールと呼ばれるUIによって、ドキュメントの一部だけを表示しているかもしれない。\r
*/\r
var XBrowserEvent = ( function(){\r
var wrappedHandlerClass,\r
this.screenX = e.screenX;\r
this.screenY = e.screenY;\r
\r
+ this.keyCode = e.keyCode;\r
this.altKey = e.altKey;\r
this.ctrlKey = e.ctrlKey;\r
this.shiftKey = e.shiftKey;\r
- this.charCode = e.keyCode;\r
\r
this.wheelDelta = e.wheelDelta;\r
\r
};\r
\r
var ReadyEvent = ( function(){\r
- var timer = null,\r
- script = null,\r
- ticketReady,\r
+ var ticketReady,\r
ticketLoad;\r
\r
- function detect(){\r
+ function webkitDetect(){\r
var state = document.readyState;\r
if( state === 'loaded' || state === 'complete' ){\r
- timer && window.clearInterval( timer );\r
+ SystemTimer.remove( SUPER_USER_KEY, webkitDetect );\r
timer = null;\r
onReady();\r
- }\r
- }\r
+ };\r
+ };\r
function ieDetect(){\r
- if( this.readyState === 'loaded' || this.readyState === 'complete' ){\r
+ if( this.readyState === 'complete' ){ // this.readyState === 'loaded' || \r
this.onreadystatechange = new Function();\r
this.onreadystatechange = null;\r
- this.parentNode.removeChild( this );\r
- script = null;\r
+ AsyncCall.remove( SUPER_USER_KEY, ieScroll );\r
onReady();\r
- }\r
- }\r
- \r
+ };\r
+ };\r
+ function ieScroll(){\r
+ try {\r
+ document.documentElement.doScroll( 'left' );\r
+ } catch( e ){\r
+ AsyncCall.add( SUPER_USER_KEY, ieScroll );\r
+ return;\r
+ };\r
+ // no errors, fire\r
+ document.onreadystatechange = new Function();\r
+ document.onreadystatechange = null;\r
+ onReady(); \r
+ };\r
+ \r
function onReady(){\r
+ ticketReady && ticketReady.destroy();\r
+ ticketLoad && ticketLoad.destroy();\r
+ ticketReady = ticketLoad = null;\r
Page.onReady();\r
if( Page.registered() === true ){\r
Page.boot();\r
} else {\r
Home.boot();\r
- }\r
- ticketReady && ticketReady.destroy();\r
- ticketLoad && ticketLoad.destroy();\r
- ticketReady = ticketLoad = null;\r
- }\r
+ };\r
+ };\r
\r
// Apple WebKit (Safari, OmniWeb, ...)\r
if( doc.readyState && !!UA.WEBKIT ){\r
- timer = window.setInterval( detect, 50 );\r
- } else\r
- if( document.readyState && UA.isIE && UA.ieVersion < 9 ){\r
- document.write('<script type="text/javascript" defer="defer" id="ieDOMContentLoaded" src="' +\r
- ( ( window.location.protocol === 'https:' ) ? '://0' : 'javascript:void(0)' ) +\r
- '"><\/script>');\r
- script = document.getElementById( 'ieDOMContentLoaded' );\r
- script.onreadystatechange = ieDetect;\r
+ SystemTimer.add( SUPER_USER_KEY, webkitDetect, 50 );\r
+ /* } else\r
+ if( document.readyState && UA.isIE && UA.ieVersion < 9 ){\r
+ ieScroll();\r
+ document.onreadystatechange = ieDetect; */\r
} else {\r
- ticketReady = new EventTicketClass( doc, 'DOMContentLoaded', onReady );\r
- ticketLoad = new EventTicketClass( doc, 'load', onReady );\r
- }\r
+ ticketReady = new EventTicketClass( document, 'DOMContentLoaded', onReady );\r
+ ticketLoad = new EventTicketClass( window, 'load', onReady );\r
+ };\r
})();\r
\r
\r
\r
/* =====================================================\r
* MouseEvent\r
- *
+ * \r
*/\r
var MouseEvent = ( function(){\r
var CLICK_OFFSET = 2 * 2; \r
*/\r
var KeyEvent = ( function(){\r
var EVENT_LIST_MAP = [],\r
- LOCK_UP = [],\r
- LOCK_DOWN = [],\r
+ LOCK_UP = [],\r
+ LOCK_DOWN = [],\r
application = null,\r
currentList = null;\r
\r
function onKeyChange( e ){\r
var cancel = false,\r
type = e.type,\r
- key = e.keyCode || e.charCode || e.which,\r
+ key = e.keyCode, // || e.which,\r
shift = Type.isBoolean( e.shiftKey ) === true ? e.shiftKey : ( e.modifiers & Event.SHIFT_MASK ),\r
ctrl = Type.isBoolean( e.ctrlKey ) === true ? e.ctrlKey : ( e.modifiers & Event.CONTROL_MASK ),\r
lock = type === 'keyup' ? LOCK_UP : LOCK_DOWN;\r
+ \r
// block chattering\r
- if( Util.getIndex( lock, key ) !== -1 ) return false;\r
+ if( Util.getIndex( lock, key ) !== -1 ) return;\r
lock.push( key );\r
AsyncCall.add( SUPER_USER_KEY, unlock, [ lock, key ] );\r
\r
};\r
for( var i=currentList.length, t; t = currentList[ --i ]; ){\r
if( Type.isFunction( t[ type ] ) === true && t.keyCode === key && ( t.shift === undefined || t.shift === shift ) && ( t.ctrl === undefined || t.ctrl === ctrl )){\r
- \r
AsyncCall.add( t.apiuser, t[ type ], e );\r
cancel = true;\r
};\r
\r
if( UA.isIE === true && UA.ieRenderingVersion < 9 ){\r
keyPress = function( e ){\r
- var key = e.charCode;\r
+ var key = e.keyCode;\r
if( key === 13 || key === 27 ){\r
e.type = 'keydown';\r
return onKeyChange( e );\r
/*\r
* currentListener\r
* currrentApplication ( overlay Application ) or\r
- * superuser ( UI )
+ * superuser ( UI )\r
*/\r
updateCurrentListener: function( _apiuser ){\r
application = _apiuser;\r
- currentList = EVENT_LIST_MAP[ _apiuser.getUID() ] || [];\r
+ var _uid = _apiuser.getUID();\r
+ currentList = EVENT_LIST_MAP[ _uid ] || ( EVENT_LIST_MAP[ _uid ] = [] );\r
\r
var _ticket,\r
_down = false,\r
if( _down && _up ) break;\r
}\r
if( _down === true ){\r
- keydownTicket = new EventTicketClass( doc, 'keydown', onKeyChange );\r
+ keydownTicket = new EventTicketClass( document, 'keydown', onKeyChange );\r
keypressTicket = keyPress !== null ? new EventTicketClass( doc, 'keypress', keyPress ) : null;\r
} else {\r
keydownTicket && keydownTicket.destroy();\r
keydownTicket = keypressTicket = null;\r
}\r
if( _up === true ){\r
- keyupTicket = new EventTicketClass( doc, 'keyup', onKeyChange );\r
+ keyupTicket = new EventTicketClass( document, 'keyup', onKeyChange );\r
} else {\r
keyupTicket && keyupTicket.destroy();\r
keyupTicket = null;\r
}\r
\r
if( _down === true || _up === true ){\r
- focusTicket = new EventTicketClass( doc, 'mouseenter', window.focus );\r
+ focusTicket = new EventTicketClass( document, 'mouseenter', window.focus );\r
} else {\r
focusTicket && focusTicket.destroy();\r
focusTicket = null;\r
\r
/**\r
* \r
- * http://thudjs.tumblr.com/post/637855087/stylesheet-onload-or-lack-thereof
+ * http://thudjs.tumblr.com/post/637855087/stylesheet-onload-or-lack-thereof\r
*/\r
\r
var Css = ( function(){\r
\r
\r
/* ----------------------------------------\r
- *
+ * \r
*/\r
\r
var Overlay = ( function(){\r
windowH = 0;\r
\r
var CLASSNAME_COMBOBOX_OPTION = 'combobox-option',\r
+ CLASSNAME_COMBOBOX_OPTION_CURRENT = CLASSNAME_COMBOBOX_OPTION + ' combobox-option-current',\r
ELM_A_ORIGIN = ( function(){\r
var ret = document.createElement( 'a' );\r
ret.href = '#';\r
focus = true;\r
start( apiuser, uiGroup, instance );\r
elmA.style.display = 'none';\r
- elmValue.appendChild( ELM_INPUT_TEXT );\r
\r
+ elmValue.appendChild( ELM_INPUT_TEXT );\r
ELM_INPUT_TEXT.value = value;\r
ELM_INPUT_TEXT.focus();\r
ELM_INPUT_TEXT.select();\r
elmValue.removeChild( ELM_INPUT_TEXT );\r
}\r
MouseEvent.remove( apiuser, elmWrapper );\r
+ \r
apiuser = uiGroup = elmWrapper = elmValue = elmA = onUpdate = validater = instance = null;\r
};\r
instance.value( value );\r
};\r
};\r
\r
- var FileInputClass = function( apiuser, uiGroup, elmWrapper, onUpdate, validater, elmFileInput ){\r
- var elmFilePath = Util.getElementsByClassName( elmWrapper, 'file-path' )[ 0 ],\r
- focus = false,\r
- visible = true,\r
- enabled = true,\r
- index = GROUP_ID ? itemList[ GROUP_ID ].length : -1,\r
- value,\r
- instance;\r
- elmFileInput = elmWrapper.getElementsByTagName('input')[0] || elmFileInput || document.createElement( 'input');\r
- elmFileInput.type = 'file';\r
- elmFileInput.style.visivility = 'hidden';\r
-\r
- elmWrapper.onclick = onClick;\r
- elmFileInput.onchange = onChange;\r
- \r
- function onChange(){\r
- elmFilePath.innerHTML = elmFileInput.value;\r
- }\r
- return {\r
- init: function(){\r
- instance = this;\r
- delete this.init;\r
- },\r
- focus: function( e ){\r
- focus = true;\r
- start( apiuser, uiGroup, instance );\r
- elmFileInput.click();\r
- return false;\r
- },\r
- blur: function( keep ){\r
- focus = false;\r
- },\r
- enabled: function(){\r
- return enabled;\r
- },\r
- visible: function( _visible ){\r
- if( Type.isBoolean( _visible ) === true ){\r
- elmWrapper.style.display = _visible ? '' : 'none';\r
- visible = _visible;\r
- };\r
- return visible;\r
- },\r
- index : index\r
- }\r
- }\r
-\r
var ComboBoxClass = function( apiuser, uiGroup, elmWrapper, onUpdate ){\r
var elmBox = Util.getElementsByClassName( elmWrapper, 'combobox' )[ 0 ],\r
elmA = ELM_COMBOBOX.cloneNode( true ),\r
};\r
this.createOption = function( _displayValue, _value, _isSelected ){\r
var option = null,\r
- _option,\r
- _index;\r
- _value = _value || _displayValue;\r
- for( var i = 0, l = optionList.length; i < l; ++i ){\r
- _option = optionList[ i ];\r
+ _option, i;\r
+ _value = _value || _displayValue;\r
+ _isSelected = !!_isSelected;\r
+ for( i = optionList.length; i; ){\r
+ _option = optionList[ --i ];\r
if( _value === _option.value ){\r
option = _option;\r
- _index = i;\r
- } else {\r
- _option.current = _option.value === _value;\r
- }\r
- }\r
- if( option === null ){\r
- option = new OptionClass( instance, _displayValue, _value, _isSelected );\r
- _index = optionList.length;\r
- optionList.push( option );\r
- }\r
+ break;\r
+ };\r
+ };\r
if( _isSelected === true ){\r
+ index = optionList.length;\r
elmValue.data = _displayValue;\r
- }\r
+ }; \r
+ if( option === null ){\r
+ option = new OptionDataClass( _displayValue, _value, _isSelected );\r
+ optionList.push( option );\r
+ };\r
};\r
this.destroy = function(){\r
instance.blur();\r
};\r
MouseEvent.add( apiuser, elmWrapper, 'click', instance.focus );\r
};\r
- var OptionClass = function( combobox, displayValue, value, isCurrent ){\r
+ var OptionDataClass = function( displayValue, value, isCurrent ){\r
this.displayValue = displayValue;\r
- this.value = value = value || displayValue;\r
+ this.value = value || displayValue;\r
this.current = isCurrent;\r
displayValue = value = null;\r
};\r
return ret;\r
})();\r
\r
- var OptionClass = function( apiuser, option ){\r
- this.elm = ELM_OPTION_ORIGIN.cloneNode( true );\r
- this.data = option;\r
- this.current = function( _current ){\r
- this.elm.className = CLASSNAME_COMBOBOX_OPTION;\r
- option.current = _current;\r
- currentOption = this;\r
- };\r
- this.destroy = function(){\r
- MouseEvent.remove( apiuser, this.elm );\r
- apiuser = option = null;\r
+ var OptionClass = function( option ){\r
+ this.elm = ELM_OPTION_ORIGIN.cloneNode( true );\r
+ this.data = option;\r
+ this.init();\r
+ };\r
+ OptionClass.prototype = {\r
+ init: function(){\r
+ ELM_OPTION_WRAPPER.appendChild( this.elm );\r
+ this.elm.firstChild.data = this.data.displayValue;\r
+ this.current( this.data.current );\r
+ MouseEvent.add( SUPER_USER_KEY, this.elm, 'mousedown', onOptionSelect );// onclick では 選択ボックス 隠すように body に設定した onmouseup が先に動いてしまう!\r
+ },\r
+ current: function( _current ){\r
+ this.elm.className = _current === true ? CLASSNAME_COMBOBOX_OPTION_CURRENT : CLASSNAME_COMBOBOX_OPTION;\r
+ this.data.current = _current;\r
+ currentOption = _current === true ? this : currentOption;\r
+ },\r
+ destroy: function(){\r
+ MouseEvent.remove( SUPER_USER_KEY, this.elm );\r
+ Util.removeAllChildren( this.elm );\r
ELM_OPTION_WRAPPER.removeChild( this.elm );\r
delete this.elm;\r
delete this.data;\r
- };\r
- \r
- ELM_OPTION_WRAPPER.appendChild( this.elm );\r
- this.elm.firstChild.data = option.displayValue;\r
- this.current( option.current );\r
- MouseEvent.add( SUPER_USER_KEY, this.elm, 'mousedown', onOptionSelect );// onclick では 選択ボックス 隠すように body に設定した onmouseup が先に動いてしまう!\r
- }\r
+ }\r
+ };\r
\r
function onOptionSelect( e ){\r
for( var i = 0, l = OPTION_LIST.length, _option; i < l; ++i){\r
break;\r
};\r
};\r
- return false; \r
+ return false;\r
};\r
\r
var OPTION_LIST = [],\r
};\r
function change( e ){\r
var l = OPTION_LIST.length,\r
- i = currentIndex + e.keyCode === 40 ? 1 : -1;\r
+ i = currentIndex + ( e.keyCode === 40 ? -1 : 1 );\r
if( currentCombobox === null || l < 2 ) return;\r
i = i < 0 ?\r
l - 1 :\r
elm = _combobox.elm;\r
\r
for( var i = 0, l = _optionList.length; i<l; ++i ){\r
- OPTION_LIST.unshift( new OptionClass( _apiuser, _optionList[ i ] ) );\r
+ OPTION_LIST.unshift( new OptionClass( _optionList[ i ] ) );\r
};\r
- MouseEvent.add( SUPER_USER_KEY, doc, 'mouseup', bodyMouseupHandler );\r
+ MouseEvent.add( SUPER_USER_KEY, document, 'mouseup', bodyMouseupHandler );\r
KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, change, 38 );\r
KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, change, 40 );\r
//KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onEnter, 13 );\r
\r
updateCurrrentOption( _combobox.value(), false );\r
updateWrapperPosition();\r
+ \r
+ SystemTimer.add( SUPER_USER_KEY, updateWrapperPosition, 500 );\r
},\r
hide: function( _combobox ){\r
if( currentCombobox !== _combobox || currentCombobox === null ) return;\r
//KeyEvent.remove( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onEnter );\r
//KeyEvent.updateCurrentListener( apiuser );\r
\r
+ SystemTimer.remove( SUPER_USER_KEY, updateWrapperPosition, 500 );\r
+ \r
apiuser = null;\r
currentCombobox = null;\r
currentOption = null;\r
var UIGroupClass = function( apiuser ){\r
var self = this,\r
itemList = [],\r
- currentItem = null,\r
windowW, windowH;\r
\r
this.focus = function( _value ){\r
+ /*\r
if( _value === true ){\r
if( currentItem ){\r
start( apiuser, self, currentItem );\r
if( _value === false ){\r
finish( apiuser, self, currentItem );\r
} else\r
+ */\r
if( _value && Util.getIndex( itemList, _value ) !== -1 ){\r
- currentItem = _value;\r
+ // currentItem = _value;\r
currentList = itemList;\r
};\r
return currentUi === self; \r
var _item;\r
while( _item = itemList.shift() ){\r
_item.destroy();\r
- }\r
+ };\r
+ if( currentUi === this ){\r
+ currentItem = null;\r
+ currentUi = null;\r
+ currentUser = null;\r
+ currentList = null;\r
+ };\r
+ apiuser = self = null;\r
};\r
};\r
\r
function start( _apiuser, _uigroup, _item ){\r
if( currentItem !== _item ){\r
+ currentUi !== _uigroup && currentUi && currentUi.blur();\r
+ \r
currentItem !== null && currentItem.blur();\r
\r
- if( currentUser !== _apiuser ) {\r
- KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 13 );\r
- KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 27 );\r
- KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 9 );\r
- KeyEvent.updateCurrentListener( SUPER_USER_KEY );\r
- };\r
- if( currentUi !== _uigroup ){\r
- currentUi && currentUi.blur();\r
- };\r
currentUser = _apiuser;\r
currentUi = _uigroup;\r
currentItem = _item;\r
\r
_uigroup.focus( _item );\r
+ \r
+ // if( currentUser !== _apiuser ) {\r
+ KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 13 );\r
+ KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 27 );\r
+ KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 9 );\r
+ KeyEvent.updateCurrentListener( SUPER_USER_KEY );\r
+ // };\r
};\r
}\r
function finish( _apiuser, _uigroup, _item ){\r
currentUser = null;\r
currentUi = null;\r
currentItem = null;\r
+ currentList = null;\r
\r
KeyEvent.remove( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 13 );\r
KeyEvent.remove( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 27 );\r
\r
function onKeyDown( e ){\r
if( currentItem === null ) return true;\r
- var keyCode = e.keyCode || e.charCode,\r
+ var keyCode = e.keyCode,\r
_index = Util.getIndex( currentList, currentItem );\r
if( keyCode === 13 || keyCode === 27 || keyCode === 9 || keyCode === 18 || e.altKey === true ){ // 13.return 27.esc 9.tab 18.alt\r
keyCode === 9 && tabShift( _index, e.shiftKey === true ? -1 : 1 );\r
'<a href="#" class="finder-icon-console-editor-apps"></a>',\r
'<a href="#" class="finder-icon-console-viewer-apps"></a>',\r
'</div>',\r
- '</div>',\r
+ '</div>'\r
] ).join( '' );\r
})();\r
\r
'<div class="finder-action-switch button">action</div>',\r
'</div>',\r
'<div class="finder-body"></div>',\r
- '</div>',\r
+ '</div>'\r
].join( '' ) ),\r
ICON_HEIGHT = Util.getElementSize( ELM_ORIGIN_FINDER_ICON ).height,\r
ICON_CLASSNAME = 'finder-icon-thumbnail',\r
})();\r
\r
\r
+/*\r
+ * -- len, %\r
+ * marginBottom, marginLeft, marginRight, marginTop, margin\r
+ * padding, paddingBottom, paddingLeft, paddingRight, paddingTop\r
+ * fontSize, textIndent\r
+ * height, width\r
+ * bottom, left, right, top (len, %)\r
+ *\r
+ * -- len\r
+ * borderBottomWidth, borderLeftWidth, borderRightWidth, borderTopWidth, borderWidth,\r
+ * letterSpacing\r
+ *\r
+ * -- color\r
+ * backgroundColor\r
+ * borderBottomColor, borderLeftColor, borderRightColor, borderTopColor, borderColor\r
+ * color\r
+ *\r
+ * -- special\r
+ * clip rect(0px, 40px, 40px, 0px);\r
+ * backgroundPosition (len, %)\r
+ * opacity\r
+ * lineHeight (len, %, num)\r
+ * zIndex ( order )\r
+ */\r
+\r
+var DHTML = ( function(){\r
+ \r
+ var ANIMATION_TICKET_ARRAY = [],\r
+ fpms = 50,\r
+ round = Math.round,\r
+ cround = function ( v ){ return round( v * 100 ) / 100 };\r
+ \r
+ function startAnimation( _elm, _cssObject, _onComplete, _onEnterFrame, _numFrames ){\r
+ var _ticket, i = ANIMATION_TICKET_ARRAY.length;\r
+ for( ; i; ){\r
+ _ticket = ANIMATION_TICKET_ARRAY[ --i ];\r
+ if( _ticket.elm === _elm ){\r
+ return;\r
+ };\r
+ };\r
+ \r
+ var _currentValues = [],\r
+ _offsetValues = [],\r
+ _endValues = [],\r
+ _targetProperties = [],\r
+ _units = [];\r
+ var target, current,\r
+ inlineStyle = CSS.getInlineStyle( _elm ),\r
+ currentStyle = CSS.getWrappedStyle( _elm ),\r
+ targetStyle = CSS.getWrappedStyle( _elm, _cssObject );\r
+ targetStyle.pxPerEm = currentStyle.get( 'fontSize' )._toPx();\r
+ for( var p in _cssObject ){\r
+ p = Util.camelize( p );\r
+ target = targetStyle.get( p );\r
+ current = currentStyle.get( p );\r
+\r
+ if( target.isValid() === false || current.isValid() === false || current.equal( target ) !== false ){\r
+ target.clear();\r
+ current.clear();\r
+ continue;\r
+ };\r
+ \r
+ current.convert( target );\r
+ // alert( current.getValue() + ' , ' + target.getValue() )\r
+ _currentValues.push( current.getValue() );\r
+ _offsetValues.push( current.getOffset( target ) );\r
+ _endValues.push( target.getValue() );\r
+ _targetProperties.push( p );\r
+ _units.push( target.getUnit() );\r
+\r
+ // IE has trouble with opacity if it does not have layout\r
+ // Force it by setting the zoom level \r
+ if( p === 'opacity' && SPECIAL.hasLayout ){\r
+ if( SPECIAL.hasLayout( _elm ) === false ) inlineStyle.zoom = 1;\r
+ inlineStyle.filter = current.getValueText();\r
+ } else {\r
+ inlineStyle[ p ] = current.getValueText();\r
+ };\r
+ \r
+ target.clear();\r
+ current.clear();\r
+ };\r
+ \r
+ var i, _cssTextArray = [];\r
+ for( i = 0; i < _numFrames; ++i ){\r
+ if( i < _numFrames - 1 ){\r
+ tickValue( _currentValues, _offsetValues, _numFrames );\r
+ createCssText( _currentValues, _targetProperties, targetStyle, inlineStyle, _cssTextArray );\r
+ } else {\r
+ createCssText( _endValues, _targetProperties, targetStyle, inlineStyle, _cssTextArray );\r
+ };\r
+ };\r
+ \r
+ ANIMATION_TICKET_ARRAY.push( new AnimationTaskClass(\r
+ _elm, _cssTextArray,\r
+ Type.isFunction( _onComplete ) === true ? _onComplete : null,\r
+ Type.isFunction( _onEnterFrame ) === true ? _onEnterFrame : null,\r
+ _numFrames\r
+ ) );\r
+ \r
+ currentStyle.clear();\r
+ targetStyle.clear(); \r
+ SystemTimer.add( SUPER_USER_KEY, onEnterFrame, 1000 / fpms );\r
+ };\r
+ \r
+ function tickValue( current, offset, numFrames ){\r
+ if( Type.isArray( current ) === true ){\r
+ var ret, i = current.length;\r
+ for( ; i; ){\r
+ --i;\r
+ ret = tickValue( current[ i ], offset[ i ], numFrames );\r
+ if( Type.isNumber( ret ) === true ) current[ i ] = ret;\r
+ };\r
+ } else {\r
+ return current + offset / numFrames;\r
+ };\r
+ };\r
+ function createCssText( update, props, style, inline, cssTextArray ){\r
+ var prop;\r
+ for( var i = props.length; i; ){\r
+ prop = style.get( props[ --i ] );\r
+ prop.setValue( update[ i ] );\r
+ inline[ Util.uncamelize( prop.name ) ] = prop.getValueText();\r
+ //if( prop.name === 'backgroundColor' ) alert( prop.getValueText() + '|' + update[ i ].join( ',') )\r
+ prop.clear();\r
+ };\r
+ cssTextArray.push( CSS.toCssText( inline ) );\r
+ };\r
+ \r
+ function onEnterFrame(){\r
+ var _ticket, l,\r
+ i = 0;\r
+ while( i < ANIMATION_TICKET_ARRAY.length ){\r
+ _ticket = ANIMATION_TICKET_ARRAY[ i ];\r
+ l = _ticket.cssTexts.length;\r
+ _ticket.elm.style.cssText = _ticket.cssTexts.shift();\r
+ if( l === 1 ){\r
+ _ticket.onComplete && _ticket.onComplete();\r
+ delete _ticket.elm;\r
+ delete _ticket.cssTexts;\r
+ delete _ticket.onComplete;\r
+ delete _ticket.onEnterFrame;\r
+ delete _ticket.numFrame;\r
+ ANIMATION_TICKET_ARRAY.splice( i, 1 );\r
+ } else {\r
+ _ticket.onEnterFrame && _ticket.onEnterFrame( l / _ticket.numFrame );\r
+ ++i;\r
+ };\r
+ };\r
+ if( ANIMATION_TICKET_ARRAY.length === 0 ){\r
+ SystemTimer.remove( SUPER_USER_KEY, onEnterFrame );\r
+ };\r
+ };\r
+ \r
+ var AnimationTaskClass = function( elm, cssTexts, onEnterFrame, onComplete, numFrame ){\r
+ this.elm = elm;\r
+ this.cssTexts = cssTexts;\r
+ this.onEnterFrame = onEnterFrame;\r
+ this.onComplete = onComplete;\r
+ this.numFrame = numFrame;\r
+ };\r
+ \r
+ var VisualEffectClass = function( elm ){\r
+ var isHtmlElement;\r
+ \r
+ function registerAnime( _cssObject, _onComplete, _onEnterFrame, _time ){\r
+ var _numFrames = Math.floor( _time / fpms );\r
+ startAnimation( elm, _cssObject, _onComplete, _onEnterFrame, _numFrames );\r
+ };\r
+ function startFadeIn(){\r
+ \r
+ };\r
+ function startFadeOut(){\r
+ \r
+ };\r
+ function update( _x, _y, _w, _h ){\r
+ var _cssText = elm.style.cssText;\r
+ \r
+ };\r
+ \r
+ this.anime = registerAnime;\r
+ this.fadeIn = startFadeIn;\r
+ this.fadeOut = startFadeOut;\r
+ this.update = update;\r
+ };\r
+ \r
+ return {\r
+ create: function( application, _elm ){\r
+ return new VisualEffectClass( _elm );\r
+ },\r
+ isInstanceOfVisualEffect: function( _instance){\r
+ return _instance instanceof VisualEffectClass;\r
+ }\r
+ }\r
+})();\r
+\r
+\r
/* --------------------------------------------\r
- *
+ * \r
*/\r
\r
Application.onCurrentApplicationChange( SUPER_USER_KEY );\r
\r
\r
/* ---------------------------------------------\r
- * broadcast to global
+ * broadcast to global\r
*/\r
window.gOS = {};\r
\r
gOS.registerApplication = Application.register;\r
gOS.registerDriver = File.registerDriver;\r
\r
-})( window );\r
+})( window, document );\r