NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name iTcan Webkit
// @namespace http://tampermonkey.net/
// @version 2.0
// @description Custom web browser extensions for itcan company
// @author randajan
// @match *://*/*
// @icon https://itcan.cz/static/img/favicon/apple-icon-57x57.png
// @grant none
// @copyright 2021, randajan (https://openuserjs.org/users/randajan)
// @updateURL https://openuserjs.org/meta/randajan/iTcan_Webkit.meta.js
// @downloadURL https://openuserjs.org/install/randajan/iTcan_Webkit.user.js
// @license MIT
// ==/UserScript==
(function() {
var W = window, D = document;
var searchSelection = {
"Mouse1 + KeyP":function(sl) { W.open("https://www.cpubenchmark.net/cpu.php?cpu="+sl); },
"Mouse1 + KeyO":function(sl) { W.open("https://www.google.com/search?q=passmark+"+sl); },
"Mouse1 + KeyU":function(sl) {
if (!window.scrapeByItcan) { return; }
var text = sl.toString();
window.scrapeByItcan("passmark/cpu", {cpuname:text})
.then(function(r) {return r.json();})
.then(function(r) {
if (r.error) { window.alert(r.error.msg); }
var score = r.result.score;
var scoreText = "<b>"+score.total+"</b>/"+score.single;
var href = r.url;
var title = r.result.name + "\n" + r.result.socket;
var style = "border:1px solid black; background-color:#FFFF00; color:black; margin-left:3px; border-radius:3px; padding: 0 3px;";
var el = "<a style='"+style+"' href='"+href+"' target='_blank' title='"+title+"'>"+scoreText+"</a>";
document.body.innerHTML = document.body.innerHTML.replaceAll(text, text+el);
});
}
};
var ControlDetector = new (function() {
var timer = {};
var reg = {};
var key;
var debug = false;
function init() { key = {press:{}, combo:[]}; }
function serialize(a) { return a.join(" + "); }
function press(k) {
if (key.press[k] === true) { return false; }
key.press[k] = true;
key.combo.push(k);
var combo = serialize(key.combo);
if (debug) { console.log("press", key.combo); }
var f = reg[combo];
if (f) { f(); }
return true;
}
function release(k) {
if (key.press[k] !== true) { return false; }
key.combo.splice(key.combo.indexOf(k), 1);
delete key.press[k];
if (debug) { console.log("release", key.combo); }
return true;
}
function pressing(k) {
var change = press(k);
clearTimeout(timer[k]);
timer[k] = setTimeout(function() { release(k); }, change ? 5000 : 100);
}
D.addEventListener("keydown", function(ev) {pressing(ev.code);});
D.addEventListener("keyup", function(ev) {release(ev.code);});
D.addEventListener("mousedown", function(ev) {press("Mouse"+ev.which);});
D.addEventListener("mouseup", function(ev) {release("Mouse"+ev.which);});
W.addEventListener('blur', init);
this.add = function(keys, callback) {
var combo = keys instanceof Array ? serialize(keys) : String(keys);
if (reg[combo]) { throw "KeyDetector.add() detect duplicate keys"; }
reg[combo] = callback;
}
init();
this.add(['ControlLeft', 'AltRight', 'KeyC', 'KeyD'], function() { debug = !debug; console.log("ControlDetector debug", debug ? "start" : "end"); });
})();
function Selection() {
var sys = window.getSelection ? "win" : (document.selection && document.selection.type != "Control") ? "doc" : null;
var range = sys === "win" ? window.getSelection().getRangeAt(0) : sys === "doc" ? document.selection.createRange() : null;
this.appendHtml = function(html, isBefore) {
if (!sys) { return; }
range.collapse(isBefore);
if (sys === "win") {
var el = document.createElement("div");
el.innerHTML = html;
var node, frag = document.createDocumentFragment();
while ( node = el.firstChild ) { frag.appendChild(node); }
range.insertNode(frag);
} else {
range.pasteHTML(html);
}
}
this.blur = function() {
if (sys === "win") {window.getSelection().removeAllRanges();}
else if (sys === "doc") {document.selection.empty();}
}
this.toString = function() {
return (sys === "win" ? range.toString() : sys === "doc" ? String(range.text) : "").trim();
}
this.isBlank = function() { return !sys || !this.toString(); }
}
function searchSelectionFactory(combo, callback) {
return function() { var sl = new Selection(); if (!sl.isBlank()) {callback(sl);} }
}
for (var combo in searchSelection) {
ControlDetector.add(combo, searchSelectionFactory(combo, searchSelection[combo]));
}
})();