2 var idlNS = "http://opensrf.org/spec/IDL/base/v1";
3 var persistNS = "http://open-ils.org/spec/opensrf/IDL/persistance/v1";
4 var objNS = "http://open-ils.org/spec/opensrf/IDL/objects/v1";
5 var rptNS = "http://open-ils.org/spec/opensrf/IDL/reporter/v1";
6 var gwNS = "http://opensrf.org/-/namespaces/gateway/v1";
7 var xulNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
10 var rpt_rel_cache = {};
12 function sortHashLabels (a,b) { return a.label.toLowerCase() < b.label.toLowerCase() ? -1 : 1; }
14 function sortNames (a,b) {
15 var aname = a.name.toLowerCase();
16 if (!aname) aname = a.idlclass.toLowerCase();
18 var bname = b.name.toLowerCase();
19 if (!bname) bname = b.idlclass.toLowerCase();
21 return aname < bname ? -1 : 1;
24 function sortLabels (a,b) {
25 var aname = a.getAttributeNS(rptNS, 'label').toLowerCase();
26 if (!aname) aname = a.getAttribute('name');
27 if (!aname) aname = a.getAttribute('id');
29 var bname = b.getAttributeNS(rptNS, 'label').toLowerCase();
30 if (!bname) bname = b.getAttribute('name');
31 if (!bname) bname = b.getAttribute('id');
33 return aname < bname ? -1 : 1;
37 function loadTemplate(id) {
39 var session = cgi.param('ses');
41 var r = new Request('open-ils.reporter:open-ils.reporter.template.retrieve', session, id);
45 var tmpl = res.getResultObject();
46 var template = JSON2js( tmpl.data() );
48 resetUI( template.core_class );
50 $('template-name').value = tmpl.name() + ' (clone)';
51 $('template-description').value = tmpl.description();
53 rpt_rel_cache = template.rel_cache;
63 var req = new XMLHttpRequest();
64 req.open('GET', '../fm_IDL.xml', true);
65 req.onreadystatechange = function() {
66 if( req.readyState == 4 ) {
67 oilsIDL = req.responseXML;
69 filterByAttributeNS( oilsIDL.getElementsByTagName('class'), rptNS, 'core', 'true' )
76 var template_id = cgi.param('ct');
77 if (template_id) loadTemplate(template_id);
80 function getIDLClass (id) { return filterByAttribute( oilsIDL.getElementsByTagName('class'), 'id', id )[0] }
81 function getIDLField (classNode,field) { return filterByAttribute( classNode.getElementsByTagName('field'), 'name', field )[0] }
82 function getIDLLink (classNode,field) { return filterByAttribute( classNode.getElementsByTagName('link'), 'field', field )[0] }
84 function resetUI (idlclass) {
85 if (getKeys(rpt_rel_cache).length > 0) {
87 "You have started building a template!\n" +
88 "Selecting a new starting source will destroy " +
89 "the current template and start over. Is this OK?"
94 try { renderSources(); } catch (e) {}
96 populateSourcesTree( idlclass );
98 var tree = $('sources-treetop').parentNode;
100 tree.view.selection.select(0);
104 function populateSourcesMenu (classList) {
105 classList.sort( sortLabels );
107 var menu = $('source-menu');
111 { label : 'Core Sources',
113 style : 'color: black; text-decoration: underline;'
119 for (var i in classList) {
121 var name = classList[i].getAttributeNS(rptNS,'label');
122 var id = classList[i].getAttribute('id');
123 if (!name) name = id;
127 { container : 'true',
130 onmouseup : 'resetUI( "' + id + '");'
137 menu.appendChild( createMenuSeparator() );
140 { label : 'All Available Sources' },
144 { label : 'All Available Sources',
146 style : 'color: black; '
149 createMenuSeparator()
153 menu.appendChild( _m );
154 menu = _m.firstChild;
156 var all = map(function(x){return x;}, oilsIDL.getElementsByTagNameNS(idlNS,'class'));
157 all.sort( sortLabels );
159 for (var i = 0; i < all.length; i++) {
161 if (all[i].getAttributeNS(persistNS,'virtual') == 'true') continue;
163 var name = all[i].getAttributeNS(rptNS,'label');
164 var id = all[i].getAttribute('id');
165 if (!name) name = id;
169 { container : 'true',
172 onmouseup : 'resetUI( "' + id + '");'
182 function populateSourcesTree (idlclass) {
184 var tcNode = $('sources-treetop');
185 while (tcNode.childNodes.length) tcNode.removeChild(tcNode.lastChild);
187 var c = getIDLClass( idlclass );
188 var name = c.getAttributeNS(rptNS,'label');
189 if (!name) name = idlclass;
193 { container : 'true',
199 createTreeCell( { label : name } )
201 createTreeChildren( { alternatingbackground : true } )
206 function populateSourcesSubtree (tcNode, classList) {
207 classList.sort(sortNames);
208 for (var i in classList) {
209 var obj = classList[i];
211 var p = getIDLClass( obj.idlclass );
212 var cont = p.getElementsByTagName('link').length ? 'true' : 'false';
217 idlclass : obj.idlclass,
222 reltype : obj.reltype,
223 fullpath : obj.fullpath,
227 createTreeCell( { label : obj.name } )
229 createTreeChildren( { alternatingbackground : true } )
237 function populateDetailTree (tcNode, c, item) {
238 var fullpath = item.getAttribute('fullpath');
239 var reltype = item.getAttribute('reltype');
241 var fields = filterByAttributeNS(c.getElementsByTagName('field'),persistNS, 'virtual','false');
242 fields.sort( sortLabels );
244 var id = c.getAttribute('id');
247 var steps = fullpath.split('.');
248 for (var k in steps) {
250 if (!steps[k]) continue;
252 var atom = steps[k].split('-');
253 var classNode = getIDLClass(atom[0]);
255 var _cname = classNode.getAttributeNS(rptNS, 'label');
256 if (!_cname) _cname = classNode.getAttribute('id');
260 if (atom.length > 1 && k == steps.length - 1) {
261 var _f = getIDLField(classNode, atom[1]);
262 var _fname = _f.getAttributeNS(rptNS, 'label');
263 if (!_fname) _fname = _f.getAttribute('name');
264 if (_fname) _label += ' :: ' + _fname;
267 path_label.push(_label);
270 $('path-label').value = path_label.join(' -> ');
271 $('path-label').setAttribute('reltype',reltype);
273 for (var i in fields) {
275 var type = fields[i].getAttributeNS(rptNS, 'datatype');
276 //if (!type) type = 'text';
278 var label = fields[i].getAttributeNS(rptNS, 'label');
279 var name = fields[i].getAttribute('name');
280 if (!label) label = name;
291 createTreeCell( { label : label } ),
292 createTreeCell( { label : type } )