Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name vk.com/docs gallery
- // @namespace vk.com
- // @version 0.0.7
- // @description gallery mode for VK docs
- // @author AHOHNMYC
- // @match https://vk.com/*
- // @supportURL https://pastebin.com/u/AHOHNMYC
- // @grant GM_registerMenuCommand
- // ==/UserScript==
- /* Установка: сначала устанавливаешь TamperMonkey, открываешь его настройки,
- * там создаёшь новый скрипт, куда и копируешь то, что сейчас читаешь.
- *
- * На страницe с документами скрипт делает подобие галереи, информация о файле
- * показывается по наведению курсора. В окошке информации добавляются ссылки для
- * быстрого перехода в Профиль, Альбомы и Фотки пользователя-владельца документа.
- * Также эти ссылки добавлены в виде кнопок на страницу с документом.
- *
- * На страницы с отдельными документами (даже удалёнными) скрипт добавляет несколько хоткеев:
- * Alt+P — профиль
- * Alt+A — альбомы юзера
- * Alt+F — фотографии юзера
- * Alt+Стрелка_влево, Alt+Стрелка_вправо — следущий и предыдущий документы
- * (но, конечно, то, будут ли они доступны для просмотра или нет, никому неизвестно)
- *
- * Также есть возможность узнать User ID. Это нужно для некоторых майнеров.
- * Для этого нужно открыть профиль пользователя, а затем нажать на иконку TamperMonkey и кликнуть
- * на пункт 'Показать User ID'.
- */
- const docsGalleryStyle = `
- .docs_item_actions {display: none}
- .docs_item:not(:hover) .docs_item_thumb + * + .docs_item_cont {display: none;}
- .docs_item_thumb + * + .docs_item_cont {position: absolute; margin-left: 130px; z-index:2; background: white; min-height: 50px}
- .docs_item_icon + * + .docs_item_cont {margin-left: 40px; width: 225px}
- .docs_item {padding: 1px 0 0 6px !important; float: left; border: none}
- .docs_item_thumb_wrap {margin-left: 0; width: auto; height: 100px; max-width: 130px}
- .docs_item_thumb_img, .docs_item_thumb {max-height: none; width: auto; height: auto}
- .docs_wrap {padding: 0}
- #docs_search_more {display: block !important}
- `;
- /* Если мы попали на страницу с отдельным документом */
- if ( location.pathname.match(/doc\d+_\d+/) ) {
- addStyle ('.can_zoom {max-height: 800px}');
- let linkPrefix = location.href.match(/[^_]+/)[0];
- let prevDocLink = linkPrefix +'_'+ (+location.href.match(/_(\d+)/)[1]-1);
- let nextDocLink = linkPrefix +'_'+ (+location.href.match(/_(\d+)/)[1]+1);
- addButton('Профиль', linkPrefix.replace('doc', 'id' ));
- addButton('Альбомы', linkPrefix.replace('doc', 'albums'));
- addButton( 'Фотки', linkPrefix.replace('doc', 'photos'));
- const ARROW_LEFT = 37, ARROW_RIGHT = 39, KEY_A = 97, KEY_F = 102, KEY_P = 112;
- addEventListener('keypress', e=>{
- if (!e.altKey) return;
- if (e.keyCode == ARROW_LEFT ) location.href = prevDocLink;
- if (e.keyCode == ARROW_RIGHT) location.href = nextDocLink;
- if (e.charCode == KEY_P) location.href = linkPrefix.replace('doc', 'id' );
- if (e.charCode == KEY_A) location.href = linkPrefix.replace('doc', 'albums');
- if (e.charCode == KEY_F) location.href = linkPrefix.replace('doc', 'photos');
- });
- } else {
- /* Иначе, в общем случае */
- if ( location.pathname.match('/docs') ) {
- addEventListener('mousemove', addLinksToDocs);
- addStyle(docsGalleryStyle);
- } else {
- GM_registerMenuCommand('Показать User ID', ()=>document.querySelector('.page_name').textContent = 'User ID: ' + cur.options.user_id);
- }
- }
- /* Вспомогательные функции */
- function addStyle(content) {document.head.appendChild(document.createElement('style')).textContent = content;}
- function addLinksToDocs() {
- if (document.querySelectorAll('.docs_item_cont')[document.querySelectorAll('.docs_item_cont').length-1].querySelector('.gallery_script_link')) return;
- document.querySelectorAll('.docs_item_cont').forEach(container => {
- if (container.querySelector('.gallery_script_link')) return;
- let linkPrefix = container.querySelector('.docs_item_name').href.match(/[^_]+/)[0];
- addLinkToDescription(container, 'Профиль', linkPrefix.replace('doc', 'id' ));
- addLinkToDescription(container, 'Альбомы', linkPrefix.replace('doc', 'albums'));
- addLinkToDescription(container, 'Фотки', linkPrefix.replace('doc', 'photos'));
- });
- }
- function addLinkToDescription(parent, text, link) {
- parent.appendChild(document.createTextNode(' '));
- let a = parent.appendChild(document.createElement('a'));
- a.textContent = text;
- a.href = link;
- a.className = 'gallery_script_link';
- }
- function addButton(text, href) {
- if ( !document.querySelector('.clear_fix') ) return;
- let but = document.createElement('button');
- but.className = 'flat_button fl_r';
- but.textContent = text;
- but.href = href;
- but.addEventListener('click', e=>location.href=e.target.href);
- document.querySelector('.clear_fix').appendChild(but);
- }
Advertisement
Add Comment
Please, Sign In to add comment