| /* |
| * xbStyle-css.js |
| * $Revision$ $Date$ |
| * |
| */ |
| |
| /* ***** BEGIN LICENSE BLOCK ***** |
| * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| * |
| * The contents of this file are subject to the Mozilla Public License Version |
| * 1.1 (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * http://www.mozilla.org/MPL/ |
| * |
| * Software distributed under the License is distributed on an "AS IS" basis, |
| * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
| * for the specific language governing rights and limitations under the |
| * License. |
| * |
| * The Original Code is Netscape code. |
| * |
| * The Initial Developer of the Original Code is |
| * Netscape Corporation. |
| * Portions created by the Initial Developer are Copyright (C) 2001 |
| * the Initial Developer. All Rights Reserved. |
| * |
| * Contributor(s): Bob Clary <bclary@netscape.com> |
| * |
| * ***** END LICENSE BLOCK ***** */ |
| |
| // xbStyle.getClip() |
| |
| function cssStyleGetClip() |
| { |
| var clip = this.getEffectiveValue('clip'); |
| |
| // hack opera |
| if (clip == 'rect()') |
| clip = ''; |
| |
| if (clip == '' || clip == 'auto') |
| { |
| clip = 'rect(0px, ' + this.getWidth() + 'px, ' + this.getHeight() + 'px, 0px)'; |
| } |
| else |
| { |
| clip = clip.replace(/px /g, 'px, '); |
| } |
| |
| return clip; |
| } |
| |
| // xbStyle.setClip() |
| |
| function cssStyleSetClip(sClipString) |
| { |
| this.styleObj.clip = sClipString; |
| } |
| |
| // xbStyle.getClipTop() |
| |
| function cssStyleGetClipTop() |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| return rect.top; |
| } |
| |
| // xbStyle.setClipTop() |
| |
| function cssStyleSetClipTop(top) |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| rect.top = top; |
| this.styleObj.clip = rect.toString(); |
| } |
| |
| // xbStyle.getClipRight() |
| |
| function cssStyleGetClipRight() |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| return rect.right; |
| } |
| |
| // xbStyle.setClipRight() |
| |
| function cssStyleSetClipRight(right) |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| rect.right = right; |
| this.styleObj.clip = rect.toString(); |
| } |
| |
| // xbStyle.getClipBottom() |
| |
| function cssStyleGetClipBottom() |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| return rect.bottom; |
| } |
| |
| // xbStyle.setClipBottom() |
| |
| function cssStyleSetClipBottom(bottom) |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| rect.bottom = bottom; |
| this.styleObj.clip = rect.toString(); |
| } |
| |
| // xbStyle.getClipLeft() |
| |
| function cssStyleGetClipLeft() |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| return rect.left; |
| } |
| |
| // xbStyle.setClipLeft() |
| |
| function cssStyleSetClipLeft(left) |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| rect.left = left; |
| this.styleObj.clip = rect.toString(); |
| } |
| |
| // xbStyle.getClipWidth() |
| |
| function cssStyleGetClipWidth() |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| return rect.getWidth(); |
| } |
| |
| // xbStyle.setClipWidth() |
| |
| function cssStyleSetClipWidth(width) |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| rect.setWidth(width); |
| this.styleObj.clip = rect.toString(); |
| } |
| |
| // xbStyle.getClipHeight() |
| |
| function cssStyleGetClipHeight() |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| return rect.getHeight(); |
| } |
| |
| // xbStyle.setClipHeight() |
| |
| function cssStyleSetClipHeight(height) |
| { |
| var clip = this.getClip(); |
| var rect = new xbClipRect(clip); |
| rect.setHeight(height); |
| this.styleObj.clip = rect.toString(); |
| } |
| |
| // the CSS attributes left,top are for absolutely positioned elements |
| // measured relative to the containing element. for relatively positioned |
| // elements, left,top are measured from the element's normal inline position. |
| // getLeft(), setLeft() operate on this type of coordinate. |
| // |
| // to allow dynamic positioning the getOffsetXXX and setOffsetXXX methods are |
| // defined to return and set the position of either an absolutely or relatively |
| // positioned element relative to the containing element. |
| // |
| // |
| |
| // xbStyle.getLeft() |
| |
| function cssStyleGetLeft() |
| { |
| var left = this.getEffectiveValue('left'); |
| if (typeof(left) == 'number') |
| return left; |
| |
| if (left != '' && left.indexOf('px') == -1) |
| { |
| xbDEBUG.dump('xbStyle.getLeft: Element ID=' + this.object.id + ' does not use pixels as units. left=' + left + ' Click Ok to continue, Cancel to Abort'); |
| return 0; |
| } |
| |
| if (top == 'auto' && this.object && typeof(this.object.offsetTop) == 'number') |
| { |
| left = this.object.offsetTop + 'px'; |
| } |
| |
| if (left == '') |
| left = '0px'; |
| |
| return xbToInt(left); |
| } |
| |
| // xbStyle.setLeft() |
| |
| function cssStyleSetLeft(left) |
| { |
| if (typeof(this.styleObj.left) == 'number') |
| this.styleObj.left = left; |
| else |
| this.styleObj.left = left + 'px'; |
| } |
| |
| // xbStyle.getTop() |
| |
| function cssStyleGetTop() |
| { |
| var top = this.getEffectiveValue('top'); |
| if (typeof(top) == 'number') |
| return top; |
| |
| if (top != '' && top.indexOf('px') == -1) |
| { |
| xbDEBUG.dump('xbStyle.getTop: Element ID=' + this.object.id + ' does not use pixels as units. top=' + top + ' Click Ok to continue, Cancel to Abort'); |
| return 0; |
| } |
| |
| if (top == 'auto' && this.object && typeof(this.object.offsetTop) == 'number') |
| { |
| top = this.object.offsetTop + 'px'; |
| } |
| |
| if (top == '') |
| top = '0px'; |
| |
| return xbToInt(top); |
| } |
| |
| // xbStyle.setTop() |
| |
| function cssStyleSetTop(top) |
| { |
| if (typeof(this.styleObj.top) == 'number') |
| this.styleObj.top = top; |
| else |
| this.styleObj.top = top + 'px'; |
| } |
| |
| // xbStyle.getPageX() |
| |
| function cssStyleGetPageX() |
| { |
| var x = 0; |
| var elm = this.object; |
| var elmstyle; |
| var position; |
| |
| //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the |
| // effective position attribute , attempt to use offsetXXX |
| |
| if (typeof(elm.offsetLeft) == 'number') |
| { |
| while (elm) |
| { |
| x += elm.offsetLeft; |
| elm = elm.offsetParent; |
| } |
| } |
| else |
| { |
| while (elm) |
| { |
| if (elm.style) |
| { |
| elmstyle = new xbStyle(elm); |
| position = elmstyle.getEffectiveValue('position'); |
| if (position != '' && position != 'static') |
| x += elmstyle.getLeft(); |
| } |
| elm = elm.parentNode; |
| } |
| } |
| |
| return x; |
| } |
| |
| // xbStyle.setPageX() |
| |
| function cssStyleSetPageX(x) |
| { |
| var xParent = 0; |
| var elm = this.object.parentNode; |
| var elmstyle; |
| var position; |
| |
| //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the |
| // effective position attribute , attempt to use offsetXXX |
| |
| if (elm && typeof(elm.offsetLeft) == 'number') |
| { |
| while (elm) |
| { |
| xParent += elm.offsetLeft; |
| elm = elm.offsetParent; |
| } |
| } |
| else |
| { |
| while (elm) |
| { |
| if (elm.style) |
| { |
| elmstyle = new xbStyle(elm); |
| position = elmstyle.getEffectiveValue('position'); |
| if (position != '' && position != 'static') |
| xParent += elmstyle.getLeft(); |
| } |
| elm = elm.parentNode; |
| } |
| } |
| |
| x -= xParent; |
| |
| this.setLeft(x); |
| } |
| |
| // xbStyle.getPageY() |
| |
| function cssStyleGetPageY() |
| { |
| var y = 0; |
| var elm = this.object; |
| var elmstyle; |
| var position; |
| |
| //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the |
| // effective position attribute , attempt to use offsetXXX |
| |
| if (typeof(elm.offsetTop) == 'number') |
| { |
| while (elm) |
| { |
| y += elm.offsetTop; |
| elm = elm.offsetParent; |
| } |
| } |
| else |
| { |
| while (elm) |
| { |
| if (elm.style) |
| { |
| elmstyle = new xbStyle(elm); |
| position = elmstyle.getEffectiveValue('position'); |
| if (position != '' && position != 'static') |
| y += elmstyle.getTop(); |
| } |
| elm = elm.parentNode; |
| } |
| } |
| |
| return y; |
| } |
| |
| // xbStyle.setPageY() |
| |
| function cssStyleSetPageY(y) |
| { |
| var yParent = 0; |
| var elm = this.object.parentNode; |
| var elmstyle; |
| var position; |
| |
| //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the |
| // effective position attribute , attempt to use offsetXXX |
| |
| if (elm && typeof(elm.offsetTop) == 'number') |
| { |
| while (elm) |
| { |
| yParent += elm.offsetTop; |
| elm = elm.offsetParent; |
| } |
| } |
| else |
| { |
| while (elm) |
| { |
| if (elm.style) |
| { |
| elmstyle = new xbStyle(elm); |
| position = elmstyle.getEffectiveValue('position'); |
| if (position != '' && position != 'static') |
| yParent += elmstyle.getTop(); |
| } |
| elm = elm.parentNode; |
| } |
| } |
| |
| y -= yParent; |
| |
| this.setTop(y); |
| } |
| |
| // xbStyle.getHeight() |
| |
| function cssStyleGetHeight() |
| { |
| var display = this.getEffectiveValue('display'); |
| var height = this.getEffectiveValue('height'); |
| |
| if (typeof(height) == 'number') |
| { |
| // Opera |
| return height; |
| } |
| |
| if (height == '' || height == 'auto' || height.indexOf('%') != -1) |
| { |
| if (typeof(this.object.offsetHeight) == 'number') |
| { |
| height = this.object.offsetHeight + 'px'; |
| } |
| else if (typeof(this.object.scrollHeight) == 'number') |
| { |
| height = this.object.scrollHeight + 'px'; |
| } |
| } |
| |
| if (height.indexOf('px') == -1) |
| { |
| xbDEBUG.dump('xbStyle.getHeight: Element ID=' + this.object.id + ' does not use pixels as units. height=' + height + ' Click Ok to continue, Cancel to Abort'); |
| return 0; |
| } |
| |
| height = xbToInt(height); |
| |
| return height; |
| } |
| |
| // xbStyle.setHeight() |
| |
| function cssStyleSetHeight(height) |
| { |
| if (typeof(this.styleObj.height) == 'number') |
| this.styleObj.height = height; |
| else |
| this.styleObj.height = height + 'px'; |
| } |
| |
| // xbStyle.getWidth() |
| |
| function cssStyleGetWidth() |
| { |
| var display = this.getEffectiveValue('display'); |
| var width = this.getEffectiveValue('width'); |
| |
| if (typeof(width) == 'number') |
| { |
| // note Opera 6 has a bug in width and offsetWidth where |
| // it returns the page width. Use clientWidth instead. |
| if (navigator.userAgent.indexOf('Opera') != -1) |
| return this.object.clientWidth; |
| else |
| return width; |
| } |
| |
| if (width == '' || width == 'auto' || width.indexOf('%') != -1) |
| { |
| if (typeof(this.object.offsetWidth) == 'number') |
| { |
| width = this.object.offsetWidth + 'px'; |
| } |
| else if (typeof(this.object.scrollHeight) == 'number') |
| { |
| width = this.object.scrollWidth + 'px'; |
| } |
| } |
| |
| if (width.indexOf('px') == -1) |
| { |
| xbDEBUG.dump('xbStyle.getWidth: Element ID=' + this.object.id + ' does not use pixels as units. width=' + width + ' Click Ok to continue, Cancel to Abort'); |
| return 0; |
| } |
| |
| width = xbToInt(width); |
| |
| return width; |
| } |
| |
| // xbStyle.setWidth() |
| |
| function cssStyleSetWidth(width) |
| { |
| if (typeof(this.styleObj.width) == 'number') |
| this.styleObj.width = width; |
| else |
| this.styleObj.width = width + 'px'; |
| } |
| |
| // xbStyle.getVisibility() |
| |
| function cssStyleGetVisibility() |
| { |
| return this.getEffectiveValue('visibility'); |
| } |
| |
| // xbStyle.setVisibility() |
| |
| function cssStyleSetVisibility(visibility) |
| { |
| this.styleObj.visibility = visibility; |
| } |
| |
| // xbStyle.getzIndex() |
| |
| function cssStyleGetzIndex() |
| { |
| return xbToInt(this.getEffectiveValue('zIndex')); |
| } |
| |
| // xbStyle.setzIndex() |
| |
| function cssStyleSetzIndex(zIndex) |
| { |
| this.styleObj.zIndex = zIndex; |
| } |
| |
| // xbStyle.getBackgroundColor() |
| |
| function cssStyleGetBackgroundColor() |
| { |
| return this.getEffectiveValue('backgroundColor'); |
| } |
| |
| // xbStyle.setBackgroundColor() |
| |
| function cssStyleSetBackgroundColor(color) |
| { |
| this.styleObj.backgroundColor = color; |
| } |
| |
| // xbStyle.getColor() |
| |
| function cssStyleGetColor() |
| { |
| return this.getEffectiveValue('color'); |
| } |
| |
| // xbStyle.setColor() |
| |
| function cssStyleSetColor(color) |
| { |
| this.styleObj.color = color; |
| } |
| |
| // xbStyle.moveAbove() |
| |
| function xbStyleMoveAbove(cont) |
| { |
| this.setzIndex(cont.getzIndex()+1); |
| } |
| |
| // xbStyle.moveBelow() |
| |
| function xbStyleMoveBelow(cont) |
| { |
| var zindex = cont.getzIndex() - 1; |
| |
| this.setzIndex(zindex); |
| } |
| |
| // xbStyle.moveBy() |
| |
| function xbStyleMoveBy(deltaX, deltaY) |
| { |
| this.moveTo(this.getLeft() + deltaX, this.getTop() + deltaY); |
| } |
| |
| // xbStyle.moveTo() |
| |
| function xbStyleMoveTo(x, y) |
| { |
| this.setLeft(x); |
| this.setTop(y); |
| } |
| |
| // xbStyle.moveToAbsolute() |
| |
| function xbStyleMoveToAbsolute(x, y) |
| { |
| this.setPageX(x); |
| this.setPageY(y); |
| } |
| |
| // xbStyle.resizeBy() |
| |
| function xbStyleResizeBy(deltaX, deltaY) |
| { |
| this.setWidth( this.getWidth() + deltaX ); |
| this.setHeight( this.getHeight() + deltaY ); |
| } |
| |
| // xbStyle.resizeTo() |
| |
| function xbStyleResizeTo(x, y) |
| { |
| this.setWidth(x); |
| this.setHeight(y); |
| } |
| |
| // xbStyle.setInnerHTML() |
| |
| function xbSetInnerHTML(str) |
| { |
| if (typeof(this.object.innerHTML) != 'undefined') |
| this.object.innerHTML = str; |
| } |
| |
| |
| // Extensions to xbStyle that are not supported by Netscape Navigator 4 |
| // but that provide cross browser implementations of properties for |
| // Mozilla, Gecko, Netscape 6.x and Opera |
| |
| // xbStyle.getBorderTopWidth() |
| |
| function cssStyleGetBorderTopWidth() |
| { |
| return xbToInt(this.getEffectiveValue('borderTopWidth')); |
| } |
| |
| // xbStyle.getBorderRightWidth() |
| |
| function cssStyleGetBorderRightWidth() |
| { |
| return xbToInt(this.getEffectiveValue('borderRightWidth')); |
| } |
| |
| // xbStyle.getBorderBottomWidth() |
| |
| function cssStyleGetBorderBottomWidth() |
| { |
| return xbToInt(this.getEffectiveValue('borderBottomWidth')); |
| } |
| |
| // xbStyle.getBorderLeftWidth() |
| |
| function cssStyleGetBorderLeftWidth() |
| { |
| return xbToInt(this.getEffectiveValue('borderLeftWidth')); |
| } |
| |
| // xbStyle.getMarginTop() |
| |
| function cssStyleGetMarginTop() |
| { |
| return xbToInt(this.getEffectiveValue('marginTop')); |
| } |
| |
| // xbStyle.getMarginRight() |
| |
| function cssStyleGetMarginRight() |
| { |
| return xbToInt(this.getEffectiveValue('marginRight')); |
| } |
| |
| // xbStyle.getMarginBottom() |
| |
| function cssStyleGetMarginBottom() |
| { |
| return xbToInt(this.getEffectiveValue('marginBottom')); |
| } |
| |
| // xbStyle.getMarginLeft() |
| |
| function cssStyleGetMarginLeft() |
| { |
| return xbToInt(this.getEffectiveValue('marginLeft')); |
| } |
| |
| // xbStyle.getPaddingTop() |
| |
| function cssStyleGetPaddingTop() |
| { |
| return xbToInt(this.getEffectiveValue('paddingTop')); |
| } |
| |
| // xbStyle.getPaddingRight() |
| |
| function cssStyleGetPaddingRight() |
| { |
| return xbToInt(this.getEffectiveValue('paddingRight')); |
| } |
| |
| // xbStyle.getPaddingBottom() |
| |
| function cssStyleGetPaddingBottom() |
| { |
| return xbToInt(this.getEffectiveValue('paddingBottom')); |
| } |
| |
| // xbStyle.getPaddingLeft() |
| |
| function cssStyleGetPaddingLeft() |
| { |
| return xbToInt(this.getEffectiveValue('paddingLeft')); |
| } |
| |
| // xbStyle.getClientWidth() |
| |
| function cssStyleGetClientWidth() |
| { |
| return this.getWidth() + this.getPaddingLeft() + this.getPaddingRight(); |
| /* |
| if (typeof(this.object.clientWidth) == 'number') |
| return this.object.clientWidth; |
| |
| return null; |
| */ |
| } |
| |
| // xbStyle.getClientHeight() |
| |
| function cssStyleGetClientHeight() |
| { |
| return this.getHeight() + this.getPaddingTop() + this.getPaddingBottom(); |
| /* |
| if (typeof(this.object.clientHeight) == 'number') |
| return this.object.clientHeight; |
| |
| return null; |
| */ |
| } |
| |
| xbStyle.prototype.getClip = cssStyleGetClip; |
| xbStyle.prototype.setClip = cssStyleSetClip; |
| xbStyle.prototype.getClipTop = cssStyleGetClipTop; |
| xbStyle.prototype.setClipTop = cssStyleSetClipTop; |
| xbStyle.prototype.getClipRight = cssStyleGetClipRight; |
| xbStyle.prototype.setClipRight = cssStyleSetClipRight; |
| xbStyle.prototype.getClipBottom = cssStyleGetClipBottom; |
| xbStyle.prototype.setClipBottom = cssStyleSetClipBottom; |
| xbStyle.prototype.getClipLeft = cssStyleGetClipLeft; |
| xbStyle.prototype.setClipLeft = cssStyleSetClipLeft; |
| xbStyle.prototype.getClipWidth = cssStyleGetClipWidth; |
| xbStyle.prototype.setClipWidth = cssStyleSetClipWidth; |
| xbStyle.prototype.getClipHeight = cssStyleGetClipHeight; |
| xbStyle.prototype.setClipHeight = cssStyleSetClipHeight; |
| xbStyle.prototype.getLeft = cssStyleGetLeft; |
| xbStyle.prototype.setLeft = cssStyleSetLeft; |
| xbStyle.prototype.getTop = cssStyleGetTop; |
| xbStyle.prototype.setTop = cssStyleSetTop; |
| xbStyle.prototype.getPageX = cssStyleGetPageX; |
| xbStyle.prototype.setPageX = cssStyleSetPageX; |
| xbStyle.prototype.getPageY = cssStyleGetPageY; |
| xbStyle.prototype.setPageY = cssStyleSetPageY; |
| xbStyle.prototype.getVisibility = cssStyleGetVisibility; |
| xbStyle.prototype.setVisibility = cssStyleSetVisibility; |
| xbStyle.prototype.getzIndex = cssStyleGetzIndex; |
| xbStyle.prototype.setzIndex = cssStyleSetzIndex; |
| xbStyle.prototype.getHeight = cssStyleGetHeight; |
| xbStyle.prototype.setHeight = cssStyleSetHeight; |
| xbStyle.prototype.getWidth = cssStyleGetWidth; |
| xbStyle.prototype.setWidth = cssStyleSetWidth; |
| xbStyle.prototype.getBackgroundColor = cssStyleGetBackgroundColor; |
| xbStyle.prototype.setBackgroundColor = cssStyleSetBackgroundColor; |
| xbStyle.prototype.getColor = cssStyleGetColor; |
| xbStyle.prototype.setColor = cssStyleSetColor; |
| xbStyle.prototype.setInnerHTML = xbSetInnerHTML; |
| xbStyle.prototype.getBorderTopWidth = cssStyleGetBorderTopWidth; |
| xbStyle.prototype.getBorderRightWidth = cssStyleGetBorderRightWidth; |
| xbStyle.prototype.getBorderBottomWidth = cssStyleGetBorderBottomWidth; |
| xbStyle.prototype.getBorderLeftWidth = cssStyleGetBorderLeftWidth; |
| xbStyle.prototype.getMarginLeft = cssStyleGetMarginLeft; |
| xbStyle.prototype.getMarginTop = cssStyleGetMarginTop; |
| xbStyle.prototype.getMarginRight = cssStyleGetMarginRight; |
| xbStyle.prototype.getMarginBottom = cssStyleGetMarginBottom; |
| xbStyle.prototype.getMarginLeft = cssStyleGetMarginLeft; |
| xbStyle.prototype.getPaddingTop = cssStyleGetPaddingTop; |
| xbStyle.prototype.getPaddingRight = cssStyleGetPaddingRight; |
| xbStyle.prototype.getPaddingBottom = cssStyleGetPaddingBottom; |
| xbStyle.prototype.getPaddingLeft = cssStyleGetPaddingLeft; |
| xbStyle.prototype.getClientWidth = cssStyleGetClientWidth; |
| xbStyle.prototype.getClientHeight = cssStyleGetClientHeight; |
| |