blob: 3ed10646aa0dc1f39adbd481917365a9da59e996 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2004-2008 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.
*****************************************************************************/
/**
* AbstractBaseDocument
* ...
*/
AbstractBaseReportDocument = function( ) { };
AbstractBaseReportDocument.prototype = Object.extend( new AbstractReportComponent( ),
{
__instance : null,
__has_svg_support : false,
__tocElement : null,
/**
* Event handler closures.
*/
__neh_resize_closure : null,
__neh_select_closure : null,
__beh_toc_closure : null,
__beh_getPage_closure : null,
__beh_changeParameter_closure : null,
__rtl : null,
__cb_bind : function( data )
{
// set rtl only the first time
if ( this.__rtl == null )
{
this.__rtl = false;
var oRtlElement = data.getElementsByTagName( 'rtl' );
if ( oRtlElement && oRtlElement[0] && oRtlElement[0].firstChild )
{
this.__rtl = ( "true" == oRtlElement[0].firstChild.data );
}
}
var documentViewElement = $("documentView");
documentViewElement.style.direction = this.__rtl?"rtl":"ltr";
var docObj = document.getElementById( "Document" );
if ( docObj && BrowserUtility.isMozilla && !BrowserUtility.isFirefox3 )
{
docObj.scrollLeft = this.__rtl?(docObj.offsetWidth + "px"):"0px";
}
},
/**
* Local version of __cb_installEventHandlers.
*/
__local_installEventHandlers : function( id, children, bookmark )
{
// jump to bookmark.
if ( bookmark )
{
var obj = $( bookmark );
if ( obj && obj.scrollIntoView )
{
obj.scrollIntoView( true );
}
}
},
/**
* Unregister any birt event handlers.
*
* @id, object id
* @return, void
*/
__local_disposeEventHandlers : function( id )
{
},
/**
* Handle native event 'click'.
*
* @event, incoming browser native event
* @return, void
*/
__neh_resize : function( event )
{
if ( !this.__updateContainerSize_closure )
{
this.__updateContainerSize_closure = this.__updateContainerSize.bind( this );
}
if ( BrowserUtility.isIE6 || BrowserUtility.isIE7 )
{
// delay resizing operation to the event queue
// else IE might override our changes with its calculated ones
setTimeout( this.__updateContainerSize_closure, 0);
}
else
{
this.__updateContainerSize();
}
},
/**
* Updates the container size according to the window size.
*/
__updateContainerSize : function()
{
var tocWidth = 0;
if ( this.__tocElement && this.__tocElement.__instance )
{
tocWidth = this.__tocElement.getWidth();
}
var width = BirtPosition.viewportWidth( ) - tocWidth - (BrowserUtility.isFirefox?6:4);
// in IE, the width contains the border, unlike in other browsers
if ( BrowserUtility.isIE6 || BrowserUtility.isIE7 ||
BrowserUtility.isOpera || BrowserUtility.isKHTML || BrowserUtility.isSafari )
{
var containerLeft = 0;
// if viewer in rtl mode
if ( Constants.request.rtl )
{
// if report in rtl mode
if ( birtReportDocument && birtReportDocument.__rtl )
{
if ( BrowserUtility.isKHTML || BrowserUtility.isSafari )
{
containerLeft = 0;
}
else
{
containerLeft = -tocWidth;
}
}
else
{
containerLeft = tocWidth;
}
this.__instance.style.left = containerLeft + "px";
}
else
{
this.__instance.style.left = "0px";
}
}
if( width > 0 )
this.__instance.style.width = width + "px";
var height = BirtPosition.viewportHeight( ) - this.__instance.offsetTop - 2;
if( height > 0 )
this.__instance.style.height = height + "px";
this.__instance.style.left = containerLeft + "px";
if (BrowserUtility.isIE) {
var reportContainer = this.__instance.firstChild;
if (reportContainer != null) {
var scrollBarWidth = BrowserUtility._getScrollBarWidth(reportContainer, width, height);
var containerWidth = "100%";
if (height < reportContainer.offsetHeight && width > scrollBarWidth) {
containerWidth = (width - scrollBarWidth) + "px";
}
reportContainer.style.overflowX = "visible";
reportContainer.style.overflowY = "visible";
reportContainer.style.position = "relative";
reportContainer.style.width = containerWidth;
}
}
},
/**
* Birt event handler for "getpage" event.
*
* @id, document id (optional since there's only one document instance)
* @return, true indicating server call
*/
__beh_parameter : function( id )
{
birtParameterDialog.__cb_bind( );
},
/**
* Birt event handler for "change parameter" event.
*
* @id, document id (optional since there's only one document instance)
* @return, true indicating server call
*/
__beh_changeParameter : function( id )
{
// set task id
var taskid = birtUtility.setTaskId( );
if ( birtParameterDialog.__parameter > 0 )
{
birtParameterDialog.__parameter.length = birtParameterDialog.__parameter.length - 1;
}
// Get current page number
var pageNum = birtUtility.getPageNumber( );
if( pageNum > 0 )
{
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"ChangeParameter", null, birtParameterDialog.__parameter,
{ name : Constants.PARAM_SVG, value : this.__has_svg_support? "true" : "false" },
{ name : Constants.PARAM_PAGE, value : pageNum },
{ name : Constants.PARAM_TASKID, value : taskid } );
}
else
{
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"ChangeParameter", null, birtParameterDialog.__parameter,
{ name : Constants.PARAM_SVG, value : this.__has_svg_support? "true" : "false" },
{ name : Constants.PARAM_TASKID, value : taskid } );
}
birtSoapRequest.setURL( soapURL );
birtProgressBar.setRedirect( true );
birtEventDispatcher.setFocusId( null ); // Clear out current focusid.
return true;
},
/**
* Handle change cascade parameter.
*/
__beh_cascadingParameter : function( id, object )
{
// set task id
var taskid = birtUtility.setTaskId( );
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"GetCascadingParameter", null, object,
{ name : Constants.PARAM_TASKID, value : taskid } );
birtSoapRequest.setURL( soapURL );
birtEventDispatcher.setFocusId( null ); // Clear out current focusid.
return true;
},
/**
* Handle native event 'click'.
*
* @event, incoming browser native event
* @return, void
*/
__beh_toc : function( id )
{
// resize document window
this.__neh_resize();
},
/**
* Birt event handler for "getpage" event.
*
* @param id, document id (optional since there's only one document instance)
* @param object, pass some settings, for example: page,bookmark...
* @return, true indicating server call
*/
__beh_getPage : function( id, object )
{
// set task id
var taskid = birtUtility.setTaskId( );
var url = soapURL;
// if set bookmark, delete the bookmark parameter in URL
if( object && object.name && object.name == Constants.PARAM_BOOKMARK )
{
url = birtUtility.deleteURLParameter( url, Constants.PARAM_BOOKMARK );
url = birtUtility.deleteURLParameter( url, Constants.PARAM_ISTOC );
}
birtSoapRequest.setURL( url );
if ( object )
{
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"GetPage", null,
object,
{ name : Constants.PARAM_SVG, value : this.__has_svg_support? "true" : "false" },
{ name : Constants.PARAM_TASKID, value : taskid } );
}
else
{
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"GetPage", null,
{ name : Constants.PARAM_SVG, value : this.__has_svg_support? "true" : "false" },
{ name : Constants.PARAM_TASKID, value : taskid } );
}
birtEventDispatcher.setFocusId( null ); // Clear out current focusid.
birtProgressBar.setRedirect( true );
return true;
},
/**
* Birt event handler for "getpage" event with collected parameters.
*
* @param id, document id (optional since there's only one document instance)
* @param object, pass some settings, for example: page...
* @return, true indicating server call
*/
__beh_getPageInit : function( id, object )
{
// set task id
var taskid = birtUtility.setTaskId( );
// Get current page number
var pageNum = birtUtility.getPageNumber( );
birtSoapRequest.setURL( soapURL );
if ( object )
{
if( pageNum > 0 )
{
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"GetPage", null, birtParameterDialog.__parameter,
object,
{ name : Constants.PARAM_SVG, value : this.__has_svg_support? "true" : "false" },
{ name : Constants.PARAM_PAGE, value : pageNum },
{ name : Constants.PARAM_TASKID, value : taskid } );
}
else
{
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"GetPage", null, birtParameterDialog.__parameter,
object,
{ name : Constants.PARAM_SVG, value : this.__has_svg_support? "true" : "false" },
{ name : Constants.PARAM_TASKID, value : taskid } );
}
}
else
{
if( pageNum > 0 )
{
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"GetPage", null, birtParameterDialog.__parameter,
{ name : Constants.PARAM_SVG, value : this.__has_svg_support? "true" : "false" },
{ name : Constants.PARAM_PAGE, value : pageNum },
{ name : Constants.PARAM_TASKID, value : taskid } );
}
else
{
birtSoapRequest.addOperation( Constants.documentId, Constants.Document,
"GetPage", null, birtParameterDialog.__parameter,
{ name : Constants.PARAM_SVG, value : this.__has_svg_support? "true" : "false" },
{ name : Constants.PARAM_TASKID, value : taskid } );
}
}
birtEventDispatcher.setFocusId( null ); // Clear out current focusid.
birtProgressBar.setRedirect( true );
return true;
},
/**
* Birt event handler for "print" event.
*
* @id, document id (optional since there's only one document instance)
* @return, true indicating server call
*/
__beh_export : function( id )
{
birtSoapRequest.setURL( soapURL);
birtSoapRequest.addOperation( "Document", Constants.Document, "QueryExport", null );
return true;
}
});