blob: 388858485460bd5d45388e9c0bab78ce13e93d51 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2004 Actuate Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Actuate Corporation - Initial implementation.
*****************************************************************************/
/**
* BirtProgressBar
* ...
*/
BirtProgressBar = Class.create( );
BirtProgressBar.prototype = Object.extend( new AbstractUIComponent( ),
{
/**
* Latency that will trigger the progress bar.
*/
__interval : 300,
/**
* Timer instance.
*/
__timer : null,
/**
* mask instance.
*/
__mask : null,
/**
* Closures
*/
__cb_bind_closure : null,
/**
* Event handler for click 'cancel' button
*/
__neh_click_closure : null,
/**
* 'Cancel' button container
*/
__cancel_button : 'cancelTaskButton',
/**
* The input control to save 'taskid'
*/
__task_id : 'taskid',
/**
* When click cancel button, indicate whether redirect a cancel page
*/
__redirect : false,
/**
* Initialization routine required by "ProtoType" lib.
* @return, void
*/
initialize : function( id )
{
this.__initBase( id );
this.__mask = this.__create_mask( );
this.__cb_bind_closure = this.__cb_bind.bindAsEventListener( this );
this.__neh_click_closure = this.__neh_click.bindAsEventListener( this );
this.__installEventHandlers( id );
},
/**
* Binding data to the dialog UI. Data includes zoom scaling factor.
*
* @return, void
*/
__cb_bind : function( )
{
if( birtCommunicationManager.__active )
{
this.__timer = window.setTimeout( this.__cb_bind_closure, this.__interval );
this.__l_show( );
}
else
{
window.clearTimeout( this.__timer );
this.__l_hide( );
}
},
/**
* Install native/birt event handlers.
*
* @id, response id
* @return, void
*/
__installEventHandlers : function( id )
{
var oCancel = this.__loc_cancel_button( );
if( oCancel )
Event.observe( oCancel, 'click', this.__neh_click_closure, false );
},
/**
* Install native/birt event handlers.
*
* @id, response id
* @return, void
*/
__start : function( )
{
// check taskid
var taskid = birtUtility.getTaskId( );
if( taskid.length > 0 )
{
// if taskid existed, show 'Cancel' button
this.__l_show_cancel_button( );
// enable 'cancel' button
var oCancel = this.__loc_cancel_button( );
if( oCancel )
oCancel.disabled = false;
}
else
{
// hide 'Cancel' button
this.__l_hide_cancel_button( );
}
this.__timer = window.setTimeout( this.__cb_bind_closure, this.__interval );
},
/**
* Install native/birt event handlers.
*
* @id, response id
* @return, void
*/
__stop : function( )
{
window.clearTimeout( this.__timer );
this.__l_hide( );
// clear taskid
birtUtility.clearTaskId( );
},
/**
* Install native/birt event handlers.
*
* @id, response id
* @return, void
*/
__create_mask : function( )
{
var oMask = document.createElement( 'iframe' );
// Workaround for IE https secure warning
oMask.src = "birt/pages/common/blank.html";
oMask.style.position = 'absolute';
oMask.style.top = '0px';
oMask.style.left = '0px';
oMask.style.width = '100%';
var height = BirtPosition.viewportHeight( );
oMask.style.height = height + 'px';
oMask.style.zIndex = '300';
oMask.style.backgroundColor = '#dbe4ee';
oMask.style.filter = 'alpha( opacity = 0.0 )';
oMask.style.opacity = '.0';
oMask.scrolling = 'no';
oMask.marginHeight = '0px';
oMask.marginWidth = '0px';
oMask.style.display = 'none';
document.body.appendChild( oMask );
return oMask;
},
/**
* Show progress bar.
*/
__l_show : function( )
{
Element.show( this.__mask, this.__instance );
BirtPosition.center( this.__instance );
},
/**
* Hide progress bar.
*/
__l_hide : function( )
{
Element.hide( this.__instance, this.__mask );
},
/**
* Returns 'cancel' button
* @return, INPUT
*/
__loc_cancel_button: function( )
{
var oIEC = this.__instance.getElementsByTagName( "input" );
var oCancel;
if( oIEC && oIEC.length > 0 )
{
for( var i = 0 ; i < oIEC.length; i++ )
{
if( oIEC[i].type == 'button' )
{
oCancel = oIEC[i];
break;
}
}
}
return oCancel;
},
/**
* Handle click "Cancel" button.
*
* @event, incoming browser native event
* @return, void
*/
__neh_click: function( event )
{
var oTaskId = document.getElementById( this.__task_id );
if( oTaskId && window.confirm( Constants.error.confirmCancelTask ) )
{
if( this.__redirect )
{
this.cancel( oTaskId.value );
}
else
{
birtEventDispatcher.broadcastEvent( birtEvent.__E_CANCEL_TASK, { name : Constants.PARAM_TASKID, value : oTaskId.value } );
Event.element( event ).disabled = true;
}
}
},
/**
* Try to cancel the process.
*
* @return, void
*/
cancel: function( taskid )
{
if( !taskid )
{
var oTaskId = document.getElementById( this.__task_id );
if( oTaskId )
taskid = oTaskId.value;
}
if( !taskid || taskid.length <= 0 )
return;
var hiddenForm = document.createElement( 'form' );
hiddenForm.method = 'post';
hiddenForm.target = '_self';
var url = soapURL;
url = url.replace( /[\/][a-zA-Z]+[?]/, '/CancelTask.jsp?' );
hiddenForm.action = url;
var taskidInput = document.createElement( 'input' );
taskidInput.type = 'hidden';
taskidInput.name = Constants.PARAM_TASKID;
taskidInput.value = taskid;
hiddenForm.appendChild( taskidInput );
var divObj = document.createElement( "DIV" );
document.body.appendChild( divObj );
divObj.style.display = "none";
divObj.appendChild( hiddenForm );
hiddenForm.submit( );
},
/**
* Show "Cancel" button.
*
* @return, void
*/
__l_show_cancel_button: function( )
{
var container = document.getElementById( this.__cancel_button );
if( container )
container.style.display = 'block';
},
/**
* Hide "Cancel" button.
*
* @return, void
*/
__l_hide_cancel_button: function( )
{
var container = document.getElementById( this.__cancel_button );
if( container )
container.style.display = 'none';
},
/**
* Set redirect flag
*
* @param, flag
* @return, void
*/
setRedirect : function( flag )
{
this.__redirect = flag;
}
} );