diff --git a/Resources/Scripts/code.js b/Resources/Scripts/code.js index feaaad6f..8c55b1d0 100644 --- a/Resources/Scripts/code.js +++ b/Resources/Scripts/code.js @@ -2,12 +2,12 @@ // // Variable: Current highlighted column jQuery & data objects. // - let highlightedColumnEle, highlightedColumnObj; + let highlightedColumn = null; // // Variable: Currently highlighted tweet jQuery & data objects. // - let highlightedTweetEle, highlightedTweetObj; + let highlightedTweet = null; // // Variable: Array of functions called after the website app is loaded. @@ -626,8 +626,8 @@ $(document.body).delegate("a", "contextmenu", function(){ let me = $(this)[0]; - if (me.classList.contains("js-media-image-link") && highlightedTweetObj){ - let tweet = highlightedTweetObj.hasMedia() ? highlightedTweetObj : highlightedTweetObj.quotedTweet; + if (me.classList.contains("js-media-image-link") && highlightedTweet){ + let tweet = highlightedTweet.obj.hasMedia() ? highlightedTweet.obj : highlightedTweet.obj.quotedTweet; let media = tweet.getMedia().find(media => media.mediaId === me.getAttribute("data-media-entity-id")); if ((media.isVideo && media.service === "twitter") || media.isAnimatedGif){ @@ -685,14 +685,31 @@ throw 2 if !ensurePropertyExists(TD, "services", "ChirpBase", "TWEET"); const updateHighlightedColumn = function(ele){ - highlightedColumnEle = ele; - highlightedColumnObj = ele ? TD.controller.columnManager.get(ele.attr("data-column")) : null; - return !!highlightedColumnObj; + let obj = ele ? TD.controller.columnManager.get(ele.attr("data-column")) : null; + + if (obj){ + highlightedColumn = { ele, obj }; + return true; + } + else{ + highlightedColumn = null; + return false; + } }; - const updateHighlightedTweet = function(ele, obj){ - highlightedTweetEle = ele; - highlightedTweetObj = obj; + const updateHighlightedTweet = function(ele){ + if (ele && ele[0].hasAttribute("data-account-key") && (highlightedColumn || updateHighlightedColumn(ele.closest("section.js-column")))){ + let wrap = highlightedColumn.obj.findChirp(ele.attr("data-key")); + let obj = highlightedColumn.obj.findChirp(ele.attr("data-tweet-id")) || wrap; + + if (obj){ + highlightedTweet = { ele, obj, wrap }; + return true; + } + } + + highlightedTweet = null; + return false; }; const processMedia = function(chirp){ @@ -701,7 +718,7 @@ app.delegate("section.js-column", { mouseenter: function(){ - if (!highlightedColumnObj){ + if (!highlightedColumn){ updateHighlightedColumn($(this)); } }, @@ -711,13 +728,17 @@ }, contextmenu: function(){ - let tweet = highlightedTweetObj; + return if !highlightedTweet; - if (tweet && tweet.chirpType === TD.services.ChirpBase.TWEET){ + let tweet = highlightedTweet.obj; + let quote = tweet.quotedTweet; + + if (tweet.chirpType === TD.services.ChirpBase.TWEET){ let tweetUrl = tweet.getChirpURL(); - let quoteUrl = tweet.quotedTweet ? tweet.quotedTweet.getChirpURL() : ""; - let chirpAuthors = tweet.quotedTweet ? [ tweet.getMainUser().screenName, tweet.quotedTweet.getMainUser().screenName ].join(";") : tweet.getMainUser().screenName; - let chirpImages = tweet.hasImage() ? processMedia(tweet) : tweet.quotedTweet && tweet.quotedTweet.hasImage() ? processMedia(tweet.quotedTweet) : ""; + let quoteUrl = quote && quote.getChirpURL(); + + let chirpAuthors = quote ? [ tweet.getMainUser().screenName, quote.getMainUser().screenName ].join(";") : tweet.getMainUser().screenName; + let chirpImages = tweet.hasImage() ? processMedia(tweet) : quote && quote.hasImage() ? processMedia(quote) : ""; $TD.setRightClickedChirp(tweetUrl || "", quoteUrl || "", chirpAuthors, chirpImages); } @@ -726,17 +747,11 @@ app.delegate("article.js-stream-item", { mouseenter: function(){ - let me = $(this); - return if !me[0].hasAttribute("data-account-key") || (!highlightedColumnObj && !updateHighlightedColumn(me.closest("section.js-column"))); - - let tweet = highlightedColumnObj.findChirp(me.attr("data-tweet-id")) || highlightedColumnObj.findChirp(me.attr("data-key")); - return if !tweet; - - updateHighlightedTweet(me, tweet); + updateHighlightedTweet($(this)); }, mouseleave: function(){ - updateHighlightedTweet(null, null); + updateHighlightedTweet(null); } }); }); @@ -746,11 +761,10 @@ // execSafe(function setupTweetScreenshot(){ window.TDGF_triggerScreenshot = function(){ - return if !highlightedTweetObj || !highlightedColumnObj; + return if !highlightedTweet || !highlightedColumn; - let chirp = highlightedColumnObj.findChirp(highlightedTweetEle.attr("data-key")) || highlightedTweetObj; - - let columnWidth = highlightedColumnEle.width(); + let columnWidth = highlightedColumn.ele.width(); + let chirp = highlightedTweet.wrap || highlightedTweet.obj; let html = $(chirp.render({ withFooter: false, @@ -759,7 +773,7 @@ isFavorite: false, isRetweeted: false, // keeps retweet mark above tweet isPossiblySensitive: false, - mediaPreviewSize: highlightedColumnObj.getMediaPreviewSize() + mediaPreviewSize: highlightedColumn.obj.getMediaPreviewSize() })); html.find("footer").last().remove(); // apparently withTweetActions breaks for certain tweets, nice @@ -861,10 +875,8 @@ }; const tryCloseHighlightedColumn = function(){ - if (highlightedColumnEle){ - let column = highlightedColumnEle.closest(".js-column"); - return (column.is(".is-shifted-2") && tryClickSelector(".js-tweet-social-proof-back", column)) || (column.is(".is-shifted-1") && tryClickSelector(".js-column-back", column)); - } + let column = highlightedColumn && highlightedColumn.ele.closest(".js-column"); + return column && ((column.is(".is-shifted-2") && tryClickSelector(".js-tweet-social-proof-back", column)) || (column.is(".is-shifted-1") && tryClickSelector(".js-column-back", column))); }; window.TDGF_onMouseClickExtra = function(button){ @@ -880,8 +892,8 @@ $(".is-shifted-1 .js-column-back").click(); } else if (button === 2){ // forward button - if (highlightedTweetEle){ - highlightedTweetEle.children().first().click(); + if (highlightedTweet){ + highlightedTweet.ele.children().first().click(); } } }; @@ -1183,7 +1195,7 @@ let src = !e.ctrlKey && getGifLink($(this).closest(".js-media-gif-container").find("video")); if (src){ - window.TDGF_playVideo(src, getUsername(highlightedTweetObj)); + window.TDGF_playVideo(src, getUsername(highlightedTweet.obj)); } else{ $TD.openBrowser(getVideoTweetLink($(this)));