From 6aba768156df4a8c6af5578081e889d45e6e207f Mon Sep 17 00:00:00 2001 From: Daniel Morgenstern Date: Wed, 16 Mar 2022 10:30:27 +0100 Subject: [PATCH] 3.1.2 --- assets/manifest.json | 7 +- likers-blocker/_locales/de/messages.json | 178 +++++ likers-blocker/_locales/en/messages.json | 178 +++++ likers-blocker/ichbinhier.css | 84 +++ likers-blocker/ichbinhier.js | 118 ++++ likers-blocker/icon128.png | Bin 0 -> 14601 bytes likers-blocker/icon16.png | Bin 0 -> 14601 bytes likers-blocker/icon256.png | Bin 0 -> 18072 bytes likers-blocker/icon32.png | Bin 0 -> 1677 bytes likers-blocker/icon48.png | Bin 0 -> 2575 bytes likers-blocker/icon64.png | Bin 0 -> 7126 bytes likers-blocker/index.js | 847 +++++++++++++++++++++++ likers-blocker/manifest.json | 22 + likers-blocker/popup.html | 418 +++++++++++ likers-blocker/popup.js | 28 + likers-blocker/style.css | 626 +++++++++++++++++ package-lock.json | 4 +- package.json | 2 +- 18 files changed, 2504 insertions(+), 8 deletions(-) create mode 100644 likers-blocker/_locales/de/messages.json create mode 100644 likers-blocker/_locales/en/messages.json create mode 100644 likers-blocker/ichbinhier.css create mode 100644 likers-blocker/ichbinhier.js create mode 100644 likers-blocker/icon128.png create mode 100644 likers-blocker/icon16.png create mode 100644 likers-blocker/icon256.png create mode 100644 likers-blocker/icon32.png create mode 100644 likers-blocker/icon48.png create mode 100644 likers-blocker/icon64.png create mode 100644 likers-blocker/index.js create mode 100644 likers-blocker/manifest.json create mode 100644 likers-blocker/popup.html create mode 100644 likers-blocker/popup.js create mode 100644 likers-blocker/style.css diff --git a/assets/manifest.json b/assets/manifest.json index 10eb5ac9c..8872f947a 100644 --- a/assets/manifest.json +++ b/assets/manifest.json @@ -1,6 +1,6 @@ { "name": "__MSG_extensionName__", - "version": "3.1.1", + "version": "3.1.2", "description": "__MSG_extensionDescription__", "icons": { "16": "icon16.png", "48": "icon48.png", "128": "icon128.png" }, "content_scripts": [ @@ -11,10 +11,7 @@ "css": ["ichbinhier.css"] } ], - "permissions": [ - "https://twitter.com/*", - "https://ichbinhier-twittertools.herokuapp.com/blocklists" - ], + "permissions": ["https://twitter.com/*", "https://ichbinhier-twittertools.herokuapp.com/blocklists"], "manifest_version": 2, "browser_action": { "default_popup": "popup.html" }, "default_locale": "en" diff --git a/likers-blocker/_locales/de/messages.json b/likers-blocker/_locales/de/messages.json new file mode 100644 index 000000000..9b787f819 --- /dev/null +++ b/likers-blocker/_locales/de/messages.json @@ -0,0 +1,178 @@ +{ + "extensionName": { + "message": "Likers Blocker", + "description": "Name of the extension." + }, + "extensionDescription": { + "message": "Blockiert Accounts, die hassschürende Tweets liken oder retweeten.", + "description": "Describes the extension." + }, + "popup_usage": { + "message": "Kurzanleitung", + "description": "Label of the usage guide" + }, + "popup_usageStep1": { + "message": "Klicke dazu auf einen Tweet und zeige dir die Liste der Liker an.", + "description": "Usage guide step 1" + }, + "popup_usageStep2": { + "message": "Oberhalb der Liste findest du eine Button \"Alle Blockieren\".", + "description": "Usage guide step 2" + }, + "popup_usageStep3": { + "message": "Wenn du darauf klickst und die Aktion bestätigst, öffnet sich der Massenblock-Dienst in einem neuen Fenster.", + "description": "Usage guide step 3" + }, + "popup_usageStep4": { + "message": "Wenn du dort noch nicht angemeldet bist, muss du dich zunächst mit deinem Twitter-Account authentifizieren.", + "description": "Usage guide step 4" + }, + "popup_like": { + "message": "Gefällt mir", + "description": "Label for the Like button" + }, + "popup_donate": { + "message": "Schön, dass dir unsere Arbeit gefällt! 😊
Wir machen das in unserer Freizeit. Das Tool ist und bleibt kostenlos und werbefrei. Vielleicht möchtest du uns ein kleines Trinkgeld als Motivation da lassen?", + "description": "text that encourages the user to donate" + }, + "popup_reportBug": { + "message": "Fehler melden", + "description": "Label for the report bug button " + }, + "popup_tip": { + "message": "Spendiere uns einen Kaffee", + "description": "Label for the donation button" + }, + "popup_share": { + "message": "Erzähle es weiter", + "description": "Label for the share button" + }, + "popup_follow": { + "message": "Folge uns auf twitter", + "description": "Label for the follow button" + }, + "popup_contact": { + "message": "Kontakt", + "description": "label of the contact link" + }, + "popup_tweet": { + "message": "https://twitter.com/share?text=Mit dem @LikersBlocker könnt ihr Leute blocken, die menschenverachtende Tweets liken.&url=https://dmstern.github.io/likers-blocker&hashtags=LikersBlocker,sayNoToHateSpeech,ichbinhier", + "description": "href for the tweet button. Contains a prefilled tweet text." + }, + "ui_blockAll": { + "message": "Alle Blockieren", + "description": "Label for the Block all button" + }, + "ui_usersFound": { + "message": "Nutzer gefunden.", + "description": "Message how many users have been collected. Gets prefixed the number of collected users." + }, + "ui_collectingUsernames": { + "message": "Sammle Nutzernamen ein", + "description": "Message that tells the user that the tool is collecting users from a list." + }, + "ui_cancel": { + "message": "Abbrechen", + "description": "Label for the cancel button" + }, + "ui_finish": { + "message": "Danke, reicht.", + "description": "Label for the finish button" + }, + "ui_technicalConstraints": { + "message": "Für besonders große Like-Zahlen können aus technischen Gründen nicht alle Nutzernamen eingesammelt werden.", + "description": "Message that is shown if the list is large and not all users may be collected." + }, + "ui_repeatBlocking": { + "message": "Du kannst den Block-Vorgang nach dem Bestätigen einfach mehrfach wiederholen, um mehr Nutzer zu blockieren.", + "description": "Hint for the user to workaround the user amount limit." + }, + "ui_twitterHides": { + "message": "Evtl. werden einige von Twitter ausgeblendet.", + "description": "Message that is shown during or after collecting that tells the user that some users may hidden." + }, + "ui_onlyListItems": { + "message": "Wir können nur Liker aus dieser Liste blocken.", + "description": "Message that tells the user, that only accounts that occur in the list can be blocked." + }, + "ui_blockRetweeters": { + "message": "Auch alle Retweeter blockieren?", + "description": "Label of the checkbox where the user can chose to also block retweeters of the liked tweet." + }, + "ui_onlyDirectRetweeters": { + "message": "Beinhaltet nur direkte Retweeter ohne Kommentar", + "description": "Title (tooltip) of the retweeters checkbox" + }, + "ui_ok": { + "message": "OK", + "description": "Label of the OK button" + }, + "ui_export": { + "message": "Exportieren", + "description": "Title of the export button" + }, + "ui_copyToShare": { + "message": "Link kopieren um als Liste teilen.", + "description": "Label of the copy to clipboard button." + }, + "ui_copied": { + "message": "Kopiert. Teile den Link aus der Zwischenablage mit anderen Personen, um deine Blockliste mit ihnen zu teilen.", + "description": "Message that tells the user that the content of the block list has been copied to clipboard." + }, + "ui_urlLimit": { + "message": "Aufgrund einer technischen URL-Längenbeschränkung wird die Block-Liste evtl. in mehrere Links aufgeteilt.", + "description": "Info that tells the user that the block list may be divided into several links." + }, + "ui_takeAMoment": { + "message": "Abhängig von der Anzahl geblockter Accounts kann das eine Weile dauern.", + "description": "Info that the collection of blocked accounts to export them may take long." + }, + "ui_divided": { + "message": "In mehrere Links aufgeteilt, weil URL sonst zu lang.", + "description": "Message that is shown after the collection of blocked account to export them if the list was divided into several links." + }, + "ui_confirmButtonLabel": { + "message": "Blockiere Teil", + "description": "The block button label for blocking each portion of accounts in large lists." + }, + "ui_warningHeading": { + "message": "Hoppla! Sieht aus, als hat sich die Oberfläche aufgehängt.", + "description": "The heading of the warning popup when the UI is hanging." + }, + "ui_warningText": { + "message": "Das kann passieren, wenn du das Browser-Fenster wechselst. Bitte klicke OK oder scrolle ein bisschen mit dem Mausrad, um den Einsammel-Prozess forzusetzen.", + "description": "The main text of the UI hanging warning which tells the user what to do to continue the scroll process." + }, + "ui_doNotShowAgain": { + "message": "Nicht mehr anzeigen", + "description": "Button label for do not show again" + }, + "ui_newRelease": { + "message": "Du hast die neuste Likers Blocker Version. 🎉 Schau dir an, was es neues gibt.", + "description": "New Release icon title" + }, + "ichbinhier_heading": { + "message": "Folgende User blockieren?", + "description": "The heading of block confirmation page" + }, + "ichbinhier_blockButtonLabel": { + "message": "Blockieren", + "description": "The label of the block button on the confirmation page" + }, + "ichbinhier_privacyInfo": { + "message": "Wir speichern keine Daten bis auf die üblichen Server-Logfiles.", + "description": "Login page: general privacy info that tells the user that there are not stored any private data." + }, + "ichbinhier_pivacyInfoHeroku": { + "message": "Hier finden sich", + "description": "Login page: \"here you can find\". Is suffixed with ichbinhier_pivacyInfoHerokuLinkLabel" + }, + "ichbinhier_pivacyInfoHerokuLinkLabel": { + "message": "Privacy-Informationen zum Hoster Heroku", + "description": "Login page: privacy info Heroku link label" + }, + "ichbinhier_repoInfo": { + "message": "Den Source-Code für diese Webanwendung findet man auf", + "description": "Login page: info where you can find the source code. Is suffixed with \"GitHub\"" + } +} diff --git a/likers-blocker/_locales/en/messages.json b/likers-blocker/_locales/en/messages.json new file mode 100644 index 000000000..e34de5161 --- /dev/null +++ b/likers-blocker/_locales/en/messages.json @@ -0,0 +1,178 @@ +{ + "extensionName": { + "message": "Likers Blocker", + "description": "Name of the extension." + }, + "extensionDescription": { + "message": "block all visible likers or retweeters of a tweet.", + "description": "Describes the extension." + }, + "popup_usage": { + "message": "Usage", + "description": "Label of the usage guide" + }, + "popup_usageStep1": { + "message": "Once you click on a tweet, there is a link which indicates how many people liked this tweet. Click on that link to get the list of all likers.", + "description": "Usage guide step 1" + }, + "popup_usageStep2": { + "message": "Then click on the new button on the top which says \"Block all\".", + "description": "Usage guide step 2" + }, + "popup_usageStep3": { + "message": "All visible users are being collected. You can chose to block also direct retweeters and then confirm it with the OK Button.", + "description": "Usage guide step 3" + }, + "popup_usageStep4": { + "message": "The list of users that are about to be blocked opens in new tab. You can still abort, exclude certain users or confirm the block action. If you use it for the first time, you will have to authorize the app to access your twitter account.", + "description": "Usage guide step 4" + }, + "popup_like": { + "message": "Like", + "description": "Label for the Like button" + }, + "popup_donate": { + "message": "Glad that you appreciate our work! 😊
We do this in our free time. This tool is and remains free for everyone and free from ads. Would you consider to donate a little tip?", + "description": "text that encourages the user to donate" + }, + "popup_reportBug": { + "message": "Report bug", + "description": "Label for the report bug button " + }, + "popup_tip": { + "message": "Buy us a coffee", + "description": "Label for the donation button" + }, + "popup_share": { + "message": "Spread the word", + "description": "Label for the share button" + }, + "popup_follow": { + "message": "Follow us on twitter", + "description": "Label for the follow button" + }, + "popup_contact": { + "message": "Contact", + "description": "label of the contact link" + }, + "popup_tweet": { + "message": "https://twitter.com/share?text=With the @LikersBlocker you can block people that like hate speech.&url=https://dmstern.github.io/likers-blocker&hashtags=LikersBlocker,sayNoToHateSpeech,ichbinhier", + "description": "href for the tweet button. Contains a prefilled tweet text." + }, + "ui_blockAll": { + "message": "Block all", + "description": "Label for the Block all button" + }, + "ui_usersFound": { + "message": "users found.", + "description": "Message how many users have been collected. Gets prefixed the number of collected users." + }, + "ui_collectingUsernames": { + "message": "Collecting usernames", + "description": "Message that tells the user that the tool is collecting users from a list." + }, + "ui_cancel": { + "message": "Cancel", + "description": "Label for the cancel button" + }, + "ui_finish": { + "message": "This is fine, thanks.", + "description": "Label for the finish button" + }, + "ui_technicalConstraints": { + "message": "For large like amounts, not all usernames can be collected.", + "description": "Message that is shown if the list is large and not all users may be collected." + }, + "ui_repeatBlocking": { + "message": "You can repeat the block process after the confirmation to block more users.", + "description": "Hint for the user to workaround the user amount limit." + }, + "ui_twitterHides": { + "message": "Some users may be hidden by Twitter.", + "description": "Message that is shown during or after collecting that tells the user that some users may be hidden." + }, + "ui_onlyListItems": { + "message": "We can only block users from this list", + "description": "Message that tells the user, that only accounts that occur in the list can be blocked." + }, + "ui_blockRetweeters": { + "message": "Also block retweeters?", + "description": "Label of the checkbox where the user can chose to also block retweeters of the liked tweet." + }, + "ui_onlyDirectRetweeters": { + "message": "Only includes direct retweeters without a comment.", + "description": "Title (tooltip) of the retweeters checkbox" + }, + "ui_ok": { + "message": "OK", + "description": "Label of the OK button" + }, + "ui_export": { + "message": "Export", + "description": "Title of the export button" + }, + "ui_copyToShare": { + "message": "Copy link to share block list.", + "description": "Label of the copy to clipboard button." + }, + "ui_copied": { + "message": "Copied. Share the link with other persons to share your block list with them.", + "description": "Message that tells the user that the content of the block list has been copied to clipboard." + }, + "ui_urlLimit": { + "message": "Due to a technical URL length limit, the block list may be divided into several links.", + "description": "Info that tells the user that the block list may be divided into several links." + }, + "ui_takeAMoment": { + "message": "Depending on the number of blocked accounts, this may take a while.", + "description": "Info that the collection of blocked accounts to export them may take long." + }, + "ui_divided": { + "message": "Divided into several links due to URL length limit.", + "description": "Message that is shown after the collection of blocked account to export them if the list was divided into several links." + }, + "ui_confirmButtonLabel": { + "message": "Block part", + "description": "The block button label for blocking each portion of accounts in large lists." + }, + "ui_warningHeading": { + "message": "Oops! Seems like your UI is hanging.", + "description": "The heading of the warning popup when the UI is hanging." + }, + "ui_warningText": { + "message": "Maybe you have changed the browser window. Please click OK or scroll with your mouse wheel to continue the user collection process.", + "description": "The main text of the UI hanging warning which tells the user what to do to continue the scroll process." + }, + "ui_doNotShowAgain": { + "message": "Don't show again", + "description": "Button label for do not show again" + }, + "ui_newRelease": { + "message": "You installed the latest LikersBlocker version. 🎉 See what's new.", + "description": "New Release icon title" + }, + "ichbinhier_heading": { + "message": "Block following users?", + "description": "The heading of block confirmation page" + }, + "ichbinhier_blockButtonLabel": { + "message": "Block", + "description": "The label of the block button on the confirmation page" + }, + "ichbinhier_privacyInfo": { + "message": "We do not store any data except the usual server log files.", + "description": "Login page: general privacy info that tells the user that there are not stored any private data." + }, + "ichbinhier_pivacyInfoHeroku": { + "message": "Here you can find", + "description": "Login page: \"here you can find\". Is suffixed with ichbinhier_pivacyInfoHerokuLinkLabel" + }, + "ichbinhier_pivacyInfoHerokuLinkLabel": { + "message": "privacy information to our hosting service Heroku", + "description": "Login page: privacy info Heroku link label" + }, + "ichbinhier_repoInfo": { + "message": "You can find the source code of this web application on", + "description": "Login page: info where you can find the source code. Is suffixed with \"GitHub\"" + } +} diff --git a/likers-blocker/ichbinhier.css b/likers-blocker/ichbinhier.css new file mode 100644 index 000000000..d55952d9b --- /dev/null +++ b/likers-blocker/ichbinhier.css @@ -0,0 +1,84 @@ +:root { + --navbar-fg-color: #626262; + --navbar-fg-color--hover: #999; + --bg-color: #fff; + --fg-color: #333; +} + +@media (prefers-color-scheme: dark) { + :root { + --navbar-fg-color: #888888; + --navbar-fg-color--hover: #ababab; + --bg-color: #333; + --fg-color: #ddd; + } +} + +@media (prefers-color-scheme: light) { + :root { + --navbar-fg-color: #626262; + --navbar-fg-color--hover: #999; + --bg-color: #fff; + --fg-color: #333; + } +} + +body { + background: var(--bg-color); + color: var(--fg-color); +} + +.block-button { + position: absolute; + top: 0; + left: 50%; +} + +.container a[href^="https://api.twitter.com"] button +{ + display: block; + margin-bottom: 2rem; +} + +.container { + max-width: 1000px; +} + +main .container { + margin-top: 30px; + margin-bottom: 50px; +} + +nav.navbar .nav-item:last-child { + align-self: flex-end; + margin-left: auto; +} + +svg.w-6.h-6 { + width: auto; + height: 1.2em; +} + +.navbar-light .navbar-nav .nav-link { + display: flex; + align-items: center; + transition: color 400ms ease; + color: var(--navbar-fg-color); +} + +.navbar-light .navbar-nav .nav-link:hover { + color: var(--navbar-fg-color--hover); +} + +.navbar .nav-link svg { + margin-right: 10px; +} + +a.nav-link svg { + transform: scale(1); + transition: transform 400ms ease; +} + +a.nav-link:hover svg { + transform: scale(1.1); +} diff --git a/likers-blocker/ichbinhier.js b/likers-blocker/ichbinhier.js new file mode 100644 index 000000000..fad92c962 --- /dev/null +++ b/likers-blocker/ichbinhier.js @@ -0,0 +1,118 @@ +class IchBinHier { + constructor() { + this.client = typeof browser === "undefined" ? chrome : browser; + + this.icons = { + Home: ``, + Login: ``, + Logout: ``, + }; + + this.setUpLoginPage(); + this.setUpHeader(); + this.setUpMain(); + this.setUpConfirmationPage(); + } + + setUpConfirmationPage() { + const heading = document.querySelector("form h2"); + if (heading) { + heading.innerHTML = this.client.i18n.getMessage("ichbinhier_heading"); + } + + const blockButton = document.querySelector(".btn.btn-danger"); + if (blockButton) { + blockButton.classList.add("block-button"); + blockButton.value = this.client.i18n.getMessage("ichbinhier_blockButtonLabel"); + blockButton.setAttribute("onclick", ""); + blockButton.setAttribute("type", "submit"); + } + + const form = document.querySelector(".container form"); + if (form) { + const formMarkup = form.outerHTML; + form.parentElement.innerHTML = ` +
+
+ ${formMarkup} +
+
`; + } + } + + setUpHeader() { + const nav = Array.from(document.querySelectorAll("body > .container > .row > .col-md-8 > a")); + const originalContainer = document.querySelector(".container"); + const header = document.createElement("header"); + + header.innerHTML = ` + `; + + document.body.removeChild(originalContainer); + document.body.prepend(header); + } + + setUpLoginPage() { + const isLoginPage = + document.querySelectorAll("body > .container > .row > .col-md-8 > a").length === 2; + + if (!isLoginPage) { + return; + } + + document.querySelectorAll("p").forEach((p) => { + p.parentNode.removeChild(p); + }); + + const newP1 = document.createElement("p"); + const newP2 = document.createElement("p"); + newP1.innerHTML = ` + ${this.client.i18n.getMessage("ichbinhier_privacyInfo")} + ${this.client.i18n.getMessage("ichbinhier_pivacyInfoHeroku")} + ${this.client.i18n.getMessage( + "ichbinhier_pivacyInfoHerokuLinkLabel" + )}.`; + newP2.innerHTML = ` + ${this.client.i18n.getMessage("ichbinhier_repoInfo")} + Github.`; + + const container = document.querySelector("body > .container:nth-child(2)"); + container.append(newP1, newP2); + } + + getIcon(label) { + return Object.keys(this.icons).includes(label) ? this.icons[label] : ""; + } + + setUpMain() { + const main = document.createElement("main"); + const originalContainer = document.querySelector(".container:nth-child(2)"); + main.innerHTML = `
${originalContainer.innerHTML}
`; + + const output = document.getElementById("output"); + if (output) { + main.append(output); + } + + document.body.removeChild(originalContainer); + document.body.append(main); + } +} + +new IchBinHier(); diff --git a/likers-blocker/icon128.png b/likers-blocker/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..76f6a9f352762604b1e290b0e05adba5e3f9ded5 GIT binary patch literal 14601 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 literal 0 HcmV?d00001 diff --git a/likers-blocker/icon16.png b/likers-blocker/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..76f6a9f352762604b1e290b0e05adba5e3f9ded5 GIT binary patch literal 14601 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 literal 0 HcmV?d00001 diff --git a/likers-blocker/icon256.png b/likers-blocker/icon256.png new file mode 100644 index 0000000000000000000000000000000000000000..030e12192504a558337bf68396dccbc497d39d33 GIT binary patch literal 18072 zcmbq*g;N~Q6Yt$|xVr~;4ess)*WeN)xLc6J2~P0f5bPju@Wu6T4Hhi81a}E8kKe0$ zf5EG*t(ltInXTUGo$gQfXXdM>x*{eT85#fpz*JU}(*^*5Z&e@w1?jCY@u;wUE0C;I z73Bc0|GNr1%TwQ4P~DV1dcO5o_}>kbVb1Y;Yee=^R+C5m3nIf5#Z>Pi_6Go{0m^dH zx_(Q?dA@$8bJ?dM>uY;T9?gGaos|{8{oD#e9U$qIl0io$Ax0U<^5ssW`+A@G^P}nYu~=7ZNAc`Z-fKt-4QDxt=!U@IDC|b0DvGc3J$f@|6k=dbr0SrVlvwmmYO!2_Yn}B4G@i@SC*C? z#lDaQ-!StOE_}Fu64u|HgAjrL>MV4zfCYGm^PeOcf-vpWPZh!9Rq9ocDK#>IFn9@> zOmR+@J`o4oaWO~tkr#7KTM7XD2Jy9BVbsEmoKwoD^#`@GilF^4Ow%sJ5yH+wAprPG zxojmzCyMS51%uu2B!^zAA<9n@H+G&BH2q1BlxoTHRBkAX$j69AxMcD+&Bfx(2r*bf z_U4u+v3}=_2p|+UGzAYj7PrG2T7wMxm;U8DnI4>J_P1u1c)AYdcaQ#U?AF$^!UVYw;1LW(RbT_8SQ z^F!V8%E-p8PdrKDM@$5`D4f#*8HQ<(cmowe4(KbQ``!GavB3idyPX!6T79K=ISNe1 zlT(#Sq`V`Qa^Hft4`mDK;MAhmdi=B% zY*q>++aC~Y5s2xrp7<<|-I0S~-Ko~@QHHcpn%GXrO(jn5bCtIg;;dL@_K!0V3=n8o z{g|`cKumBq3=5Hka88ww6T}+IV-dJDRd94Bh0od76Hx^t{FH}sBz;?v61vq^Doy>K z8p3{Yz;@x3-XnRt&25qcuJS#NDkccnMk# z#n3f@3wBr}5STlXVE%EN#49UyT;`v8sAFAEXNQG151Aq)4@Cq0p%8kkJ$aCD{3M?& zfq}A-hW&~oA4li{av4&%3)eOC`3N?JFT` zNJ!KiL{C8U*h8!s3lMf>Gv9bGg85fkH*^rlkL!Ec0)~71g!;-II%MQY|7}Kmj1ja7 zQTgW>=h&vBn-@X+o?@Mn@yvsN9o`a){~UBQbuZs zCk{utuaXdbYhBA1T+Q%*w@gU8FT$Hdd;m7-ci^D*7N3voZ%-YZ8|aBTcvZ)&fOQc( zVXUIS3CiXT?sL3z-hMIH*#pi>@!JNJ31N_Z4Ri!|?(v!@!G=c=<0M z{l#9-;*}fN5cvtcO8kRfL@F* zE2tE5!Vov^i*9VT>zFCbYv^|&RxRAGuRi!FQihcHM10l5Zn_G^@nD5Q0_yl7C<((Z z7B?B2d_H!(3XXi!Svj*N@>4T4Td25vW4LjKlP12@SUiKU)n6;U7aZ~(uHoLZzz?#u z*i~u2Gw%Li9s_-mFJ5Y&6|D_tl7GM;W_aRNKxcoaTKc8Uw)r-RJcbc=RH4ykIvfG@4 zgtC-Y5MbVm=Dus&6Lp1W`%Ghj4+AcS&cwo&rA4{PxT?)lrWp?=NPU%2JSeOOOFr}n zX#VQY(3@0gL2v!I74;9mMSCeuX!d^VU#5$3(c8F(o3$0Vazm^upg>?1JZFSOB3!TK zK+d0hlfj~snFE9@>r%bfae{5@U21f7-7cH>zC_ncOzHio$y5>pdxZ6;@_MOmSPh&79I%!cuHH315Tgz1tQrm zaQSKL=S&i1)CD7qEWI)2Pst%g!Yqfl-KdtaU7*qI7$!m=AqzsM(Z)7vl?7flOA{XQ zA?{03F=5{6`yBmEm;*tXDh=XOhVt+B=+0NhC zT0bbShQ)1`T!kZ%5<^Uo;@?R2t|@8b3o|wgMeL`0=Krc0A>ul&sea7O;A`wU;g_$Z z*Li%KlJg)glm~Jx0oJ8Tq*}kdSgE32AwD%@_N@q6i@~_8G3lCtLr#S|XO;IlTLPGH zY+Qf9c<2^;6SzJDV8mL5Sc zYCuPcHa1$`Q{RUe_-W30Wz5WcFWq%+tqS&JX(L^F{3SieD{4)}#@re*3z$9=7qn-#ykNY(bJ z3%=Mz4iW6RDLeaoO|m5fHt2HVCfC93VDb_=Gf$KRLTDX`?8I~BbM7|;XNF5u6w7~$ z{pYPxvUtHo1Up0)G@6Odnkr0Ug+zZv(UKG$GH<}(4Ju$fs1@^$OhD-GkNbgU&?M*< z=o%G&kY_>#z71SO;LQ;7;{l1f-Mdw0FA?iZX_}Ot8$44M4)T;NeJrXMiQoUEMHIFI%+(0^9i_G5t=Gkp@89aT z5Njv}P?oX2{{}l6o`bJ5K6QKP#gjVGOm4@#m{_v8+fmnhes()52de4C$ButHc(RGUc-AeDCOkVh8^{j6S2PW4jz!Q zK=ZQo>-Ftb5~6L1h{J8XXxRG=(kS;|k~3RNrO`O~1lLD!mBPGrR_0PXYluUHe+6mE z$WcZe`Jat9E22>CYLE;};zMgOm6LFs&70zTJhgCBLMrwfs+SnrCoc}fzvFT$W1Oq` zZlN<2%$iWE-tTv2t35W`@S?-enrb! z?jCr~wHO?)YxmitP$ijbLx|UyHM8Z-1BhKW*V-1+q$xIstEkw_^rF(MBnO3bj*ui+D=(W zaE&gsoBA`IUp9O@qv%v>RXbsp^N1i?5%&e?hgda|tb&2OTQy9J86AxXJ`dHPYo+y| zYZ~{|MLOdk&Z^nZl$M+~`j|&d(L63cePg4TU>#i2>kA>Sd%&plp{$zoGkDW`)VHn@ z_LWc{*}-w?f1K4Ma%ISWdg1bD=F*?kRrS2p-DY`+8J6|0o{Z zwCDiX@uJy`*`R$uAi$Z>w>8m^O1c$)c`iMH1Z!OO-&NSxuCs|fj zwDrWrglw}hHU7o0Y5*jA)RENX5wtknI%Cb|v{Sl7zBS-T{k~@4EasJVW%v(0c!Gda zlV&s%v9qfY8ldDh{x*f)Y`PKZQ^>gQklM7RK&Xx>4v{Pgga=T*yc>KCZs+IXip7)X zW92R!y!K}QPK2Gf;r?a2=!A#XPH8xlhFMnbLk;wA3=Wbzt~Z{d&fN*gKcQZLO1Dhy z#Y$ISGeJRyq`67E3Ax?uv1j~C^WyikoO4OebOe(K?)AF7I7OY#H5R+P&i_tP2CRzw z;mvjbZ9D}>1zY@-={5w8XxUw5=O0apIx#DvE8uaEsJ#wvQjqY(2l>k$4F4(-AIsqdi)~5egV;(9t1PKh9h%I`~#Fze}gTYw0V+0=r4%&_qH%;A}p)Xef zSX>fkX)f19IR)Jmn^bk-s?S}8VjKKvwX9CDv!(hrtUE*yVqYe}6@GC2di1&lvil2_ z)}QEeyTUk_|D(q~GOquLK|F9~ltg=w(>zP!HZ-{ff1*!^-b3=*?3 z6#vomA<^b5Y4ujm_IGd4#sYv{^hG+!nqk~cz>+Kv+)$p0>ZFD6>6_d(%nWBNX zRwxSJE^`A`cEw{T1?mtMSy^)k4&|ii?oDnUr+=_8r?_lh#yqM>Bjbq7fP8#Lv@;GNswtg(~pPq7NT7C}KT)s8Pw@M2f zrA!_3DSb)r_D@NJL&6GoH_wJWddd)8HT^_4@vu123tPAHVL080(`WSKA(FVrX1dd_ zCvu$$@|f5ik735Fj+aukz!x+&3Q~|JZgJn`qOn-E+JCn7{wg#%3W-)BLh&gL8O-** z3(kG&)B$8Edz!0zQ6xfsI=ijN_iW^px>sN{`M=u^J8gDW&kr=82KmYZrp&8GWkLTU zIztn4$~x^hjLTQkOKMtycSJs?knJnap9s(2-(PAg2RT>)S-#-@OrK*wTZfMdLYQnC>N5UyYM?m}rfZO_%)1c?o|Fj$t&3 z;DGnhR`(2d-9$1VWS_esR(%KCFx#i}GJ#!?SnDK$${JP4H@IQAccjHtlqHnWMC$x! ztIetkESH2EafX(LlI{d|f+bIi%B%Gg(y{>O9aWjZ6!OqlrL5QB;8Wa48|ro49VzA2 zN9>bDQ!R1Y(^1M!y69(rWBEU`c9R7s9RmJ5n63VD4BK&dC5s<=$HLeZKO$2&nHz4E zo}HhK%I48-kX1)K-ox#Ax*J828USN*AAvKoU9i8avrfhXdBt1$%uk-ZLBB4t)8=WO zKCigXr#oMTOxdfLCAxp2n8y&C-0P!4Zi;oIf=1I);e5ECE_mLVE_yzx^%oa!UlViH z9@*6@$?dCA&5&F4z;pEfub7xt3`vY9V6Nt;=~a1|7pG|t9cE3$r*F_;f)>mcT3o&{ zBIgKhO|(GLBAjbQYkhtv=K^yg1m@~?bK|NEzM?144+`>*n=wK+ST9XxyFznnSUlv+ zz|_;mTj{v$4)lwhbdnX;7HmiydbKtt-$AvoB^(t1+>Tlwt_k;J} zd#QlI4$oiUWK)^#T~nArCZ?}F?;BU2U)|663PE+}V5>R^X<`{-#v?*$Go@`_r% zPAc44QS4IUGA-|PB8u|us1(W_Z_L`1;oB<$yYl+YZ?Pw}tB z4Fz4@d%KmR>5B~o1qJ*7vC7_~l%-OHGpZj@-+`=y;wRyA<$_-=UbK?#aY19$f^TaH zS$4O>!bhr!lq7!D7pN&Bb93>f^G0ICh$P8eQWUTNFJ)cvhug}i0#GxZZhl~EN3LT; zgQp;YyS;J7{D6Di%*^=S4*ZGFt#dM3tu9=&pkF^Q&%VB9>7b$wH@TJ(>(#<_ni9fc%iFVkrmt-UL>kOWGf_f9yg4`*Zka9Z5XU-WWfbl$3Z37^65 z25#Qn9n2?awXEHV;r|u{ov*Z16%$(rX-j^r#`ZI^RQ)uheb)bLnYwsFNct4f*Z7Yz+h@XtY^g`Txx+5znY@uG>Jh@xvb*>)&dWEEPz{Wy@h(tMf= zS_^axYyw3AGD`>qGYmvODgrKRxCZpYA$N5w&dJ&)p_MNYULMO)4>iNMx^C?~>;oE{O`cJ4P( z{c}SdGuog>ev4`0Pr}cf9uP-@d)<{rM?wFgXRV0Lx{|@C2GC_F8zP!f`8}_}6fsD1 zR{q}%0Y#fB+!ZWd-8FjvXBr|e1ITI^JaZ_X#*H~ zUwdCM)CDXEnuaR_kGC;7A^2#GZ-L3PyW_!hIv#w*`WS$m0=ul zn_MLTxJNDcne60&Yzs2iEb(L#nEX!m=KhOcxygv+sH`tb
Xml-TYl0X=4B6liXF_>sOiJh?{ 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 Xx~FCy1W{mj00000NkvXXu0mjf0!&A| literal 0 HcmV?d00001 diff --git a/likers-blocker/icon48.png b/likers-blocker/icon48.png new file mode 100644 index 0000000000000000000000000000000000000000..5d46318011c742a6ab51c42836b1726f004f258b GIT binary patch literal 2575 zcmV+q3h?!bP)yDuMH$E1 z7I_)VBZ-0vKHAZWcE(OEppLecv7)q=s)Z&21X@5Drl=KAD}sWQwkhG6Coe-19tn`- zp1t}ZAtv{nn_LpL|4;Xe+a-dW$$QN!}|oXcI@X&~9aH#+8BK2g=Y7|e?J!raOZO>waX zWkYkWu#SBk*}bhX`s_ zSn62w9zHD}3WjF}Ep`=cq)CNXv35gI`rXN$W*vrs`&OJVwRN`w8+_E4S~V+o zjGPr{DQp!$tQ&kZ%2YYP5PJ8(;OxGg;OmQo^3~@|OR|GcgbGWN3-f38UQ;|eAnt|+kzSFAwKP*$RDHZ^ z4zou!To5L2F6w&vls*MKO5}5;C5}0c-niqjUp|RQc9^c#ICY5$1*@wJKx0+uc^eI` zW9Ic-Ta=8k>!TzOAOb(>-LLn0Ruu#Rdj9oL(&r2~z_2f&C9%rWA&N1qr2y4<7D z##J#*nPgt<1jcp1@dYRMSwbJulmI#c5xEQNyzZGAt~;7KBhCba+>GZ$ z*5W~XmThybjPdF&1}Z2i9k&Nnk`njjeuPR{m`duM&={lW_2EV$W)lFGOFQHI%YoDi zC}Q6W*Qn@dqe_}bp>`VpMytODhHXO8&l-OjPiht=&4}QsFT_Y;qqP=(#r)cb>fZni z?Dgn`AqJ(V$0lSC15_P9`6=-KT!rfH4Z(GdoJ_fozL&wLa0}Wljn(GtQ4OG;6839@ z$inhF6V3tDtM#jZd-&D_wHj*9Jl4vKH1>8ngl z@4qJ}rR-Mat*AZwkpULuuVDV_HHb#}E|kZr?;L#U!eda3Ux|OlAl^(PF{V`oXmRHV zMAhc-%%#fQ)ob}q;Xb~<>t8(h?xtwWHdc-wl-HV*jrSQ>ZB*GGE>)}PEuT+K9CFa2 z^Dc%sK<}Db@)s>;{LWp?vU@kZ&(x2$wPp6X6Ob8*v|1`lYfg6O}lPX1w=Wwh3 zXUcCB-Fz_tOxe1fVTX@+R1ggA?Aq< z*)EwtyUnHxc;%LxSU2igkKD1AU%l}ct}QMJ_xo_=?WvysSQD4A;c`*gX6ozBX1rM@ zsU$tevkGS>#aFtna~tq^Gy$jx&rG_V&BHQ0x?n?yg-e$)^yu*m>=#x~9Q=ykJY~bO zz72%$0S&q_TTJS~yw8Ch;YLREUcbpsO-?!lb|P>-njl`qGX=wi>G=jEk& zBv+jHdsRcqoJe!1)tNrhZ37N0sc1R}G|!_}%|19h$F~fwnvl8`WCBndO%Qc~06)!{ zPDxxJkFM{j)2w;nrGX_+Pxmbx5099V05UCHE-HD@bfIx@miv$i#JKjUNTjMJ40>CX zn}MkM`qkYp;h`DXRQB+;SVb8|gIQOUe0SGyUC51j7H{jZMq=t#HU|)2m|Ka;t3G~n ziqf;jL?Tr=G366$84Eg9ted7oset((x265Ju#b%4e}Nq%X9ePF&u#~<@o~Pv z)YN4rl&?P57Q#0xkvK5hpOSa$JI^6 znP*Bf4!nVq*~U~Z$i$?=y!GLVHa>7<&jMW>(J$nM9P{Mhg51(J9Jh-@8Pk$t)I6s! zHIgqCW+m^*f6Y(XX3L~0h~Lx3CnkkuV$Git_vL;hQC@r$q;zP`w=nKKAk%?BgrP3z z14)I;{8D`T0RWVyO&hOba-rQ8OF8f!$W{Y;t#!*TTutjuT@PzaqCtj&-aunv=2zdh z#A#8o6Zht~d6|l;Y1Oo`SK^Wj37H>-Z&*M0-igDJuxI)H#Qx>qM0o`G(myY? zz*%5^jdT8nXvjkc+J?m$Sp!fW6PQhe{(c8gBgkUcaTc^Zq@qEG`<`XPGkdEIPC+GG z;kpjYrJ&nH$k!NMk@WB79qK=IqH+5Lj;79tt9L?URP=fyWN2eUw+~+&hG&2iA{?^H l9#PpAbYr%(cOXWC{{cIKq!m8$i2ncp002ovPDHLkV1hR*>KOn4 literal 0 HcmV?d00001 diff --git a/likers-blocker/icon64.png b/likers-blocker/icon64.png new file mode 100644 index 0000000000000000000000000000000000000000..764b32d14a73c167d45e1b736cf6fc2782e3f336 GIT binary patch literal 7126 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 { + o = setInterval(function () { + if ((l++, l >= 10 && (clearInterval(o), r(null)), e)) { + let e = s ? s.querySelectorAll(t) : document.querySelectorAll(t); + e.length >= i && (n = e.item(e.length - 1)); + } else n = s ? s.querySelector(t) : document.querySelector(t); + n && "none" !== n.style.display && null !== n.offsetParent && (clearInterval(o), r(n)); + }, 500); + }); + } + var i, + s = + '', + o = + '', + n = + '', + l = + '', + r = + '', + a = + '', + c = + '', + d = + '', + h = + '', + u = + '', + p = + '', + g = + '', + b = + '', + m = + '', + v = + '', + w = "https://ichbinhier-twittertools.herokuapp.com/blocklists", + f = 2048, + y = 200, + k = 1600, + L = 2; + class S { + constructor(t) { + (this.color = t.color), + (this.fontFamily = t.fontFamily), + (this.fontStyle = t.fontStyle), + (this.fontWeight = t.fontWeight); + } + } + class C { + static get backgroundColor() { + return getComputedStyle(document.querySelector("body")).backgroundColor; + } + static get twitterBrandColor() { + return window.getComputedStyle(document.querySelector("a[href='/home'] svg")).color; + } + static get highlightColor() { + return getComputedStyle(document.querySelector("a[href='/compose/tweet']")).backgroundColor; + } + static get popupContainer() { + return document.querySelector("[aria-modal=true]") || document.querySelector("body"); + } + static get isMobile() { + return document.documentElement.clientWidth < 699; + } + static get viewport() { + return this.isMobile ? "mobile" : "desktop"; + } + static getTextStyle(t) { + let e, i, s; + if (t) e = document.querySelector(".js-tweet-text"); + else { + const t = document.querySelector( + "[data-testid=UserCell] > div > div:nth-child(2) > div:nth-child(2)" + ), + i = document.querySelector( + "[data-testid=UserCell] > div > div:nth-child(2) > div > div > a > div > div > div" + ); + e = t || i; + } + return e || (e = document.querySelector("span")), (s = getComputedStyle(e)), (i = new S(s)), i; + } + static isTweetPage() { + return new Promise((t) => { + setTimeout(() => { + t(location.pathname.includes("status") && location.pathname.endsWith("likes")); + }, 1); + }); + } + static isBlockPage() { + return t(this, void 0, void 0, function* () { + return new Promise((t) => { + setTimeout(() => { + let e = + location.href.endsWith("blocked/all") || + location.href.endsWith("settings/content_preferences") || + location.href.endsWith("settings/mute_and_block"); + document.querySelector("body").classList["" + (e ? "add" : "remove")]("lb-block-page"), + t(e); + }, 1); + }); + }); + } + static isListPage() { + return t(this, void 0, void 0, function* () { + return new Promise((t) => { + setTimeout(() => { + const e = location.href.split("/"), + s = e[e.length - 1]; + return ( + location.href.includes("list") && + (location.href.endsWith(i.followers) || location.href.endsWith(i.members)) && + t(i[s]), + t(!1) + ); + }, 1); + }); + }); + } + } + !(function (t) { + (t.members = "members"), (t.followers = "followers"); + })(i || (i = {})); + const _ = "undefined" == typeof browser ? chrome : browser, + B = new Date(), + M = { + retweeters: "lb.include-retweeters", + hideBadgeShare: `lb.${_.runtime.getManifest().version}.hide-badge.share`, + hideBadgeDonate: `lb.${_.runtime.getManifest().version}.hide-badge.donate`, + hideBadgeFollow: `lb.${_.runtime.getManifest().version}.hide-badge.follow`, + hideIdleWarning: `lb.${_.runtime.getManifest().version}.hide-idle-warning`, + packageVersion: "lb.packageVersion", + installedNewReleaseDate: "lb.installedNewReleaseDate", + }, + x = { hide: "true", today: parseInt(`${B.getFullYear()}${B.getMonth()}${B.getDate()}`) }; + class T { + static get packageVersion() { + return localStorage.getItem(M.packageVersion); + } + static get includeRetweeters() { + return localStorage.getItem(M.retweeters) === x.hide; + } + static set includeRetweeters(t) { + localStorage.setItem(M.retweeters, String(t)); + } + static get hideBadgeShare() { + return localStorage.getItem(M.hideBadgeShare) === x.hide; + } + static set hideBadgeShare(t) { + localStorage.setItem(M.hideBadgeShare, String(t)); + } + static get hideBadgeDonate() { + return localStorage.getItem(M.hideBadgeDonate) === x.hide; + } + static set hideBadgeDonate(t) { + localStorage.setItem(M.hideBadgeDonate, String(t)); + } + static get hideBadgeFollow() { + return localStorage.getItem(M.hideBadgeFollow) === x.hide; + } + static set hideBadgeFollow(t) { + localStorage.setItem(M.hideBadgeFollow, String(t)); + } + static get hideIdleWarning() { + return localStorage.getItem(M.hideIdleWarning) === x.hide; + } + static set hideIdleWarning(t) { + localStorage.setItem(M.hideIdleWarning, String(t)); + } + static get installedNewReleaseDate() { + const t = parseInt(localStorage.getItem(M.installedNewReleaseDate)); + return Number.isNaN(t) ? x.today : t; + } + static set installedNewReleaseDate(t) { + localStorage.setItem(M.installedNewReleaseDate, String(t)); + } + static get isNewRelease() { + return x.today < T.installedNewReleaseDate + 3; + } + static storePackageVersion() { + T.packageVersion !== _.runtime.getManifest().version && + ((T.installedNewReleaseDate = x.today), + localStorage.setItem(M.packageVersion, _.runtime.getManifest().version)); + } + } + const q = "undefined" == typeof browser ? chrome : browser, + E = { + mobile: "main > div > div > div > div > div > div", + desktop: "[aria-labelledby=modal-header] > div > div > div > div > div > div > div > div > div", + }; + class $ { + constructor() { + (this.isListLarge = () => + t(this, void 0, void 0, function* () { + return (yield this.getTotalUsersCount()) > y; + })), + (this.handleKeydown = (e) => + t(this, void 0, void 0, function* () { + "Escape" === e.key && (this.stopScrolling(), yield this.closePopup()); + window.setTimeout(() => { + const t = this.popup.matches(":focus-within"); + "Tab" !== e.key || t || this.popup.focus(); + }, 0); + })), + (this.stopScrolling = () => { + console.debug("stopScrolling()"), clearInterval(this.scrollInterval); + }), + (this.collectedUsers = []), + (this.requestUrl = ""), + (this.progressInPercent = 0), + (this.uiIdleCounter = 0), + (this.lastCollectedUserCount = []), + (this.isLegacyTwitter = null !== document.getElementById("page-outer")), + this.setUpBlockButton().then(), + this.setUpExportButton().then(), + T.storePackageVersion(); + } + get isLegacyTwitter() { + return this.legacyTwitter; + } + set isLegacyTwitter(t) { + t && document.querySelector("body").classList.add("lb-legacy-twitter"), (this.legacyTwitter = t); + } + get tweetId() { + return location.href.replace(/https:\/\/twitter.com\/.*\/status\//g, "").replace("/likes", ""); + } + get loadingInfo() { + return this.popup.querySelector(".lb-label"); + } + get scrolly() { + return C.isMobile ? new Promise((t) => t(document.querySelector("html"))) : this.getScrollList(); + } + get textStyle() { + return C.getTextStyle(this.isLegacyTwitter); + } + get users() { + return Array.from(new Set(this.collectedUsers)); + } + get hasStateChangedToConfirm() { + return Array.from(this.popup.classList).some((t) => "lb-confirm" === t); + } + static run() { + new $(), + document.querySelector("body").addEventListener("click", () => new $()), + window.addEventListener( + "resize", + (function (t, e, i) { + let s; + return function (...o) { + let n = this, + l = i && !s; + clearTimeout(s), + (s = window.setTimeout(function () { + (s = null), i || t.apply(n, o); + }, e)), + l && t.apply(n, o); + }; + })(() => new $(), 250) + ); + } + static getBadgeClass(t) { + const e = { follow: T.hideBadgeFollow, share: T.hideBadgeShare, donate: T.hideBadgeDonate }; + if (Object.values(e).every((t) => t)) return; + return t === Object.entries(e).find(([, t]) => !t)[0] ? "lb-footer__link--show-badge" : ""; + } + getTotalUsersCount() { + return t(this, void 0, void 0, function* () { + function t(t) { + const e = t.textContent.split(""); + return parseInt(e.filter((t) => !isNaN(Number(t))).join("")); + } + if (yield C.isBlockPage()) return -1; + if (this.isLegacyTwitter) { + const i = yield e("[data-tweet-stat-count].request-favorited-popup"); + return i.addEventListener("click", () => new $()), t(i.querySelector("strong")); + } + const i = yield C.isListPage(); + if (i) return t(yield e(`a[href$="${i}"] span span`)); + const s = yield e("a[href$=likes] > div > span > span"); + return s ? t(s) : -1; + }); + } + addIncludeRetweetersParam(t) { + T.includeRetweeters = t; + const e = Array.from(document.querySelectorAll(".lb-confirm-button")).map((t) => t), + i = Array.from(document.querySelectorAll(".lb-textarea")).map((t) => t), + s = e.every((t) => t.href.includes("tweet_id=")); + if (t === s) return; + const o = (t) => `${s ? t.split("&")[0] : t}${s ? "" : `&tweet_id=${this.tweetId}`}`; + e.forEach((t) => (t.href = o(t.href))), i.forEach((t) => (t.value = o(t.value))); + } + getLimitMessage() { + return t(this, void 0, void 0, function* () { + return (yield C.isBlockPage()) || this.isListLarge + ? `${q.i18n.getMessage("ui_takeAMoment")} ${q.i18n.getMessage("ui_urlLimit")}` + : `${q.i18n.getMessage("ui_onlyListItems")}
${q.i18n.getMessage("ui_twitterHides")}`; + }); + } + getScrollableParent(t) { + const e = t.parentElement; + if (!e) return t; + return "auto" === getComputedStyle(e).overflow ? e : this.getScrollableParent(e); + } + getScrollList() { + return t(this, void 0, void 0, function* () { + let t, + e = document.querySelector("html"); + if (yield C.isBlockPage()) t = e; + else { + let e = this.getScrollableParent(yield this.getTopbar()); + t = this.isLegacyTwitter ? document.querySelector(".activity-popup-users") : e; + } + return t || (t = e), t; + }); + } + changeStateToConfirm() { + return t(this, void 0, void 0, function* () { + console.debug("changeStateToConfirm()"), + this.popup.classList.add("lb-confirm"), + (yield this.getScrollList()).classList.remove("lb-blur"); + }); + } + closePopup() { + return t(this, void 0, void 0, function* () { + this.popup.classList.add("lb-hide"), + this.popup.addEventListener("transitionend", () => { + this.popup.remove(); + }), + this.popupWrapper.remove(), + (yield this.getScrollList()).classList.remove("lb-blur"), + window.setTimeout(() => { + const t = C.popupContainer.querySelector("[aria-modal='true']"); + t && t.focus(); + }, 0); + }); + } + collectUsers() { + return t(this, void 0, void 0, function* () { + const t = this.isLegacyTwitter + ? (yield this.getScrollList()).querySelectorAll("a.js-user-profile-link") + : (yield this.getScrollList()).querySelectorAll( + '[data-testid="UserCell"] a[aria-hidden="true"]' + ), + e = L + Math.floor(this.users.length / 500), + i = yield this.getTotalUsersCount(), + s = i < 100 ? 70 : i < 200 ? 80 : 90; + let o = Array.from(t); + for (let t of o) { + const e = t.href.replace("https://twitter.com/", ""); + this.collectedUsers.push(e); + } + let n = document.querySelector(".lb-user-counter"); + n && (n.innerText = `${this.users.length}`); + const l = this.lastCollectedUserCount.at(-1) === this.lastCollectedUserCount.at(-2); + if ( + (l || (this.uiIdleCounter = 0), + document.hasFocus() && + l && + (this.uiIdleCounter++, + this.uiIdleCounter > e && this.progressInPercent < s && this.createIdleWarning()), + i > 0) + ) { + this.progressInPercent = Math.ceil((this.users.length / i) * 100); + const t = document.querySelector(".lb-progress-bar__label"), + e = document.querySelector(".lb-progress-bar__inner"); + t && (t.innerHTML = `${this.progressInPercent}%`), + e && (e.style.width = `${this.progressInPercent}%`); + } + this.lastCollectedUserCount.push(this.users.length); + }); + } + createBlockButton() { + return t(this, void 0, void 0, function* () { + let t = this.isLegacyTwitter + ? yield e("button.button-text.follow-text") + : yield e("[role=button] [role=button]", !1, 1, yield this.getScrollList()); + if (document.querySelector("[data-testid=blockAll]")) return; + (this.blockButton = document.createElement("a")), + this.blockButton.classList.add("lb-block-button", ...t.classList), + (this.blockButton.dataset.testid = "blockAll"), + (this.blockButton.tabIndex = 0), + (this.blockButton.innerHTML = t.innerHTML), + (this.blockButton.style.color = C.highlightColor), + (this.blockButton.style.borderColor = C.highlightColor); + ((this.isLegacyTwitter + ? this.blockButton + : this.blockButton.querySelector("div > span > span") + ).innerHTML = q.i18n.getMessage("ui_blockAll")), + (yield this.getTopbar()).appendChild(this.blockButton); + const i = document.createElement("span"); + (i.innerHTML = s), (i.style.marginRight = ".3em"); + (this.isLegacyTwitter ? this.blockButton : this.blockButton.querySelector("div")).prepend(i), + (i.querySelector("svg").style.color = C.highlightColor), + this.blockButton.addEventListener("click", () => { + this.setUpBlockPopup(); + }), + this.blockButton.addEventListener("keyup", (t) => { + "Enter" === t.key && this.setUpBlockPopup(); + }); + }); + } + createCheckbox() { + this.checkbox = document.createElement("input"); + const t = document.createElement("label"), + e = document.createElement("div"); + e.classList.add("lb-label-wrapper"), + e.appendChild(t), + (this.checkbox.type = "checkbox"), + (this.checkbox.checked = T.includeRetweeters), + this.checkbox.classList.add("lb-checkbox"), + this.checkbox.addEventListener("change", () => { + this.addIncludeRetweetersParam(this.checkbox.checked); + }), + (t.innerHTML = `${q.i18n.getMessage("ui_blockRetweeters")}`), + t.prepend(this.checkbox); + const i = document.createElement("span"); + return ( + i.classList.add("lb-info"), + (i.title = q.i18n.getMessage("ui_onlyDirectRetweeters")), + (i.innerHTML = r), + e.appendChild(i), + e + ); + } + createCloseButton() { + return t(this, void 0, void 0, function* () { + const t = document.createElement("button"); + (t.innerHTML = l), + (t.tabIndex = 0), + t.classList.add("lb-close-button"), + (t.title = q.i18n.getMessage("ui_cancel")), + (t.style.backgroundColor = C.highlightColor.replace(")", ", 0.1)")), + (t.style.color = C.highlightColor), + this.popup.prepend(t), + t.addEventListener("click", () => { + this.closePopup(), this.stopScrolling(); + }); + }); + } + createFinishButton() { + return t(this, void 0, void 0, function* () { + const t = document.createElement("button"); + (t.innerHTML = `${g}${m}`), + (t.tabIndex = 0), + t.classList.add("lb-finish-button"), + (t.title = q.i18n.getMessage("ui_finish")), + (t.style.backgroundColor = C.highlightColor.replace(")", ", 0.1)")), + (t.style.color = C.highlightColor), + this.popup.append(t), + t.addEventListener("click", () => { + t.classList.add("lb-finish-button--active"); + t.querySelector("svg").addEventListener( + "transitionend", + () => { + (t.disabled = !0), + this.popup.classList.remove("lb-popup--has-warning"), + this.finishCollecting(); + }, + { once: !0 } + ); + }); + }); + } + createConfirmButton() { + return t(this, void 0, void 0, function* () { + let e = document.createElement("div"), + i = document.createElement("button"); + if ( + (e.classList.add("lb-copy-wrapper"), + i.classList.add("lb-copy-button"), + (i.style.color = this.textStyle.color), + (i.innerHTML = `\n\t\t\t\n\t\t\t\t${c}\n\t\t\t\t${q.i18n.getMessage( + "ui_copyToShare" + )}\n\t\t\t\n\t\t\t\n\t\t\t\t${d}\n\t\t\t\t${q.i18n.getMessage( + "ui_copied" + )}\n\t\t\t\n\t\t`), + (this.textarea = document.createElement("textarea")), + (this.textarea.readOnly = !0), + this.textarea.classList.add("lb-textarea"), + e.appendChild(i), + e.appendChild(this.textarea), + i.addEventListener("click", () => { + this.handleCopyClick(this.textarea, i); + }), + !(yield C.isBlockPage())) + ) { + const i = this.blockButton; + (this.confirmButton = i.cloneNode(!0)), + this.confirmButton.classList.add("lb-confirm-button"), + this.confirmButton.classList.remove("lb-block-button"), + this.isLegacyTwitter || this.confirmButton.querySelector("div > span").remove(); + ((this.isLegacyTwitter + ? this.confirmButton + : this.confirmButton.querySelector("div > span > span") + ).innerText = q.i18n.getMessage("ui_ok")), + this.confirmButton.setAttribute("target", "_blank"), + this.confirmButton.addEventListener("click", () => + t(this, void 0, void 0, function* () { + yield this.closePopup(); + }) + ), + e.appendChild(this.confirmButton); + } + return e; + }); + } + createConfirmMessageElement() { + (this.confirmMessageElement = this.loadingInfo.cloneNode()), + Object.assign(this.confirmMessageElement.style, this.textStyle), + this.confirmMessageElement.classList.remove("lb-collecting"), + this.confirmMessageElement.classList.add("lb-confirm-message"), + (this.confirmMessageElement.innerHTML = `\n\t\t\t

\n\t\t\t\t${q.i18n.getMessage( + "ui_usersFound" + )}\n\t\t\t\t${q.i18n.getMessage( + "ui_blockAll" + )}?\n\t\t\t

\n\t\t\t
`), + this.popup.appendChild(this.confirmMessageElement); + } + createPopup(e) { + return t(this, void 0, void 0, function* () { + (this.popupWrapper = document.createElement("div")), + C.popupContainer.appendChild(this.popupWrapper), + this.popupWrapper.classList.add("lb-popup-wrapper", "lb-hide"), + (this.popup = document.createElement("div")), + this.popupWrapper.appendChild(this.popup), + (this.popup.tabIndex = 0), + this.popup.setAttribute("aria-modal", "true"), + this.popup.setAttribute("aria-labeledby", "lb-popup-heading"), + (this.popup.dataset.focusable = "true"), + this.popup.classList.add("lb-popup"), + (this.popup.style.background = C.backgroundColor), + (this.popup.style.color = C.highlightColor), + (this.popup.innerHTML = e), + window.setTimeout(() => { + this.popup.focus(); + }, 0), + window.setTimeout(() => { + this.popupWrapper.classList.remove("lb-hide"); + }, 250), + document.addEventListener("keydown", this.handleKeydown); + }); + } + handleCopyClick(t, e) { + t.select(), + navigator.clipboard.writeText(t.value).then(() => { + e.classList.add("lb-copy-button--active"), e.setAttribute("disabled", "true"); + }), + window.setTimeout(() => { + e.classList.remove("lb-copy-button--active"), e.removeAttribute("disabled"); + }, 5e3); + } + initBlockAction() { + return t(this, void 0, void 0, function* () { + const t = this.popup.querySelector(".lb-label"); + Object.assign(t.style, this.textStyle), yield this.startScrolling(); + }); + } + scrollDown() { + return t(this, void 0, void 0, function* () { + console.debug("scrollDown()"); + const t = yield this.scrolly, + e = t.scrollHeight < 2 * t.clientHeight, + i = Math.ceil(t.scrollTop) >= t.scrollHeight - t.clientHeight, + s = 100 === this.progressInPercent; + t.scroll({ top: t.scrollTop + t.clientHeight, left: 0, behavior: "smooth" }), + yield this.collectUsers(), + (i || e || s) && + (console.info("finished collecting!", { scrolledToBottom: i, scrollListIsSmall: e }), + this.finishCollecting()); + }); + } + finishCollecting() { + if (this.hasStateChangedToConfirm) return; + console.debug("finishCollecting()"), (this.requestUrl = `${w}?users=${this.users}`); + const e = this.requestUrl.length > f; + if ( + (document.querySelector("body").classList.toggle("many", e), + this.confirmButton && (this.confirmButton.href = this.requestUrl), + this.textarea && (this.textarea.value = this.requestUrl), + e) + ) { + console.info("list is large"); + let t = this.requestUrl.length / f, + e = this.users.length / t; + const i = document.querySelector(".lb-confirm-message > h3 > span:last-of-type"); + (i.innerHTML = q.i18n.getMessage("ui_divided")), i.classList.add("lb-divided-msg"); + for (let i = 0; i <= t; i++) { + let t = this.textarea.parentNode.cloneNode(!0); + this.textarea.parentNode.parentNode.appendChild(t); + const s = t.childNodes.item(1), + o = s.parentElement.querySelector(".lb-copy-button"), + l = s.parentElement.querySelector(".lb-confirm-button"), + r = `${w}?users=${this.users.slice(e * i, e * (i + 1))}`; + if ( + (o.addEventListener("click", () => { + this.handleCopyClick(s, o); + }), + (s.value = r), + l) + ) { + (l.href = r), + (l.querySelector("div > span > span").innerText = `${q.i18n.getMessage( + "ui_confirmButtonLabel" + )} ${i + 1}`); + const t = document.createElement("span"); + (t.innerHTML = n), + l.querySelector("div > span").prepend(t), + l.addEventListener("mousedown", (t) => { + t.target.closest("a").classList.add("lb-confirm-button--clicked"); + }); + } + } + this.textarea.parentNode.parentNode.removeChild(document.querySelector(".lb-copy-wrapper")); + } + this.checkbox && this.addIncludeRetweetersParam(this.checkbox.checked), this.stopScrolling(); + const i = this.popup.querySelector(".lb-confirm-message h3 span"); + i && (i.innerHTML = `${this.users.length} ${i.innerHTML}`), + this.popup.classList.add("lb-check", "lb-collected"), + setTimeout( + () => + t(this, void 0, void 0, function* () { + yield this.changeStateToConfirm(); + }), + 1200 + ); + } + getTopbar() { + return t(this, void 0, void 0, function* () { + let t; + return ( + this.topbar || + (this.isLegacyTwitter + ? ((t = yield e("#activity-popup-dialog-header")), + (this.isLegacyTwitter = !0), + (this.topbar = t.parentElement)) + : (this.topbar = yield e(E[C.viewport]))), + this.topbar + ); + }); + } + setUpBlockButton() { + return t(this, void 0, void 0, function* () { + ((yield C.isBlockPage()) || (yield C.isTweetPage()) || (yield C.isListPage())) && + (yield this.createBlockButton()); + }); + } + setUpBlockPopup() { + return t(this, void 0, void 0, function* () { + const t = `\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t\t${q.i18n.getMessage( + "ui_collectingUsernames" + )}...\n\t\t\t\t\t\n\t\t\t\t

\n\t\t\t\t

${yield this.getLimitMessage()}

\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t0%\n\t\t\t\t\t\t${o}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
`; + yield this.createPopup(t), this.createConfirmMessageElement(); + let e = yield this.createConfirmButton(); + if (yield C.isTweetPage()) { + let t = this.createCheckbox(); + this.confirmMessageElement.querySelector(".lb-label__main").appendChild(t); + } + this.confirmMessageElement.querySelector(".lb-label__main").appendChild(e), + yield this.createCloseButton(), + yield this.createFinishButton(), + yield this.createFooter(), + yield this.initBlockAction(); + }); + } + createFooter() { + return t(this, void 0, void 0, function* () { + const t = document.createElement("footer"); + (t.innerHTML = `\n\t\t\t\n\t\t\t`), + (t.style.backgroundColor = C.backgroundColor), + (t.style.color = C.highlightColor), + this.popup.appendChild(t), + t.querySelectorAll(".lb-footer__link.lb-footer__link--show-badge").forEach((t) => { + t.addEventListener("click", (t) => { + const e = "lb-footer__link--", + i = t.target.closest("a"), + s = Array.from(i.classList) + .find((t) => t.startsWith(e)) + .replace(e, ""); + switch ((i.classList.remove("lb-footer__link--show-badge"), s)) { + case "follow": + T.hideBadgeFollow = !0; + break; + case "share": + T.hideBadgeShare = !0; + break; + case "donate": + T.hideBadgeDonate = !0; + } + }); + }); + }); + } + setUpExportButton() { + return t(this, void 0, void 0, function* () { + if (!(yield C.isBlockPage())) return; + if (document.querySelector(".lb-btn--export")) return; + let t = yield e("section", !0, 3); + if (!t) return; + if (!(yield C.isBlockPage())) return; + let i = document.createElement("button"); + (i.innerHTML = a), + i.setAttribute("aria-label", q.i18n.getMessage("ui_export")), + i.setAttribute("title", q.i18n.getMessage("ui_export")), + i.classList.add("lb-btn--export"), + (i.style.backgroundColor = C.twitterBrandColor), + t.appendChild(i), + i.addEventListener("click", () => { + this.setUpBlockPopup(); + }); + }); + } + startScrolling() { + return t(this, void 0, void 0, function* () { + (yield this.getScrollList()).classList.add("lb-blur"), + (yield this.scrolly).scrollTo(0, 0), + (this.collectedUsers = []), + (this.scrollInterval = window.setInterval( + () => + t(this, void 0, void 0, function* () { + yield this.scrollDown(); + }), + k + )); + }); + } + createIdleWarning() { + if ( + T.hideIdleWarning || + Array.from(this.popup.classList).includes("lb-popup--has-warning") || + this.hasStateChangedToConfirm + ) + return; + const t = document.createElement("div"); + (t.style.backgroundColor = C.backgroundColor), + t.classList.add("lb-warning"), + (t.innerHTML = `\n\t\t\t

${b}${q.i18n.getMessage( + "ui_warningHeading" + )}

\n\t\t\t${q.i18n.getMessage( + "ui_warningText" + )}\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t`), + this.popup.append(t), + this.popup.classList.add("lb-popup--has-warning"), + (t.style.color = this.textStyle.color), + (t.style.fontFamily = this.textStyle.fontFamily), + (t.style.fontStyle = this.textStyle.fontStyle), + (t.style.fontWeight = this.textStyle.fontWeight), + this.popup.querySelectorAll(".lb-warning__button").forEach((e) => { + e.addEventListener("click", () => { + this.popup.classList.remove("lb-popup--has-warning"), + (this.uiIdleCounter = -1), + t.addEventListener("transitionend", () => { + this.popup.removeChild(t); + }); + }); + }), + this.popup.querySelector(".lb-warning__button--hide").addEventListener("click", () => { + T.hideIdleWarning = !0; + }); + } + } + $.run(); +})(); diff --git a/likers-blocker/manifest.json b/likers-blocker/manifest.json new file mode 100644 index 000000000..0a99e7d7d --- /dev/null +++ b/likers-blocker/manifest.json @@ -0,0 +1,22 @@ +{ + "name": "__MSG_extensionName__", + "version": "3.1.2", + "description": "__MSG_extensionDescription__", + "icons": { "16": "icon16.png", "48": "icon48.png", "128": "icon128.png" }, + "content_scripts": [ + { "matches": ["https://twitter.com/*"], "js": ["index.js"], "css": ["style.css"] }, + { + "matches": ["https://ichbinhier-twittertools.herokuapp.com/*"], + "js": ["ichbinhier.js"], + "css": ["ichbinhier.css"] + } + ], + "permissions": [ + "https://twitter.com/*", + "https://ichbinhier-twittertools.herokuapp.com/blocklists", + "clipboardWrite" + ], + "manifest_version": 2, + "browser_action": { "default_popup": "popup.html" }, + "default_locale": "en" +} diff --git a/likers-blocker/popup.html b/likers-blocker/popup.html new file mode 100644 index 000000000..4fbaf28dc --- /dev/null +++ b/likers-blocker/popup.html @@ -0,0 +1,418 @@ + + + + LikersBlocker + + + + + + + +
+ +

Likers Blocker

+

+ +
+ + + + + + +
    +
  • +
  • +
  • +
  • +
+
+
+ +
+ + + + + diff --git a/likers-blocker/popup.js b/likers-blocker/popup.js new file mode 100644 index 000000000..370c0279a --- /dev/null +++ b/likers-blocker/popup.js @@ -0,0 +1,28 @@ +"use strict"; +const client = typeof browser === "undefined" ? chrome : browser; + +function localizeUI() { + const labelNodes = document.querySelectorAll("[data-label]"); + labelNodes.forEach((element) => { + const messageName = element.dataset.label; + element.innerHTML = client.i18n.getMessage(messageName); + }); + + const hrefNodes = document.querySelectorAll("[data-href]"); + hrefNodes.forEach((element) => { + const messageName = element.dataset.href; + const msg = client.i18n.getMessage(messageName); + element.setAttribute("href", msg); + }); +} + +function alignRightButton() { + const rightButton = document.querySelector(".btn.issue"); + const leftButton = rightButton.parentElement.children[0]; + rightButton.style.left = getComputedStyle(leftButton).width; +} + +(function () { + localizeUI(); + alignRightButton(); +})(); diff --git a/likers-blocker/style.css b/likers-blocker/style.css new file mode 100644 index 000000000..253309d34 --- /dev/null +++ b/likers-blocker/style.css @@ -0,0 +1,626 @@ +@keyframes rainbow { + 10% { + color: #f2751c; + } + 20% { + color: #f2ce1c; + } + 30% { + color: #bcf21c; + } + 40% { + color: #64f21c; + } + 50% { + color: #1cf22e; + } + 60% { + color: #1cf287; + } + 70% { + color: #1cf2e0; + } + 80% { + color: #1cabf2; + } + 90% { + color: #1c52f2; + } + 100% { + color: #f21c1c; + } +} +body { + --lb-popup-padding: 2rem; + --lb-close-button-padding: 9px; + --text-line-height: 19px; + --close-button-icon-spacing: 3.75px; +} +body:not(.lb-block-page) .lb-blur { + filter: blur(2px); +} +body:not(.lb-block-page) .lb-textarea { + height: 0; + width: 0; + margin: 0; + padding: 0; + opacity: 0; +} + +.lb-popup-wrapper { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: rgba(80, 80, 80, 0.4); + transition: opacity ease 500ms; + z-index: 5000; +} + +body.lb-block-page .lb-popup-wrapper { + position: relative; + background: transparent; +} + +.lb-popup { + position: fixed; + width: 500px; + height: 275px; + top: 25%; + left: 50%; + transform: translateX(-50%); + border-radius: 16px; + box-shadow: 0 8px 41px 22px #2f2f2fa3; + border: 1px solid rgba(120, 120, 120, 0.3); + padding: var(--lb-popup-padding); + padding-bottom: 4.5rem; + opacity: 0.8; + filter: none; + overflow: hidden; + box-sizing: border-box; + max-width: 100vw; + transition: all 500ms ease; + line-height: var(--text-line-height); + outline: none; +} +@media (max-width: 440px) { + .lb-popup { + margin-left: 0; + left: 0; + width: 100% !important; + } +} +.lb-popup footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; + border-top: 1px solid rgba(128, 128, 128, 0.5); +} +.lb-popup a:hover.icon--twitter { + color: #1da1f2; +} +.lb-popup--has-warning .lb-label { + filter: blur(5px); +} +body.many .lb-popup.lb-confirm { + width: 700px; + top: 150px; + height: calc(100vh - 440px); +} +body.many .lb-popup.lb-confirm .lb-confirm-message { + height: 100%; +} +body.many .lb-popup.lb-confirm .lb-label__main { + padding-right: 1rem; + max-height: calc(100% - 3rem); + overflow-y: auto; +} + +.lb-popup.lb-confirm { + opacity: 1; +} + +.lb-footer__inner { + display: flex; + justify-content: flex-end; + padding: 0 1.5rem; + margin: 0.5rem 0; + list-style: none; +} +.lb-footer__item:nth-child(1) { + flex-grow: 1; +} +.lb-footer__item svg { + height: 1.5rem; + width: auto; +} +.lb-footer__link { + display: inline-block; + transition: all 200ms ease; + color: rgba(128, 128, 128, 0.6); + padding: 0.5rem; + position: relative; +} +.lb-footer__link:visited { + color: rgba(128, 128, 128, 0.6); +} +.lb-footer__link:hover { + color: unset; + transform: scale(1.2); +} +.lb-footer__link::after { + content: ""; + width: 8px; + height: 8px; + display: none; + position: absolute; + background: red; + border-radius: 50%; + top: 0.5rem; + left: 0.5rem; + opacity: 0.8; +} +.lb-footer__link--show-badge::after { + display: inline-block; +} +.lb-footer__link--new-release { + opacity: 0; + visibility: hidden; + color: #ec7613; +} +.lb-footer__link--new-release:visited { + color: #ec7613; +} +.lb-footer__link--new-release.sparkle { + opacity: 1; + visibility: visible; +} +.lb-footer__link--new-release.sparkle svg path { + animation: rainbow 15s linear infinite alternate; +} +.lb-footer__link--new-release.sparkle svg path:nth-child(1) { + animation-delay: 1s; +} +.lb-footer__link--new-release.sparkle svg path:nth-child(3) { + animation-delay: 2s; +} + +.lb-divided-msg { + display: none; +} + +body.many .lb-divided-msg { + display: inline; +} + +body.lb-block-page.many .lb-popup.lb-confirm { + width: 50%; +} + +.lb-confirm .lb-finish-button { + opacity: 0; + visibility: hidden; +} +.lb-confirm .lb-label.lb-confirm-message { + display: block !important; + opacity: 1; +} + +#react-root { + transition: filter ease 500ms; +} + +.lb-hide { + opacity: 0 !important; +} + +.lb-close-button { + border: none; + padding: var(--lb-close-button-padding); + cursor: pointer; + position: absolute; + left: calc(var(--lb-popup-padding) - var(--lb-close-button-padding) - var(--close-button-icon-spacing)); + top: calc(var(--lb-popup-padding) - var(--lb-close-button-padding) - var(--close-button-icon-spacing) - 1px); + border-radius: 50%; + z-index: 5000; + transition: background-color ease 500ms; +} +.lb-close-button svg { + width: 1.5em; + height: 1.5em; + color: inherit !important; +} +.lb-close-button:not(:hover) { + background-color: transparent !important; +} + +body.lb-legacy-twitter .lb-close-button { + width: 39px; + height: 39px; +} +body.lb-legacy-twitter .lb-block-button { + margin-left: 68%; +} + +.lb-finish-button { + border: none; + padding: var(--lb-close-button-padding); + cursor: pointer; + position: absolute; + width: 42px; + height: 42px; + right: calc(var(--lb-popup-padding) - var(--lb-close-button-padding) - var(--close-button-icon-spacing)); + top: calc(var(--lb-popup-padding) - var(--lb-close-button-padding) - var(--close-button-icon-spacing) - 4px); + border-radius: 50%; + z-index: 5000; + transition: background-color ease 500ms, opacity ease 1000ms; +} +.lb-finish-button svg { + width: 1.8em; + height: 1.8em; + color: inherit !important; + margin-top: 2px; + opacity: 1; + visibility: visible; + transition: left 300ms ease-in-out, transform 1600ms ease-in-out 300ms, opacity 800ms ease-in-out 1200ms, visibility 800ms ease-in-out 1200ms; + position: absolute; + top: 6px; + left: 10px; + transform-origin: 50% 50%; +} +.lb-finish-button svg:nth-child(2) { + opacity: 0; + visibility: hidden; +} +.lb-finish-button:not(:hover) { + background-color: transparent !important; +} + +.lb-finish-button--active { + background-color: transparent !important; +} +.lb-finish-button--active svg { + color: #559730 !important; + transform: rotate(6turn); + left: 15px; +} +.lb-finish-button--active svg:nth-child(1) { + opacity: 0; + visibility: hidden; +} +.lb-finish-button--active svg:nth-child(2) { + opacity: 1; + visibility: visible; +} + +.lb-label { + transition-property: opacity, margin, visibility, max-height, transform; + transition-duration: 1s; + transition-timing-function: ease-in-out; + transform-origin: 0 0; + display: block !important; + opacity: 1; + position: relative; + max-height: 100%; + transform: scaleY(1); +} +.lb-label label { + display: inline-flex; + align-items: center; +} +.lb-label h3 { + margin-bottom: 1em; + color: inherit; +} +.lb-label h3:first-of-type { + margin-left: 2rem; +} +.lb-label .lb-text svg { + position: relative; + top: 0.15em; +} +.lb-label.lb-collecting h3 { + margin-top: -5px; +} +.lb-confirm .lb-label.lb-collecting { + opacity: 0; + visibility: hidden; + transform: scaleY(0); + max-height: 0; +} +.lb-label.lb-confirm-message { + display: none !important; + opacity: 0; +} +.lb-label.lb-confirm-message h3 { + margin-top: 0; +} + +.lb-label-wrapper { + display: inline-flex; + align-items: center; + margin-top: 0.6rem; +} + +.lb-checkmark { + color: currentColor; + display: block; + position: absolute; + right: 5px; + top: 50%; + transform: scale(1) translateY(-50%); + transform-origin: 50% 0; + opacity: 0; + transition: opacity 600ms ease-in-out, transform 600ms cubic-bezier(0.66, 0.47, 0.2, 1.89) 400ms; + width: 1.2rem; + height: auto; +} +.lb-collected .lb-checkmark { + transform: scale(1.2) translateY(-50%); + opacity: 1; +} + +.lb-limit-note { + display: none; +} + +.lb-block-button { + margin-right: 0 !important; +} +@media (min-width: 620px) and (max-width: 698px) { + .lb-block-button { + margin-right: 6px !important; + } +} +@media (max-width: 621px) { + .lb-block-button { + margin-right: 3px !important; + } +} +.lb-block-button * { + color: inherit !important; +} +.lb-block-button svg { + height: 1.2em; + width: auto; +} + +.lb-confirm-button { + position: absolute !important; + right: 0; + top: 0; + padding: 0 4em !important; + text-decoration: none; + line-height: 1.3rem !important; + transition: all 500ms ease-in-out; +} +.lb-confirm-button * { + color: inherit !important; +} +.lb-confirm-button > div > span { + display: flex; +} +.lb-confirm-button svg { + height: 1rem; + margin-left: -2.6em; + position: absolute; + opacity: 0; + visibility: hidden; + transition: all 500ms ease-in-out; +} +.lb-confirm-button--clicked { + color: #559730 !important; + border-color: #559730 !important; +} +.lb-confirm-button--clicked svg { + opacity: 1; + visibility: visible; +} + +.lb-btn--export { + position: absolute; + top: -2.5rem; + right: 1rem; + width: 3rem; + height: 3rem; + border-radius: 50%; + border: 1px solid #33333333; + background: white; + transition: all 200ms ease-in-out; + cursor: pointer; + box-shadow: 0 0 5px #00000033; + opacity: 0.7; + color: #ffffff; +} +.lb-btn--export:hover { + opacity: 1; + box-shadow: 0 0 10px #00000077; + transform: scale(1.1); +} +.lb-btn--export > svg { + width: 1.9rem; + margin-left: -3px; + margin-bottom: -1px; +} + +.lb-copy-wrapper { + margin-top: 2em; + position: relative; +} +.lb-copy-wrapper:last-of-type { + margin-bottom: 2em; +} + +.lb-copy-button { + background: transparent; + border: none; + font-size: 1rem; + padding: 0; + margin-left: -5px; + height: 3em; +} +.lb-copy-button__label { + text-align: left; + line-height: 1em; +} +body:not(.lb-block-page) .lb-copy-button__label { + max-width: 270px; +} +.lb-copy-button:not([disabled]) { + cursor: pointer; +} +.lb-copy-button svg { + height: 1em; + margin-right: 0.5em; + transform: translateY(2px); +} +.lb-copy-button__content { + display: flex; + align-items: baseline; + transition: all 500ms ease-in-out; + position: absolute; + top: 0; +} +.lb-copy-button__content:first-of-type { + opacity: 1; + visibility: visible; +} +.lb-copy-button__content:last-of-type { + opacity: 0; + visibility: hidden; +} +.lb-copy-button--active { + color: #559730 !important; +} +.lb-copy-button--active .lb-copy-button__content:first-of-type { + opacity: 0; + visibility: hidden; +} +.lb-copy-button--active .lb-copy-button__content:last-of-type { + opacity: 1; + visibility: visible; +} + +.lb-textarea { + width: 100%; + height: 5rem; +} + +.lb-checkbox { + margin: 0 0.7em 0 0 !important; +} + +.lb-info { + display: inline-block; + margin-left: 1em; + height: var(--text-line-height); + width: var(--text-line-height); + cursor: help; +} +.lb-info svg { + display: block; + height: inherit; + color: unset; + fill: currentColor; +} + +@keyframes load { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(91%); + } +} +.lb-progress-bar { + width: 100%; + padding: 1rem 0; + color: #ffffff; +} +.lb-progress-bar__inner { + position: relative; + width: 0; + min-width: 1em; + display: block; + border-radius: 4px; + transition: all 500ms ease-in-out; + color: currentColor; + padding: 5px; + text-align: right; + white-space: nowrap; +} +.lb-block-page .lb-collecting .lb-progress-bar__inner { + text-align: center; + width: 50%; + animation: load 1200ms ease-in-out infinite alternate; +} +.lb-check .lb-progress-bar__inner { + min-width: 4rem; +} +.lb-progress-bar__label { + line-height: 1em; + font-weight: bold; + font-size: 1rem; + transition: transform 500ms ease-in-out; + transform: translateX(0); + display: block; +} +.lb-block-page .lb-progress-bar__label { + opacity: 0; + visibility: hidden; +} +.lb-check .lb-progress-bar__label { + transform: translateX(-2rem); +} + +.lb-warning { + position: absolute; + top: 3rem; + width: 80%; + left: 6%; + border-radius: 10px; + color: #ec7613; + border: 2px solid #ec7613; + text-align: center; + padding: 1.4rem; + opacity: 0; + visibility: hidden; + transition: all 500ms ease-in-out; +} +.lb-popup--has-warning .lb-warning { + opacity: 1; + visibility: visible; +} +.lb-warning__heading { + color: #ec7613; + margin-top: 0; + display: flex; + align-items: center; + line-height: 1em; +} +.lb-warning__heading svg { + height: 1.2em; +} +.lb-warning__text { + color: #ec7613; +} +.lb-warning__buttons { + display: flex; +} +.lb-warning__button { + color: #ec7613; + display: block; + margin: 1em auto 0; + padding: 6px 1rem; + border: 1px solid #ec7613; + border-radius: 14px; + font-weight: bold; + font-family: inherit; + background-color: transparent; +} + +a[class*=lb-] { + background-color: transparent !important; +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 91cd8d0af..5f1f9e862 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "likes-blocker", - "version": "3.1.1", + "version": "3.1.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "likes-blocker", - "version": "3.1.1", + "version": "3.1.2", "license": "MIT", "devDependencies": { "@rollup/plugin-typescript": "^6.1.0", diff --git a/package.json b/package.json index 9d6ed941a..80b7862e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "likes-blocker", - "version": "3.1.1", + "version": "3.1.2", "description": "Block all visible likers (and optionally all retweeters) of a tweet on Twitter.", "main": "dist/script.js", "scripts": {