blob: 3f0b653086f6954f69ecb2b20de75425896d99a5 [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.
*****************************************************************************/
/**
* Progress bar for JSP tag
*/
ProgressBar = Class.create( );
ProgressBar.prototype =
{
/**
* UI component html instance.
*/
__instance : null,
/**
* SOAP action handler
*/
__handler : null,
/**
* 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',
/**
* Initialization routine required by "ProtoType" lib.
* @return, void
*/
initialize : function( id, maskId )
{
this.__instance = $( id );
this.__mask = this.__create_mask( maskId );
this.__cb_bind_closure = this.__cb_bind.bindAsEventListener( this );
this.__neh_click_closure = this.__neh_click.bindAsEventListener( this );
this.__installEventHandlers( id );
},
/**
* Set action handler
*
* @return, void
*/
setHandler : function( handler )
{
this.__handler = handler;
},
/**
* Binding data to the dialog UI. Data includes zoom scaling factor.
*
* @return, void
*/
__cb_bind : function( )
{
if( !this.__handler ) return;
if( this.__handler.__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( );
},
/**
* Create progress bar mask.
*
* @return, __mask
*/
__create_mask : function( maskId )
{
var oMask = $( maskId );
if( !oMask ) return null;
oMask.style.position = 'absolute';
oMask.style.top = '0px';
oMask.style.left = '0px';
oMask.style.width = '50%';
var height = BirtPosition.viewportHeight( );
oMask.style.height = height + 'px';
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';
oMask.style.MozOpacity = 0;
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( "Do you want to cancel current task?" ) )
{
Event.element( event ).disabled = true;
// cancel task
birtSoapRequest.addOperation( Constants.documentId, Constants.Document, "CancelTask", null, { name : Constants.PARAM_TASKID, value : oTaskId.value } );
birtSoapRequest.setURL( this.__handler.getAction( ) );
if ( !birtSoapRequest.getURL( ) ) return;
var myAjax = new Ajax.Request( birtSoapRequest.getURL( ), { method: 'post', postBody: birtSoapRequest.__xml_document,
onSuccess: this.responseHandler, onFailure: this.invalidResponseHandler,
requestHeaders: ['Content-type', 'text/xml; charset=utf-8', 'SOAPAction', '""', 'request-type', 'SOAP', 'Connection', 'keep-alive' ] } );
birtSoapRequest.reset( );
}
},
/**
* Callback function triggered when reponse is ready, status is 200.
*
* @request, httpXmlRequest instance
* @return, void
*/
responseHandler: function( request )
{
progressBar.__stop( );
},
/**
* Callback function triggered when reponse is ready status is not 200.
* Process any http (non-200) errors. Note this is not exception from
* server side.
*
* @request, httpXmlRequest instance
* @return, void
*/
invalidResponseHandler: function( request )
{
progressBar.__stop( );
},
/**
* 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';
}
}