-
{this.changeReplaceQuery(e.target.value)}} />
{isIos ?
: null}
diff --git a/apps/common/mobile/resources/less/common-material.less b/apps/common/mobile/resources/less/common-material.less
index a1a938939..4bec965e1 100644
--- a/apps/common/mobile/resources/less/common-material.less
+++ b/apps/common/mobile/resources/less/common-material.less
@@ -7,6 +7,17 @@
@darkGrey: #757575;
--f7-navbar-shadow-image: none;
+
+ --f7-navbar-bg-color: @themeColor;
+ --f7-navbar-link-color: @navBarIconColor;
+ --f7-navbar-text-color: @navBarIconColor;
+ --f7-navbar-height: 56px;
+
+ --f7-subnavbar-bg-color: @themeColor;
+ --f7-subnavbar-link-color: @navBarIconColor;
+ --f7-subnavbar-text-color: @navBarIconColor;
+ --f7-subnavbar-height: 56px;
+
--f7-radio-active-color: @themeColor;
--f7-toggle-active-color: @themeColor;
--f7-range-bar-active-bg-color: @themeColor;
@@ -29,6 +40,13 @@
justify-content: center;
}
}
+
+ .page.page-with-subnavbar.page-with-logo {
+ .page-content {
+ --f7-page-navbar-offset: var(--f7-navbar-height);
+ }
+ }
+
// Buttons
.segmented {
.decrement, .increment {
@@ -412,7 +430,7 @@
}
a.icon-only {
width: auto;
- height: 48px;
+ height: 56px;
}
.buttons-row-replace a {
color: @white;
diff --git a/apps/common/mobile/resources/less/common.less b/apps/common/mobile/resources/less/common.less
index cb7c5f682..121d7b845 100644
--- a/apps/common/mobile/resources/less/common.less
+++ b/apps/common/mobile/resources/less/common.less
@@ -25,6 +25,12 @@
}
}
+.subnavbar {
+ .subnavbar-inner {
+ padding: 0;
+ }
+}
+
.page.page-with-subnavbar {
.page-content {
--f7-page-subnavbar-offset: 0px;
@@ -110,6 +116,12 @@
}
}
+.dialog {
+ .content-block {
+ padding: 0;
+ }
+}
+
.about {
.content-block {
margin: 0 auto 15px;
@@ -218,6 +230,7 @@
height: 38px;
margin-top: 14px;
background-image: url(../img/themes/themes.png);
+ display: block;
}
.item-theme.active:before {
content: '';
@@ -721,6 +734,24 @@ input[type="number"]::-webkit-inner-spin-button {
}
+.picker-3d {
+ .picker-item {
+ padding: 0;
+ text-align: left;
+ font-size: 16px;
+ span {
+ padding: 0;
+ }
+ }
+}
+
+.picker-center-highlight {
+ width: 100%;
+ left: 0;
+ right: 0;
+}
+
+
diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json
index 9ca0208b9..7e4fee34d 100644
--- a/apps/documenteditor/mobile/locale/en.json
+++ b/apps/documenteditor/mobile/locale/en.json
@@ -94,7 +94,8 @@
"errorUpdateVersionOnDisconnect": "Internet connection has been restored, and the file version has been changed.
Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.",
"errorDefaultMessage": "Error code: %1",
"criticalErrorExtText": "Press 'OK' to back to document list.",
- "notcriticalErrorTitle": "Warning"
+ "notcriticalErrorTitle": "Warning",
+ "scriptLoadError": "The connection is too slow, some of the components could not be loaded. Please reload the page."
},
"LongActions": {
"openTitleText": "Opening Document",
diff --git a/apps/documenteditor/mobile/src/controller/ContextMenu.jsx b/apps/documenteditor/mobile/src/controller/ContextMenu.jsx
index aedb54c99..136679559 100644
--- a/apps/documenteditor/mobile/src/controller/ContextMenu.jsx
+++ b/apps/documenteditor/mobile/src/controller/ContextMenu.jsx
@@ -65,7 +65,7 @@ class ContextMenu extends ContextMenuController {
onMenuItemClick(action) {
super.onMenuItemClick(action);
- if ( EditorUIController.ContextMenu.handleMenuItemClick(this, action) )
+ if ( EditorUIController.ContextMenu && EditorUIController.ContextMenu.handleMenuItemClick(this, action) )
return;
const api = Common.EditorApi.get();
@@ -73,17 +73,27 @@ class ContextMenu extends ContextMenuController {
case 'cut':
if ( !LocalStorage.getBool("de-hide-copy-cut-paste-warning") )
this.showCopyCutPasteModal();
-
break;
case 'copy':
- if ( !LocalStorage.getBool("de-hide-copy-cut-paste-warning") )
+ if (!api.Copy() && !LocalStorage.getBool("de-hide-copy-cut-paste-warning") )
this.showCopyCutPasteModal();
-
break;
case 'paste':
if ( !LocalStorage.getBool("de-hide-copy-cut-paste-warning") )
this.showCopyCutPasteModal();
-
+ break;
+ case 'viewcomment':
+ Common.Notifications.trigger('viewcomment');
+ break;
+ case 'openlink':
+ const stack = api.getSelectedElements();
+ let value;
+ stack.forEach((item) => {
+ if (item.get_ObjectType() == Asc.c_oAscTypeSelectElement.Hyperlink) {
+ value = item.get_ObjectValue().get_Value();
+ }
+ });
+ value && this.openLink(value);
break;
case 'review':
setTimeout(() => {
@@ -95,19 +105,6 @@ class ContextMenu extends ContextMenuController {
this.props.openOptions('coauth', 'cm-review-change');
}, 400);
break;
- case 'split':
- this.showSplitModal();
- break;
- case 'edit':
- setTimeout(() => {
- this.props.openOptions('edit');
- }, 0);
- break;
- case 'addlink':
- setTimeout(() => {
- this.props.openOptions('add', 'link');
- }, 400);
- break;
}
console.log("click context menu item: " + action);
@@ -206,8 +203,53 @@ class ContextMenu extends ContextMenuController {
initMenuItems() {
if ( !Common.EditorApi ) return [];
+ const { isEdit } = this.props;
- return EditorUIController.ContextMenu.mapMenuItems(this);
+ if (isEdit && EditorUIController.ContextMenu) {
+ return EditorUIController.ContextMenu.mapMenuItems(this);
+ } else {
+ const { t } = this.props;
+ const _t = t("ContextMenu", {returnObjects: true});
+ const { canViewComments } = this.props;
+
+ const api = Common.EditorApi.get();
+ const stack = api.getSelectedElements();
+ const canCopy = api.can_CopyCut();
+
+ let itemsIcon = [],
+ itemsText = [];
+
+ if ( canCopy ) {
+ itemsIcon.push({
+ event: 'copy',
+ icon: 'icon-copy'
+ });
+ }
+
+ if ( canViewComments && this.isComments ) {
+ itemsText.push({
+ caption: _t.menuViewComment,
+ event: 'viewcomment'
+ });
+ }
+
+ let isLink = false;
+ stack.forEach(item => {
+ const objectType = item.get_ObjectType();
+ if ( objectType === Asc.c_oAscTypeSelectElement.Hyperlink ) {
+ isLink = true;
+ }
+ });
+
+ if ( isLink ) {
+ itemsText.push({
+ caption: _t.menuOpenLink,
+ event: 'openlink'
+ });
+ }
+
+ return itemsIcon.concat(itemsText);
+ }
}
initExtraItems () {
diff --git a/apps/documenteditor/mobile/src/controller/Error.jsx b/apps/documenteditor/mobile/src/controller/Error.jsx
index 6ae81ef0d..ff499f251 100644
--- a/apps/documenteditor/mobile/src/controller/Error.jsx
+++ b/apps/documenteditor/mobile/src/controller/Error.jsx
@@ -1,8 +1,7 @@
-import React, { useEffect, useState } from 'react';
+import React, { useEffect } from 'react';
import { inject } from 'mobx-react';
import { f7 } from 'framework7-react';
import { useTranslation } from 'react-i18next';
-import LongActionsController from "./LongActions";
const ErrorController = inject('storeAppOptions')(({storeAppOptions, LoadingDocument}) => {
const {t} = useTranslation();
@@ -22,7 +21,7 @@ const ErrorController = inject('storeAppOptions')(({storeAppOptions, LoadingDocu
if (id === Asc.c_oAscError.ID.LoadingScriptError) {
f7.notification.create({
title: _t.criticalErrorTitle,
- text: _t.criticalErrorTitle,
+ text: _t.scriptLoadError,
closeButton: true
}).open();
return;
@@ -183,7 +182,7 @@ const ErrorController = inject('storeAppOptions')(({storeAppOptions, LoadingDocu
// report only critical errors
Common.Gateway.reportError(id, config.msg);
- config.title = this.criticalErrorTitle;
+ config.title = _t.criticalErrorTitle;
if (storeAppOptions.canBackToFolder && !storeAppOptions.isDesktopApp) {
config.msg += '' + _t.criticalErrorExtText;
diff --git a/apps/documenteditor/mobile/src/controller/LongActions.jsx b/apps/documenteditor/mobile/src/controller/LongActions.jsx
index 2c2e0f9fb..94dca84c8 100644
--- a/apps/documenteditor/mobile/src/controller/LongActions.jsx
+++ b/apps/documenteditor/mobile/src/controller/LongActions.jsx
@@ -1,82 +1,78 @@
-import React, { Component } from 'react';
-import { inject } from 'mobx-react';
+import React, { useEffect } from 'react';
import { f7 } from 'framework7-react';
-import { withTranslation } from 'react-i18next';
+import { useTranslation } from 'react-i18next';
import IrregularStack from "../../../../common/mobile/utils/IrregularStack";
-class LongActions extends Component {
- constructor(props) {
- super(props);
+const LongActionsController = () => {
+ const {t} = useTranslation();
+ const _t = t("LongActions", { returnObjects: true });
- this.stackLongActions = new IrregularStack({
- strongCompare : function(obj1, obj2){return obj1.id === obj2.id && obj1.type === obj2.type;},
- weakCompare : function(obj1, obj2){return obj1.type === obj2.type;}
- });
+ const ApplyEditRights = -255;
+ const LoadingDocument = -256;
- this.onLongActionBegin = this.onLongActionBegin.bind(this);
- this.onLongActionEnd = this.onLongActionEnd.bind(this);
- this.onOpenDocument = this.onOpenDocument.bind(this);
- this.closePreloader = this.closePreloader.bind(this);
- }
+ const stackLongActions = new IrregularStack({
+ strongCompare : function(obj1, obj2){return obj1.id === obj2.id && obj1.type === obj2.type;},
+ weakCompare : function(obj1, obj2){return obj1.type === obj2.type;}
+ });
- closePreloader() {
- if (this.loadMask.el) {
- f7.dialog.close(this.loadMask.el);
+ let loadMask = null;
+
+ const closePreloader = () => {
+ if (loadMask && loadMask.el) {
+ f7.dialog.close(loadMask.el);
}
- }
+ };
- componentDidMount() {
+ useEffect( () => {
Common.Notifications.on('engineCreated', (api) => {
- api.asc_registerCallback('asc_onStartAction', this.onLongActionBegin);
- api.asc_registerCallback('asc_onEndAction', this.onLongActionEnd);
- api.asc_registerCallback('asc_onOpenDocumentProgress', this.onOpenDocument);
+ api.asc_registerCallback('asc_onStartAction', onLongActionBegin);
+ api.asc_registerCallback('asc_onEndAction', onLongActionEnd);
+ api.asc_registerCallback('asc_onOpenDocumentProgress', onOpenDocument);
});
- Common.Notifications.on('preloader:endAction', this.onLongActionEnd);
- Common.Notifications.on('preloader:beginAction', this.onLongActionBegin);
- Common.Notifications.on('preloader:close', this.closePreloader);
- }
+ Common.Notifications.on('preloader:endAction', onLongActionEnd);
+ Common.Notifications.on('preloader:beginAction', onLongActionBegin);
+ Common.Notifications.on('preloader:close', closePreloader);
- componentWillUnmount() {
- const api = Common.EditorApi.get();
- api.asc_unregisterCallback('asc_onStartAction', this.onLongActionBegin);
- api.asc_unregisterCallback('asc_onEndAction', this.onLongActionEnd);
- api.asc_unregisterCallback('asc_onOpenDocumentProgress', this.onOpenDocument);
+ return ( () => {
+ const api = Common.EditorApi.get();
+ api.asc_unregisterCallback('asc_onStartAction', onLongActionBegin);
+ api.asc_unregisterCallback('asc_onEndAction', onLongActionEnd);
+ api.asc_unregisterCallback('asc_onOpenDocumentProgress', onOpenDocument);
- Common.Notifications.off('preloader:endAction', this.onLongActionEnd);
- Common.Notifications.off('preloader:beginAction', this.onLongActionBegin);
- Common.Notifications.off('preloader:close', this.closePreloader);
- }
+ Common.Notifications.off('preloader:endAction', onLongActionEnd);
+ Common.Notifications.off('preloader:beginAction', onLongActionBegin);
+ Common.Notifications.off('preloader:close', closePreloader);
+ })
+ });
- onLongActionBegin (type, id) {
+ const onLongActionBegin = (type, id) => {
const action = {id: id, type: type};
- this.stackLongActions.push(action);
- this.setLongActionView(action);
- }
+ stackLongActions.push(action);
+ setLongActionView(action);
+ };
- onLongActionEnd (type, id) {
+ const onLongActionEnd = (type, id) => {
let action = {id: id, type: type};
- this.stackLongActions.pop(action);
+ stackLongActions.pop(action);
//this.updateWindowTitle(true);
- action = this.stackLongActions.get({type: Asc.c_oAscAsyncActionType.Information});
+ action = stackLongActions.get({type: Asc.c_oAscAsyncActionType.Information});
if (action) {
- this.setLongActionView(action)
+ setLongActionView(action)
}
- action = this.stackLongActions.get({type: Asc.c_oAscAsyncActionType.BlockInteraction});
+ action = stackLongActions.get({type: Asc.c_oAscAsyncActionType.BlockInteraction});
if (action) {
- this.setLongActionView(action)
+ setLongActionView(action)
} else {
- this.loadMask.el && this.loadMask.el.classList.contains('modal-in') && f7.dialog.close(this.loadMask.el);
+ loadMask && loadMask.el && loadMask.el.classList.contains('modal-in') && f7.dialog.close(loadMask.el);
}
- }
+ };
- setLongActionView (action) {
- const { t } = this.props;
- const _t = t("LongActions", { returnObjects: true });
+ const setLongActionView = (action) => {
let title = '';
let text = '';
switch (action.id) {
@@ -177,31 +173,25 @@ class LongActions extends Component {
return;
}
- if (this.loadMask && this.loadMask.el && this.loadMask.el.classList.contains('modal-in')) {
- this.loadMask.el.getElementsByClassName('dialog-title')[0].innerHTML = title;
+ if (loadMask && loadMask.el && loadMask.el.classList.contains('modal-in')) {
+ loadMask.el.getElementsByClassName('dialog-title')[0].innerHTML = title;
} else {
- this.loadMask = f7.dialog.preloader(title);
+ loadMask = f7.dialog.preloader(title);
}
}
- }
+ };
- onOpenDocument (progress) {
- if (this.loadMask && this.loadMask.el) {
- const $title = this.loadMask.el.getElementsByClassName('dialog-title')[0];
+ const onOpenDocument = (progress) => {
+ if (loadMask && loadMask.el) {
+ const $title = loadMask.el.getElementsByClassName('dialog-title')[0];
const proc = (progress.asc_getCurrentFont() + progress.asc_getCurrentImage())/(progress.asc_getFontsCount() + progress.asc_getImagesCount());
- const { t } = this.props;
- const _t = t("LongActions", { returnObjects: true });
$title.innerHTML = `${_t.textLoadingDocument}: ${Math.min(Math.round(proc * 100), 100)}%`;
}
}
- render() {
- return null;
- }
-}
-
-const LongActionsController = withTranslation()(LongActions);
+ return null;
+};
export default LongActionsController;
\ No newline at end of file
diff --git a/apps/documenteditor/mobile/src/controller/Main.jsx b/apps/documenteditor/mobile/src/controller/Main.jsx
index 1b92e6b97..85c254249 100644
--- a/apps/documenteditor/mobile/src/controller/Main.jsx
+++ b/apps/documenteditor/mobile/src/controller/Main.jsx
@@ -9,8 +9,6 @@ import {InitReviewController as ReviewController} from '../../../../common/mobil
import { onAdvancedOptions } from './settings/Download.jsx';
import {
CommentsController,
- AddCommentController,
- EditCommentController,
ViewCommentsController
} from "../../../../common/mobile/lib/controller/collaboration/Comments";
import About from '../../../../common/mobile/lib/view/About';
@@ -191,6 +189,9 @@ class MainController extends Component {
};
const onDocumentContentReady = () => {
+ if (this._isDocReady)
+ return;
+
const appOptions = this.props.storeAppOptions;
const appSettings = this.props.storeApplicationSettings;
@@ -329,8 +330,8 @@ class MainController extends Component {
Common.Utils.Metric.setCurrentMetric(value);
this.api.asc_SetDocumentUnits((value === Common.Utils.Metric.c_MetricUnits.inch) ? Asc.c_oAscDocumentUnits.Inch : ((value===Common.Utils.Metric.c_MetricUnits.pt) ? Asc.c_oAscDocumentUnits.Point : Asc.c_oAscDocumentUnits.Millimeter));
- //me.api.asc_registerCallback('asc_onDocumentModifiedChanged', _.bind(me.onDocumentModifiedChanged, me));
- //me.api.asc_registerCallback('asc_onDocumentCanSaveChanged', _.bind(me.onDocumentCanSaveChanged, me));
+ this.api.asc_registerCallback('asc_onDocumentModifiedChanged', this.onDocumentModifiedChanged.bind(this));
+ this.api.asc_registerCallback('asc_onDocumentCanSaveChanged', this.onDocumentCanSaveChanged.bind(this));
//if (me.stackLongActions.exist({id: ApplyEditRights, type: Asc.c_oAscAsyncActionType['BlockInteraction']})) {
// me.onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], ApplyEditRights);
@@ -344,6 +345,19 @@ class MainController extends Component {
window.onunload = this.onUnload.bind(this);
}
+ onDocumentModifiedChanged () {
+ const isModified = this.api.asc_isDocumentCanSave();
+ if (this._state.isDocModified !== isModified) {
+ this._isDocReady && Common.Gateway.setDocumentModified(this.api.isDocumentModified());
+ }
+
+ this.updateWindowTitle();
+ }
+
+ onDocumentCanSaveChanged (isCanSave) {
+ //
+ }
+
onBeforeUnload () {
LocalStorage.save();
@@ -469,7 +483,7 @@ class MainController extends Component {
if (this.changeServerVersion) return true;
const _t = this._t;
- if (About.appVersion() !== buildVersion && !window.compareVersions) {
+ if (About.appVersion() !== buildVersion && !About.compareVersions()) {
this.changeServerVersion = true;
f7.dialog.alert(
_t.errorServerVersion,
@@ -487,10 +501,9 @@ class MainController extends Component {
this.api.asc_registerCallback('asc_onServerVersion', this.onServerVersion.bind(this));
this.api.asc_registerCallback('asc_onDocumentName', this.onDocumentName.bind(this));
this.api.asc_registerCallback('asc_onPrintUrl', this.onPrintUrl.bind(this));
+ this.api.asc_registerCallback('asc_onPrint', this.onPrint.bind(this));
- this.api.asc_registerCallback('asc_onSendThemeColors', (colors, standart_colors) => {
- Common.Utils.ThemeColor.setColors(colors, standart_colors);
- });
+ EditorUIController.initThemeColors && EditorUIController.initThemeColors();
this.api.asc_registerCallback('asc_onDownloadUrl', this.onDownloadUrl.bind(this));
@@ -504,8 +517,8 @@ class MainController extends Component {
//text settings
const storeTextSettings = this.props.storeTextSettings;
- EditorUIController.initFonts(storeTextSettings);
- EditorUIController.initFocusObjects(this.props.storeFocusObjects);
+ EditorUIController.initFonts && EditorUIController.initFonts(storeTextSettings);
+ EditorUIController.initFocusObjects && EditorUIController.initFocusObjects(this.props.storeFocusObjects);
this.api.asc_registerCallback('asc_onVerticalAlign', (typeBaseline) => {
storeTextSettings.resetTypeBaseline(typeBaseline);
@@ -517,10 +530,15 @@ class MainController extends Component {
switch (type) {
case 0:
storeTextSettings.resetBullets(subtype);
+ storeTextSettings.resetNumbers(-1);
break;
case 1:
storeTextSettings.resetNumbers(subtype);
+ storeTextSettings.resetBullets(-1);
break;
+ default:
+ storeTextSettings.resetBullets(-1);
+ storeTextSettings.resetNumbers(-1);
}
});
this.api.asc_registerCallback('asc_onPrAlign', (align) => {
@@ -538,19 +556,13 @@ class MainController extends Component {
});
//paragraph settings
- EditorUIController.initEditorStyles(this.props.storeParagraphSettings);
+ EditorUIController.initEditorStyles && EditorUIController.initEditorStyles(this.props.storeParagraphSettings);
//table settings
- EditorUIController.initTableTemplates(this.props.storeTableSettings);
+ EditorUIController.initTableTemplates && EditorUIController.initTableTemplates(this.props.storeTableSettings);
//chart settings
- const storeChartSettings = this.props.storeChartSettings;
- const storeFocusObjects = this.props.storeFocusObjects;
- this.api.asc_registerCallback('asc_onUpdateChartStyles', () => {
- if (storeFocusObjects.chartObject && storeFocusObjects.chartObject.get_ChartProperties()) {
- storeChartSettings.updateChartStyles(this.api.asc_getChartPreviews(storeFocusObjects.chartObject.get_ChartProperties().getType()));
- }
- });
+ EditorUIController.updateChartStyles && EditorUIController.updateChartStyles(this.props.storeChartSettings, this.props.storeFocusObjects);
// Document Info
@@ -682,6 +694,14 @@ class MainController extends Component {
}
}
+ onPrint () {
+ if (!this.props.storeAppOptions.canPrint) return;
+
+ if (this.api)
+ this.api.asc_Print();
+ Common.component.Analytics.trackEvent('Print');
+ }
+
onPrintUrl (url) {
if (this.iframePrint) {
this.iframePrint.parentNode.removeChild(this.iframePrint);
@@ -777,8 +797,7 @@ class MainController extends Component {
-
-
+ {EditorUIController.getEditCommentControllers && EditorUIController.getEditCommentControllers()}
)
diff --git a/apps/documenteditor/mobile/src/controller/Toolbar.jsx b/apps/documenteditor/mobile/src/controller/Toolbar.jsx
index 9ff6ce8e8..30d47b86b 100644
--- a/apps/documenteditor/mobile/src/controller/Toolbar.jsx
+++ b/apps/documenteditor/mobile/src/controller/Toolbar.jsx
@@ -25,6 +25,7 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeReview')(prop
Common.Notifications.on('api:disconnect', onCoAuthoringDisconnect);
Common.Notifications.on('toolbar:activatecontrols', activateControls);
Common.Notifications.on('toolbar:deactivateeditcontrols', deactivateEditControls);
+ Common.Notifications.on('goback', goBack);
};
if ( !Common.EditorApi ) {
Common.Notifications.on('document:ready', onDocumentReady);
@@ -40,6 +41,7 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeReview')(prop
Common.Notifications.off('api:disconnect', onCoAuthoringDisconnect);
Common.Notifications.off('toolbar:activatecontrols', activateControls);
Common.Notifications.off('toolbar:deactivateeditcontrols', deactivateEditControls);
+ Common.Notifications.off('goback', goBack);
const api = Common.EditorApi.get();
api.asc_unregisterCallback('asc_onCanUndo', onApiCanUndo);
diff --git a/apps/documenteditor/mobile/src/controller/edit/EditText.jsx b/apps/documenteditor/mobile/src/controller/edit/EditText.jsx
index 271741f52..922458b4b 100644
--- a/apps/documenteditor/mobile/src/controller/edit/EditText.jsx
+++ b/apps/documenteditor/mobile/src/controller/edit/EditText.jsx
@@ -18,7 +18,7 @@ class EditTextController extends Component {
if (isDecrement) {
typeof size === 'undefined' ? api.FontSizeOut() : size = Math.max(1, --size);
} else {
- typeof size === 'undefined' ? api.FontSizeIn : size = Math.min(100, ++size);
+ typeof size === 'undefined' ? api.FontSizeIn : size = Math.min(300, ++size);
}
if (typeof size !== 'undefined') {
api.put_TextPrFontSize(size);
diff --git a/apps/documenteditor/mobile/src/controller/settings/Download.jsx b/apps/documenteditor/mobile/src/controller/settings/Download.jsx
index 5bf78d0ba..187b65c7b 100644
--- a/apps/documenteditor/mobile/src/controller/settings/Download.jsx
+++ b/apps/documenteditor/mobile/src/controller/settings/Download.jsx
@@ -55,6 +55,8 @@ class DownloadController extends Component {
const DownloadWithTranslation = withTranslation()(DownloadController);
const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, canRequestClose) => {
+ if ($$('.dlg-adv-options.modal-in').length > 0) return;
+
const api = Common.EditorApi.get();
if (type == Asc.c_oAscAdvancedOptionsID.TXT) {
let picker;
@@ -97,7 +99,8 @@ const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, canRequest
'