Instantly share code, notes, and snippets.

Embed
What would you like to do?
Fork your own Gist

Fork your own Gist

This is a bookmarklet that adds a fully functional Fork button to your own Gist.

If a Fork button is already present in the page, this bookmarklet will set focus to it instead of adding another one.

The change is temporary and the button will disappear as soon as you navigate away from that Gist (clicking the Fork button does this for you as well).


A Closure Compiler optimized version provided below for convenient copy'n'paste.

javascript: (function () {
var fork, present, star, button, form, forks, count;
$('.pagehead-actions li').each(function () {
var action = $(this).find('form').attr('action');
if (action) {
switch (action.split('/').pop()) {
case 'fork':
fork = $(this);
present = true;
break;
case 'star':
star = this;
break;
}
}
});
if (!fork) {
fork = $(star).clone();
}
button = fork.find('.minibutton');
if (present) {
button.focus();
return;
}
form = fork.find('form');
form.attr('action', form.attr('action').split('/').map(function (a) {
return a === 'star' ? 'fork' : a;
}).join('/'));
button.html('<span class="octicon octicon-git-branch"></span>Fork');
forks = $('.counter').filter(function () {
var href = $(this).parent().attr('href');
return href ? href.split('/').some(function (a) {
return a === 'forks';
}) : false;
});
count = fork.find('.social-count');
count.html(forks.text() || 0);
count.attr('href', forks.parent().attr('href'));
$('.pagehead-actions li:last').parent().append(fork);
}());
javascript:(function(){var b,e,f,c,d;$(".pagehead-actions li").each(function(){var a=$(this).find("form").attr("action");if(a)switch(a.split("/").pop()){case "fork":b=$(this);e=!0;break;case "star":f=this}});b||(b=$(f).clone());c=b.find(".minibutton");e?c.focus():(d=b.find("form"),d.attr("action",d.attr("action").split("/").map(function(a){return"star"===a?"fork":a}).join("/")),c.html('<span class="octicon octicon-git-branch"></span>Fork'),c=$(".counter").filter(function(){var a=$(this).parent().attr("href");return a?a.split("/").some(function(a){return"forks"===a}):!1}),d=b.find(".social-count"),d.html(c.text()||0),d.attr("href",c.parent().attr("href")),$(".pagehead-actions li:last").parent().append(b))})()
@livibetter

This comment has been minimized.

livibetter commented Oct 27, 2013

This is quite interesting, because I have never once thought of forking my own Gist or Git repository on GitHub.

I wonder have you contacted GitHub support to discuss the Fork button on Gist since it seems that you can fork your own Git repositories on GtiHub? (There is a Fork button, didn't try it)

@rickcolosimo

This comment has been minimized.

rickcolosimo commented Oct 28, 2013

VERY helpful -- it's exactly what I needed.

For newbies like me: copy the closure-compiled.js into your new bookmark dialog window as the "location." You can name it anything clever, such as "ForkGist."

@gre

This comment has been minimized.

gre commented Jan 24, 2014

Dear Github,

Why don't you let us fork our own gists!

Best wishes,
gre

@Noitidart

This comment has been minimized.

Noitidart commented Feb 15, 2014

This is so great thanks very much for it.
I forked it and added some improvements.

1) did not work when if you the page you are trying to run it on was already starred by you
2) if there were 0 stars but were fork count > 0, the fork count would not be a clickable link (note: if there are 0 forks, the link created will still not be clickable)

See here: https://gist.github.com/Noitidart/8794639

Added details for how users can use it from Scratchpad as bookmarklets don't work and also made a Firefox addon out of it: https://addons.mozilla.org/en-US/firefox/addon/ghforkable/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment