forked from extern/egroupware
Moved et2_DOMWidget to its own file, added getInputNode function to et2_inputWidget
This commit is contained in:
parent
d2a87d2de4
commit
7a6b105dc3
185
etemplate/js/et2_DOMWidget.js
Normal file
185
etemplate/js/et2_DOMWidget.js
Normal file
@ -0,0 +1,185 @@
|
||||
/**
|
||||
* eGroupWare eTemplate2 - JS DOM Widget class
|
||||
*
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @package etemplate
|
||||
* @subpackage api
|
||||
* @link http://www.egroupware.org
|
||||
* @author Andreas Stöckel
|
||||
* @copyright Stylite 2011
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
/*egw:uses
|
||||
et2_widget;
|
||||
*/
|
||||
|
||||
/**
|
||||
* Interface for all widget classes, which are based on a DOM node.
|
||||
*/
|
||||
var et2_IDOMNode = new Interface({
|
||||
/**
|
||||
* Returns the DOM-Node of the current widget. The return value has to be
|
||||
* a plain DOM node. If you want to return an jQuery object as you receive
|
||||
* it with
|
||||
*
|
||||
* obj = $j(node);
|
||||
*
|
||||
* simply return obj[0];
|
||||
*
|
||||
* @param _sender The _sender parameter defines which widget is asking for
|
||||
* the DOMNode. Depending on that, the widget may return different nodes.
|
||||
* This is used in the grid. Normally the _sender parameter can be omitted
|
||||
* in most implementations of the getDOMNode function.
|
||||
* However, you should always define the _sender parameter when calling
|
||||
* getDOMNode!
|
||||
*/
|
||||
getDOMNode: function(_sender) {}
|
||||
});
|
||||
|
||||
/**
|
||||
* Abstract widget class which can be inserted into the DOM. All widget classes
|
||||
* deriving from this class have to care about implementing the "getDOMNode"
|
||||
* function which has to return the DOM-Node.
|
||||
*/
|
||||
var et2_DOMWidget = et2_widget.extend(et2_IDOMNode, {
|
||||
|
||||
/**
|
||||
* When the DOMWidget is initialized, it grabs the DOM-Node of the parent
|
||||
* object (if available) and passes it to its own "createDOMNode" function
|
||||
*/
|
||||
init: function(_parent, _type) {
|
||||
this.parentNode = null;
|
||||
|
||||
this._attachSet = {
|
||||
"node": null,
|
||||
"parent": null
|
||||
};
|
||||
|
||||
// Call the inherited constructor
|
||||
this._super.apply(this, arguments);
|
||||
},
|
||||
|
||||
/**
|
||||
* Detatches the node from the DOM and clears all references to the parent
|
||||
* node or the dom node of this widget.
|
||||
*/
|
||||
destroy: function() {
|
||||
|
||||
this.detatchFromDOM();
|
||||
this.parentNode = null;
|
||||
this._attachSet = {};
|
||||
|
||||
this._super();
|
||||
},
|
||||
|
||||
/**
|
||||
* Automatically tries to attach this node to the parent widget.
|
||||
*/
|
||||
onSetParent: function() {
|
||||
// Check whether the parent implements the et2_IDOMNode interface. If
|
||||
// yes, grab the DOM node and create our own.
|
||||
if (this._parent && this._parent.implements(et2_IDOMNode)) {
|
||||
this.setParentDOMNode(this._parent.getDOMNode(this));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Detaches the widget from the DOM tree, if it had been attached to the
|
||||
* DOM-Tree using the attachToDOM method.
|
||||
*/
|
||||
detatchFromDOM: function() {
|
||||
|
||||
if (this._attachSet.node && this._attachSet.parent)
|
||||
{
|
||||
// Remove the current node from the parent node
|
||||
this._attachSet.parent.removeChild(this._attachSet.node);
|
||||
|
||||
// Reset the "attachSet"
|
||||
this._attachSet = {
|
||||
"node": null,
|
||||
"parent": null
|
||||
};
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Attaches the widget to the DOM tree. Fails if the widget is already
|
||||
* attached to the tree or no parent node or no node for this widget is
|
||||
* defined.
|
||||
*/
|
||||
attachToDOM: function() {
|
||||
// Attach the DOM node of this widget (if existing) to the new parent
|
||||
var node = this.getDOMNode(this);
|
||||
if (node && this.parentNode &&
|
||||
(node != this._attachSet.node ||
|
||||
this.parentNode != this._attachSet.parent))
|
||||
{
|
||||
this.parentNode.appendChild(node);
|
||||
|
||||
// Store the currently attached nodes
|
||||
this._attachSet = {
|
||||
"node": node,
|
||||
"parent": this.parentNode
|
||||
};
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Set the parent DOM node of this element. If another parent node is already
|
||||
* set, this widget removes itself from the DOM tree
|
||||
*/
|
||||
setParentDOMNode: function(_node) {
|
||||
if (_node != this.parentNode)
|
||||
{
|
||||
// Detatch this element from the DOM tree
|
||||
this.detatchFromDOM();
|
||||
|
||||
this.parentNode = _node;
|
||||
|
||||
// And attatch the element to the DOM tree
|
||||
this.attachToDOM();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the parent node.
|
||||
*/
|
||||
getParentDOMNode: function() {
|
||||
return this.parentNode;
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the id of the DOM-Node.
|
||||
*/
|
||||
set_id: function(_value) {
|
||||
|
||||
this.id = _value;
|
||||
|
||||
var node = this.getDOMNode(this);
|
||||
if (node)
|
||||
{
|
||||
if (_value != "")
|
||||
{
|
||||
node.setAttribute("id", _value);
|
||||
}
|
||||
else
|
||||
{
|
||||
node.removeAttribute("id");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
/*egw:uses
|
||||
jquery.jquery;
|
||||
lib/tooltip.js;
|
||||
et2_widget;
|
||||
et2_DOMWidget;
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -395,5 +395,6 @@
|
||||
|
||||
// The base class has no attributes
|
||||
Class.attributes = {};
|
||||
|
||||
}).call(window);
|
||||
|
||||
|
@ -63,9 +63,10 @@ var et2_inputWidget = et2_baseWidget.extend(et2_IInput, {
|
||||
set_value: function(_value) {
|
||||
this._oldValue = _value;
|
||||
|
||||
if (this.node)
|
||||
var node = this.getInputNode();
|
||||
if (node)
|
||||
{
|
||||
$j(this.node).val(_value);
|
||||
$j(node).val(_value);
|
||||
}
|
||||
},
|
||||
|
||||
@ -87,10 +88,15 @@ var et2_inputWidget = et2_baseWidget.extend(et2_IInput, {
|
||||
return this.getValue();
|
||||
},
|
||||
|
||||
getInputNode: function() {
|
||||
return this.node;
|
||||
},
|
||||
|
||||
getValue: function() {
|
||||
if (this.node)
|
||||
var node = this.getInputNode();
|
||||
if (node)
|
||||
{
|
||||
return $j(this.node).val();
|
||||
return $j(node).val();
|
||||
}
|
||||
|
||||
return this._oldValue;
|
||||
|
@ -13,8 +13,6 @@
|
||||
"use strict";
|
||||
|
||||
/*egw:uses
|
||||
jquery.jquery;
|
||||
lib/tooltip.js;
|
||||
et2_xml;
|
||||
et2_common;
|
||||
et2_inheritance;
|
||||
@ -448,170 +446,4 @@ var et2_widget = Class.extend({
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Interface for all widget classes, which are based on a DOM node.
|
||||
*/
|
||||
var et2_IDOMNode = new Interface({
|
||||
/**
|
||||
* Returns the DOM-Node of the current widget. The return value has to be
|
||||
* a plain DOM node. If you want to return an jQuery object as you receive
|
||||
* it with
|
||||
*
|
||||
* obj = $j(node);
|
||||
*
|
||||
* simply return obj[0];
|
||||
*
|
||||
* @param _sender The _sender parameter defines which widget is asking for
|
||||
* the DOMNode.depending on that, the widget may return different nodes.
|
||||
* This is used in the grid. Normally the _sender parameter can be omitted
|
||||
* in most implementations of the getDOMNode function.
|
||||
* However, you should always define the _sender parameter when calling
|
||||
* getDOMNode!
|
||||
*/
|
||||
getDOMNode: function(_sender) {}
|
||||
});
|
||||
|
||||
/**
|
||||
* Abstract widget class which can be inserted into the DOM. All widget classes
|
||||
* deriving from this class have to care about implementing the "getDOMNode"
|
||||
* function which has to return the DOM-Node.
|
||||
*/
|
||||
var et2_DOMWidget = et2_widget.extend(et2_IDOMNode, {
|
||||
|
||||
/**
|
||||
* When the DOMWidget is initialized, it grabs the DOM-Node of the parent
|
||||
* object (if available) and passes it to its own "createDOMNode" function
|
||||
*/
|
||||
init: function(_parent, _type) {
|
||||
this.parentNode = null;
|
||||
|
||||
this._attachSet = {
|
||||
"node": null,
|
||||
"parent": null
|
||||
};
|
||||
|
||||
// Call the inherited constructor
|
||||
this._super.apply(this, arguments);
|
||||
},
|
||||
|
||||
/**
|
||||
* Detatches the node from the DOM and clears all references to the parent
|
||||
* node or the dom node of this widget.
|
||||
*/
|
||||
destroy: function() {
|
||||
|
||||
this.detatchFromDOM();
|
||||
this.parentNode = null;
|
||||
this._attachSet = {};
|
||||
|
||||
this._super();
|
||||
},
|
||||
|
||||
/**
|
||||
* Automatically tries to attach this node to the parent widget.
|
||||
*/
|
||||
onSetParent: function() {
|
||||
// Check whether the parent implements the et2_IDOMNode interface. If
|
||||
// yes, grab the DOM node and create our own.
|
||||
if (this._parent && this._parent.implements(et2_IDOMNode)) {
|
||||
this.setParentDOMNode(this._parent.getDOMNode(this));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Detaches the widget from the DOM tree, if it had been attached to the
|
||||
* DOM-Tree using the attachToDOM method.
|
||||
*/
|
||||
detatchFromDOM: function() {
|
||||
|
||||
if (this._attachSet.node && this._attachSet.parent)
|
||||
{
|
||||
// Remove the current node from the parent node
|
||||
this._attachSet.parent.removeChild(this._attachSet.node);
|
||||
|
||||
// Reset the "attachSet"
|
||||
this._attachSet = {
|
||||
"node": null,
|
||||
"parent": null
|
||||
};
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Attaches the widget to the DOM tree. Fails if the widget is already
|
||||
* attached to the tree or no parent node or no node for this widget is
|
||||
* defined.
|
||||
*/
|
||||
attachToDOM: function() {
|
||||
// Attach the DOM node of this widget (if existing) to the new parent
|
||||
var node = this.getDOMNode(this);
|
||||
if (node && this.parentNode &&
|
||||
(node != this._attachSet.node ||
|
||||
this.parentNode != this._attachSet.parent))
|
||||
{
|
||||
this.parentNode.appendChild(node);
|
||||
|
||||
// Store the currently attached nodes
|
||||
this._attachSet = {
|
||||
"node": node,
|
||||
"parent": this.parentNode
|
||||
};
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Set the parent DOM node of this element. If another parent node is already
|
||||
* set, this widget removes itself from the DOM tree
|
||||
*/
|
||||
setParentDOMNode: function(_node) {
|
||||
if (_node != this.parentNode)
|
||||
{
|
||||
// Detatch this element from the DOM tree
|
||||
this.detatchFromDOM();
|
||||
|
||||
this.parentNode = _node;
|
||||
|
||||
// And attatch the element to the DOM tree
|
||||
this.attachToDOM();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the parent node.
|
||||
*/
|
||||
getParentDOMNode: function() {
|
||||
return this.parentNode;
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the id of the DOM-Node.
|
||||
*/
|
||||
set_id: function(_value) {
|
||||
|
||||
this.id = _value;
|
||||
|
||||
var node = this.getDOMNode(this);
|
||||
if (node)
|
||||
{
|
||||
if (_value != "")
|
||||
{
|
||||
node.setAttribute("id", _value);
|
||||
}
|
||||
else
|
||||
{
|
||||
node.removeAttribute("id");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
<script src="../et2_inheritance.js"></script>
|
||||
<script src="../et2_common.js"></script>
|
||||
<script src="../et2_widget.js"></script>
|
||||
<script src="../et2_DOMWidget.js"></script>
|
||||
<script src="../et2_baseWidget.js"></script>
|
||||
<script src="../et2_inputWidget.js"></script>
|
||||
<script src="../et2_template.js"></script>
|
||||
@ -191,14 +192,14 @@
|
||||
|
||||
et2_loadXMLFromURL(file,
|
||||
function(_xmldoc) {
|
||||
var t1 = (new Date).getTime();
|
||||
|
||||
if (container != null)
|
||||
{
|
||||
container.destroy();
|
||||
container = null;
|
||||
}
|
||||
|
||||
var t1 = (new Date).getTime();
|
||||
|
||||
container = new et2_container(null);
|
||||
container.setParentDOMNode(document.getElementById("container"));
|
||||
container.setContentMgr(new et2_contentArrayMgr(content));
|
||||
|
Loading…
Reference in New Issue
Block a user