[DE mobile] Add restriction for view comments, context menu and short document title

This commit is contained in:
SergeyEzhin 2022-08-15 19:58:06 +03:00
parent 6ca40588d8
commit 0d24b79e2e
6 changed files with 44 additions and 47 deletions

View file

@ -677,7 +677,7 @@ const ViewComments = inject("storeComments", "storeAppOptions", "storeReview")(o
</div> </div>
{isEdit && !viewMode && {isEdit && !viewMode &&
<div className='right'> <div className='right'>
{(comment.editable && displayMode === 'markup' && !wsProps?.Objects) && <div className='comment-resolve' onClick={() => {onResolveComment(comment);}}><Icon icon={comment.resolved ? 'icon-resolve-comment check' : 'icon-resolve-comment'} /></div> } {(comment.editable && displayMode === 'markup' && !wsProps?.Objects) && <div className='comment-resolve' onClick={() => {!isViewer && onResolveComment(comment);}}><Icon icon={comment.resolved ? 'icon-resolve-comment check' : 'icon-resolve-comment'} /></div> }
{(displayMode === 'markup' && !wsProps?.Objects && !isViewer) && {(displayMode === 'markup' && !wsProps?.Objects && !isViewer) &&
<div className='comment-menu' <div className='comment-menu'
onClick={() => {setComment(comment); openActionComment(true);}}> onClick={() => {setComment(comment); openActionComment(true);}}>
@ -747,7 +747,7 @@ const CommentList = inject("storeComments", "storeAppOptions", "storeReview")(ob
const _t = t('Common.Collaboration', {returnObjects: true}); const _t = t('Common.Collaboration', {returnObjects: true});
const isAndroid = Device.android; const isAndroid = Device.android;
const displayMode = storeReview.displayMode; const displayMode = storeReview.displayMode;
const isViewer = storeAppOptions.isViewer;
const viewMode = !storeAppOptions.canComments; const viewMode = !storeAppOptions.canComments;
const isEdit = storeAppOptions.isEdit || storeAppOptions.isRestrictedEdit; const isEdit = storeAppOptions.isEdit || storeAppOptions.isRestrictedEdit;
const comments = storeComments.showComments; const comments = storeComments.showComments;
@ -787,7 +787,7 @@ const CommentList = inject("storeComments", "storeAppOptions", "storeReview")(ob
<Fragment> <Fragment>
<Toolbar position='bottom'> <Toolbar position='bottom'>
{isEdit && !viewMode && {isEdit && !viewMode &&
<Link className={`btn-add-reply${wsProps?.Objects ? ' disabled' : ''}`} href='#' onClick={() => {onCommentMenuClick('addReply', comment);}}>{_t.textAddReply}</Link> <Link className={`btn-add-reply${wsProps?.Objects || isViewer ? ' disabled' : ''}`} href='#' onClick={() => {onCommentMenuClick('addReply', comment);}}>{_t.textAddReply}</Link>
} }
<div className='comment-navigation row'> <div className='comment-navigation row'>
<Link href='#' onClick={onViewPrevComment}><Icon slot='media' icon='icon-prev'/></Link> <Link href='#' onClick={onViewPrevComment}><Icon slot='media' icon='icon-prev'/></Link>
@ -808,8 +808,8 @@ const CommentList = inject("storeComments", "storeAppOptions", "storeReview")(ob
</div> </div>
{isEdit && !viewMode && {isEdit && !viewMode &&
<div className='right'> <div className='right'>
{(comment.editable && displayMode === 'markup' && !wsProps?.Objects) && <div className='comment-resolve' onClick={() => {onResolveComment(comment);}}><Icon icon={comment.resolved ? 'icon-resolve-comment check' : 'icon-resolve-comment'}/></div>} {(comment.editable && displayMode === 'markup' && !wsProps?.Objects) && <div className='comment-resolve' onClick={() => {!isViewer && onResolveComment(comment);}}><Icon icon={comment.resolved ? 'icon-resolve-comment check' : 'icon-resolve-comment'}/></div>}
{(displayMode === 'markup' && !wsProps?.Objects) && {(displayMode === 'markup' && !wsProps?.Objects && !isViewer) &&
<div className='comment-menu' <div className='comment-menu'
onClick={() => {openActionComment(true);}}> onClick={() => {openActionComment(true);}}>
<Icon icon='icon-menu-comment'/> <Icon icon='icon-menu-comment'/>
@ -839,7 +839,7 @@ const CommentList = inject("storeComments", "storeAppOptions", "storeReview")(ob
<div className='reply-date'>{reply.date}</div> <div className='reply-date'>{reply.date}</div>
</div> </div>
</div> </div>
{isEdit && !viewMode && reply.editable && {isEdit && !viewMode && reply.editable && !isViewer &&
<div className='right'> <div className='right'>
<div className='reply-menu' <div className='reply-menu'
onClick={() => {setReply(reply); openActionReply(true);}} onClick={() => {setReply(reply); openActionReply(true);}}

View file

@ -47,6 +47,11 @@
.subnavbar { .subnavbar {
.subnavbar-inner { .subnavbar-inner {
padding: 0; padding: 0;
.title {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
} }
.icon-back { .icon-back {
color: @toolbar-icons; color: @toolbar-icons;

View file

@ -19,7 +19,8 @@ import EditorUIController from '../lib/patch';
users: stores.users, users: stores.users,
isDisconnected: stores.users.isDisconnected, isDisconnected: stores.users.isDisconnected,
displayMode: stores.storeReview.displayMode, displayMode: stores.storeReview.displayMode,
dataDoc: stores.storeDocumentInfo.dataDoc dataDoc: stores.storeDocumentInfo.dataDoc,
isViewer: stores.storeAppOptions.isViewer
})) }))
class ContextMenu extends ContextMenuController { class ContextMenu extends ContextMenuController {
constructor(props) { constructor(props) {
@ -225,6 +226,7 @@ class ContextMenu extends ContextMenuController {
} else { } else {
const { t } = this.props; const { t } = this.props;
const _t = t("ContextMenu", { returnObjects: true }); const _t = t("ContextMenu", { returnObjects: true });
f7.dialog.create({ f7.dialog.create({
title: t('Settings', {returnObjects: true}).notcriticalErrorTitle, title: t('Settings', {returnObjects: true}).notcriticalErrorTitle,
text : _t.txtWarnUrl, text : _t.txtWarnUrl,
@ -256,7 +258,7 @@ class ContextMenu extends ContextMenuController {
initMenuItems() { initMenuItems() {
if ( !Common.EditorApi ) return []; if ( !Common.EditorApi ) return [];
const { isEdit, canFillForms, isDisconnected } = this.props; const { isEdit, canFillForms, isDisconnected, isViewer } = this.props;
if (isEdit && EditorUIController.ContextMenu) { if (isEdit && EditorUIController.ContextMenu) {
return EditorUIController.ContextMenu.mapMenuItems(this); return EditorUIController.ContextMenu.mapMenuItems(this);
@ -304,14 +306,14 @@ class ContextMenu extends ContextMenuController {
} }
if (!isDisconnected) { if (!isDisconnected) {
if ( canFillForms && canCopy && !locked ) { if (canFillForms && canCopy && !locked && !isViewer) {
itemsIcon.push({ itemsIcon.push({
event: 'cut', event: 'cut',
icon: 'icon-cut' icon: 'icon-cut'
}); });
} }
if ( canFillForms && canCopy && !locked ) { if (canFillForms && canCopy && !locked && !isViewer) {
itemsIcon.push({ itemsIcon.push({
event: 'paste', event: 'paste',
icon: 'icon-paste' icon: 'icon-paste'
@ -325,7 +327,7 @@ class ContextMenu extends ContextMenuController {
}); });
} }
if (api.can_AddQuotedComment() !== false && canCoAuthoring && canComments && !locked && !(!isText && isObject)) { if (api.can_AddQuotedComment() !== false && canCoAuthoring && canComments && !locked && !(!isText && isObject) && !isViewer) {
itemsText.push({ itemsText.push({
caption: _t.menuAddComment, caption: _t.menuAddComment,
event: 'addcomment' event: 'addcomment'
@ -340,7 +342,7 @@ class ContextMenu extends ContextMenuController {
}); });
} }
if(inToc && isEdit) { if(inToc && isEdit && !isViewer) {
itemsText.push({ itemsText.push({
caption: t('ContextMenu.textRefreshEntireTable'), caption: t('ContextMenu.textRefreshEntireTable'),
event: 'refreshEntireTable' event: 'refreshEntireTable'

View file

@ -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 onPrint = () => {
const api = Common.EditorApi.get(); const api = Common.EditorApi.get();
@ -109,7 +96,6 @@ const Settings = props => {
return <SettingsView usePopover={!Device.phone} return <SettingsView usePopover={!Device.phone}
openOptions={props.openOptions} openOptions={props.openOptions}
onclosed={props.onclosed} onclosed={props.onclosed}
// onReaderMode={onReaderMode}
onPrint={onPrint} onPrint={onPrint}
showHelp={showHelp} showHelp={showHelp}
showFeedback={showFeedback} showFeedback={showFeedback}

View file

@ -11,6 +11,19 @@ const ToolbarView = props => {
const isViewer = props.isViewer; const isViewer = props.isViewer;
const isMobileView = props.isMobileView; 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 ( return (
<Fragment> <Fragment>
<NavLeft> <NavLeft>
@ -23,7 +36,7 @@ const ToolbarView = props => {
onRedoClick: props.onRedo onRedoClick: props.onRedo
})} })}
</NavLeft> </NavLeft>
{(!Device.phone || isViewer) && <NavTitle>{props.docTitle}</NavTitle>} {(!Device.phone || isViewer) && <NavTitle>{shortTitle(props.docTitle)}</NavTitle>}
<NavRight> <NavRight>
{(Device.android && props.isEdit && !isViewer) && EditorUIController.getUndoRedo && EditorUIController.getUndoRedo({ {(Device.android && props.isEdit && !isViewer) && EditorUIController.getUndoRedo && EditorUIController.getUndoRedo({
disabledUndo: !props.isCanUndo, disabledUndo: !props.isCanUndo,

View file

@ -112,7 +112,6 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props =>
let _isEdit = false, let _isEdit = false,
_canDownload = false, _canDownload = false,
_canDownloadOrigin = false, _canDownloadOrigin = false,
// _canReader = false,
_canAbout = true, _canAbout = true,
_canHelp = true, _canHelp = true,
_canPrint = false; _canPrint = false;
@ -122,7 +121,6 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props =>
_canPrint = _canDownload = _canDownloadOrigin = false; _canPrint = _canDownload = _canDownloadOrigin = false;
} else { } else {
_isEdit = appOptions.isEdit; _isEdit = appOptions.isEdit;
// _canReader = !appOptions.isEdit && !appOptions.isRestrictedEdit && appOptions.canReader;
_canDownload = appOptions.canDownload; _canDownload = appOptions.canDownload;
_canDownloadOrigin = appOptions.canDownloadOrigin; _canDownloadOrigin = appOptions.canDownloadOrigin;
_canPrint = appOptions.canPrint; _canPrint = appOptions.canPrint;
@ -139,7 +137,6 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props =>
<Page> <Page>
{navbar} {navbar}
<List> <List>
{/*disabled={appOptions.readerMode ? true : false}*/}
{!props.inPopover && {!props.inPopover &&
<ListItem title={!_isEdit || isViewer ? _t.textFind : _t.textFindAndReplace} link='#' searchbarEnable='.searchbar' onClick={closeModal} className='no-indicator'> <ListItem title={!_isEdit || isViewer ? _t.textFind : _t.textFindAndReplace} link='#' searchbarEnable='.searchbar' onClick={closeModal} className='no-indicator'>
<Icon slot="media" icon="icon-search"></Icon> <Icon slot="media" icon="icon-search"></Icon>
@ -158,12 +155,6 @@ const SettingsList = inject("storeAppOptions", "storeReview")(observer(props =>
<Icon slot="media" icon="icon-collaboration"></Icon> <Icon slot="media" icon="icon-collaboration"></Icon>
</ListItem> </ListItem>
: null} : null}
{/*{_canReader &&*/}
{/* <ListItem title={_t.textReaderMode}> /!*ToDo*!/*/}
{/* <Icon slot="media" icon="icon-reader"></Icon>*/}
{/* <Toggle checked={appOptions.readerMode} onToggleChange={() => {props.onReaderMode()}}/>*/}
{/* </ListItem>*/}
{/*}*/}
{Device.sailfish && _isEdit && {Device.sailfish && _isEdit &&
<ListItem title={_t.textSpellcheck} onClick={() => {props.onOrthographyCheck()}} className='no-indicator' link="#"> <ListItem title={_t.textSpellcheck} onClick={() => {props.onOrthographyCheck()}} className='no-indicator' link="#">
<Icon slot="media" icon="icon-spellcheck"></Icon> <Icon slot="media" icon="icon-spellcheck"></Icon>