-
{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 a1a938939c..4bec965e1e 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 cb7c5f6820..121d7b8458 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 9ca0208b90..7e4fee34d5 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 aedb54c993..136679559e 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 6ae81ef0d6..ff499f2515 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 2c2e0f9fb4..94dca84c83 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 1b92e6b976..85c2542493 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 9ff6ce8e84..30d47b86bf 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 271741f520..922458b4b1 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 5bf78d0bab..187b65c7b7 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
'