Stack Apps is a question and answer site for apps, scripts, and development with the Stack Exchange API. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

A screenshot

This script adds an edit link to the question summary, saving frequent editors the trouble of "entering" the question first.

Adjust includes as needed:

// ==UserScript==
// @name           Direct Question Edit Links
// @namespace      stackoverflow
// @include        *stackoverflow.com*
// ==/UserScript==

(function ()
{
    var cancelWaiting = false;
    window.setTimeout(function () { cancelWaiting = true; }, 5000);
    waitForQuestions();

    function queryQuestions() { return document.querySelectorAll("div.question-summary"); }

    function waitForQuestions()
    {
        var questions = queryQuestions();
        if (questions.length == 0)
        {
            if (!cancelWaiting) window.setTimeout(waitForQuestions, 100);
        }
        else
        {
            addLinks(questions);
            var container = document.querySelector("#questions");
            if (container != null)
            {
                var obs = new MutationObserver(function() {
                    addLinks(queryQuestions());
                });

                obs.observe(container, { childList: true, subtree: true });
            }
        }
    }

    function addLinks(questions)
    {
        Array.prototype.forEach.call(questions, function (e)
        {
            if (e.getAttribute("data-edit-linked") == "true")
                return;

            var header = e.querySelector("div.summary h3");
            var id = header.querySelector("a")
                .getAttribute("href")
                .match(/[0-9]+(?=\/)/)[0];
            var link = document.createElement("a");
            link.setAttribute("href", "/posts/" + id + "/edit");
            link.textContent = "Edit";
            link.style.marginLeft = "5px";
            link.style.color = "grey";
            link.style.fontSize = "small";
            link.hidden = true;

            e.addEventListener("mouseenter", function ()
            {
                link.hidden = false;
            });
            e.addEventListener("mouseleave", function ()
            {
                link.hidden = true;
            });

            header.appendChild(link);

            e.setAttribute("data-edit-linked", "true");
        });
    }
})();

Changes:

  • There were some issues with including jQuery directly, removed static reference.
  • Removed jCancer
  • Observe changes to support loading of new questions
share|improve this question

You must log in to answer this question.

Browse other questions tagged .