PageSourceSearch

https://erus.ru/Content/js/jq.dm.trace-1.0.js?v20190715-1

js erus.ru collected 2026-10-07 19:33:54 UTC 10,332 bytes, 331 lines download raw bytes

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, '&amp;').replace(/</g, '&lt;'), '</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, '&amp;').replace(/</g, '&lt;');
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.