Github Gist Share

Share your GitHub Gist to Twitter, Dabblet & as userscript.

Verzia zo dňa 28.03.2015. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name        Github Gist Share
// @namespace   https://github.com/jerone/UserScripts/
// @description Share your GitHub Gist to Twitter, Dabblet & as userscript.
// @author      jerone
// @copyright   2014+, jerone (http://jeroenvanwarmerdam.nl)
// @license     GNU GPLv3
// @homepage    https://github.com/jerone/UserScripts/tree/master/Github_Gist_Share
// @homepageURL https://github.com/jerone/UserScripts/tree/master/Github_Gist_Share
// @supportURL  https://github.com/jerone/UserScripts/issues
// @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VCYMHWQ7ZMBKW
// @include     *://gist.github.com/*
// @version     4.5
// @grant       none
// ==/UserScript==
/* global unsafeWindow */

(function() {

	String.format = function(string) {
		var args = Array.prototype.slice.call(arguments, 1, arguments.length);
		return string.replace(/{(\d+)}/g, function(match, number) {
			return typeof args[number] !== 'undefined' ? args[number] : match;
		});
	};

	var socials = {
		Twitter: {
			show: function( /*url, user, description, files, stars, forks, revisions*/ ) {
				return true;
			},
			submit: function(url, user, description, files, stars, forks, revisions) {
				var stats = [];
				if (files > 1) {
					stats.push(files + ' files');
				}
				if (stars === 1) {
					stats.push(stars + ' star');
				} else if (stars > 1) {
					stats.push(stars + ' stars');
				}
				if (forks === 1) {
					stats.push(forks + ' fork');
				} else if (forks > 1) {
					stats.push(forks + ' forks');
				}
				if (revisions > 1) {
					stats.push(revisions + ' revisions');
				}

				var tweet = String.format('Check out {0} #gist {1} on @github{2} |',
					user === document.querySelector('.name').textContent.trim() ? 'my' : user + '\'s',
					description ? '"' + description + '"' : '',
					stats.length > 0 ? ' | ' + stats.join(', ') : '');

				return 'https://twitter.com/intent/tweet?original_referer=' + encodeURIComponent(url) +
					'&source=tweetbutton&url=' + encodeURIComponent(url) +
					'&text=' + encodeURIComponent(tweet);
			},
			icon: 'https://si0.twimg.com/favicons/favicon.ico'
		},
		Dabblet: {
			/*
			 * The following urls should be converted to dabblet:
			 *                                   _______
			 *  - https://gist.github.com/jerone/3810309
			 *                                   _______
			 *  - https://gist.github.com/jerone/3810309/revisions
			 *                                   _______
			 *  - https://gist.github.com/jerone/3810309/forks
			 *                                   _______
			 *  - https://gist.github.com/jerone/3810309/stars
			 *                                   ________________________________________________
			 *  - https://gist.github.com/jerone/3810309/f2815cc6796ea985f74b8f5f3c717e8de3b12d37
			 *                            ________________________________________________
			 *  - https://gist.github.com/3810309/f2815cc6796ea985f74b8f5f3c717e8de3b12d37
			 *
			 */
			show: function( /*url, user, description, files, stars, forks, revisions*/ ) {
				return true;
			},
			submit: function(url, user /*, description, files, stars, forks, revisions*/ ) {
				var linkLong;
				if ((linkLong = document.querySelector('.site-container.js-site-container')) && linkLong.dataset.url) {
					var linkLongParts = linkLong.dataset.url.split('/');
					linkLongParts.shift();
					if (/^(?:revisions|forks|stars)$/gi.test(linkLongParts[linkLongParts.length - 1])) {
						linkLongParts.pop();
					}
					if (new RegExp(user, 'gi').test(linkLongParts[0])) {
						linkLongParts.shift();
					}
					url = '/' + linkLongParts.join('/');
				} else {
					url = url.replace(new RegExp('https?:\/\/gist.github.com/' + user, 'gi'), '');
				}
				return 'http://dabblet.com/gist' + url;
			},
			icon: 'http://dabblet.com/favicon.ico'
		},
		UserScript: {
			show: function( /*url, user, description, files, stars, forks, revisions*/ ) {
				return !!document.querySelector('.file[id^="file-"] .raw-url[href$=".user.js"]');
			},
			submit: function( /*url, user, description, files, stars, forks, revisions*/ ) {
				return (document.querySelector('.file[id^="file-"] .raw-url[href$=".user.js"]') || {
					href: ''
				}).href.trim();
			},
			icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKwSURBVHjabJNJTBNRGID/mc5MQYVWVNCGTbEtNZGDBj1ogolEMR5UJA2LBmMoIokxERIj8ehJjx6MYIQoJgq4JIa6gEARkKJFTa2iFFtKWwp2oeDCzNQ+31DQCc5L/nmT/P/3749ACAFBECBxiEPFFds0Ws399DRVhtX2udc97ig0PmgOLBkIbOwjAR8uMRRdvXF7pqv/NfrqnEAOlxsdLas6j3Wk2AEpCRcbKvLydrdu1WUr0lXrITEhAZKUSkhQKvKwXiY2ppbDRzCcv29P/ZZsDaSqUkCJYVJGwKMnHTDlmWgTZ/CvjkW4sKTScP1WC+oZsKAxpwv5gyEUnAkj2xc70p88Y8Y2a8VBxT0gispOGa413UVDb23IMe6OwaEw+jTqQKMOF3pptqBSw7k74hLEPaDUOu0VmpFDV58ZCJIAkiDB5fUBz0eApmjQqbOgrqa69HhVbZO4jKUfmiBJBctysHJFPPiDYbA7J4DjeJDLaWAYGVAyErIy0uDs6RPH9OXVtULWYgfEmN3emJK8BlYrEsHl8cEvloX4ODnEyRlgKGZhV1iOhcz0VNixM7dOCCp2EBkeMF3u6DaNqDasg1U4CzlFxxSRKMyz8xjmsPAQwNmRsc2jxGPkR0esHp7n9RBFrYbyUi1DUzh1GujFG0UBQrNz8P7DR3j+9NklqTEK3VVkbNLkVNZc9AwNW5Hb60PT/gCamg6gEbsT3XvYjvIP6i9gu2ShhOWb+BvLD13O9o3azWrVdy4K3wKhv5HfWW1Q39BY19nechPbzQrVwX9bhU+iIqnyQMF+mPvJQr/FCsHwDJgG30ADhl8Y2wQ4jIUVkpdaZRnPcd6AfxomJ32AIhEwdvaC8XG7JLwwvmXPmVFn52Tu2lvQjN9Crn3M6bWY+6otr3oGpWCB/SPAAJaJRguGUxB0AAAAAElFTkSuQmCC'
		},
		'bl.ocks.org': {
			show: function( /*url, user, description, files, stars, forks, revisions*/ ) {
				return true;
			},
			submit: function(url, user /*, description, files, stars, forks, revisions*/ ) {
				var linkLong;
				if ((linkLong = document.querySelector('.site-container.js-site-container')) && linkLong.dataset.url) {
					var linkLongParts = linkLong.dataset.url.split('/');
					linkLongParts.shift();
					if (/^(?:revisions|forks|stars)$/gi.test(linkLongParts[linkLongParts.length - 1])) {
						linkLongParts.pop();
					}
					url = '/' + linkLongParts.join('/');
				} else {
					url = url.replace(new RegExp('https?:\/\/gist.github.com/' + user, 'gi'), '');
				}
				return 'http://bl.ocks.org' + url;
			},
			icon: 'http://bl.ocks.org/favicon.png'
		}
	};

	function addMenuItem() {
		var temp, link, url, menu, li, user, description, files, stars, forks, revisions;

		if ((link = document.querySelector('.js-current-repository')) && (menu = document.querySelector('.sunken-menu-group'))) { // check if we're on an actual gists;
			url = link.href;
			user = document.querySelector('.author.vcard').textContent.trim();
			description = (temp = (document.querySelector('.gist-description') || link)) && temp.textContent.trim() || '';
			files = document.querySelectorAll('.file[id^="file-"]').length;
			stars = (temp = menu.querySelector('a[href$="/stars"] .counter')) && parseInt(temp.textContent.trim(), 10) || 0;
			forks = (temp = menu.querySelector('a[href$="/forks"] .counter')) && parseInt(temp.textContent.trim(), 10) || 0;
			revisions = (temp = menu.querySelector('a[href$="/revisions"] .counter')) && parseInt(temp.textContent.trim(), 10) || 0;

			menu.appendChild(li = document.createElement('li'));
			li.id = 'Github_Gist_Share';

			for (var key in socials) {
				if (socials.hasOwnProperty(key)) {
					var social = socials[key],
						socialA = document.createElement('a'),
						socialImg = document.createElement('img');

					if (social.show(url, user, description, files, stars, forks, revisions) !== true) {
						continue;
					}

					li.appendChild(socialA);
					socialA.appendChild(socialImg);
					socialA.id = (li.id + '_' + key).replace(/\s+/g, '_');
					socialA.classList.add('sunken-menu-item');
					socialA.href = social.submit && social.submit(url, user, description, files, stars, forks, revisions);
					socialA.title = String.format('[{0}] {1}', key, socialA.href);
					socialA.style.display = 'inline-block';
					socialA.target = '_blank';
					socialImg.src = social.icon;
					socialImg.alt = key;
				}
			}
		}
	}

	// init;
	addMenuItem();

	// on pjax;
	unsafeWindow.$(document).on('pjax:success', addMenuItem);

})();