made the folder window more generic, showing contents via fm_table objects
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 28 Sep 2006 21:37:42 +0000 (21:37 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 28 Sep 2006 21:37:42 +0000 (21:37 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6255 dcc99617-32d9-48b4-a31d-7c20da2025e4

12 files changed:
Open-ILS/web/opac/common/js/fm_table.js
Open-ILS/web/reports/oils_rpt.css
Open-ILS/web/reports/oils_rpt.js
Open-ILS/web/reports/oils_rpt.xhtml
Open-ILS/web/reports/oils_rpt_common.xhtml
Open-ILS/web/reports/oils_rpt_folder_window.js
Open-ILS/web/reports/oils_rpt_folders.js
Open-ILS/web/reports/oils_rpt_report_folder_window.xhtml
Open-ILS/web/reports/oils_rpt_template_folder_window.xhtml
Open-ILS/web/reports/oils_rpt_utils.js
Open-ILS/web/reports/oils_rpt_vars.js
Open-ILS/web/reports/oils_rpt_widget.js

index 794ab4f..dfb7e67 100644 (file)
@@ -13,22 +13,24 @@ function drawFMObjectTable( args ) {
 
        if( typeof destination == 'string' ) 
                destination = $(destination);
-       var builder = new FMObjectBuilder(obj, args.display);
+       var builder = new FMObjectBuilder(obj, args);
        destination.appendChild(builder.build());
        return builder;
 }
 
 
 /* Constructor for the builder object */
-function FMObjectBuilder( obj, display, styleToggle ) {
+function FMObjectBuilder( obj, args ) {
        this.obj                = obj;
        this.table      = elem('table');
        this.thead      = elem('thead');
        this.tbody      = elem('tbody');
        this.thead_tr = elem('tr');
        this.subtables = [];
-       this.display = display;
-       this.styleToggle = styleToggle;
+       this.display = args.display;
+       this.selectCol = args.selectCol;
+       this.selectColName = args.selectColName;
+       this.rows = [];
        if(!this.display) this.display = {};
 
        this.table.appendChild(this.thead);
@@ -41,6 +43,16 @@ function FMObjectBuilder( obj, display, styleToggle ) {
 }
 
 
+FMObjectBuilder.prototype.getSelected = function() {
+       var objs = [];
+       for( var i = 0; i < this.rows.length; i++ ) {
+               var r = $(this.rows[i]);
+               if( $n(r,'selected').checked )
+                       objs.push(this.obj[i]);
+       }
+       return objs;
+}
+
 /* Builds the table */
 FMObjectBuilder.prototype.build = function() {
        var o = this.obj;
@@ -52,6 +64,8 @@ FMObjectBuilder.prototype.build = function() {
        if( o ) {
 
                this.setKeys(o);
+               if( this.selectCol )
+                       this.thead_tr.appendChild(elem('td',null,this.selectColName));
                for( var i = 0; i < this.keys.length; i++ ) 
                        this.thead_tr.appendChild(elem('td',null,this.keys[i]));
        
@@ -83,6 +97,15 @@ FMObjectBuilder.prototype.setKeys = function(o) {
 /* Inserts one row into the table to represent a single object */
 FMObjectBuilder.prototype.buildObjectRow = function(obj) {
        var row = elem('tr');
+       row.id = 'fm_table_' + (ID_GEN++);
+       this.rows.push(row.id);
+
+       if(this.selectCol) {
+               var td = elem('td');
+               td.appendChild(elem('input',{type:'checkbox',name:'selected'}));
+               row.appendChild(td);
+       }
+
        for( var i = 0; i < this.keys.length; i++ ) {
                var td = elem('td');    
                var data = obj[this.keys[i]]();
@@ -161,7 +184,7 @@ FMObjectBuilder.prototype.hideSubTables = function() {
 
 FMObjectBuilder.prototype.buildSubTable = function(td, obj, key) {
 
-       var left = td.offsetLeft;
+       var left = parseInt(td.offsetLeft);
        var div = elem('div');
        var row = elem('tr');
        var subtd= elem('td');
@@ -177,8 +200,10 @@ FMObjectBuilder.prototype.buildSubTable = function(td, obj, key) {
 
        addCSSClass(td, 'fm_selected');
        subtd.setAttribute('colspan',this.keys.length);
+       if(this.selectCol)
+               subtd.setAttribute('colspan',this.keys.length + 1);
 
-       subtd.setAttribute('style', 'width: 100%; padding-left:'+left+';');
+       subtd.setAttribute('style', 'width: 100%; padding-left:'+left+'px;');
        var builder = drawFMObjectTable({dest:div, obj:obj, display:this.display});
        builder.table.setAttribute('style', 'width: auto;');
        addCSSClass(builder.table, 'fm_selected');
@@ -186,7 +211,8 @@ FMObjectBuilder.prototype.buildSubTable = function(td, obj, key) {
        var newleft = left - (builder.table.clientWidth / 2) + (td.clientWidth / 2);
 
        if( newleft < left ) {
-               _debug("left = "+left+" : newleft = "+newleft);
+               if( newleft < 0 ) newleft = 0;
+               newleft = parseInt(newleft);
                var style = subtd.getAttribute('style');
                style = style.replace(new RegExp(left), newleft);
                subtd.setAttribute('style', style);
index faa54e2..78ac731 100644 (file)
@@ -162,6 +162,7 @@ button {
 
 #oils_rpt_folder_table_left_td {
        vertical-align: top;
+       width: 25%;
 }
 
 #oils_rpt_folder_table_right_td {
@@ -169,7 +170,6 @@ button {
        text-align: center;
        vertical-align: top;
        padding: 10px;
-       width: 75%;
 }
 
 .oils_rpt_folder_window {
@@ -183,7 +183,7 @@ button {
 }
 
 
-oils_rpt_folder_window_div {
+#oils_rpt_folder_window_contents_div {
        width: 100%;
 }
 
@@ -195,3 +195,55 @@ oils_rpt_folder_window_div {
        border: 1px solid #808080;
        padding: 5px;
 }
+
+#oils_rpt_folder_details_table {
+       width: 100%;
+       margin-bottom: 10px;
+}
+#oils_rpt_folder_details_table tr {
+       border: 1px solid #808080;
+}
+
+#oils_rpt_folder_details_table td {
+       text-align: center;
+       padding: 5px;
+}
+
+#oils_rpt_template_folder_go_row {
+       border-bottom: 1px solid #808080;
+       margin-bottom: 10px;
+}
+
+#oils_rpt_param_editor_table {
+       width: 100%;
+       border: 1px solid #808080;
+}
+
+#oils_rpt_param_editor_table thead td {
+       font-weight: bold;
+}
+
+.oils_rpt_folder_tree {
+       margin: 5px;
+}
+
+.oils_rpt_folder_tree_div {
+       border: 1px solid #808080;
+       margin: 10px;
+}
+
+.oils_rpt_folder_contents {
+       min-width:  200px;
+}
+
+.oils_rpt_folder_window_contents_row {
+       border-bottom: 1px solid #808080;
+       margin: 10px;
+}
+
+#oils_rpt_folder_window_contents_table {
+       width: 100%;
+}
+#oils_rpt_folder_window_contents_table td {
+       text-align: center;
+}
index 44e8f9c..9c6feb7 100644 (file)
@@ -5,6 +5,8 @@ function oilsInitReports() {
        document.captureEvents(Event.MOUSEMOVE);
        document.onmousemove = setMousePos;
 
+       DEBUG = 1;
+
        var cgi = new CGI();
        fetchUser(cgi.param('ses'));
        DOM.oils_rpt_user.appendChild(text(USER.usrname()));
@@ -49,6 +51,7 @@ function oilsReport(templateObj, reportObj) {
 
        if( reportObj ) 
                this.params = JSON2js(reportObj.data());
+       if(!this.params) this.params = {};
 }
 
 oilsReport.prototype.toString = function() {
@@ -60,8 +63,7 @@ oilsReport.prototype.toHTMLString = function() {
 }
 
 oilsReport.prototype.gatherParams = function() {
-       if(oilsRptObjectKeys(this.params).length == 0) return;
-
+       //if(oilsRptObjectKeys(this.params).length == 0) return;
        _debug("we have params: " + js2JSON(this.params));
 
        var params      = [];
@@ -80,6 +82,8 @@ oilsReport.prototype._gatherParams = function(params, arr, type, field) {
                var key; 
                var op;
 
+               /* add select transform support */
+
                if( typeof node == 'string' ) {
                        key = node.match(/::.*/);
                } else {
@@ -97,7 +101,8 @@ oilsReport.prototype._gatherParams = function(params, arr, type, field) {
                        value           : this.params[key],
                        column  : obj.column,
                        type            : type, 
-                       relation : obj.relation
+                       relation : obj.relation,
+                       field           : field
                });
        }
 }
index 4f31a22..e144cf0 100644 (file)
                        <tbody>
                                <tr>
                                        <td id='oils_rpt_folder_table_left_td'>
-                                               <div id='oils_rpt_folder_tree_div'>
+                                               <div class='oils_rpt_folder_tree_div'>
+                                                       <div><b>My Folders</b></div>
+                                                       <div id='oils_rpt_template_folder_tree' class='oils_rpt_folder_tree'/>
+                                                       <div id='oils_rpt_report_folder_tree' class='oils_rpt_folder_tree'/>
+                                                       <div id='oils_rpt_output_folder_tree' class='oils_rpt_folder_tree'/>
+                                               </div>
+                                               <div class='oils_rpt_folder_tree_div'>
+                                                       <div><b>Shared Folders</b></div>
+                                                       <div id='oils_rpt_template_shared_folder_tree' class='oils_rpt_folder_tree'/>
+                                                       <div id='oils_rpt_report_shared_folder_tree' class='oils_rpt_folder_tree'/>
+                                                       <div id='oils_rpt_output_shared_folder_tree' class='oils_rpt_folder_tree'/>
                                                </div>
                                        </td>
+                                       <td/>
                                        <td id='oils_rpt_folder_table_right_td' class='hide_me'>
                                                <div class='oils_rpt_folder_window'>
 
                                                        <table class='oils_rpt_tab_table'><tbody>
                                                                <tr>
-                                                                       <td width='33%'><a id='oils_rpt_folder_window_manage_tab' href='javascript:void(0);'>Manage Folder Contents</a></td>
-                                                                       <td width='33%'><a id='oils_rpt_folder_window_edit_tab' href='javascript:void(0);'>Edit This Folder</a></td>
-                                                                       <td width='33%'><a id='oils_rpt_child_folders_tab' href='javascript:void(0);'>Add New Folders</a></td>
+                                                                       <td width='33%'>
+                                                                               <a id='oils_rpt_folder_window_manage_tab' href='javascript:void(0);'>Manage Folder Contents</a></td>
+                                                                       <td width='33%'>
+                                                                               <a id='oils_rpt_folder_window_edit_tab' href='javascript:void(0);'>Edit This Folder</a></td>
+                                                                       <td width='33%'>
+                                                                       <a id='oils_rpt_child_folders_tab' href='javascript:void(0);'>Add New Folders</a></td>
                                                                </tr>
                                                        </tbody></table>
 
+                                                       <table id='oils_rpt_folder_details_table'>
+                                                               <tbody>
+                                                                       <tr>
+                                                                               <td>
+                                                                                       <span><b id='oils_rpt_folder_name_label'/>: created by </span><b id='oils_rpt_folder_creator_label'/>
+                                                                               </td>
+                                                                       </tr>
+                                                               </tbody>
+                                                       </table>
+
                                                        <div>
-                                                               <!--#include virtual="oils_rpt_template_folder_window.xhtml"-->
-                                                               <!--#include virtual="oils_rpt_report_folder_window.xhtml"-->
+
+                                                               <!--#include virtual="oils_rpt_folder_window.xhtml"-->
+
+                                                               <!--
+                                                               <|||#include virtual="oils_rpt_template_folder_window.xhtml"||>
+                                                               <|||#include virtual="oils_rpt_report_folder_window.xhtml"||>
+                                                               -->
                                                        </div>
                                                </div>
                                        </td>
@@ -51,6 +80,8 @@
                        </tbody>
                </table>
 
+               <!--#include virtual="oils_rpt_param_editor.xhtml"-->
+
        </body>
 </html>
 
index c93b671..6280d36 100644 (file)
@@ -12,6 +12,9 @@
 <script language='javascript' src='/opac/common/js/init.js'> </script>
 <script language='javascript' src='/opac/common/js/RemoteRequest.js'> </script>
 <script language='javascript' src='/opac/common/js/slimtree.js'> </script>
+<script language='javascript' src='/opac/common/js/sorttable.js'> </script>
+<script language='javascript' src='/opac/common/js/fm_table.js'> </script>
+<script language='javascript' src='/opac/common/js/fm_table_conf.js'> </script>
 <script>
        stpicopen  = '../opac/images/slimtree/folder2.gif';
        stpicclose = '../opac/images/slimtree/folderopen2.gif';
 <script type="text/javascript" src="oils_rpt_folders.js"></script>
 <script type="text/javascript" src="oils_rpt_folder_window.js"></script>
 <script type="text/javascript" src="oils_rpt_widget.js"></script>
+<script type="text/javascript" src="oils_rpt_param_editor.js"></script>
 <script type="text/javascript" src="oils_rpt.js"></script>
 
+<link type='text/css' rel='stylesheet' href="/opac/common/css/fm_table.css"/>
 <link rel="stylesheet" type="text/css" href="oils_rpt.css"> </link>
 
 <script>function _l(l) { location.href = l + location.search; }</script>
index 1c2abe9..ae6f086 100644 (file)
@@ -1,64 +1,85 @@
-var oilsRptTemplateCache = {};
-var oilsRptReportCache = {};
 
-/* utility method to find and build the correct folder window object */
-function oilsRptBuildFolderWindow( type, folderId ) {
-       var node = oilsRptCurrentFolderManager.findNode(type, folderId);
-       _debug('drawing folder window for folder ' + node.folder.name());
-       switch(type) {
-               case 'template': 
-                       return new oilsRptTemplateFolderWindow(node);
-               case 'report':
-                       return new oilsRptReportFolderWindow(node);
-               case 'output':
-                       return new oilsRptOutputFolderWindow(node);
-       }
-}
 
 function oilsRptFetchTemplate(id) {
-       if( oilsRptTemplateCache[id] )
-               return oilsRptTemplateCache[id];
-       var r = new Request(OILS_RPT_FETCH_TEMPLATE, SESSION, id);
-       r.send(true);
-       return oilsRptTemplateCache[id] = r.result();
+       var t = oilsRptGetCache('rt', id);
+       if(!t) {
+               var r = new Request(OILS_RPT_FETCH_TEMPLATE, SESSION, id);
+               r.send(true);
+               t = r.result();
+               oilsRptCacheObject('rt', t, id);
+       }
+       return t;
 }
 
 
 
 /* generic folder window class */
-oilsRptFolderWindow.prototype = new oilsRptObject();
-oilsRptFolderWindow.prototype.constructor = oilsRptFolderWindow;
-oilsRptFolderWindow.baseClass = oilsRptObject.prototype.constructor;
-function oilsRptFolderWindow() { }
+oilsRptSetSubClass('oilsRptFolderWindow', 'oilsRptObject');
+function oilsRptFolderWindow(type, folderId) { 
+       var node = oilsRptCurrentFolderManager.findNode(type, folderId);
+       this.init2(node, type);
+       this.selector = DOM.oils_rpt_folder_contents_selector;
+}
+
+
 oilsRptFolderWindow.prototype.init2 = function(node, type) {
        this.folderNode = node;
        this.type = type;
        this.init();
 }
 
-oilsRptFolderWindow.prototype.openWindow = function(node) {
-       hideMe(DOM.oils_rpt_template_folder_window_contents_div);       
-       hideMe(DOM.oils_rpt_report_folder_window_contents_div);
+
+oilsRptFolderWindow.prototype.draw = function() {
+
+       hideMe(DOM.oils_rpt_template_folder_new_report);
+       hideMe(DOM.oils_rpt_param_editor_div);
        unHideMe(DOM.oils_rpt_folder_table_right_td);
-       unHideMe(node);
+       this.drawFolderDetails();
+
+       var obj = this;
+       DOM.oils_rpt_folder_content_action_go.onclick = 
+               function() {obj.doFolderAction()}
+
+       this.fetchFolderData();
+
+       var sel = DOM.oils_rpt_folder_contents_action_selector;
+       for( var i = 0; i < sel.options.length; i++ ) {
+               var opt = sel.options[i];
+               if( opt.getAttribute('type') == this.type )
+                       unHideMe(opt);
+               else hideMe(opt);
+       }
+}
+
+oilsRptFolderWindow.prototype.doFolderAction = function() {
+       var objs = this.fmTable.getSelected();
 }
 
-oilsRptFolderWindow.prototype.fetchFolderData = function(type, selector, cache, callback) {
-       removeChildren(selector);
+
+oilsRptFolderWindow.prototype.drawFolderDetails = function() {
+       appendClear(DOM.oils_rpt_folder_creator_label, 
+               text(this.folderNode.folder.owner().usrname()));
+       appendClear(DOM.oils_rpt_folder_name_label, 
+               text(this.folderNode.folder.name()));
+}
+
+
+oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
+       removeChildren(this.selector);
        var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
-               SESSION, type, this.folderNode.folder.id());
+               SESSION, this.type, this.folderNode.folder.id());
+       var obj = this;
        req.callback(
                function(r) {
-                       var ts = r.getResultObject();
-                       if(!ts) return;
-                       for( var i = 0; i < ts.length; i++ )  {
-                               var name = ts[i].name();
-                               if( type == 'report' ) 
-                                       name = oilsRptFetchTemplate(ts[i].template()).name() + ' : ' + name;
-                               
-                               insertSelectorVal(selector, -1, name, ts[i].id());
-                               cache[ts[i].id()] = ts[i];
-                       }
+                       obj.fmTable = drawFMObjectTable( 
+                               { 
+                                       dest : obj.selector, 
+                                       obj : r.getResultObject(),
+                                       selectCol : true,
+                                       selectColName : 'Select Row'    
+                               }
+                       );
+                       //sortables_init();
                        if(callback) callback();
                }
        );
@@ -66,28 +87,46 @@ oilsRptFolderWindow.prototype.fetchFolderData = function(type, selector, cache,
 }
 
 
+/*
 oilsRptTemplateFolderWindow.prototype = new oilsRptFolderWindow();
 oilsRptTemplateFolderWindow.prototype.constructor = oilsRptTemplateFolderWindow;
 oilsRptTemplateFolderWindow.baseClass = oilsRptFolderWindow.prototype.constructor;
 function oilsRptTemplateFolderWindow(node) { this.init2(node, 'template'); }
 
 oilsRptTemplateFolderWindow.prototype.draw = function() {
-       this.openWindow(DOM.oils_rpt_template_folder_window_contents_div);      
-       this.fetchFolderData('template', DOM.oils_rpt_template_selector, oilsRptTemplateCache);
+       this.openWindow();
+       this.fetchFolderData('template', DOM.oils_rpt_folder_contents_selector, oilsRptTemplateCache);
        var obj = this;
 
-       DOM.oils_rpt_template_action_selector.onchange = function() {
-               var action = getSelectVal(DOM.oils_rpt_template_action_selector.onchange);
+       DOM.oils_rpt_template_folder_window_go.onclick = function() {
+               var action = getSelectorVal(DOM.oils_rpt_template_action_selector);
+               var template = getSelectorVal(DOM.oils_rpt_template_selector);
                switch(action) {
                        case 'create_report':
-                               obj.createReport();
+                               obj.createReport(template);
                                break;
                }
        }
 }
 
 
-oilsRptTemplateFolderWindow.prototype.createReport = function() {
+oilsRptTemplateFolderWindow.prototype.createReport = function(templateId) {
+       unHideMe(DOM.oils_rpt_template_folder_new_report);
+       DOM.oils_rpt_template_folder_new_report_next.onclick = function() {
+               var name = DOM.oils_rpt_template_folder_new_report_name.value;
+               var desc = DOM.oils_rpt_template_folder_new_report_desc.value;
+               var rpt = new rr();
+               rpt.template(templateId);
+               rpt.name(name);
+               rpt.description(desc);
+               DOM.oils_rpt_template_folder_window_contents_div.appendChild(
+                       DOM.oils_rpt_param_editor_div);
+               unHideMe(DOM.oils_rpt_param_editor_div);
+               var e = new oilsRptParamEditor(
+                       new oilsReport(oilsRptFetchTemplate(templateId), rpt),
+                       DOM.oils_rpt_param_editor_tbody);
+               e.draw();
+       }
 }
 
 
@@ -98,7 +137,7 @@ oilsRptReportFolderWindow.baseClass = oilsRptFolderWindow.prototype.constructor;
 function oilsRptReportFolderWindow(node) { this.init2(node, 'report'); }
 
 oilsRptReportFolderWindow.prototype.draw = function() {
-       this.openWindow(DOM.oils_rpt_report_folder_window_contents_div);
+       this.openWindow();
        var obj = this;
        this.fetchFolderData('report', 
                DOM.oils_rpt_report_selector, oilsRptReportCache, 
@@ -112,50 +151,42 @@ oilsRptReportFolderWindow.prototype.draw = function() {
                var rpt = obj.getSelectedReport();
                var tmpl = oilsRptFetchTemplate(rpt.template());
                obj.oilsReport = new oilsReport( tmpl, rpt );
-               var params = obj.oilsReport.gatherParams();
-               obj.drawParamEditor(params);
        };
 }
 
 oilsRptReportFolderWindow.prototype.drawParamEditor = function(params) {
        _debug('drawing params: \n' + formatJSON(js2JSON(params)));
-       this.drawSelectParamEditor(grep(params,
-               function(p) { return (p.type == 'select')}));
-       this.drawWhereParamEditor(grep(params,
-               function(p) { return (p.type == 'where')}));
-       this.drawHavingParamEditor(grep(params,
-               function(p) { return (p.type == 'having')}));
 }
 
 
 var oilsRptReportFolderSelectParamRow;
 oilsRptReportFolderWindow.prototype.drawSelectParamEditor = function(params) {
        if(params.length == 0) return;
-       unHideMe(DOM.oils_rpt_report_folder_window_display_params_table);
-
-       var tbody = $n(DOM.oils_rpt_report_folder_window_display_params_table,'tbody');
-       if(!oilsRptReportFolderSelectParamRow)
-               oilsRptReportFolderSelectParamRow = tbody.removeChild($n(tbody,'tr'));
-
-       for( var p = 0; p < params.length; p++ ) {
-
-               var row = oilsRptReportFolderSelectParamRow.cloneNode(true);
-               var par = params[p];
-               $n(row, 'column').appendChild(text(par.column.colname));
-               $n(row, 'transform').appendChild(text(par.column.transform));
-
-               if( typeof par.value == 'string' ) {
-                       unHideMe($n(row, 'param'));
-                       $n(row, 'param').value = par.value;
-               } else {
-                       switch(par.transform) {
-                               case 'substring':
-                                       unHideMe($n(row,'string_substring_widget'));
-                                       break;
-                       }
-               }
-               tbody.appendChild(row);
-       }
+       //unHideMe(DOM.oils_rpt_report_folder_window_display_params_table);
+
+       //var tbody = $n(DOM.oils_rpt_report_folder_window_display_params_table,'tbody');
+       //if(!oilsRptReportFolderSelectParamRow)
+               //oilsRptReportFolderSelectParamRow = tbody.removeChild($n(tbody,'tr'));
+//
+       //for( var p = 0; p < params.length; p++ ) {
+//
+               //var row = oilsRptReportFolderSelectParamRow.cloneNode(true);
+               //var par = params[p];
+               //$n(row, 'column').appendChild(text(par.column.colname));
+               //$n(row, 'transform').appendChild(text(par.column.transform));
+//
+               //if( typeof par.value == 'string' ) {
+                       //unHideMe($n(row, 'param'));
+                       //$n(row, 'param').value = par.value;
+               //} else {
+                       //switch(par.transform) {
+                               //case 'substring':
+                                       //unHideMe($n(row,'string_substring_widget'));
+                                       //break;
+                       //}
+               //}
+               //tbody.appendChild(row);
+       //}
 }
 
 oilsRptReportFolderWindow.prototype.drawWhereParamEditor = function(params) {
@@ -187,6 +218,7 @@ oilsRptOutputFolderWindow.prototype.draw = function() {
        this.hideWindows();
        this.openWindow(null);
 }
+*/
 
 
 
index ffeee02..376eb99 100644 (file)
@@ -1,28 +1,43 @@
 var oilsRptFolderNodeCache = {};
+oilsRptFolderNodeCache.template = {};
+oilsRptFolderNodeCache.report  = {};
+oilsRptFolderNodeCache.output  = {};
 
-oilsRptFolderManager.prototype = new oilsRptObject();
-oilsRptFolderManager.prototype.constructor = oilsRptFolderManager;
-oilsRptFolderManager.baseClass = oilsRptObject.prototype.constructor;
+oilsRptSetSubClass('oilsRptFolderManager','oilsRptObject');
 
-function oilsRptFolderManager(node) {
-       this.node = node;
+function oilsRptFolderManager() {
        this.folderTree = {};
-       this.init();
+       this.super.init();
+       this.tId = oilsNextId();
+       this.rId = oilsNextId();
+       this.oId = oilsNextId();
+       this.stId = oilsNextId();
+       this.srId = oilsNextId();
+       this.soId = oilsNextId();
+       this.orgTrail = {};
+       this.orgTrail.template = {};
+       this.orgTrail.report = {};
+       this.orgTrail.output = {};
 }
 
 oilsRptFolderManager.prototype.draw = function(auth) {
-       var tree = oilsRptFolderTree = 
-               new SlimTree(this.node, 'oilsRptFolderTree');
+       oilsRptTemplateFolderTree = new SlimTree(DOM.oils_rpt_template_folder_tree, 'oilsRptTemplateFolderTree');
+       oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates')
 
-       this.rootTreeId         = oilsNextId();
-       this.templateTreeId     = oilsNextId();
-       this.reportTreeId               = oilsNextId();
-       this.outputTreeId               = oilsNextId();
+       oilsRptReportFolderTree = new SlimTree(DOM.oils_rpt_report_folder_tree, 'oilsRptReportFolderTree');
+       oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports')
 
-       tree.addNode(this.rootTreeId, -1, 'Report Folders');
-       tree.addNode(this.templateTreeId, this.rootTreeId, 'Template Folders');
-       tree.addNode(this.reportTreeId, this.rootTreeId, 'Report Folders');
-       tree.addNode(this.outputTreeId, this.rootTreeId, 'Output Folders');
+       oilsRptOutputFolderTree = new SlimTree(DOM.oils_rpt_output_folder_tree, 'oilsRptOutputFolderTree');
+       oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output')
+
+       oilsRptSharedTemplateFolderTree = new SlimTree(DOM.oils_rpt_template_shared_folder_tree, 'oilsRptSharedTemplateFolderTree');
+       oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
+
+       oilsRptSharedReportFolderTree = new SlimTree(DOM.oils_rpt_report_shared_folder_tree, 'oilsRptSharedReportFolderTree');
+       oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
+
+       oilsRptSharedOutputFolderTree = new SlimTree(DOM.oils_rpt_output_shared_folder_tree, 'oilsRptSharedOutputFolderTree');
+       oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
 
        this.fetchFolders(auth);
 }
@@ -44,19 +59,106 @@ oilsRptFolderManager.prototype.fetchFolders = function(auth) {
 
 
 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
-       _debug('making folder tree '+type);
-       switch(type) {
-               case 'template': tid = this.templateTreeId; break;
-               case 'report': tid = this.reportTreeId; break;
-               case 'output': tid = this.outputTreeId; break;
+       var tree;
+
+       folders = folders.sort(
+               function(a,b) {
+                       var asw = a.share_with().id();
+                       var bsw = b.share_with().id();
+                       if( asw ) asw = findOrgDepth(findOrgUnit(asw));
+                       else asw = -1;
+                       if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw));
+                       else bsw = -1;
+                       if( asw < bsw ) return 1;
+                       if( asw > bsw ) return -1;
+                       return 0;
+               }
+       );
+
+
+       for( var i = 0; i < folders.length; i++ ) {
+               var folder = folders[i];
+               var id = oilsNextId();
+               var node = { folder : folder, treeId : id };
+               oilsRptFolderNodeCache[type][folder.id()] = node;
+               node.folderWindow = new oilsRptFolderWindow(type, folder.id())
+       }
+
+
+       for( var i = 0; i < folders.length; i++ ) {
+
+               var folder = folders[i];
+               _debug(js2JSON(folder));
+               var mine = (folder.owner().id() == USER.id());
+               var pid;
+               var treename;
+
+               switch(type) {
+                       case 'template': 
+                               if(mine) {
+                                       tree = oilsRptTemplateFolderTree;
+                                       treename = 'oilsRptTemplateFolderTree';
+                                       pid = this.tId;
+                               } else {
+                                       tree = oilsRptSharedTemplateFolderTree;
+                                       treename = 'oilsRptSharedTemplateFolderTree';
+                                       pid = this.stId;
+                               }
+                               break;
+                       case 'report': 
+                               if(mine) {
+                                       tree = oilsRptTemplateFolderTree;
+                                       treename = 'oilsRptTemplateFolderTree';
+                                       pid = this.rId;
+                               } else {
+                                       tree = oilsRptSharedTemplateFolderTree;
+                                       treename = 'oilsRptSharedTemplateFolderTree';
+                                       pid = this.srId;
+                               }
+                               break;
+                       case 'output': 
+                               if(mine) {
+                                       tree = oilsRptTemplateFolderTree;
+                                       treename = 'oilsRptTemplateFolderTree';
+                                       pid = this.oId;
+                               } else {
+                                       tree = oilsRptSharedTemplateFolderTree;
+                                       treename = 'oilsRptSharedTemplateFolderTree';
+                                       pid = this.soId;
+                               }
+               }
+
+               if(!mine) {
+                       if(!this.orgTrail[type][folder.share_with().id()]) {
+                               tree.addNode(id, pid, folder.share_with().shortname());
+                               tree.close(pid);
+                               pid = id;
+                               id = oilsNextId();
+                               this.orgTrail[type][folder.share_with().id()] = pid;
+                       } else {
+                               pid = this.orgTrail[type][folder.share_with().id()];
+                               id = oilsNextId();
+                       }
+               }
+
+               if( folder.parent() ) 
+                       pid = this.findNode(type, folder.parent()).treeId;
+
+               var action = 'javascript:oilsRptObject.find('+
+                       node.folderWindow.id+').draw();'+treename+'.toggle("'+id+'");';
+               _debug('adding node '+folder.name()+' pid = '+pid);
+               tree.addNode(id, pid, folder.name(), action);
+               tree.close(pid);
        }
-       this.folderTree[type] = { children : [] };
-       this.makeTree(type, folders, this.folderTree[type], tid );
 }
 
 
-/* builds an in-memory version of the folder trees as well as the UI trees */
-oilsRptFolderManager.prototype.makeTree = function(type, folders, node, parentId) {
+/*
+oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
+       this.folderTree[type] = { children : [] };
+       this.makeTree(type, folders, this.folderTree[type], -1 );
+}
+oilsRptFolderManager.prototype.makeTree = function(type, folders, node, parentId, tree) {
        if(!node) return;
        var id = parentId;
        var childNodes;
@@ -89,8 +191,11 @@ oilsRptFolderManager.prototype.makeTree = function(type, folders, node, parentId
        for( var i = 0; i < childNodes.length; i++ ) 
                this.makeTree( type, folders, { folder : childNodes[i] }, id );
 }
+*/
+
 
 oilsRptFolderManager.prototype.findNode = function(type, id) {
+               _debug('finding : type = ' + type + ' : ' + id);
        return oilsRptFolderNodeCache[type][id];
 }
 
index 251958f..f4843b5 100644 (file)
@@ -2,10 +2,9 @@
        <table>
                <tbody>
                        <tr>
-                               <td>Select a report:</td>
-                               <td><select id='oils_rpt_report_selector'/></td>
-                               <td>
-                                       <span>Report Description: </span><span id='oils_rpt_report_description'/>
+                               <td colspan='3'>
+                                       <div><b>Folder Contents</b></div>
+                                       <div id='oils_rpt_report_selector'/>
                                </td>
                        </tr>
                        <tr>
index 9d9533d..cbf502b 100644 (file)
@@ -1,9 +1,11 @@
 <div id='oils_rpt_template_folder_window_contents_div' class='hide_me oils_rpt_folder_window_div'>
-       <table>
+       <table id='oils_rpt_template_folder_window_contents_table'>
                <tbody>
                        <tr>
-                               <td>Select a template:</td>
-                               <td><select id='oils_rpt_template_selector'/></td>
+                               <td colspan='3'>
+                                       <div><b>Folder Contents</b></div>
+                                       <div id='oils_rpt_template_selector'/>
+                               </td>
                        </tr>
                        <tr>
                                <td>Select an action:</td>
                                        </div>
                                </td>
                        </tr>
-                       <tr>
-                               <td colspan='3' align='center'>
-                                       <button id='oils_rpt_template_folder_window_go'>Go!</button>
+                       <tr id='oils_rpt_template_folder_go_row'>
+                               <td colspan='3' align='left'>
+                                       <button id='oils_rpt_template_folder_window_go'>Continue...</button>
                                </td>
                        </tr>
                </tbody>
        </table>
+
+       <div style='margin-top: 10px;'>
+               <div id='oils_rpt_template_folder_new_report' class='hide_me'>
+                       <table>
+                               <tbody>
+                                       <tr>
+                                               <td>Give the new report a name:</td>
+                                               <td><input id='oils_rpt_template_folder_new_report_name' type='text'/></td>
+                                       </tr>
+                                       <tr>
+                                               <td>Give the new report a description:</td>
+                                               <td><textarea id='oils_rpt_template_folder_new_report_desc' cols='40' rows='2'/></td>
+                                       </tr>
+                                       <tr>
+                                               <td colspan='2' align='left'>
+                                                       <button id='oils_rpt_template_folder_new_report_next'>Continue..</button>
+                                               </td>
+                                       </tr>
+                               </tbody>
+                       </table>
+               </div>
+       </div>
+
 </div>
 
index 7b1227e..a58d24b 100644 (file)
@@ -24,6 +24,18 @@ function oilsRptFindObject(id) {
        return oilsRptObjectCache[id];
 }
 
+function oilsRptCacheObject(type, obj, id) {
+       if( !oilsRptObjectCache[type] )
+               oilsRptObjectCache[type] = {};
+       oilsRptObjectCache[type][id] = obj;
+}
+
+function oilsRptGetCache(type, id) {
+       if( !oilsRptObjectCache[type] )
+               return null;
+       return oilsRptObjectCache[type][i];
+}
+
 
 /* -------------------------------------------- */
 function oilsRptObject() {}
index 0646f05..48ead71 100644 (file)
@@ -10,8 +10,13 @@ var oilsRpt;
 /* UI tree  */
 var oilsRptTree;
 
-/* UI tree of report folders */
-var oilsRptFolderTree;
+var oilsRptTemplateFolderTree;
+var oilsRptReportFolderTree;
+var oilsRptOutputFolderTree;
+var oilsRptSharedTemplateFolderTree;
+var oilsRptSharedReportFolderTree;
+var oilsRptSharedOutputFolderTree;
+
 
 /* URL to retrieve the IDL from */
 var OILS_IDL_URL = "/reports/fm_IDL.xml";
@@ -52,3 +57,5 @@ var OILS_RPT_FETCH_TEMPLATE = 'open-ils.reporter:open-ils.reporter.template.retr
 var oilsRptCurrentFolderManager;
 
 //var oilsRptFolderWindowCache = {};
+
+var oilsRptObjectCache = {};
index bfea75d..4d53e89 100644 (file)
@@ -24,6 +24,43 @@ oilsRptWidget.prototype.draw = function() {
        appendClear(this.node, this.dest);
 }
 
+/* ----------------------------------------------------------- */
+
+oilsRptSetSubClass('oilsRptMultiInputWidget', 'oilsRptWidget');
+function oilsRptMultiInputWidget(args) {
+       this.init(args);
+}
+
+oilsRptMultiInputWidget.prototype.init = function(args) {
+       if(!args) return;
+       this.super.init(args);
+       this.count = (args.count) ? args.count : 2;
+       this.dest = [];
+       for( var i = 0; i < this.count; i++ )
+               this.dest.push(elem('input',{type:'text'}));
+}
+
+oilsRptMultiInputWidget.prototype.getValue = function() {
+       var vals = [];
+       for( var i = 0; i < this.dest.length; i++ )
+               vals.push(this.dest.value);
+       return vals;
+}
+
+oilsRptMultiInputWidget.prototype.draw = function() {
+       removeChildren(this.node);
+       for( var i = 0; i < this.dest.length; i++ ) {
+               this.node.appendChild(this.label[i]);
+               this.node.appendChild(this.dest[i]);
+       }
+}
+
+oilsRptMultiInputWidget.prototype.setLabels = function(labels) {
+       this.labels = labels;   
+}
+
+
+
 
 /* ----------------------------------------------------------- */