You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
9.5 KiB
281 lines
9.5 KiB
/* Copyright (c) Business Objects 2006. All rights reserved. */
|
|
|
|
/**
|
|
* ReportPage constructor
|
|
*
|
|
* @param kwArgs.id [String] DOM node id
|
|
* @param kwArgs.bgColor [String] Background color of the page
|
|
* @param kwArgs.width [Int] Page content's width in pixels
|
|
* @param kwArgs.height [Int] Page content's height in pixels
|
|
* @param kwArgs.topMargin [Int] Top margin of report page in pixels
|
|
* @param kwArgs.rightMargin [Int] Right margin of report page in pixels
|
|
* @param kwArgs.bottomMargin [Int] Bottom margin of report page in pixels
|
|
* @param kwArgs.leftMargin [Int] Left margin of report page in pixels
|
|
* @param kwArgs.extraCssFileUrl [String] The path of an extra CSS file used in report page
|
|
*/
|
|
|
|
bobj.crv.newReportPage = function(kwArgs) {
|
|
kwArgs = MochiKit.Base.update({
|
|
id: bobj.uniqueId(),
|
|
bgColor: '#FFFFFF',
|
|
width: 720,
|
|
height: 984,
|
|
extraCssFileUrl: "",
|
|
documentView: bobj.crv.ReportPage.DocumentView.PRINT_LAYOUT
|
|
}, kwArgs);
|
|
|
|
var o = newWidget(kwArgs.id);
|
|
o.widgetType = 'ReportPage';
|
|
|
|
// Update instance with constructor arguments
|
|
bobj.fillIn(o, kwArgs);
|
|
|
|
// Update instance with member functions
|
|
o.initOld = o.init;
|
|
o.resizeOld = o.resize;
|
|
MochiKit.Base.update(o, bobj.crv.ReportPage);
|
|
|
|
return o;
|
|
};
|
|
|
|
bobj.crv.ReportPage = {
|
|
DocumentView : {
|
|
WEB_LAYOUT : 'weblayout',
|
|
PRINT_LAYOUT : 'printlayout'
|
|
},
|
|
|
|
/**
|
|
* Disposes report page by removing its layer and stylesheet from DOM
|
|
*/
|
|
dispose : function() {
|
|
MochiKit.DOM.removeElement (this.layer);
|
|
},
|
|
|
|
/**
|
|
* DO NOT REMOVE. USED BY WEB ELEMENTS
|
|
*/
|
|
displayScrollBars : function (isDisplay) {
|
|
this.layer.style.overflow = isDisplay ? "auto" : "hidden";
|
|
},
|
|
|
|
/**
|
|
* DO NOT REMOVE. USED BY WEB ELEMENTS
|
|
*/
|
|
isDisplayScrollBars : function () {
|
|
this.layer.style.overflow == "auto";
|
|
},
|
|
|
|
|
|
update : function(update) {
|
|
if (update && update.cons == "bobj.crv.newReportPage") {
|
|
this.updateSize ( {
|
|
width : update.args.width,
|
|
height : update.args.height
|
|
});
|
|
|
|
this.layer.scrollLeft = 0;
|
|
this.layer.scrollTop = 0;
|
|
this.updateHTML (update.args.content, false);
|
|
}
|
|
},
|
|
|
|
scrollToHighlighted : function (scrollWindow) {
|
|
if(this._iframe) {
|
|
var iframeDoc = _ie ? this._iframe.contentWindow.document : this._iframe.contentDocument;
|
|
var e = iframeDoc.getElementById("CrystalHighLighted");
|
|
if(e) {
|
|
var ePosition = MochiKit.Style.getElementPosition (e, null, iframeDoc);
|
|
if(scrollWindow) {
|
|
var reportPagePos = MochiKit.Style.getElementPosition (this.layer);
|
|
window.scrollTo (reportPagePos.x + ePosition.x , reportPagePos.y + ePosition.y);
|
|
}
|
|
else {
|
|
this.layer.scrollLeft = ePosition.x;
|
|
this.layer.scrollTop = ePosition.y;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
updateHTML : function(content, useAnimation) {
|
|
if (content) {
|
|
if(!this._iframe) {
|
|
this._iframe = MochiKit.DOM.createDOM('IFRAME', {id : this.id + '_iframe', width : '100%', height : '100%', frameBorder : '0', margin : '0'})
|
|
this._pageNode.appendChild(this._iframe);
|
|
}
|
|
|
|
if(useAnimation)
|
|
this._iframe.style.display = "none";
|
|
|
|
var iframeDoc = _ie ? this._iframe.contentWindow.document : this._iframe.contentDocument;
|
|
iframeDoc.open();
|
|
iframeDoc.write(this.getIFrameHTML (content));
|
|
iframeDoc.close();
|
|
|
|
if(useAnimation)
|
|
bobj.displayElementWithAnimation(this._iframe);
|
|
}
|
|
},
|
|
|
|
getIFrameHTML : function (content) {
|
|
var extraCssFileLink = "";
|
|
if (this.extraCssFileUrl != "") {
|
|
extraCssFileLink = "<link href=\"" + this.extraCssFileUrl + "\" rel=\"stylesheet\" type=\"text/css\" />\r\n";
|
|
}
|
|
|
|
return "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" +
|
|
"<html>\r\n" +
|
|
"<head>\r\n" +
|
|
extraCssFileLink +
|
|
"<style> body { overflow :hidden; margin : 0px;}</style>\r\n" +
|
|
"</head>\r\n" +
|
|
"<body>\r\n" +
|
|
content +
|
|
"</body>\r\n" +
|
|
"</html>";
|
|
},
|
|
|
|
/*
|
|
* Updates size of report page based on update object
|
|
* @param update [{width,height,marginLeft,marginRight,marginTop}] dimension and margins
|
|
* of report p
|
|
*/
|
|
updateSize : function(sizeObject) {
|
|
|
|
if (sizeObject) {
|
|
this.width = (sizeObject.width != undefined) ? sizeObject.width : this.width;
|
|
this.height = (sizeObject.height != undefined) ? sizeObject.height : this.height;
|
|
}
|
|
|
|
if (this._pageNode) {
|
|
var isBBM = bobj.isBorderBoxModel ();
|
|
this._pageNode.style.width = (isBBM ? this.width + 2: this.width) + 'px';
|
|
this._pageNode.style.height = (isBBM ? this.height + 2: this.height) + 'px';
|
|
}
|
|
|
|
if (this._shadowNode) {
|
|
this._shadowNode.style.width = (isBBM ? this.width + 2: this.width) + 'px';
|
|
this._shadowNode.style.height = (isBBM ? this.height + 2: this.height) + 'px';
|
|
}
|
|
},
|
|
|
|
getHTML : function() {
|
|
var h = bobj.html;
|
|
var isBBM = bobj.isBorderBoxModel ();
|
|
|
|
var layerStyle = {
|
|
width : '100%',
|
|
height : '100%',
|
|
overflow : 'auto',
|
|
position : 'absolute'
|
|
};
|
|
|
|
var pageStyle = {
|
|
position : 'relative',
|
|
width : (isBBM ? this.width + 2: this.width) + 'px',
|
|
height : (isBBM ? this.height + 2: this.height) + 'px',
|
|
'z-index' : 1,
|
|
'border-width' : '1px',
|
|
'border-style' : 'solid',
|
|
'background-color' : this.bgColor,
|
|
overflow : 'hidden',
|
|
'text-align' : 'left'
|
|
};
|
|
|
|
var shadowStyle = {
|
|
position : 'absolute',
|
|
'z-index' : 0,
|
|
display : 'none',
|
|
width : (isBBM ? this.width + 2: this.width) + 'px',
|
|
height : (isBBM ? this.height + 2: this.height) + 'px',
|
|
top : '0px',
|
|
left : '0px'
|
|
};
|
|
|
|
|
|
var shadowHTML = '';
|
|
if (this.documentView.toLowerCase () == bobj.crv.ReportPage.DocumentView.PRINT_LAYOUT) {
|
|
layerStyle['background-color'] = '#8E8E8E';
|
|
pageStyle['border-color'] = '#000000';
|
|
shadowStyle['background-color'] = '#737373';
|
|
shadowHTML = h.DIV ( {
|
|
id : this.id + '_shadow',
|
|
'class' : 'menuShadow',
|
|
style : shadowStyle
|
|
})
|
|
/* page should appear in the center for print layouts */
|
|
layerStyle['text-align'] = 'center'; /* For page centering in IE quirks mode */
|
|
pageStyle['margin'] = '0 auto'; /* center the page horizontally - CSS2 */
|
|
pageStyle['top'] = "6px";
|
|
} else {
|
|
/* Web Layout*/
|
|
layerStyle['background-color'] = '#FFFFFF';
|
|
pageStyle['border-color'] = '#FFFFFF';
|
|
/* page should appear in left for web layouts */
|
|
pageStyle['margin'] = '0';
|
|
}
|
|
|
|
var html = h.DIV ( {
|
|
id : this.id,
|
|
style : layerStyle,
|
|
'class' : 'insetBorder'
|
|
}, h.DIV ( {
|
|
id : this.id + '_page',
|
|
style : pageStyle
|
|
}), shadowHTML);
|
|
|
|
return html;
|
|
},
|
|
|
|
init : function() {
|
|
this._pageNode = getLayer (this.id + '_page');
|
|
this._shadowNode = getLayer (this.id + '_shadow');
|
|
|
|
this.initOld ();
|
|
|
|
this.updateHTML (this.content, true);
|
|
},
|
|
|
|
updateShadowLocation : function () {
|
|
var updateFunc = function () {
|
|
if(this._shadowNode && this._pageNode) {
|
|
this._shadowNode.style.display = "none"; //Must hide dropshadow as it can cause scrollbars to appear
|
|
var pageNodPos = {x : this._pageNode.offsetLeft, y : this._pageNode.offsetTop};
|
|
this._shadowNode.style.display = "block";
|
|
this._shadowNode.style.top = pageNodPos.y + (bobj.isBorderBoxModel() ? 4 : 6) + "px";
|
|
this._shadowNode.style.left = pageNodPos.x + (bobj.isBorderBoxModel() ? 4 : 6) + "px";
|
|
}
|
|
}
|
|
|
|
setTimeout(bobj.bindFunctionToObject(updateFunc,this), 0); // Must be executed after viewer has finished doLayout
|
|
},
|
|
|
|
/**
|
|
* Resizes the outer dimensions of the widget.
|
|
*/
|
|
resize : function (w, h) {
|
|
bobj.setOuterSize(this.layer, w, h);
|
|
if(_moz)
|
|
this.css.clip = bobj.getRect(0,w,h,0);
|
|
|
|
this.updateShadowLocation ();
|
|
},
|
|
|
|
/**
|
|
* @return Returns an object with width and height properties such that there
|
|
* would be no scroll bars around the page if they were applied to the widget.
|
|
*/
|
|
getBestFitSize : function() {
|
|
var page = this._pageNode;
|
|
return {
|
|
width: page.offsetWidth + 30,
|
|
height: page.offsetHeight + 30
|
|
};
|
|
},
|
|
|
|
hideFrame : function() {
|
|
this.css.borderStyle = 'none';
|
|
this._pageNode.style.border = '';
|
|
}
|
|
};
|