// ==UserScript== // @name gist raw perm HEAD // @namespace https://www.hatena.ne.jp/noromanba/ // @description Add permanently HEAD links on Gist. Use for install user.js or load xxx.js with (at)require etc. // @include https://gist.github.com/* // @version 2012.5.1.0.31 // @homepage https://userscripts.org/scripts/show/130781 // @downloadURL https://userscripts.org/scripts/source/130781.user.js // @installURL https://userscripts.org/scripts/source/130781.user.js // @updateURL https://userscripts.org/scripts/source/130781.meta.js // @license MIT License; http://nrm.mit-license.org/2012 // @copyright (c) 2012+, noromanba (https://www.hatena.ne.jp/noromanba/) // @author noromanba // @icon https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Button_Icon_Orange.svg/32px-Button_Icon_Orange.svg.png // @icon64 https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Button_Icon_Orange.svg/64px-Button_Icon_Orange.svg.png // ==/UserScript== // [Detail] // https://gist.github.com/2370972 (function() { var raws = document.querySelectorAll('.actions > a'); if (!raws) return; var gist = function(rawNode) { var raw = rawNode, meta = raw.pathname.match(/\/raw\/(\d+)\/\w+\/(.*)/), baseurl = 'https://raw.github.com/gist/', id = meta[1], basename = meta[2]; return { raw: raw, id: id, name: basename, file: { name: basename.slice(basename.lastIndexOf('/') + 1), type: basename.split('.').length > 1 ? basename.split('.').pop() : 'N/D' }, permalink: baseurl + id + '/' }; }; var files = []; // more smart, into gist{} Array.prototype.forEach.call(raws, function(raw) { var namedHead = raw.cloneNode(true); var g = gist(raw); files.push(g); namedHead.href = g.permalink + g.name; namedHead.textContent = 'HEAD(named)'; namedHead.title = g.name; // Fx must be needs 2nd args https://developer.mozilla.org/en/DOM/element.insertBefore raw.parentNode.insertBefore(namedHead, null); }); // 1st file only (Gist API constrains) (function(g) { if (g) { var head = g.raw.cloneNode(true); head.href = g.permalink; head.textContent = 'HEAD'; head.title = g.id + '.txt'; g.raw.parentNode.insertBefore(head, g.raw.nextSibling); } })(files[0]); })();