1/******************************************************* 2 * Dm.Trace 1.0 - Ðоказ оÑладоÑнÑÑ ÑообÑений 3 * 4 * Copyright (c) 2008, Dema (Dema.ru) 5 * ÐиÑÐµÐ½Ð·Ð¸Ñ LGPL Ð´Ð»Ñ Ð»Ñбого иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ 6 * 7 *******************************************************/ 8 9// ÐобавиÑÑ ÑÑÑÐ¾ÐºÑ Ð² конÑÐ¾Ð»Ñ Ð¾Ñладки 10// Ðожно пеÑедаÑÑ Ð½ÐµÑколÑко паÑамеÑÑов, вÑе они бÑдÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑокой. 11// Ðожно пеÑедаваÑÑ Ð¼Ð°ÑÑÐ¸Ð²Ñ Ð¸ обÑекÑÑ - они бÑдÑÑ Ð²ÑÐ²ÐµÐ´ÐµÐ½Ñ Ð² ÑаблиÑе Ñипа название/Ð¸Ð½Ð´ÐµÐºÑ - знаÑение 12 13var _notrace = console && console.log ? function(){ console.log.apply(console, arguments); } : function(){}; 14var trace = _notrace; 15 16(function($){ 17 $.Dm = $.Dm || {}; 18 19 $.Dm.Trace = { 20 // ÐклÑÑиÑÑ Ð²Ñвод 21 enable: function() 22 { 23 if(_enabled) return; 24 _enabled = true; 25 trace = push; 26 ensureLog(); 27 if(_panel) _panel.css('display', 'block'); 28 }, 29 // ÐÑклÑÑиÑÑ Ð²Ñвод 30 disable: function() 31 { 32 if(!_enabled) return; 33 trace = _notrace; 34 clear(); 35 if(_panel) _panel.css('display', 'none'); 36 _enabled = false; 37 }, 38 // ÐобавиÑÑ ÑÑеÑÑик. ÐаÑамеÑÑÑ: 39 // i - id ÑÑеÑÑика 40 // c - обÑÐµÐºÑ ÑÑеÑÑика: { 41 // v: оÑобÑажаемое знаÑение, 42 // h: true - ÑкÑÑваÑÑ Ð¿Ñи минимизиÑованном вÑводе, 43 // t: - опиÑание, 44 // init: function(){ ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð²Ñзвана поÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ HTML ÑлеменÑа, к коÑоÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ обÑаÑиÑÑÑÑ ÑеÑез this.c } 45 // } 46 addCounter: addCounter, 47 // ÐобавиÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð¾ÑобÑажениÑ. ÐаÑамеÑÑÑ: 48 // i - id панели 49 // c - ÑодеÑжимое панели (необÑзаÑелÑно) 50 // ÐеÑод веÑÐ½ÐµÑ ÐºÐ¾Ð½ÑÐµÐ¹Ð½ÐµÑ Ð¿Ð°Ð½ÐµÐ»Ð¸ 51 addView: addView, 52 // ÐоказаÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ. ÐаÑамеÑÑ: 53 // i - id панели Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° 54 showView: showView, 55 // Ð jQuery 1.6 обÑаÑение к className пеÑеÑÑало ÑабоÑаÑÑ, ÑепеÑÑ Ð½Ñжно обÑаÑаÑÑÑÑ ÑеÑез 'class', добавлено Ð´Ð»Ñ ÑовмеÑÑимоÑÑи 56 CN: 'class' 57 }; 58 59 // ÐодклÑÑаемÑÑ Ðº ÑобÑÑиÑм Ajax 60 $(document).ajaxSend(function(e, r, s) 61 { 62 // СÑеÑÑик оÑпÑавленнÑÑ Ð·Ð°Ð¿ÑоÑов 63 _a.as.s(1); 64 // ÐÑÐµÐ¼Ñ Ð¾ÑпÑавки запÑоÑа 65 s.time = (new Date()).getTime(); 66 }) 67 .ajaxComplete(function(e, r, s) 68 { 69 var ok = r.status==200; 70 var len = r.responseText?r.responseText.length:0; 71 s.time = ((new Date()).getTime()-s.time); 72 trace('AJAX('+s.type+' '+s.url+')->['+r.status+', '+(ok?'Ok, ':'FAIL, ')+(s.time/1000)+', '+len+']'+(ok?'':': '+r.responseText)); 73 _a[ok?'ac':'ae'].s(1); // СÑеÑÑик оÑибок/законÑеннÑÑ Ð·Ð°Ð¿ÑоÑов 74 _a.al.s(len); // СÑеÑÑик пÑинÑÑÑÑ Ñимволов 75 _a.at.s(s.time); // СÑеÑÑик вÑемени обÑабоÑки 76 _a.ao.s(Math.round(_a.at.v==0?0:( 1000 * _a.al.v / _a.at.v ))); // СкоÑоÑÑÑ 77 }); 78 79 // ÐÑкÑÑÑие/закÑÑÑие/оÑиÑÑка лога 80 $(document).keydown(function(e) 81 { 82 if(e.ctrlKey && e.keyCode==192) 83 { 84 if(e.altKey) 85 { 86 $.Dm.Trace[_enabled?'disable':'enable'](); 87 }else if(_enabled) 88 { 89 ensureLog(); 90 (e.shiftKey?clear:(_opened?minimize:maximize))(); 91 } 92 } 93 }); 94 95 // ÐÑизнак вклÑÑенного trace 96 var _enabled = false; 97 // ÐÐ°Ð½ÐµÐ»Ñ ÑÑаÑÑиÑовки 98 var _panel = null; 99 // ÐонÑÐµÐ¹Ð½ÐµÑ Ð´Ð»Ñ ÑÑеÑÑиков 100 var _countplace = null; 101 // ÐонÑÐµÐ¹Ð½ÐµÑ Ð´Ð»Ñ ÑообÑений 102 var _list = null; 103 // ÐÑвод ÑеÑвеÑа 104 var _servertrace = null; 105 // СпиÑок оÑобÑажаемÑÑ Ð¿Ð°Ð½ÐµÐ»ÐµÐ¹ 106 var _views = {}; 107 // ÐкÑивнÑй оÑобÑажаемÑй Ð¶Ð»ÐµÐ¼ÐµÐ½Ñ 108 var _view = null; 109 // СÑеÑÑик ÑекÑÑего колиÑеÑÑва ÑлеменÑов 110 var _len = 0; 111 // ÐоÑледнее ÑообÑение 112 var _last = null; 113 // СоÑÑоÑние панели: ÑвеÑнÑÑа/ÑазвеÑнÑÑа 114 var _opened = false; 115 // ÐÑÐµÐ¼Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑÑаниÑÑ 116 var _showat = (new Date()).getTime(); 117 // ÐбÑекÑÑ Ð´Ð»Ñ Ð²Ñвода ÑÑеÑÑиков Trace + Ajax 118 var _a = {
119 lc: { v: 0, h: false, s: addV, t: 'Trace count (click - show client trace)' }, 120 as: { v: 0, h: false, s: addV, t: 'Ajax send count' }, 121 ac: { v: 0, h: false, s: addV, t: 'Ajax success count' }, 122 ae: { v: 0, h: false, s: addV, t: 'Ajax error count' }, 123 al: { v: 0, h: false, s: addV, t: 'Ajax total recived text length' }, 124 at: { v: 0, h: false, s: addV2, t: 'Ajax total work time in sec' }, 125 ao: { v: 0, h: false, s: setV, t: 'Ajax speed of receiving in char per sec' } 126 }; 127 var _ah = {}; 128 // УвелиÑиÑÑ Ð·Ð½Ð°Ñение 129 function addV(v) 130 { 131 this.v += v; 132 if(this.c) this.c.text(this.v); 133 } 134 function addV2(v) 135 { 136 this.v += v; 137 if(this.c) this.c.text(this.v/1000); 138 } 139 // УÑÑановиÑÑ Ð·Ð½Ð°Ñение 140 function setV(v) 141 { 142 this.v = v; 143 if(this.c) this.c.text(this.v); 144 } 145 146 // ÐÑовеÑиÑÑ Ð¾Ð±ÑÐµÐºÑ ÐºÐ¾Ð½ÑейнеÑа и ÑоздаÑÑ ÐµÑли нÑжно 147 function ensureLog() 148 { 149 if(_panel) return; 150 // Создаем обÑекÑÑ 151 _panel = $('<div class="dmtrace" title="Ctrl+` - maximize/minimize, Ctrl+Shift+` - clear, Ctrl+Shift+Alt+` - enable/disable.">') 152 .css('display', 'none') 153 .prependTo(document.body); 154 _countplace = $('<div class="counters">') 155 .appendTo(_panel); 156 _list = addView('clienttrace') 157 .css('display', 'block'); 158 _view = _list; 159 // Создаем ÑÑеÑÑики 160 for(var i in _a) 161 { 162 addCounter(i, _a[i]); 163 } 164 _a.lc.c.css('cursor', 'pointer') 165 .click(function() 166 { 167 showView('clienttrace'); 168 }); 169 // ÐÑем и иниÑиализиÑÑем ÑеÑвеÑнÑй вÑвод 170 var st = $('span.tracecontent'); 171 if(st.length==1) 172 addCounter('st', { v: 'ST', h: true, t: 'View server trace', p: addView('servertrace', st), init: function() 173 { 174 this.c.click(function() 175 { 176 showView('servertrace'); 177 }); 178 } 179 }); 180 minimize(); 181 } 182 // Создаем ÑÑеÑÑик 183 function addCounter(i, c) 184 { 185 _a[i] = c; 186 if(!_countplace) return; 187 c.c = $('<div id="'+i+'">') 188 .attr('title', c.t) 189 .text(c.v) 190 .appendTo(_countplace); 191 if(c.h) 192 { 193 _ah[i] = c.c; 194 if(!_opened) c.c.css('display', 'none'); 195 } 196 if(c.init) c.init(); 197 } 198 /* УдалиÑÑ ÑÑеÑÑик 199 function delCounter(i) 200 { 201 if(_a[i]==null) return; 202 _a[i].c.remove(); 203 delete _ah[i]; 204 delete _a[i]; 205 }*/ 206 207 // СоздаÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ 208 function addView(i, c, clear) 209 { 210 ensureLog(); 211 var o = _views[i]; 212 if(o==null) 213 _views[i] = o = $('<div class="list" style="overflow:auto;display:none;">').appendTo(_panel); 214 if(clear!=false) 215 o.children().remove(); 216 if(c!=null) 217 { 218 o.append(c); 219 if(clear==false && c[0]!=null && c[0].scrollIntoView) 220 c[0].scrollIntoView(false); 221 } 222 return o; 223 } 224 // ÐеÑеклÑÑиÑÑ Ð¾ÑобÑажаемÑÑ Ð¿ÐµÐ½ÐµÐ»Ñ 225 function showView(i) 226 { 227 var nv = _views[i]; 228 if(_view==nv || nv==null) return; 229 _view.css('display', 'none'); 230 _view = nv; 231 if(_opened) _view.css('display', 'block'); 232 } 233 234 // СвеÑнÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ 235 function minimize() 236 { 237 _view.css('display', 'none'); 238 _panel.attr($.Dm.Trace.CN, 'dmtrace'); 239 for(var i in _ah) 240 { 241 _ah[i].css('display', 'none'); 242 } 243 _opened = false; 244 } 245 // РазвеÑнÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ 246 function maximize() 247 { 248 _panel.attr($.Dm.Trace.CN, 'dmtrace opened'); 249 _view.css('display', 'block'); 250 for(var i in _ah) 251 { 252 _ah[i].css('display', 'inline-block'); 253 } 254 _opened = true; 255 } 256 257 // ÐобавиÑÑ ÑообÑение 258 function push() 259 { 260 if(!_enabled) return; 261 ensureLog(); 262 var buf = []; 263 for(var i=0; i<arguments.length; i++) 264 { 265 buf.push(format(arguments[i])); 266 } 267 _last = $('<div>').html(t()+buf.join('')).appendTo(_list); 268 if(_opened && _last[0].scrollIntoView) 269 _last[0].scrollIntoView(false); 270 _a.lc.s(1); 271 _len++; 272 if(_len>80) 273 _list.children(':eq(0)').remove(); 274 } 275 function dummypush() 276 { 277 } 278 279 function format(obj) 280 { 281 if(typeof(obj)=='object' || typeof(obj)=='array') 282 { 283 var buf = ['<table>']; 284 for(var i in obj) 285 { 286 buf.push('<tr><th>', i, '</th><td>', (''+obj[i]).replace(/&/g, '&').replace(/</g, '<'), '</td></tr>'); 287 } 288 buf.push('<table>'); 289 obj = buf.join(''); 290 }else if(obj==null) 291 { 292 obj = '<i style="color:blue">null</i>'; 293 }else if(obj.length===0) 294 { 295 obj = '<i style="color:blue">empty</i>'; 296 }else 297 { 298 obj = (''+obj).replace(/&/g, '&').replace(/</g, '<'); 299 } 300 return obj;
301 } 302 303 // ÐÑиÑÑиÑÑ ÑпиÑок 304 function clear() 305 { 306 if(_list) 307 _list.children().remove(); 308 _len = 0; 309 } 310 // СколÑко вÑемени пÑоÑло Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° ÑÑÑаниÑÑ 311 function t() 312 { 313 var t = (new Date()).getTime()-_showat; 314 var s = [': ', n(t % 1000, 3), '.']; 315 t = Math.floor(t / 1000); 316 s.push(n(t % 60, 2), ':'); 317 t = Math.floor(t / 60); 318 s.push(n(t, 2)); 319 return s.reverse().join(''); 320 } 321 function n(i, l) 322 { 323 return (l = l-(''+i).length)<=0?i:('000'.substring(0, l)+i); 324 } 325})(jQuery); 326 327/* $Date: 2011-05-04 20:31:09 +0400 (Wed, 04 May 2011) $ 328$Revision: 382 $ 329 $Author: Dema $ 330 $HeadURL: https://localhost/svn/Personal/trunk/Dema.ru/wwwroot/_static/script/jquery.dmtrace-1.0.js $ 331*/
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.