popup.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. /* Config */
  2. const config = {
  3. advanced: false,
  4. disableVoteSubmission: false,
  5. numberDisplayFormat: 'compactShort',
  6. numberDisplayRoundDown: true,
  7. showAdvancedMessage: '<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor"><rect fill="none" height="24" width="24"/><path d="M19.5,12c0-0.23-0.01-0.45-0.03-0.68l1.86-1.41c0.4-0.3,0.51-0.86,0.26-1.3l-1.87-3.23c-0.25-0.44-0.79-0.62-1.25-0.42 l-2.15,0.91c-0.37-0.26-0.76-0.49-1.17-0.68l-0.29-2.31C14.8,2.38,14.37,2,13.87,2h-3.73C9.63,2,9.2,2.38,9.14,2.88L8.85,5.19 c-0.41,0.19-0.8,0.42-1.17,0.68L5.53,4.96c-0.46-0.2-1-0.02-1.25,0.42L2.41,8.62c-0.25,0.44-0.14,0.99,0.26,1.3l1.86,1.41 C4.51,11.55,4.5,11.77,4.5,12s0.01,0.45,0.03,0.68l-1.86,1.41c-0.4,0.3-0.51,0.86-0.26,1.3l1.87,3.23c0.25,0.44,0.79,0.62,1.25,0.42 l2.15-0.91c0.37,0.26,0.76,0.49,1.17,0.68l0.29,2.31C9.2,21.62,9.63,22,10.13,22h3.73c0.5,0,0.93-0.38,0.99-0.88l0.29-2.31 c0.41-0.19,0.8-0.42,1.17-0.68l2.15,0.91c0.46,0.2,1,0.02,1.25-0.42l1.87-3.23c0.25-0.44,0.14-0.99-0.26-1.3l-1.86-1.41 C19.49,12.45,19.5,12.23,19.5,12z M12.04,15.5c-1.93,0-3.5-1.57-3.5-3.5s1.57-3.5,3.5-3.5s3.5,1.57,3.5,3.5S13.97,15.5,12.04,15.5z"/></svg>',
  8. hideAdvancedMessage: '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor"><path d="M0 0h24v24H0V0z" fill="none" opacity=".87"/><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm4.3 14.3c-.39.39-1.02.39-1.41 0L12 13.41 9.11 16.3c-.39.39-1.02.39-1.41 0-.39-.39-.39-1.02 0-1.41L10.59 12 7.7 9.11c-.39-.39-.39-1.02 0-1.41.39-.39 1.02-.39 1.41 0L12 10.59l2.89-2.89c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41L13.41 12l2.89 2.89c.38.38.38 1.02 0 1.41z"/></svg>',
  9. links: {
  10. website: "https://returnyoutubedislike.com",
  11. github: "https://github.com/Anarios/return-youtube-dislike",
  12. discord: "https://discord.gg/mYnESY4Md5",
  13. donate: "https://returnyoutubedislike.com/donate",
  14. faq: "https://returnyoutubedislike.com/faq",
  15. help: "https://returnyoutubedislike.com/help"
  16. },
  17. };
  18. /* Change language */
  19. function localizeHtmlPage()
  20. {
  21. //Localize by replacing __MSG_***__ meta tags
  22. var objects = document.getElementsByTagName('html');
  23. for (var j = 0; j < objects.length; j++)
  24. {
  25. var obj = objects[j];
  26. var valStrH = obj.innerHTML.toString();
  27. var valNewH = valStrH.replace(/__MSG_(\w+)__/g, function(match, v1)
  28. {
  29. return v1 ? chrome.i18n.getMessage(v1) : "";
  30. });
  31. if(valNewH != valStrH)
  32. {
  33. obj.innerHTML = valNewH;
  34. }
  35. }
  36. }
  37. localizeHtmlPage();
  38. /* Links */
  39. createLink(config.links.website,"link_website")
  40. createLink(config.links.github,"link_github")
  41. createLink(config.links.discord,"link_discord")
  42. createLink(config.links.faq,"link_faq")
  43. createLink(config.links.donate,"link_donate")
  44. createLink(config.links.help,"link_help")
  45. function createLink(url,id) {
  46. document.getElementById(id).addEventListener("click",()=>{
  47. chrome.tabs.create({ url: url})
  48. })
  49. }
  50. document
  51. .getElementById("disable_vote_submission")
  52. .addEventListener("click", (ev) => {
  53. chrome.storage.sync.set({ disableVoteSubmission: ev.target.checked });
  54. });
  55. document.getElementById("number_round_down").addEventListener("click", (ev) => {
  56. chrome.storage.sync.set({ numberDisplayRoundDown: ev.target.checked });
  57. updateNumberDisplayFormatContent(ev.target.checked);
  58. });
  59. document.getElementById("number_format").addEventListener("change", (ev) => {
  60. chrome.storage.sync.set({ numberDisplayFormat: ev.target.value });
  61. });
  62. /* Advanced Toggle */
  63. const advancedToggle = document.getElementById("advancedToggle");
  64. advancedToggle.addEventListener("click", () => {
  65. const adv = document.getElementById("advancedSettings");
  66. if (config.advanced) {
  67. adv.style.transform = "scale(1.1)";
  68. adv.style.pointerEvents = "none";
  69. adv.style.opacity = "0";
  70. advancedToggle.innerHTML = config.showAdvancedMessage;
  71. config.advanced = false;
  72. } else {
  73. adv.style.transform = "scale(1)";
  74. adv.style.pointerEvents = "auto";
  75. adv.style.opacity = "1";
  76. advancedToggle.innerHTML = config.hideAdvancedMessage;
  77. config.advanced = true;
  78. }
  79. });
  80. initConfig();
  81. function initConfig() {
  82. initializeDisableVoteSubmission();
  83. initializeVersionNumber();
  84. initializeNumberDisplayFormat();
  85. initializeNumberDisplayRoundDown();
  86. }
  87. function initializeVersionNumber() {
  88. const version = chrome.runtime.getManifest().version;
  89. document.getElementById('ext-version').innerHTML = 'v' + version;
  90. fetch(
  91. "https://raw.githubusercontent.com/Anarios/return-youtube-dislike/main/Extensions/combined/manifest-chrome.json"
  92. )
  93. .then((response) => response.json())
  94. .then((json) => {
  95. if (version !== json.version) {
  96. document.getElementById('ext-update').innerHTML = chrome.i18n.getMessage("textUpdate") +' v' + json.version;
  97. document.getElementById('ext-update').style.padding = '.25rem .5rem';
  98. }
  99. });
  100. // .catch(console.error);
  101. }
  102. function initializeDisableVoteSubmission() {
  103. chrome.storage.sync.get(["disableVoteSubmission"], (res) => {
  104. handleDisableVoteSubmissionChangeEvent(res.disableVoteSubmission);
  105. });
  106. }
  107. function initializeNumberDisplayRoundDown() {
  108. chrome.storage.sync.get(["numberDisplayRoundDown"], (res) => {
  109. handleNumberDisplayRoundDownChangeEvent(res.numberDisplayRoundDown);
  110. });
  111. }
  112. function initializeNumberDisplayFormat() {
  113. chrome.storage.sync.get(["numberDisplayFormat"], (res) => {
  114. handleNumberDisplayFormatChangeEvent(res.numberDisplayFormat);
  115. });
  116. updateNumberDisplayFormatContent();
  117. }
  118. function updateNumberDisplayFormatContent(roundDown) {
  119. let testValue;
  120. if (roundDown) {
  121. testValue = 123000;
  122. } else {
  123. testValue = 123456;
  124. }
  125. document.getElementById('number_format_compactShort').innerHTML =
  126. getNumberFormatter('compactShort').format(testValue);
  127. document.getElementById('number_format_compactLong').innerHTML =
  128. getNumberFormatter('compactLong').format(testValue);
  129. document.getElementById('number_format_standard').innerHTML =
  130. getNumberFormatter('standard').format(testValue);
  131. }
  132. chrome.storage.onChanged.addListener(storageChangeHandler);
  133. function storageChangeHandler(changes, area) {
  134. if (changes.disableVoteSubmission !== undefined) {
  135. handleDisableVoteSubmissionChangeEvent(
  136. changes.disableVoteSubmission.newValue
  137. );
  138. }
  139. if (changes.numberDisplayRoundDown !== undefined) {
  140. handleNumberDisplayRoundDownChangeEvent(
  141. changes.numberDisplayRoundDown.newValue
  142. );
  143. }
  144. if (changes.numberDisplayFormat !== undefined) {
  145. handleNumberDisplayFormatChangeEvent(changes.numberDisplayFormat.newValue);
  146. }
  147. }
  148. function handleDisableVoteSubmissionChangeEvent(value) {
  149. config.disableVoteSubmission = value;
  150. document.getElementById("disable_vote_submission").checked = value;
  151. }
  152. function handleNumberDisplayRoundDownChangeEvent(value) {
  153. config.numberDisplayRoundDown = value;
  154. document.getElementById("number_round_down").checked = value;
  155. }
  156. function handleNumberDisplayFormatChangeEvent(value) {
  157. config.numberDisplayFormat = value;
  158. document
  159. .getElementById("number_format")
  160. .querySelector('option[value="' + value + '"]').selected = true;
  161. }
  162. function getNumberFormatter(optionSelect) {
  163. let formatterNotation;
  164. let formatterCompactDisplay;
  165. switch (optionSelect) {
  166. case 'compactLong':
  167. formatterNotation = 'compact';
  168. formatterCompactDisplay = 'long';
  169. break;
  170. case 'standard':
  171. formatterNotation = 'standard';
  172. formatterCompactDisplay = 'short';
  173. break;
  174. case 'compactShort':
  175. default:
  176. formatterNotation = 'compact';
  177. formatterCompactDisplay = 'short';
  178. }
  179. const formatter = Intl.NumberFormat(
  180. document.documentElement.lang || userLocales || navigator.language,
  181. {
  182. notation: formatterNotation,
  183. compactDisplay: formatterCompactDisplay,
  184. }
  185. );
  186. return formatter;
  187. }
  188. (async function getStatus() {
  189. let status = document.getElementById("status");
  190. let serverStatus = document.getElementById("server-status");
  191. let resp = await fetch(
  192. "https://returnyoutubedislikeapi.com/votes?videoId=YbJOTdZBX1g"
  193. );
  194. let result = await resp.status;
  195. if (result === 200) {
  196. status.innerText = "Online";
  197. status.style.color = "green";
  198. serverStatus.style.filter =
  199. "invert(58%) sepia(81%) saturate(2618%) hue-rotate(81deg) brightness(119%) contrast(129%)";
  200. } else {
  201. status.innerText = "Offline";
  202. status.style.color = "red";
  203. serverStatus.style.filter =
  204. "invert(11%) sepia(100%) saturate(6449%) hue-rotate(3deg) brightness(116%) contrast(115%)";
  205. }
  206. })();
  207. /* popup-script.js
  208. document.querySelector('#login')
  209. .addEventListener('click', function () {
  210. chrome.runtime.sendMessage({ message: 'get_auth_token' });
  211. });
  212. document.querySelector("#log_off").addEventListener("click", function () {
  213. chrome.runtime.sendMessage({ message: "log_off" });
  214. });
  215. */