source: sandbox/webservice/restclient/libs/jsonreport.js @ 6092

Revision 6092, 7.1 KB checked in by asaikawa, 12 years ago (diff)

Ticket #2507 - Inserindo codigo de um cliente para a realizacao dos testes de consumo dos webservices

Line 
1/**
2 * Created by demis.bellot@gmail.com
3 * Open Source under the New BSD Licence: https://github.com/AjaxStack/AjaxStack/blob/master/LICENSE
4 */
5
6//for non-modern browsers i.e: <=IE8
7!window.JSON && document.write(unescape('%3Cscript src=""http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js""%3E%3C/script%3E'));
8
9var cssText =
10  ".jsonreport TABLE { border-collapse:collapse; border: solid 1px #ccc; clear: left; }\r\n" +
11  ".jsonreport TH { text-align: left; padding: 4px 8px; text-shadow: #fff 1px 1px -1px; background: #f1f1f1; white-space:nowrap; cursor:pointer; font-weight: bold; }\r\n" +
12  ".jsonreport TH, .jsonreport TD, .jsonreport TD DT, .jsonreport TD DD { font-size: 13px; font-family: Arial; }\r\n" +
13  ".jsonreport TD { padding: 8px 8px 0 8px; vertical-align: top; }\r\n" +
14  ".jsonreport DL { clear: left; }\r\n" +
15  ".jsonreport DT { margin: 10px 0 5px 0; font: bold 18px Helvetica, Verdana, Arial; width: 200px; clear: left; float: left; display:block; white-space:nowrap; }\r\n" +
16  ".jsonreport DD { margin: 5px 10px; font: 18px Arial; padding: 2px; display: block; float: left; }\r\n" +
17  ".jsonreport DL DL DT { font: bold 16px Arial; }\r\n" +
18  ".jsonreport DL DL DD { font: 16px Arial; }\r\n" +
19  ".jsonreport HR { display:none; }\r\n" +
20  ".jsonreport TD DL HR { display:block; padding: 0; clear: left; border: none; }\r\n" +
21  ".jsonreport TD DL { padding: 4px; margin: 0; height:100%; max-width: 700px; }\r\n" +
22  ".jsonreport DL TD DL DT { padding: 2px; margin: 0 10px 0 0; font-weight: bold; font-size: 13px; width: 120px; overflow: hidden; clear: left; float: left; display:block; }\r\n" +
23  ".jsonreport DL TD DL DD { margin: 0; padding: 2px; font-size: 13px; display: block; float: left; }\r\n" +
24  ".jsonreport TBODY>TR:last-child>TD { padding: 8px; }\r\n" +
25  ".jsonreport THEAD { -webkit-user-select:none; -moz-user-select:none; }\r\n" +
26  ".jsonreport .desc, .jsonreport .asc { background-color: #FAFAD2; }\r\n" +
27  ".jsonreport .desc { background-color: #D4EDC9; }\r\n" +
28  ".jsonreport TH B { display:block; float:right; margin: 0 0 0 5px; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 5px solid #ccc; border-bottom: none; }\r\n" +
29  ".jsonreport .asc B { border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 5px solid #333; border-bottom: none; }\r\n" +
30  ".jsonreport .desc B { border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 5px solid #333; border-top: none; }\r\n" +
31  ".jsonreport H3 { font-size: 18px; margin: 0 0 10px 0; }";
32
33document.write('<style type="text/css">' + cssText + '</style>\r\n');
34
35if (!_) var _ = {};
36_.jsonreport = (function(){
37    var root = this, doc = document,
38        $ = function(id) { return doc.getElementById(id); },
39        $$ = function(sel) { return doc.getElementsByTagName(sel); },
40        $each = function(fn) { for (var i=0,len=this.length; i<len; i++) fn(i, this[i], this); },
41        isIE = /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
42
43    $.each = function(arr, fn) { $each.call(arr, fn); };
44
45    var splitCase = function(t) { return typeof t != 'string' ? t : t.replace(/([A-Z]|[0-9]+)/g, ' $1').replace(/_/g,' '); },
46        uniqueKeys = function(m){ var h={}; for (var i=0,len=m.length; i<len; i++) for (var k in m[i]) h[k] = k; return h; },
47        keys = function(o){ var a=[]; for (var k in o) a.push(k); return a; }
48    var tbls = [];
49
50    function val(m) {
51      if (m == null) return '';
52      if (typeof m == 'number') return num(m);
53      if (typeof m == 'string') return str(m);
54      if (typeof m == 'boolean') return m ? 'true' : 'false';
55      return m.length ? arr(m) : obj(m);
56    }
57    function num(m) { return m; }
58    function str(m) {
59      return m.substr(0,6) == '/Date(' ? dfmt(date(m)) : m;
60    }
61    function date(s) { return new Date(parseFloat(/Date\(([^)]+)\)/.exec(s)[1])); }
62    function pad(d) { return d < 10 ? '0'+d : d; }
63    function dfmt(d) { return d.getFullYear() + '/' + pad(d.getMonth() + 1) + '/' + pad(d.getDate()); }
64    function obj(m) {
65      var sb = '<dl>';
66      for (var k in m) sb += '<dt class="ib">' + splitCase(k) + '</dt><dd>' + val(m[k]) + '</dd>';
67      sb += '</dl>';
68      return sb;
69    }
70    function arr(m) {
71      if (typeof m[0] == 'string' || typeof m[0] == 'number') return m.join(', ');
72      var id=tbls.length, h=uniqueKeys(m);
73      var sb = '<table id="tbl-' + id + '"><caption></caption><thead><tr>';
74      tbls.push(m);
75      var i=0;
76      for (var k in h) sb += '<th id="h-' + id + '-' + (i++) + '"><b></b>' + splitCase(k) + '</th>';
77      sb += '</tr></thead><tbody>' + makeRows(h,m) + '</tbody></table>';
78      return sb;
79    }
80
81    function makeRows(h,m) {
82      var sb = '';
83      for (var r=0,len=m.length; r<len; r++) {
84        sb += '<tr>';
85        var row = m[r];
86        for (var k in h) sb += '<td>' + val(row[k]) + '</td>';
87        sb += '</tr>';
88      }
89      return sb;
90    }
91
92    function setTableBody(tbody, html) {
93      if (!isIE) { tbody.innerHTML = html; return; }
94      var temp = tbody.ownerDocument.createElement('div');
95      temp.innerHTML = '<table>' + html + '</table>';
96      tbody.parentNode.replaceChild(temp.firstChild.firstChild, tbody);
97    }
98
99    function clearSel() {
100      if (doc.selection && doc.selection.empty) doc.selection.empty();
101      else if(root.getSelection) {
102        var sel=root.getSelection();
103        if (sel && sel.removeAllRanges) sel.removeAllRanges();
104      }
105    }
106
107    function cmp(v1, v2){
108      var f1, f2, f1=parseFloat(v1), f2=parseFloat(v2);
109      if (!isNaN(f1) && !isNaN(f2)) v1=f1, v2=f2;
110      if (typeof v1 == 'string' && v1.substr(0,6) == '/Date(') v1=date(v1), v2=date(v2);
111      if (v1 == v2) return 0;
112      return v1 > v2 ? 1 : -1;
113    }
114
115    function enc(html) {
116      if (typeof html != 'string') return html;
117      return html.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
118    }
119
120    function addEvent(obj, type, fn) {
121      if ( obj.attachEvent ) {
122        obj['e'+type+fn] = fn;
123        obj[type+fn] = function(){obj['e'+type+fn]( root.event );}
124        obj.attachEvent( 'on'+type, obj[type+fn] );
125      } else
126        obj.addEventListener( type, fn, false );
127    }
128
129    addEvent(doc, 'click', function (e) {
130        var e = e || root.event, el = e.target || e.srcElement, cls = el.className;
131        if (el.tagName == 'B') el = el.parentNode;
132        if (el.tagName != 'TH') return;
133        el.className = cls == 'asc' ? 'desc' : (cls == 'desc' ? null : 'asc');
134        $.each($$('TH'), function(i,th){ if (th == el) return; th.className = null; });
135        clearSel();
136        var ids=el.id.split('-'), tId=ids[1], cId=ids[2];
137        var tbl=tbls[tId].slice(0), h=uniqueKeys(tbl), col=keys(h)[cId], tbody=el.parentNode.parentNode.nextSibling;
138        if (!el.className){ setTableBody(tbody, makeRows(h,tbls[tId])); return; }
139        var d=el.className=='asc'?1:-1;
140        tbl.sort(function(a,b){ return cmp(a[col],b[col]) * d; });
141        setTableBody(tbody, makeRows(h,tbl));
142    });
143
144    return function(json) {
145        return val(json);
146        // var model = JSON.parse(json);
147        // return val(model);
148    };
149})();
150
Note: See TracBrowser for help on using the repository browser.