|
|
@@ -803,7 +803,8 @@ class TableAjax extends ViewAjax {
|
|
|
var rowNode = $('<tr></tr>'),
|
|
|
uniqueColName = _state.uniqueCol,
|
|
|
rowPK = (uniqueColName in props)? props[uniqueColName] : null,
|
|
|
- cellNode
|
|
|
+ cellNode,
|
|
|
+ dbg = priv.options.debug
|
|
|
;
|
|
|
|
|
|
if (priv.options.rowFunctions || priv.options.filtersClean) {
|
|
|
@@ -855,6 +856,22 @@ class TableAjax extends ViewAjax {
|
|
|
case "string":
|
|
|
cellCnt.html(format.f(val));
|
|
|
break;
|
|
|
+ case "p5:www_link":
|
|
|
+ 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);
|
|
|
@@ -1425,111 +1442,111 @@ class TableAjax extends ViewAjax {
|
|
|
var props = _data.cols[column];
|
|
|
tooltip = props.filterTooltip === true ? undefined : props.filterTooltip === false ? '' : props.filterTooltip;
|
|
|
placeHolder = props.placeHolder === true ? undefined : props.placeHolder === false ? '' : props.placeHolder;
|
|
|
+ if (props.hidden) continue;
|
|
|
|
|
|
- if (!props.hidden) {
|
|
|
- headCell = $('<th></th>').appendTo(node);
|
|
|
- headCell.css({padding: '0'});
|
|
|
- if (i == 1) headCell.addClass('stickyCol2');
|
|
|
-
|
|
|
- // @mark MarkTableAjaxFilterColType
|
|
|
- switch (props.type || 'string') {
|
|
|
- case "number":
|
|
|
- if (placeHolder == undefined) placeHolder = priv.options.types.number.placeHolder;
|
|
|
- placeHolder = (placeHolder === true || placeHolder == undefined) ? '10..20 =50' : placeHolder === false ? '' : placeHolder;
|
|
|
- if (tooltip == undefined) tooltip = priv.options.types.number.filterTooltip;
|
|
|
- tooltip = (tooltip === true || tooltip == undefined) ? 'Values 10 to 20:<br/>10..20<br/>Values exactly 50:<br/>=50' : tooltip === false ? '' : tooltip;
|
|
|
- elem = $('<input placeholder="{0}" class="filter" type="text" />'.f(placeHolder));
|
|
|
- elem.on('keyup', {column: column}, priv.filterChanged);
|
|
|
- break;
|
|
|
- case "date":
|
|
|
- if (placeHolder == undefined) placeHolder = priv.options.types.date.placeHolder;
|
|
|
- placeHolder = (placeHolder === true || placeHolder == undefined) ? '-7..0' : placeHolder === false ? '' : placeHolder;
|
|
|
- if (tooltip == undefined) tooltip = priv.options.types.date.filterTooltip;
|
|
|
- tooltip = (tooltip === true || tooltip == undefined) ? 'Today:<br/>0..1<br/>A week today excluded:<br/>-7..0' : tooltip === false ? '' : tooltip;
|
|
|
- elem = $('<div><input placeholder="{0}" class="filter" type="text" /></div>'.f(placeHolder));
|
|
|
-
|
|
|
- if (priv.options.types.date.datePicker === true || priv.options.types.date.datePicker == undefined)
|
|
|
- {
|
|
|
- if ($().datepicker)
|
|
|
- {
|
|
|
- elem.addClass('date-wrap');
|
|
|
- var today = 0;//new priv.ext.XDate(false).setHours(0, 0, 0, 0).toString('yyyy-MM-dd');
|
|
|
- var dp = $('<div style="float:right" class="date" data-date="{0}" data-date-format="{1}" />'.f(today, 'yyyy-mm-dd')).appendTo(elem);
|
|
|
- $('<input style="display:none" type="text" />').appendTo(dp);
|
|
|
- $('<span class="add-on"><i class="glyphicon glyphicon-chevron-right"></i></span>').on('click', {op: "l"}, priv.dpOpChanged).appendTo(dp);
|
|
|
- $('<span class="add-on"><i class="glyphicon glyphicon-chevron-left"></i></span>').on('click', {op: "r"}, priv.dpOpChanged).appendTo(dp);
|
|
|
- dp.datepicker({weekStart:1});
|
|
|
- dp.on('changeDate', {column: column, input: $('input.filter', elem)}, priv.dpClicked);
|
|
|
- }
|
|
|
- else
|
|
|
- if (priv.options.debug) console.log('datepicker plugin not found');
|
|
|
- }
|
|
|
- elem.on('keyup', 'input.filter', {column: column}, priv.filterChanged);
|
|
|
- break;
|
|
|
- case "bool":
|
|
|
- if (tooltip == undefined) tooltip = priv.options.types.bool.filterTooltip;
|
|
|
- tooltip = (tooltip === true || tooltip == undefined) ? 'Toggle between:<br/>indeterminate,<br/>checked,<br/>unchecked' : tooltip === false ? '' : tooltip;
|
|
|
- elem = $('<input class="filter indeterminate" checked type="checkbox" />');
|
|
|
- elem.on('click', {column: column}, priv.filterChanged);
|
|
|
- break;
|
|
|
- case "string":
|
|
|
- if (placeHolder == undefined) placeHolder = priv.options.types.string.placeHolder;
|
|
|
- placeHolder = (placeHolder === true || placeHolder == undefined) ? '%' : placeHolder === false ? '' : placeHolder;
|
|
|
- if (tooltip == undefined) tooltip = priv.options.types.string.filterTooltip;
|
|
|
- tooltip = (tooltip === true || tooltip == undefined) ? 'Find str: str<br/>Find all but str: !str<br/>Find str inside: %str%' : tooltip === false ? '' : tooltip;
|
|
|
- elem = $('<input placeholder="{0}" class="filter" type="text" size="8" />'.f(placeHolder));
|
|
|
- elem.on('keyup', {column: column}, priv.filterChanged);
|
|
|
- break;
|
|
|
- case "special":
|
|
|
- elem = $('<div> </div>');
|
|
|
- break;
|
|
|
- case "simpleLink":
|
|
|
- elem = $('<div> </div>');
|
|
|
- break;
|
|
|
- case "geom":
|
|
|
- if (placeHolder == undefined) placeHolder = priv.options.types.string.placeHolder;
|
|
|
- placeHolder = (placeHolder === true || placeHolder == undefined) ? '%' : placeHolder === false ? '' : placeHolder;
|
|
|
- elem = $('<input placeholder="{0}" class="filter" type="text" size="8" />'.f(placeHolder));
|
|
|
- elem.on('keyup', {column: column}, priv.filterChanged);
|
|
|
- break;
|
|
|
- case "none":
|
|
|
- elem = $('<div> </div>');
|
|
|
- break;
|
|
|
- }
|
|
|
+ headCell = $('<th></th>').appendTo(node);
|
|
|
+ headCell.css({padding: '0'});
|
|
|
+ if (i == 1) headCell.addClass('stickyCol2');
|
|
|
+
|
|
|
+ // @mark MarkTableAjaxFilterColType
|
|
|
+ switch (props.type || 'string') {
|
|
|
+ case "number":
|
|
|
+ if (placeHolder == undefined) placeHolder = priv.options.types.number.placeHolder;
|
|
|
+ placeHolder = (placeHolder === true || placeHolder == undefined) ? '10..20 =50' : placeHolder === false ? '' : placeHolder;
|
|
|
+ if (tooltip == undefined) tooltip = priv.options.types.number.filterTooltip;
|
|
|
+ tooltip = (tooltip === true || tooltip == undefined) ? 'Values 10 to 20:<br/>10..20<br/>Values exactly 50:<br/>=50' : tooltip === false ? '' : tooltip;
|
|
|
+ elem = $('<input placeholder="{0}" class="filter" type="text" />'.f(placeHolder));
|
|
|
+ elem.on('keyup', {column: column}, priv.filterChanged);
|
|
|
+ break;
|
|
|
+ case "date":
|
|
|
+ if (placeHolder == undefined) placeHolder = priv.options.types.date.placeHolder;
|
|
|
+ placeHolder = (placeHolder === true || placeHolder == undefined) ? '-7..0' : placeHolder === false ? '' : placeHolder;
|
|
|
+ if (tooltip == undefined) tooltip = priv.options.types.date.filterTooltip;
|
|
|
+ tooltip = (tooltip === true || tooltip == undefined) ? 'Today:<br/>0..1<br/>A week today excluded:<br/>-7..0' : tooltip === false ? '' : tooltip;
|
|
|
+ elem = $('<div><input placeholder="{0}" class="filter" type="text" /></div>'.f(placeHolder));
|
|
|
+
|
|
|
+ if (priv.options.types.date.datePicker === true || priv.options.types.date.datePicker == undefined)
|
|
|
+ {
|
|
|
+ if ($().datepicker)
|
|
|
+ {
|
|
|
+ elem.addClass('date-wrap');
|
|
|
+ var today = 0;//new priv.ext.XDate(false).setHours(0, 0, 0, 0).toString('yyyy-MM-dd');
|
|
|
+ var dp = $('<div style="float:right" class="date" data-date="{0}" data-date-format="{1}" />'.f(today, 'yyyy-mm-dd')).appendTo(elem);
|
|
|
+ $('<input style="display:none" type="text" />').appendTo(dp);
|
|
|
+ $('<span class="add-on"><i class="glyphicon glyphicon-chevron-right"></i></span>').on('click', {op: "l"}, priv.dpOpChanged).appendTo(dp);
|
|
|
+ $('<span class="add-on"><i class="glyphicon glyphicon-chevron-left"></i></span>').on('click', {op: "r"}, priv.dpOpChanged).appendTo(dp);
|
|
|
+ dp.datepicker({weekStart:1});
|
|
|
+ dp.on('changeDate', {column: column, input: $('input.filter', elem)}, priv.dpClicked);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ if (priv.options.debug) console.log('datepicker plugin not found');
|
|
|
+ }
|
|
|
+ elem.on('keyup', 'input.filter', {column: column}, priv.filterChanged);
|
|
|
+ break;
|
|
|
+ case "bool":
|
|
|
+ if (tooltip == undefined) tooltip = priv.options.types.bool.filterTooltip;
|
|
|
+ tooltip = (tooltip === true || tooltip == undefined) ? 'Toggle between:<br/>indeterminate,<br/>checked,<br/>unchecked' : tooltip === false ? '' : tooltip;
|
|
|
+ elem = $('<input class="filter indeterminate" checked type="checkbox" />');
|
|
|
+ elem.on('click', {column: column}, priv.filterChanged);
|
|
|
+ break;
|
|
|
+ case "p5:www_link":
|
|
|
+ case "string":
|
|
|
+ if (placeHolder == undefined) placeHolder = priv.options.types.string.placeHolder;
|
|
|
+ placeHolder = (placeHolder === true || placeHolder == undefined) ? '%' : placeHolder === false ? '' : placeHolder;
|
|
|
+ if (tooltip == undefined) tooltip = priv.options.types.string.filterTooltip;
|
|
|
+ tooltip = (tooltip === true || tooltip == undefined) ? 'Find str: str<br/>Find all but str: !str<br/>Find str inside: %str%' : tooltip === false ? '' : tooltip;
|
|
|
+ elem = $('<input placeholder="{0}" class="filter" type="text" size="8" />'.f(placeHolder));
|
|
|
+ elem.on('keyup', {column: column}, priv.filterChanged);
|
|
|
+ break;
|
|
|
+ case "special":
|
|
|
+ elem = $('<div> </div>');
|
|
|
+ break;
|
|
|
+ case "simpleLink":
|
|
|
+ elem = $('<div> </div>');
|
|
|
+ break;
|
|
|
+ case "geom":
|
|
|
+ if (placeHolder == undefined) placeHolder = priv.options.types.string.placeHolder;
|
|
|
+ placeHolder = (placeHolder === true || placeHolder == undefined) ? '%' : placeHolder === false ? '' : placeHolder;
|
|
|
+ elem = $('<input placeholder="{0}" class="filter" type="text" size="8" />'.f(placeHolder));
|
|
|
+ elem.on('keyup', {column: column}, priv.filterChanged);
|
|
|
+ break;
|
|
|
+ case "none":
|
|
|
+ elem = $('<div> </div>');
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- if (false) {// tooltip OFF - (tooltip)
|
|
|
- elem.tooltip({
|
|
|
- title: tooltip.trim(),
|
|
|
- html: true,
|
|
|
- container: 'body',
|
|
|
- trigger: 'focus',
|
|
|
- placement: 'top',
|
|
|
- delay: {
|
|
|
- show: 500,
|
|
|
- hide: 100
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
+ if (false) {// tooltip OFF - (tooltip)
|
|
|
+ elem.tooltip({
|
|
|
+ title: tooltip.trim(),
|
|
|
+ html: true,
|
|
|
+ container: 'body',
|
|
|
+ trigger: 'focus',
|
|
|
+ placement: 'top',
|
|
|
+ delay: {
|
|
|
+ show: 500,
|
|
|
+ hide: 100
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- if (elem && props.filter) {
|
|
|
- $.map(_state.filters.filterCols, function(colProps, col) {
|
|
|
- if (col == column) {
|
|
|
- var columnSettings = _data.cols[col];
|
|
|
- if (columnSettings.type == 'bool') {
|
|
|
- if (colProps.filter) elem.prop('checked', true).removeClass('indeterminate');
|
|
|
- else if (!colProps.filter) elem.prop('checked', false).removeClass('indeterminate');
|
|
|
- else if (colProps.filter == '') elem.addClass('indeterminate');
|
|
|
- }
|
|
|
- else elem.val(colProps.filter);
|
|
|
+ if (elem && props.filter) {
|
|
|
+ $.map(_state.filters.filterCols, function(colProps, col) {
|
|
|
+ if (col == column) {
|
|
|
+ var columnSettings = _data.cols[col];
|
|
|
+ if (columnSettings.type == 'bool') {
|
|
|
+ if (colProps.filter) elem.prop('checked', true).removeClass('indeterminate');
|
|
|
+ else if (!colProps.filter) elem.prop('checked', false).removeClass('indeterminate');
|
|
|
+ else if (colProps.filter == '') elem.addClass('indeterminate');
|
|
|
}
|
|
|
- });
|
|
|
- if (priv.options.forceFilterInit && undefined !== priv.options.forceFilterInit[column]) {
|
|
|
- elem.prop('disabled', true);
|
|
|
+ else elem.val(colProps.filter);
|
|
|
}
|
|
|
- elem.appendTo(headCell);
|
|
|
-
|
|
|
- _filterFields[column] = elem;
|
|
|
+ });
|
|
|
+ if (priv.options.forceFilterInit && undefined !== priv.options.forceFilterInit[column]) {
|
|
|
+ elem.prop('disabled', true);
|
|
|
}
|
|
|
+ elem.appendTo(headCell);
|
|
|
+
|
|
|
+ _filterFields[column] = elem;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -5601,6 +5618,7 @@ jQuery(document).ready(function(){
|
|
|
if ($colType['type'] == 'date') {
|
|
|
//$columnConfig->type = 'date';// TODO: require datetimepicker
|
|
|
}
|
|
|
+ if (!empty($colType['simpleType'])) $columnConfig->type = $colType['simpleType'];
|
|
|
} else {// typespecial - no type
|
|
|
$columnConfig->type = 'special';
|
|
|
}
|