Last active
April 1, 2016 07:24
-
-
Save asm256/77aac4d74c5684789b7bc95f3f1e5566 to your computer and use it in GitHub Desktop.
るりまの対象バージョンを切り替えるスクリプト
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name rurema_version_switcher | |
// @namespace @asm__ | |
// @description るりまのバージョンを切り替える | |
// @include /^https?://docs\.ruby-lang\.org\/ja\/\d+\.\d+\.\d+// | |
// @version 1 | |
// @grant none | |
// ==/UserScript== | |
(function(){ | |
"use strict"; | |
// http://docs.ruby-lang.org/ja/2.3.0/class/ARGF.html | |
let md = document.URL.match(/\/ja\/(\d+\.\d+\.\d+)\//) | |
let nowver = md[1] // 現在見てるバージョンを取得 | |
// 最初のリンクの後ろにリストを追加 | |
let target = document.getElementsByTagName("a")[0] | |
// リストの親の作成 | |
let root = document.createElement("select") | |
root.setAttribute("size", "1") | |
root.setAttribute("name", "select_ver") | |
// バージョン文字列から子要素を作る関数 | |
function create_ver_element(ver, selver){ | |
let r = "<option value='" + ver +"'" | |
r += " label='" + ver +"'" | |
if(ver == selver) | |
r += " selected"; | |
r += ">" + ver + "</option>" | |
return r; | |
} | |
let inner = "" | |
// バージョンリスト | |
let vers = ["2.3.0", "2.2.0", "2.1.0", "2.0.0", nowver].filter( | |
// 重複削除 | |
function (x, i, self) { | |
return self.indexOf(x) === i; | |
} | |
) | |
// 子要素の作成 | |
for(let v of vers) | |
inner += create_ver_element(v,nowver); | |
root.innerHTML = inner | |
if(target){ | |
// イベント作成 | |
root.addEventListener("change", function(){ | |
let ver = root.selectedIndex | |
// 置換する | |
let nurl = document.URL.replace(/ja\/\d+\.\d+\.\d+(?=\/)/, "ja/" + root.options[ver].value) | |
location.href = nurl | |
}) | |
// 作成したリストを追加 | |
target.parentElement.insertBefore(root, target.nextSibling) | |
} | |
})() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment