Greasy Fork is available in English.

Библиотека функций

Несколько полезных функций

Этот скрипт недоступен для установки пользователем. Он является библиотекой, которая подключается к другим скриптам мета-ключом // @require https://greasyfork.org/scripts/380575-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9/code/%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9.js?version=705683

// ==UserScript==
// @name         Библиотека функций
// @description  Несколько полезных функций
// @namespace    library-js
// @version      1.16
// @grant GM_xmlhttpRequest
// ==/UserScript==

function $(selector){
	return document.querySelector(selector);
}
function $$(selector){
	return document.querySelectorAll(selector);
}
function addStyle(style){
	$("head").innerHTML += "<style>" + style + "</style>";
}
function repeat(str,num){
	for(var a="",b=0;b<num;a+=str,b++);
	return a;
}
function random(min, max){
	if(isInteger(min) && isInteger(max)){
		return Math.floor(Math.random() * (max - min + 1)) + min;
	}
	else{
		var minl = min.toString().length - (Math.floor(min)).toString().length - 1;
		var maxl = max.toString().length - (Math.floor(max)).toString().length - 1;
		if(minl > maxl){
			var minm = min * ("1" + repeat("0", minl));
			var maxm = max * ("1" + repeat("0", minl));
			return (Math.floor(Math.random() * (maxm - minm + 1)) + minm) / ("1" + repeat("0", minl));
		}
		else if(minl < maxl){
			var minm = min * ("1" + repeat("0", maxl));
			var maxm = max * ("1" + repeat("0", maxl));
			return (Math.floor(Math.random() * (maxm - minm + 1)) + minm) / ("1" + repeat("0", maxl));
		}
		else{
			var minm = min * ("1" + repeat("0", minl));
			var maxm = max * ("1" + repeat("0", minl));
			return (Math.floor(Math.random() * (maxm - minm + 1)) + minm) / ("1" + repeat("0", minl));
		}
	}
}
function isInteger(num){
	return (num ^ 0) === num;
}
function isEven(num) {
	return !(num % 2);
}
function isPrime(num) {
	for(var i = 2; i < num; i++){
		if (num % i == 0) return false;
	}
	return true;
}
function base64encode(str) {
    var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    var b64encoded = '';
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    for (var i=0; i<str.length;) {
        chr1 = str.charCodeAt(i++);
        chr2 = str.charCodeAt(i++);
        chr3 = str.charCodeAt(i++);
        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = isNaN(chr2) ? 64:(((chr2 & 15) << 2) | (chr3 >> 6));
        enc4 = isNaN(chr3) ? 64:(chr3 & 63);
        b64encoded += b64chars.charAt(enc1) + b64chars.charAt(enc2) + b64chars.charAt(enc3) + b64chars.charAt(enc4);
    }
    return b64encoded;
}
function base64decode(str) {
    var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    var b64decoded = '';
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    str = str.replace(/[^a-z0-9\+\/\=]/gi, '');
    for (var i=0;i<str.length;){
        enc1 = b64chars.indexOf(str.charAt(i++));
        enc2 = b64chars.indexOf(str.charAt(i++));
        enc3 = b64chars.indexOf(str.charAt(i++));
        enc4 = b64chars.indexOf(str.charAt(i++));
        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;
        b64decoded = b64decoded + String.fromCharCode(chr1);
        if (enc3 < 64) {
            b64decoded += String.fromCharCode(chr2);
        }
        if (enc4 < 64) {
            b64decoded += String.fromCharCode(chr3);
        }
    }
    return b64decoded;
}
function noReload(run){
	var pages = {};
	run(document);
	var links = $$("a[href]"), urls = location.href;

	for (var i of links) {
		if(i.getAttribute("href").substr(0,4) == "http" && i.getAttribute("href").substr(0,(location.protocol + location.hostname).length + 2) != location.protocol + "//" + location.hostname){
			i.target = "_blank";
		}
		else{
			i.onclick = function() {
				return push(this);
			};
		}
	}
	function push(lin) {
		history.pushState(null, null, lin);
		if(pages[lin]){
			$("html").innerHTML = pages[lin].querySelector("html").innerHTML;
			window.scrollTo(0,0);
			inks();
		}
		else{
			load(location.href,true);
		}
		return false;
	}

	function load(url,tr) {
		urls = location.href;
		GM_xmlhttpRequest({
			method:"GET",
			url:url,
			onload:function(response) {
				var html = new DOMParser().parseFromString(response.responseText, "text/html");
				run(html);
				pages[url] = html;
				if(tr){
					$("html").innerHTML = html.querySelector("html").innerHTML;
					window.scrollTo(0,0);
					inks();
				}
				return html;
			}
		});
	}

	function inks(){
		setTimeout(function() {
			links = $$("a[href]");
			for(var i of links){
				if(i.getAttribute("href").substr(0,4) == "http" && i.getAttribute("href").substr(0,(location.protocol + location.hostname).length + 2) != location.protocol + "//" + location.hostname){
					i.target = "_blank";
				}
				else{
					i.onclick = function() {
						return push(this);
					};
				}
			}
		}, 0);
	}

	window.onpopstate = function(){
		if(pages[location.href]){
			$("html").innerHTML = pages[location.href].querySelector("html").innerHTML;
			window.scrollTo(0,0);
			inks();
		}
		else{
			load(location.href,true);
		}
	}
}