// ==UserScript== // @name xkdc: Share Buttons // @namespace http://userscripts.org/users/12 // @description Add buttons on xkcd.com to share on Twitter, Tumblr, Pinterest, etc. // @version 1.20140219123730 // @author LouCypher // @license WTFPL http://www.wtfpl.net/ // @homepageURL https://userscripts.org/scripts/show/159744 // @supportURL http://userscripts.org/scripts/discuss/159744 // @resource LICENSE https://raw.github.com/LouCypher/userscripts/master/licenses/WTFPL/LICENSE.txt // @include http://xkcd.com/* // @include https://xkcd.com/* // @grant none // @downloadURL none // ==/UserScript== /* This program is free software. It comes without any warranty, to * the extent permitted by applicable law. You can redistribute it * and/or modify it under the terms of the Do What The Fuck You Want * To Public License, Version 2, as published by Sam Hocevar. See * http://www.wtfpl.net/ for more details. */ (function() { if (!$(".comicNav a[rel='prev']")) return; if (location.pathname == "/") { var id = parseInt($(".comicNav a[rel='prev']").href.match(/\d+/)) + 1; } var title = $("#ctitle"); var image = $("#comic img"); if (!(title && image)) return; var txt = $esc(document.title); var img = $esc(image.src); var alt = $esc(image.title); var url = $esc(location.href + (id ? (id + "/") : "")); var ul = $("#middleContainer").insertBefore(document.createElement("ul"), $("#middleContainer > br")); ul.className = "comicNav"; var web = [ { "name": "Google+", "url" : "https://plus.google.com/share?url=" + url, "bgcolor": "#dc4a36", "color": "#fff" }, { "name": "Facebook", "url" : "https://www.facebook.com/share.php?src=bm&v=4&u=" + url, "bgcolor": "#3b5998", "color": "#fff" }, { "name": "LinkedIn", "url" : "http://www.linkedin.com/shareArticle?url=" + url + "&title=" + txt + "&summary=" + alt, "bgcolor": "#52a9d4", "color": "#fff" }, { "name": "Twitter", "url" : "https://twitter.com/share?text=" + txt + "&url=" + url + "&related=irandallmunroe:Randall+Munroe&hashtags=xkcd,comic", "bgcolor": "#019ad2", "color": "#fff" }, { "name": "Tumblr", "url" : "http://www.tumblr.com/share/photo?source=" + img + "&caption=" + $p("" + document.title + "") + $p(image.title) + "&click_thru=" + url + "&tags=xkcd,comic", "bgcolor": "#2c4965", "color": "#fff" }, { "name": "Pinterest", "url" : "http://pinterest.com/pin/create/button/?url=" + url + "&media=" + img + "&description=" + txt, "bgcolor": "#fff", "color": "#e0242a" }, { "name": "RebelMouse", "url" : "https://www.rebelmouse.com/core/stick/?image=" + img + "&image_size=" + image.width + "x" + image.height + "&headline=" + txt + "&original_url=" + url + "&type=image", "bgcolor": "#145a7c", "color": "#fff" }, { "name": "StumbleUpon", "url" : "http://www.stumbleupon.com/submit?url=" + url, "bgcolor": "#fc3d2f", "color": "#fff" }, { "name": "FriendFeed", "url" : "http://friendfeed.com/?url=" + url + "&title=" + txt, "className": "FriendFeed", "bgcolor": "#437ec7", "color": "#c1d7f4" }, { "name": "reddit", "url" : "http://www.reddit.com/submit?url=" + url + "&title=" + txt, "bgcolor": "#cee3f8", "color": "#000" } ] var list; for (var i in web) { list = $button(web[i].name, web[i].url, web[i].className, web[i].bgcolor, web[i].color); ul.appendChild(list); if (i == parseInt((web.length / 2) - 1)) { var br = list.appendChild(document.createElement("br")); br.style.lineHeight = "3em"; } } $(".comicNav .FriendFeed").addEventListener("click", $ff, false); function $(aSelector, aNode) { return (aNode || document).querySelector(aSelector); } function $esc(aString) { return encodeURIComponent(aString); } function $button(aText, aURL, aClass, aBgColor, aColor) { var list = document.createElement("li"); var link = list.appendChild(document.createElement("a")); link.href = aURL; link.textContent = aText; link.title = "Share on " + aText; link.target = "_blank"; aClass && link.classList.add(aClass); link.style.backgroundColor = aBgColor; link.style.color = aColor; return list; } function $p(aString) { return $esc("
" + aString + "
"); } function $ff(aEvent) { aEvent.preventDefault(); var script = document.createElement("script"); script.setAttribute("type", "text/javascript"); script.setAttribute("src", "//friendfeed.com/share/bookmarklet/javascript"); document.body.appendChild(script) } })()