|
|
@@ -584,6 +584,8 @@ class TableAjax extends ViewAjax {
|
|
|
|
|
|
var _tableWidth;
|
|
|
|
|
|
+ var _fieldWidgets = {};
|
|
|
+
|
|
|
/*
|
|
|
initialize the plugin.
|
|
|
*/
|
|
|
@@ -679,7 +681,7 @@ class TableAjax extends ViewAjax {
|
|
|
|
|
|
_foot = _head = _body = _headSort = _headFilter = undefined;// TODO: refactor
|
|
|
/// console.log('L.<?php echo __LINE__; ?> priv.initialRender, _uiNode$Table: ', _uiNode$Table.html())
|
|
|
- }
|
|
|
+ };
|
|
|
|
|
|
/*
|
|
|
creates the table with all its parts and handlers.
|
|
|
@@ -688,8 +690,8 @@ class TableAjax extends ViewAjax {
|
|
|
*/
|
|
|
priv.renderTable = function() {
|
|
|
//create table itself
|
|
|
-/// console.log('renderTable:: _data', _data);//TODO:DBG:RMME
|
|
|
-/// console.log('renderTable:: _uiNode$Table', _uiNode$Table);//TODO:DBG:RMME
|
|
|
+ /// console.log('renderTable:: _data', _data);//TODO:DBG:RMME
|
|
|
+ /// console.log('renderTable:: _uiNode$Table', _uiNode$Table);//TODO:DBG:RMME
|
|
|
|
|
|
//create the header which will later hold both sorting and filtering
|
|
|
/// console.log('L.<?php echo __LINE__; ?> renderTable:: _head', _head);//TODO:DBG:RMME
|
|
|
@@ -799,6 +801,120 @@ class TableAjax extends ViewAjax {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ // TODO: priv.registerFieldWidget(typeName, fuction);
|
|
|
+ // TODO: priv.renderFieldWidget_InlineEdit = function(fldName, value) {}
|
|
|
+ // TODO: priv.renderFieldWidget_FormField = function(fldName, value) {}
|
|
|
+
|
|
|
+ // @usage: priv.renderFieldWidget_TableCell(fldName, val)
|
|
|
+ priv.renderFieldWidget_TableCell = function(fldName, value) {
|
|
|
+ var renderFieldAsTableCell = priv.getFieldWidget_TableCell(fldName);
|
|
|
+ if (!renderFieldAsTableCell) return null;
|
|
|
+ return renderFieldAsTableCell(value);
|
|
|
+ }
|
|
|
+
|
|
|
+ priv.getFieldWidget_TableCell = function(fldName) {
|
|
|
+ var fieldProps = _data.cols[fldName],
|
|
|
+ renderFieldAsTableCell = null;
|
|
|
+ if (!fieldProps) return null;
|
|
|
+ renderFieldAsTableCell = _.get(_fieldWidgets, fldName);
|
|
|
+ if (renderFieldAsTableCell) return renderFieldAsTableCell;
|
|
|
+ switch (fieldProps.type) {
|
|
|
+ case "date":// @return Element - TODO: not used yet
|
|
|
+ renderFieldAsTableCell = _fieldWidgets[fldName] = (function(fldName, fieldProps) {
|
|
|
+ var _fieldName = fldName,
|
|
|
+ _fieldProps = fieldProps;
|
|
|
+ //console.log('FieldWidget: generate function to render field('+_fieldName+') ', fieldProps);
|
|
|
+ return function(val) {
|
|
|
+ //console.log('FieldWidget: run function to render field('+_fieldName+') with value('+val+') ', fieldProps);
|
|
|
+ return val;
|
|
|
+ }
|
|
|
+ }(fldName, fieldProps));
|
|
|
+ break;
|
|
|
+ case "bool":// @return Element - TODO: not used yet
|
|
|
+ renderFieldAsTableCell = _fieldWidgets[fldName] = (function(fldName, fieldProps) {
|
|
|
+ var _fieldName = fldName,
|
|
|
+ _fieldProps = fieldProps;
|
|
|
+ //console.log('FieldWidget: generate function to render field('+_fieldName+') ', fieldProps);
|
|
|
+ return function(val) {
|
|
|
+ //console.log('FieldWidget: run function to render field('+_fieldName+') with value('+val+') ', fieldProps);
|
|
|
+ fldNode = document.createElement('input');
|
|
|
+ fldNode.setAttribute('type', 'checkbox');
|
|
|
+ if (val) fldNode.setAttribute('checked', 'checked');
|
|
|
+ fldNode.setAttribute('disabled', 'disabled');
|
|
|
+ fldNode.appendChild(document.createTextNode(val));
|
|
|
+ return fldNode;
|
|
|
+ }
|
|
|
+ }(fldName, fieldProps));
|
|
|
+ break;
|
|
|
+ case "number":// @return String - TODO: not used yet
|
|
|
+ renderFieldAsTableCell = _fieldWidgets[fldName] = (function(fldName, fieldProps) {
|
|
|
+ var _fieldName = fldName,
|
|
|
+ _fieldProps = fieldProps,
|
|
|
+ _fractionDigits = _.get(_fieldProps, 'fractionDigits', 2);
|
|
|
+ //console.log('FieldWidget: generate function to render field('+_fieldName+') _fractionDigits('+_fractionDigits+')', fieldProps);
|
|
|
+ return function(val) {
|
|
|
+ //console.log('FieldWidget: run function to render field('+_fieldName+') with value('+val+') ', fieldProps);
|
|
|
+ // enumeration
|
|
|
+ // fractionDigits
|
|
|
+ // maxExclusive
|
|
|
+ // maxInclusive
|
|
|
+ // minExclusive
|
|
|
+ // minInclusive
|
|
|
+ // pattern
|
|
|
+ // totalDigits
|
|
|
+ // whiteSpace
|
|
|
+ val = Number(val);
|
|
|
+ return ((val || 0) % 1 === 0)? val : val.toFixed(_fractionDigits);
|
|
|
+ }
|
|
|
+ }(fldName, fieldProps));
|
|
|
+ break;
|
|
|
+ case "string":// @return String
|
|
|
+ renderFieldAsTableCell = _fieldWidgets[fldName] = (function(fldName, fieldProps) {
|
|
|
+ var _fieldName = fldName,
|
|
|
+ _fieldProps = fieldProps,
|
|
|
+ _format = _fieldProps.format || '{0}';
|
|
|
+ //console.log('FieldWidget: generate function to render field('+_fieldName+') ', fieldProps);
|
|
|
+ return function(val) {
|
|
|
+ //console.log('FieldWidget: run function to render field('+_fieldName+') with value('+val+') ', fieldProps);
|
|
|
+ return _format.f(val);
|
|
|
+ }
|
|
|
+ }(fldName, fieldProps));
|
|
|
+ break;
|
|
|
+ case "p5:www_link":// @return Element
|
|
|
+ renderFieldAsTableCell = _fieldWidgets[fldName] = (function(fldName, fieldProps) {
|
|
|
+ var _fieldName = fldName,
|
|
|
+ _fieldProps = fieldProps;
|
|
|
+ // console.log('FieldWidget: generate function to render field('+_fieldName+') ', fieldProps);
|
|
|
+ return function(val) {
|
|
|
+ // console.log('FieldWidget: run function to render field('+_fieldName+') with value('+val+') ', fieldProps);
|
|
|
+ var link = '',
|
|
|
+ linkPrefix = '',
|
|
|
+ a = null,
|
|
|
+ dbg = false;
|
|
|
+ if (!val.length) return '';
|
|
|
+ var linkPrefix = '';
|
|
|
+ if ('http' == val.substr(0, 4)) linkPrefix = '';
|
|
|
+ //else if ('ftp' == val.substr(0, 3))
|
|
|
+ else linkPrefix = 'http://';
|
|
|
+ link = linkPrefix + val;
|
|
|
+
|
|
|
+ var linkErrors = validate({www_link: link}, {www_link: {url: true}});
|
|
|
+ if (linkErrors) {
|
|
|
+ // if(dbg)console.log('linkErrors for (' + link +')', linkErrors);
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ fldNode = document.createElement('a');
|
|
|
+ fldNode.setAttribute('href', link);
|
|
|
+ fldNode.setAttribute('target', '_blank');
|
|
|
+ fldNode.appendChild(document.createTextNode(val));
|
|
|
+ return fldNode;
|
|
|
+ }
|
|
|
+ }(fldName, fieldProps));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return renderFieldAsTableCell;
|
|
|
+ };
|
|
|
+
|
|
|
priv.renderRow = function(props) {
|
|
|
var rowNode = $('<tr></tr>'),
|
|
|
uniqueColName = _state.uniqueCol,
|
|
|
@@ -850,44 +966,22 @@ class TableAjax extends ViewAjax {
|
|
|
cellNode.data('column', columnName);
|
|
|
if (val === undefined) continue;
|
|
|
|
|
|
- format = props[columnName + 'Format'] || columnProps.format || '{0}';
|
|
|
+ // test use field widgets
|
|
|
+ var fldWidgetNode = priv.renderFieldWidget_TableCell(columnName, val);
|
|
|
+ if (fldWidgetNode) {
|
|
|
+ cellNode.empty();
|
|
|
+ cellNode.append(fldWidgetNode);
|
|
|
+ } else if (fldWidgetNode === '') {
|
|
|
+ cellNode.empty();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
+ format = columnProps.format || '{0}';
|
|
|
showTooltip = true;
|
|
|
- switch (columnProps.type) {
|
|
|
+ switch (columnProps.type) {// TODO: used is only: string(default), geom, special, simpleLink
|
|
|
case "string":
|
|
|
cellCnt.html(format.f(val));
|
|
|
break;
|
|
|
- case "p5:www_link":// TODO: P5Type('www_link', columnProps.restrictions).renderTableCell(val)
|
|
|
- if (val.length > 0) {
|
|
|
- var linkPrefix = '';
|
|
|
- if ('http' == val.substr(0, 4)) linkPrefix = '';
|
|
|
- //else if ('ftp' == val.substr(0, 3))
|
|
|
- else linkPrefix = 'http://';
|
|
|
-
|
|
|
- var linkErrors = validate({www_link: linkPrefix + val}, {www_link: {url: true}});
|
|
|
- if (!linkErrors) {
|
|
|
- format = '<a href="' + linkPrefix + '{0}" target="_blank">{0}</a>';
|
|
|
- } else {
|
|
|
- if(dbg)console.log('linkErrors for (' + (linkPrefix + val) +')', linkErrors);
|
|
|
- }
|
|
|
- }
|
|
|
- cellCnt.html(format.f(val));
|
|
|
- break;
|
|
|
- case "number":
|
|
|
- val = Number(val);
|
|
|
- var forceDecimals = !isNaN(columnProps.decimals);
|
|
|
- if (forceDecimals) cellCnt.html(format.f(val.toFixed(columnProps.decimals)));
|
|
|
- else {
|
|
|
- (val || 0) % 1 === 0
|
|
|
- ? cellCnt.html(format.f(val))
|
|
|
- : cellCnt.html(format.f(val.toFixed(priv.options.types.number.decimals || 2)));
|
|
|
- }
|
|
|
- break;
|
|
|
- case "date":
|
|
|
- cellCnt.html(format.f(val));
|
|
|
- break;
|
|
|
- case "bool":
|
|
|
- $('<input type="checkbox" {0} disabled />'.f(val ? "checked" : "")).appendTo(cellCnt);
|
|
|
- break;
|
|
|
case "special":
|
|
|
cellCnt.html(format.f(val));
|
|
|
break;
|
|
|
@@ -990,6 +1084,8 @@ class TableAjax extends ViewAjax {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ }// test fld widgets
|
|
|
+
|
|
|
if (columnProps._tsRetId) {
|
|
|
showTooltip = false;
|
|
|
if (columnProps._tsRetId > 0) {
|
|
|
@@ -2865,8 +2961,7 @@ class TableAjax extends ViewAjax {
|
|
|
type: 'GET',
|
|
|
dataType: 'json',
|
|
|
success: function(data) {
|
|
|
- var content = '';
|
|
|
- if (data && data.simpleType && 'p5:www_link' == data.simpleType) {
|
|
|
+ if ('p5:www_link' == _.get(data, 'simpleType')) {
|
|
|
inlineEditBox$Node.find('.inlineEditBox-cnt').empty();
|
|
|
var label = jQuery('<label>');// for="' + data.htmlFieldName + '">');// "<label for="f22579" class="AjaxTableEdit-label"> ... </label>
|
|
|
label.attr('for', data.htmlFieldName);
|
|
|
@@ -2883,11 +2978,7 @@ class TableAjax extends ViewAjax {
|
|
|
frmItem.attr('class', 'form-control');
|
|
|
frmItem.insertAfter(label);
|
|
|
} else {
|
|
|
- if (data && data.legacy_html) {
|
|
|
- content = data.legacy_html;
|
|
|
- } else {
|
|
|
- content = 'Nieznany błąd';
|
|
|
- }
|
|
|
+ var content = _.get(data, 'legacy_html', "Nieznany błąd");
|
|
|
inlineEditBox$Node.find('.inlineEditBox-cnt').html(content);
|
|
|
}
|
|
|
inlineEditBox$Node.find('.btn-save').show();
|
|
|
@@ -2949,7 +3040,7 @@ class TableAjax extends ViewAjax {
|
|
|
contentType: "application/json; charset=utf-8",
|
|
|
data: '',
|
|
|
success: function(req){
|
|
|
- if (req.data && req.data.tbl_id > 0) {
|
|
|
+ if (_.get(req, 'data.tbl_id') > 0) {
|
|
|
var addHtml = '';
|
|
|
for(var i in req.data.items){
|
|
|
var url = 'index.php?MENU_INIT=VIEWTABLE_AJAX';
|