--- /dev/null
+<component lightWeight="true">\r
+<attach event="onpropertychange" onevent="checkPropertyChange()" />\r
+<attach event="ondetach" onevent="restore()" />\r
+<script>\r
+//<![CDATA[\r
+\r
+var doc = element.document;\r
+\r
+function init() {\r
+ updateBorderBoxWidth();\r
+ updateBorderBoxHeight();\r
+}\r
+\r
+function restore() {\r
+ element.runtimeStyle.width = "";\r
+ element.runtimeStyle.height = "";\r
+}\r
+\r
+/* border width getters */\r
+function getBorderWidth(sSide) {\r
+ if (element.currentStyle["border" + sSide + "Style"] == "none")\r
+ return 0;\r
+ var n = parseInt(element.currentStyle["border" + sSide + "Width"]);\r
+ return n || 0;\r
+}\r
+\r
+function getBorderLeftWidth() { return getBorderWidth("Left"); }\r
+function getBorderRightWidth() { return getBorderWidth("Right"); }\r
+function getBorderTopWidth() { return getBorderWidth("Top"); }\r
+function getBorderBottomWidth() { return getBorderWidth("Bottom"); }\r
+/* end border width getters */\r
+\r
+/* padding getters */\r
+function getPadding(sSide) {\r
+ var n = parseInt(element.currentStyle["padding" + sSide]);\r
+ return n || 0;\r
+}\r
+\r
+function getPaddingLeft() { return getPadding("Left"); }\r
+function getPaddingRight() { return getPadding("Right"); }\r
+function getPaddingTop() { return getPadding("Top"); }\r
+function getPaddingBottom() { return getPadding("Bottom"); }\r
+/* end padding getters */\r
+\r
+function getBoxSizing() {\r
+ var s = element.style;\r
+ var cs = element.currentStyle\r
+\r
+ if (typeof s.boxSizing != "undefined" && s.boxSizing != "")\r
+ return s.boxSizing;\r
+ if (typeof s["box-sizing"] != "undefined" && s["box-sizing"] != "")\r
+ return s["box-sizing"];\r
+ if (typeof cs.boxSizing != "undefined" && cs.boxSizing != "")\r
+ return cs.boxSizing;\r
+ if (typeof cs["box-sizing"] != "undefined" && cs["box-sizing"] != "")\r
+ return cs["box-sizing"];\r
+ return getDocumentBoxSizing();\r
+}\r
+\r
+function getDocumentBoxSizing() {\r
+ if (doc.compatMode == null || doc.compatMode == "BackCompat")\r
+ return "border-box";\r
+ return "content-box"\r
+}\r
+\r
+/* width and height setters */\r
+function setBorderBoxWidth(n) {\r
+ element.runtimeStyle.width = Math.max(0, n - getBorderLeftWidth() -\r
+ getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";\r
+}\r
+\r
+function setBorderBoxHeight(n) {\r
+ element.runtimeStyle.height = Math.max(0, n - getBorderTopWidth() -\r
+ getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";\r
+}\r
+\r
+function setContentBoxWidth(n) {\r
+ element.runtimeStyle.width = Math.max(0, n + getBorderLeftWidth() +\r
+ getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";\r
+}\r
+\r
+function setContentBoxHeight(n) {\r
+ element.runtimeStyle.height = Math.max(0, n + getBorderTopWidth() +\r
+ getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";\r
+}\r
+/* end width and height setters */\r
+\r
+function updateBorderBoxWidth() {\r
+ element.runtimeStyle.width = "";\r
+ if (getDocumentBoxSizing() == getBoxSizing())\r
+ return;\r
+ var csw = element.currentStyle.width;\r
+ if (csw != "auto" && csw.indexOf("px") != -1) {\r
+ if (getBoxSizing() == "border-box")\r
+ setBorderBoxWidth(parseInt(csw));\r
+ else\r
+ setContentBoxWidth(parseInt(csw));\r
+ }\r
+}\r
+\r
+function updateBorderBoxHeight() {\r
+ element.runtimeStyle.height = ""; \r
+ if (getDocumentBoxSizing() == getBoxSizing())\r
+ return;\r
+ var csh = element.currentStyle.height;\r
+ if (csh != "auto" && csh.indexOf("px") != -1) {\r
+ if (getBoxSizing() == "border-box")\r
+ setBorderBoxHeight(parseInt(csh));\r
+ else\r
+ setContentBoxHeight(parseInt(csh));\r
+ }\r
+}\r
+\r
+function checkPropertyChange() {\r
+ var pn = event.propertyName;\r
+ var undef;\r
+\r
+ if (pn == "style.boxSizing" && element.style.boxSizing == "") {\r
+ element.style.removeAttribute("boxSizing");\r
+ element.runtimeStyle.boxSizing = undef; \r
+ }\r
+\r
+\r
+ switch (pn) {\r
+ case "style.width":\r
+ case "style.borderLeftWidth":\r
+ case "style.borderLeftStyle":\r
+ case "style.borderRightWidth":\r
+ case "style.borderRightStyle":\r
+ case "style.paddingLeft":\r
+ case "style.paddingRight":\r
+ updateBorderBoxWidth();\r
+ break;\r
+ \r
+ case "style.height":\r
+ case "style.borderTopWidth":\r
+ case "style.borderTopStyle":\r
+ case "style.borderBottomWidth":\r
+ case "style.borderBottomStyle":\r
+ case "style.paddingTop":\r
+ case "style.paddingBottom":\r
+ updateBorderBoxHeight();\r
+ break;\r
+ \r
+ case "className":\r
+ case "style.boxSizing":\r
+ updateBorderBoxWidth();\r
+ updateBorderBoxHeight();\r
+ break;\r
+ }\r
+}\r
+\r
+init();\r
+\r
+//]]>\r
+</script>\r
+</component>
\ No newline at end of file