pylonshqのWikiのソースを表示するGreasemonkey
pylonshqの文書を翻訳する時にソースをコピーする手間を軽減する、極めて狭い範囲の人にしか役に立たないGreasemonkeyスクリプト。
// ==UserScript== // @name Pylonsdoc View Source // @namespace http://d.hatena.ne.jp/nozom/ // @include http://wiki.pylonshq.com/display/* // @include http://wiki.pylonshq.com/pages/viewpage.action* // ==/UserScript== (function(){ function getElementsByXPath(xpath, doc, context) { if (doc == null) doc = document; if (context == null) context = doc; var it = doc.evaluate(xpath, context, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); var nodes = new Array(); var node; while ((node = it.iterateNext()) != null) { nodes.push(node); } return nodes; } function onViewSourceClicked(ev) { GM_xmlhttpRequest({ method: 'GET', url: ev.target.href, onload: function(req) { if (req.responseText.match('<div class="padded">[ \n\r]*((?:.|[\r\n])*?)[ \n\r]*</div>')) { var text = RegExp.$1; var win = window.open('', null); win.document.open(); win.document.write('<pre>'); win.document.write(text.replace(/[\r\n]<br>/g, "\n")); win.document.write('</pre>'); win.document.close(); } }, }); ev.preventDefault(); return; } var info = getElementsByXPath("//a[@accesskey='i']")[0]; if (info && info.href.match(/\?pageId=(\d+)/)) { var pageId = RegExp.$1; var a = document.createElement("a"); a.href = 'http://wiki.pylonshq.com/pages/viewpagesrc.action?pageId=' + pageId; // a.target = '_blank'; a.addEventListener('click', onViewSourceClicked, false); a.appendChild(document.createTextNode("View source")); var form = getElementsByXPath("//td[@class='pagecontent']/table//tr[position()=1]//td[position()=1]//form")[0]; if (form != null) { form.parentNode.insertBefore(a, form); } } })()
これまでに翻訳した文書一覧
ちなみに、Pylons 日本語で翻訳を公開している人のほとんどは同じ会社の人だったりする。