@qooxdoo/framework
Version:
The JS Framework for Coders
121 lines (102 loc) • 3.28 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2011 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:
* Tino Butz (tbtz)
************************************************************************ */
/**
* The TextArea is a multi-line text input field.
*/
qx.Class.define("qx.ui.mobile.form.TextArea", {
extend: qx.ui.mobile.core.Widget,
include: [
qx.ui.mobile.form.MValue,
qx.ui.mobile.form.MText,
qx.ui.form.MForm,
qx.ui.form.MModelProperty,
qx.ui.mobile.form.MState
],
implement: [qx.ui.form.IField, qx.ui.form.IForm, qx.ui.form.IModel],
/*
*****************************************************************************
CONSTRUCTOR
*****************************************************************************
*/
/**
* @param value {var?null} The value of the widget.
*/
construct(value) {
super();
if (qx.core.Environment.get("qx.mobile.nativescroll") == false) {
this.addListener("appear", this._fixChildElementsHeight, this);
this.addListener("input", this._fixChildElementsHeight, this);
this.addListener("changeValue", this._fixChildElementsHeight, this);
}
},
/*
*****************************************************************************
PROPERTIES
*****************************************************************************
*/
properties: {
// overridden
defaultCssClass: {
refine: true,
init: "text-area"
}
},
members: {
// overridden
_getTagName() {
return "textarea";
},
/**
* Synchronizes the elements.scrollHeight and its height.
* Needed for making textArea scrollable.
* @param evt {qx.event.type.Data} a custom event.
*/
_fixChildElementsHeight(evt) {
this.getContentElement().style.height = "auto";
this.getContentElement().style.height =
this.getContentElement().scrollHeight + "px";
var scroll = this.__getScrollContainer();
if (scroll) {
scroll.refresh();
}
},
/**
* Returns the parent scroll container of this widget.
* @return {qx.ui.mobile.container.Scroll} the parent scroll container or <code>null</code>
*/
__getScrollContainer() {
var scroll = this;
while (!(scroll instanceof qx.ui.mobile.container.Scroll)) {
if (scroll.getLayoutParent) {
var layoutParent = scroll.getLayoutParent();
if (
layoutParent == null ||
layoutParent instanceof qx.ui.mobile.core.Root
) {
return null;
}
scroll = layoutParent;
} else {
return null;
}
}
return scroll;
}
},
destruct() {
if (qx.core.Environment.get("qx.mobile.nativescroll") == false) {
this.removeListener("appear", this._fixChildElementsHeight, this);
this.removeListener("input", this._fixChildElementsHeight, this);
this.removeListener("changeValue", this._fixChildElementsHeight, this);
}
}
});