Add Nicopedia Menu

ニコニコ大百科の記事右側にメニューを追加します

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name            Add Nicopedia Menu
// @namespace       Add Nicopedia Menu
// @description     ニコニコ大百科の記事右側にメニューを追加します
// @author          sotoba
// @match           https://dic.nicovideo.jp/*
// @version         1.0.1-20181103
// @homepageURL     https://github.com/SotobatoNihu/AddNicopediaMenu
// @license         MIT License
// @grant           GM.getResourceUrl
// @resource        nicoIcon   https://dic.nicovideo.jp/oekaki/22690.png
// @resource        googleIcon   https://dic.nicovideo.jp/oekaki/15633.png
// @resource        wikiIcon   https://dic.nicovideo.jp/oekaki/17668.png
// @resource        yahooIcon   https://dic.nicovideo.jp/oekaki/17680.png
// @resource        seigaIcon   https://dic.nicovideo.jp/oekaki/122809.png
// @resource        ch2Icon   https://dic.nicovideo.jp/oekaki/167179.png
// @resource        pixivIcon   https://dic.nicovideo.jp/oekaki/109891.png
// @resource        ichibaIcon   https://dic.nicovideo.jp/oekaki/30296.png
// @resource        communityIcon   https://dic.nicovideo.jp/oekaki/9203.png
// @resource        commonsIcon   https://dic.nicovideo.jp/oekaki/16255.png
// ==/UserScript==

const MENUID = 'nicopedia-menu'

const drowMenu = async (word, width) => {

    const menuElem = document.getElementById(MENUID)

    //単語の空白をアンダーバーに
    const modifyWord = word.replace(' ', '_')

    //アイコンの描画に Greasemonkeyのキャッシュ機能を使用
    Promise.all([
        await GM.getResourceUrl("nicoIcon"),
        await GM.getResourceUrl("googleIcon"),
        await GM.getResourceUrl("wikiIcon"),
        await GM.getResourceUrl("yahooIcon"),
        await GM.getResourceUrl("seigaIcon"),
        await GM.getResourceUrl("ch2Icon"),
        await GM.getResourceUrl("pixivIcon"),
        await GM.getResourceUrl("ichibaIcon"),
        await GM.getResourceUrl("communityIcon"),
        await GM.getResourceUrl("commonsIcon")
    ]).then(Icons => {
        const nicoIcon = Icons[0]
        const googleIcon = Icons[1]
        const wikiIcon = Icons[2]
        const yahooIcon = Icons[3]
        const seigaIcon = Icons[4]
        const ch2Icon = Icons[5]
        const pixivIcon = Icons[6]
        const ichibaIcon = Icons[7]
        const communityIcon = Icons[8]
        const commonsIcon = Icons[9]

        // HTMLをベタ書き(アイコンデータは埋め込み)
        menuElem.innerHTML = `
<img src="/img/l_box_t.gif" class="border" style="width: ${width}px">
<ul>
    <li>
        <a href="https://www.nicovideo.jp/search/${modifyWord}">「${modifyWord}」でキーワード検索 <img title="キーワード検索" style="vertical-align: middle;" alt="niconico" src="${nicoIcon}" width="15" height="15"></a></br>
        <a href="https://www.nicovideo.jp/tag/${modifyWord}">「${modifyWord}」でタグ検索 <img title="タグ検索" style="vertical-align: middle;" alt="niconico" src="${nicoIcon}" width="15" height="15"></a>
    <li>外部サイトで検索</br>
        <a href="http://www.google.co.jp/search?hl=ja&q=${word}"><img title="Google" style="vertical-align: middle;" alt="google" src="${googleIcon}" width="15" height="15"></a> 
        <a href="http://ja.wikipedia.org/wiki/${word}"><img title="Wikipedia" style="vertical-align: middle;" alt="Wikipedia" src="${wikiIcon}"width="15" height="15"></a>  
        <a href="http://search.yahoo.co.jp/search?ei=UTF-8&p=${word}"><img title="Yahoo! Japan" style="vertical-align: middle;" alt="Yahoo!Japan"src="${yahooIcon}"width="17" height="15"></a>  
        <a href="http://find.2ch.net/?BBS=2ch&IE=UTF-8&TYPE=TITLE&STR=${word}"> <img title="2ch" style="vertical-align: middle;" alt="2ch"src="${ch2Icon}"width="15" height="15"></a>   /
        <a href="http://seiga.nicovideo.jp/search/illust/tag/${word}"><img title="静画" style="vertical-align: middle;" alt="ニコニコ静画" src="${seigaIcon}"width="15" height="15"></a> 
        <a href="http://www.pixiv.net/search.php?s_mode=s_tag&word=${word}"><img title="pixiv" style="vertical-align: middle;" alt="Pixiv" src="${pixivIcon}" width="15" height="15"></a> 
        <a href="http://search.pipa.jp/?KWD=${word}">2じげん</a> /
        </br>
        <a href="http://ichiba.nicovideo.jp/search/az/${word}"><img title="ニコニコ市場" style="vertical-align: middle;" alt="ニコニコ市場" src="${ichibaIcon}" width="15" height="15"></a> 
        <a href="http://com.nicovideo.jp/search/${word}?mode=s"><img title="ニコニココミュニティ" style="vertical-align: middle;" alt="ニコニココミュニティ" src="${communityIcon}" width="15" height="15"></a> 
        <a href="http://www.niconicommons.jp/search/${word}"><img title="ニコニ・コモンズ" style="vertical-align: middle;" alt="ニコニ・コモンズ" src="${commonsIcon}" width="15" height="15"></a>  /
    </li>
    <li>50音全記事 
         <a href="https://dic.nicovideo.jp/m/a/a"> 単語記事 </a> / <a href="https://dic.nicovideo.jp/m/a/l"> 生放送記事 </a> 
    </li>
    <li>最近更新された 
        <a href="https://dic.nicovideo.jp/m/u/a/1-"> 単語記事 </a> / <a href="https://dic.nicovideo.jp/m/u/v/1-"> 動画記事 </a> /  <a href="https://dic.nicovideo.jp/m/u/i/1-"> 商品記事 </a>  /  
        </br>
        <a href="https://dic.nicovideo.jp/m/u/u/1-"> ユーザ記事 </a> / <a href="https://dic.nicovideo.jp/m/u/c/1-"> コミュ記事 </a> /  <a href="https://dic.nicovideo.jp/m/u/l/1-"> 生放送記事 </a>  / 
        </br> 
        <a href="https://dic.nicovideo.jp/m/n/res/1-"> 書き込み </a> / <a href="https://dic.nicovideo.jp/m/n/oekaki/1-"> お絵カキコ </a> /  <a href="https://dic.nicovideo.jp/m/n/mml/1-"> ピコカキコ </a>  /  
    </li>
    <li>
         <a id="backgroud_default" style="display: none;" href="" onClick="maincss('/nd2.css');return false;">背景をデフォルトに戻す</a>
         <a id="backgroud_mokume" style="" href="" onClick="maincss('/ndx.css');return false;">背景を木目にする</a>
     </li>
     <li>
         <a id="use_flashpico" style="display: none;" href="" onClick="pikoplayer('flash');return false;">古いピコカキコ(flash版)を使う</a>
         <a id="use_htmlpico" style="" href="" onClick="pikoplayer('html5');return false;">新しいピコカキコ(html5版)を使う</a>
     </li>
    <li>
        <a href="https://dic.nicovideo.jp/">トップ</a> / <a href="https://dic.nicovideo.jp/p/my/">マイページ</a> / <a href="https://dic.nicovideo.jp/p/logout/">ログアウト</a> 
    </li>
</ul>
 <img src="/img/r_box_b2.gif" class="menu-border">
    `

        /**
         * pikoplayerIsは大百科で通常読み込まれる関数
         * pikoplayerIsを元に「ピコカキコ××を使う」の最初の表示を切り替える
         */
        if (pikoplayerIs('flash')) {
            document.getElementById('use_flashpico').style.display = 'none'
            document.getElementById('use_htmlpico').style.display = 'block'
        } else {
            document.getElementById('use_flashpico').style.display = 'block'
            document.getElementById('use_htmlpico').style.display = 'none'
        }

        /**
         * 現在のレイアウトを元に「背景を××にする」の最初の表示を切り替える
         */
        if (document.getElementById('header').style.backgroundRepeat === null) {
            document.getElementById('backgroud_mokume').style.display = 'none'
            document.getElementById('backgroud_default').style.display = 'block'
        } else {
            document.getElementById('backgroud_mokume').style.display = 'block'
            document.getElementById('backgroud_default').style.display = 'none'
        }

        /**
         * CSSの変更を監視し
         * ヘッダーのメニューにある「背景を××にする」の表示と連動する
         */
        const target = document.getElementById("maincss_ndx");
        const observeOption = {
            attributes: true,
            attributeFilter: ['style']
        };
        const observer = new MutationObserver(mutations => {
            if (mutations[0].target.style.cssText.length > 0) {
                document.getElementById('backgroud_mokume').style.display = 'none'
                document.getElementById('backgroud_default').style.display = 'block'
            } else {
                document.getElementById('backgroud_mokume').style.display = 'block'
                document.getElementById('backgroud_default').style.display = 'none'
            }
        });
        observer.observe(target, observeOption);
    })
}


// document.addEventListener('DOMContentLoaded', function () {
window.onload = function () {
    //もしメニューがない場合は作成
    if (document.getElementById(MENUID) === null) {
        const elm = document.createElement('div')
        elm.id = MENUID
        //右ペインの他メニューにクラスを合わせる
        elm.className = 'box'
        elm.style.height = 'auto'
        //空の要素を挿入
        document.getElementById('right-column').insertAdjacentElement('afterbegin', elm)
    }
    //記事名を取得
    const word = document.getElementById('search-box').value
    //横幅を取得
    const width = document.getElementById('right-column').offsetWidth
    //メニューを表示
    drowMenu(word, width)
}
// })