H#id link
-
/*
* @title H#id link
* @description append Fragment Identifier link to headings
* @include http://*
* @include https://*
* @contributor efcl http://let.hatelabo.jp/efcl/let/hJmfwszo56oZ
* @contributor noromanba http://let.hatelabo.jp/noromanba/let/hJmfwve26ZM4 (Fork of)
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
(function () {
var wrap = function (node, wrapper) {
node.parentNode.insertBefore(wrapper, node);
wrapper.appendChild(node);
};
var hSelector = Array(6).join().split(',').map(function (_, idx) {
return 'h' + (idx + 1) + '[id]';
});
var slice = Array.prototype.slice;
var appendFrag = function (ctx) {
if (!ctx.querySelectorAll) return;
var headings = (function () {
hSelector.some(function (sel) {
if (ctx.nodeName.toLowerCase() === sel.slice(0, 2)) { // lame
headings = [ctx];
return true;
}
}); // TBD concat w/ map or filter
return slice.call(ctx.querySelectorAll(hSelector));
})();
headings.forEach(function (heading) {
var id = heading.id;
if (!id) return;
// TBD replaceState
var frag = document.createElement('a');
frag.href = '#' + id;
wrap(heading, frag);
});
};
appendFrag(document.body);
// TBD omit
new MutationObserver(function (records) {
records.forEach(function (record) {
appendFrag(record.target);
});
}).observe(document.body, { childList: true, subtree: true });
})();
-
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。