forked from extern/egroupware
191 lines
4.4 KiB
JavaScript
191 lines
4.4 KiB
JavaScript
/**
|
|
* eGroupWare eTemplate2 - JS Custom fields object
|
|
*
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
* @package etemplate
|
|
* @subpackage api
|
|
* @link http://www.egroupware.org
|
|
* @author Nathan Gray
|
|
* @copyright Nathan Gray 2011
|
|
* @version $Id$
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
/*egw:uses
|
|
lib/tooltip;
|
|
jquery.jquery;
|
|
et2_core_xml;
|
|
et2_core_DOMWidget;
|
|
et2_core_inputWidget;
|
|
*/
|
|
|
|
var et2_customfields_list = et2_DOMWidget.extend([et2_IDetachedDOM], {
|
|
|
|
attributes: {
|
|
'customfields': {
|
|
'name': 'Custom fields',
|
|
'description': 'Auto filled'
|
|
},
|
|
'fields': {
|
|
'name': 'Custom fields',
|
|
'description': 'Auto filled'
|
|
},
|
|
'value': {
|
|
'name': 'Custom fields',
|
|
'description': 'Auto filled'
|
|
},
|
|
},
|
|
|
|
prefix: '#',
|
|
|
|
init: function() {
|
|
this._super.apply(this, arguments);
|
|
|
|
// Create the table body and the table
|
|
this.tbody = $j(document.createElement("tbody"));
|
|
this.table = $j(document.createElement("table"))
|
|
.addClass("et2_grid");
|
|
this.table.append(this.tbody);
|
|
|
|
this.rows = {};
|
|
this.widgets = {};
|
|
this.detachedNodes = [];
|
|
|
|
if(this.options && this.options.customfields)
|
|
{
|
|
this.loadFields();
|
|
}
|
|
},
|
|
|
|
destroy: function() {
|
|
this._super.apply(this, arguments);
|
|
this.rows = null;
|
|
this.widgets = null;
|
|
},
|
|
|
|
getDOMNode: function(_sender) {
|
|
// If the parent class functions are asking for the DOM-Node, return the
|
|
// outer table.
|
|
if (_sender == this)
|
|
{
|
|
return this.table[0];
|
|
}
|
|
|
|
// Check whether the _sender object exists inside the management array
|
|
if(this.rows && _sender.id && this.rows[_sender.id])
|
|
{
|
|
return this.rows[_sender.id];
|
|
}
|
|
|
|
return null;
|
|
},
|
|
|
|
loadFields: function() {
|
|
if(!this.options || !this.options.customfields) return;
|
|
if(!this.isInTree()) return;
|
|
|
|
// Create the table rows
|
|
for(var field_name in this.options.customfields)
|
|
{
|
|
if(this.rows[field_name]) continue;
|
|
|
|
var field = this.options.customfields[field_name];
|
|
var row = jQuery(document.createElement("tr"))
|
|
.appendTo(this.tbody);
|
|
var cf = jQuery(document.createElement("td"))
|
|
.appendTo(row);
|
|
var attrs = jQuery.extend(true, {'id': field_name}, field);
|
|
if(this._type == 'customfields-list') {
|
|
this.detachedNodes.push(cf[0]);
|
|
this.rows[field_name] = cf[0];
|
|
} else {
|
|
// Label in first column, widget in 2nd
|
|
cf.text(field.label + "");
|
|
cf = jQuery(document.createElement("td"))
|
|
.appendTo(row);
|
|
this.rows[field_name] = cf[0];
|
|
}
|
|
// No label on the widget itself
|
|
delete(attrs.label);
|
|
var widget = this.widgets[field_name] = et2_createWidget(field.type, attrs, this);
|
|
}
|
|
},
|
|
transformAttributes: function(_attrs) {
|
|
this._super.apply(this, arguments);
|
|
|
|
if (this.id)
|
|
{
|
|
// Set the value for this element
|
|
var contentMgr = this.getArrayMgr("content");
|
|
if (contentMgr != null) {
|
|
var val = contentMgr.getEntry(this.id);
|
|
if (val !== null)
|
|
{
|
|
// Only set the values that match desired custom fields
|
|
_attrs["value"] = {};
|
|
for(var key in val)
|
|
{
|
|
if(key.indexOf(this.prefix) == 0) {
|
|
_attrs["value"][key] = val[key];
|
|
}
|
|
}
|
|
//_attrs["value"] = val;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add in settings that are objects
|
|
if(!_attrs.customfields)
|
|
{
|
|
var data = this.getArrayMgr("modifications").getEntry(this.id);
|
|
for(var key in data)
|
|
{
|
|
if(data[key] instanceof Object && ! _attrs[key]) _attrs[key] = data[key];
|
|
}
|
|
}
|
|
if(this.options && this.options.customfields)
|
|
{
|
|
this.loadFields();
|
|
}
|
|
},
|
|
|
|
set_value: function(_value) {
|
|
if(!this.options.customfields) return;
|
|
for(var field_name in this.options.customfields)
|
|
{
|
|
if(!this.widgets[field_name] || !this.widgets[field_name].set_value) continue;
|
|
this.widgets[field_name].set_value(_value[this.prefix + field_name]);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Code for implementing et2_IDetachedDOM
|
|
*/
|
|
getDetachedAttributes: function(_attrs)
|
|
{
|
|
_attrs.push("value", "class");
|
|
},
|
|
|
|
getDetachedNodes: function()
|
|
{
|
|
return this.detachedNodes ? this.detachedNodes : [];
|
|
},
|
|
|
|
setDetachedAttributes: function(_nodes, _values)
|
|
{
|
|
if (typeof _values["value"] != "undefined")
|
|
{
|
|
this.set_value(_values["value"]);
|
|
}
|
|
|
|
if (typeof _values["class"] != "undefined")
|
|
{
|
|
this.set_class(_values["class"]);
|
|
}
|
|
}
|
|
});
|
|
|
|
et2_register_widget(et2_customfields_list, ["customfields", "customfields-list"]);
|
|
|