@qooxdoo/framework
Version:
The JS Framework for Coders
174 lines (148 loc) • 4.05 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)
************************************************************************ */
/**
* Base class for all list item renderer.
*/
qx.Class.define("qx.ui.mobile.list.renderer.Abstract", {
extend: qx.ui.mobile.container.Composite,
type: "abstract",
/*
*****************************************************************************
CONSTRUCTOR
*****************************************************************************
*/
construct(layout) {
super(layout);
this.initSelectable();
this.initRemovable();
this.initShowArrow();
},
/*
*****************************************************************************
PROPERTIES
*****************************************************************************
*/
properties: {
// overridden
defaultCssClass: {
refine: true,
init: "list-item"
},
/**
* Whether the row is selected.
*/
selected: {
check: "Boolean",
init: false,
apply: "_applySelected"
},
/**
* Whether the row is selectable.
*/
selectable: {
check: "Boolean",
init: true,
apply: "_applyAttribute"
},
/**
* Whether the row is removable.
*/
removable: {
check: "Boolean",
init: false,
apply: "_applyRemovable"
},
/**
* Whether to show an arrow in the row.
*/
showArrow: {
check: "Boolean",
init: false,
apply: "_applyShowArrow"
},
//overridden
activatable: {
refine: true,
init: true
}
},
/*
*****************************************************************************
MEMBERS
*****************************************************************************
*/
members: {
// abstract method
/**
* Resets all defined child widgets. Override this method in your custom
* list item renderer and reset all widgets displaying data. Needed as the
* renderer is used for every row and otherwise data of a different row
* might be displayed, when not all data displaying widgets are used for the row.
* Gets called automatically by the {@link qx.ui.mobile.list.provider.Provider}.
*
*/
reset() {
if (qx.core.Environment.get("qx.debug")) {
throw new Error("Abstract method call");
}
},
// overridden
_getTagName() {
return "li";
},
/**
* Returns the row index of a certain DOM element in the list from the given event.
*
* @param evt {qx.event.type.Event} The causing event.
* @return {Integer} the index of the row.
*/
getRowIndexFromEvent(evt) {
return this.getRowIndex(evt.getOriginalTarget());
},
/**
* Returns the row index of a certain DOM element in the list.
*
* @param element {Element} DOM element to retrieve the index from.
* @return {Integer} the index of the row.
*/
getRowIndex(element) {
while (element.tagName != "LI") {
element = element.parentNode;
}
return element.getAttribute("data-row");
},
// property apply
_applyShowArrow(value, old) {
if (value) {
this.addCssClass("arrow");
} else {
this.removeCssClass("arrow");
}
},
// property apply
_applyRemovable(value, old) {
if (value) {
this.addCssClass("removable");
} else {
this.removeCssClass("removable");
}
},
// property apply
_applySelected(value, old) {
if (value) {
this.addCssClass("selected");
} else {
this.removeCssClass("selected");
}
}
}
});