+#link
-
/*
* @title +#link
* @description append Fragment Identifier links
* @include http://*
* @include https://*
* @contributor wakabatan http://let.hatelabo.jp/wakabatan/let/hJmcxuC90NBX
* @license MIT License https://opensource.org/licenses/MIT
* @javascript_url
*/
// keeping styles and strict ver
// http://let.hatelabo.jp/noromanba/let/hLHXwv6M9ohw
// e.g.
// https://www.sunday-webry.com/events/free/
(() => {
'use strict';
{
const wall = document.head || document.body || document.documentElement;
wall.append(Object.assign(document.createElement('style'), {
charset: 'utf-8',
// TODO fix glitching e.g. in MDN
// TBD omit class-name
textContent: [
'.___id_anchor {' +
'display: inline',
'width: auto',
'height: auto',
'margin: 0',
'border: none',
'padding: 0',
'background-color: #ffa',
'color: black',
'font-size: 16px',
'font-weight: normal',
'font-family: monospace',
'line-height: 1.0',
'text-decoration: underline',
'}',
].join('!important;'),
}));
}
document.body.querySelectorAll([
'[id]',
'a[name]',
]).forEach(node => {
// legacy fallback
const id = node.id || node.name;
const anchor = Object.assign(document.createElement('a'), {
href: '#' + encodeURIComponent(id),
// TBD omit class-name
className: '___id_anchor',
textContent: '#' + id,
});
// TODO un-nest
// https://www.w3.org/1999/xhtml/
if (node.namespaceURI === 'http://www.w3.org/1999/xhtml') {
// https://developer.mozilla.org/en-US/docs/Web/API/Node/localName
// https://developer.mozilla.org/en-US/docs/Web/API/Element/localName
const name = node.localName;
anchor.title = name;
if (name.match(/^(?:h[1-6]|td|th|li|dt|dd|html)$/)) {
node.firstChild.before(anchor);
return;
}
} else {
anchor.title = '{' + node.namespaceURI + '}' + name;
}
node.before(anchor);
});
})();
-
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。