UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

308 lines (258 loc) 7.7 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2010 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Martin Wittemann (martinwittemann) ************************************************************************ */ /** * A basic decorator featuring simple borders based on CSS styles. * This mixin is usually used by {@link qx.ui.decoration.Decorator}. */ qx.Mixin.define("qx.ui.decoration.MSingleBorder", { properties : { /* --------------------------------------------------------------------------- PROPERTY: WIDTH --------------------------------------------------------------------------- */ /** top width of border */ widthTop : { check : "Number", init : 0, apply : "_applyWidth" }, /** right width of border */ widthRight : { check : "Number", init : 0, apply : "_applyWidth" }, /** bottom width of border */ widthBottom : { check : "Number", init : 0, apply : "_applyWidth" }, /** left width of border */ widthLeft : { check : "Number", init : 0, apply : "_applyWidth" }, /* --------------------------------------------------------------------------- PROPERTY: STYLE --------------------------------------------------------------------------- */ /** top style of border */ styleTop : { nullable : true, check : [ "solid", "dotted", "dashed", "double", "inset", "outset", "ridge", "groove"], init : "solid", apply : "_applyStyle" }, /** right style of border */ styleRight : { nullable : true, check : [ "solid", "dotted", "dashed", "double", "inset", "outset", "ridge", "groove"], init : "solid", apply : "_applyStyle" }, /** bottom style of border */ styleBottom : { nullable : true, check : [ "solid", "dotted", "dashed", "double", "inset", "outset", "ridge", "groove"], init : "solid", apply : "_applyStyle" }, /** left style of border */ styleLeft : { nullable : true, check : [ "solid", "dotted", "dashed", "double", "inset", "outset", "ridge", "groove"], init : "solid", apply : "_applyStyle" }, /* --------------------------------------------------------------------------- PROPERTY: COLOR --------------------------------------------------------------------------- */ /** top color of border */ colorTop : { nullable : true, check : "Color", apply : "_applyStyle" }, /** right color of border */ colorRight : { nullable : true, check : "Color", apply : "_applyStyle" }, /** bottom color of border */ colorBottom : { nullable : true, check : "Color", apply : "_applyStyle" }, /** left color of border */ colorLeft : { nullable : true, check : "Color", apply : "_applyStyle" }, /* --------------------------------------------------------------------------- PROPERTY GROUP: EDGE --------------------------------------------------------------------------- */ /** Property group to configure the left border */ left : { group : [ "widthLeft", "styleLeft", "colorLeft" ] }, /** Property group to configure the right border */ right : { group : [ "widthRight", "styleRight", "colorRight" ] }, /** Property group to configure the top border */ top : { group : [ "widthTop", "styleTop", "colorTop" ] }, /** Property group to configure the bottom border */ bottom : { group : [ "widthBottom", "styleBottom", "colorBottom" ] }, /* --------------------------------------------------------------------------- PROPERTY GROUP: TYPE --------------------------------------------------------------------------- */ /** Property group to set the border width of all sides */ width : { group : [ "widthTop", "widthRight", "widthBottom", "widthLeft" ], mode : "shorthand" }, /** Property group to set the border style of all sides */ style : { group : [ "styleTop", "styleRight", "styleBottom", "styleLeft" ], mode : "shorthand" }, /** Property group to set the border color of all sides */ color : { group : [ "colorTop", "colorRight", "colorBottom", "colorLeft" ], mode : "shorthand" } }, members : { /** * Takes a styles map and adds the border styles styles in place * to the given map. This is the needed behavior for * {@link qx.ui.decoration.Decorator}. * * @param styles {Map} A map to add the styles. */ _styleBorder : function(styles) { if (qx.core.Environment.get("qx.theme")) { var Color = qx.theme.manager.Color.getInstance(); var colorTop = Color.resolve(this.getColorTop()); var colorRight = Color.resolve(this.getColorRight()); var colorBottom = Color.resolve(this.getColorBottom()); var colorLeft = Color.resolve(this.getColorLeft()); } else { var colorTop = this.getColorTop(); var colorRight = this.getColorRight(); var colorBottom = this.getColorBottom(); var colorLeft = this.getColorLeft(); } // Add borders var width = this.getWidthTop(); if (width > 0) { styles["border-top"] = width + "px " + this.getStyleTop() + " " + (colorTop || ""); } var width = this.getWidthRight(); if (width > 0) { styles["border-right"] = width + "px " + this.getStyleRight() + " " + (colorRight || ""); } var width = this.getWidthBottom(); if (width > 0) { styles["border-bottom"] = width + "px " + this.getStyleBottom() + " " + (colorBottom || ""); } var width = this.getWidthLeft(); if (width > 0) { styles["border-left"] = width + "px " + this.getStyleLeft() + " " + (colorLeft || ""); } // Check if valid if (qx.core.Environment.get("qx.debug")) { if (styles.length === 0) { throw new Error("Invalid Single decorator (zero border width). Use qx.ui.decorator.Background instead!"); } } // Add basic styles styles.position = "absolute"; }, /** * Implementation of the interface for the single border. * * @return {Map} A map containing the default insets. * (top, right, bottom, left) */ _getDefaultInsetsForBorder : function() { return { top : this.getWidthTop(), right : this.getWidthRight(), bottom : this.getWidthBottom(), left : this.getWidthLeft() }; }, /* --------------------------------------------------------------------------- PROPERTY APPLY ROUTINES --------------------------------------------------------------------------- */ // property apply _applyWidth : function() { this._applyStyle(); this._resetInsets(); }, // property apply _applyStyle : function() { if (qx.core.Environment.get("qx.debug")) { if (this._isInitialized()) { throw new Error("This decorator is already in-use. Modification is not possible anymore!"); } } } } });