darkreader 4.9.75 → 4.9.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/darkreader.js +706 -523
  2. package/package.json +23 -23
package/darkreader.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Dark Reader v4.9.75
2
+ * Dark Reader v4.9.78
3
3
  * https://darkreader.org/
4
4
  */
5
5
 
@@ -1145,7 +1145,7 @@
1145
1145
  getElementsTreeOperations(mutations);
1146
1146
  observerCallbacks.forEach(function (_a) {
1147
1147
  var onMinorMutations = _a.onMinorMutations;
1148
- return onMinorMutations(elementsOperations_1);
1148
+ return onMinorMutations(root, elementsOperations_1);
1149
1149
  });
1150
1150
  }
1151
1151
  });
@@ -4407,6 +4407,12 @@
4407
4407
  };
4408
4408
  var modified = modify();
4409
4409
  if (unknownVars.size > 0) {
4410
+ var isFallbackResolved = modified.match(
4411
+ /^var\(.*?, var\(--darkreader-bg--.*\)\)$/
4412
+ );
4413
+ if (isFallbackResolved) {
4414
+ return modified;
4415
+ }
4410
4416
  return new Promise(function (resolve) {
4411
4417
  var firstUnknownVar = unknownVars
4412
4418
  .values()
@@ -5141,7 +5147,7 @@
5141
5147
  variablesStore.matchVariablesAndDependents();
5142
5148
  }
5143
5149
  var treeObserver = createOptimizedTreeObserver(root, {
5144
- onMinorMutations: function (_a) {
5150
+ onMinorMutations: function (_root, _a) {
5145
5151
  var additions = _a.additions;
5146
5152
  additions.forEach(function (added) {
5147
5153
  return discoverNodes(added);
@@ -5627,14 +5633,16 @@
5627
5633
  var selector = rule.selector,
5628
5634
  declarations = rule.declarations;
5629
5635
  var selectorText = selector;
5630
- if (
5636
+ var emptyIsWhereSelector =
5631
5637
  isChromium &&
5632
5638
  selector.startsWith(":is(") &&
5633
5639
  (selector.includes(":is()") ||
5634
5640
  selector.includes(":where()") ||
5635
5641
  (selector.includes(":where(") &&
5636
- selector.includes(":-moz")))
5637
- ) {
5642
+ selector.includes(":-moz")));
5643
+ var viewTransitionSelector =
5644
+ selector.includes("::view-transition-");
5645
+ if (emptyIsWhereSelector || viewTransitionSelector) {
5638
5646
  selectorText = ".darkreader-unsupported-selector";
5639
5647
  }
5640
5648
  var ruleText = "".concat(selectorText, " {");
@@ -5942,6 +5950,116 @@
5942
5950
  };
5943
5951
  }
5944
5952
 
5953
+ var canUseSheetProxy$1 = false;
5954
+ document.addEventListener(
5955
+ "__darkreader__inlineScriptsAllowed",
5956
+ function () {
5957
+ return (canUseSheetProxy$1 = true);
5958
+ },
5959
+ {once: true}
5960
+ );
5961
+ function createSheetWatcher(
5962
+ element,
5963
+ safeGetSheetRules,
5964
+ callback,
5965
+ isCancelled
5966
+ ) {
5967
+ var rafSheetWatcher = null;
5968
+ function watchForSheetChanges() {
5969
+ watchForSheetChangesUsingProxy();
5970
+ if (!(canUseSheetProxy$1 && element.sheet)) {
5971
+ rafSheetWatcher = createRAFSheetWatcher(
5972
+ element,
5973
+ safeGetSheetRules,
5974
+ callback,
5975
+ isCancelled
5976
+ );
5977
+ rafSheetWatcher.start();
5978
+ }
5979
+ }
5980
+ var areSheetChangesPending = false;
5981
+ function onSheetChange() {
5982
+ canUseSheetProxy$1 = true;
5983
+ rafSheetWatcher === null || rafSheetWatcher === void 0
5984
+ ? void 0
5985
+ : rafSheetWatcher.stop();
5986
+ if (areSheetChangesPending) {
5987
+ return;
5988
+ }
5989
+ function handleSheetChanges() {
5990
+ areSheetChangesPending = false;
5991
+ if (isCancelled()) {
5992
+ return;
5993
+ }
5994
+ callback();
5995
+ }
5996
+ areSheetChangesPending = true;
5997
+ queueMicrotask(handleSheetChanges);
5998
+ }
5999
+ function watchForSheetChangesUsingProxy() {
6000
+ element.addEventListener(
6001
+ "__darkreader__updateSheet",
6002
+ onSheetChange
6003
+ );
6004
+ }
6005
+ function stopWatchingForSheetChangesUsingProxy() {
6006
+ element.removeEventListener(
6007
+ "__darkreader__updateSheet",
6008
+ onSheetChange
6009
+ );
6010
+ }
6011
+ function stopWatchingForSheetChanges() {
6012
+ stopWatchingForSheetChangesUsingProxy();
6013
+ rafSheetWatcher === null || rafSheetWatcher === void 0
6014
+ ? void 0
6015
+ : rafSheetWatcher.stop();
6016
+ }
6017
+ return {
6018
+ start: watchForSheetChanges,
6019
+ stop: stopWatchingForSheetChanges
6020
+ };
6021
+ }
6022
+ function createRAFSheetWatcher(
6023
+ element,
6024
+ safeGetSheetRules,
6025
+ callback,
6026
+ isCancelled
6027
+ ) {
6028
+ var rulesChangeKey = null;
6029
+ var rulesCheckFrameId = null;
6030
+ function getRulesChangeKey() {
6031
+ var rules = safeGetSheetRules();
6032
+ return rules ? rules.length : null;
6033
+ }
6034
+ function didRulesKeyChange() {
6035
+ return getRulesChangeKey() !== rulesChangeKey;
6036
+ }
6037
+ function watchForSheetChangesUsingRAF() {
6038
+ rulesChangeKey = getRulesChangeKey();
6039
+ stopWatchingForSheetChangesUsingRAF();
6040
+ var checkForUpdate = function () {
6041
+ var cancelled = isCancelled();
6042
+ if (!cancelled && didRulesKeyChange()) {
6043
+ rulesChangeKey = getRulesChangeKey();
6044
+ callback();
6045
+ }
6046
+ if (cancelled || (canUseSheetProxy$1 && element.sheet)) {
6047
+ stopWatchingForSheetChangesUsingRAF();
6048
+ return;
6049
+ }
6050
+ rulesCheckFrameId = requestAnimationFrame(checkForUpdate);
6051
+ };
6052
+ checkForUpdate();
6053
+ }
6054
+ function stopWatchingForSheetChangesUsingRAF() {
6055
+ rulesCheckFrameId && cancelAnimationFrame(rulesCheckFrameId);
6056
+ }
6057
+ return {
6058
+ start: watchForSheetChangesUsingRAF,
6059
+ stop: stopWatchingForSheetChangesUsingRAF
6060
+ };
6061
+ }
6062
+
5945
6063
  var STYLE_SELECTOR = 'style, link[rel*="stylesheet" i]:not([disabled])';
5946
6064
  function isFontsGoogleApiStyle(element) {
5947
6065
  if (!element.href) {
@@ -5955,10 +6073,14 @@
5955
6073
  return false;
5956
6074
  }
5957
6075
  }
6076
+ var hostsBreakingOnSVGStyleOverride = ["www.onet.pl"];
5958
6077
  function shouldManageStyle(element) {
5959
6078
  return (
5960
6079
  (element instanceof HTMLStyleElement ||
5961
- element instanceof SVGStyleElement ||
6080
+ (element instanceof SVGStyleElement &&
6081
+ !hostsBreakingOnSVGStyleOverride.includes(
6082
+ location.hostname
6083
+ )) ||
5962
6084
  (element instanceof HTMLLinkElement &&
5963
6085
  Boolean(element.rel) &&
5964
6086
  element.rel.toLowerCase().includes("stylesheet") &&
@@ -6000,14 +6122,6 @@
6000
6122
  }
6001
6123
  var syncStyleSet = new WeakSet();
6002
6124
  var corsStyleSet = new WeakSet();
6003
- var canOptimizeUsingProxy$1 = false;
6004
- document.addEventListener(
6005
- "__darkreader__inlineScriptsAllowed",
6006
- function () {
6007
- canOptimizeUsingProxy$1 = true;
6008
- },
6009
- {once: true, passive: true}
6010
- );
6011
6125
  var loadingLinkCounter = 0;
6012
6126
  var rejectorsForLoadingLinks = new Map();
6013
6127
  function cleanLoadingLinks() {
@@ -6037,9 +6151,27 @@
6037
6151
  var syncStylePositionWatcher = null;
6038
6152
  var cancelAsyncOperations = false;
6039
6153
  var isOverrideEmpty = true;
6154
+ var isAsyncCancelled = function () {
6155
+ return cancelAsyncOperations;
6156
+ };
6040
6157
  var sheetModifier = createStyleSheetModifier();
6041
- var observer = new MutationObserver(function () {
6042
- update();
6158
+ var observer = new MutationObserver(function (mutations) {
6159
+ var _a;
6160
+ if (
6161
+ mutations.some(function (m) {
6162
+ return m.type === "characterData";
6163
+ }) &&
6164
+ containsCSSImport()
6165
+ ) {
6166
+ var cssText = (
6167
+ (_a = element.textContent) !== null && _a !== void 0
6168
+ ? _a
6169
+ : ""
6170
+ ).trim();
6171
+ createOrUpdateCORSCopy(cssText, location.href).then(update);
6172
+ } else {
6173
+ update();
6174
+ }
6043
6175
  });
6044
6176
  var observerOptions = {
6045
6177
  attributes: true,
@@ -6147,12 +6279,7 @@
6147
6279
  var loadingLinkId = ++loadingLinkCounter;
6148
6280
  function getRulesAsync() {
6149
6281
  return __awaiter(this, void 0, void 0, function () {
6150
- var cssText,
6151
- cssBasePath,
6152
- _a,
6153
- cssRules,
6154
- accessError,
6155
- fullCSSText;
6282
+ var cssText, cssBasePath, _a, cssRules, accessError;
6156
6283
  var _b;
6157
6284
  return __generator(this, function (_c) {
6158
6285
  switch (_c.label) {
@@ -6212,29 +6339,64 @@
6212
6339
  }
6213
6340
  _c.label = 8;
6214
6341
  case 8:
6215
- if (!cssText) return [3, 13];
6216
- _c.label = 9;
6342
+ return [
6343
+ 4,
6344
+ createOrUpdateCORSCopy(cssText, cssBasePath)
6345
+ ];
6217
6346
  case 9:
6218
- _c.trys.push([9, 11, , 12]);
6347
+ _c.sent();
6348
+ if (corsCopy) {
6349
+ return [2, corsCopy.sheet.cssRules];
6350
+ }
6351
+ return [2, null];
6352
+ }
6353
+ });
6354
+ });
6355
+ }
6356
+ function createOrUpdateCORSCopy(cssText, cssBasePath) {
6357
+ var _a, _b;
6358
+ return __awaiter(this, void 0, void 0, function () {
6359
+ var fullCSSText;
6360
+ return __generator(this, function (_c) {
6361
+ switch (_c.label) {
6362
+ case 0:
6363
+ if (!cssText) return [3, 5];
6364
+ _c.label = 1;
6365
+ case 1:
6366
+ _c.trys.push([1, 3, , 4]);
6219
6367
  return [4, replaceCSSImports(cssText, cssBasePath)];
6220
- case 10:
6368
+ case 2:
6221
6369
  fullCSSText = _c.sent();
6222
- corsCopy = createCORSCopy(element, fullCSSText);
6223
- return [3, 12];
6224
- case 11:
6370
+ if (corsCopy) {
6371
+ if (
6372
+ ((_b =
6373
+ (_a = corsCopy.textContent) === null ||
6374
+ _a === void 0
6375
+ ? void 0
6376
+ : _a.length) !== null &&
6377
+ _b !== void 0
6378
+ ? _b
6379
+ : 0) < fullCSSText.length
6380
+ ) {
6381
+ corsCopy.textContent = fullCSSText;
6382
+ }
6383
+ } else {
6384
+ corsCopy = createCORSCopy(element, fullCSSText);
6385
+ }
6386
+ return [3, 4];
6387
+ case 3:
6225
6388
  _c.sent();
6226
- return [3, 12];
6227
- case 12:
6389
+ return [3, 4];
6390
+ case 4:
6228
6391
  if (corsCopy) {
6229
6392
  corsCopyPositionWatcher = watchForNodePosition(
6230
6393
  corsCopy,
6231
6394
  "prev-sibling"
6232
6395
  );
6233
- return [2, corsCopy.sheet.cssRules];
6234
6396
  }
6235
- _c.label = 13;
6236
- case 13:
6237
- return [2, null];
6397
+ _c.label = 5;
6398
+ case 5:
6399
+ return [2];
6238
6400
  }
6239
6401
  });
6240
6402
  });
@@ -6315,9 +6477,7 @@
6315
6477
  theme: theme,
6316
6478
  ignoreImageAnalysis: ignoreImageAnalysis,
6317
6479
  force: force,
6318
- isAsyncCancelled: function () {
6319
- return cancelAsyncOperations;
6320
- }
6480
+ isAsyncCancelled: isAsyncCancelled
6321
6481
  });
6322
6482
  isOverrideEmpty = syncStyle.sheet.cssRules.length === 0;
6323
6483
  if (sheetModifier.shouldRebuildStyle()) {
@@ -6350,84 +6510,18 @@
6350
6510
  }
6351
6511
  return cssRules;
6352
6512
  }
6353
- function watchForSheetChanges() {
6354
- watchForSheetChangesUsingProxy();
6355
- if (!(canOptimizeUsingProxy$1 && element.sheet)) {
6356
- watchForSheetChangesUsingRAF();
6357
- }
6358
- }
6359
- var rulesChangeKey = null;
6360
- var rulesCheckFrameId = null;
6361
- function getRulesChangeKey() {
6362
- var rules = safeGetSheetRules();
6363
- return rules ? rules.length : null;
6364
- }
6365
- function didRulesKeyChange() {
6366
- return getRulesChangeKey() !== rulesChangeKey;
6367
- }
6368
- function watchForSheetChangesUsingRAF() {
6369
- rulesChangeKey = getRulesChangeKey();
6370
- stopWatchingForSheetChangesUsingRAF();
6371
- var checkForUpdate = function () {
6372
- if (didRulesKeyChange()) {
6373
- rulesChangeKey = getRulesChangeKey();
6374
- update();
6375
- }
6376
- if (canOptimizeUsingProxy$1 && element.sheet) {
6377
- stopWatchingForSheetChangesUsingRAF();
6378
- return;
6379
- }
6380
- rulesCheckFrameId = requestAnimationFrame(checkForUpdate);
6381
- };
6382
- checkForUpdate();
6383
- }
6384
- function stopWatchingForSheetChangesUsingRAF() {
6385
- cancelAnimationFrame(rulesCheckFrameId);
6386
- }
6387
- var areSheetChangesPending = false;
6388
- function onSheetChange() {
6389
- canOptimizeUsingProxy$1 = true;
6390
- stopWatchingForSheetChangesUsingRAF();
6391
- if (areSheetChangesPending) {
6392
- return;
6393
- }
6394
- function handleSheetChanges() {
6395
- areSheetChangesPending = false;
6396
- if (cancelAsyncOperations) {
6397
- return;
6398
- }
6399
- update();
6400
- }
6401
- areSheetChangesPending = true;
6402
- if (typeof queueMicrotask === "function") {
6403
- queueMicrotask(handleSheetChanges);
6404
- } else {
6405
- requestAnimationFrame(handleSheetChanges);
6406
- }
6407
- }
6408
- function watchForSheetChangesUsingProxy() {
6409
- element.addEventListener(
6410
- "__darkreader__updateSheet",
6411
- onSheetChange,
6412
- {passive: true}
6413
- );
6414
- }
6415
- function stopWatchingForSheetChangesUsingProxy() {
6416
- element.removeEventListener(
6417
- "__darkreader__updateSheet",
6418
- onSheetChange
6419
- );
6420
- }
6421
- function stopWatchingForSheetChanges() {
6422
- stopWatchingForSheetChangesUsingProxy();
6423
- stopWatchingForSheetChangesUsingRAF();
6424
- }
6513
+ var sheetChangeWatcher = createSheetWatcher(
6514
+ element,
6515
+ safeGetSheetRules,
6516
+ update,
6517
+ isAsyncCancelled
6518
+ );
6425
6519
  function pause() {
6426
6520
  observer.disconnect();
6427
6521
  cancelAsyncOperations = true;
6428
6522
  corsCopyPositionWatcher && corsCopyPositionWatcher.stop();
6429
6523
  syncStylePositionWatcher && syncStylePositionWatcher.stop();
6430
- stopWatchingForSheetChanges();
6524
+ sheetChangeWatcher.stop();
6431
6525
  }
6432
6526
  function destroy() {
6433
6527
  pause();
@@ -6443,7 +6537,7 @@
6443
6537
  function watch() {
6444
6538
  observer.observe(element, observerOptions);
6445
6539
  if (element instanceof HTMLStyleElement) {
6446
- watchForSheetChanges();
6540
+ sheetChangeWatcher.start();
6447
6541
  }
6448
6542
  }
6449
6543
  var maxMoveCount = 10;
@@ -6654,8 +6748,6 @@
6654
6748
  return cors;
6655
6749
  }
6656
6750
 
6657
- var observers = [];
6658
- var observedRoots;
6659
6751
  var definedCustomElements = new Set();
6660
6752
  var undefinedGroups = new Map();
6661
6753
  var elementsDefinitionCallback;
@@ -6779,9 +6871,35 @@
6779
6871
  handleIsDefined
6780
6872
  );
6781
6873
  }
6782
- function watchForStyleChanges(currentStyles, update, shadowRootDiscovered) {
6783
- stopWatchingForStyleChanges();
6784
- var prevStyles = new Set(currentStyles);
6874
+
6875
+ var observers = [];
6876
+ var observedRoots;
6877
+ function watchForStylePositions(
6878
+ currentStyles,
6879
+ update,
6880
+ shadowRootDiscovered
6881
+ ) {
6882
+ stopWatchingForStylePositions();
6883
+ var prevStylesByRoot = new WeakMap();
6884
+ var getPrevStyles = function (root) {
6885
+ if (!prevStylesByRoot.has(root)) {
6886
+ prevStylesByRoot.set(root, new Set());
6887
+ }
6888
+ return prevStylesByRoot.get(root);
6889
+ };
6890
+ currentStyles.forEach(function (node) {
6891
+ var root = node;
6892
+ while ((root = root.parentNode)) {
6893
+ if (
6894
+ root === document ||
6895
+ root.nodeType === Node.DOCUMENT_FRAGMENT_NODE
6896
+ ) {
6897
+ var prevStyles = getPrevStyles(root);
6898
+ prevStyles.add(node);
6899
+ break;
6900
+ }
6901
+ }
6902
+ });
6785
6903
  var prevStyleSiblings = new WeakMap();
6786
6904
  var nextStyleSiblings = new WeakMap();
6787
6905
  function saveStylePosition(style) {
@@ -6799,7 +6917,7 @@
6799
6917
  );
6800
6918
  }
6801
6919
  currentStyles.forEach(saveStylePosition);
6802
- function handleStyleOperations(operations) {
6920
+ function handleStyleOperations(root, operations) {
6803
6921
  var createdStyles = operations.createdStyles,
6804
6922
  removedStyles = operations.removedStyles,
6805
6923
  movedStyles = operations.movedStyles;
@@ -6812,6 +6930,7 @@
6812
6930
  removedStyles.forEach(function (s) {
6813
6931
  return forgetStylePosition(s);
6814
6932
  });
6933
+ var prevStyles = getPrevStyles(root);
6815
6934
  createdStyles.forEach(function (s) {
6816
6935
  return prevStyles.add(s);
6817
6936
  });
@@ -6830,7 +6949,7 @@
6830
6949
  });
6831
6950
  }
6832
6951
  }
6833
- function handleMinorTreeMutations(_a) {
6952
+ function handleMinorTreeMutations(root, _a) {
6834
6953
  var additions = _a.additions,
6835
6954
  moves = _a.moves,
6836
6955
  deletions = _a.deletions;
@@ -6852,13 +6971,13 @@
6852
6971
  return movedStyles.add(style);
6853
6972
  });
6854
6973
  });
6855
- handleStyleOperations({
6974
+ handleStyleOperations(root, {
6856
6975
  createdStyles: createdStyles,
6857
6976
  removedStyles: removedStyles,
6858
6977
  movedStyles: movedStyles
6859
6978
  });
6860
6979
  additions.forEach(function (n) {
6861
- extendedIterateShadowHosts(n);
6980
+ deepObserve(n);
6862
6981
  collectUndefinedElements(n);
6863
6982
  });
6864
6983
  additions.forEach(function (node) {
@@ -6870,6 +6989,7 @@
6870
6989
  var createdStyles = new Set();
6871
6990
  var removedStyles = new Set();
6872
6991
  var movedStyles = new Set();
6992
+ var prevStyles = getPrevStyles(root);
6873
6993
  styles.forEach(function (s) {
6874
6994
  if (!prevStyles.has(s)) {
6875
6995
  createdStyles.add(s);
@@ -6889,12 +7009,12 @@
6889
7009
  movedStyles.add(s);
6890
7010
  }
6891
7011
  });
6892
- handleStyleOperations({
7012
+ handleStyleOperations(root, {
6893
7013
  createdStyles: createdStyles,
6894
7014
  removedStyles: removedStyles,
6895
7015
  movedStyles: movedStyles
6896
7016
  });
6897
- extendedIterateShadowHosts(root);
7017
+ deepObserve(root);
6898
7018
  collectUndefinedElements(root);
6899
7019
  }
6900
7020
  function handleAttributeMutations(mutations) {
@@ -6946,11 +7066,11 @@
6946
7066
  observe(shadowRoot);
6947
7067
  shadowRootDiscovered(shadowRoot);
6948
7068
  }
6949
- function extendedIterateShadowHosts(node) {
7069
+ function deepObserve(node) {
6950
7070
  iterateShadowHosts(node, subscribeForShadowRootChanges);
6951
7071
  }
6952
7072
  observe(document);
6953
- extendedIterateShadowHosts(document.documentElement);
7073
+ deepObserve(document.documentElement);
6954
7074
  watchWhenCustomElementsDefined(function (hosts) {
6955
7075
  var newStyles = [];
6956
7076
  hosts.forEach(function (host) {
@@ -6963,13 +7083,11 @@
6963
7083
  return;
6964
7084
  }
6965
7085
  subscribeForShadowRootChanges(host);
6966
- extendedIterateShadowHosts(shadowRoot);
7086
+ deepObserve(shadowRoot);
6967
7087
  collectUndefinedElements(shadowRoot);
6968
7088
  });
6969
7089
  });
6970
- document.addEventListener("__darkreader__isDefined", handleIsDefined, {
6971
- passive: true
6972
- });
7090
+ document.addEventListener("__darkreader__isDefined", handleIsDefined);
6973
7091
  collectUndefinedElements(document);
6974
7092
  }
6975
7093
  function resetObservers() {
@@ -6979,17 +7097,30 @@
6979
7097
  observers.splice(0, observers.length);
6980
7098
  observedRoots = new WeakSet();
6981
7099
  }
6982
- function stopWatchingForStyleChanges() {
7100
+ function stopWatchingForStylePositions() {
6983
7101
  resetObservers();
6984
7102
  unsubscribeFromDefineCustomElements();
6985
7103
  }
6986
7104
 
7105
+ function watchForStyleChanges(currentStyles, update, shadowRootDiscovered) {
7106
+ watchForStylePositions(currentStyles, update, shadowRootDiscovered);
7107
+ }
7108
+ function stopWatchingForStyleChanges() {
7109
+ stopWatchingForStylePositions();
7110
+ }
7111
+
7112
+ var canUseSheetProxy = false;
7113
+ document.addEventListener(
7114
+ "__darkreader__inlineScriptsAllowed",
7115
+ function () {
7116
+ return (canUseSheetProxy = true);
7117
+ },
7118
+ {once: true}
7119
+ );
6987
7120
  var overrides = new WeakSet();
6988
- function hasAdoptedStyleSheets(node) {
6989
- return (
6990
- Array.isArray(node.adoptedStyleSheets) &&
6991
- node.adoptedStyleSheets.length > 0
6992
- );
7121
+ var overridesBySource = new WeakMap();
7122
+ function canHaveAdoptedStyleSheets(node) {
7123
+ return Array.isArray(node.adoptedStyleSheets);
6993
7124
  }
6994
7125
  function createAdoptedStyleSheetOverride(node) {
6995
7126
  var cancelAsyncOperations = false;
@@ -7030,8 +7161,15 @@
7030
7161
  if (node.adoptedStyleSheets.length !== newSheets.length) {
7031
7162
  node.adoptedStyleSheets = newSheets;
7032
7163
  }
7164
+ sourceSheets = new WeakSet();
7165
+ sourceDeclarations = new WeakSet();
7033
7166
  }
7167
+ var cleaners = [];
7034
7168
  function destroy() {
7169
+ cleaners.forEach(function (c) {
7170
+ return c();
7171
+ });
7172
+ cleaners.splice(0);
7035
7173
  cancelAsyncOperations = true;
7036
7174
  clear();
7037
7175
  if (frameId) {
@@ -7051,6 +7189,8 @@
7051
7189
  }
7052
7190
  return count;
7053
7191
  }
7192
+ var sourceSheets = new WeakSet();
7193
+ var sourceDeclarations = new WeakSet();
7054
7194
  function render(theme, ignoreImageAnalysis) {
7055
7195
  clear();
7056
7196
  var _loop_1 = function (i) {
@@ -7058,8 +7198,19 @@
7058
7198
  if (overrides.has(sheet)) {
7059
7199
  return "continue";
7060
7200
  }
7201
+ sourceSheets.add(sheet);
7202
+ var readyOverride = overridesBySource.get(sheet);
7203
+ if (readyOverride) {
7204
+ rulesChangeKey = getRulesChangeKey();
7205
+ injectSheet(sheet, readyOverride);
7206
+ return "continue";
7207
+ }
7061
7208
  var rules = sheet.cssRules;
7062
7209
  var override = new CSSStyleSheet();
7210
+ overridesBySource.set(sheet, override);
7211
+ iterateCSSRules(rules, function (rule) {
7212
+ return sourceDeclarations.add(rule.style);
7213
+ });
7063
7214
  var prepareSheet = function () {
7064
7215
  for (
7065
7216
  var i_1 = override.cssRules.length - 1;
@@ -7068,6 +7219,7 @@
7068
7219
  ) {
7069
7220
  override.deleteRule(i_1);
7070
7221
  }
7222
+ override.insertRule("#__darkreader__adoptedOverride {}");
7071
7223
  injectSheet(sheet, override);
7072
7224
  overrides.add(override);
7073
7225
  return override;
@@ -7089,21 +7241,66 @@
7089
7241
  }
7090
7242
  rulesChangeKey = getRulesChangeKey();
7091
7243
  }
7244
+ var callbackRequested = false;
7245
+ function handleArrayChange(callback) {
7246
+ if (callbackRequested) {
7247
+ return;
7248
+ }
7249
+ callbackRequested = true;
7250
+ queueMicrotask(function () {
7251
+ callbackRequested = false;
7252
+ var sheets = node.adoptedStyleSheets.filter(function (s) {
7253
+ return !overrides.has(s);
7254
+ });
7255
+ sheets.forEach(function (sheet) {
7256
+ return overridesBySource.delete(sheet);
7257
+ });
7258
+ callback(sheets);
7259
+ });
7260
+ }
7092
7261
  function checkForUpdates() {
7093
7262
  return getRulesChangeKey() !== rulesChangeKey;
7094
7263
  }
7095
7264
  var frameId = null;
7096
- function watch(callback) {
7265
+ function watchUsingRAF(callback) {
7097
7266
  frameId = requestAnimationFrame(function () {
7267
+ if (canUseSheetProxy) {
7268
+ return;
7269
+ }
7098
7270
  if (checkForUpdates()) {
7099
- var sheets = node.adoptedStyleSheets.filter(function (s) {
7100
- return !overrides.has(s);
7101
- });
7102
- callback(sheets);
7271
+ handleArrayChange(callback);
7103
7272
  }
7104
- watch(callback);
7273
+ watchUsingRAF(callback);
7274
+ });
7275
+ }
7276
+ function addSheetChangeEventListener(type, listener) {
7277
+ node.addEventListener(type, listener);
7278
+ cleaners.push(function () {
7279
+ return node.removeEventListener(type, listener);
7105
7280
  });
7106
7281
  }
7282
+ function watch(callback) {
7283
+ var onAdoptedSheetsChange = function () {
7284
+ canUseSheetProxy = true;
7285
+ handleArrayChange(callback);
7286
+ };
7287
+ addSheetChangeEventListener(
7288
+ "__darkreader__adoptedStyleSheetsChange",
7289
+ onAdoptedSheetsChange
7290
+ );
7291
+ addSheetChangeEventListener(
7292
+ "__darkreader__adoptedStyleSheetChange",
7293
+ onAdoptedSheetsChange
7294
+ );
7295
+ addSheetChangeEventListener(
7296
+ "__darkreader__adoptedStyleDeclarationChange",
7297
+ onAdoptedSheetsChange
7298
+ );
7299
+ if (canUseSheetProxy) {
7300
+ return;
7301
+ }
7302
+ watchUsingRAF(callback);
7303
+ }
7107
7304
  return {
7108
7305
  render: render,
7109
7306
  destroy: destroy,
@@ -7232,340 +7429,207 @@
7232
7429
  document.dispatchEvent(
7233
7430
  new CustomEvent("__darkreader__inlineScriptsAllowed")
7234
7431
  );
7235
- var addRuleDescriptor = Object.getOwnPropertyDescriptor(
7236
- CSSStyleSheet.prototype,
7237
- "addRule"
7238
- );
7239
- var insertRuleDescriptor = Object.getOwnPropertyDescriptor(
7240
- CSSStyleSheet.prototype,
7241
- "insertRule"
7242
- );
7243
- var deleteRuleDescriptor = Object.getOwnPropertyDescriptor(
7244
- CSSStyleSheet.prototype,
7245
- "deleteRule"
7246
- );
7247
- var removeRuleDescriptor = Object.getOwnPropertyDescriptor(
7248
- CSSStyleSheet.prototype,
7249
- "removeRule"
7250
- );
7251
- var replaceDescriptor = Object.getOwnPropertyDescriptor(
7252
- CSSStyleSheet.prototype,
7253
- "replace"
7254
- );
7255
- var replaceSyncDescriptor = Object.getOwnPropertyDescriptor(
7256
- CSSStyleSheet.prototype,
7257
- "replaceSync"
7258
- );
7259
- var documentStyleSheetsDescriptor = enableStyleSheetsProxy
7260
- ? Object.getOwnPropertyDescriptor(Document.prototype, "styleSheets")
7261
- : null;
7262
- var customElementRegistryDefineDescriptor =
7263
- enableCustomElementRegistryProxy
7264
- ? Object.getOwnPropertyDescriptor(
7265
- CustomElementRegistry.prototype,
7266
- "define"
7267
- )
7268
- : null;
7269
- var shouldWrapHTMLElement = [
7270
- "baidu.com",
7271
- "baike.baidu.com",
7272
- "ditu.baidu.com",
7273
- "map.baidu.com",
7274
- "maps.baidu.com",
7275
- "haokan.baidu.com",
7276
- "pan.baidu.com",
7277
- "passport.baidu.com",
7278
- "tieba.baidu.com",
7279
- "www.baidu.com"
7280
- ].includes(location.hostname);
7281
- var getElementsByTagNameDescriptor = shouldWrapHTMLElement
7282
- ? Object.getOwnPropertyDescriptor(
7283
- Element.prototype,
7284
- "getElementsByTagName"
7285
- )
7286
- : null;
7287
- var shouldProxyChildNodes = location.hostname === "www.vy.no";
7288
- var childNodesDescriptor = shouldProxyChildNodes
7289
- ? Object.getOwnPropertyDescriptor(Node.prototype, "childNodes")
7290
- : null;
7291
7432
  var cleaners = [];
7292
- var cleanUp = function () {
7293
- Object.defineProperty(
7294
- CSSStyleSheet.prototype,
7295
- "addRule",
7296
- addRuleDescriptor
7297
- );
7298
- Object.defineProperty(
7299
- CSSStyleSheet.prototype,
7300
- "insertRule",
7301
- insertRuleDescriptor
7302
- );
7303
- Object.defineProperty(
7304
- CSSStyleSheet.prototype,
7305
- "deleteRule",
7306
- deleteRuleDescriptor
7307
- );
7308
- Object.defineProperty(
7309
- CSSStyleSheet.prototype,
7310
- "removeRule",
7311
- removeRuleDescriptor
7312
- );
7313
- Object.defineProperty(
7314
- CSSStyleSheet.prototype,
7315
- "replace",
7316
- replaceDescriptor
7317
- );
7318
- Object.defineProperty(
7319
- CSSStyleSheet.prototype,
7320
- "replaceSync",
7321
- replaceSyncDescriptor
7322
- );
7323
- document.removeEventListener("__darkreader__cleanUp", cleanUp);
7324
- document.removeEventListener(
7325
- "__darkreader__addUndefinedResolver",
7326
- addUndefinedResolver
7327
- );
7328
- document.removeEventListener(
7329
- "__darkreader__blobURLCheckRequest",
7330
- checkBlobURLSupport
7331
- );
7332
- if (enableStyleSheetsProxy) {
7333
- Object.defineProperty(
7334
- Document.prototype,
7335
- "styleSheets",
7336
- documentStyleSheetsDescriptor
7337
- );
7338
- }
7339
- if (enableCustomElementRegistryProxy) {
7340
- Object.defineProperty(
7341
- CustomElementRegistry.prototype,
7342
- "define",
7343
- customElementRegistryDefineDescriptor
7344
- );
7345
- }
7346
- if (shouldWrapHTMLElement) {
7347
- Object.defineProperty(
7348
- Element.prototype,
7349
- "getElementsByTagName",
7350
- getElementsByTagNameDescriptor
7351
- );
7352
- }
7353
- if (shouldProxyChildNodes) {
7354
- Object.defineProperty(
7355
- Node.prototype,
7356
- "childNodes",
7357
- childNodesDescriptor
7358
- );
7359
- }
7433
+ function cleanUp() {
7360
7434
  cleaners.forEach(function (clean) {
7361
7435
  return clean();
7362
7436
  });
7363
7437
  cleaners.splice(0);
7364
- };
7365
- var addUndefinedResolverInner = function (tag) {
7366
- customElements.whenDefined(tag).then(function () {
7367
- document.dispatchEvent(
7368
- new CustomEvent("__darkreader__isDefined", {
7369
- detail: {tag: tag}
7370
- })
7371
- );
7438
+ }
7439
+ function documentEventListener(type, listener, options) {
7440
+ document.addEventListener(type, listener, options);
7441
+ cleaners.push(function () {
7442
+ return document.removeEventListener(type, listener);
7372
7443
  });
7373
- };
7374
- var addUndefinedResolver = function (e) {
7375
- return addUndefinedResolverInner(e.detail.tag);
7376
- };
7377
- document.addEventListener("__darkreader__cleanUp", cleanUp, {
7378
- passive: true
7379
- });
7380
- document.addEventListener(
7381
- "__darkreader__addUndefinedResolver",
7382
- addUndefinedResolver,
7383
- {passive: true}
7384
- );
7385
- document.addEventListener(
7386
- "__darkreader__blobURLCheckRequest",
7387
- checkBlobURLSupport,
7388
- {once: true}
7389
- );
7390
- var updateSheetEvent = new Event("__darkreader__updateSheet");
7391
- function proxyAddRule(selector, style, index) {
7392
- addRuleDescriptor.value.call(this, selector, style, index);
7393
- if (
7394
- this.ownerNode &&
7395
- !(
7396
- this.ownerNode.classList &&
7397
- this.ownerNode.classList.contains("darkreader")
7398
- )
7399
- ) {
7400
- this.ownerNode.dispatchEvent(updateSheetEvent);
7401
- }
7402
- return -1;
7403
7444
  }
7404
- function proxyInsertRule(rule, index) {
7405
- var returnValue = insertRuleDescriptor.value.call(
7406
- this,
7407
- rule,
7408
- index
7409
- );
7410
- if (
7411
- this.ownerNode &&
7412
- !(
7413
- this.ownerNode.classList &&
7414
- this.ownerNode.classList.contains("darkreader")
7415
- )
7416
- ) {
7417
- this.ownerNode.dispatchEvent(updateSheetEvent);
7418
- }
7419
- return returnValue;
7445
+ documentEventListener("__darkreader__cleanUp", cleanUp);
7446
+ function overrideProperty(cls, prop, overrides) {
7447
+ var proto = cls.prototype;
7448
+ var oldDescriptor = Object.getOwnPropertyDescriptor(proto, prop);
7449
+ var newDescriptor = __assign({}, oldDescriptor);
7450
+ Object.keys(overrides).forEach(function (key) {
7451
+ var factory = overrides[key];
7452
+ newDescriptor[key] = factory(oldDescriptor[key]);
7453
+ });
7454
+ Object.defineProperty(proto, prop, newDescriptor);
7455
+ cleaners.push(function () {
7456
+ return Object.defineProperty(proto, prop, oldDescriptor);
7457
+ });
7420
7458
  }
7421
- function proxyDeleteRule(index) {
7422
- deleteRuleDescriptor.value.call(this, index);
7423
- if (
7424
- this.ownerNode &&
7425
- !(
7426
- this.ownerNode.classList &&
7427
- this.ownerNode.classList.contains("darkreader")
7428
- )
7429
- ) {
7430
- this.ownerNode.dispatchEvent(updateSheetEvent);
7431
- }
7459
+ function override(cls, prop, factory) {
7460
+ overrideProperty(cls, prop, {value: factory});
7432
7461
  }
7433
- function proxyRemoveRule(index) {
7434
- removeRuleDescriptor.value.call(this, index);
7435
- if (
7436
- this.ownerNode &&
7437
- !(
7438
- this.ownerNode.classList &&
7439
- this.ownerNode.classList.contains("darkreader")
7440
- )
7441
- ) {
7442
- this.ownerNode.dispatchEvent(updateSheetEvent);
7462
+ function isDRElement(element) {
7463
+ var _a;
7464
+ return (_a =
7465
+ element === null || element === void 0
7466
+ ? void 0
7467
+ : element.classList) === null || _a === void 0
7468
+ ? void 0
7469
+ : _a.contains("darkreader");
7470
+ }
7471
+ function isDRSheet(sheet) {
7472
+ return isDRElement(sheet.ownerNode);
7473
+ }
7474
+ var updateSheetEvent = new CustomEvent("__darkreader__updateSheet");
7475
+ var adoptedSheetChangeEvent = new CustomEvent(
7476
+ "__darkreader__adoptedStyleSheetChange"
7477
+ );
7478
+ var adoptedSheetOwners = new WeakMap();
7479
+ var adoptedDeclarationSheets = new WeakMap();
7480
+ function onAdoptedSheetChange(sheet) {
7481
+ var owners = adoptedSheetOwners.get(sheet);
7482
+ owners === null || owners === void 0
7483
+ ? void 0
7484
+ : owners.forEach(function (node) {
7485
+ if (node.isConnected) {
7486
+ node.dispatchEvent(adoptedSheetChangeEvent);
7487
+ } else {
7488
+ owners.delete(node);
7489
+ }
7490
+ });
7491
+ }
7492
+ function reportSheetChange(sheet) {
7493
+ if (sheet.ownerNode && !isDRSheet(sheet)) {
7494
+ sheet.ownerNode.dispatchEvent(updateSheetEvent);
7495
+ }
7496
+ if (adoptedSheetOwners.has(sheet)) {
7497
+ onAdoptedSheetChange(sheet);
7443
7498
  }
7444
7499
  }
7445
- function proxyReplace(cssText) {
7446
- var _this = this;
7447
- var returnValue = replaceDescriptor.value.call(this, cssText);
7500
+ function reportSheetChangeAsync(sheet, promise) {
7501
+ var ownerNode = sheet.ownerNode;
7448
7502
  if (
7449
- this.ownerNode &&
7450
- !(
7451
- this.ownerNode.classList &&
7452
- this.ownerNode.classList.contains("darkreader")
7453
- ) &&
7454
- returnValue &&
7455
- returnValue instanceof Promise
7503
+ ownerNode &&
7504
+ !isDRSheet(sheet) &&
7505
+ promise &&
7506
+ promise instanceof Promise
7456
7507
  ) {
7457
- returnValue.then(function () {
7458
- return _this.ownerNode.dispatchEvent(updateSheetEvent);
7508
+ promise.then(function () {
7509
+ return ownerNode.dispatchEvent(updateSheetEvent);
7459
7510
  });
7460
7511
  }
7461
- return returnValue;
7462
- }
7463
- function proxyReplaceSync(cssText) {
7464
- replaceSyncDescriptor.value.call(this, cssText);
7465
- if (
7466
- this.ownerNode &&
7467
- !(
7468
- this.ownerNode.classList &&
7469
- this.ownerNode.classList.contains("darkreader")
7470
- )
7471
- ) {
7472
- this.ownerNode.dispatchEvent(updateSheetEvent);
7512
+ if (adoptedSheetOwners.has(sheet)) {
7513
+ if (promise && promise instanceof Promise) {
7514
+ promise.then(function () {
7515
+ return onAdoptedSheetChange(sheet);
7516
+ });
7517
+ }
7473
7518
  }
7474
7519
  }
7475
- function proxyDocumentStyleSheets() {
7476
- var _this = this;
7477
- var getCurrentValue = function () {
7478
- var docSheets = documentStyleSheetsDescriptor.get.call(_this);
7479
- var filteredSheets = __spreadArray(
7480
- [],
7481
- __read(docSheets),
7482
- false
7483
- ).filter(function (styleSheet) {
7484
- return (
7485
- styleSheet.ownerNode &&
7486
- !(
7487
- styleSheet.ownerNode.classList &&
7488
- styleSheet.ownerNode.classList.contains(
7489
- "darkreader"
7490
- )
7491
- )
7492
- );
7493
- });
7494
- filteredSheets.item = function (item) {
7495
- return filteredSheets[item];
7496
- };
7497
- return Object.setPrototypeOf(
7498
- filteredSheets,
7499
- StyleSheetList.prototype
7500
- );
7520
+ override(CSSStyleSheet, "addRule", function (native) {
7521
+ return function (selector, style, index) {
7522
+ native.call(this, selector, style, index);
7523
+ reportSheetChange(this);
7524
+ return -1;
7501
7525
  };
7502
- var elements = getCurrentValue();
7503
- var styleSheetListBehavior = {
7504
- get: function (_, property) {
7505
- return getCurrentValue()[property];
7506
- }
7526
+ });
7527
+ override(CSSStyleSheet, "insertRule", function (native) {
7528
+ return function (rule, index) {
7529
+ var returnValue = native.call(this, rule, index);
7530
+ reportSheetChange(this);
7531
+ return returnValue;
7507
7532
  };
7508
- elements = new Proxy(elements, styleSheetListBehavior);
7509
- return elements;
7510
- }
7511
- function proxyCustomElementRegistryDefine(name, constructor, options) {
7512
- addUndefinedResolverInner(name);
7513
- customElementRegistryDefineDescriptor.value.call(
7514
- this,
7515
- name,
7516
- constructor,
7517
- options
7518
- );
7519
- }
7520
- function proxyGetElementsByTagName(tagName) {
7521
- var _this = this;
7522
- if (tagName !== "style") {
7523
- return getElementsByTagNameDescriptor.value.call(this, tagName);
7524
- }
7525
- var getCurrentElementValue = function () {
7526
- var elements = getElementsByTagNameDescriptor.value.call(
7527
- _this,
7528
- tagName
7529
- );
7530
- return Object.setPrototypeOf(
7531
- __spreadArray([], __read(elements), false).filter(
7532
- function (element) {
7533
- return (
7534
- element &&
7535
- !(
7536
- element.classList &&
7537
- element.classList.contains("darkreader")
7538
- )
7539
- );
7540
- }
7541
- ),
7542
- NodeList.prototype
7543
- );
7533
+ });
7534
+ override(CSSStyleSheet, "deleteRule", function (native) {
7535
+ return function (index) {
7536
+ native.call(this, index);
7537
+ reportSheetChange(this);
7544
7538
  };
7545
- var elements = getCurrentElementValue();
7546
- var nodeListBehavior = {
7547
- get: function (_, property) {
7548
- return getCurrentElementValue()[
7549
- Number(property) || property
7550
- ];
7551
- }
7539
+ });
7540
+ override(CSSStyleSheet, "removeRule", function (native) {
7541
+ return function (index) {
7542
+ native.call(this, index);
7543
+ reportSheetChange(this);
7552
7544
  };
7553
- elements = new Proxy(elements, nodeListBehavior);
7554
- return elements;
7555
- }
7556
- function proxyChildNodes() {
7557
- var childNodes = childNodesDescriptor.get.call(this);
7558
- return Object.setPrototypeOf(
7559
- __spreadArray([], __read(childNodes), false).filter(
7560
- function (element) {
7561
- return (
7562
- !element.classList ||
7563
- !element.classList.contains("darkreader")
7564
- );
7545
+ });
7546
+ override(CSSStyleSheet, "replace", function (native) {
7547
+ return function (cssText) {
7548
+ var returnValue = native.call(this, cssText);
7549
+ reportSheetChangeAsync(this, returnValue);
7550
+ return returnValue;
7551
+ };
7552
+ });
7553
+ override(CSSStyleSheet, "replaceSync", function (native) {
7554
+ return function (cssText) {
7555
+ native.call(this, cssText);
7556
+ reportSheetChange(this);
7557
+ };
7558
+ });
7559
+ var shouldWrapHTMLElement =
7560
+ location.hostname === "baidu.com" ||
7561
+ location.hostname.endsWith(".baidu.com");
7562
+ if (shouldWrapHTMLElement) {
7563
+ override(Element, "getElementsByTagName", function (native) {
7564
+ return function (tagName) {
7565
+ var _this = this;
7566
+ if (tagName !== "style") {
7567
+ return native.call(this, tagName);
7565
7568
  }
7566
- ),
7567
- NodeList.prototype
7568
- );
7569
+ var getCurrentElementValue = function () {
7570
+ var elements = native.call(_this, tagName);
7571
+ return Object.setPrototypeOf(
7572
+ __spreadArray([], __read(elements), false).filter(
7573
+ function (element) {
7574
+ return element && !isDRElement(element);
7575
+ }
7576
+ ),
7577
+ NodeList.prototype
7578
+ );
7579
+ };
7580
+ var elements = getCurrentElementValue();
7581
+ var nodeListBehavior = {
7582
+ get: function (_, property) {
7583
+ return getCurrentElementValue()[
7584
+ Number(property) || property
7585
+ ];
7586
+ }
7587
+ };
7588
+ elements = new Proxy(elements, nodeListBehavior);
7589
+ return elements;
7590
+ };
7591
+ });
7592
+ }
7593
+ var shouldProxyChildNodes = location.hostname === "www.vy.no";
7594
+ if (shouldProxyChildNodes) {
7595
+ overrideProperty(Node, "childNodes", {
7596
+ get: function (native) {
7597
+ return function () {
7598
+ var childNodes = native.call(this);
7599
+ return Object.setPrototypeOf(
7600
+ __spreadArray([], __read(childNodes), false).filter(
7601
+ function (element) {
7602
+ return !isDRElement(element);
7603
+ }
7604
+ ),
7605
+ NodeList.prototype
7606
+ );
7607
+ };
7608
+ }
7609
+ });
7610
+ }
7611
+ function resolveCustomElement(tag) {
7612
+ customElements.whenDefined(tag).then(function () {
7613
+ document.dispatchEvent(
7614
+ new CustomEvent("__darkreader__isDefined", {
7615
+ detail: {tag: tag}
7616
+ })
7617
+ );
7618
+ });
7619
+ }
7620
+ documentEventListener(
7621
+ "__darkreader__addUndefinedResolver",
7622
+ function (e) {
7623
+ return resolveCustomElement(e.detail.tag);
7624
+ }
7625
+ );
7626
+ if (enableCustomElementRegistryProxy) {
7627
+ override(CustomElementRegistry, "define", function (native) {
7628
+ return function (name, constructor, options) {
7629
+ resolveCustomElement(name);
7630
+ native.call(this, name, constructor, options);
7631
+ };
7632
+ });
7569
7633
  }
7570
7634
  function checkBlobURLSupport() {
7571
7635
  return __awaiter(this, void 0, void 0, function () {
@@ -7617,79 +7681,195 @@
7617
7681
  });
7618
7682
  });
7619
7683
  }
7620
- Object.defineProperty(
7621
- CSSStyleSheet.prototype,
7622
- "addRule",
7623
- __assign(__assign({}, addRuleDescriptor), {value: proxyAddRule})
7624
- );
7625
- Object.defineProperty(
7626
- CSSStyleSheet.prototype,
7627
- "insertRule",
7628
- __assign(__assign({}, insertRuleDescriptor), {
7629
- value: proxyInsertRule
7630
- })
7631
- );
7632
- Object.defineProperty(
7633
- CSSStyleSheet.prototype,
7634
- "deleteRule",
7635
- __assign(__assign({}, deleteRuleDescriptor), {
7636
- value: proxyDeleteRule
7637
- })
7638
- );
7639
- Object.defineProperty(
7640
- CSSStyleSheet.prototype,
7641
- "removeRule",
7642
- __assign(__assign({}, removeRuleDescriptor), {
7643
- value: proxyRemoveRule
7644
- })
7645
- );
7646
- Object.defineProperty(
7647
- CSSStyleSheet.prototype,
7648
- "replace",
7649
- __assign(__assign({}, replaceDescriptor), {value: proxyReplace})
7650
- );
7651
- Object.defineProperty(
7652
- CSSStyleSheet.prototype,
7653
- "replaceSync",
7654
- __assign(__assign({}, replaceSyncDescriptor), {
7655
- value: proxyReplaceSync
7656
- })
7684
+ documentEventListener(
7685
+ "__darkreader__blobURLCheckRequest",
7686
+ checkBlobURLSupport,
7687
+ {once: true}
7657
7688
  );
7658
7689
  if (enableStyleSheetsProxy) {
7659
- Object.defineProperty(
7660
- Document.prototype,
7661
- "styleSheets",
7662
- __assign(__assign({}, documentStyleSheetsDescriptor), {
7663
- get: proxyDocumentStyleSheets
7664
- })
7665
- );
7666
- }
7667
- if (enableCustomElementRegistryProxy) {
7668
- Object.defineProperty(
7669
- CustomElementRegistry.prototype,
7670
- "define",
7671
- __assign(__assign({}, customElementRegistryDefineDescriptor), {
7672
- value: proxyCustomElementRegistryDefine
7673
- })
7674
- );
7690
+ overrideProperty(Document, "styleSheets", {
7691
+ get: function (native) {
7692
+ return function () {
7693
+ var _this = this;
7694
+ var getCurrentValue = function () {
7695
+ var docSheets = native.call(_this);
7696
+ var filteredSheets = __spreadArray(
7697
+ [],
7698
+ __read(docSheets),
7699
+ false
7700
+ ).filter(function (styleSheet) {
7701
+ return (
7702
+ styleSheet.ownerNode &&
7703
+ !isDRSheet(styleSheet)
7704
+ );
7705
+ });
7706
+ filteredSheets.item = function (item) {
7707
+ return filteredSheets[item];
7708
+ };
7709
+ return Object.setPrototypeOf(
7710
+ filteredSheets,
7711
+ StyleSheetList.prototype
7712
+ );
7713
+ };
7714
+ var elements = getCurrentValue();
7715
+ var styleSheetListBehavior = {
7716
+ get: function (_, property) {
7717
+ return getCurrentValue()[property];
7718
+ }
7719
+ };
7720
+ elements = new Proxy(elements, styleSheetListBehavior);
7721
+ return elements;
7722
+ };
7723
+ }
7724
+ });
7675
7725
  }
7676
- if (shouldWrapHTMLElement) {
7677
- Object.defineProperty(
7678
- Element.prototype,
7679
- "getElementsByTagName",
7680
- __assign(__assign({}, getElementsByTagNameDescriptor), {
7681
- value: proxyGetElementsByTagName
7682
- })
7726
+ {
7727
+ var adoptedSheetsSourceProxies_1 = new WeakMap();
7728
+ var adoptedSheetsProxySources_1 = new WeakMap();
7729
+ var adoptedSheetsChangeEvent_1 = new CustomEvent(
7730
+ "__darkreader__adoptedStyleSheetsChange"
7683
7731
  );
7684
- }
7685
- if (shouldProxyChildNodes) {
7686
- Object.defineProperty(
7687
- Node.prototype,
7688
- "childNodes",
7689
- __assign(__assign({}, childNodesDescriptor), {
7690
- get: proxyChildNodes
7691
- })
7732
+ var adoptedSheetOverrideCache_1 = new WeakSet();
7733
+ var adoptedSheetsSnapshots_1 = new WeakMap();
7734
+ var isDRAdoptedSheetOverride_1 = function (sheet) {
7735
+ if (!sheet || !sheet.cssRules) {
7736
+ return false;
7737
+ }
7738
+ if (adoptedSheetOverrideCache_1.has(sheet)) {
7739
+ return true;
7740
+ }
7741
+ if (
7742
+ sheet.cssRules.length > 0 &&
7743
+ sheet.cssRules[0].cssText.startsWith(
7744
+ "#__darkreader__adoptedOverride"
7745
+ )
7746
+ ) {
7747
+ adoptedSheetOverrideCache_1.add(sheet);
7748
+ return true;
7749
+ }
7750
+ return false;
7751
+ };
7752
+ var areArraysEqual_1 = function (a, b) {
7753
+ return (
7754
+ a.length === b.length &&
7755
+ a.every(function (x, i) {
7756
+ return x === b[i];
7757
+ })
7758
+ );
7759
+ };
7760
+ var onAdoptedSheetsChange_1 = function (node) {
7761
+ var prev = adoptedSheetsSnapshots_1.get(node);
7762
+ var curr = (node.adoptedStyleSheets || []).filter(function (s) {
7763
+ return !isDRAdoptedSheetOverride_1(s);
7764
+ });
7765
+ adoptedSheetsSnapshots_1.set(node, curr);
7766
+ if (!prev || !areArraysEqual_1(prev, curr)) {
7767
+ curr.forEach(function (sheet) {
7768
+ var e_1, _a;
7769
+ if (!adoptedSheetOwners.has(sheet)) {
7770
+ adoptedSheetOwners.set(sheet, new Set());
7771
+ }
7772
+ adoptedSheetOwners.get(sheet).add(node);
7773
+ try {
7774
+ for (
7775
+ var _b = __values(sheet.cssRules),
7776
+ _c = _b.next();
7777
+ !_c.done;
7778
+ _c = _b.next()
7779
+ ) {
7780
+ var rule = _c.value;
7781
+ var declaration = rule.style;
7782
+ if (declaration) {
7783
+ adoptedDeclarationSheets.set(
7784
+ declaration,
7785
+ sheet
7786
+ );
7787
+ }
7788
+ }
7789
+ } catch (e_1_1) {
7790
+ e_1 = {error: e_1_1};
7791
+ } finally {
7792
+ try {
7793
+ if (_c && !_c.done && (_a = _b.return))
7794
+ _a.call(_b);
7795
+ } finally {
7796
+ if (e_1) throw e_1.error;
7797
+ }
7798
+ }
7799
+ });
7800
+ node.dispatchEvent(adoptedSheetsChangeEvent_1);
7801
+ }
7802
+ };
7803
+ var proxyAdoptedSheetsArray_1 = function (node, source) {
7804
+ if (adoptedSheetsProxySources_1.has(source)) {
7805
+ return source;
7806
+ }
7807
+ if (adoptedSheetsSourceProxies_1.has(source)) {
7808
+ return adoptedSheetsSourceProxies_1.get(source);
7809
+ }
7810
+ var proxy = new Proxy(source, {
7811
+ deleteProperty: function (target, property) {
7812
+ delete target[property];
7813
+ return true;
7814
+ },
7815
+ set: function (target, property, value) {
7816
+ target[property] = value;
7817
+ if (property === "length") {
7818
+ onAdoptedSheetsChange_1(node);
7819
+ }
7820
+ return true;
7821
+ }
7822
+ });
7823
+ adoptedSheetsSourceProxies_1.set(source, proxy);
7824
+ adoptedSheetsProxySources_1.set(proxy, source);
7825
+ return proxy;
7826
+ };
7827
+ [Document, ShadowRoot].forEach(function (ctor) {
7828
+ overrideProperty(ctor, "adoptedStyleSheets", {
7829
+ get: function (native) {
7830
+ return function () {
7831
+ var source = native.call(this);
7832
+ return proxyAdoptedSheetsArray_1(this, source);
7833
+ };
7834
+ },
7835
+ set: function (native) {
7836
+ return function (source) {
7837
+ if (adoptedSheetsProxySources_1.has(source)) {
7838
+ source =
7839
+ adoptedSheetsProxySources_1.get(source);
7840
+ }
7841
+ native.call(this, source);
7842
+ onAdoptedSheetsChange_1(this);
7843
+ };
7844
+ }
7845
+ });
7846
+ });
7847
+ var adoptedDeclarationChangeEvent_1 = new CustomEvent(
7848
+ "__darkreader__adoptedStyleDeclarationChange"
7692
7849
  );
7850
+ ["setProperty", "removeProperty"].forEach(function (key) {
7851
+ override(CSSStyleDeclaration, key, function (native) {
7852
+ return function () {
7853
+ var args = [];
7854
+ for (var _i = 0; _i < arguments.length; _i++) {
7855
+ args[_i] = arguments[_i];
7856
+ }
7857
+ var returnValue = native.apply(this, args);
7858
+ var sheet = adoptedDeclarationSheets.get(this);
7859
+ if (sheet) {
7860
+ var owners = adoptedSheetOwners.get(sheet);
7861
+ if (owners) {
7862
+ owners.forEach(function (node) {
7863
+ node.dispatchEvent(
7864
+ adoptedDeclarationChangeEvent_1
7865
+ );
7866
+ });
7867
+ }
7868
+ }
7869
+ return returnValue;
7870
+ };
7871
+ });
7872
+ });
7693
7873
  }
7694
7874
  }
7695
7875
 
@@ -8244,7 +8424,7 @@
8244
8424
  fallback.render(theme, ignoredImageAnalysisSelectors);
8245
8425
  return;
8246
8426
  }
8247
- if (hasAdoptedStyleSheets(node)) {
8427
+ if (canHaveAdoptedStyleSheets(node)) {
8248
8428
  node.adoptedStyleSheets.forEach(function (s) {
8249
8429
  variablesStore.addRulesForMatching(s.cssRules);
8250
8430
  });
@@ -8312,6 +8492,9 @@
8312
8492
  fallback === null || fallback === void 0
8313
8493
  ? void 0
8314
8494
  : fallback.commands();
8495
+ if (!id || !commands) {
8496
+ return;
8497
+ }
8315
8498
  var data = {id: id, commands: commands};
8316
8499
  document.dispatchEvent(
8317
8500
  new CustomEvent(