NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name ExpChecker
// @namespace http://tampermonkey.net/
// @version 0.5
// @description Check Experts in vk.com!
// @copyright 2017, RULON (https://openuserjs.org/users/TimofeiRylow/)
// @updateURL https://openuserjs.org/meta/TimofeiRylow/ExpChecker.meta.js
// @license MIT
// @author RULON
// @match https://vk.com/*
// @resource apiLib https://ifx.su/~va
// @grant GM_getResourceText
// ==/UserScript==
function DevUsers() {
var cache = {};
var groups = {
"182611749": {
title: "Эксперт ВКонтакте",
href: "https://vk.com/experts",
background: "url(https://sun3-13.userapi.com/c855432/v855432129/15ab82/2wyTzD5LxuA.jpg?ava=1) center/cover"
}
};
function insertStyles() {
var style = document.createElement("style");
style.innerHTML =
'.user_checker_icon {' +
' width: 12px; height: 12px; border-radius: 12px;' +
' display: inline-block; margin: 0px 0px -1px 2px;' +
' transition: transform .2s; position: relative;' +
'}' +
'.user_checker_icon:hover {' +
' transform: scale(1.2);' +
'}';
document.head.appendChild(style);
}
function checkLinks(el) {
var links = el.querySelectorAll('.im-mess-stack--lnk, .author, .friends_field a, .im-member-item--name a');
if (!links) return;
Array.from(links).map(function (link) {
if (link.checked) return;
checkUser(link);
link.checked = 1;
});
}
function drawIcons(link, info) {
if (!info.types.length || !info.user_id) return;
info.types.map(function (type) {
var icon = document.createElement("a");
icon.className = "user_checker_icon";
icon.title = groups[type].title;
icon.style.background = groups[type].background;
icon.onmouseover = function () {
if(!showTooltip) return;
showTooltip(icon, {
force: 1,
black: 1,
content: '<div class="tt_text wrapped">' + icon.title + '</div>'
});
};
link.appendChild(icon);
});
return info;
}
var executeCode = function () {
var types = [];
var groups = Args.groups.split(",");
var ui = API.utils.resolveScreenName(Args);
if (ui.type != "user") return {
types: [],
user_id: 0
};
var group = 0;
var isMember = 0;
while(groups.length){
group = groups.shift();
isMember = API.groups.isMember({
group_id: group,
user_id: ui.object_id
});
if (isMember) types.push(group);
}
// Выводим user_id и подписки
return {
types: types,
user_id: ui.object_id
};
};
executeCode = executeCode.toString().replace(/.+?\{([^]+)\}$/, "$1");
function checkUser(link) {
var screen_name = link.href.replace(/.+\//, "");
if (cache[screen_name] && cache[screen_name].then)
return cache[screen_name].then(drawIcons.bind(this, link));
if (cache[screen_name] && cache[screen_name].updated > Date.now()) return drawIcons(link, cache[screen_name]);
cache[screen_name] = API("execute", {
screen_name: screen_name,
groups: groups.ids,
code: executeCode
}).then(function (r) {
cache[screen_name] = r.response;
cache[screen_name].updated = Date.now() + 864e5;
if (r.response.types.length || !r.response.user_id)
localStorage.expUsersCache2 = JSON.stringify(cache);
drawIcons(link, r.response);
return r.response;
}).catch(function (e) {
console.error(e);
});
}
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.target.nodeType !== 1) return;
checkLinks(mutation.target);
});
});
window.addEventListener("load", function () {
insertStyles();
if (localStorage.expUserGroups)
groups = JSON.parse(localStorage.expUserGroups);
if (localStorage.expUsersCache2)
cache = JSON.parse(localStorage.expUsersCache2);
groups.ids = Object.keys(groups).join(",");
checkLinks(document.body);
observer.observe(document.body, {
childList: true,
subtree: true
});
});
}
(function injectScript() {
var script = document.createElement('script');
var code = '(' + DevUsers + ')();';
code += '(function(){' + (GM_getResourceText('apiLib')) + '})();';
script.appendChild(document.createTextNode(code));
(document.body || document.head || document.documentElement).appendChild(script);
})();