aolists-webtop
Version:
Web interface for aoLists
280 lines (276 loc) • 9.65 kB
JavaScript
/**
* @class my.View.Form
* @extends
*
* A. Form to view object
*
* @author Jose Gonzalez
* @copyright (c) 2014, by Candid.Concepts LC
* @version 1.0
* @date <ul>
* <li>1. June 17, 2014</li>
* </ul>
*
* @license All code is licensed under the terms of
* the Open Source LGPL 3.0 license. Commercial use is permitted to the extent
* that the code/component(s) do NOT become part of another Open Source or Commercially
* licensed development library or toolkit without explicit permission.
*
* <p>License details: <a href="http://www.gnu.org/licenses/lgpl.html"
* target="_blank">http://www.gnu.org/licenses/lgpl.html</a></p>
*
*/
my.View.Form = function (req) {
var open;
// Is it a view?
if (req.objid) {
// Look for the object already opened
Ext.Desktop.getManager().each(function (window) {
if (window.objid === req.objid) {
// Found
open = window;
}
});
}
// If already open...
if (open) {
// Show
open.show();
open.toFront();
} else {
// Better have a dataset
if (req.objds) {
// Is it in cache?
var layout = my.Layouts[req.objds];
if (!layout) {
// Nope, get
my.AJAX.call('Layout_Get', req, function (result) {
if (result && result.layout) {
// Standarize
layout = my.Definitions.Form.standarize(result.layout);
// And save
my.Layouts[req.objds] = layout;
// Make the window
my.Generate.Window(req, layout);
}
});
} else {
// Use the cached value to make window
my.Generate.Window(req, layout);
}
}
}
};
my.View.Make = function (req, def) {
};
/* Support */
my.View.SetID = function (root, req) {
if (root.eCS) {
root.req = req;
root.id = 'f-' + req.objds + '-' + req.objid + '-' + root.eCS + '-' + root.eCI.toString();
root.hideLabel = true;
if (root.xtype === 'eceditgrid') {
var cm = [];
var ds = req.obj[root.eCS][root.eCI];
if (ds && ds.v) {
var metadata = ds.v.metaData;
var fm = Ext.form;
for (var i = 0, len = metadata.fields.length; i < len; i++) {
var fname = metadata.fields[i];
var ftype = metadata.fieldTypes[i];
var def = {
id: i,
header: fname,
dataIndex: fname
};
switch (ftype) {
case 'number':
def['editor'] = new fm.NumberField();
break;
case 'date':
def['editor'] = new fm.DateField({
format: 'm/d/y'
});
def['renderer'] = Ext.util.Format.dateRenderer('m/d/y');
break;
case 'string':
def['editor'] = new fm.TextField();
break;
default:
break;
}
cm.addEntry(def);
}
}
root.cm = new Ext.grid.ColumnModel(cm);
root.autoExpandColumn = cm.length - 1;
}
}
if (root.items) {
for (var item = 0; item < root.items.length; item++) {
my.View.SetID(root.items[item], req);
}
}
};
my.View.SetValue = function (root, value, forcechange) {
if (value) {
var comp = root;
if (typeof comp === 'string') {
comp = Ext.getCmp(root);
}
if (typeof comp === 'string') {
comp = Ext.get(root);
}
if (comp) {
if (value.i) {
var phy = Ext.get(comp.id);
if (phy) {
my.Functions.setValueImage(phy, value.i);
}
} else {
if (comp.setValue) {
comp.setValue(value.v, value.fc);
} else {
var el = Ext.getDom(root);
if (el) {
el.value = value.v;
}
}
}
}
}
};
my.View.AddValidation = function (root) {
if (root.eCS) {
if ((root.eCT && !my.User.usability[root.eCT]) || (!root.eCT && root.eCS === 'WPID')) {
root.readOnly = true;
root.noAdd = true;
}
root.listeners = {};
root.listeners.beforetabchange = function (tp, nt, pt) {
nt.layout();
};
root.listeners.sync = function (src, html) {
if (!src.inSync) {
src.inSync = true;
src.syncCount = src.syncCount || 0;
if (html !== src.startValue) {
src.startValue = html;
src.syncCount++;
(function () {
this.syncCount--;
if (this.syncCount === 0) {
src.fireEvent('change', this, this.getValue(), null);
}
}).defer(500, src);
}
delete src.inSync;
}
};
root.listeners.change = function (fld, newv, oldv) {
var def = fld.initialConfig;
if (String(newv) !== String(oldv)) {
my.AJAX.call('UpdateObject', {
objds: def.req.table,
fld: fld.id,
linkid: fld.rmtID,
linktable: fld.rmtTable,
value: newv
}, function (result) {
if (result) {
var data = result.data;
if (data.updates) {
for (var i = 0; i < data.updates.length; i++) {
var upd = data.updates[i];
my.View.SetValue(upd.fld, upd);
}
}
}
});
}
};
root.listeners.check = function (fld, newv) {
fld.fireEvent('change', fld, newv, !newv);
};
root.listeners.beforerender = function (fld) {
if (fld.xtype === 'eceditgrid') {
fld.fireEvent('render', fld);
}
};
root.listeners.render = function (fld) {
var req = fld.req;
if (!req) {
req = fld.initialConfig.req;
}
if (req) {
var obj = req.obj;
if (obj) {
var valueArray = obj[fld.eCS];
if (valueArray && valueArray.length > fld.eCI) {
my.View.SetValue(fld, valueArray[fld.eCI]);
}
}
}
};
root.listeners.blur = function (fld) {
if (fld.eCError) {
fld.markInvalid();
}
};
}
if (root.xtype) {
if (root.xtype === 'panel' || root.xtype === 'form') {
root.defaults = {
border: false,
xtype: 'textfield',
x: 0,
y: 0,
height: 22,
value: '',
selectOnFocus: true,
ctCls: 'x-form-label-right',
typeAhead: true,
mode: 'local'
};
} else if (root.xtype === 'tabpanel') {
root.deferredRender = true;
root.activeTab = 0;
root.findFirst = function (item) {
if (!item.hidden &&
!item.disabled &&
(item instanceof Ext.form.Field ||
item instanceof Ext.form.TwinTriggerField ||
item instanceof Ext.form.ComboBox)) {
item.focus(false, 50);
return true;
}
if (item.items && item.items.find) {
if (this.findFirst) {
var ans = item.items.find(this.findFirst, this);
if (ans) {
return ans;
}
}
}
return false;
};
root.listeners = root.listeners || {};
root.listeners.tabchange = function (tp, pnl) {
if (!pnl.winResized) {
pnl.winResized = true;
Ext.EventManager.fireWindowResize();
}
pnl.items.find(tp.findFirst, pnl);
};
} else if (root.xtype === 'label') {
if (root.ctCls === 'l') {
root.ctCls = 'x-form-label-left';
}
}
}
if (root.items) {
for (var item = 0; item < root.items.length; item++) {
my.View.AddValidation(root.items[item]);
}
}
};