Created
August 16, 2012 17:59
-
-
Save JetFault/3372129 to your computer and use it in GitHub Desktop.
Github slider
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(function () { | |
new GitHub.TreeFinder | |
}), GitHub.TreeSlider = function () { | |
if (!Modernizr.history) return; | |
if ($("#slider").length == 0) return; | |
if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) return; | |
var a = this; | |
a.enabled = !0, $("#slider a.js-slide-to, .breadcrumb a").live("click", function (b) { | |
return a.clickHandler(b) | |
}), $(window).bind("popstate", function (b) { | |
a.popStateHandler(b.originalEvent) | |
}) | |
}, GitHub.TreeSlider.prototype = { | |
enabled: !1, | |
sliding: !1, | |
slideSpeed: 400, | |
frameForPath: function (a) { | |
return $(".frame").filter(function () { | |
return $(this).attr("data-path") === a | |
}) | |
}, | |
frameForURL: function (a) { | |
return this.frameForPath(this.pathFromURL(a)) | |
}, | |
pathFromURL: function (a) { | |
if (!a) return; | |
var b = $(" .repo-tree").attr("data-ref"), | |
c = new RegExp("/(tree|blob)/" + (b || "[^/]+") + "/"), | |
d = a.split(c)[2] || "/"; | |
return d.slice(d.length - 1, d.length) != "/" && (d += "/"), unescape(d) | |
}, | |
scrollToBreadcrumb: function () { | |
this.visibleInBrowser(".breadcrumb:visible") || $(".breadcrumb:visible").scrollTo({ | |
duration: 50 | |
}) | |
}, | |
visibleInBrowser: function (a) { | |
var b = $(window).scrollTop(), | |
c = b + $(window).height(), | |
d = $(a).offset().top, | |
e = d + $(a).height(); | |
return e >= b && d <= c | |
}, | |
clickHandler: function (a) { | |
if (a.which == 2 || a.metaKey || a.ctrlKey) return !0; | |
if (this.sliding) return !1; | |
var b = a.currentTarget.href, | |
c = this.pathFromURL(b); | |
return window.history.pushState({ | |
path: c | |
}, "", b), typeof _gaq != "undefined" && _gaq.push(["_trackPageview"]), this.slideTo(b), !1 | |
}, | |
popStateHandler: function (a) { | |
this.slideTo(location.pathname) | |
}, | |
doneSliding: function () { | |
if (!this.sliding) return; | |
this.sliding = !1, $("#slider .frame-center").nextAll(".frame").hide(), $("#slider .frame-center").prevAll(".frame").css("visibility", "hidden"); | |
var a = $(".frame-loading:visible"); | |
a.length ? a.removeClass("frame-loading") : $("#slider").trigger("slid") | |
}, | |
slideTo: function (a) { | |
var b = this.pathFromURL(a), | |
c = this.frameForPath(b), | |
d = $("#slider .frame-center").attr("data-path") || ""; | |
c.is(".frame-center") || (d == "/" || b.split("/").length > d.split("/").length ? this.slideForwardTo(a) : this.slideBackTo(a)) | |
}, | |
slideForwardTo: function (a) { | |
debug("Sliding forward to %s", a); | |
var b = this.frameForURL(a); | |
if (b.length) this.slideForwardToFrame(b); | |
else { | |
var c = this.slideForwardToLoading(); | |
this.loadFrame(a, function (a) { | |
c.replaceWith(a.find(".frame-center")) | |
}) | |
} | |
}, | |
slideForwardToFrame: function (a) { | |
if (this.sliding) return; | |
this.sliding = !0; | |
var b = this; | |
$("#slider .frame-center").after(a.css("marginLeft", 0)).addClass("frame").removeClass("frame-center").animate({ | |
marginLeft: "-1200px" | |
}, this.slideSpeed, function () { | |
b.doneSliding() | |
}), this.makeCenterFrame(a), this.setFrameTitle(a), this.setFrameCanonicalURL(a) | |
}, | |
slideForwardToLoading: function () { | |
var a = $(".frame-loading").clone(); | |
return a.find("img").hide(), setTimeout(function () { | |
a.find("img").show() | |
}, 500), $(".frames").append(a), this.slideForwardToFrame(a), a | |
}, | |
slideBackTo: function (a) { | |
debug("Sliding back to %s", a); | |
var b = this.frameForURL(a); | |
if (b.length) this.slideBackToFrame(b); | |
else { | |
var c = this.slideBackToLoading(), | |
d = this.pathFromURL(a); | |
this.loadFrame(a, function (a) { | |
c.replaceWith(a.find(".frame-center")) | |
}) | |
} | |
}, | |
slideBackToFrame: function (a) { | |
if (this.sliding) return; | |
this.sliding = !0; | |
var b = this; | |
$("#slider .frame-center").before(a.css("marginLeft", "-1200px")).addClass("frame").removeClass("frame-center"), a.animate({ | |
marginLeft: "0" | |
}, this.slideSpeed, function () { | |
b.doneSliding() | |
}), this.makeCenterFrame(a), this.setFrameTitle(a), this.setFrameCanonicalURL(a) | |
}, | |
slideBackToLoading: function () { | |
var a = $(".frame-loading").clone(); | |
return a.find("img").hide(), setTimeout(function () { | |
a.find("img").show() | |
}, 350), $(".frames").prepend(a.show()), this.slideBackToFrame(a), a | |
}, | |
makeCenterFrame: function (a) { | |
a.css("visibility", "visible").show().addClass("frame-center"), this.scrollToBreadcrumb(), $(".file-history-tease:visible").hide(); | |
var b = $('.file-history-tease[data-path="' + a.attr("data-path") + '"]'); | |
b.length > 0 && b.show(), a.attr("data-path") == "/" ? ($(".last-commit, .commit.commit-tease").show(), $("#repo_details").show(), $(".repo-head .tabs").addClass("with-details-box")) : ($(".last-commit, .commit.commit-tease").hide(), $("#repo_details").hide(), $(".repo-head .tabs").removeClass("with-details-box")); | |
var c = $('.breadcrumb[data-path="' + a.attr("data-path") + '"]'); | |
c.length > 0 && ($(".breadcrumb:visible").hide(), c.show()); | |
var d = $('.announce[data-path="' + a.attr("data-path") + '"]'); | |
$(".announce").fadeOut(), d.length > 0 && d.fadeIn() | |
}, | |
setFrameTitle: function (a) { | |
var b = a.attr("data-title"); | |
b && (document.title = b) | |
}, | |
setFrameCanonicalURL: function (a) { | |
var b = a.attr("data-permalink-url"); | |
b && $("link[rel=permalink]").attr("href", b) | |
}, | |
loadFrame: function (a, b) { | |
debug("Loading " + a + "?slide=1"); | |
var c = this; | |
$.ajax({ | |
url: a + "?slide=1", | |
cache: !1, | |
success: function (d) { | |
var e = $("<div>" + d + "</div>"); | |
b.call(this, e); | |
var f = $("#slider"); | |
f.trigger("slid"), f.find(".breadcrumb").hide().last().after(e.find(".breadcrumb")); | |
var g = e.find(".file-history-tease"); | |
f.prevAll(".file-history-tease").hide(), g.length && (f.prevAll(".last-commit, .commit.commit-tease").hide(), f.find(".breadcrumb:visible").after(g)); | |
var h = c.frameForURL(a); | |
GitHub.CachedCommitDataPoller(.5, h), GitHub.Blob.show(), c.setFrameTitle(h), c.setFrameCanonicalURL(h), f.pageUpdate() | |
}, | |
error: function () { | |
$("#slider .frame-center").html("<h3>Something went wrong.</h3>") | |
}, | |
complete: function () { | |
c.sliding = !1 | |
} | |
}) | |
} | |
}, $(function () { | |
GitHub.slider = new GitHub.TreeSlider | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment