{"version":3,"file":"onlyoffice-listener.mjs","sources":["../src/listener.js"],"sourcesContent":["/*\n * Copyright (C) Ascensio System SIA, 2009-2026\n *\n * This program is a free software product. You can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License (AGPL)\n * version 3 as published by the Free Software Foundation, together with the\n * additional terms provided in the LICENSE file.\n *\n * This program is distributed WITHOUT ANY WARRANTY; without even the implied\n * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For\n * details, see the GNU AGPL at: https://www.gnu.org/licenses/agpl-3.0.html\n *\n * You can contact Ascensio System SIA by email at info@onlyoffice.com\n * or by postal mail at 20A-6 Ernesta Birznieka-Upisha Street, Riga,\n * LV-1050, Latvia, European Union.\n *\n * The interactive user interfaces in modified versions of the Program\n * are required to display Appropriate Legal Notices in accordance with\n * Section 5 of the GNU AGPL version 3.\n *\n * No trademark rights are granted under this License.\n *\n * All non-code elements of the Product, including illustrations,\n * icon sets, and technical writing content, are licensed under the\n * Creative Commons Attribution-ShareAlike 4.0 International License:\n * https://creativecommons.org/licenses/by-sa/4.0/legalcode\n *\n * This license applies only to such non-code elements and does not\n * modify or replace the licensing terms applicable to the Program's\n * source code, which remains licensed under the GNU Affero General\n * Public License v3.\n *\n * SPDX-License-Identifier: AGPL-3.0-only\n */\n\nimport { getFilePickerBuilder, showError, showSuccess } from '@nextcloud/dialogs'\nimport { t } from '@nextcloud/l10n'\n\nimport '@nextcloud/dialogs/style.css'\n\nOCA.Onlyoffice = { AppName: 'onlyoffice', frameSelector: null, titleBase: window.document.title, favIconBase: document.querySelector('link[rel=\"icon\"]')?.getAttribute('href'), ...OCA.Onlyoffice }\n\nOCA.Onlyoffice.onRequestClose = function() {\n\tdocument.querySelector(OCA.Onlyoffice.frameSelector)?.remove()\n\n\tif (OCA.Viewer && OCA.Viewer.close) {\n\t\tOCA.Viewer.close()\n\t}\n\n\tif (OCA.Onlyoffice.CloseEditor) {\n\t\tOCA.Onlyoffice.CloseEditor()\n\t}\n}\n\nOCA.Onlyoffice.onRequestSaveAs = function(saveData) {\n\tgetFilePickerBuilder(t(OCA.Onlyoffice.AppName, 'Save as'))\n\t\t.setMimeTypeFilter(['httpd/unix-directory'])\n\t\t.allowDirectories()\n\t\t.startAt(saveData.dir)\n\t\t.addButton({\n\t\t\tlabel: t('core', 'Choose'),\n\t\t\tcallback: (nodes) => {\n\t\t\t\tif (!nodes[0]) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tsaveData.dir = nodes[0].path\n\t\t\t\tdocument.querySelector(OCA.Onlyoffice.frameSelector).contentWindow.OCA.Onlyoffice.editorSaveAs(saveData)\n\t\t\t},\n\t\t\tvariant: 'primary',\n\t\t})\n\t\t.build()\n\t\t.pickNodes()\n\t\t.catch(() => {})\n}\n\nOCA.Onlyoffice.onRequestInsertImage = function(imageMimes) {\n\tgetFilePickerBuilder(t(OCA.Onlyoffice.AppName, 'Insert image'))\n\t\t.setMimeTypeFilter(imageMimes)\n\t\t.addButton({\n\t\t\tlabel: t('core', 'Choose'),\n\t\t\tcallback: (nodes) => {\n\t\t\t\tif (!nodes[0]) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tdocument.querySelector(OCA.Onlyoffice.frameSelector).contentWindow.OCA.Onlyoffice.editorInsertImage(nodes[0].path)\n\t\t\t},\n\t\t\tvariant: 'primary',\n\t\t})\n\t\t.build()\n\t\t.pickNodes()\n\t\t.catch(() => {})\n}\n\nOCA.Onlyoffice.onRequestMailMergeRecipients = function(recipientMimes) {\n\tgetFilePickerBuilder(t(OCA.Onlyoffice.AppName, 'Select recipients'))\n\t\t.setMimeTypeFilter(recipientMimes)\n\t\t.addButton({\n\t\t\tlabel: t('core', 'Choose'),\n\t\t\tcallback: (nodes) => {\n\t\t\t\tif (!nodes[0]) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tdocument.querySelector(OCA.Onlyoffice.frameSelector).contentWindow.OCA.Onlyoffice.editorSetRecipient(nodes[0].path)\n\t\t\t},\n\t\t\tvariant: 'primary',\n\t\t})\n\t\t.build()\n\t\t.pickNodes()\n\t\t.catch(() => {})\n}\n\nOCA.Onlyoffice.onRequestSelectDocument = function(revisedMimes, documentSelectionType) {\n\tlet title\n\tswitch (documentSelectionType) {\n\t\tcase 'combine':\n\t\t\ttitle = t(OCA.Onlyoffice.AppName, 'Select file to combine')\n\t\t\tbreak\n\t\tcase 'compare':\n\t\t\ttitle = t(OCA.Onlyoffice.AppName, 'Select file to compare')\n\t\t\tbreak\n\t\tcase 'insert-text':\n\t\t\ttitle = t(OCA.Onlyoffice.AppName, 'Select file to insert text')\n\t\t\tbreak\n\t\tdefault:\n\t\t\ttitle = t(OCA.Onlyoffice.AppName, 'Select file')\n\t}\n\tgetFilePickerBuilder(title)\n\t\t.setMimeTypeFilter(revisedMimes)\n\t\t.addButton({\n\t\t\tlabel: t('core', 'Choose'),\n\t\t\tcallback: (nodes) => {\n\t\t\t\tif (!nodes[0]) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tdocument.querySelector(OCA.Onlyoffice.frameSelector).contentWindow.OCA.Onlyoffice.editorSetRequested.call({ documentSelectionType }, nodes[0].path)\n\t\t\t},\n\t\t\tvariant: 'primary',\n\t\t})\n\t\t.build()\n\t\t.pickNodes()\n\t\t.catch(() => {})\n}\n\nOCA.Onlyoffice.onRequestReferenceSource = function(referenceSourceMimes) {\n\tgetFilePickerBuilder(t(OCA.Onlyoffice.AppName, 'Select data source'))\n\t\t.setMimeTypeFilter(referenceSourceMimes)\n\t\t.addButton({\n\t\t\tlabel: t('core', 'Choose'),\n\t\t\tcallback: (nodes) => {\n\t\t\t\tif (!nodes[0]) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tdocument.querySelector(OCA.Onlyoffice.frameSelector).contentWindow.OCA.Onlyoffice.editorReferenceSource(nodes[0].path)\n\t\t\t},\n\t\t\tvariant: 'primary',\n\t\t})\n\t\t.build()\n\t\t.pickNodes()\n\t\t.catch(() => {})\n}\n\nOCA.Onlyoffice.onDocumentReady = function() {\n\tconsole.log('ONLYOFFICE Editor is loaded')\n\tOCA.Onlyoffice.setViewport()\n}\n\nOCA.Onlyoffice.changeFavicon = function(favicon) {\n\tdocument.querySelector('link[rel=\"icon\"]')?.setAttribute('href', favicon)\n}\n\nOCA.Onlyoffice.setViewport = function() {\n\tdocument.querySelector('meta[name=\"viewport\"]').setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0')\n}\n\nOCA.Onlyoffice.onShowMessage = function(messageObj) {\n\tswitch (messageObj.type) {\n\t\tcase 'success':\n\t\t\tshowSuccess(messageObj.message, messageObj.props)\n\t\t\tbreak\n\t\tcase 'error':\n\t\t\tshowError(messageObj.message, messageObj.props)\n\t\t\tbreak\n\t}\n}\n\nwindow.addEventListener('message', function(event) {\n\tconst frame = document.querySelector(OCA.Onlyoffice.frameSelector)\n\tif (!frame\n\t\t|| frame.contentWindow !== event.source\n\t\t|| !event.data.method) {\n\t\treturn\n\t}\n\tswitch (event.data.method) {\n\t\tcase 'editorRequestClose':\n\t\t\tOCA.Onlyoffice.onRequestClose()\n\t\t\tbreak\n\t\tcase 'editorRequestSharingSettings':\n\t\t\tif (OCA.Onlyoffice.OpenShareDialog) {\n\t\t\t\tOCA.Onlyoffice.OpenShareDialog()\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'onRefreshVersionsDialog':\n\t\t\tif (OCA.Onlyoffice.RefreshVersionsDialog) {\n\t\t\t\tOCA.Onlyoffice.RefreshVersionsDialog()\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'editorRequestSaveAs':\n\t\t\tOCA.Onlyoffice.onRequestSaveAs(event.data.param)\n\t\t\tbreak\n\t\tcase 'editorRequestInsertImage':\n\t\t\tOCA.Onlyoffice.onRequestInsertImage(event.data.param)\n\t\t\tbreak\n\t\tcase 'editorRequestMailMergeRecipients':\n\t\t\tOCA.Onlyoffice.onRequestMailMergeRecipients(event.data.param)\n\t\t\tbreak\n\t\tcase 'editorRequestSelectDocument':\n\t\t\tOCA.Onlyoffice.onRequestSelectDocument(event.data.param, event.data.documentSelectionType)\n\t\t\tbreak\n\t\tcase 'editorRequestReferenceSource':\n\t\t\tOCA.Onlyoffice.onRequestReferenceSource(event.data.param)\n\t\t\tbreak\n\t\tcase 'onDocumentReady':\n\t\t\tOCA.Onlyoffice.onDocumentReady(event.data.param)\n\t\t\tbreak\n\t\tcase 'changeFavicon':\n\t\t\tOCA.Onlyoffice.changeFavicon(event.data.param)\n\t\t\tbreak\n\t\tcase 'onShowMessage':\n\t\t\tOCA.Onlyoffice.onShowMessage(event.data.param)\n\t\t\tbreak\n\t}\n}, false)\n\nwindow.addEventListener('popstate', function() {\n\tif (document.querySelector(OCA.Onlyoffice.frameSelector)) {\n\t\tOCA.Onlyoffice.onRequestClose()\n\t}\n})\n\nconst mutationObserver = new MutationObserver((mutationRecords) => {\n\tif (mutationRecords[0] && mutationRecords[0].removedNodes) {\n\t\tmutationRecords[0].removedNodes.forEach((node) => {\n\t\t\tif (node.id && '#' + node.id === OCA.Onlyoffice.frameSelector) {\n\t\t\t\tOCA.Onlyoffice.changeFavicon(OCA.Onlyoffice.favIconBase)\n\t\t\t\twindow.document.title = OCA.Onlyoffice.titleBase\n\t\t\t\tOCA.Onlyoffice.frameSelector = null\n\t\t\t}\n\t\t})\n\t}\n})\n\nmutationObserver.observe(document.querySelector('body'), {\n\tchildList: true,\n\tsubtree: true,\n\tcharacterDataOldValue: true,\n})\n"],"names":["saveData","getFilePickerBuilder","t","nodes","imageMimes","recipientMimes","revisedMimes","documentSelectionType","title","referenceSourceMimes","favicon","messageObj","showSuccess","showError","event","frame","mutationObserver","mutationRecords","node"],"mappings":"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"}