]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folders.js
continued work on the folder contents editor and general folder window framework
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_folders.js
1 var oilsRptFolderNodeCache = {};
2
3 oilsRptFolderManager.prototype = new oilsRptObject();
4 oilsRptFolderManager.prototype.constructor = oilsRptFolderManager;
5 oilsRptFolderManager.baseClass = oilsRptObject.prototype.constructor;
6
7 function oilsRptFolderManager(node) {
8         this.node = node;
9         this.folderTree = {};
10         this.init();
11 }
12
13 oilsRptFolderManager.prototype.draw = function(auth) {
14         var tree = oilsRptFolderTree = 
15                 new SlimTree(this.node, 'oilsRptFolderTree');
16
17         this.rootTreeId         = oilsNextId();
18         this.templateTreeId     = oilsNextId();
19         this.reportTreeId               = oilsNextId();
20         this.outputTreeId               = oilsNextId();
21
22         tree.addNode(this.rootTreeId, -1, 'Report Folders');
23         tree.addNode(this.templateTreeId, this.rootTreeId, 'Template Folders');
24         tree.addNode(this.reportTreeId, this.rootTreeId, 'Report Folders');
25         tree.addNode(this.outputTreeId, this.rootTreeId, 'Output Folders');
26
27         this.fetchFolders(auth);
28 }
29
30 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
31         var obj = this;
32         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
33         req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
34         req.send();
35
36         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
37         req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
38         req.send();
39
40         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
41         req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
42         req.send();
43 }
44
45
46 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
47         _debug('making folder tree '+type);
48         switch(type) {
49                 case 'template': tid = this.templateTreeId; break;
50                 case 'report': tid = this.reportTreeId; break;
51                 case 'output': tid = this.outputTreeId; break;
52         }
53         this.folderTree[type] = { children : [] };
54         this.makeTree(type, folders, this.folderTree[type], tid );
55 }
56
57
58 /* builds an in-memory version of the folder trees as well as the UI trees */
59 oilsRptFolderManager.prototype.makeTree = function(type, folders, node, parentId) {
60         if(!node) return;
61         var id = parentId;
62         var childNodes;
63
64         if( ! node.folder ) {
65                 childNodes = grep(folders, function(f){return (!f.parent())});
66
67         } else {
68                 _debug("making subtree with folder "+node.folder.name());
69
70                 var c = oilsRptFolderNodeCache;
71                 if(!c[type]) c[type] = {};
72                 c[type][node.folder.id()] = node;
73
74                 id = oilsNextId();
75
76                 node.folderWindow = oilsRptBuildFolderWindow(type, node.folder.id());
77
78                 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();'+
79                         'oilsRptFolderTree.toggle("'+id+'");';
80
81                 oilsRptFolderTree.addNode(id, parentId, node.folder.name(), action);
82                 node.treeId = id;
83                 node.children = [];
84                 childNodes = grep(folders, 
85                         function(i){return (i.parent() == node.folder.id())});
86         } 
87
88         if(!childNodes) return;
89         for( var i = 0; i < childNodes.length; i++ ) 
90                 this.makeTree( type, folders, { folder : childNodes[i] }, id );
91 }
92
93 oilsRptFolderManager.prototype.findNode = function(type, id) {
94         return oilsRptFolderNodeCache[type][id];
95 }
96
97
98
99
100
101
102