Nicopedia Resanchor Popup

ニコニコ大百科掲示板のレスアンカー(>>3)をポップアップ表示する

当前为 2014-10-21 提交的版本,查看 最新版本

// ==UserScript==
// @name      Nicopedia Resanchor Popup
// @namespace http://lambda.que.jp/
// @version   0.1.20141022
// @description  ニコニコ大百科掲示板のレスアンカー(>>3)をポップアップ表示する
// @grant   GM_addStyle
// @grant   GM_getResourceURL
// @grant   GM_getResourceText
// @match   http://dic.nicovideo.jp/*
// @require http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js
// @require http://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js
// @resource jquery-ui.css http://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/css/jquery-ui.css
// @resource images/ui-bg_flat_75_ffffff_40x100.png http://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/css/images/ui-bg_flat_75_ffffff_40x100.png
// @author kosh (mono)
// @license Public domain
// ==/UserScript==

var css = GM_getResourceText("jquery-ui.css")
.replace("images/ui-bg_flat_75_ffffff_40x100.png", GM_getResourceURL("images/ui-bg_flat_75_ffffff_40x100.png"));
GM_addStyle([
    css,
    ".ui-tooltip {",
    "  min-width: 600px;",
    "  font-size: small;",
    "  line-height: 1.3em;",
    "  text-align: left;",
    "}"
].join("\n"));

function getAnchorContent(id, context) {
    var $anchor, doc = document;
    // NOTE: jQueryによるHTML解析は<script>が実行されるらしい
    // var $anchor = $(context || document).find("a[name=" + id + "]"); // require $.parseHTML ?
    
    if (typeof context === "string") {
        var parser = new DOMParser();
        doc = parser.parseFromString(context, "text/html");
    }
    $anchor = $(doc).find("[name=" + id + "]");
    if ($anchor.length === 0) return null;
    
    var $parent = $anchor.parent();
    return "<dl>" + /*dt*/ $parent[0].outerHTML + /*dd*/ $parent.next()[0].outerHTML + "</dl>";
}

var selector = "#bbs a.dic";

// 最近書かれた掲示板のレス
if (location.pathname === "/m/n/res/1-") {
    selector = "a.dic";
}

$(selector).tooltip({
    items: "[href]",
    content: "読み込み中",
    open: function(evt, ui) {
        var $elem = $(this),
            url = this.href,
            anchor_id = this.hash.slice(1);
        // 同じページ内の安価ならajax使う必要はないんだけれど、分岐なしでまとめた方が短く書ける
        $.get(url, null, function(data) {
            var content = getAnchorContent(anchor_id, data) || "見つかりません";
            $elem.tooltip("option", "content", content);
        });
    },       
    position: {
        my: "right bottom",
        at: "right top-20",
    }
});

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址