$('table#price-table > tbody > tr').sort(function(a, b) {
    var one = Number($(a).children().eq(6).text().replace(/[^0-9]/g, ''));
    var two = Number($(b).children().eq(6).text().replace(/[^0-9]/g, ''));
    return two - one;
}).each(function(n, tr) {
    $('table#price-table > tbody').append(tr);
});var original = {
	open: XMLHttpRequest.prototype.open,
	send: XMLHttpRequest.prototype.send
};
XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
	console.log(method, url, async, user, password);
	return original.open.call(this, method, url, async, user, password);
};
XMLHttpRequest.prototype.send = function (data) {
	console.log(data);
	return original.send.call(this, data);
};d = $.Deferred(function(def) {
    setTimeout(function() {
        console.log(1);
        def.resolve();
    }, 1000);
});
d.then(function() {
    var def = $.Deferred();
    setTimeout(function() {
        console.log(2);
        def.resolve();
    }, 1000);
    return def;
})
.then(function() {
    var def = $.Deferred();
    setTimeout(function() {
        console.log(3);
        def.resolve();
    }, 1000);
    return def;
})
.then(function() {
    var def = $.Deferred();
    setTimeout(function() {
        console.log(4);
        def.resolve();
    }, 1000);
    return def;
})
.then(function() {
    var def = $.Deferred();
    setTimeout(function() {
        console.log(5);
        def.resolve();
    }, 1000);
    return def;
});$(function() {
	
	// Логирование всех reject-событий:
	
	var original_deferred = $.Deferred;
	$.Deferred = function() {
		var deferred = original_deferred.apply(this, arguments);
		var original_reject = deferred.reject;
		deferred.reject = function() {
			try { throw Error(); } catch(err) {
				var mod_args = $(arguments).toArray();
				var str_num = err.stack.split(':').reverse()[1];
				mod_args.unshift(str_num + ' строка:');
				console.error.apply(this, mod_args);
				original_reject.apply(this, arguments);
			}
		}
		return deferred;
	}
	
	init(); // Проверка
	
});
function init() {
	
	var deferred = $.Deferred();
	
	setTimeout(function() {
		deferred.reject('Тестовая ошибка!');
	}, 1000);
	
	return deferred;
	
}var input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('webkitdirectory', 'true');
input.addEventListener('change', function() {
    
    console.log('Выбраны файлы', input.files);
    console.log('Пути файлов относительно выбранной папки:');
    for (var n = 0; n < input.files.length; n++) {
        console.log(input.files[n].webkitRelativePath);
    }
    
});
input.click();data:image/png;base64,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async function pageUpdate(event) {
	
	// Если функция вызвана без аргументов:
	
	if (typeof event == 'undefined') {
		
		// Устанавливаем обработчики
		// на все ссылки на странице:
		
		$('body a[href]').click(pageUpdate);
		
	}
	
	// Если функция вызвана
	// в результате клика
	// по ссылке:
	
	else {
		
		// Берём адрес с нажатой ссылки
		// и записываем в переменную link:
		
		var link = event.target.href;
		
		// Если ссылка ведет на наш сайт:
		
		if (new URL(link)['host'] == location.host) {
			
			// Предотвращаем переход:
			
			event.preventDefault();
			
			// Блокируем страницу, чтобы
			// больше нельзя было кликать:
			$('body').css('pointer-events', 'none');
			
			// Активируем анимацию исчезновения (полупрозрачности):
			
			var hide = $('body').animate({ opacity: 0.2 }, 500).promise();
			
			var ajax = $.ajax(link); // Запускаем загрузку новой страницы
			
			await hide; // Ждем окончания анимации исчезновения
			
			// Вставляем данные на страницу беря их с ново-скачанной страницы:
			
			var doc = new DOMParser().parseFromString((await ajax), 'text/html');
			var html = $('body', doc).html();
			$('body').html(html);
			
			// Скролим в самый вверх:
			$('body, html').animate({scrollTop: 0}, 0);
			
			// Меняем адрес в адресной строке:
			history.pushState(null, null, link);
			
			// Заново ставим
			// обработчики:
			
			pageUpdate();
			
			// Активируем анимацию
			// постепенного появления:
			
			await $('body').animate({ opacity: 1 }, 500).promise();
			
			// Снимаем блокировку с документа:
			
			$('body').css('pointer-events', '');
			
		}
		
	}
	
}
pageUpdate();var request = new XMLHttpRequest();
request.open('GET', '/', false);
request.send(null);
if (request.status === 200) {
	var type = request.getResponseHeader('Content-Type').split(';')[0].toLowerCase();
	var u8a = new TextEncoder().encode(request.responseText);
	var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
	var bytes = u8a, i, len = bytes.length, base64 = '';
	for (i = 0; i < len; i += 3) {
		base64 += chars[bytes[i] >> 2];
		base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
		base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
		base64 += chars[bytes[i + 2] & 63];
	}
	if (len % 3 === 2) {
		base64 = base64.substring(0, base64.length - 1) + '=';
	}
	else if (len % 3 === 1) {
		base64 = base64.substring(0, base64.length - 2) + '==';
	}
	var data_url = 'data:' + type + ';base64,' + base64;
	console.log(data_url);
}
else {
	
	console.log('Ошибка', request);
	
}Intersection Observer API позволяет указать функцию, которая будет вызвана всякий раз для элемента (target) при пересечении его с областью видимости документа (по умолчанию) или заданным элементом (root).
input = document.querySelector('input');
input.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true }));
input.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true }));
input.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
input.dispatchEvent(new InputEvent('input', { bubbles: true }));
input.dispatchEvent(new InputEvent('change', { bubbles: true }));