Greasy Fork is available in English.

reddit context menu options

Adds links for reddit-stream, snoopsnoo, and "copy link with context" to reddit

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

ستحتاج إلى تثبيت إضافة مثل Stylus لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتتمكن من تثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

(لدي بالفعل مثبت أنماط للمستخدم، دعني أقم بتثبيته!)

// ==UserScript==
// @name        reddit context menu options
// @description Adds links for reddit-stream, snoopsnoo, and "copy link with context" to reddit
// @namespace   org.stevenhoward
// @include     https://www.reddit.com/*
// @version     1
// @grant       GM_setClipboard
// ==/UserScript==
// jshint esversion: 6

function createMenu (parent, actions) {
    function randomId() {
        return Math.random().toString(36).replace(/[^a-z]+/g, '');
    }

    let id = randomId();

    let menu = document.createElement('menu');
    menu.id = id;
    menu.type = 'context';
    
    for (let action in actions) {
        let item = document.createElement('menuItem');
        item.label = action;
        item.onclick = actions[action];

        menu.appendChild(item);
    }

    parent.parentNode.appendChild(menu);
    parent.setAttribute('contextMenu', id);
}

function attachRedditStreamCommand(thing) {
    let streamLink = thing.href.replace(/reddit/, 'reddit-stream');
    createMenu(thing, {
        'open in reddit-stream': () => window.location = streamLink,
        'open in reddit-stream (new tab)': () => window.open(streamLink)
    });
}

function attachCopyContextCommand(thing) {
    let contextLink = thing.href + '?context=3';
    createMenu(thing, { 'Copy link with context': () => GM_setClipboard(contextLink) });
}

function attachSnoopSnooCommand(thing) {
    let user = thing.href.match('[^/]+$');
    if (user) {
        user = user[0];
        let snoopUrl = `http://snoopsnoo.com/u/${user}`;
        createMenu(thing, { 'SnoopSnoo': () => window.open(snoopUrl) });
    }
}

function findAndAttach(attachFn, selector, childSelector) {
    for (let node of document.querySelectorAll(selector)) {
        attachFn(node);
    }
}

findAndAttach(attachRedditStreamCommand, '.link a.title');
findAndAttach(attachCopyContextCommand, '.comment .bylink');
findAndAttach(attachSnoopSnooCommand, 'a.author, a[href^="/u/"]');