[DE mobile] Add restriction for view comments, context menu and short document title
This commit is contained in:
parent
6ca40588d8
commit
0d24b79e2e
|
@ -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,14 +839,14 @@ 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);}}
|
||||||
>
|
>
|
||||||
<Icon icon='icon-menu-comment'/>
|
<Icon icon='icon-menu-comment'/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div slot='footer'>
|
<div slot='footer'>
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
@ -296,36 +298,36 @@ class ContextMenu extends ContextMenuController {
|
||||||
let itemsIcon = [],
|
let itemsIcon = [],
|
||||||
itemsText = [];
|
itemsText = [];
|
||||||
|
|
||||||
if ( canCopy ) {
|
if (canCopy) {
|
||||||
itemsIcon.push({
|
itemsIcon.push({
|
||||||
event: 'copy',
|
event: 'copy',
|
||||||
icon: 'icon-copy'
|
icon: 'icon-copy'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
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'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( canViewComments && this.isComments ) {
|
if (canViewComments && this.isComments) {
|
||||||
itemsText.push({
|
itemsText.push({
|
||||||
caption: _t.menuViewComment,
|
caption: _t.menuViewComment,
|
||||||
event: 'viewcomment'
|
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({
|
itemsText.push({
|
||||||
caption: _t.menuAddComment,
|
caption: _t.menuAddComment,
|
||||||
event: 'addcomment'
|
event: 'addcomment'
|
||||||
|
@ -333,14 +335,14 @@ class ContextMenu extends ContextMenuController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isLink ) {
|
if (isLink) {
|
||||||
itemsText.push({
|
itemsText.push({
|
||||||
caption: _t.menuOpenLink,
|
caption: _t.menuOpenLink,
|
||||||
event: 'openlink'
|
event: 'openlink'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(inToc && isEdit) {
|
if(inToc && isEdit && !isViewer) {
|
||||||
itemsText.push({
|
itemsText.push({
|
||||||
caption: t('ContextMenu.textRefreshEntireTable'),
|
caption: t('ContextMenu.textRefreshEntireTable'),
|
||||||
event: 'refreshEntireTable'
|
event: 'refreshEntireTable'
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue