experimental renderings collab/phasefx/human_readable_edi
authorJason Etheridge <jason@esilibrary.com>
Fri, 19 Aug 2011 07:22:50 +0000 (03:22 -0400)
committerJason Etheridge <jason@esilibrary.com>
Thu, 1 Dec 2011 18:14:11 +0000 (13:14 -0500)
Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Open-ILS/src/templates/acq/po/edi_messages.tt2

index 603bc74..5d77e80 100644 (file)
@@ -7,6 +7,9 @@
 [% 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 %]