Greasy Fork is available in English.

LZT_Share

Добавляет кнопку "Поделиться"

// ==UserScript==
// @name         LZT_Share
// @namespace    MeloniuM/LZT
// @version      1.0
// @description  Добавляет кнопку "Поделиться"
// @author       MeloniuM
// @match        https://lolz.live/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    const selector = '.threadCounters, .discussionListItem, .controls, .messageMeta .publicControls, .commentControls .publicControls, .threadLastPost';
    $("<style/>").text('\
    .shareButton .icon:hover {\
        background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9InJnYigwLCAxODYsIDEyMCkiPjwhLS0hRm9udCBBd2Vzb21lIEZyZWUgNi42LjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20gTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSBDb3B5cmlnaHQgMjAyNCBGb250aWNvbnMsIEluYy4tLT48cGF0aCBkPSJNMzA3IDM0LjhjLTExLjUgNS4xLTE5IDE2LjYtMTkgMjkuMmwwIDY0LTExMiAwQzc4LjggMTI4IDAgMjA2LjggMCAzMDRDMCA0MTcuMyA4MS41IDQ2Ny45IDEwMC4yIDQ3OC4xYzIuNSAxLjQgNS4zIDEuOSA4LjEgMS45YzEwLjkgMCAxOS43LTguOSAxOS43LTE5LjdjMC03LjUtNC4zLTE0LjQtOS44LTE5LjVDMTA4LjggNDMxLjkgOTYgNDE0LjQgOTYgMzg0YzAtNTMgNDMtOTYgOTYtOTZsOTYgMCAwIDY0YzAgMTIuNiA3LjQgMjQuMSAxOSAyOS4yczI1IDMgMzQuNC01LjRsMTYwLTE0NGM2LjctNi4xIDEwLjYtMTQuNyAxMC42LTIzLjhzLTMuOC0xNy43LTEwLjYtMjMuOGwtMTYwLTE0NGMtOS40LTguNS0yMi45LTEwLjYtMzQuNC01LjR6Ii8+PC9zdmc+")\
    }\
    .shareButton .icon {\
        width: 24px;\
        height: 24px;\
        background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9InJnYigxNDAsIDE0MCwgMTQwKSI+PCEtLSFGb250IEF3ZXNvbWUgRnJlZSA2LjYuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIENvcHlyaWdodCAyMDI0IEZvbnRpY29ucywgSW5jLi0tPjxwYXRoIGQ9Ik0zMDcgMzQuOGMtMTEuNSA1LjEtMTkgMTYuNi0xOSAyOS4ybDAgNjQtMTEyIDBDNzguOCAxMjggMCAyMDYuOCAwIDMwNEMwIDQxNy4zIDgxLjUgNDY3LjkgMTAwLjIgNDc4LjFjMi41IDEuNCA1LjMgMS45IDguMSAxLjljMTAuOSAwIDE5LjctOC45IDE5LjctMTkuN2MwLTcuNS00LjMtMTQuNC05LjgtMTkuNUMxMDguOCA0MzEuOSA5NiA0MTQuNCA5NiAzODRjMC01MyA0My05NiA5Ni05Nmw5NiAwIDAgNjRjMCAxMi42IDcuNCAyNC4xIDE5IDI5LjJzMjUgMyAzNC40LTUuNGwxNjAtMTQ0YzYuNy02LjEgMTAuNi0xNC43IDEwLjYtMjMuOHMtMy44LTE3LjctMTAuNi0yMy44bC0xNjAtMTQ0Yy05LjQtOC41LTIyLjktMTAuNi0zNC40LTUuNHoiLz48L3N2Zz4=")\
    }\
    .discussionListMainPage .threadCounters .shareButton.counter {\
        padding: 0 10px;\
    }\
    .threadLastPost .shareButton{\
        display: flex;\
        align-items: center;\
        margin-right: 0;\
        margin-left: auto;\
        z-index: 10;\
    }\
    .controls .shareButton .icon{\
        padding: 0px 5px;\
        background-image: none;\
        color: rgb(82, 80, 80);\
    }\
    .controls .shareButton .icon:hover{\
        color: rgb(148, 148, 148);\
    }\
    .controls .shareButton .icon:before{\
        content: "\\f064";\
        font-size: 16px;\
    }\
    .conversationItem {\
        padding: 8px 15px;\
        overflow: hidden;\
        cursor: pointer;\
    }\
    .share-modal {\
        background-color: rgb(39, 39, 39);\
        padding: 10px;\
        border-radius: 10px;\
        margin: 0;\
    }\
    .share-modal .conversationItem .title {\
        display: flex;\
        justify-content: space-between;\
    }\
    ').appendTo("head");
    XenForo.scriptLoader.loadCssAsync(['conversation'], "css.php?css=__sentinel__&style=30&dir=LTR")

    XenForo.addShareButton = function($element) {
    if ($element.find('.shareButton').length === 0) {

        const $button = $(`<a class="shareButton item control counter Tooltip" title="Поделиться" data-placement="bottom"><span class="icon"></span></a>`);
        let href = ''
        if ($element.is('.controls')) {
            $element = $element.closest('.discussionListItem').first();//костыль для разделов кроме кроме mainpage
        }
        if ($element.is('.threadCounters')) {//в других разделах
            $element = $element.siblings('.controls_prefixes').find('.controls').first();
            href = $element.closest('.discussionListItem').find('.threadHeaderTitle a').attr('href');
        } else if ($element.is('.discussionListItem:not(:has(.threadCounters))')) {//в других разделах
            $element = $element.find('.controls').first();
            href = $element.siblings('.main').attr("href")
        } else if ($element.is('.messageMeta .publicControls')) {//пост в теме
            href = $element.siblings('.privateControls').find('.datePermalink').data('href').replace('permalink', '');
            //кажетя проще из id ссылку делать $element.closest('.message').attr('id').replace('-', 's/')
        } else if ($element.is('.commentControls .publicControls')) {//коммент в теме
            href = $element.siblings('.datePermalink').attr("href");
        } else if ($element.is('.threadLastPost')) {//коммент на главной странице
            href = $element.find('.threadLastPost--date').attr("href");
        }
        $button.attr("data-href", href);

        // Можно добавить обработчик клика для кнопки, если это нужно
        $button.on('click', function(e) {
            e.preventDefault();
            // Логика, которая должна выполняться при клике на кнопку
            XenForo.ajax('/conversations/', {}, function(ajaxData) {
                let $ShareList = $(ajaxData.templateHtml);
                let $modal = $(`<div class=\"sectionMain\"><h2 class=\"heading h1\">Поделиться</h2><ul class="ShareList"></ul></div>`);
                $modal.find('.ShareList').append($ShareList);
                let conversationItem = $modal.find('.conversationItem')
                conversationItem.on('click', (e) => {
                    let $target = $(e.currentTarget);
                    XenForo.ajax(`${$target.data('href')}/insert-reply`, {message_html: `[unfurl]${location.origin}/${$button.data('href')}[/unfurl]`});
                    $button.data("overlay").close();
                })
                new XenForo.ExtLoader(ajaxData, function() {
                    if ($button.data("overlay")) {
                        $button.data("overlay").getOverlay().children('.sectionMain').replaceWith($modal)
                        $button.data("overlay").load();
                        return;
                    }
                    XenForo.createOverlay(null, $modal, {
                        className: "share-modal",
                        trigger: $button,
                        severalModals: true
                    });

                    $button.data("overlay").load();
                });
            });
        });
        // Добавляем кнопку в нужное место внутри элемента
        $element.append($button).xfActivate();
    }
};

    XenForo.register(selector, 'XenForo.addShareButton');

    // Чё оно сразу не активируется?
    $(selector).each(function(index) {
        XenForo.create('XenForo.addShareButton', $(this));
    });

})();