Merge pull request 'feature/pdf-lock' (#288) from feature/pdf-lock into feature/hotfix-8-3-1

This commit is contained in:
Julia Radzhabova
2025-02-06 09:48:20 +00:00
7 changed files with 115 additions and 39 deletions

View File

@ -112,6 +112,7 @@ define([
],
lock = (this.appPrefix === 'de-') ? [_set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockViewIns, _set.docLockForms, _set.docLockCommentsIns, _set.viewMode] :
(this.appPrefix === 'pe-') ? [_set.slideDeleted, _set.lostConnect, _set.noSlides] :
(this.appPrefix === 'pdfe-') ? [_set.pageDeleted, _set.lostConnect] :
[_set.editCell, _set.lostConnect, _set.coAuth, _set['Objects']],
me = this;
penOptions.forEach(function (props) {

View File

@ -246,9 +246,15 @@ define([], function () {
var menu_props = {};
selectedElements && _.each(selectedElements, function(element, index) {
if (Asc.c_oAscTypeSelectElement.Annot == element.get_ObjectType()) {
var elType = element.get_ObjectType(),
elValue = element.get_ObjectValue();
if (Asc.c_oAscTypeSelectElement.Annot == elType) {
menu_props.annotProps = {};
menu_props.annotProps.value = element.get_ObjectValue();
menu_props.annotProps.value = elValue;
} else if (Asc.c_oAscTypeSelectElement.PdfPage == elType) {
menu_props.pageProps = {};
menu_props.pageProps.value = elValue;
menu_props.pageProps.locked = (elValue) ? elValue.asc_getDeleteLock() : false;
}
});
@ -314,6 +320,10 @@ define([], function () {
menu_to_show = documentHolder.editPDFModeMenu;
menu_props.annotProps = {};
menu_props.annotProps.value = elValue;
} else if (Asc.c_oAscTypeSelectElement.PdfPage == elType) {
menu_props.pageProps = {};
menu_props.pageProps.value = elValue;
menu_props.pageProps.locked = (elValue) ? elValue.asc_getDeleteLock() : false;
}
});
if (menu_to_show === null) {

View File

@ -927,7 +927,8 @@ define([
var pr, i = -1, type,
paragraph_locked = false,
no_paragraph = true,
in_chart = false;
in_chart = false,
page_deleted = false;
while (++i < selectedObjects.length) {
type = selectedObjects[i].get_ObjectType();
@ -944,6 +945,8 @@ define([
if (type == Asc.c_oAscTypeSelectElement.Chart) {
in_chart = true;
}
} else if (type == Asc.c_oAscTypeSelectElement.PdfPage) {
page_deleted = pr.asc_getDeleteLock();
}
}
@ -961,6 +964,11 @@ define([
if (this._state.activated) this._state.no_paragraph = no_paragraph;
Common.Utils.lockControls(Common.enumLock.noParagraphSelected, no_paragraph, {array: this.view.lockedControls});
}
if (page_deleted !== undefined && this._state.pagecontrolsdisable !== page_deleted) {
if (this._state.activated) this._state.pagecontrolsdisable = page_deleted;
Common.Utils.lockControls(Common.enumLock.pageDeleted, page_deleted, {array: this.view.lockedControls});
}
},
onApiCanAddHyperlink: function(value) {

View File

@ -389,6 +389,7 @@ define([
this.toolbar.setApi(this.api);
this.api.asc_registerCallback('asc_onFocusObject', _.bind(this.onApiFocusObjectAnnotate, this));
this.api.asc_registerCallback('asc_onCanUndo', _.bind(this.onApiCanRevert, this, 'undo'));
this.api.asc_registerCallback('asc_onCanRedo', _.bind(this.onApiCanRevert, this, 'redo'));
this.api.asc_registerCallback('asc_onZoomChange', _.bind(this.onApiZoomChange, this));
@ -532,6 +533,22 @@ define([
}
},
onApiFocusObjectAnnotate: function(selectedObjects) {
if (!this.editMode || !this.mode.isPDFAnnotate) return;
var i = -1,
page_deleted = false;
while (++i < selectedObjects.length) {
if (selectedObjects[i].get_ObjectType() == Asc.c_oAscTypeSelectElement.PdfPage) {
page_deleted = selectedObjects[i].get_ObjectValue().asc_getDeleteLock();
}
}
if (page_deleted !== undefined && this._state.pagecontrolsdisable !== page_deleted) {
if (this._state.activated) this._state.pagecontrolsdisable = page_deleted;
this.toolbar.lockToolbar(Common.enumLock.pageDeleted, page_deleted);
}
},
onApiFocusObject: function(selectedObjects) {
if (!this.editMode || !this.mode.isPDFEdit) return;
@ -547,7 +564,10 @@ define([
in_smartart = false,
in_smartart_internal = false,
in_annot = false,
annot_lock = false;
annot_lock = false,
page_deleted = false,
page_rotate = false,
page_edit_text = false;
while (++i < selectedObjects.length) {
type = selectedObjects[i].get_ObjectType();
@ -591,68 +611,72 @@ define([
in_annot = true;
if (pr.asc_getCanEditText())
no_text = false;
} else if (type == Asc.c_oAscTypeSelectElement.PdfPage) {
page_deleted = pr.asc_getDeleteLock();
page_rotate = pr.asc_getRotateLock();
page_edit_text = pr.asc_getEditLock();
}
}
if (this._state.prcontrolsdisable !== paragraph_locked) {
if (this._state.activated) this._state.prcontrolsdisable = paragraph_locked;
if (paragraph_locked!==undefined)
this.toolbar.lockToolbar(Common.enumLock.paragraphLock, paragraph_locked, {array: toolbar.paragraphControls});
toolbar.lockToolbar(Common.enumLock.paragraphLock, paragraph_locked, {array: toolbar.paragraphControls});
}
if (this._state.no_paragraph !== no_paragraph) {
if (this._state.activated) this._state.no_paragraph = no_paragraph;
this.toolbar.lockToolbar(Common.enumLock.noParagraphSelected, no_paragraph, {array: toolbar.paragraphControls});
// this.toolbar.lockToolbar(Common.enumLock.noParagraphSelected, no_paragraph, {array: [toolbar.btnCopyStyle]});
toolbar.lockToolbar(Common.enumLock.noParagraphSelected, no_paragraph, {array: toolbar.paragraphControls});
// toolbar.lockToolbar(Common.enumLock.noParagraphSelected, no_paragraph, {array: [toolbar.btnCopyStyle]});
}
if (this._state.no_text !== no_text) {
if (this._state.activated) this._state.no_text = no_text;
this.toolbar.lockToolbar(Common.enumLock.noTextSelected, no_text, {array: toolbar.paragraphControls});
toolbar.lockToolbar(Common.enumLock.noTextSelected, no_text, {array: toolbar.paragraphControls});
}
if (this._state.in_annot !== in_annot) {
if (this._state.activated) this._state.in_annot = in_annot;
this.toolbar.lockToolbar(Common.enumLock.inAnnotation, in_annot, {array: toolbar.paragraphControls});
toolbar.lockToolbar(Common.enumLock.inAnnotation, in_annot, {array: toolbar.paragraphControls});
}
if (this._state.no_object !== no_object ) {
if (this._state.activated) this._state.no_object = no_object;
this.toolbar.lockToolbar(Common.enumLock.noObjectSelected, no_object, {array: [toolbar.btnVerticalAlign ]});
toolbar.lockToolbar(Common.enumLock.noObjectSelected, no_object, {array: [toolbar.btnVerticalAlign ]});
}
var no_drawing_objects = this.api.asc_getSelectedDrawingObjectsCount()<1;
if (this._state.no_drawing_objects !== no_drawing_objects ) {
if (this._state.activated) this._state.no_drawing_objects = no_drawing_objects;
this.toolbar.lockToolbar(Common.enumLock.noDrawingObjects, no_drawing_objects, {array: [toolbar.btnShapeAlign, toolbar.btnShapeArrange, toolbar.btnShapesMerge]});
toolbar.lockToolbar(Common.enumLock.noDrawingObjects, no_drawing_objects, {array: [toolbar.btnShapeAlign, toolbar.btnShapeArrange, toolbar.btnShapesMerge]});
}
if (shape_locked!==undefined && this._state.shapecontrolsdisable !== shape_locked) {
if (this._state.activated) this._state.shapecontrolsdisable = shape_locked;
this.toolbar.lockToolbar(Common.enumLock.shapeLock, shape_locked, {array: toolbar.shapeControls.concat(toolbar.paragraphControls)});
toolbar.lockToolbar(Common.enumLock.shapeLock, shape_locked, {array: toolbar.shapeControls.concat(toolbar.paragraphControls)});
}
if (shape_locked===undefined && !this._state.no_drawing_objects) { // several tables selected
this.toolbar.lockToolbar(Common.enumLock.shapeLock, false, {array: toolbar.shapeControls});
toolbar.lockToolbar(Common.enumLock.shapeLock, false, {array: toolbar.shapeControls});
}
if (this._state.in_equation !== in_equation) {
if (this._state.activated) this._state.in_equation = in_equation;
this.toolbar.lockToolbar(Common.enumLock.inEquation, in_equation, {array: [toolbar.btnSuperscript, toolbar.btnSubscript]});
toolbar.lockToolbar(Common.enumLock.inEquation, in_equation, {array: [toolbar.btnSuperscript, toolbar.btnSubscript]});
}
if (this._state.no_columns !== no_columns) {
if (this._state.activated) this._state.no_columns = no_columns;
this.toolbar.lockToolbar(Common.enumLock.noColumns, no_columns, {array: [toolbar.btnColumns]});
toolbar.lockToolbar(Common.enumLock.noColumns, no_columns, {array: [toolbar.btnColumns]});
}
if (this._state.in_smartart !== in_smartart) {
this.toolbar.lockToolbar(Common.enumLock.inSmartart, in_smartart, {array: toolbar.paragraphControls});
toolbar.lockToolbar(Common.enumLock.inSmartart, in_smartart, {array: toolbar.paragraphControls});
this._state.in_smartart = in_smartart;
}
if (this._state.in_smartart_internal !== in_smartart_internal) {
this.toolbar.lockToolbar(Common.enumLock.inSmartartInternal, in_smartart_internal, {array: toolbar.paragraphControls});
toolbar.lockToolbar(Common.enumLock.inSmartartInternal, in_smartart_internal, {array: toolbar.paragraphControls});
this._state.in_smartart_internal = in_smartart_internal;
toolbar.mnuArrangeFront.setDisabled(in_smartart_internal);
@ -660,7 +684,14 @@ define([
toolbar.mnuArrangeForward.setDisabled(in_smartart_internal);
toolbar.mnuArrangeBackward.setDisabled(in_smartart_internal);
}
this.toolbar.lockToolbar(Common.enumLock.cantMergeShape, !this.api.asc_canMergeSelectedShapes(), { array: [this.toolbar.btnShapesMerge] });
toolbar.lockToolbar(Common.enumLock.cantMergeShape, !this.api.asc_canMergeSelectedShapes(), { array: [toolbar.btnShapesMerge] });
if (page_deleted !== undefined && this._state.pagecontrolsdisable !== page_deleted) {
if (this._state.activated) this._state.pagecontrolsdisable = page_deleted;
toolbar.lockToolbar(Common.enumLock.pageDeleted, page_deleted);
}
toolbar.lockToolbar(Common.enumLock.pageRotate, page_rotate, {array: [toolbar.btnRotatePage]});
toolbar.lockToolbar(Common.enumLock.pageEditText, page_edit_text, {array: [toolbar.btnEditText]});
},
onApiZoomChange: function(percent, type) {},

View File

@ -60,9 +60,12 @@ define([], function () {
this.viewPDFModeMenu = new Common.UI.Menu({
cls: 'shifted-right',
initMenu: function (value) {
var disabled = (value.pageProps!==undefined && value.pageProps.locked);
me.menuPDFViewCopy.setDisabled(!(me.api && me.api.can_CopyCut()));
me.menuAddComment.setVisible(me.mode && me.mode.canComments);
me.menuAddComment.setDisabled(disabled);
me.menuRemoveComment.setVisible(value && value.annotProps && value.annotProps.value);
me.menuRemoveComment.setDisabled(disabled);
},
items: [
me.menuPDFViewCopy,
@ -107,9 +110,12 @@ define([], function () {
this.editPDFModeMenu = new Common.UI.Menu({
cls: 'shifted-right',
initMenu: function (value) {
var disabled = (value.pageProps!==undefined && value.pageProps.locked);
me.menuPDFEditCopy.setDisabled(!(me.api && me.api.can_CopyCut()));
me.menuEditAddComment.setVisible(me.mode && me.mode.canComments);
me.menuEditAddComment.setDisabled(disabled);
me.menuEditRemoveComment.setVisible(value && value.annotProps && value.annotProps.value);
me.menuEditRemoveComment.setDisabled(disabled);
},
items: [
me.menuPDFEditCopy,
@ -1037,7 +1043,6 @@ define([], function () {
initMenu: function(value){
var isInShape = (value.shapeProps && !_.isNull(value.shapeProps.value));
var isInChart = (value.chartProps && !_.isNull(value.chartProps.value));
var disabled = (value.paraProps!==undefined && value.paraProps.locked) ||
(isInShape && value.shapeProps.locked);
var isEquation= (value.mathProps && value.mathProps.value);
@ -1201,6 +1206,19 @@ define([], function () {
restoreHeightAndTop: true,
scrollToCheckedItem: false,
initMenu: function(value) {
if (me.api) {
var i = -1,
page_deleted = false,
page_rotate = false,
selectedElements = me.api.getSelectedElements();
while (++i < selectedElements.length) {
if (selectedElements[i].get_ObjectType() === Asc.c_oAscTypeSelectElement.PdfPage) {
page_deleted = selectedElements[i].get_ObjectValue().asc_getDeleteLock();
page_rotate = selectedElements[i].get_ObjectValue().asc_getRotateLock();
}
}
}
me.mnuRotatePageRight.options.value = me.mnuRotatePageLeft.options.value = value.pageNum;
me.mnuRotatePageRight.setVisible(value.isPageSelect===true);
me.mnuRotatePageLeft.setVisible(value.isPageSelect===true);
@ -1208,7 +1226,9 @@ define([], function () {
menuPageNewSeparator.setVisible(value.isPageSelect===true);
menuPageDelSeparator.setVisible(value.isPageSelect===true);
me.mnuDeletePage.setDisabled(me._pagesCount<2);
me.mnuRotatePageRight.setDisabled(page_rotate || page_deleted);
me.mnuRotatePageLeft.setDisabled(page_rotate || page_deleted);
me.mnuDeletePage.setDisabled(me._pagesCount<2 || page_deleted);
},
items: [
me.mnuNewPageBefore,

View File

@ -132,7 +132,7 @@ define([
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-inserttable',
caption: me.capInsertTable,
lock: [_set.lostConnect, _set.disableOnStart],
lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart],
menu: new Common.UI.Menu({
cls: 'shifted-left',
items: [
@ -153,7 +153,7 @@ define([
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-insertchart',
caption: me.capInsertChart,
lock: [_set.lostConnect, _set.disableOnStart],
lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart],
menu: true,
dataHint: '1',
dataHintDirection: 'bottom',
@ -165,7 +165,7 @@ define([
id: 'tlbtn-insertsmartart',
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-smart-art',
lock: [_set.lostConnect, _set.disableOnStart],
lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart],
caption: me.capBtnInsSmartArt,
menu: true,
action: 'insert-smartart',
@ -180,7 +180,7 @@ define([
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-insertequation',
caption: me.capInsertEquation,
lock: [_set.paragraphLock, _set.lostConnect, _set.disableOnStart],
lock: [_set.pageDeleted, _set.paragraphLock, _set.lostConnect, _set.disableOnStart],
split: true,
menu: new Common.UI.Menu({cls: 'menu-shapes'}),
action: 'insert-equation',
@ -230,7 +230,7 @@ define([
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-textart',
caption: me.capInsertTextArt,
lock: [_set.lostConnect, _set.disableOnStart],
lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart],
menu: new Common.UI.Menu({
cls: 'menu-shapes',
items: [
@ -261,7 +261,7 @@ define([
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-datetime',
caption: me.capBtnDateTime,
lock: [_set.lostConnect, _set.paragraphLock, _set.disableOnStart],
lock: [_set.pageDeleted, _set.lostConnect, _set.paragraphLock, _set.disableOnStart],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintOffset: 'small'
@ -273,7 +273,7 @@ define([
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-pagenum',
caption: me.capBtnSlideNum,
lock: [_set.lostConnect, _set.paragraphLock, _set.disableOnStart],
lock: [_set.pageDeleted, _set.lostConnect, _set.paragraphLock, _set.disableOnStart],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintOffset: 'small'
@ -288,7 +288,7 @@ define([
menuWidth: 330,
style: 'width: 140px;',
enableKeyEvents: true,
lock: [_set.lostConnect, _set.disableOnStart],
lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintOffset: '-16, 0'
@ -324,11 +324,11 @@ define([
if (this.toolbar && this.toolbar.$el) {
this.btnsInsertImage = Common.Utils.injectButtons($host.find('.slot-insertimg').add(this.toolbar.$el.find('.slot-insertimg')), 'tlbtn-insertimage-', 'toolbar__icon btn-insertimage', this.capInsertImage,
[Common.enumLock.lostConnect, Common.enumLock.disableOnStart], false, true, undefined, '1', 'bottom', 'small', undefined, 'insert-image');
[Common.enumLock.pageDeleted, Common.enumLock.lostConnect, Common.enumLock.disableOnStart], false, true, undefined, '1', 'bottom', 'small', undefined, 'insert-image');
this.btnsInsertText = Common.Utils.injectButtons($host.find('.slot-instext').add(this.toolbar.$el.find('.slot-instext')), 'tlbtn-inserttext-', 'toolbar__icon btn-big-text', this.capInsertText,
[Common.enumLock.lostConnect, Common.enumLock.disableOnStart], true, true, true, '1', 'bottom', 'small', undefined, 'insert-text');
[Common.enumLock.pageDeleted, Common.enumLock.lostConnect, Common.enumLock.disableOnStart], true, true, true, '1', 'bottom', 'small', undefined, 'insert-text');
this.btnsInsertShape = Common.Utils.injectButtons($host.find('.slot-insertshape').add(this.toolbar.$el.find('.slot-insertshape')), 'tlbtn-insertshape-', 'toolbar__icon btn-insertshape', this.capInsertShape,
[Common.enumLock.lostConnect, Common.enumLock.disableOnStart], false, true, true, '1', 'bottom', 'small', undefined, 'insert-shape');
[Common.enumLock.pageDeleted, Common.enumLock.lostConnect, Common.enumLock.disableOnStart], false, true, true, '1', 'bottom', 'small', undefined, 'insert-shape');
this.btnsAddPage = Common.Utils.injectButtons($host.find('.slot-inspage').add(this.toolbar.$el.find('.slot-inspage')), 'tlbtn-insertpage-', 'toolbar__icon btn-blankpage', this.capInsPage,
[Common.enumLock.lostConnect, Common.enumLock.disableOnStart], true, true, false, '1', 'bottom', 'small', undefined, 'insert-page');
}

View File

@ -95,7 +95,10 @@ define([
inEquation: 'in-equation',
inAnnotation: 'in-annotation',
singlePage: 'single-page',
cantMergeShape: 'merge-shape-lock'
cantMergeShape: 'merge-shape-lock',
pageRotate: 'page-rotate',
pageDeleted: 'page-deleted',
pageEditText: 'page-edit-text'
};
for (var key in enumLock) {
if (enumLock.hasOwnProperty(key)) {
@ -144,7 +147,7 @@ define([
cls: 'btn-toolbar x-huge icon-top',
style: 'min-width: 45px;',
iconCls: 'toolbar__icon btn-big-magic-wand',
lock: [_set.lostConnect, _set.disableOnStart],
lock: [_set.pageDeleted, _set.pageEditText, _set.lostConnect, _set.disableOnStart],
caption: this.capBtnRecognize,
dataHint: '1',
dataHintDirection: 'bottom',
@ -699,7 +702,7 @@ define([
id: 'id-toolbar-btn-shape-arrange',
cls: 'btn-toolbar',
iconCls: 'toolbar__icon btn-arrange-front',
lock: [_set.lostConnect, _set.noDrawingObjects, _set.disableOnStart],
lock: [_set.shapeLock, _set.lostConnect, _set.noDrawingObjects, _set.disableOnStart],
menu: new Common.UI.Menu({
items: [
this.mnuArrangeFront = new Common.UI.MenuItem({
@ -790,7 +793,7 @@ define([
id: 'id-toolbar-btn-delpage',
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-rem-comment',
lock: [_set.lostConnect, _set.disableOnStart, _set.singlePage],
lock: [_set.pageDeleted, _set.lostConnect, _set.disableOnStart, _set.singlePage],
caption: this.capBtnDelPage,
dataHint: '1',
dataHintDirection: 'bottom',
@ -804,7 +807,7 @@ define([
caption: this.capBtnRotatePage,
split: true,
iconCls: 'toolbar__icon btn-update',
lock: [_set.lostConnect, _set.disableOnStart],
lock: [_set.pageDeleted, _set.pageRotate, _set.lostConnect, _set.disableOnStart],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintOffset: 'small',
@ -856,7 +859,7 @@ define([
id: 'tlbtn-addcomment',
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-big-add-comment',
lock: [_set.disableOnStart],
lock: [_set.pageDeleted, _set.disableOnStart],
caption: this.capBtnComment,
dataHint: '1',
dataHintDirection: 'bottom',
@ -868,7 +871,7 @@ define([
id: 'tlbtn-textcomment',
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-big-text-comment',
lock: [_set.disableOnStart],
lock: [_set.pageDeleted, _set.disableOnStart],
caption: this.capBtnTextComment,
menu: true,
split: true,
@ -895,7 +898,7 @@ define([
caption: this.capBtnStamp,
split: true,
iconCls: 'toolbar__icon btn-stamp',
lock: [_set.disableOnStart],
lock: [_set.pageDeleted, _set.disableOnStart],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintOffset: 'small',
@ -938,6 +941,7 @@ define([
type: AscPDF.ANNOTATIONS_TYPES.Strikeout
});
this.btnsStrikeout = [this.btnStrikeout];
this.toolbarControls.push(this.btnStrikeout);
this.btnUnderline = new Common.UI.ButtonColored({
id: 'id-toolbar-btn-underline',
@ -972,6 +976,7 @@ define([
type: AscPDF.ANNOTATIONS_TYPES.Underline
});
this.btnsUnderline = [this.btnUnderline];
this.toolbarControls.push(this.btnUnderline);
this.btnHighlight = new Common.UI.ButtonColored({
id: 'id-toolbar-btn-highlight',
@ -1008,6 +1013,7 @@ define([
dataHintOffset: '0, -16'
});
this.btnsHighlight = [this.btnHighlight];
this.toolbarControls.push(this.btnHighlight);
if (config.isPDFAnnotate && config.canPDFEdit || config.isPDFEdit) {
this.btnEditMode = new Common.UI.Button({