From ab3a4c66405b9e470366b1d5299ea82df24a7a60 Mon Sep 17 00:00:00 2001 From: Zixaphir Date: Sat, 11 Jan 2014 20:21:25 -0700 Subject: [PATCH] Get hash navigation working with Navigate.navigate() --- builds/4chan-X.user.js | 35 +++++++++++++++++++++++++++-------- builds/crx/script.js | 35 +++++++++++++++++++++++++++-------- src/General/Navigate.coffee | 23 +++++++++++++++++------ 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index e1f891e25..d1ccb5d12 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -11894,6 +11894,7 @@ }; Navigate = { + path: window.location.pathname, init: function() { if (g.VIEW === 'catalog' || g.BOARD.ID === 'f') { return; @@ -11919,12 +11920,22 @@ return $.on(replyLink, 'click', Navigate.navigate); }, post: function() { - var postLink; + var hashlink, postlink, _i, _len, _ref, _results; if (g.VIEW === 'thread' && this.thread.ID === g.THREADID) { return; } - postLink = $('a[title="Highlight this post"]', this.nodes.info); - return $.on(postLink, 'click', Navigate.navigate); + postlink = $('a[title="Highlight this post"]', this.nodes.info); + $.on(postlink, 'click', Navigate.navigate); + if (!Conf['Quote Hash Navigation']) { + return; + } + _ref = $$('.hashlink', this.nodes.comment); + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + hashlink = _ref[_i]; + _results.push($.on(hashlink, 'click', Navigate.navigate)); + } + return _results; }, clean: function() { var posts, threads; @@ -12094,13 +12105,12 @@ return $('.boardTitle').textContent = d.title = "/" + board + "/ - " + title; }, navigate: function(e) { - var boardID, hash, onload, pageNum, path, threadID, view; + var boardID, onload, pageNum, path, threadID, view; if (this.hostname !== 'boards.4chan.org' || window.location.hostname === 'rs.4chan.org' || (e && (e.shiftKey || (e.type === 'click' && e.button !== 0)))) { return; } $.addClass(Index.button, 'fa-spin'); path = this.pathname.split('/'); - hash = this.hash; if (path[0] === '') { path.shift(); } @@ -12108,12 +12118,17 @@ if (view === 'catalog' || ('f' === boardID || 'f' === g.BOARD.ID)) { return; } + path = this.pathname; + if (this.hash) { + path += this.hash; + } if (e) { e.preventDefault(); } if (this.id !== 'popState') { - history.pushState(null, '', this.pathname); + history.pushState(null, '', path); } + Navigate.path = this.pathname; if (threadID) { view = 'thread'; } else { @@ -12139,7 +12154,7 @@ } } else { onload = function(e) { - return Navigate.load(e, hash); + return Navigate.load(e); }; Navigate.req = $.ajax("//a.4cdn.org/" + boardID + "/res/" + threadID + ".json", { onabort: onload, @@ -12217,7 +12232,8 @@ Main.callbackNodes(Thread, [thread]); Main.callbackNodes(Post, posts); Navigate.ready('Quote Threading', QuoteThreading.force, Conf['Quote Threading']); - return Navigate.buildThread(); + Navigate.buildThread(); + return Header.hashScroll.call(window); }, buildThread: function() { var board; @@ -12232,6 +12248,9 @@ }, popstate: function() { var a; + if (window.location.pathname === Navigate.path) { + return; + } a = $.el('a', { href: window.location, id: 'popState' diff --git a/builds/crx/script.js b/builds/crx/script.js index 5ce34b6a2..f014ef368 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -11883,6 +11883,7 @@ }; Navigate = { + path: window.location.pathname, init: function() { if (g.VIEW === 'catalog' || g.BOARD.ID === 'f') { return; @@ -11908,12 +11909,22 @@ return $.on(replyLink, 'click', Navigate.navigate); }, post: function() { - var postLink; + var hashlink, postlink, _i, _len, _ref, _results; if (g.VIEW === 'thread' && this.thread.ID === g.THREADID) { return; } - postLink = $('a[title="Highlight this post"]', this.nodes.info); - return $.on(postLink, 'click', Navigate.navigate); + postlink = $('a[title="Highlight this post"]', this.nodes.info); + $.on(postlink, 'click', Navigate.navigate); + if (!Conf['Quote Hash Navigation']) { + return; + } + _ref = $$('.hashlink', this.nodes.comment); + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + hashlink = _ref[_i]; + _results.push($.on(hashlink, 'click', Navigate.navigate)); + } + return _results; }, clean: function() { var posts, threads; @@ -12083,13 +12094,12 @@ return $('.boardTitle').textContent = d.title = "/" + board + "/ - " + title; }, navigate: function(e) { - var boardID, hash, onload, pageNum, path, threadID, view; + var boardID, onload, pageNum, path, threadID, view; if (this.hostname !== 'boards.4chan.org' || window.location.hostname === 'rs.4chan.org' || (e && (e.shiftKey || (e.type === 'click' && e.button !== 0)))) { return; } $.addClass(Index.button, 'fa-spin'); path = this.pathname.split('/'); - hash = this.hash; if (path[0] === '') { path.shift(); } @@ -12097,12 +12107,17 @@ if (view === 'catalog' || ('f' === boardID || 'f' === g.BOARD.ID)) { return; } + path = this.pathname; + if (this.hash) { + path += this.hash; + } if (e) { e.preventDefault(); } if (this.id !== 'popState') { - history.pushState(null, '', this.pathname); + history.pushState(null, '', path); } + Navigate.path = this.pathname; if (threadID) { view = 'thread'; } else { @@ -12128,7 +12143,7 @@ } } else { onload = function(e) { - return Navigate.load(e, hash); + return Navigate.load(e); }; Navigate.req = $.ajax("//a.4cdn.org/" + boardID + "/res/" + threadID + ".json", { onabort: onload, @@ -12206,7 +12221,8 @@ Main.callbackNodes(Thread, [thread]); Main.callbackNodes(Post, posts); Navigate.ready('Quote Threading', QuoteThreading.force, Conf['Quote Threading']); - return Navigate.buildThread(); + Navigate.buildThread(); + return Header.hashScroll.call(window); }, buildThread: function() { var board; @@ -12221,6 +12237,9 @@ }, popstate: function() { var a; + if (window.location.pathname === Navigate.path) { + return; + } a = $.el('a', { href: window.location, id: 'popState' diff --git a/src/General/Navigate.coffee b/src/General/Navigate.coffee index 6b47aea2a..8e30ae722 100644 --- a/src/General/Navigate.coffee +++ b/src/General/Navigate.coffee @@ -1,4 +1,5 @@ Navigate = + path: window.location.pathname init: -> return if g.VIEW is 'catalog' or g.BOARD.ID is 'f' @@ -22,8 +23,13 @@ Navigate = post: -> # We don't need to reload the thread inside the thread return if g.VIEW is 'thread' and @thread.ID is g.THREADID - postLink = $ 'a[title="Highlight this post"]', @nodes.info - $.on postLink, 'click', Navigate.navigate + postlink = $ 'a[title="Highlight this post"]', @nodes.info + $.on postlink, 'click', Navigate.navigate + + return unless Conf['Quote Hash Navigation'] + + for hashlink in $$ '.hashlink', @nodes.comment + $.on hashlink, 'click', Navigate.navigate clean: -> {posts, threads} = g @@ -176,14 +182,17 @@ Navigate = $.addClass Index.button, 'fa-spin' path = @pathname.split '/' - hash = @hash path.shift() if path[0] is '' [boardID, view, threadID] = path return if view is 'catalog' or 'f' in [boardID, g.BOARD.ID] + path = @pathname + path += @hash if @hash + e.preventDefault() if e - history.pushState null, '', @pathname unless @id is 'popState' + history.pushState null, '', path unless @id is 'popState' + Navigate.path = @pathname if threadID view = 'thread' @@ -210,7 +219,7 @@ Navigate = # Moving from index to thread or thread to thread else - onload = (e) -> Navigate.load e, hash + onload = (e) -> Navigate.load e Navigate.req = $.ajax "//a.4cdn.org/#{boardID}/res/#{threadID}.json", onabort: onload onloadend: onload @@ -279,6 +288,7 @@ Navigate = Navigate.ready 'Quote Threading', QuoteThreading.force, Conf['Quote Threading'] Navigate.buildThread() + Header.hashScroll.call window buildThread: -> board = $ '.board' @@ -290,7 +300,8 @@ Navigate = Unread.read() Unread.update() - popstate: -> + popstate: -> + return if window.location.pathname is Navigate.path a = $.el 'a', href: window.location id: 'popState'