font-size: 10pt;
}
-#oils_rpt_name_div {
+#oils_rpt_name_table {
vertical-align: middle;
- padding: 5px;
background: #E0F0F0;
margin-bottom: 20px;
+ width: 100%;
+}
+#oils_rpt_name_table td {
+ padding: 5px;
}
#oils_rpt_table {
.oils_rpt_tree_link_ref {
color: #A52A2A;
+ /*color: darkblue;*/
font-family: courier;
}
function oilsInitReports() {
+ oilsRptIdObjects();
+
/* tell FF to capture mouse movements */
document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = setMousePos;
var cgi = new CGI();
fetchUser(cgi.param('ses'));
- $('oils_rpt_user').appendChild(text(USER.usrname()));
+ DOM.oils_rpt_user.appendChild(text(USER.usrname()));
oilsRptDebugEnabled = cgi.param('dbg');
}
function oilsCleanupReports() {
try {oilsRptDebugWindow.close();} catch(e) {}
+ DOM = null;
}
*/
function oilsInitReportBuilder() {
oilsInitReports();
- oilsRpt = new oilsReport();
- oilsRptDisplaySelector = $('oils_rpt_display_selector');
- oilsRptFilterSelector = $('oils_rpt_filter_selector');
+ oilsReportBuilderReset();
oilsDrawRptTree(
function() {
- hideMe($('oils_rpt_tree_loading'));
- unHideMe($('oils_rpt_table'));
+ hideMe(DOM.oils_rpt_tree_loading);
+ unHideMe(DOM.oils_rpt_table);
}
);
}
+function oilsReportBuilderReset() {
+ oilsRpt = new oilsReport();
+ oilsRptDisplaySelector = DOM.oils_rpt_display_selector;
+ oilsRptFilterSelector = DOM.oils_rpt_filter_selector;
+ removeChildren(oilsRptDisplaySelector);
+ removeChildren(oilsRptFilterSelector);
+ oilsRptDebug();
+}
+
/* returns just the column name */
function oilsRptPathCol(path) {
var parts = path.split(/-/);
/* hides the different field editor tabs */
function oilsRptHideEditorDivs() {
- hideMe($('oils_rpt_tform_div'));
- hideMe($('oils_rpt_filter_div'));
- hideMe($('oils_rpt_agg_filter_div'));
+ hideMe(DOM.oils_rpt_tform_div);
+ hideMe(DOM.oils_rpt_filter_div);
+ hideMe(DOM.oils_rpt_agg_filter_div);
}
var field = grep(oilsIDL[cls].fields, function(f){return (f.name==col);})[0];
_debug("setting update data window for column "+col+' on class '+cls);
- var div = $('oils_rpt_column_editor');
+ var div = DOM.oils_rpt_column_editor;
+ /* set a preliminary top position so the page won't bounce around */
+ div.setAttribute('style','top:'+oilsMouseX+'px');
+
+ /* unhide the div so we can determine the dimensions */
unHideMe(div);
+
/* don't let them see the floating div until the position is fully determined */
div.style.visibility='hidden';
oilsRptDrawTransformWindow(path, col, cls, field);
- $('oils_rpt_column_editor_close_button').onclick = function(){hideMe(div);};
+ DOM.oils_rpt_column_editor_close_button.onclick = function(){hideMe(div);};
buildFloatingDiv(div, 600);
- div.style.visibility='visible';
- /* focus after all the shifting to make sure the div is at least visible */
- $('oils_rpt_tform_label_input').focus();
+ /* now let them see it */
+ div.style.visibility='visible';
/* give the tab links behavior */
- $('oils_rpt_tform_tab').onclick =
- function(){oilsRptHideEditorDivs();unHideMe($('oils_rpt_tform_div'))};
- $('oils_rpt_filter_tab').onclick =
- function(){oilsRptHideEditorDivs();unHideMe($('oils_rpt_filter_div'))};
- $('oils_rpt_agg_filter_tab').onclick =
- function(){oilsRptHideEditorDivs();unHideMe($('oils_rpt_agg_filter_div'))};
+ DOM.oils_rpt_tform_tab.onclick =
+ function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_tform_div)};
+ DOM.oils_rpt_filter_tab.onclick =
+ function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_filter_div)};
+ DOM.oils_rpt_agg_filter_tab.onclick =
+ function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_agg_filter_div)};
}
/* draws the transform window */
function oilsRptDrawTransformWindow(path, col, cls, field) {
- appendClear($('oils_rpt_tform_label'), text(oilsRptMakeLabel(path)));
- $('oils_rpt_tform_label_input').value = oilsRptMakeLabel(path);
+ appendClear(DOM.oils_rpt_tform_label, text(oilsRptMakeLabel(path)));
+ DOM.oils_rpt_tform_label_input.value = oilsRptMakeLabel(path);
- $('oils_rpt_tform_submit').onclick =
- function(){ oilsAddRptDisplayItem(path, $('oils_rpt_tform_label_input').value) };
+ DOM.oils_rpt_tform_submit.onclick =
+ function(){ oilsAddRptDisplayItem(path, DOM.oils_rpt_tform_label_input.value) };
- $('oils_rpt_tform_label_input').focus();
- $('oils_rpt_tform_label_input').select();
+ DOM.oils_rpt_tform_label_input.focus();
+ DOM.oils_rpt_tform_label_input.select();
if( field.datatype == 'timestamp' )
- unHideMe($('oils_rpt_tform_date_div'));
+ unHideMe(DOM.oils_rpt_tform_date_div);
}
<tbody>
<tr>
<td id='oils_rpt_table_left_td' align='left'>
- <div id='oils_rpt_name_div'>
- <span style='padding-right: 10px;'>Report Name: </span>
- <input size='32' onchange="oilsRpt.name=this.value"/>
- </div>
+ <table id='oils_rpt_name_table'><tbody>
+ <tr>
+ <td width='20%'>Report Name: </td>
+ <td><input size='32' onchange="oilsRpt.name=this.value"/></td>
+ </tr><tr>
+ <td>Report Type: </td>
+ <td><select id='oils_rpt_builder_type_selector'/></td>
+ </tr>
+ </tbody></table>
<div id='oils_rpt_tree_div'>
</div>
</td>
</div>
+ <span class='hide_me' id='oils_rpt_confirm_new_report'>
+ This will destroy the report you are currently constructing.
+ Are you sure you wish to do this?
+ </span>
+
</body>
</html>
/* shoves the IDL into a UI tree */
function oilsRenderRptTree(callback) {
+ var sel = DOM.oils_rpt_builder_type_selector;
- oilsRptTree = new SlimTree( $('oils_rpt_tree_div'), 'oilsRptTree' );
- var treeId = oilsNextId();
- oilsRptTree.addNode( treeId, -1, nodeText('oils_rpt_tree_label'));
for( var i in oilsIDL ) {
var data = oilsIDL[i];
if( !data.core ) continue;
- var subTreeId = oilsNextId();
- oilsRptTree.addNode( subTreeId, treeId, data.label );
- oilsRenderSubTree( data, subTreeId, 'Display Data', '' );
+ insertSelectorVal( sel, -1, data.label, data.name );
}
+
+ sel.onchange = function() {
+ if(oilsRpt.def.select.length > 0)
+ if(!confirm(DOM.oils_rpt_confirm_new_report.innerHTML))
+ return;
+ oilsRptRenderClassTree(getSelectorVal(sel))
+ oilsReportBuilderReset();
+ };
+
+ sel.onchange();
if( callback ) callback();
}
+function oilsRptRenderClassTree(cls) {
+ var data = oilsIDL[cls];
+ removeChildren(DOM.oils_rpt_tree_div);
+ oilsRptTree = new SlimTree( DOM.oils_rpt_tree_div, 'oilsRptTree' );
+ var treeId = oilsNextId();
+ oilsRptTree.addNode( treeId, -1, data.label );
+ oilsRenderSubTree( data, treeId, '' );
+}
-function oilsRenderSubTree( data, subTreeId, rootName, path ) {
- _debug("rendering subtree with full path "+path);
+function oilsRenderSubTree( data, subTreeId, path ) {
for( var f = 0; f < data.fields.length; f++ ) {
oilsLinkTreeCache[parentId].push(classname);
var data = grep( oilsIDL, function(i) { return ( i.name == classname ); })[0];
- var sid = oilsRenderSubTree( data, parentId, '', fullpath );
+ var sid = oilsRenderSubTree( data, parentId, fullpath );
oilsRptTree.open(parentId);
}
function mergeObjects( src, obj ) {
for( var i in obj ) {
- _debug("merging object element: "+i + ' : ' + src[i]);
- if( i =='from' ) {
- _debug('------------------------------');
- _debug(formatJSON(js2JSON(src[i])));
- _debug(formatJSON(js2JSON(obj[i])));
- _debug('------------------------------');
- }
if( typeof obj[i] == 'string' ) {
src[i] = obj[i];
} else {
}
}
+
+/* scours the doc for elements with IDs. When it finds one,
+ it grabs the dom node and sets a reference to the node at DOM[id]; */
+function oilsRptIdObjects(node) {
+ if(!node) node = document.documentElement;
+ if( node.nodeType != 1 ) return;
+ var id = node.getAttribute('id');
+ if( id ) eval("DOM."+id+"=$('"+id+"');");
+ var children = node.childNodes;
+ for( var c = 0; c < children.length; c++ )
+ oilsRptIdObjects(children[c]);
+}
+
+/* dom nodes with IDs are inserted into DOM as DOM[id] */
+var DOM = {};
/* JS object version of the IDL */
var oilsIDL;