[% END %]
<br/>
<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+<div id="ediPretty"></div>
+</div>
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
<table jsId="edimGrid"
autoHeight='true'
dojoType="openils.widget.AutoGrid"
} else {
edimGrid.loadAll({order_by : {acqedim : 'create_time DESC'}});
}
+ edimGrid.onEditPane = function(editPane) {
+ //var which = window.prompt('1 - prettyPrint 2 - prettyTable 3 - prettyTree');
+ var which = '2';
+ switch(which) { // experiments
+ case '1': prettyPrint(editPane); break;
+ case '2': prettyTable(editPane); break;
+ case '3': prettyTree(editPane); break;
+ }
+ };
}
);
+
+ function prettyPrint(editPane) {
+ try {
+ if(!editPane.fmObject) return;
+ var s = editPane.fmObject.labeled_json();
+ var pretty = dojo.toJson( JSON2js(s), true );
+ dump(pretty + '\n');
+ var div = document.createElement('div');
+ //editPane.domNode.appendChild(div);
+ dojo.byId('ediPretty').appendChild(div);
+ var pre = document.createElement('pre');
+ div.appendChild(pre);
+ var text = document.createTextNode(pretty);
+ pre.appendChild(text);
+ } catch(E) {
+ alert(E);
+ }
+ }
+
+ function prettyTable(editPane) {
+ try {
+ if(!editPane.fmObject) return;
+
+ var o = JSON2js( editPane.fmObject.labeled_json() );
+ var table = document.createElement('table');
+ var header = document.createElement('tr');
+ var code = document.createElement('th');
+ code.innerHTML = 'Code';
+ header.appendChild(code);
+ var label = document.createElement('th');
+ label.innerHTML = 'Label';
+ header.appendChild(label);
+ //var desc = document.createElement('th');
+ //desc.innerHTML = 'Desc';
+ //header.appendChild(desc);
+ var value = document.createElement('th');
+ value.innerHTML = 'Value';
+ header.appendChild(value);
+ table.appendChild(header);
+ dojo.byId('ediPretty').appendChild(table);
+
+ function createRow(indentation,code,label,description,value) {
+ var row = document.createElement('tr');
+ var codeCell = document.createElement('td');
+ for (var i = 0; i < indentation*2; i++) {
+ codeCell.appendChild(
+ document.createTextNode(
+ '.'
+ )
+ );
+ }
+ codeCell.appendChild(
+ document.createTextNode(
+ code
+ )
+ );
+ row.appendChild(codeCell);
+ var labelCell = document.createElement('td');
+ labelCell.appendChild(
+ document.createTextNode(
+ label
+ )
+ );
+ labelCell.setAttribute('tooltiptext',description);
+ row.appendChild(labelCell);
+ //var descCell = document.createElement('td');
+ // descCell.appendChild(
+ // document.createTextNode(
+ // description
+ // )
+ // );
+ // row.appendChild(descCell);
+ var valueCell = document.createElement('td');
+ valueCell.appendChild(
+ document.createTextNode(
+ value
+ )
+ );
+ row.appendChild(valueCell);
+ if (value == '' || label == '') {
+ switch(indentation) {
+ case 0: case 1:
+ row.setAttribute('style','background-color: darkgrey; color: white;');
+ break;
+ case 2:
+ row.setAttribute('style','background-color: grey; color: white;');
+ break;
+ default:
+ row.setAttribute('style','background-color: lightgrey');
+ break;
+ }
+ }
+ return row;
+ }
+
+ function render_each_node(obj,depth) {
+ try {
+ if (obj == null) { return; }
+ if (obj.constructor == Object) {
+ table.appendChild(
+ createRow(
+ depth,
+ obj.code || obj.key || '',
+ obj.label || obj.desc || '',
+ obj.desc || '',
+ obj.value || ''
+ )
+ );
+ for (var i in obj.children) {
+ if (obj.children[i] == null) { continue; }
+ if (obj.children[i].constructor == Array && obj.children[i].length == 0) {
+ // no-op
+ } else {
+ render_each_node(obj.children[i],depth+1);
+ }
+ }
+ } else if (obj.constructor == Array) {
+ for (var i = 0; i < obj.length; i++) {
+ if (obj[i] == null) { continue; }
+ if (obj[i].constructor == Array && obj[i].length == 0) {
+ // no -op
+ } else {
+ render_each_node(obj[i],depth+1);
+ }
+ }
+ }
+
+ } catch(E) {
+ alert('error in id_each_node: ' + E);
+ }
+ }
+ render_each_node(o,0);
+
+ } catch(E) {
+ alert(E);
+ }
+ }
+
+ function prettyTree(editPane) {
+ try {
+ if(!editPane.fmObject) return;
+
+ dojo.require("dojo.data.ItemFileReadStore");
+ dojo.require("dijit.Tree");
+
+ // prepare the tree data
+ var o = JSON2js( editPane.fmObject.labeled_json() );
+ var id = 0;
+ function id_each_node(obj) {
+ try {
+ if (obj == null) { return; }
+ if (obj.constructor == Object) {
+ obj.id = String( id++ );
+ if (typeof obj.label == 'undefined') {
+ obj.label = String( obj.id );
+ }
+ for (var i in obj.children) {
+ if (obj.children[i] == null) { continue; }
+ if (obj.children[i].constructor == Array && obj.children[i].length == 0) {
+ delete obj.children[i]; // some pruning
+ } else {
+ id_each_node(obj.children[i]);
+ }
+ }
+ } else if (obj.constructor == Array) {
+ for (var i = 0; i < obj.length; i++) {
+ if (obj[i] == null) { continue; }
+ if (obj[i].constructor == Array && obj[i].length == 0) {
+ delete obj[i]; // some pruning
+ } else {
+ id_each_node(obj[i]);
+ }
+ }
+ }
+
+ } catch(E) {
+ alert('error in id_each_node: ' + E);
+ }
+ }
+ id_each_node(o);
+
+ dump( dojo.toJson( o, true ) + '\n' );
+ alert('pause: JSON dumped to console');
+
+ var store = new dojo.data.ItemFileReadStore({
+ data: {
+ identifier: 'id',
+ label: 'label',
+ items: o
+ }
+ });
+
+ var treeModel = new dijit.tree.ForestStoreModel({
+ store: store,
+ rootId: '0',
+ childrenAttrs: ["children"]
+ });
+
+ var treeControl = new dijit.Tree({
+ model: treeModel,
+ showRoot: true,
+ _createTreeNode: function(args) {
+ var tnode = new dijit._TreeNode(args);
+ tnode.labelNode.innerHTML = args.label;
+ return tnode;
+ }
+ }, 'ediPretty');
+
+ } catch(E) {
+ alert(E);
+ }
+ }
+
</script>
[% END %]