summaryrefslogtreecommitdiff
path: root/ext/js/accessibility/google-docs.js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2022-04-02 09:38:40 -0400
committerGitHub <noreply@github.com>2022-04-02 09:38:40 -0400
commit8a1dcbc9f584136f31e8f71e13590979ce9f1153 (patch)
tree338cbb99ae5687c91a6f2c649bc894ad5e261402 /ext/js/accessibility/google-docs.js
parent7a2ab866099edffaba471ad808593f67ee796b21 (diff)
Workaround for Google Docs canvas rendering updates (#2096)
Diffstat (limited to 'ext/js/accessibility/google-docs.js')
-rw-r--r--ext/js/accessibility/google-docs.js34
1 files changed, 33 insertions, 1 deletions
diff --git a/ext/js/accessibility/google-docs.js b/ext/js/accessibility/google-docs.js
index cdd49237..412ccf60 100644
--- a/ext/js/accessibility/google-docs.js
+++ b/ext/js/accessibility/google-docs.js
@@ -45,13 +45,45 @@
if (!options.accessibility.forceGoogleDocsHtmlRendering) { return; }
+ /* eslint-disable */
+ const inject = () => {
+ const start = Date.now();
+ const maxDuration = 10000;
+ const updateDocData = () => {
+ const target = window._docs_flag_initialData;
+ if (typeof target === 'object' && target !== null) {
+ try {
+ target['kix-awcp'] = true;
+ } catch (e) {
+ // NOP
+ }
+ } else if (Date.now() - start < maxDuration) {
+ setTimeout(updateDocData, 0);
+ }
+ };
+ const params = new URLSearchParams(location.search);
+ if (params.get('mode') !== 'html') {
+ const url = new URL(location.href);
+ params.set('mode', 'html');
+ url.search = params.toString();
+ try {
+ history.replaceState(history.state, '', url.toString());
+ } catch (e) {
+ // Ignore
+ }
+ }
+ window._docs_force_html_by_ext = true;
+ updateDocData();
+ };
+ /* eslint-enable */
+
let parent = document.head;
if (parent === null) {
parent = document.documentElement;
if (parent === null) { return; }
}
const script = document.createElement('script');
- script.textContent = 'window._docs_force_html_by_ext = true;';
+ script.textContent = `(${inject.toString()})();`;
parent.appendChild(script);
parent.removeChild(script);
})();