Skip to content

Instantly share code, notes, and snippets.

@asm256
Last active April 1, 2016 07:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asm256/77aac4d74c5684789b7bc95f3f1e5566 to your computer and use it in GitHub Desktop.
Save asm256/77aac4d74c5684789b7bc95f3f1e5566 to your computer and use it in GitHub Desktop.
るりまの対象バージョンを切り替えるスクリプト
// ==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