Last active
June 19, 2024 22:17
-
-
Save MahouShoujoMivutilde/e27ff32bfbccdec9a583b3d8ab831345 to your computer and use it in GitHub Desktop.
remove_vk_away.user.js - конвертирует vk away ссылки внутри видимых на экране сообщениях в прямые url.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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