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
|
/*egw:uses
|
||||||
jquery.jquery;
|
jquery.jquery;
|
||||||
lib/tooltip.js;
|
lib/tooltip.js;
|
||||||
et2_widget;
|
et2_DOMWidget;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -395,5 +395,6 @@
|
|||||||
|
|
||||||
// The base class has no attributes
|
// The base class has no attributes
|
||||||
Class.attributes = {};
|
Class.attributes = {};
|
||||||
|
|
||||||
}).call(window);
|
}).call(window);
|
||||||
|
|
||||||
|
@ -63,9 +63,10 @@ var et2_inputWidget = et2_baseWidget.extend(et2_IInput, {
|
|||||||
set_value: function(_value) {
|
set_value: function(_value) {
|
||||||
this._oldValue = _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();
|
return this.getValue();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getInputNode: function() {
|
||||||
|
return this.node;
|
||||||
|
},
|
||||||
|
|
||||||
getValue: function() {
|
getValue: function() {
|
||||||
if (this.node)
|
var node = this.getInputNode();
|
||||||
|
if (node)
|
||||||
{
|
{
|
||||||
return $j(this.node).val();
|
return $j(node).val();
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._oldValue;
|
return this._oldValue;
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
/*egw:uses
|
/*egw:uses
|
||||||
jquery.jquery;
|
|
||||||
lib/tooltip.js;
|
|
||||||
et2_xml;
|
et2_xml;
|
||||||
et2_common;
|
et2_common;
|
||||||
et2_inheritance;
|
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_inheritance.js"></script>
|
||||||
<script src="../et2_common.js"></script>
|
<script src="../et2_common.js"></script>
|
||||||
<script src="../et2_widget.js"></script>
|
<script src="../et2_widget.js"></script>
|
||||||
|
<script src="../et2_DOMWidget.js"></script>
|
||||||
<script src="../et2_baseWidget.js"></script>
|
<script src="../et2_baseWidget.js"></script>
|
||||||
<script src="../et2_inputWidget.js"></script>
|
<script src="../et2_inputWidget.js"></script>
|
||||||
<script src="../et2_template.js"></script>
|
<script src="../et2_template.js"></script>
|
||||||
@ -191,14 +192,14 @@
|
|||||||
|
|
||||||
et2_loadXMLFromURL(file,
|
et2_loadXMLFromURL(file,
|
||||||
function(_xmldoc) {
|
function(_xmldoc) {
|
||||||
var t1 = (new Date).getTime();
|
|
||||||
|
|
||||||
if (container != null)
|
if (container != null)
|
||||||
{
|
{
|
||||||
container.destroy();
|
container.destroy();
|
||||||
container = null;
|
container = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var t1 = (new Date).getTime();
|
||||||
|
|
||||||
container = new et2_container(null);
|
container = new et2_container(null);
|
||||||
container.setParentDOMNode(document.getElementById("container"));
|
container.setParentDOMNode(document.getElementById("container"));
|
||||||
container.setContentMgr(new et2_contentArrayMgr(content));
|
container.setContentMgr(new et2_contentArrayMgr(content));
|
||||||
|
Loading…
Reference in New Issue
Block a user