From ffd0f5e98627e9dd1e82056ed905273e5671949c Mon Sep 17 00:00:00 2001
From: chylex <contact@chylex.com>
Date: Tue, 3 Apr 2018 02:05:22 +0200
Subject: [PATCH] Rewrite screenshot rendering to fix current and future visual
 issues

---
 Resources/Scripts/code.js | 130 ++++++++++++++++----------------------
 1 file changed, 55 insertions(+), 75 deletions(-)

diff --git a/Resources/Scripts/code.js b/Resources/Scripts/code.js
index 05986743..877b35eb 100644
--- a/Resources/Scripts/code.js
+++ b/Resources/Scripts/code.js
@@ -660,85 +660,65 @@
   // Block: Screenshot tweet to clipboard.
   //
   (function(){
-    var selectedTweet;
-    
-    const setImportantProperty = function(obj, property, value){
-      if (obj.length === 1){
-        obj[0].style.setProperty(property, value, "important");
-      }
-    };
-    
-    app.delegate("article.js-stream-item", "contextmenu", function(){
-      selectedTweet = $(this);
-    });
-    
     window.TDGF_triggerScreenshot = function(){
-      if (selectedTweet){
-        let tweetWidth = Math.floor(selectedTweet.width());
-        let parent = selectedTweet.parent();
+      return if !highlightedTweetObj || !highlightedColumnObj;
+      
+      let chirp = highlightedColumnObj.findChirp(highlightedTweetEle.attr("data-key")) || highlightedTweetObj;
+      
+      let columnWidth = highlightedColumnEle.width();
+      
+      let html = $(chirp.render({
+        withFooter: false,
+        withTweetActions: false,
+        isInConvo: false,
+        isFavorite: false,
+        isRetweeted: false, // keeps retweet mark above tweet
+        isPossiblySensitive: false,
+        mediaPreviewSize: highlightedColumnObj.getMediaPreviewSize()
+      }));
+      
+      html.find("footer").last().remove(); // apparently withTweetActions breaks for certain tweets, nice
+      html.find(".td-screenshot-remove").remove();
+      
+      html.find("p.link-complex-target").filter(function(){
+        return $(this).text() === "Show this thread";
+      }).first().remove();
+      
+      html.addClass($(document.documentElement).attr("class"));
+      html.addClass($(document.body).attr("class"));
+      
+      html.css("background-color", getClassStyleProperty("column", "background-color"));
+      html.css("border", "none");
+      
+      for(let selector of [ ".js-quote-detail", ".js-media-preview-container", ".js-media" ]){
+        let ele = html.find(selector);
         
-        let isDetail = parent.hasClass("js-tweet-detail");
-        let isReply = !isDetail && (parent.hasClass("js-replies-to") || parent.hasClass("js-replies-before"));
-        
-        selectedTweet = selectedTweet.clone();
-        
-        let container = selectedTweet.children().first();
-        container.addClass($(document.documentElement).attr("class"));
-        container.addClass($(document.body).attr("class"));
-        container.css("padding-bottom", "0");
-        
-        setImportantProperty(selectedTweet.find(".js-tweet-text"), "margin-bottom", "8px");
-        setImportantProperty(selectedTweet.find(".js-quote-detail"), "margin-bottom", "10px");
-        setImportantProperty(selectedTweet.find(".js-poll-link").next(), "margin-bottom", "8px");
-        
-        if (isDetail){
-          if (selectedTweet.find("[class*='media-grid-']").length > 0){
-            setImportantProperty(selectedTweet.find(".js-tweet-media"), "margin-bottom", "10px");
-          }
-          else{
-            setImportantProperty(selectedTweet.find(".js-tweet-media"), "margin-bottom", "6px");
-          }
-          
-          setImportantProperty(selectedTweet.find(".js-media-preview-container"), "margin-bottom", "4px");
-          selectedTweet.find(".js-translate-call-to-action").first().remove();
-          selectedTweet.find(".js-tweet").first().nextAll().remove();
-          selectedTweet.find("footer").last().prevUntil(":not(.txt-mute)").addBack().remove(); // footer, date, location
+        if (ele.length){
+          ele[0].style.setProperty("margin-bottom", "2px", "important");
+          break;
         }
-        else{
-          setImportantProperty(selectedTweet.find(".js-media-preview-container").filter(function(){
-            return $(this).closest(".js-quote-detail").length === 0;
-          }), "margin-bottom", "10px");
-          
-          selectedTweet.find("footer").last().remove();
-        }
-        
-        if (isReply){
-          selectedTweet.find(".is-conversation").removeClass("is-conversation");
-          selectedTweet.find(".thread").remove();
-        }
-        
-        selectedTweet.find("p.link-complex-target").filter(function(){
-          return $(this).text() === "Show this thread";
-        }).first().remove();
-        
-        selectedTweet.find(".js-poll-link").remove();
-        selectedTweet.find(".td-screenshot-remove").remove();
-        
-        let testTweet = selectedTweet.clone().css({
-          position: "absolute",
-          left: "-999px",
-          width: tweetWidth+"px"
-        }).appendTo(document.body);
-        
-        let testTweetAvatar = testTweet.find(".tweet-avatar").first();
-        let avatarBottom = testTweetAvatar.offset().top+testTweetAvatar.height();
-        
-        let realHeight = Math.floor(Math.max(testTweet.height(), avatarBottom+10));
-        testTweet.remove();
-        
-        selectedTweet.find(".js-stream-item-content").first().css("height", "100vh");
-        $TD.screenshotTweet(selectedTweet.html(), tweetWidth, realHeight);
       }
+      
+      let type = chirp.getChirpType();
+      
+      if ((type.startsWith("favorite") || type.startsWith("retweet")) && chirp.isAboutYou()){
+        html.addClass("td-notification-padded");
+      }
+      
+      let testTweet = html.clone().css({
+        position: "absolute",
+        left: "-999px",
+        width: columnWidth+"px"
+      }).appendTo(document.body);
+      
+      let testTweetAvatar = testTweet.find(".tweet-avatar").first();
+      let avatarBottom = testTweetAvatar.length === 1 ? testTweetAvatar.offset().top+testTweetAvatar.height() : 0;
+      
+      let realHeight = Math.floor(Math.max(testTweet.height(), avatarBottom+9));
+      testTweet.remove();
+      
+      html.find(".js-stream-item-content").first().css("height", "100vh");
+      $TD.screenshotTweet(html[0].outerHTML, columnWidth, realHeight);
     };
   })();