From e61d9657c0e1d425f4f0656eee74b259219bf642 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Wed, 10 Aug 2022 17:59:30 +0300 Subject: [PATCH 1/3] [DE mobile] Add reader mode and change toolbar --- .../mobile/src/controller/Main.jsx | 3 ++- .../mobile/src/controller/Toolbar.jsx | 17 +++++++++++++++++ .../mobile/src/less/icons-ios.less | 7 +++++++ .../mobile/src/less/icons-material.less | 9 +++++++-- apps/documenteditor/mobile/src/page/main.jsx | 7 ++++++- .../mobile/src/store/appOptions.js | 10 +++++++++- .../documenteditor/mobile/src/view/Toolbar.jsx | 18 +++++++++++------- 7 files changed, 59 insertions(+), 12 deletions(-) diff --git a/apps/documenteditor/mobile/src/controller/Main.jsx b/apps/documenteditor/mobile/src/controller/Main.jsx index 2c08c6224..74fd40e3e 100644 --- a/apps/documenteditor/mobile/src/controller/Main.jsx +++ b/apps/documenteditor/mobile/src/controller/Main.jsx @@ -124,7 +124,7 @@ class MainController extends Component { docInfo = new Asc.asc_CDocInfo(); docInfo.put_Id(data.doc.key); docInfo.put_Url(data.doc.url); - docInfo.put_DirectUrl(data.doc.directUrl); + // docInfo.put_DirectUrl(data.doc.directUrl); docInfo.put_Title(data.doc.title); docInfo.put_Format(data.doc.fileType); docInfo.put_VKey(data.doc.vkey); @@ -214,6 +214,7 @@ class MainController extends Component { this.applyMode(storeAppOptions); + this.api.asc_addRestriction(Asc.c_oAscRestrictionType.View); this.api.asc_LoadDocument(); this.api.Resize(); }; diff --git a/apps/documenteditor/mobile/src/controller/Toolbar.jsx b/apps/documenteditor/mobile/src/controller/Toolbar.jsx index 136f040ca..4cd2fb327 100644 --- a/apps/documenteditor/mobile/src/controller/Toolbar.jsx +++ b/apps/documenteditor/mobile/src/controller/Toolbar.jsx @@ -3,11 +3,13 @@ import { inject, observer } from 'mobx-react'; import { f7 } from 'framework7-react'; import { useTranslation } from 'react-i18next'; import ToolbarView from "../view/Toolbar"; +import {storeAppOptions} from "../store/appOptions"; const ToolbarController = inject('storeAppOptions', 'users', 'storeReview', 'storeFocusObjects', 'storeToolbarSettings','storeDocumentInfo')(observer(props => { const {t} = useTranslation(); const _t = t("Toolbar", { returnObjects: true }); const appOptions = props.storeAppOptions; + const isViewer = appOptions.isViewer; const isDisconnected = props.users.isDisconnected; const displayMode = props.storeReview.displayMode; const stateDisplayMode = displayMode == "final" || displayMode == "original" ? true : false; @@ -124,6 +126,18 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeReview', 'sto Common.Gateway.requestEditRights(); }; + const turnOffViewerMode = () => { + const api = Common.EditorApi.get(); + appOptions.changeViewerMode(); + api.asc_addRestriction(Asc.c_oAscRestrictionType.None); + } + + const turnOnViewerMode = () => { + const api = Common.EditorApi.get(); + appOptions.changeViewerMode(); + api.asc_addRestriction(Asc.c_oAscRestrictionType.View); + } + return ( ) })); diff --git a/apps/documenteditor/mobile/src/less/icons-ios.less b/apps/documenteditor/mobile/src/less/icons-ios.less index aac468c50..cbac03fd8 100644 --- a/apps/documenteditor/mobile/src/less/icons-ios.less +++ b/apps/documenteditor/mobile/src/less/icons-ios.less @@ -445,6 +445,13 @@ .encoded-svg-mask(''); } + // Icon edit mode + &.icon-edit-mode { + width: 24px; + height: 24px; + .encoded-svg-mask(''); + } + // Comments &.icon-menu-comment { width: 30px; diff --git a/apps/documenteditor/mobile/src/less/icons-material.less b/apps/documenteditor/mobile/src/less/icons-material.less index 88b85795d..dda869d85 100644 --- a/apps/documenteditor/mobile/src/less/icons-material.less +++ b/apps/documenteditor/mobile/src/less/icons-material.less @@ -63,10 +63,15 @@ .encoded-svg-mask('', @toolbar-tab-normal); } &.icon-search { - width: 22px; - height: 22px; + width: 24px; + height: 24px; .encoded-svg-mask(''); } + &.icon-edit-mode { + width: 24px; + height: 24px; + .encoded-svg-mask('', @toolbar-icons); + } } } i.icon { diff --git a/apps/documenteditor/mobile/src/page/main.jsx b/apps/documenteditor/mobile/src/page/main.jsx index f8867cd70..bbfe24ac2 100644 --- a/apps/documenteditor/mobile/src/page/main.jsx +++ b/apps/documenteditor/mobile/src/page/main.jsx @@ -92,6 +92,8 @@ class MainPage extends Component { render() { const appOptions = this.props.storeAppOptions; + // const isViewer = appOptions.isViewer; + // console.log(isViewer); const config = appOptions.config; let showLogo = !(appOptions.canBrandingExt && (config.customization && (config.customization.loaderName || config.customization.loaderLogo))); @@ -112,10 +114,13 @@ class MainPage extends Component { window.open(`${__PUBLISHER_URL__}`, "_blank"); }}>} - + + + {/* Page content */} diff --git a/apps/documenteditor/mobile/src/store/appOptions.js b/apps/documenteditor/mobile/src/store/appOptions.js index 2c6e25271..b31c533bd 100644 --- a/apps/documenteditor/mobile/src/store/appOptions.js +++ b/apps/documenteditor/mobile/src/store/appOptions.js @@ -23,11 +23,19 @@ export class storeAppOptions { canBranding: observable, isDocReady: observable, - changeDocReady: action + changeDocReady: action, + + isViewer: observable, + changeViewerMode: action }); } isEdit = false; + isViewer = true; + + changeViewerMode() { + this.isViewer = !this.isViewer; + } canViewComments = false; changeCanViewComments(value) { diff --git a/apps/documenteditor/mobile/src/view/Toolbar.jsx b/apps/documenteditor/mobile/src/view/Toolbar.jsx index 513b5418c..7d32c0107 100644 --- a/apps/documenteditor/mobile/src/view/Toolbar.jsx +++ b/apps/documenteditor/mobile/src/view/Toolbar.jsx @@ -6,34 +6,38 @@ import EditorUIController from '../lib/patch' const ToolbarView = props => { const isDisconnected = props.isDisconnected; const disableEditBtn = props.isObjectLocked || props.stateDisplayMode || props.disabledEditControls || isDisconnected; + const isViewer = props.isViewer; + return ( - {props.isShowBack && } - {Device.ios && props.isEdit && EditorUIController.getUndoRedo && EditorUIController.getUndoRedo({ + {!isViewer && props.turnOnViewerMode()}>} + {(props.isShowBack && isViewer) && } + {(Device.ios && props.isEdit && !isViewer) && EditorUIController.getUndoRedo && EditorUIController.getUndoRedo({ disabledUndo: !props.isCanUndo || isDisconnected, disabledRedo: !props.isCanRedo || isDisconnected, onUndoClick: props.onUndo, onRedoClick: props.onRedo })} - {!Device.phone && {props.docTitle}} + {(!Device.phone || isViewer) && {props.docTitle}} - {Device.android && props.isEdit && EditorUIController.getUndoRedo && EditorUIController.getUndoRedo({ + {(Device.android && props.isEdit && !isViewer) && EditorUIController.getUndoRedo && EditorUIController.getUndoRedo({ disabledUndo: !props.isCanUndo, disabledRedo: !props.isCanRedo, onUndoClick: props.onUndo, onRedoClick: props.onRedo })} - {props.showEditDocument && + {(props.showEditDocument && !isViewer) && } - {props.isEdit && EditorUIController.getToolbarOptions && EditorUIController.getToolbarOptions({ + {props.isEdit && !isViewer && EditorUIController.getToolbarOptions && EditorUIController.getToolbarOptions({ disabled: disableEditBtn || props.disabledControls, onEditClick: e => props.openOptions('edit'), onAddClick: e => props.openOptions('add') })} - { Device.phone ? null : } + {isViewer && props.turnOffViewerMode()}>} + {Device.phone ? null : } {props.displayCollaboration && window.matchMedia("(min-width: 360px)").matches ? props.openOptions('coauth')}> : null} props.openOptions('settings')}> From 6ca40588d8a02937ff5ab299990f857ecbf2153c Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Thu, 11 Aug 2022 18:39:56 +0300 Subject: [PATCH 2/3] [DE mobile] Restriction of settings in reader mode and add mobile view --- .../lib/view/collaboration/Collaboration.jsx | 4 +- .../lib/view/collaboration/Comments.jsx | 6 +-- apps/documenteditor/mobile/locale/en.json | 6 ++- .../mobile/src/controller/Search.jsx | 3 +- .../mobile/src/controller/Toolbar.jsx | 13 ++++++ .../src/controller/settings/Settings.jsx | 39 ++++++++++------ .../mobile/src/less/app-ios.less | 5 +++ .../mobile/src/less/icons-ios.less | 12 ++++- .../mobile/src/less/icons-material.less | 25 ++++++++++- .../mobile/src/store/appOptions.js | 13 +++++- .../mobile/src/view/Toolbar.jsx | 6 ++- .../mobile/src/view/settings/Settings.jsx | 45 ++++++++++++------- 12 files changed, 136 insertions(+), 41 deletions(-) diff --git a/apps/common/mobile/lib/view/collaboration/Collaboration.jsx b/apps/common/mobile/lib/view/collaboration/Collaboration.jsx index b2cc1b013..713b19e08 100644 --- a/apps/common/mobile/lib/view/collaboration/Collaboration.jsx +++ b/apps/common/mobile/lib/view/collaboration/Collaboration.jsx @@ -89,6 +89,8 @@ const PageCollaboration = inject('storeAppOptions', 'users')(observer(props => { const { t } = useTranslation(); const _t = t('Common.Collaboration', {returnObjects: true}); const appOptions = props.storeAppOptions; + const isViewer = appOptions.isViewer; + return ( @@ -112,7 +114,7 @@ const PageCollaboration = inject('storeAppOptions', 'users')(observer(props => { } - {window.editorType === 'de' && (appOptions.canReview || appOptions.canViewReview) && + {(window.editorType === 'de' && (appOptions.canReview || appOptions.canViewReview) && !isViewer) && diff --git a/apps/common/mobile/lib/view/collaboration/Comments.jsx b/apps/common/mobile/lib/view/collaboration/Comments.jsx index d8927fca7..b6a51a636 100644 --- a/apps/common/mobile/lib/view/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/view/collaboration/Comments.jsx @@ -636,7 +636,7 @@ const ViewComments = inject("storeComments", "storeAppOptions", "storeReview")(o const _t = t('Common.Collaboration', {returnObjects: true}); const isAndroid = Device.android; const displayMode = storeReview.displayMode; - + const isViewer = storeAppOptions.isViewer; const viewMode = !storeAppOptions.canComments; const comments = storeComments.groupCollectionFilter || storeComments.collectionComments; const isEdit = storeAppOptions.isEdit || storeAppOptions.isRestrictedEdit; @@ -678,7 +678,7 @@ const ViewComments = inject("storeComments", "storeAppOptions", "storeReview")(o {isEdit && !viewMode &&
{(comment.editable && displayMode === 'markup' && !wsProps?.Objects) &&
{onResolveComment(comment);}}>
} - {(displayMode === 'markup' && !wsProps?.Objects) && + {(displayMode === 'markup' && !wsProps?.Objects && !isViewer) &&
{setComment(comment); openActionComment(true);}}> @@ -708,7 +708,7 @@ const ViewComments = inject("storeComments", "storeAppOptions", "storeReview")(o
{reply.date}
- {isEdit && !viewMode && reply.editable && + {isEdit && !viewMode && reply.editable && !isViewer &&
{setComment(comment); setReply(reply); openActionReply(true);}} diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json index d96bf81fb..c88d8d898 100644 --- a/apps/documenteditor/mobile/locale/en.json +++ b/apps/documenteditor/mobile/locale/en.json @@ -669,12 +669,14 @@ "txtScheme6": "Concourse", "txtScheme7": "Equity", "txtScheme8": "Flow", - "txtScheme9": "Foundry" + "txtScheme9": "Foundry", + "textMobileView": "Mobile View" }, "Toolbar": { "dlgLeaveMsgText": "You have unsaved changes. Click 'Stay on this Page' to wait for autosave. Click 'Leave this Page' to discard all the unsaved changes.", "dlgLeaveTitleText": "You leave the application", "leaveButtonText": "Leave this Page", - "stayButtonText": "Stay on this page" + "stayButtonText": "Stay on this page", + "textOk": "OK" } } \ No newline at end of file diff --git a/apps/documenteditor/mobile/src/controller/Search.jsx b/apps/documenteditor/mobile/src/controller/Search.jsx index e47467400..a337ac6a4 100644 --- a/apps/documenteditor/mobile/src/controller/Search.jsx +++ b/apps/documenteditor/mobile/src/controller/Search.jsx @@ -25,6 +25,7 @@ class SearchSettings extends SearchSettingsView { const _t = t("Settings", {returnObjects: true}); const storeAppOptions = this.props.storeAppOptions; const isEdit = storeAppOptions.isEdit; + const isViewer = storeAppOptions.isViewer; const storeReview = this.props.storeReview; const displayMode = storeReview.displayMode; @@ -39,7 +40,7 @@ class SearchSettings extends SearchSettingsView { this.onFindReplaceClick('find')} /> - {isEdit && displayMode === 'markup' ? [ + {isEdit && displayMode === 'markup' && !isViewer ? [ this.onFindReplaceClick('replace')} />, { const api = Common.EditorApi.get(); + appOptions.changeViewerMode(); + api.asc_removeRestriction(Asc.c_oAscRestrictionType.View) api.asc_addRestriction(Asc.c_oAscRestrictionType.None); } const turnOnViewerMode = () => { const api = Common.EditorApi.get(); + appOptions.changeViewerMode(); api.asc_addRestriction(Asc.c_oAscRestrictionType.View); } + const changeMobileView = () => { + const api = Common.EditorApi.get(); + + appOptions.changeMobileView(); + api.ChangeReaderMode(); + } + return ( ) })); diff --git a/apps/documenteditor/mobile/src/controller/settings/Settings.jsx b/apps/documenteditor/mobile/src/controller/settings/Settings.jsx index c55c73d67..6ba5bb7a6 100644 --- a/apps/documenteditor/mobile/src/controller/settings/Settings.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/Settings.jsx @@ -27,18 +27,18 @@ const Settings = props => { } }; - const onReaderMode = () => { - const appOptions = props.storeAppOptions; - appOptions.changeReaderMode(); - - Common.EditorApi.get().ChangeReaderMode(); - - if (Device.phone) { - setTimeout(() => { - closeModal(); - }, 1); - } - }; + // const onReaderMode = () => { + // const appOptions = props.storeAppOptions; + // appOptions.changeReaderMode(); + // + // Common.EditorApi.get().ChangeReaderMode(); + // + // if (Device.phone) { + // setTimeout(() => { + // closeModal(); + // }, 1); + // } + // }; const onPrint = () => { const api = Common.EditorApi.get(); @@ -94,15 +94,28 @@ const Settings = props => { }, 0); }; + const onChangeMobileView = () => { + const api = Common.EditorApi.get() + const appOptions = props.storeAppOptions; + + appOptions.changeMobileView(); + api.ChangeReaderMode(); + + if (Device.phone) { + closeModal(); + } + } + return }; diff --git a/apps/documenteditor/mobile/src/less/app-ios.less b/apps/documenteditor/mobile/src/less/app-ios.less index edff70bc3..3b394e462 100644 --- a/apps/documenteditor/mobile/src/less/app-ios.less +++ b/apps/documenteditor/mobile/src/less/app-ios.less @@ -53,5 +53,10 @@ } } } + + // Reader mode + .back-reader-mode { + margin-left: 10px; + } } diff --git a/apps/documenteditor/mobile/src/less/icons-ios.less b/apps/documenteditor/mobile/src/less/icons-ios.less index cbac03fd8..b54e9eba1 100644 --- a/apps/documenteditor/mobile/src/less/icons-ios.less +++ b/apps/documenteditor/mobile/src/less/icons-ios.less @@ -445,12 +445,22 @@ .encoded-svg-mask(''); } - // Icon edit mode + // Reader mode &.icon-edit-mode { width: 24px; height: 24px; .encoded-svg-mask(''); } + &.icon-mobile-view { + width: 24px; + height: 24px; + .encoded-svg-mask('') + } + &.icon-standard-view { + width: 24px; + height: 24px; + .encoded-svg-mask(''); + } // Comments &.icon-menu-comment { diff --git a/apps/documenteditor/mobile/src/less/icons-material.less b/apps/documenteditor/mobile/src/less/icons-material.less index dda869d85..c06e90443 100644 --- a/apps/documenteditor/mobile/src/less/icons-material.less +++ b/apps/documenteditor/mobile/src/less/icons-material.less @@ -67,11 +67,28 @@ height: 24px; .encoded-svg-mask(''); } + + // Reader mode &.icon-edit-mode { width: 24px; height: 24px; .encoded-svg-mask('', @toolbar-icons); } + &.icon-mobile-view { + width: 24px; + height: 24px; + .encoded-svg-mask('', @toolbar-icons); + } + &.icon-standard-view { + width: 24px; + height: 24px; + .encoded-svg-mask('', @toolbar-icons); + } + &.icon-back-reader-mode { + width: 24px; + height: 24px; + .encoded-svg-mask('', @toolbar-icons); + } } } i.icon { @@ -157,8 +174,14 @@ .encoded-svg-mask(''); } + // Mobile View + &.icon-mobile-view { + width: 24px; + height: 24px; + .encoded-svg-mask('', @brandColor); + } + // Edit - &.icon-text-align-left { width: 22px; height: 22px; diff --git a/apps/documenteditor/mobile/src/store/appOptions.js b/apps/documenteditor/mobile/src/store/appOptions.js index b31c533bd..096c60834 100644 --- a/apps/documenteditor/mobile/src/store/appOptions.js +++ b/apps/documenteditor/mobile/src/store/appOptions.js @@ -26,13 +26,22 @@ export class storeAppOptions { changeDocReady: action, isViewer: observable, - changeViewerMode: action + changeViewerMode: action, + + isMobileView: observable, + changeMobileView: action }); } isEdit = false; - isViewer = true; + isMobileView = false; + changeMobileView() { + this.isMobileView = !this.isMobileView; + } + + + isViewer = true; changeViewerMode() { this.isViewer = !this.isViewer; } diff --git a/apps/documenteditor/mobile/src/view/Toolbar.jsx b/apps/documenteditor/mobile/src/view/Toolbar.jsx index 7d32c0107..25026add1 100644 --- a/apps/documenteditor/mobile/src/view/Toolbar.jsx +++ b/apps/documenteditor/mobile/src/view/Toolbar.jsx @@ -1,17 +1,20 @@ import React, {Fragment} from 'react'; +import { useTranslation } from 'react-i18next'; import {NavLeft, NavRight, NavTitle, Link, Icon} from 'framework7-react'; import { Device } from '../../../../common/mobile/utils/device'; import EditorUIController from '../lib/patch' const ToolbarView = props => { + const { t } = useTranslation(); const isDisconnected = props.isDisconnected; const disableEditBtn = props.isObjectLocked || props.stateDisplayMode || props.disabledEditControls || isDisconnected; const isViewer = props.isViewer; + const isMobileView = props.isMobileView; return ( - {!isViewer && props.turnOnViewerMode()}>} + {!isViewer && props.turnOnViewerMode()}>} {(props.isShowBack && isViewer) && } {(Device.ios && props.isEdit && !isViewer) && EditorUIController.getUndoRedo && EditorUIController.getUndoRedo({ disabledUndo: !props.isCanUndo || isDisconnected, @@ -28,6 +31,7 @@ const ToolbarView = props => { onUndoClick: props.onUndo, onRedoClick: props.onRedo })} + {isViewer && props.changeMobileView()}>} {(props.showEditDocument && !isViewer) && } diff --git a/apps/documenteditor/mobile/src/view/settings/Settings.jsx b/apps/documenteditor/mobile/src/view/settings/Settings.jsx index 2a6ece70f..2a0d911fd 100644 --- a/apps/documenteditor/mobile/src/view/settings/Settings.jsx +++ b/apps/documenteditor/mobile/src/view/settings/Settings.jsx @@ -75,6 +75,7 @@ const routes = [ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => { const { t } = useTranslation(); const _t = t('Settings', {returnObjects: true}); + const appOptions = props.storeAppOptions; const storeReview = props.storeReview; const displayMode = storeReview.displayMode; const navbar = @@ -105,11 +106,13 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => } // set mode - const appOptions = props.storeAppOptions; + const isViewer = appOptions.isViewer; + const isMobileView = appOptions.isMobileView; + let _isEdit = false, _canDownload = false, _canDownloadOrigin = false, - _canReader = false, + // _canReader = false, _canAbout = true, _canHelp = true, _canPrint = false; @@ -119,7 +122,7 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => _canPrint = _canDownload = _canDownloadOrigin = false; } else { _isEdit = appOptions.isEdit; - _canReader = !appOptions.isEdit && !appOptions.isRestrictedEdit && appOptions.canReader; + // _canReader = !appOptions.isEdit && !appOptions.isRestrictedEdit && appOptions.canReader; _canDownload = appOptions.canDownload; _canDownloadOrigin = appOptions.canDownloadOrigin; _canPrint = appOptions.canPrint; @@ -136,8 +139,9 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => {navbar} + {/*disabled={appOptions.readerMode ? true : false}*/} {!props.inPopover && - + } @@ -154,26 +158,35 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => : null} - {_canReader && - {/*ToDo*/} - - {props.onReaderMode()}}/> - - } + {/*{_canReader &&*/} + {/* /!*ToDo*!/*/} + {/* */} + {/* {props.onReaderMode()}}/>*/} + {/* */} + {/*}*/} {Device.sailfish && _isEdit && {props.onOrthographyCheck()}} className='no-indicator' link="#"> } - {_isEdit && + {!isViewer && + + + props.onChangeMobileView()} /> + + } + {(_isEdit && !isViewer) && } - - - + {!isViewer && + + + + } {_canDownload && @@ -227,10 +240,10 @@ class SettingsView extends Component { return ( show_popover ? this.props.onclosed()}> - + : this.props.onclosed()}> - + ) } From 0d24b79e2ee8b802d68271b6a89167e304d5eb52 Mon Sep 17 00:00:00 2001 From: SergeyEzhin Date: Mon, 15 Aug 2022 19:58:06 +0300 Subject: [PATCH 3/3] [DE mobile] Add restriction for view comments, context menu and short document title --- .../lib/view/collaboration/Comments.jsx | 26 +++++++++---------- apps/common/mobile/resources/less/common.less | 5 ++++ .../mobile/src/controller/ContextMenu.jsx | 22 +++++++++------- .../src/controller/settings/Settings.jsx | 14 ---------- .../mobile/src/view/Toolbar.jsx | 15 ++++++++++- .../mobile/src/view/settings/Settings.jsx | 9 ------- 6 files changed, 44 insertions(+), 47 deletions(-) diff --git a/apps/common/mobile/lib/view/collaboration/Comments.jsx b/apps/common/mobile/lib/view/collaboration/Comments.jsx index b6a51a636..4525329bc 100644 --- a/apps/common/mobile/lib/view/collaboration/Comments.jsx +++ b/apps/common/mobile/lib/view/collaboration/Comments.jsx @@ -677,7 +677,7 @@ const ViewComments = inject("storeComments", "storeAppOptions", "storeReview")(o
{isEdit && !viewMode &&
- {(comment.editable && displayMode === 'markup' && !wsProps?.Objects) &&
{onResolveComment(comment);}}>
} + {(comment.editable && displayMode === 'markup' && !wsProps?.Objects) &&
{!isViewer && onResolveComment(comment);}}>
} {(displayMode === 'markup' && !wsProps?.Objects && !isViewer) &&
{setComment(comment); openActionComment(true);}}> @@ -747,7 +747,7 @@ const CommentList = inject("storeComments", "storeAppOptions", "storeReview")(ob const _t = t('Common.Collaboration', {returnObjects: true}); const isAndroid = Device.android; const displayMode = storeReview.displayMode; - + const isViewer = storeAppOptions.isViewer; const viewMode = !storeAppOptions.canComments; const isEdit = storeAppOptions.isEdit || storeAppOptions.isRestrictedEdit; const comments = storeComments.showComments; @@ -786,8 +786,8 @@ const CommentList = inject("storeComments", "storeAppOptions", "storeReview")(ob return ( - {isEdit && !viewMode && - {onCommentMenuClick('addReply', comment);}}>{_t.textAddReply} + {isEdit && !viewMode && + {onCommentMenuClick('addReply', comment);}}>{_t.textAddReply} }
@@ -808,8 +808,8 @@ const CommentList = inject("storeComments", "storeAppOptions", "storeReview")(ob
{isEdit && !viewMode &&
- {(comment.editable && displayMode === 'markup' && !wsProps?.Objects) &&
{onResolveComment(comment);}}>
} - {(displayMode === 'markup' && !wsProps?.Objects) && + {(comment.editable && displayMode === 'markup' && !wsProps?.Objects) &&
{!isViewer && onResolveComment(comment);}}>
} + {(displayMode === 'markup' && !wsProps?.Objects && !isViewer) &&
{openActionComment(true);}}> @@ -839,14 +839,14 @@ const CommentList = inject("storeComments", "storeAppOptions", "storeReview")(ob
{reply.date}
- {isEdit && !viewMode && reply.editable && -
-
{setReply(reply); openActionReply(true);}} - > - + {isEdit && !viewMode && reply.editable && !isViewer && +
+
{setReply(reply); openActionReply(true);}} + > + +
-
}
diff --git a/apps/common/mobile/resources/less/common.less b/apps/common/mobile/resources/less/common.less index f3a948d30..e2d628579 100644 --- a/apps/common/mobile/resources/less/common.less +++ b/apps/common/mobile/resources/less/common.less @@ -47,6 +47,11 @@ .subnavbar { .subnavbar-inner { padding: 0; + .title { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } } .icon-back { color: @toolbar-icons; diff --git a/apps/documenteditor/mobile/src/controller/ContextMenu.jsx b/apps/documenteditor/mobile/src/controller/ContextMenu.jsx index d173f9fb9..843fe3fe0 100644 --- a/apps/documenteditor/mobile/src/controller/ContextMenu.jsx +++ b/apps/documenteditor/mobile/src/controller/ContextMenu.jsx @@ -19,7 +19,8 @@ import EditorUIController from '../lib/patch'; users: stores.users, isDisconnected: stores.users.isDisconnected, displayMode: stores.storeReview.displayMode, - dataDoc: stores.storeDocumentInfo.dataDoc + dataDoc: stores.storeDocumentInfo.dataDoc, + isViewer: stores.storeAppOptions.isViewer })) class ContextMenu extends ContextMenuController { constructor(props) { @@ -225,6 +226,7 @@ class ContextMenu extends ContextMenuController { } else { const { t } = this.props; const _t = t("ContextMenu", { returnObjects: true }); + f7.dialog.create({ title: t('Settings', {returnObjects: true}).notcriticalErrorTitle, text : _t.txtWarnUrl, @@ -256,7 +258,7 @@ class ContextMenu extends ContextMenuController { initMenuItems() { if ( !Common.EditorApi ) return []; - const { isEdit, canFillForms, isDisconnected } = this.props; + const { isEdit, canFillForms, isDisconnected, isViewer } = this.props; if (isEdit && EditorUIController.ContextMenu) { return EditorUIController.ContextMenu.mapMenuItems(this); @@ -296,36 +298,36 @@ class ContextMenu extends ContextMenuController { let itemsIcon = [], itemsText = []; - if ( canCopy ) { + if (canCopy) { itemsIcon.push({ event: 'copy', icon: 'icon-copy' }); } - if(!isDisconnected) { - if ( canFillForms && canCopy && !locked ) { + if (!isDisconnected) { + if (canFillForms && canCopy && !locked && !isViewer) { itemsIcon.push({ event: 'cut', icon: 'icon-cut' }); } - if ( canFillForms && canCopy && !locked ) { + if (canFillForms && canCopy && !locked && !isViewer) { itemsIcon.push({ event: 'paste', icon: 'icon-paste' }); } - if ( canViewComments && this.isComments ) { + if (canViewComments && this.isComments) { itemsText.push({ caption: _t.menuViewComment, event: 'viewcomment' }); } - if (api.can_AddQuotedComment() !== false && canCoAuthoring && canComments && !locked && !(!isText && isObject)) { + if (api.can_AddQuotedComment() !== false && canCoAuthoring && canComments && !locked && !(!isText && isObject) && !isViewer) { itemsText.push({ caption: _t.menuAddComment, event: 'addcomment' @@ -333,14 +335,14 @@ class ContextMenu extends ContextMenuController { } } - if ( isLink ) { + if (isLink) { itemsText.push({ caption: _t.menuOpenLink, event: 'openlink' }); } - if(inToc && isEdit) { + if(inToc && isEdit && !isViewer) { itemsText.push({ caption: t('ContextMenu.textRefreshEntireTable'), event: 'refreshEntireTable' diff --git a/apps/documenteditor/mobile/src/controller/settings/Settings.jsx b/apps/documenteditor/mobile/src/controller/settings/Settings.jsx index 6ba5bb7a6..07cb9e673 100644 --- a/apps/documenteditor/mobile/src/controller/settings/Settings.jsx +++ b/apps/documenteditor/mobile/src/controller/settings/Settings.jsx @@ -27,19 +27,6 @@ const Settings = props => { } }; - // const onReaderMode = () => { - // const appOptions = props.storeAppOptions; - // appOptions.changeReaderMode(); - // - // Common.EditorApi.get().ChangeReaderMode(); - // - // if (Device.phone) { - // setTimeout(() => { - // closeModal(); - // }, 1); - // } - // }; - const onPrint = () => { const api = Common.EditorApi.get(); @@ -109,7 +96,6 @@ const Settings = props => { return { const isViewer = props.isViewer; const isMobileView = props.isMobileView; + const shortTitle = (title) => { + const arrDocTitle = title.split('.'); + const ext = arrDocTitle[1]; + const name = arrDocTitle[0]; + + if(name.length > 7 && Device.phone) { + let shortName = name.substring(0, 7); + return `${shortName}...${ext}`; + } + + return title; + }; + return ( @@ -23,7 +36,7 @@ const ToolbarView = props => { onRedoClick: props.onRedo })} - {(!Device.phone || isViewer) && {props.docTitle}} + {(!Device.phone || isViewer) && {shortTitle(props.docTitle)}} {(Device.android && props.isEdit && !isViewer) && EditorUIController.getUndoRedo && EditorUIController.getUndoRedo({ disabledUndo: !props.isCanUndo, diff --git a/apps/documenteditor/mobile/src/view/settings/Settings.jsx b/apps/documenteditor/mobile/src/view/settings/Settings.jsx index 2a0d911fd..0cacc2067 100644 --- a/apps/documenteditor/mobile/src/view/settings/Settings.jsx +++ b/apps/documenteditor/mobile/src/view/settings/Settings.jsx @@ -112,7 +112,6 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => let _isEdit = false, _canDownload = false, _canDownloadOrigin = false, - // _canReader = false, _canAbout = true, _canHelp = true, _canPrint = false; @@ -122,7 +121,6 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => _canPrint = _canDownload = _canDownloadOrigin = false; } else { _isEdit = appOptions.isEdit; - // _canReader = !appOptions.isEdit && !appOptions.isRestrictedEdit && appOptions.canReader; _canDownload = appOptions.canDownload; _canDownloadOrigin = appOptions.canDownloadOrigin; _canPrint = appOptions.canPrint; @@ -139,7 +137,6 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => {navbar} - {/*disabled={appOptions.readerMode ? true : false}*/} {!props.inPopover && @@ -158,12 +155,6 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props => : null} - {/*{_canReader &&*/} - {/* /!*ToDo*!/*/} - {/* */} - {/* {props.onReaderMode()}}/>*/} - {/* */} - {/*}*/} {Device.sailfish && _isEdit && {props.onOrthographyCheck()}} className='no-indicator' link="#">