| import { getParsedUA, isMobile } from './RossAscends-mods.js'; |
|
|
| const isFirefox = () => /firefox/i.test(navigator.userAgent); |
|
|
| function sanitizeInlineQuotationOnCopy() { |
| |
| |
| document.addEventListener('copy', function (event) { |
| if (document.activeElement instanceof HTMLInputElement || document.activeElement instanceof HTMLTextAreaElement) { |
| return; |
| } |
|
|
| const selection = window.getSelection(); |
| if (!selection.anchorNode?.parentElement.closest('.mes_text')) { |
| return; |
| } |
|
|
| const range = selection.getRangeAt(0).cloneContents(); |
| const tempDOM = document.createDocumentFragment(); |
|
|
| |
| |
| |
| |
| |
| function processNode(node) { |
| if (node.nodeType === Node.ELEMENT_NODE && node.nodeName.toLowerCase() === 'q') { |
| |
| const span = document.createElement('span'); |
|
|
| [...node.childNodes].forEach(child => { |
| const processedChild = processNode(child); |
| span.appendChild(processedChild); |
| }); |
|
|
| return span; |
| } else { |
| |
| return node.cloneNode(true); |
| } |
| } |
|
|
| [...range.childNodes].forEach(child => { |
| const processedChild = processNode(child); |
| tempDOM.appendChild(processedChild); |
| }); |
|
|
| const newRange = document.createRange(); |
| newRange.selectNodeContents(tempDOM); |
|
|
| event.preventDefault(); |
| event.clipboardData.setData('text/plain', newRange.toString()); |
| }); |
| } |
|
|
| function addSafariPatch() { |
| const userAgent = getParsedUA(); |
| console.debug('User Agent', userAgent); |
| const isMobileSafari = /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); |
| const isDesktopSafari = userAgent?.browser?.name === 'Safari' && userAgent?.platform?.type === 'desktop'; |
| const isIOS = userAgent?.os?.name === 'iOS'; |
|
|
| if (isIOS || isMobileSafari || isDesktopSafari) { |
| document.body.classList.add('safari'); |
| } |
| } |
|
|
| function applyBrowserFixes() { |
| if (isFirefox()) { |
| sanitizeInlineQuotationOnCopy(); |
| } |
|
|
| if (isMobile()) { |
| const fixFunkyPositioning = () => { |
| console.debug('[Mobile] Device viewport change detected.'); |
| document.documentElement.style.position = 'fixed'; |
| requestAnimationFrame(() => document.documentElement.style.position = ''); |
| }; |
| window.addEventListener('resize', fixFunkyPositioning); |
| window.addEventListener('orientationchange', fixFunkyPositioning); |
| } |
|
|
| addSafariPatch(); |
| } |
|
|
| export { isFirefox, applyBrowserFixes }; |
|
|