Skip to content

Instantly share code, notes, and snippets.

@MahouShoujoMivutilde
Last active June 19, 2024 22:17
Show Gist options
  • Save MahouShoujoMivutilde/e27ff32bfbccdec9a583b3d8ab831345 to your computer and use it in GitHub Desktop.
Save MahouShoujoMivutilde/e27ff32bfbccdec9a583b3d8ab831345 to your computer and use it in GitHub Desktop.
remove_vk_away.user.js - конвертирует vk away ссылки внутри видимых на экране сообщениях в прямые url.
// ==UserScript==
// @name Remove vk away
// @description Конвертирует vk away ссылки внутри видимых на экране сообщениях в прямые url.
// @downloadURL https://gist.github.com/MahouShoujoMivutilde/e27ff32bfbccdec9a583b3d8ab831345/raw/remove_vk_away.user.js
// @updateURL https://gist.github.com/MahouShoujoMivutilde/e27ff32bfbccdec9a583b3d8ab831345/raw/remove_vk_away.user.js
// @namespace FuckVkAway
// @version 0.3.0
// @author MahouShoujoMivutilde
// @match https://vk.com/*
// @run-at document-end
// @grant none
// ==/UserScript==
(function() {
// https://jsfiddle.net/fkling/zBKCC
function hasClass(element, cls) {
return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
}
// привет, jQuery
function isVisible(el) {
return el.offsetWidth > 0 && el.offsetHeight > 0;
}
function FixLinks(el) {
var skip_check = 'already_direct_link';
var start = performance.now();
var links = el.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
// только реальные ссылки на внешние ресурсы, а не навигация
if (links[i].target == '_blank' && !hasClass(links[i], skip_check)) {
// 3 строки ниже вдохновлены FlyVK
var m = links[i].href.match(/to=(.+)(&|$)/i);
if (m) {
links[i].href = decodeURIComponent(m[1]).replace('&cc_key=', '');
links[i].classList.add(skip_check);
console.log('vk away removed:', performance.now() - start, 'ms');
}
}
}
}
setInterval(function() {
var messages = Array.from(
// 0-1 уровень вложения в чате
document.getElementsByClassName('im-page--chat-body')
).concat(Array.from(
// в виде модального окна при множественном цитировании
document.getElementsByClassName('im_single_log_wrap')
));
messages.filter(
el => isVisible(el)
).forEach(
el => FixLinks(el)
);
}, 500);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment