N embed2link
by
noromanba
2015-12-03 [2015/12/03 06:36:10]
replace Nicovideo embed player to link
/*
* @title N embed2link
* @description replace Nicovideo embed player to link
* @include http://*
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
// ES6/7/2015+ monkey traning
// TODO more smart Harmony+ way; e.g.;
// ugly Array scan and RegExp captures, to Array#includes
(() => {
var swfSelector = [
'embed[type="application/x-shockwave-flash"]',
'[src^="http://ext.nicovideo.jp/swf/player/thumbwatch.swf"]',
'[flashvars]'
].join('');
Array.from(document.querySelectorAll(swfSelector)).forEach(swf => {
// flashvars can't access from property and bracket-notation;
// -> swf.flashvars / swf['flashvars']
var queries = decodeURIComponent(swf.getAttribute('flashvars')).split('&');
// TBD Array#find replace to Array#findIndex
var id = queries.find(q => /v=/.test(q)).match(/(sm\d+)/)[1];
var link = document.createElement('a');
link.href = 'http://www.nicovideo.jp/watch/' + id;
var title = queries.find(q => /thumbTitle=/.test(q)).split('=')[1] || '';
var detail = queries.find(q => /thumbDescription=/.test(q)).split('=')[1] || '';
/*
link.title = title + '\n' + detail;
/*/
link.title = detail;
link.appendChild(document.createTextNode(title)); // TBD plaintext
link.appendChild(document.createElement('br'));
//*/
link.appendChild(document.createTextNode(link));
swf.parentNode.replaceChild(link, swf);
});
}).call(this);
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。