Created
August 16, 2012 17:59
-
-
Save JetFault/3372129 to your computer and use it in GitHub Desktop.
Github slider
This file contains hidden or 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