/** initializes reports, some basid display settings,
* grabs and builds the IDL tree
*/
+
+var __dblclicks = {}; /* retain a cache of the selector value doubleclick event handlers */
+
function oilsInitReportBuilder() {
if(!oilsInitReports()) return false;
oilsReportBuilderReset();
/* adds an item to the display window */
function oilsAddRptDisplayItem(path, name, tform, params) {
- if( ! oilsAddSelectorItem(oilsRptDisplaySelector, path, name) )
+
+ if( ! oilsAddSelectorItem(
+ { selector : oilsRptDisplaySelector,
+ val : path,
+ label : name,
+ path : path,
+ type : 'display',
+ transform : tform }) ) {
return;
+ }
/* add the selected columns to the report output */
name = (name) ? name : oilsRptPathCol(path);
iterate(oilsRpt.def.select,
function(item) {
_debug('re-inserting display item ' + item.path);
- oilsAddSelectorItem(oilsRptDisplaySelector, item.path, item.alias) });
+ oilsAddSelectorItem(
+ { selector: oilsRptDisplaySelector,
+ val:item.path,
+ label:item.alias,
+ path:item.path,
+ transform : item.column.transform,
+ type : 'display'
+ }
+ ) });
}
} else {
var opt = sel.options[idx];
sel.options[idx] = null;
idx--;
+
var val = opt.getAttribute('value');
- insertSelectorVal(sel, idx, opt.innerHTML, val);
+ var label = opt.getAttribute('label');
+ var path = opt.getAttribute('path');
+ var evt_id = opt.getAttribute('listener');
+
+ opt = insertSelectorVal(sel, idx, label, val);
+
+ opt.setAttribute('path', path);
+ opt.setAttribute('title', label);
+ opt.setAttribute('label', label);
+ opt.setAttribute('value', val);
+ opt.setAttribute('listener', evt_id);
+
+ /* re-attach the double-click event */
+ opt.addEventListener('dblclick', __dblclicks[evt_id], true );
+
sel.options[idx].selected = true;
var arr = oilsRpt.def.select;
var opt = sel.options[idx];
sel.options[idx] = null;
idx++;
+
+ //var val = opt.getAttribute('value');
+ //insertSelectorVal(sel, idx, opt.innerHTML, val);
+ //insertSelectorVal(sel, idx, opt.getAttribute('label'), val);
+
var val = opt.getAttribute('value');
- insertSelectorVal(sel, idx, opt.innerHTML, val);
+ var label = opt.getAttribute('label');
+ var path = opt.getAttribute('path');
+ var evt_id = opt.getAttribute('listener');
+
+ opt = insertSelectorVal(sel, idx, label, val);
+
+ opt.setAttribute('value', val);
+ opt.setAttribute('path', path);
+ opt.setAttribute('title', label);
+ opt.setAttribute('label', label);
+ opt.setAttribute('listener', evt_id);
+
+ /* re-attach the double-click event */
+ opt.addEventListener('dblclick', __dblclicks[evt_id], true );
+
sel.options[idx].selected = true;
var arr = oilsRpt.def.select;
var epath = name[1];
name = name[0];
- if( ! oilsAddSelectorItem(oilsRptFilterSelector, epath, name) )
+ if( ! oilsAddSelectorItem(
+ { selector : oilsRptFilterSelector,
+ val : epath,
+ label : name,
+ path : path,
+ transform : tform,
+ operation : filter,
+ type : 'filter'
+ }) )
return;
var where = {
var epath = name[1];
name = name[0];
- if( ! oilsAddSelectorItem(oilsRptHavingSelector, epath, name) )
+ if( ! oilsAddSelectorItem(
+ { selector: oilsRptHavingSelector,
+ val:epath,
+ label:name,
+ path:path,
+ transform : tform,
+ operation : filter,
+ type : 'agg_filter' /* XXX */
+ }) )
+
return;
var having = {
var rel = hex_md5(oilsRptPathRel(path));
var col = oilsRptPathCol(path);
- /*
- _debug("oilsRptFilterDataMatches(): " + col + " : " + rel + " : " + tform + " : " + operation);
- _debug("oilsRptFilterDataMatches(): " + filter.column.colname + " : " + filter.relation + " : " +
- filter.column.transform + " : " + oilsRptObjectKeys(filter.condition)[0]);
- _debug("------------------");
- */
-
if( col == filter.column.colname &&
rel == filter.relation &&
tform == filter.column.transform &&
return false;
}
-/*
-function oilsRptFilterGrep(flist, filter) {
-
- for( var j = 0; j < flist.length; j++ ) {
-
- var fil = flist[j];
- var col = filter.column;
- var frel = hex_md5(oilsRptPathRel(fil.path));
- var fcol = oilsRptPathCol(fil.path);
-
- var op = oilsRptObjectKeys(filter.condition)[0];
-
- if( frel == filter.relation &&
- fcol == col.colname &&
- fil.operation == op &&
- fil.tform == col.transform ) {
- return false;
- }
- }
- return true;
-}
-*/
-
/* adds an item to the display window */
+/*
function oilsAddRptAggFilterItem(val) {
- oilsAddSelectorItem(oilsRptHavingFilterSelector, val);
+ oilsAddSelectorItem({selector:oilsRptHavingFilterSelector, val:val, label:val, path:val});
}
+*/
/* removes a specific item from the display window */
+/*
function oilsDelAggFilterItem(val) {
oilsDelSelectorItem(oilsRptHavingFilterSelector, val);
}
+*/
+/* adds an item to the display window */
+//function oilsAddSelectorItem(sel, val, name, path) {
+function oilsAddSelectorItem(args) {
-/*
-function ___oilsDelSelectedAggFilterItems() {
- var list = oilsDelSelectedItems(oilsRptHavingFilterSelector);
- oilsRpt.def.having = grep( oilsRpt.def.having,
- function(i) {
- for( var j = 0; j < list.length; j++ ) {
- var d = list[j];
- var col = i.column;
+ var sel = args.selector;
+ var label = args.label;
+ var path = args.path;
+ var val = args.val;
- if( typeof col != 'string' )
- for( var c in col ) col = col[c];
+ label = (label) ? label : oilsRptMakeLabel(val);
- if( typeof col != 'string' ) col = col[0];
+ var i;
+ for( i = 0; i < sel.options.length; i++ ) {
+ var opt = sel.options[i];
+ if( opt.value == val ) return false;
+ }
- if( oilsRptPathRel(d) == i.relation && oilsRptPathCol(d) == col ) {
- */
- // var param = (i.alias) ? i.alias.match(/::P\d*/) : null;
- /*
- if( param ) delete oilsRpt.params[param];
- return false;
- }
- }
- return true;
- }
- );
+ var opt = insertSelectorVal( sel, -1, label, val );
+ opt.setAttribute('title', label);
+ opt.setAttribute('path', path);
+ opt.setAttribute('label', label);
- if(!oilsRpt.def.having) oilsRpt.def.having = [];
- oilsRptPruneFromList(list);
- oilsRptDebug();
-}
-*/
+ var evt_id = oilsNextNumericId();
+ opt.setAttribute('listener', evt_id);
+ args.index = i;
+ delete args.selector;
+ var listener = function(){ oilsRptDrawDataWindow(path, args);};
+ opt.addEventListener('dblclick', listener, true );
+ __dblclicks[evt_id] = listener;
+ //function(){ oilsRptDrawDataWindow(path, args);} , true);
-/* adds an item to the display window */
-function oilsAddSelectorItem(sel, val, name) {
- name = (name) ? name : oilsRptMakeLabel(val);
- for( var i = 0; i < sel.options.length; i++ ) {
- var opt = sel.options[i];
- if( opt.value == val ) return false;
- }
- var opt = insertSelectorVal( sel, -1, name, val );
- opt.setAttribute('title', name);
return true;
}
This draws the 3-tabbed window containing the transform,
filter, and aggregate filter picker window
*/
-function oilsRptDrawDataWindow(path) {
+function oilsRptDrawDataWindow(path, args) {
+
+ args = (args) ? args : {};
+
+ for( var x in args )
+ _debug("oilsRptDrawDataWindow(): args -> " + x + " = " + args[x]);
+
var col = oilsRptPathCol(path);
var cls = oilsRptPathClass(path);
var field = oilsRptFindField(oilsIDL[cls], col);
/* don't let them see the floating div until the position is fully determined */
div.style.visibility='hidden';
- oilsRptDrawTransformWindow(path, col, cls, field);
- oilsRptDrawFilterWindow(path, col, cls, field);
- oilsRptDrawHavingWindow(path, col, cls, field);
+ oilsRptDrawTransformWindow(path, col, cls, field, args);
+ oilsRptDrawFilterWindow(path, col, cls, field, args);
+ oilsRptDrawHavingWindow(path, col, cls, field, args);
//oilsRptDrawOrderByWindow(path, col, cls, field);
//buildFloatingDiv(div, 600);
/* now let them see it */
div.style.visibility='visible';
- oilsRptSetDataWindowActions(div);
+ //args.type = (args.type) ? args.type : 'display';
+ oilsRptSetDataWindowActions(div, args);
}
-function oilsRptSetDataWindowActions(div) {
+function oilsRptSetDataWindowActions(div, args) {
/* give the tab links behavior */
-
DOM.oils_rpt_tform_tab.onclick =
function(){
oilsRptHideEditorDivs();
unHideMe(DOM.oils_rpt_filter_div)
addCSSClass(DOM.oils_rpt_filter_tab.parentNode, 'oils_rpt_tab_picker_selected');
};
+
DOM.oils_rpt_agg_filter_tab.onclick =
function(){
oilsRptHideEditorDivs();
};
*/
- DOM.oils_rpt_tform_tab.onclick();
+ DOM.oils_rpt_tform_submit.disabled = false;
+ DOM.oils_rpt_filter_submit.disabled = false;
+ DOM.oils_rpt_agg_filter_submit.disabled = false;
+
+ if( !args.type ) {
+ DOM.oils_rpt_tform_tab.onclick();
+ } else {
+ /* disable editing on existing items for now */
+ if( args.type == 'display' ) {
+ DOM.oils_rpt_tform_tab.onclick();
+ DOM.oils_rpt_tform_submit.disabled = true;
+ }
+ if( args.type == 'filter' ) {
+ DOM.oils_rpt_filter_tab.onclick();
+ DOM.oils_rpt_filter_submit.disabled = true;
+ }
+ if( args.type == 'agg_filter' ) {
+ DOM.oils_rpt_agg_filter_tab.onclick();
+ DOM.oils_rpt_agg_filter_submit.disabled = true;
+ }
+ }
+
DOM.oils_rpt_column_editor_close_button.onclick = function(){hideMe(div);};
}
-function oilsRptDrawFilterWindow(path, col, cls, field) {
+function oilsRptDrawFilterWindow(path, col, cls, field, args) {
var tformPicker = new oilsRptTformPicker( {
node : DOM.oils_rpt_filter_tform_table,
datatype : field.datatype,
- non_aggregate : true
+ non_aggregate : true,
+ select : args.transform
}
);
var filterPicker = new oilsRptFilterPicker({
node : DOM.oils_rpt_filter_op_table,
- datatype : field.datatype
+ datatype : field.datatype,
+ select : args.operation
}
);
}
-function oilsRptDrawHavingWindow(path, col, cls, field) {
+function oilsRptDrawHavingWindow(path, col, cls, field, args) {
var tformPicker = new oilsRptTformPicker( {
node : DOM.oils_rpt_agg_filter_tform_table,
datatype : field.datatype,
- aggregate : true
+ aggregate : true,
+ select : args.transform
}
);
var filterPicker = new oilsRptFilterPicker({
node : DOM.oils_rpt_agg_filter_op_table,
- datatype : field.datatype
+ datatype : field.datatype,
+ select : args.operation
}
);
}
/* draws the transform window */
-function oilsRptDrawTransformWindow(path, col, cls, field) {
- DOM.oils_rpt_tform_label_input.value = oilsRptMakeLabel(path);
+function oilsRptDrawTransformWindow(path, col, cls, field, args) {
+ args = (args) ? args : {};
+
+ DOM.oils_rpt_tform_label_input.value =
+ (args.label) ? args.label : oilsRptMakeLabel(path);
+
var dtype = field.datatype;
var tformPicker = new oilsRptTformPicker( {
node : DOM.oils_rpt_tform_table,
datatype : field.datatype,
non_aggregate : true,
- aggregate : true
+ aggregate : true,
+ select : args.transform
}
);