Compare commits
357 commits
master
...
feature/Bu
Author | SHA1 | Date | |
---|---|---|---|
d2bb8869ba | |||
edaa81b086 | |||
1c66765645 | |||
1fad3f9da3 | |||
2311fd7975 | |||
4a4d4d0832 | |||
52b16899d5 | |||
a0bb8ee115 | |||
8de0da306a | |||
36c3aeb576 | |||
97d106c3fa | |||
36e40891dd | |||
3ab4211953 | |||
9a6034b611 | |||
ea0d07ad89 | |||
e9b04b91fb | |||
e6a459ac53 | |||
d7f64f49dd | |||
e525e97ede | |||
2870705ddf | |||
db8816c05f | |||
a49071c6e3 | |||
411de187d5 | |||
3b2162dc61 | |||
b9b7a9d7e3 | |||
8b438a0c15 | |||
a067234b87 | |||
c6ac57592f | |||
dd01e61d7d | |||
0ff0ed3a15 | |||
9ee9022c9e | |||
db9040247a | |||
6f1d3f03a9 | |||
a01b33e66a | |||
3bfca10bcd | |||
4d87c6d817 | |||
6314ed452c | |||
b9c5b2b014 | |||
b65436ed34 | |||
9238abfab6 | |||
fcba6435a9 | |||
72b8f3434f | |||
b21a33601e | |||
65c57c8907 | |||
4ac240a7b1 | |||
9416f27fbc | |||
5b29700cc5 | |||
e0a41415db | |||
adaf850a07 | |||
b18d2731c5 | |||
c739605f27 | |||
cdd90486ed | |||
ef395c554a | |||
5c0b841223 | |||
5edf90c839 | |||
06e4830a4b | |||
69a3409a42 | |||
fbff110ab6 | |||
3d7df44625 | |||
d5a269975c | |||
47afd293fc | |||
c03c7638d9 | |||
9feabc6ac3 | |||
8d28f72669 | |||
b33739c8b2 | |||
72886c7837 | |||
548ea8f2e6 | |||
cec32c8470 | |||
bd6b1c9ab3 | |||
b024ca02a1 | |||
bf6e8931cd | |||
011e141c76 | |||
c984d62e9a | |||
aacbfa787e | |||
d243e2b6d6 | |||
0d2359bdb6 | |||
e276fad40c | |||
b50d78c212 | |||
51eec23f3f | |||
127efb3216 | |||
617ba207bf | |||
8ca9e3831f | |||
1b718a516e | |||
b17377a916 | |||
412f616526 | |||
520762cc68 | |||
3b325b4cf5 | |||
8ca56d8aa2 | |||
52a22a3daf | |||
b393904138 | |||
32e477f3e6 | |||
f013939b4d | |||
0f2568e5b1 | |||
cd64a361ba | |||
c2a7198713 | |||
022c65cf3d | |||
6041671b5f | |||
c88be9df33 | |||
c8ae3cc9c0 | |||
ef1471e9b6 | |||
92e1a57ca3 | |||
58c3ca396c | |||
43f7d68d6f | |||
90a2fb56de | |||
f04c3937ce | |||
7672e7069d | |||
528f48d098 | |||
23bf9a3395 | |||
e2a2052cdc | |||
ed621f0921 | |||
4b32e904e3 | |||
14ae928ce4 | |||
52283a3d2e | |||
be5f7b31bf | |||
eb6bc50a01 | |||
a1bddbb845 | |||
b73380ba27 | |||
198df57eaf | |||
b19aca6235 | |||
857578864d | |||
c7ffd9b8b5 | |||
1b21757754 | |||
68fa3649fb | |||
70540b1eb5 | |||
66259ebf51 | |||
0f1a07cb94 | |||
e07e1305a4 | |||
064fc09574 | |||
621fe72930 | |||
b9d8d1ee8a | |||
d1d92cc97c | |||
96cc66875e | |||
291c29706e | |||
560ecfc366 | |||
8fa0319f5e | |||
caeae837e0 | |||
15f495ee58 | |||
d92096f2a6 | |||
5eeadb99a4 | |||
f598a93033 | |||
83c888729e | |||
cfb73f7cb4 | |||
a2e62b7545 | |||
b4950b3681 | |||
12b205629f | |||
0c2a96d618 | |||
1663f8a367 | |||
ee1c093ac9 | |||
493a6b53b5 | |||
7ed283a202 | |||
dfeea528ac | |||
20f348ac9d | |||
e59a832756 | |||
c67d30f897 | |||
27ff2a57e7 | |||
fd961d81a2 | |||
2388608e54 | |||
041557e6a3 | |||
13cedf86f1 | |||
6f1ee48c6d | |||
e99f6b494e | |||
9adcc64e9b | |||
00d7a665e6 | |||
0d54c6d31e | |||
8908af2153 | |||
8f1f89ee31 | |||
7f703b6294 | |||
f8b95b54ab | |||
f0c85f7135 | |||
8b052cef5a | |||
0c2502056d | |||
cd8211ffde | |||
fba576115c | |||
9f37a4c70d | |||
d920705316 | |||
d5f1e8899c | |||
9aeffb19c5 | |||
91dc833ec8 | |||
c6cd767264 | |||
71434d517d | |||
b898aee927 | |||
8b1bf6f3b6 | |||
f48fb32eac | |||
7fbce6170b | |||
4dcd91e106 | |||
9e8d0e1159 | |||
5e1f09c9e2 | |||
5b6de14a9a | |||
5654841e93 | |||
adefdded97 | |||
ebb58299b7 | |||
238cc71760 | |||
5660dd8cfd | |||
0b877a165a | |||
ca9b1bcf22 | |||
5b0ccb21e4 | |||
aa28b7eeca | |||
1feaa1b7ae | |||
0b2476ecab | |||
8c39eb234b | |||
789305ac87 | |||
32c754c9fe | |||
a98c4e82bc | |||
9d61b0a2d8 | |||
0841aa0e5f | |||
af8715bb46 | |||
96cb176b85 | |||
6fe53f9357 | |||
11f115cac4 | |||
7b951da71d | |||
ff10121f7b | |||
c130f79e7f | |||
6e5de0c8c1 | |||
4e4f6f94bc | |||
4db83376dd | |||
ea2bffa8c2 | |||
36873dc3bc | |||
397b700573 | |||
066aca3d07 | |||
5d14293056 | |||
7c5761c07a | |||
8e0c9709e1 | |||
0ae9d95980 | |||
12450625cc | |||
60ba55c840 | |||
67a0104d73 | |||
350db57523 | |||
832641ec5f | |||
a7f0d259c4 | |||
aa7e70eac2 | |||
3e89118f42 | |||
bf4b5faddb | |||
897f9e606f | |||
b70b9eb243 | |||
f2cc301d7e | |||
39ca6a7e87 | |||
8d6efb6c39 | |||
8bdc8762da | |||
ae4813a5d8 | |||
1788a579c3 | |||
fdc0e5038d | |||
b8419707bf | |||
2221747813 | |||
d824f9dd61 | |||
d73cf9051e | |||
7af5548157 | |||
221f138ae1 | |||
330549d850 | |||
9debf2511e | |||
a964a622b4 | |||
37a6d9568b | |||
9b36d4274f | |||
a7c0bcade1 | |||
ea57a8a361 | |||
dd6b532a56 | |||
fd6bc63637 | |||
20a25d1c98 | |||
75cf200670 | |||
5a9016928c | |||
3dcf0f6f4f | |||
4ab46feb43 | |||
c8350c575a | |||
1afb2c7abb | |||
3bd82d5253 | |||
93af069409 | |||
1cf8b0c9c7 | |||
35655c5546 | |||
3e508e7de3 | |||
62fc23f32f | |||
e6ee9e9ba7 | |||
bd011121c6 | |||
6edc78adc3 | |||
98b44ced4e | |||
47048623e2 | |||
75f01aca9a | |||
d1dfb29cc9 | |||
8227926d6d | |||
82ba32c2ec | |||
34979a046a | |||
d440ec5872 | |||
00ef0d4e9e | |||
5bc35f0941 | |||
bb5d6cf388 | |||
c75c9941c0 | |||
9c143ec001 | |||
3ee304d12c | |||
b4dd4a4f91 | |||
bb7613bd44 | |||
381791b62b | |||
dcd7fb90f7 | |||
8e896a40d3 | |||
4236ed0ee7 | |||
b62144a886 | |||
6e298a9582 | |||
e0df9797a0 | |||
22c9fddfa8 | |||
a1be884b34 | |||
faf7c75f6e | |||
9475364cfb | |||
0800af0484 | |||
c5669995c6 | |||
22f765387f | |||
39914c9d22 | |||
70cc425501 | |||
8be25036a9 | |||
5b0769f326 | |||
4e2af2ab44 | |||
fbc99d7b5e | |||
7975609bd4 | |||
be9c744100 | |||
cb51144092 | |||
8dfa0e4d3a | |||
30d7928104 | |||
ce7bacd50f | |||
b9698ae77b | |||
da327e5168 | |||
c8c05cf38d | |||
89636b7099 | |||
8ddb38a5b8 | |||
49dc558158 | |||
650f208543 | |||
1800336973 | |||
0d5daecadd | |||
f8d4a3c93b | |||
b59b8b6d66 | |||
e848d63afd | |||
6394f4e110 | |||
09512d4c4f | |||
b6ffd88e79 | |||
4e5c30c46d | |||
a10d566162 | |||
5c4242f454 | |||
de58289ceb | |||
c61a957ec7 | |||
398691700b | |||
454878d3d7 | |||
f15891cd04 | |||
9ffbcf8e9a | |||
f60c3552c6 | |||
0f5a22ebe7 | |||
4d8fde7ea1 | |||
838eac4b8c | |||
e086acd52f | |||
f2eddc5126 | |||
0dd313c7d0 | |||
49ded5c542 | |||
d460ee980c | |||
284e697090 | |||
830b4944ce | |||
c0c6a03279 | |||
77abebdf60 | |||
6c15d65919 | |||
6e197c53c8 | |||
eef4f52565 | |||
d3719967dd | |||
0c040cec70 | |||
8df803bac1 |
|
@ -23,6 +23,7 @@
|
|||
options: <advanced options>,
|
||||
key: 'key',
|
||||
vkey: 'vkey',
|
||||
referenceData: 'data for external paste',
|
||||
info: {
|
||||
owner: 'owner name',
|
||||
folder: 'path to document',
|
||||
|
@ -264,6 +265,7 @@
|
|||
'onRequestCompareFile': <request file to compare>,// must call setRevisedFile method
|
||||
'onRequestSharingSettings': <request sharing settings>,// must call setSharingSettings method
|
||||
'onRequestCreateNew': <try to create document>,
|
||||
'onRequestReferenceData': <try to refresh external data>,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -327,6 +329,7 @@
|
|||
_config.editorConfig.canRequestCompareFile = _config.events && !!_config.events.onRequestCompareFile;
|
||||
_config.editorConfig.canRequestSharingSettings = _config.events && !!_config.events.onRequestSharingSettings;
|
||||
_config.editorConfig.canRequestCreateNew = _config.events && !!_config.events.onRequestCreateNew;
|
||||
_config.editorConfig.canRequestReferenceData = _config.events && !!_config.events.onRequestReferenceData;
|
||||
_config.frameEditorId = placeholderId;
|
||||
_config.parentOrigin = window.location.origin;
|
||||
|
||||
|
@ -736,6 +739,13 @@
|
|||
});
|
||||
};
|
||||
|
||||
var _setReferenceData = function(data) {
|
||||
_sendCommand({
|
||||
command: 'setReferenceData',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
var _serviceCommand = function(command, data) {
|
||||
_sendCommand({
|
||||
command: 'internalCommand',
|
||||
|
@ -770,7 +780,8 @@
|
|||
setFavorite : _setFavorite,
|
||||
requestClose : _requestClose,
|
||||
grabFocus : _grabFocus,
|
||||
blurFocus : _blurFocus
|
||||
blurFocus : _blurFocus,
|
||||
setReferenceData : _setReferenceData
|
||||
}
|
||||
};
|
||||
|
||||
|
|
174
apps/api/wopi/convert-and-edit-wopi.ejs
Normal file
|
@ -0,0 +1,174 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head runat="server">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<!--
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2021
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
-->
|
||||
<title>ONLYOFFICE</title>
|
||||
<style type="text/css">
|
||||
html {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
color: #333;
|
||||
font-family: Arial, Tahoma,sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
overflow-y: hidden;
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.form {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
div {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.app-error-panel {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
background-color: #f4f4f4;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.message-block {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.message-inner {
|
||||
width: 550px;
|
||||
margin: auto;
|
||||
padding: 30px;
|
||||
background-color: #e3e3e3;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 24px;
|
||||
margin: 0 0 14px;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="progress">
|
||||
Converting your file so you can edit it...
|
||||
<a id="btn_end" style="display: none;">
|
||||
<button type="button">Click here to open the converted file</button>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div id="error" style="display: none;">
|
||||
Conversion failed<br/>Sorry, we weren't able to convert the file for editing.<br/>Try again Go back
|
||||
</div>
|
||||
<script type="text/javascript" language="javascript">
|
||||
|
||||
function redirect(url) {
|
||||
try {
|
||||
window.top.location.replace(url);
|
||||
}
|
||||
catch (err) {
|
||||
console.err(err);
|
||||
}
|
||||
}
|
||||
|
||||
function makeXHRRequest(url, success, error) {
|
||||
var xhr = new XMLHttpRequest;
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState == 4)
|
||||
if (xhr.status == 200) {
|
||||
success(xhr.responseText)
|
||||
} else {
|
||||
error()
|
||||
}
|
||||
|
||||
}
|
||||
;
|
||||
xhr.open("GET", url, !0);
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function checkStatus(url, success, error) {
|
||||
makeXHRRequest(url, function(responseText) {
|
||||
let data = JSON.parse(responseText);
|
||||
if(undefined !== data.error) {
|
||||
error();
|
||||
} else if(data.endConvert) {
|
||||
success(data.fileUrl);
|
||||
} else {
|
||||
setTimeout(function(){
|
||||
checkStatus(url, success, error);
|
||||
}, 1000);
|
||||
}
|
||||
}, error);
|
||||
}
|
||||
|
||||
function success(url) {
|
||||
// redirect(url);
|
||||
let btn = document.getElementById('btn_end');
|
||||
btn.style.display = 'block';
|
||||
btn.onclick = function() {
|
||||
redirect(url);
|
||||
};
|
||||
}
|
||||
|
||||
function error() {
|
||||
document.getElementById('progress').style.display = 'none';
|
||||
document.getElementById('error').style.display = 'block';
|
||||
}
|
||||
|
||||
var convertFile = function () {
|
||||
|
||||
let statusHandler = <%- JSON.stringify(statusHandler) %>;
|
||||
|
||||
if(!statusHandler) {
|
||||
error();
|
||||
}
|
||||
|
||||
checkStatus(statusHandler, success, error);
|
||||
};
|
||||
|
||||
if (window.addEventListener) {
|
||||
window.addEventListener("load", convertFile);
|
||||
} else if (window.attachEvent) {
|
||||
window.attachEvent("onload", convertFile);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -312,7 +312,7 @@ div {
|
|||
"events": {
|
||||
"onAppReady": onAppReady,
|
||||
"onDocumentStateChange": fileInfo.EditNotificationPostMessage ? onDocumentStateChange : undefined,
|
||||
'onRequestEditRights': fileInfo.EditModePostMessage || fileInfo.HostEditUrl ? onRequestEditRights : undefined,
|
||||
'onRequestEditRights': fileInfo.EditModePostMessage || (fileInfo.HostEditUrl && !fileInfo.UserCanNotWriteRelative) ? onRequestEditRights : undefined,
|
||||
"onError": onError,
|
||||
"onRequestClose": fileInfo.ClosePostMessage || fileInfo.CloseUrl ? onRequestClose : undefined,
|
||||
"onRequestRename": fileInfo.SupportsRename && fileInfo.UserCanRename ? onRequestRename : undefined,
|
||||
|
|
|
@ -138,6 +138,10 @@ if (window.Common === undefined) {
|
|||
|
||||
'grabFocus': function(data) {
|
||||
$me.trigger('grabfocus', data);
|
||||
},
|
||||
|
||||
'setReferenceData': function(data) {
|
||||
$me.trigger('setreferencedata', data);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -347,6 +351,10 @@ if (window.Common === undefined) {
|
|||
_postMessage({event:'onRequestCreateNew'});
|
||||
},
|
||||
|
||||
requestReferenceData: function (data) {
|
||||
_postMessage({event:'onRequestReferenceData', data: data});
|
||||
},
|
||||
|
||||
pluginsReady: function() {
|
||||
_postMessage({ event: 'onPluginsReady' });
|
||||
},
|
||||
|
|
|
@ -589,6 +589,7 @@
|
|||
height: 100%;
|
||||
|
||||
&.disabled {
|
||||
opacity: @component-disabled-opacity-ie;
|
||||
opacity: @component-disabled-opacity;
|
||||
cursor: default !important;
|
||||
}
|
||||
|
|
|
@ -351,22 +351,37 @@ define([
|
|||
getCaptionWithBreaks: function (caption) {
|
||||
var words = caption.split(' '),
|
||||
newCaption = null,
|
||||
maxWidth = 85 - 4;
|
||||
maxWidth = 160 - 4, //85 - 4
|
||||
containAnd = words.indexOf('&');
|
||||
if (containAnd > -1) { // add & to previous word
|
||||
words[containAnd - 1] += ' &';
|
||||
words.splice(containAnd, 1);
|
||||
}
|
||||
if (words.length > 1) {
|
||||
maxWidth = !!this.menu || this.split === true ? maxWidth - 10 : maxWidth;
|
||||
if (words.length < 3) {
|
||||
words[0] = getShortText(words[0], !!this.menu ? maxWidth + 10 : maxWidth);
|
||||
words[1] = getShortText(words[1], maxWidth);
|
||||
newCaption = words[0] + '<br>' + words[1];
|
||||
} else {
|
||||
var otherWords = '';
|
||||
if (getWidthOfCaption(words[0] + ' ' + words[1]) < maxWidth) { // first and second words in first line
|
||||
words[2] = getShortText(words[2], maxWidth);
|
||||
newCaption = words[0] + ' ' + words[1] + '<br>' + words[2];
|
||||
} else if (getWidthOfCaption(words[1] + ' ' + words[2]) < maxWidth) { // second and third words in second line
|
||||
words[2] = getShortText(words[2], maxWidth);
|
||||
newCaption = words[0] + '<br>' + words[1] + ' ' + words[2];
|
||||
} else {
|
||||
words[1] = getShortText(words[1] + ' ' + words[2], maxWidth);
|
||||
newCaption = words[0] + '<br>' + words[1];
|
||||
for (var i = 2; i < words.length; i++) {
|
||||
otherWords += words[i] + ' ';
|
||||
}
|
||||
if (getWidthOfCaption(otherWords + (!!this.menu ? 10 : 0))*2 < getWidthOfCaption(words[0] + ' ' + words[1])) {
|
||||
otherWords = getShortText((words[1] + ' ' + otherWords).trim(), maxWidth);
|
||||
newCaption = words[0] + '<br>' + otherWords;
|
||||
} else {
|
||||
otherWords = getShortText(otherWords.trim(), maxWidth);
|
||||
newCaption = words[0] + ' ' + words[1] + '<br>' + otherWords;
|
||||
}
|
||||
} else { // only first word is in first line
|
||||
for (var j = 1; j < words.length; j++) {
|
||||
otherWords += words[j] + ' ';
|
||||
}
|
||||
otherWords = getShortText(otherWords.trim(), maxWidth);
|
||||
newCaption = words[0] + '<br>' + otherWords;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -754,7 +769,7 @@ define([
|
|||
return (this.cmpEl) ? this.cmpEl.is(":visible") : $(this.el).is(":visible");
|
||||
},
|
||||
|
||||
updateHint: function(hint) {
|
||||
updateHint: function(hint, isHtml) {
|
||||
this.options.hint = hint;
|
||||
|
||||
if (!this.rendered) return;
|
||||
|
@ -780,10 +795,12 @@ define([
|
|||
this.btnMenuEl.removeData('bs.tooltip');
|
||||
|
||||
this.btnEl.tooltip({
|
||||
html: !!isHtml,
|
||||
title : (typeof hint == 'string') ? hint : hint[0],
|
||||
placement : this.options.hintAnchor||'cursor'
|
||||
});
|
||||
this.btnMenuEl && this.btnMenuEl.tooltip({
|
||||
html: !!isHtml,
|
||||
title : hint[1],
|
||||
placement : this.options.hintAnchor||'cursor'
|
||||
});
|
||||
|
|
|
@ -407,8 +407,9 @@ define([
|
|||
},
|
||||
|
||||
selectCandidate: function() {
|
||||
var index = this._search.index || 0,
|
||||
var index = (this._search.index && this._search.index != -1) ? this._search.index : 0,
|
||||
re = new RegExp('^' + ((this._search.full) ? this._search.text : this._search.char), 'i'),
|
||||
isFirstCharsEqual = re.test(this.store.at(index).get(this.displayField)),
|
||||
itemCandidate, idxCandidate;
|
||||
|
||||
for (var i=0; i<this.store.length; i++) {
|
||||
|
@ -417,6 +418,8 @@ define([
|
|||
if (!itemCandidate) {
|
||||
itemCandidate = item;
|
||||
idxCandidate = i;
|
||||
if(!isFirstCharsEqual)
|
||||
break;
|
||||
}
|
||||
if (this._search.full && i==index || i>index) {
|
||||
itemCandidate = item;
|
||||
|
|
|
@ -56,6 +56,7 @@ define([
|
|||
itemWidth : 80,
|
||||
itemHeight : 40,
|
||||
menuMaxHeight : 300,
|
||||
autoWidth : false,
|
||||
enableKeyEvents : false,
|
||||
beforeOpenHandler : null,
|
||||
additionalMenuItems : null,
|
||||
|
@ -87,11 +88,13 @@ define([
|
|||
this.menuMaxHeight = this.options.menuMaxHeight;
|
||||
this.beforeOpenHandler = this.options.beforeOpenHandler;
|
||||
this.showLast = this.options.showLast;
|
||||
this.wrapWidth = 0;
|
||||
this.rootWidth = 0;
|
||||
this.rootHeight = 0;
|
||||
this.rendered = false;
|
||||
this.needFillComboView = false;
|
||||
this.minWidth = this.options.minWidth;
|
||||
this.minWidth = this.options.minWidth;
|
||||
this.autoWidth = this.initAutoWidth = (Common.Utils.isIE10 || Common.Utils.isIE11) ? false : this.options.autoWidth;
|
||||
this.delayRenderTips = this.options.delayRenderTips || false;
|
||||
this.itemTemplate = this.options.itemTemplate || _.template([
|
||||
'<div class="style" id="<%= id %>">',
|
||||
|
@ -208,10 +211,12 @@ define([
|
|||
me.fieldPicker.el.addEventListener('contextmenu', _.bind(me.onPickerComboContextMenu, me), false);
|
||||
me.menuPicker.el.addEventListener('contextmenu', _.bind(me.onPickerComboContextMenu, me), false);
|
||||
|
||||
Common.NotificationCenter.on('more:toggle', _.bind(this.onMoreToggle, this));
|
||||
|
||||
me.onResize();
|
||||
|
||||
me.rendered = true;
|
||||
|
||||
|
||||
me.trigger('render:after', me);
|
||||
}
|
||||
if (this.disabled) {
|
||||
|
@ -221,8 +226,26 @@ define([
|
|||
return this;
|
||||
},
|
||||
|
||||
onMoreToggle: function(btn, state) {
|
||||
if(state) {
|
||||
this.checkSize();
|
||||
}
|
||||
},
|
||||
|
||||
checkSize: function() {
|
||||
if (this.cmpEl && this.cmpEl.is(':visible')) {
|
||||
if(this.autoWidth && this.menuPicker.store.length > 0) {
|
||||
var wrapWidth = this.$el.width();
|
||||
if(wrapWidth != this.wrapWidth || this.needFillComboView){
|
||||
this.wrapWidth = wrapWidth;
|
||||
this.autoChangeWidth();
|
||||
|
||||
var picker = this.menuPicker;
|
||||
var record = picker.getSelectedRec();
|
||||
this.fillComboView(record || picker.store.at(0), !!record, true);
|
||||
}
|
||||
}
|
||||
|
||||
var me = this,
|
||||
width = this.cmpEl.width(),
|
||||
height = this.cmpEl.height();
|
||||
|
@ -265,7 +288,46 @@ define([
|
|||
if (!this.isSuspendEvents)
|
||||
this.trigger('resize', this);
|
||||
},
|
||||
|
||||
autoChangeWidth: function() {
|
||||
if(this.menuPicker.dataViewItems[0]){
|
||||
var wrapEl = this.$el;
|
||||
var wrapWidth = wrapEl.width();
|
||||
|
||||
var itemEl = this.menuPicker.dataViewItems[0].$el;
|
||||
var itemWidth = this.itemWidth + parseFloat(itemEl.css('padding-left')) + parseFloat(itemEl.css('padding-right')) + 2 * parseFloat(itemEl.css('border-width'));
|
||||
var itemMargins = parseFloat(itemEl.css('margin-left')) + parseFloat(itemEl.css('margin-right'));
|
||||
|
||||
var fieldPickerEl = this.fieldPicker.$el;
|
||||
var fieldPickerPadding = parseFloat(fieldPickerEl.css('padding-right'));
|
||||
var fieldPickerBorder = parseFloat(fieldPickerEl.css('border-width'));
|
||||
var dataviewPaddings = parseFloat(this.fieldPicker.$el.find('.dataview').css('padding-left')) + parseFloat(this.fieldPicker.$el.find('.dataview').css('padding-right'));
|
||||
|
||||
var cmbDataViewEl = this.cmpEl;
|
||||
var cmbDataViewPaddings = parseFloat(cmbDataViewEl.css('padding-left')) + parseFloat(cmbDataViewEl.css('padding-right'));
|
||||
|
||||
var itemsCount = Math.floor((wrapWidth - fieldPickerPadding - dataviewPaddings - 2 * fieldPickerBorder - cmbDataViewPaddings) / (itemWidth + itemMargins));
|
||||
if(itemsCount > this.store.length)
|
||||
itemsCount = this.store.length;
|
||||
|
||||
var widthCalc = Math.ceil((itemsCount * (itemWidth + itemMargins) + fieldPickerPadding + dataviewPaddings + 2 * fieldPickerBorder + cmbDataViewPaddings) * 10) / 10;
|
||||
|
||||
var maxWidth = parseFloat(cmbDataViewEl.css('max-width'));
|
||||
if(widthCalc > maxWidth)
|
||||
widthCalc = maxWidth;
|
||||
|
||||
cmbDataViewEl.css('width', widthCalc);
|
||||
|
||||
if(this.initAutoWidth) {
|
||||
this.initAutoWidth = false;
|
||||
cmbDataViewEl.css('position', 'absolute');
|
||||
cmbDataViewEl.css('top', '50%');
|
||||
cmbDataViewEl.css('bottom', '50%');
|
||||
cmbDataViewEl.css('margin', 'auto 0');
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onBeforeShowMenu: function(e) {
|
||||
var me = this;
|
||||
|
||||
|
|
|
@ -328,6 +328,7 @@ define([
|
|||
if (this.listenStoreEvents) {
|
||||
this.listenTo(this.store, 'add', this.onAddItem);
|
||||
this.listenTo(this.store, 'reset', this.onResetItems);
|
||||
this.groups && this.listenTo(this.groups, 'add', this.onAddGroup);
|
||||
}
|
||||
this.onResetItems();
|
||||
|
||||
|
@ -392,18 +393,36 @@ define([
|
|||
|
||||
if (suspendEvents)
|
||||
this.suspendEvents();
|
||||
|
||||
if (!this.multiSelect) {
|
||||
this.extremeSeletedRec = record;
|
||||
if (!this.multiSelect || ( !this.pressedShift && !this.pressedCtrl) || !this.currentSelectedRec || (this.pressedShift && this.currentSelectedRec == record)) {
|
||||
_.each(this.store.where({selected: true}), function(rec){
|
||||
rec.set({selected: false});
|
||||
});
|
||||
|
||||
if (record) {
|
||||
record.set({selected: true});
|
||||
this.currentSelectedRec = record;
|
||||
}
|
||||
} else {
|
||||
if (record)
|
||||
record.set({selected: !record.get('selected')});
|
||||
if (record) {
|
||||
if(this.pressedCtrl) {
|
||||
record.set({selected: !record.get('selected')});
|
||||
this.currentSelectedRec = record;
|
||||
}
|
||||
else if(this.pressedShift){
|
||||
var me =this;
|
||||
var inRange=false;
|
||||
_.each(me.store.models, function(rec){
|
||||
if(me.currentSelectedRec == rec || record == rec){
|
||||
inRange = !inRange;
|
||||
rec.set({selected: true});
|
||||
}
|
||||
else {
|
||||
rec.set({selected: (inRange)});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (suspendEvents)
|
||||
|
@ -510,6 +529,35 @@ define([
|
|||
}
|
||||
},
|
||||
|
||||
onAddGroup: function(group) {
|
||||
var el = $(_.template([
|
||||
'<% if (group.headername !== undefined) { %>',
|
||||
'<div class="header-name"><%= group.headername %></div>',
|
||||
'<% } %>',
|
||||
'<div class="grouped-data <% if (group.inline) { %> group.inline <% } %> <% if (!_.isEmpty(group.caption)) { %> margin <% } %>" id="<%= group.id %>">',
|
||||
'<% if (!_.isEmpty(group.caption)) { %>',
|
||||
'<div class="group-description">',
|
||||
'<span><%= group.caption %></span>',
|
||||
'</div>',
|
||||
'<% } %>',
|
||||
'<div class="group-items-container">',
|
||||
'</div>',
|
||||
'</div>'
|
||||
].join(''))({
|
||||
group: group.toJSON()
|
||||
}));
|
||||
var innerEl = $(this.el).find('.inner').addBack().filter('.inner');
|
||||
if (innerEl) {
|
||||
var idx = _.indexOf(this.groups.models, group);
|
||||
var innerDivs = innerEl.find('.grouped-data');
|
||||
if (idx > 0)
|
||||
$(innerDivs.get(idx - 1)).after(el);
|
||||
else {
|
||||
(innerDivs.length > 0) ? $(innerDivs[idx]).before(el) : innerEl.append(el);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onResetItems: function() {
|
||||
_.each(this.dataViewItems, function(item) {
|
||||
var tip = item.$el.data('bs.tooltip');
|
||||
|
@ -678,13 +726,22 @@ define([
|
|||
onKeyDown: function (e, data) {
|
||||
if ( this.disabled ) return;
|
||||
if (data===undefined) data = e;
|
||||
if (_.indexOf(this.moveKeys, data.keyCode)>-1 || data.keyCode==Common.UI.Keys.RETURN) {
|
||||
|
||||
if(this.multiSelect) {
|
||||
if (data.keyCode == Common.UI.Keys.CTRL) {
|
||||
this.pressedCtrl = true;
|
||||
} else if (data.keyCode == Common.UI.Keys.SHIFT) {
|
||||
this.pressedShift = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (_.indexOf(this.moveKeys, data.keyCode)>-1 || data.keyCode==Common.UI.Keys.RETURN) {
|
||||
data.preventDefault();
|
||||
data.stopPropagation();
|
||||
var rec = this.getSelectedRec();
|
||||
if (this.lastSelectedRec===null)
|
||||
var rec =(this.multiSelect) ? this.extremeSeletedRec : this.getSelectedRec();
|
||||
if (this.lastSelectedRec === null)
|
||||
this.lastSelectedRec = rec;
|
||||
if (data.keyCode==Common.UI.Keys.RETURN) {
|
||||
if (data.keyCode == Common.UI.Keys.RETURN) {
|
||||
this.lastSelectedRec = null;
|
||||
if (this.selectedBeforeHideRec) // only for ComboDataView menuPicker
|
||||
rec = this.selectedBeforeHideRec;
|
||||
|
@ -694,6 +751,7 @@ define([
|
|||
if (this.parentMenu)
|
||||
this.parentMenu.hide();
|
||||
} else {
|
||||
this.pressedCtrl=false;
|
||||
var idx = _.indexOf(this.store.models, rec);
|
||||
if (idx<0) {
|
||||
if (data.keyCode==Common.UI.Keys.LEFT) {
|
||||
|
@ -774,12 +832,20 @@ define([
|
|||
}
|
||||
},
|
||||
|
||||
onKeyUp: function(e){
|
||||
if(e.keyCode == Common.UI.Keys.SHIFT)
|
||||
this.pressedShift = false;
|
||||
if(e.keyCode == Common.UI.Keys.CTRL)
|
||||
this.pressedCtrl = false;
|
||||
},
|
||||
|
||||
attachKeyEvents: function() {
|
||||
if (this.enableKeyEvents && this.handleSelect) {
|
||||
var el = $(this.el).find('.inner').addBack().filter('.inner');
|
||||
el.addClass('canfocused');
|
||||
el.attr('tabindex', this.tabindex.toString());
|
||||
el.on((this.parentMenu && this.useBSKeydown) ? 'dataview:keydown' : 'keydown', _.bind(this.onKeyDown, this));
|
||||
el.on((this.parentMenu && this.useBSKeydown) ? 'dataview:keyup' : 'keyup', _.bind(this.onKeyUp, this));
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -789,7 +855,11 @@ define([
|
|||
this.scrollToRecord(this.lastSelectedRec);
|
||||
this.lastSelectedRec = null;
|
||||
} else {
|
||||
this.scrollToRecord(this.getSelectedRec());
|
||||
var selectedRec = this.getSelectedRec();
|
||||
if (!this.multiSelect)
|
||||
this.scrollToRecord(selectedRec);
|
||||
else if(selectedRec && selectedRec.length > 0)
|
||||
this.scrollToRecord(selectedRec[selectedRec.length - 1]);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -472,8 +472,9 @@ define([
|
|||
},
|
||||
|
||||
selectCandidate: function() {
|
||||
var index = this._search.index || 0,
|
||||
var index = (this._search.index && this._search.index != -1) ? this._search.index : 0,
|
||||
re = new RegExp('^' + ((this._search.full) ? this._search.text : this._search.char), 'i'),
|
||||
isFirstCharsEqual = re.test(this.items[index].caption),
|
||||
itemCandidate, idxCandidate;
|
||||
|
||||
for (var i=0; i<this.items.length; i++) {
|
||||
|
@ -482,6 +483,8 @@ define([
|
|||
if (!itemCandidate) {
|
||||
itemCandidate = item;
|
||||
idxCandidate = i;
|
||||
if(!isFirstCharsEqual)
|
||||
break;
|
||||
}
|
||||
if (this._search.full && i==index || i>index) {
|
||||
itemCandidate = item;
|
||||
|
@ -1051,8 +1054,9 @@ define([
|
|||
},
|
||||
|
||||
selectCandidate: function() {
|
||||
var index = this._search.index || 0,
|
||||
var index = (this._search.index && this._search.index != -1) ? this._search.index : 0,
|
||||
re = new RegExp('^' + ((this._search.full) ? this._search.text : this._search.char), 'i'),
|
||||
isFirstCharsEqual = re.test(this.items[index].caption),
|
||||
itemCandidate, idxCandidate;
|
||||
|
||||
for (var i=0; i<this.items.length; i++) {
|
||||
|
@ -1061,6 +1065,8 @@ define([
|
|||
if (!itemCandidate) {
|
||||
itemCandidate = item;
|
||||
idxCandidate = i;
|
||||
if(!isFirstCharsEqual)
|
||||
break;
|
||||
}
|
||||
if (this._search.full && i==index || i>index) {
|
||||
itemCandidate = item;
|
||||
|
|
|
@ -793,7 +793,7 @@ define([
|
|||
|
||||
hideMoreBtns: function() {
|
||||
for (var btn in btnsMore) {
|
||||
btnsMore[btn] && btnsMore[btn].toggle(false);
|
||||
btnsMore[btn] && btnsMore[btn].isActive() && btnsMore[btn].toggle(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -144,10 +144,20 @@ define([
|
|||
}
|
||||
}, this, area);
|
||||
}.bind(this));
|
||||
Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this));
|
||||
},
|
||||
onLaunch: function () {
|
||||
var filter = Common.localStorage.getKeysFilter();
|
||||
this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : '';
|
||||
this._state = {
|
||||
disableEditing: false, // disable editing when disconnect/signed file/mail merge preview/review final or original/forms preview
|
||||
docProtection: {
|
||||
isReadOnly: false,
|
||||
isReviewOnly: false,
|
||||
isFormsOnly: false,
|
||||
isCommentsOnly: false
|
||||
}
|
||||
};
|
||||
|
||||
this.collection = this.getApplication().getCollection('Common.Collections.Comments');
|
||||
this.setComparator();
|
||||
|
@ -1645,16 +1655,25 @@ define([
|
|||
},
|
||||
|
||||
setPreviewMode: function(mode) {
|
||||
if (this.viewmode === mode) return;
|
||||
this.viewmode = mode;
|
||||
if (mode)
|
||||
this._state.disableEditing = mode;
|
||||
this.updatePreviewMode();
|
||||
},
|
||||
|
||||
updatePreviewMode: function() {
|
||||
var docProtection = this._state.docProtection;
|
||||
var viewmode = this._state.disableEditing || docProtection.isReadOnly || docProtection.isFormsOnly;
|
||||
|
||||
if (this.viewmode === viewmode) return;
|
||||
this.viewmode = viewmode;
|
||||
|
||||
if (viewmode)
|
||||
this.prevcanComments = this.mode.canComments;
|
||||
this.mode.canComments = (mode) ? false : this.prevcanComments;
|
||||
this.mode.canComments = (viewmode) ? false : this.prevcanComments;
|
||||
this.closeEditing();
|
||||
this.setMode(this.mode);
|
||||
this.updateComments(true);
|
||||
if (this.getPopover())
|
||||
mode ? this.getPopover().hide() : this.getPopover().update(true);
|
||||
viewmode ? this.getPopover().hide() : this.getPopover().update(true);
|
||||
},
|
||||
|
||||
clearCollections: function() {
|
||||
|
@ -1718,6 +1737,27 @@ define([
|
|||
}
|
||||
}
|
||||
this.updateComments(true);
|
||||
},
|
||||
|
||||
onAppReady: function (config) {
|
||||
var me = this;
|
||||
(new Promise(function (accept, reject) {
|
||||
accept();
|
||||
})).then(function(){
|
||||
me.onChangeProtectDocument();
|
||||
Common.NotificationCenter.on('protect:doclock', _.bind(me.onChangeProtectDocument, me));
|
||||
});
|
||||
},
|
||||
|
||||
onChangeProtectDocument: function(props) {
|
||||
if (!props) {
|
||||
var docprotect = this.getApplication().getController('DocProtection');
|
||||
props = docprotect ? docprotect.getDocProps() : null;
|
||||
}
|
||||
if (props) {
|
||||
this._state.docProtection = props;
|
||||
this.updatePreviewMode();
|
||||
}
|
||||
}
|
||||
|
||||
}, Common.Controllers.Comments || {}));
|
||||
|
|
|
@ -45,7 +45,8 @@ define([
|
|||
version: '{{PRODUCT_VERSION}}',
|
||||
eventloading: true,
|
||||
titlebuttons: true,
|
||||
uithemes: true
|
||||
uithemes: true,
|
||||
btnhome: true,
|
||||
};
|
||||
|
||||
var native = window.desktop || window.AscDesktopEditor;
|
||||
|
@ -90,14 +91,12 @@ define([
|
|||
$('.asc-window.modal').css('top', obj.skiptoparea);
|
||||
|
||||
Common.Utils.InternalSettings.set('window-inactive-area-top', obj.skiptoparea);
|
||||
} else
|
||||
if ( obj.lockthemes != undefined ) {
|
||||
// TODO: remove after 7.0.2. depricated. used is_win_xp variable instead
|
||||
// Common.UI.Themes.setAvailable(!obj.lockthemes);
|
||||
}
|
||||
|
||||
if ( obj.singlewindow !== undefined ) {
|
||||
$('#box-document-title .hedset')[obj.singlewindow ? 'hide' : 'show']();
|
||||
// $('#box-document-title .hedset')[obj.singlewindow ? 'hide' : 'show']();
|
||||
native.features.singlewindow = obj.singlewindow;
|
||||
titlebuttons.home && titlebuttons.home.btn.setVisible(obj.singlewindow);
|
||||
}
|
||||
} else
|
||||
if (/editor:config/.test(cmd)) {
|
||||
|
@ -248,6 +247,40 @@ define([
|
|||
titlebuttons = {};
|
||||
if ( mode.isEdit ) {
|
||||
var header = webapp.getController('Viewport').getView('Common.Views.Header');
|
||||
|
||||
{
|
||||
header.btnHome = (new Common.UI.Button({
|
||||
cls: 'btn-header',
|
||||
iconCls: 'toolbar__icon icon--inverse btn-home',
|
||||
visible: false,
|
||||
hint: 'Show Main window',
|
||||
dataHint:'0',
|
||||
dataHintDirection: 'right',
|
||||
dataHintOffset: '10, -18',
|
||||
dataHintTitle: 'K'
|
||||
})).render($('#box-document-title #slot-btn-dt-home'));
|
||||
titlebuttons['home'] = {btn: header.btnHome};
|
||||
|
||||
header.btnHome.on('click', event => {
|
||||
native.execCommand('title:button', JSON.stringify({click: "home"}));
|
||||
});
|
||||
|
||||
$('#id-box-doc-name').on({
|
||||
'dblclick': e => {
|
||||
native.execCommand('title:dblclick', JSON.stringify({x: e.originalEvent.screenX, y: e.originalEvent.screenY}))
|
||||
},
|
||||
'mousedown': e => {
|
||||
native.execCommand('title:mousedown', JSON.stringify({x: e.originalEvent.screenX, y: e.originalEvent.screenY}))
|
||||
},
|
||||
'mousemove': e => {
|
||||
native.execCommand('title:mousemove', JSON.stringify({x: e.originalEvent.screenX, y: e.originalEvent.screenY}))
|
||||
},
|
||||
'mouseup': e => {
|
||||
native.execCommand('title:mouseup', JSON.stringify({x: e.originalEvent.screenX, y: e.originalEvent.screenY}))
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (!!header.btnSave) {
|
||||
titlebuttons['save'] = {btn: header.btnSave};
|
||||
|
||||
|
@ -281,7 +314,8 @@ define([
|
|||
}
|
||||
|
||||
if ( native.features.singlewindow !== undefined ) {
|
||||
$('#box-document-title .hedset')[native.features.singlewindow ? 'hide' : 'show']();
|
||||
// $('#box-document-title .hedset')[native.features.singlewindow ? 'hide' : 'show']();
|
||||
!!titlebuttons.home && titlebuttons.home.btn.setVisible(native.features.singlewindow);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -98,12 +98,14 @@ define([
|
|||
'drag': _.bind(function(o, state){
|
||||
externalEditor && externalEditor.serviceCommand('window:drag', state == 'start');
|
||||
},this),
|
||||
'resize': _.bind(function(o, state){
|
||||
externalEditor && externalEditor.serviceCommand('window:resize', state == 'start');
|
||||
},this),
|
||||
'show': _.bind(function(cmp){
|
||||
var h = this.diagramEditorView.getHeight(),
|
||||
innerHeight = Common.Utils.innerHeight() - Common.Utils.InternalSettings.get('window-inactive-area-top');
|
||||
if (innerHeight>h && h<700 || innerHeight<h) {
|
||||
h = Math.min(innerHeight, 700);
|
||||
this.diagramEditorView.setHeight(h);
|
||||
if (innerHeight<h) {
|
||||
this.diagramEditorView.setHeight(innerHeight);
|
||||
}
|
||||
|
||||
if (externalEditor) {
|
||||
|
@ -227,13 +229,21 @@ define([
|
|||
if (eventData.type == "processMouse") {
|
||||
if (eventData.data.event == 'mouse:up') {
|
||||
this.diagramEditorView.binding.dragStop();
|
||||
if (this.diagramEditorView.binding.resizeStop) this.diagramEditorView.binding.resizeStop();
|
||||
} else
|
||||
if (eventData.data.event == 'mouse:move') {
|
||||
var x = parseInt(this.diagramEditorView.$window.css('left')) + eventData.data.pagex,
|
||||
y = parseInt(this.diagramEditorView.$window.css('top')) + eventData.data.pagey + 34;
|
||||
this.diagramEditorView.binding.drag({pageX:x, pageY:y});
|
||||
if (this.diagramEditorView.binding.resize) this.diagramEditorView.binding.resize({pageX:x, pageY:y});
|
||||
}
|
||||
} else
|
||||
if (eventData.type == "resize") {
|
||||
var w = eventData.data.width,
|
||||
h = eventData.data.height;
|
||||
if (w>0 && h>0)
|
||||
this.diagramEditorView.setInnerSize(w, h);
|
||||
} else
|
||||
if (eventData.type == "frameToGeneralData") {
|
||||
this.api && this.api.asc_getInformationBetweenFrameAndGeneralEditor(eventData.data);
|
||||
} else
|
||||
|
|
|
@ -51,7 +51,8 @@ define([
|
|||
var appLang = '{{DEFAULT_LANG}}',
|
||||
customization = undefined,
|
||||
targetApp = '',
|
||||
externalEditor = null;
|
||||
externalEditor = null,
|
||||
isAppFirstOpened = true;
|
||||
|
||||
|
||||
var createExternalEditor = function() {
|
||||
|
@ -96,16 +97,22 @@ define([
|
|||
'drag': _.bind(function(o, state){
|
||||
externalEditor && externalEditor.serviceCommand('window:drag', state == 'start');
|
||||
},this),
|
||||
'resize': _.bind(function(o, state){
|
||||
externalEditor && externalEditor.serviceCommand('window:resize', state == 'start');
|
||||
},this),
|
||||
'show': _.bind(function(cmp){
|
||||
var h = this.mergeEditorView.getHeight(),
|
||||
innerHeight = Common.Utils.innerHeight();
|
||||
if (innerHeight>h && h<700 || innerHeight<h) {
|
||||
h = Math.min(innerHeight, 700);
|
||||
this.mergeEditorView.setHeight(h);
|
||||
if (innerHeight<h) {
|
||||
this.mergeEditorView.setHeight(innerHeight);
|
||||
}
|
||||
|
||||
if (externalEditor) {
|
||||
externalEditor.serviceCommand('setAppDisabled',false);
|
||||
if (isAppFirstOpened && this.mergeEditorView._isExternalDocReady) {
|
||||
isAppFirstOpened = false;
|
||||
this.mergeEditorView._mergeData && this.setMergeData();
|
||||
}
|
||||
if (this.needDisableEditing && this.mergeEditorView._isExternalDocReady) {
|
||||
this.onMergeEditingDisabled();
|
||||
}
|
||||
|
@ -114,6 +121,7 @@ define([
|
|||
createExternalEditor.apply(this);
|
||||
}
|
||||
this.isExternalEditorVisible = true;
|
||||
this.isHandlerCalled = false;
|
||||
}, this),
|
||||
'hide': _.bind(function(cmp){
|
||||
if (externalEditor) {
|
||||
|
@ -139,14 +147,22 @@ define([
|
|||
},
|
||||
|
||||
handler: function(result, value) {
|
||||
externalEditor && externalEditor.serviceCommand('queryClose',{mr:result});
|
||||
return true;
|
||||
if (this.isHandlerCalled) return;
|
||||
this.isHandlerCalled = true;
|
||||
if (this.mergeEditorView._isExternalDocReady)
|
||||
externalEditor && externalEditor.serviceCommand('queryClose',{mr:result});
|
||||
else {
|
||||
this.mergeEditorView.hide();
|
||||
this.isHandlerCalled = false;
|
||||
}
|
||||
},
|
||||
|
||||
setMergeData: function() {
|
||||
externalEditor && externalEditor.serviceCommand('setMergeData', this.mergeEditorView._mergeData);
|
||||
this.mergeEditorView.setEditMode(true);
|
||||
this.mergeEditorView._mergeData = null;
|
||||
if (!isAppFirstOpened) {
|
||||
externalEditor && externalEditor.serviceCommand('setMergeData', this.mergeEditorView._mergeData);
|
||||
this.mergeEditorView.setEditMode(true);
|
||||
this.mergeEditorView._mergeData = null;
|
||||
}
|
||||
},
|
||||
|
||||
loadConfig: function(data) {
|
||||
|
@ -185,6 +201,7 @@ define([
|
|||
if (this.mergeEditorView) {
|
||||
if (eventData.type == 'documentReady') {
|
||||
this.mergeEditorView._isExternalDocReady = true;
|
||||
this.isExternalEditorVisible && (isAppFirstOpened = false);
|
||||
this.mergeEditorView.setControlsDisabled(false);
|
||||
if (this.mergeEditorView._mergeData) {
|
||||
externalEditor && externalEditor.serviceCommand('setMergeData', this.mergeEditorView._mergeData);
|
||||
|
@ -207,17 +224,26 @@ define([
|
|||
}
|
||||
this.mergeEditorView.hide();
|
||||
}
|
||||
this.isHandlerCalled = false;
|
||||
} else
|
||||
if (eventData.type == "processMouse") {
|
||||
if (eventData.data.event == 'mouse:up') {
|
||||
this.mergeEditorView.binding.dragStop();
|
||||
if (this.mergeEditorView.binding.resizeStop) this.mergeEditorView.binding.resizeStop();
|
||||
} else
|
||||
if (eventData.data.event == 'mouse:move') {
|
||||
var x = parseInt(this.mergeEditorView.$window.css('left')) + eventData.data.pagex,
|
||||
y = parseInt(this.mergeEditorView.$window.css('top')) + eventData.data.pagey + 34;
|
||||
this.mergeEditorView.binding.drag({pageX:x, pageY:y});
|
||||
if (this.mergeEditorView.binding.resize) this.mergeEditorView.binding.resize({pageX:x, pageY:y});
|
||||
}
|
||||
} else
|
||||
if (eventData.type == "resize") {
|
||||
var w = eventData.data.width,
|
||||
h = eventData.data.height;
|
||||
if (w>0 && h>0)
|
||||
this.mergeEditorView.setInnerSize(w, h);
|
||||
} else
|
||||
if (eventData.type == "frameToGeneralData") {
|
||||
this.api && this.api.asc_getInformationBetweenFrameAndGeneralEditor(eventData.data);
|
||||
} else
|
||||
|
|
|
@ -98,12 +98,14 @@ define([
|
|||
'drag': _.bind(function(o, state){
|
||||
externalEditor && externalEditor.serviceCommand('window:drag', state == 'start');
|
||||
},this),
|
||||
'resize': _.bind(function(o, state){
|
||||
externalEditor && externalEditor.serviceCommand('window:resize', state == 'start');
|
||||
},this),
|
||||
'show': _.bind(function(cmp){
|
||||
var h = this.oleEditorView.getHeight(),
|
||||
innerHeight = Common.Utils.innerHeight() - Common.Utils.InternalSettings.get('window-inactive-area-top');
|
||||
if (innerHeight>h && h<700 || innerHeight<h) {
|
||||
h = Math.min(innerHeight, 700);
|
||||
this.oleEditorView.setHeight(h);
|
||||
if (innerHeight<h) {
|
||||
this.oleEditorView.setHeight(innerHeight);
|
||||
}
|
||||
|
||||
if (externalEditor) {
|
||||
|
@ -131,8 +133,6 @@ define([
|
|||
}, this)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
},
|
||||
|
||||
onLaunch: function() {
|
||||
|
@ -228,12 +228,20 @@ define([
|
|||
if (eventData.type == "processMouse") {
|
||||
if (eventData.data.event == 'mouse:up') {
|
||||
this.oleEditorView.binding.dragStop();
|
||||
if (this.oleEditorView.binding.resizeStop) this.oleEditorView.binding.resizeStop();
|
||||
} else
|
||||
if (eventData.data.event == 'mouse:move') {
|
||||
var x = parseInt(this.oleEditorView.$window.css('left')) + eventData.data.pagex,
|
||||
y = parseInt(this.oleEditorView.$window.css('top')) + eventData.data.pagey + 34;
|
||||
this.oleEditorView.binding.drag({pageX:x, pageY:y});
|
||||
if (this.oleEditorView.binding.resize) this.oleEditorView.binding.resize({pageX:x, pageY:y});
|
||||
}
|
||||
} else
|
||||
if (eventData.type == "resize") {
|
||||
var w = eventData.data.width,
|
||||
h = eventData.data.height;
|
||||
if (w>0 && h>0)
|
||||
this.oleEditorView.setInnerSize(w, h);
|
||||
} else
|
||||
if (eventData.type == "frameToGeneralData") {
|
||||
this.api && this.api.asc_getInformationBetweenFrameAndGeneralEditor(eventData.data);
|
||||
|
|
|
@ -121,7 +121,7 @@ Common.UI.HintManager = new(function() {
|
|||
_usedTitles = [],
|
||||
_appPrefix,
|
||||
_staticHints = { // for desktop buttons
|
||||
"btnhome": 'K'
|
||||
// "btnhome": 'K'
|
||||
};
|
||||
|
||||
var _api;
|
||||
|
@ -457,6 +457,8 @@ Common.UI.HintManager = new(function() {
|
|||
};
|
||||
|
||||
var _init = function(api) {
|
||||
if (Common.Utils.isIE || Common.UI.isMac && Common.Utils.isGecko) // turn off hints on IE and FireFox (shortcut F6 selects link in address bar)
|
||||
return;
|
||||
_api = api;
|
||||
|
||||
var filter = Common.localStorage.getKeysFilter();
|
||||
|
@ -478,7 +480,7 @@ Common.UI.HintManager = new(function() {
|
|||
_clearHints();
|
||||
});
|
||||
$(document).on('keyup', function(e) {
|
||||
if (e.keyCode == Common.UI.Keys.ALT && _needShow && !(window.SSE && window.SSE.getController('Statusbar').getIsDragDrop())) {
|
||||
if ((e.keyCode == Common.UI.Keys.ALT || e.keyCode === 91) && _needShow && !(window.SSE && window.SSE.getController('Statusbar').getIsDragDrop())) {
|
||||
e.preventDefault();
|
||||
if (!_hintVisible) {
|
||||
$('input:focus').blur(); // to change value in inputField
|
||||
|
@ -620,10 +622,11 @@ Common.UI.HintManager = new(function() {
|
|||
}
|
||||
}
|
||||
|
||||
_needShow = (Common.Utils.InternalSettings.get(_appPrefix + "settings-show-alt-hints") && !e.shiftKey && e.keyCode == Common.UI.Keys.ALT &&
|
||||
_needShow = (Common.Utils.InternalSettings.get(_appPrefix + "settings-show-alt-hints") && !e.shiftKey &&
|
||||
(!Common.Utils.isMac && e.keyCode == Common.UI.Keys.ALT || Common.Utils.isMac && e.metaKey && e.keyCode === Common.UI.Keys.F6) &&
|
||||
!Common.Utils.ModalWindow.isVisible() && _isDocReady && _arrAlphabet.length > 0 &&
|
||||
!(window.PE && $('#pe-preview').is(':visible')));
|
||||
if (Common.Utils.InternalSettings.get(_appPrefix + "settings-show-alt-hints") && e.altKey && e.keyCode !== 115) {
|
||||
if (Common.Utils.InternalSettings.get(_appPrefix + "settings-show-alt-hints") && !Common.Utils.isMac && e.altKey && e.keyCode !== 115) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
@ -661,6 +664,8 @@ Common.UI.HintManager = new(function() {
|
|||
};
|
||||
|
||||
var _clearHints = function (isComplete) {
|
||||
if (Common.Utils.isIE || Common.UI.isMac && Common.Utils.isGecko)
|
||||
return;
|
||||
_hintVisible && _hideHints();
|
||||
if (_currentHints.length > 0) {
|
||||
_resetToDefault();
|
||||
|
|
|
@ -105,6 +105,7 @@ define([
|
|||
Common.NotificationCenter.on('app:face', this.onAppShowed.bind(this));
|
||||
Common.NotificationCenter.on('uitheme:changed', this.updatePluginsButtons.bind(this));
|
||||
Common.NotificationCenter.on('window:resize', this.updatePluginsButtons.bind(this));
|
||||
Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this));
|
||||
},
|
||||
|
||||
loadConfig: function(data) {
|
||||
|
@ -151,6 +152,16 @@ define([
|
|||
onAppShowed: function (config) {
|
||||
},
|
||||
|
||||
onAppReady: function (config) {
|
||||
var me = this;
|
||||
(new Promise(function (accept, reject) {
|
||||
accept();
|
||||
})).then(function(){
|
||||
me.onChangeProtectDocument();
|
||||
Common.NotificationCenter.on('protect:doclock', _.bind(me.onChangeProtectDocument, me));
|
||||
});
|
||||
},
|
||||
|
||||
setApi: function(api) {
|
||||
this.api = api;
|
||||
|
||||
|
@ -225,6 +236,10 @@ define([
|
|||
var _group = $('> .group', me.$toolbarPanelPlugins);
|
||||
var $slot = $('<span class="btn-slot text x-huge"></span>').appendTo(_group);
|
||||
btn.render($slot);
|
||||
var docProtection = me.panelPlugins._state.docProtection;
|
||||
Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: btn});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: btn});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: btn});
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -259,6 +274,10 @@ define([
|
|||
rank = new_rank;
|
||||
});
|
||||
_group.appendTo(me.$toolbarPanelPlugins);
|
||||
var docProtection = me.panelPlugins._state.docProtection;
|
||||
Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: me.panelPlugins.lockedControls});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: me.panelPlugins.lockedControls});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: me.panelPlugins.lockedControls});
|
||||
} else {
|
||||
console.error('toolbar panel isnot created');
|
||||
}
|
||||
|
@ -518,10 +537,13 @@ define([
|
|||
}
|
||||
|
||||
var variationsArr = [],
|
||||
pluginVisible = false;
|
||||
pluginVisible = false,
|
||||
isDisplayedInViewer = false;
|
||||
item.variations.forEach(function(itemVar){
|
||||
var visible = (isEdit || itemVar.isViewer && (itemVar.isDisplayedInViewer!==false)) && _.contains(itemVar.EditorsSupport, editor) && !itemVar.isSystem;
|
||||
if ( visible ) pluginVisible = true;
|
||||
if (itemVar.isViewer && (itemVar.isDisplayedInViewer!==false))
|
||||
isDisplayedInViewer = true;
|
||||
|
||||
if (item.isUICustomizer ) {
|
||||
visible && arrUI.push({
|
||||
|
@ -571,7 +593,8 @@ define([
|
|||
groupName: (item.group) ? item.group.name : '',
|
||||
groupRank: (item.group) ? item.group.rank : 0,
|
||||
minVersion: item.minVersion,
|
||||
original: item
|
||||
original: item,
|
||||
isDisplayedInViewer: isDisplayedInViewer
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
@ -720,6 +743,19 @@ define([
|
|||
}, funcComplete);
|
||||
} else
|
||||
funcComplete();
|
||||
},
|
||||
|
||||
onChangeProtectDocument: function(props) {
|
||||
if (!props) {
|
||||
var docprotect = this.getApplication().getController('DocProtection');
|
||||
props = docprotect ? docprotect.getDocProps() : null;
|
||||
}
|
||||
if (props && this.panelPlugins) {
|
||||
this.panelPlugins._state.docProtection = props;
|
||||
Common.Utils.lockControls(Common.enumLock.docLockView, props.isReadOnly, {array: this.panelPlugins.lockedControls});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockForms, props.isFormsOnly, {array: this.panelPlugins.lockedControls});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockComments, props.isCommentsOnly, {array: this.panelPlugins.lockedControls});
|
||||
}
|
||||
}
|
||||
}, Common.Controllers.Plugins || {}));
|
||||
});
|
||||
|
|
|
@ -82,7 +82,8 @@ define([
|
|||
'reviewchange:view': _.bind(this.onReviewViewClick, this),
|
||||
'reviewchange:compare': _.bind(this.onCompareClick, this),
|
||||
'lang:document': _.bind(this.onDocLanguage, this),
|
||||
'collaboration:coauthmode': _.bind(this.onCoAuthMode, this)
|
||||
'collaboration:coauthmode': _.bind(this.onCoAuthMode, this),
|
||||
'protect:update': _.bind(this.onChangeProtectDocument, this)
|
||||
},
|
||||
'Common.Views.ReviewChangesDialog': {
|
||||
'reviewchange:accept': _.bind(this.onAcceptClick, this),
|
||||
|
@ -102,7 +103,15 @@ define([
|
|||
this.userCollection = this.getApplication().getCollection('Common.Collections.Users');
|
||||
this.viewmode = false;
|
||||
|
||||
this._state = {posx: -1000, posy: -1000, popoverVisible: false, previewMode: false, compareSettings: null, wsLock: false, wsProps: []};
|
||||
this._state = { posx: -1000, posy: -1000, popoverVisible: false, previewMode: false, compareSettings: null, wsLock: false, wsProps: [],
|
||||
disableEditing: false, // disable editing when disconnect/signed file/mail merge preview/review final or original/forms preview
|
||||
docProtection: {
|
||||
isReadOnly: false,
|
||||
isReviewOnly: false,
|
||||
isFormsOnly: false,
|
||||
isCommentsOnly: false
|
||||
}
|
||||
};
|
||||
|
||||
Common.NotificationCenter.on('reviewchanges:turn', this.onTurnPreview.bind(this));
|
||||
Common.NotificationCenter.on('spelling:turn', this.onTurnSpelling.bind(this));
|
||||
|
@ -164,26 +173,35 @@ define([
|
|||
SetDisabled: function(state, reviewMode, fillFormMode) {
|
||||
if (this.dlgChanges)
|
||||
this.dlgChanges.close();
|
||||
if (reviewMode)
|
||||
if (reviewMode) {
|
||||
this.lockToolbar(Common.enumLock.previewReviewMode, state);
|
||||
else if (fillFormMode)
|
||||
this.dlgChanges && Common.Utils.lockControls(Common.enumLock.previewReviewMode, state, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]});
|
||||
} else if (fillFormMode) {
|
||||
this.lockToolbar(Common.enumLock.viewFormMode, state);
|
||||
else
|
||||
this.dlgChanges && Common.Utils.lockControls(Common.enumLock.viewFormMode, state, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]});
|
||||
} else {
|
||||
this.lockToolbar(Common.enumLock.viewMode, state);
|
||||
|
||||
}
|
||||
this.setPreviewMode(state);
|
||||
},
|
||||
|
||||
lockToolbar: function (causes, lock, opts) {
|
||||
Common.Utils.lockControls(causes, lock, opts, this.view.getButtons());
|
||||
this.view && Common.Utils.lockControls(causes, lock, opts, this.view.getButtons());
|
||||
},
|
||||
|
||||
setPreviewMode: function(mode) { //disable accept/reject in popover
|
||||
if (this.viewmode === mode) return;
|
||||
this.viewmode = mode;
|
||||
if (mode)
|
||||
this._state.disableEditing = mode;
|
||||
this.updatePreviewMode();
|
||||
},
|
||||
|
||||
updatePreviewMode: function() {
|
||||
var viewmode = this._state.disableEditing || this._state.docProtection.isReadOnly || this._state.docProtection.isFormsOnly || this._state.docProtection.isCommentsOnly;
|
||||
|
||||
if (this.viewmode === viewmode) return;
|
||||
this.viewmode = viewmode;
|
||||
if (viewmode)
|
||||
this.prevcanReview = this.appConfig.canReview;
|
||||
this.appConfig.canReview = (mode) ? false : this.prevcanReview;
|
||||
this.appConfig.canReview = (viewmode) ? false : this.prevcanReview;
|
||||
var me = this;
|
||||
this.popoverChanges && this.popoverChanges.each(function (model) {
|
||||
model.set('hint', !me.appConfig.canReview);
|
||||
|
@ -207,17 +225,14 @@ define([
|
|||
onApiShowChange: function (sdkchange, isShow) {
|
||||
var btnlock = true,
|
||||
changes;
|
||||
if (this.appConfig.canReview && !this.appConfig.isReviewOnly) {
|
||||
if (this.appConfig.canReview && !(this.appConfig.isReviewOnly || this._state.docProtection.isReviewOnly)) {
|
||||
if (sdkchange && sdkchange.length>0) {
|
||||
changes = this.readSDKChange(sdkchange);
|
||||
btnlock = this.isSelectedChangesLocked(changes, isShow);
|
||||
}
|
||||
if (this._state.lock !== btnlock) {
|
||||
Common.Utils.lockControls(Common.enumLock.reviewChangelock, btnlock, {array: [this.view.btnAccept, this.view.btnReject]});
|
||||
if (this.dlgChanges) {
|
||||
this.dlgChanges.btnAccept.setDisabled(btnlock);
|
||||
this.dlgChanges.btnReject.setDisabled(btnlock);
|
||||
}
|
||||
this.dlgChanges && Common.Utils.lockControls(Common.enumLock.reviewChangelock, btnlock, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]});
|
||||
this._state.lock = btnlock;
|
||||
Common.Utils.InternalSettings.set(this.view.appPrefix + "accept-reject-lock", btnlock);
|
||||
}
|
||||
|
@ -485,6 +500,7 @@ define([
|
|||
}
|
||||
var date = (item.get_DateTime() == '') ? new Date() : new Date(item.get_DateTime()),
|
||||
user = me.userCollection.findOriginalUser(item.get_UserId()),
|
||||
isProtectedReview = me._state.docProtection.isReviewOnly,
|
||||
change = new Common.Models.ReviewChange({
|
||||
uid : Common.UI.getId(),
|
||||
userid : item.get_UserId(),
|
||||
|
@ -499,8 +515,9 @@ define([
|
|||
changedata : item,
|
||||
scope : me.view,
|
||||
hint : !me.appConfig.canReview,
|
||||
docProtection: me._state.docProtection,
|
||||
goto : (item.get_MoveType() == Asc.c_oAscRevisionsMove.MoveTo || item.get_MoveType() == Asc.c_oAscRevisionsMove.MoveFrom),
|
||||
editable : me.appConfig.isReviewOnly && (item.get_UserId() == me.currentUserId) || !me.appConfig.isReviewOnly && (!me.appConfig.canUseReviewPermissions || AscCommon.UserInfoParser.canEditReview(item.get_UserName()))
|
||||
editable : (me.appConfig.isReviewOnly || isProtectedReview) && (item.get_UserId() == me.currentUserId) || !(me.appConfig.isReviewOnly || isProtectedReview) && (!me.appConfig.canUseReviewPermissions || AscCommon.UserInfoParser.canEditReview(item.get_UserName()))
|
||||
});
|
||||
|
||||
arr.push(change);
|
||||
|
@ -589,7 +606,7 @@ define([
|
|||
},
|
||||
|
||||
onTurnPreview: function(state, global, fromApi) {
|
||||
if ( this.appConfig.isReviewOnly ) {
|
||||
if ( this.appConfig.isReviewOnly) {
|
||||
this.view.turnChanges(true);
|
||||
} else
|
||||
if ( this.appConfig.canReview ) {
|
||||
|
@ -603,7 +620,7 @@ define([
|
|||
},
|
||||
|
||||
onApiTrackRevisionsChange: function(localFlag, globalFlag, userId) {
|
||||
if ( this.appConfig.isReviewOnly ) {
|
||||
if ( this.appConfig.isReviewOnly || this._state.docProtection.isReviewOnly) {
|
||||
this.view.turnChanges(true);
|
||||
} else
|
||||
if ( this.appConfig.canReview ) {
|
||||
|
@ -634,8 +651,10 @@ define([
|
|||
this.turnDisplayMode(item.value);
|
||||
if (!this.appConfig.isEdit && !this.appConfig.isRestrictedEdit)
|
||||
Common.localStorage.setItem(this.view.appPrefix + "review-mode", item.value); // for viewer
|
||||
else if (item.value=='markup' || item.value=='simple')
|
||||
else if (item.value=='markup' || item.value=='simple') {
|
||||
Common.localStorage.setItem(this.view.appPrefix + "review-mode-editor", item.value); // for editor save only markup modes
|
||||
Common.Utils.InternalSettings.set(this.view.appPrefix + "review-mode-editor", item.value);
|
||||
}
|
||||
Common.NotificationCenter.trigger('edit:complete', this.view);
|
||||
},
|
||||
|
||||
|
@ -805,7 +824,7 @@ define([
|
|||
rightMenu: {clear: disable, disable: true},
|
||||
statusBar: true,
|
||||
leftMenu: {disable: false, previewMode: true},
|
||||
fileMenu: {protect: true},
|
||||
fileMenu: {protect: true, info: true},
|
||||
navigation: {disable: false, previewMode: true},
|
||||
comments: {disable: false, previewMode: true},
|
||||
chat: false,
|
||||
|
@ -829,10 +848,10 @@ define([
|
|||
|
||||
onAppReady: function (config) {
|
||||
var me = this;
|
||||
if ( config.canReview ) {
|
||||
(new Promise(function (resolve) {
|
||||
resolve();
|
||||
})).then(function () {
|
||||
(new Promise(function (resolve) {
|
||||
resolve();
|
||||
})).then(function () {
|
||||
if ( config.canReview ) {
|
||||
// function _setReviewStatus(state, global) {
|
||||
// me.view.turnChanges(state, global);
|
||||
// !global && me.api.asc_SetLocalTrackRevisions(state);
|
||||
|
@ -854,7 +873,7 @@ define([
|
|||
!val && (val = me.appConfig.customization ? me.appConfig.customization.reviewDisplay : undefined);
|
||||
val = /^(original|final|markup|simple)$/i.test(val) ? val.toLocaleLowerCase() : 'markup';
|
||||
}
|
||||
|
||||
Common.Utils.InternalSettings.set(me.view.appPrefix + "review-mode-editor", val);
|
||||
me.turnDisplayMode(val); // load display mode for all modes (viewer or editor)
|
||||
me.view.turnDisplayMode(val);
|
||||
|
||||
|
@ -862,46 +881,49 @@ define([
|
|||
(!me.appConfig.customization.review || me.appConfig.customization.review.showReviewChanges===undefined) && me.appConfig.customization.showReviewChanges==true) ) {
|
||||
me.dlgChanges = (new Common.Views.ReviewChangesDialog({
|
||||
popoverChanges : me.popoverChanges,
|
||||
mode : me.appConfig
|
||||
mode : me.appConfig,
|
||||
docProtection : me._state.docProtection
|
||||
}));
|
||||
var sdk = $('#editor_sdk'),
|
||||
offset = sdk.offset();
|
||||
me.dlgChanges.show(Math.max(10, offset.left + sdk.width() - 300), Math.max(10, offset.top + sdk.height() - 150));
|
||||
}
|
||||
});
|
||||
} else if (config.canViewReview) {
|
||||
config.canViewReview = (config.isEdit || me.api.asc_HaveRevisionsChanges(true)); // check revisions from all users
|
||||
if (config.canViewReview) {
|
||||
var val = Common.localStorage.getItem(me.view.appPrefix + (config.isEdit || config.isRestrictedEdit ? "review-mode-editor" : "review-mode"));
|
||||
if (val===null) {
|
||||
val = me.appConfig.customization && me.appConfig.customization.review ? me.appConfig.customization.review.reviewDisplay : undefined;
|
||||
!val && (val = me.appConfig.customization ? me.appConfig.customization.reviewDisplay : undefined);
|
||||
val = /^(original|final|markup|simple)$/i.test(val) ? val.toLocaleLowerCase() : (config.isEdit || config.isRestrictedEdit ? 'markup' : 'original');
|
||||
} else if (config.canViewReview) {
|
||||
config.canViewReview = (config.isEdit || me.api.asc_HaveRevisionsChanges(true)); // check revisions from all users
|
||||
if (config.canViewReview) {
|
||||
var val = Common.localStorage.getItem(me.view.appPrefix + (config.isEdit || config.isRestrictedEdit ? "review-mode-editor" : "review-mode"));
|
||||
if (val===null) {
|
||||
val = me.appConfig.customization && me.appConfig.customization.review ? me.appConfig.customization.review.reviewDisplay : undefined;
|
||||
!val && (val = me.appConfig.customization ? me.appConfig.customization.reviewDisplay : undefined);
|
||||
val = /^(original|final|markup|simple)$/i.test(val) ? val.toLocaleLowerCase() : (config.isEdit || config.isRestrictedEdit ? 'markup' : 'original');
|
||||
}
|
||||
me.turnDisplayMode(val);
|
||||
me.view.turnDisplayMode(val);
|
||||
}
|
||||
me.turnDisplayMode(val);
|
||||
me.view.turnDisplayMode(val);
|
||||
}
|
||||
}
|
||||
|
||||
if (me.view && me.view.btnChat) {
|
||||
me.getApplication().getController('LeftMenu').leftMenu.btnChat.on('toggle', function(btn, state){
|
||||
if (state !== me.view.btnChat.pressed)
|
||||
me.view.turnChat(state);
|
||||
});
|
||||
}
|
||||
me.onChangeProtectSheet();
|
||||
if (me.view) {
|
||||
me.lockToolbar(Common.enumLock.hideComments, !Common.localStorage.getBool(me.view.appPrefix + "settings-livecomment", true), {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]});
|
||||
me.lockToolbar(Common.enumLock['Objects'], !!this._state.wsProps['Objects'], {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]});
|
||||
}
|
||||
if (me.view && me.view.btnChat) {
|
||||
me.getApplication().getController('LeftMenu').leftMenu.btnChat.on('toggle', function(btn, state){
|
||||
if (state !== me.view.btnChat.pressed)
|
||||
me.view.turnChat(state);
|
||||
});
|
||||
}
|
||||
me.onChangeProtectSheet();
|
||||
if (me.view) {
|
||||
me.lockToolbar(Common.enumLock.hideComments, !Common.localStorage.getBool(me.view.appPrefix + "settings-livecomment", true), {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]});
|
||||
me.lockToolbar(Common.enumLock['Objects'], !!me._state.wsProps['Objects'], {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]});
|
||||
}
|
||||
|
||||
var val = Common.localStorage.getItem(me.view.appPrefix + "settings-review-hover-mode");
|
||||
if (val === null) {
|
||||
val = me.appConfig.customization && me.appConfig.customization.review ? !!me.appConfig.customization.review.hoverMode : false;
|
||||
} else
|
||||
val = !!parseInt(val);
|
||||
Common.Utils.InternalSettings.set(me.view.appPrefix + "settings-review-hover-mode", val);
|
||||
me.appConfig.reviewHoverMode = val;
|
||||
var val = Common.localStorage.getItem(me.view.appPrefix + "settings-review-hover-mode");
|
||||
if (val === null) {
|
||||
val = me.appConfig.customization && me.appConfig.customization.review ? !!me.appConfig.customization.review.hoverMode : false;
|
||||
} else
|
||||
val = !!parseInt(val);
|
||||
Common.Utils.InternalSettings.set(me.view.appPrefix + "settings-review-hover-mode", val);
|
||||
me.appConfig.reviewHoverMode = val;
|
||||
|
||||
me.view && me.view.onAppReady(config);
|
||||
});
|
||||
},
|
||||
|
||||
applySettings: function(menu) {
|
||||
|
@ -971,7 +993,8 @@ define([
|
|||
},
|
||||
|
||||
onCoAuthoringDisconnect: function() {
|
||||
this.lockToolbar(Common.enumLock.lostConnect, true)
|
||||
this.lockToolbar(Common.enumLock.lostConnect, true);
|
||||
this.dlgChanges && Common.Utils.lockControls(Common.enumLock.lostConnect, true, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]});
|
||||
},
|
||||
|
||||
onUpdateUsers: function() {
|
||||
|
@ -1011,6 +1034,37 @@ define([
|
|||
this.lockToolbar(Common.enumLock['Objects'], !!this._state.wsProps['Objects'], {array: [this.view.btnCommentRemove, this.view.btnCommentResolve]});
|
||||
},
|
||||
|
||||
onChangeProtectDocument: function(props) {
|
||||
if (!props) {
|
||||
var docprotect = this.getApplication().getController('DocProtection');
|
||||
props = docprotect ? docprotect.getDocProps() : null;
|
||||
}
|
||||
if (props) {
|
||||
this._state.docProtection = props;
|
||||
this.lockToolbar(Common.enumLock.docLockView, props.isReadOnly);
|
||||
this.lockToolbar(Common.enumLock.docLockForms, props.isFormsOnly);
|
||||
this.lockToolbar(Common.enumLock.docLockReview, props.isReviewOnly);
|
||||
this.lockToolbar(Common.enumLock.docLockComments, props.isCommentsOnly);
|
||||
if (this.dlgChanges) {
|
||||
Common.Utils.lockControls(Common.enumLock.docLockView, props.isReadOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockForms, props.isFormsOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockReview, props.isReviewOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockComments, props.isCommentsOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]});
|
||||
}
|
||||
if (this.appConfig.canReview) {
|
||||
if (props.isReviewOnly) {
|
||||
this.onTurnPreview(true);
|
||||
this.onApiShowChange();
|
||||
} else if (this._state.prevReviewProtected) {
|
||||
this.onTurnPreview(false);
|
||||
this.onApiShowChange();
|
||||
}
|
||||
this._state.prevReviewProtected = props.isReviewOnly;
|
||||
}
|
||||
this.updatePreviewMode();
|
||||
}
|
||||
},
|
||||
|
||||
textInserted: '<b>Inserted:</b>',
|
||||
textDeleted: '<b>Deleted:</b>',
|
||||
textParaInserted: '<b>Paragraph Inserted</b> ',
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<div class="btn-goto img-commonctrl"></div>
|
||||
<% } %>
|
||||
<% if (!hint) { %>
|
||||
<% if (scope.appConfig.isReviewOnly) { %>
|
||||
<% if (scope.appConfig.isReviewOnly || docProtection.isReviewOnly) { %>
|
||||
<% if (editable) { %>
|
||||
<div class="btn-delete img-commonctrl"></div>
|
||||
<% } %>
|
||||
|
|
|
@ -1095,4 +1095,4 @@ Common.Utils.getKeyByValue = function(obj, value) {
|
|||
return prop;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -39,59 +39,29 @@
|
|||
*/
|
||||
|
||||
define([
|
||||
'common/main/lib/component/Window'
|
||||
'common/main/lib/view/ExternalEditor'
|
||||
], function () { 'use strict';
|
||||
|
||||
Common.Views.ExternalDiagramEditor = Common.UI.Window.extend(_.extend({
|
||||
Common.Views.ExternalDiagramEditor = Common.Views.ExternalEditor.extend(_.extend({
|
||||
initialize : function(options) {
|
||||
var _options = {};
|
||||
var _inner_height = Common.Utils.innerHeight() - Common.Utils.InternalSettings.get('window-inactive-area-top');
|
||||
_.extend(_options, {
|
||||
title: this.textTitle,
|
||||
width: 910,
|
||||
height: (_inner_height - 700)<0 ? _inner_height : 700,
|
||||
cls: 'advanced-settings-dlg',
|
||||
header: true,
|
||||
toolclose: 'hide',
|
||||
toolcallback: _.bind(this.onToolClose, this)
|
||||
storageName: 'diagram-editor',
|
||||
sdkplaceholder: 'id-diagram-editor-placeholder',
|
||||
initwidth: 900,
|
||||
initheight: 700,
|
||||
minwidth: 730,
|
||||
minheight: 275
|
||||
}, options);
|
||||
|
||||
this.template = [
|
||||
'<div id="id-diagram-editor-container" class="box" style="height:' + (_options.height-85) + 'px;">',
|
||||
'<div id="id-diagram-editor-placeholder" style="width: 100%;height: 100%;"></div>',
|
||||
'</div>',
|
||||
'<div class="separator horizontal"></div>',
|
||||
'<div class="footer" style="text-align: center;">',
|
||||
'<button id="id-btn-diagram-editor-apply" class="btn normal dlg-btn primary custom" result="ok" data-hint="1" data-hint-direction="bottom" data-hint-offset="big">' + this.textSave + '</button>',
|
||||
'<button id="id-btn-diagram-editor-cancel" class="btn normal dlg-btn" result="cancel" data-hint="1" data-hint-direction="bottom" data-hint-offset="big">' + this.textClose + '</button>',
|
||||
'</div>'
|
||||
].join('');
|
||||
|
||||
_options.tpl = _.template(this.template)(_options);
|
||||
|
||||
this.handler = _options.handler;
|
||||
this._chartData = null;
|
||||
this._isNewChart = true;
|
||||
Common.UI.Window.prototype.initialize.call(this, _options);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
Common.UI.Window.prototype.render.call(this);
|
||||
|
||||
this.btnSave = new Common.UI.Button({
|
||||
el: $('#id-btn-diagram-editor-apply'),
|
||||
disabled: true
|
||||
});
|
||||
this.btnCancel = new Common.UI.Button({
|
||||
el: $('#id-btn-diagram-editor-cancel')
|
||||
});
|
||||
|
||||
this.$window.find('.dlg-btn').on('click', _.bind(this.onDlgBtnClick, this));
|
||||
Common.Views.ExternalEditor.prototype.initialize.call(this, _options);
|
||||
},
|
||||
|
||||
show: function() {
|
||||
this.setPlaceholder();
|
||||
Common.UI.Window.prototype.show.apply(this, arguments);
|
||||
Common.Views.ExternalEditor.prototype.show.apply(this, arguments);
|
||||
},
|
||||
|
||||
setChartData: function(data) {
|
||||
|
@ -100,55 +70,6 @@ define([
|
|||
this.fireEvent('setchartdata', this);
|
||||
},
|
||||
|
||||
setEditMode: function(mode) {
|
||||
this._isNewChart = !mode;
|
||||
},
|
||||
|
||||
isEditMode: function() {
|
||||
return !this._isNewChart;
|
||||
},
|
||||
|
||||
setControlsDisabled: function(disable) {
|
||||
this.btnSave.setDisabled(disable);
|
||||
this.btnCancel.setDisabled(disable);
|
||||
(disable) ? this.$window.find('.tool.close').addClass('disabled') : this.$window.find('.tool.close').removeClass('disabled');
|
||||
},
|
||||
|
||||
onDlgBtnClick: function(event) {
|
||||
if ( this.handler ) {
|
||||
this.handler.call(this, event.currentTarget.attributes['result'].value);
|
||||
return;
|
||||
}
|
||||
this.hide();
|
||||
},
|
||||
|
||||
onToolClose: function() {
|
||||
if ( this.handler ) {
|
||||
this.handler.call(this, 'cancel');
|
||||
return;
|
||||
}
|
||||
this.hide();
|
||||
},
|
||||
|
||||
setHeight: function(height) {
|
||||
if (height >= 0) {
|
||||
var min = parseInt(this.$window.css('min-height'));
|
||||
height < min && (height = min);
|
||||
this.$window.height(height);
|
||||
|
||||
var header_height = (this.initConfig.header) ? parseInt(this.$window.find('> .header').css('height')) : 0;
|
||||
|
||||
this.$window.find('> .body').css('height', height-header_height);
|
||||
this.$window.find('> .body > .box').css('height', height-85);
|
||||
|
||||
var top = (Common.Utils.innerHeight() - Common.Utils.InternalSettings.get('window-inactive-area-top') - parseInt(height)) / 2;
|
||||
var left = (Common.Utils.innerWidth() - parseInt(this.initConfig.width)) / 2;
|
||||
|
||||
this.$window.css('left',left);
|
||||
this.$window.css('top', Common.Utils.InternalSettings.get('window-inactive-area-top') + top);
|
||||
}
|
||||
},
|
||||
|
||||
setPlaceholder: function(placeholder) {
|
||||
this._placeholder = placeholder;
|
||||
},
|
||||
|
@ -157,8 +78,6 @@ define([
|
|||
return this._placeholder;
|
||||
},
|
||||
|
||||
textSave: 'Save & Exit',
|
||||
textClose: 'Close',
|
||||
textTitle: 'Chart Editor'
|
||||
}, Common.Views.ExternalDiagramEditor || {}));
|
||||
});
|
||||
|
|
195
apps/common/main/lib/view/ExternalEditor.js
Normal file
|
@ -0,0 +1,195 @@
|
|||
/*
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2010-2022
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
|
||||
* street, Riga, Latvia, EU, LV-1050.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* ExternalEditor.js
|
||||
*
|
||||
* Created by Julia Radzhabova on 22/06/22
|
||||
* Copyright (c) 2022 Ascensio System SIA. All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
define([
|
||||
'common/main/lib/component/Window'
|
||||
], function () { 'use strict';
|
||||
|
||||
Common.Views.ExternalEditor = Common.UI.Window.extend(_.extend({
|
||||
initialize : function(options) {
|
||||
var filter = Common.localStorage.getKeysFilter(),
|
||||
appPrefix = (filter && filter.length) ? filter.split(',')[0] : '';
|
||||
this.storageName = appPrefix + (options.storageName || 'external-editor');
|
||||
|
||||
var _options = {},
|
||||
width = options.initwidth || 900,
|
||||
height = options.initheight || 700;
|
||||
var value = Common.localStorage.getItem(this.storageName + '-width');
|
||||
value && (width = parseInt(value));
|
||||
value = Common.localStorage.getItem(this.storageName + '-height');
|
||||
value && (height = parseInt(value));
|
||||
|
||||
var _inner_height = Common.Utils.innerHeight() - Common.Utils.InternalSettings.get('window-inactive-area-top');
|
||||
_.extend(_options, {
|
||||
width: width,
|
||||
height: (_inner_height - height)<0 ? _inner_height : height,
|
||||
cls: 'advanced-settings-dlg',
|
||||
header: true,
|
||||
toolclose: 'hide',
|
||||
toolcallback: _.bind(this.onToolClose, this),
|
||||
resizable: true
|
||||
}, options);
|
||||
|
||||
this._headerFooterHeight = 85;
|
||||
|
||||
this.template = [
|
||||
'<div id="id-editor-container" class="box" style="height:' + (_options.height-this._headerFooterHeight) + 'px; padding: 0 5px;">',
|
||||
'<div id="' + (_options.sdkplaceholder || '') + '" style="width: 100%;height: 100%;"></div>',
|
||||
'</div>',
|
||||
'<div class="separator horizontal"></div>',
|
||||
'<div class="footer" style="text-align: center;">',
|
||||
'<button id="id-btn-editor-apply" class="btn normal dlg-btn primary custom" result="ok" data-hint="1" data-hint-direction="bottom" data-hint-offset="big">' + this.textSave + '</button>',
|
||||
'<button id="id-btn-editor-cancel" class="btn normal dlg-btn" result="cancel" data-hint="1" data-hint-direction="bottom" data-hint-offset="big">' + this.textClose + '</button>',
|
||||
'</div>'
|
||||
].join('');
|
||||
|
||||
_options.tpl = _.template(this.template)(_options);
|
||||
|
||||
this.handler = _options.handler;
|
||||
this._isNewObject = true;
|
||||
this.on('resize', _.bind(this.onWindowResize, this));
|
||||
Common.UI.Window.prototype.initialize.call(this, _options);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
Common.UI.Window.prototype.render.call(this);
|
||||
this.boxEl = this.$window.find('.body > .box');
|
||||
|
||||
this.btnSave = new Common.UI.Button({
|
||||
el: this.$window.find('#id-btn-editor-apply'),
|
||||
disabled: true
|
||||
});
|
||||
this.btnCancel = new Common.UI.Button({
|
||||
el: this.$window.find('#id-btn-editor-cancel')
|
||||
});
|
||||
|
||||
this.$window.find('.dlg-btn').on('click', _.bind(this.onDlgBtnClick, this));
|
||||
},
|
||||
|
||||
show: function() {
|
||||
Common.UI.Window.prototype.show.apply(this, arguments);
|
||||
},
|
||||
|
||||
setEditMode: function(mode) {
|
||||
this._isNewObject = !mode;
|
||||
},
|
||||
|
||||
isEditMode: function() {
|
||||
return !this._isNewObject;
|
||||
},
|
||||
|
||||
setControlsDisabled: function(disable) {
|
||||
this.btnSave.setDisabled(disable);
|
||||
this.btnCancel.setDisabled(disable);
|
||||
(disable) ? this.$window.find('.tool.close').addClass('disabled') : this.$window.find('.tool.close').removeClass('disabled');
|
||||
},
|
||||
|
||||
onDlgBtnClick: function(event) {
|
||||
if ( this.handler ) {
|
||||
this.handler.call(this, event.currentTarget.attributes['result'].value);
|
||||
return;
|
||||
}
|
||||
this.hide();
|
||||
},
|
||||
|
||||
onToolClose: function() {
|
||||
if ( this.handler ) {
|
||||
this.handler.call(this, 'cancel');
|
||||
return;
|
||||
}
|
||||
this.hide();
|
||||
},
|
||||
|
||||
setHeight: function(height) {
|
||||
if (height >= 0) {
|
||||
var min = parseInt(this.$window.css('min-height'));
|
||||
height < min && (height = min);
|
||||
this.$window.height(height);
|
||||
|
||||
var header_height = (this.initConfig.header) ? parseInt(this.$window.find('> .header').css('height')) : 0;
|
||||
|
||||
this.$window.find('> .body').css('height', height-header_height);
|
||||
this.$window.find('> .body > .box').css('height', height-this._headerFooterHeight);
|
||||
}
|
||||
},
|
||||
|
||||
setInCenter: function() {
|
||||
var height = this.$window.height(),
|
||||
top = (Common.Utils.innerHeight() - Common.Utils.InternalSettings.get('window-inactive-area-top') - parseInt(height)) / 2,
|
||||
left = (Common.Utils.innerWidth() - parseInt(this.initConfig.width)) / 2;
|
||||
|
||||
this.$window.css('left',left);
|
||||
this.$window.css('top', Common.Utils.InternalSettings.get('window-inactive-area-top') + top);
|
||||
},
|
||||
|
||||
setInnerSize: function(width, height) {
|
||||
var maxHeight = Common.Utils.innerHeight(),
|
||||
maxWidth = Common.Utils.innerWidth(),
|
||||
borders_width = (parseInt(this.$window.css('border-left-width')) + parseInt(this.$window.css('border-right-width'))),
|
||||
paddings = (parseInt(this.boxEl.css('padding-left')) + parseInt(this.boxEl.css('padding-right')));
|
||||
height += 90; // add toolbar and statusbar height
|
||||
if (maxHeight<height + this._headerFooterHeight)
|
||||
height = maxHeight - this._headerFooterHeight;
|
||||
if (maxWidth<width + paddings + borders_width)
|
||||
width = maxWidth - paddings - borders_width;
|
||||
|
||||
this.boxEl.css('height', height);
|
||||
|
||||
this.setHeight(height + this._headerFooterHeight);
|
||||
this.setWidth(width + paddings + borders_width);
|
||||
|
||||
if (this.getLeft()<0)
|
||||
this.$window.css('left', 0);
|
||||
if (this.getTop() < Common.Utils.InternalSettings.get('window-inactive-area-top') )
|
||||
this.$window.css('top', Common.Utils.InternalSettings.get('window-inactive-area-top'));
|
||||
},
|
||||
|
||||
onWindowResize: function (args) {
|
||||
if (args && args[1]=='end') {
|
||||
var value = this.getSize();
|
||||
Common.localStorage.setItem(this.storageName + '-width', value[0]);
|
||||
Common.localStorage.setItem(this.storageName + '-height', value[1]);
|
||||
}
|
||||
},
|
||||
|
||||
textSave: 'Save & Exit',
|
||||
textClose: 'Close'
|
||||
}, Common.Views.ExternalEditor || {}));
|
||||
});
|
|
@ -39,55 +39,24 @@
|
|||
*/
|
||||
|
||||
define([
|
||||
'common/main/lib/component/Window'
|
||||
'common/main/lib/view/ExternalEditor'
|
||||
], function () { 'use strict';
|
||||
|
||||
Common.Views.ExternalMergeEditor = Common.UI.Window.extend(_.extend({
|
||||
Common.Views.ExternalMergeEditor = Common.Views.ExternalEditor.extend(_.extend({
|
||||
initialize : function(options) {
|
||||
var _options = {};
|
||||
_.extend(_options, {
|
||||
title: this.textTitle,
|
||||
width: 910,
|
||||
height: (Common.Utils.innerHeight()-700)<0 ? Common.Utils.innerHeight(): 700,
|
||||
cls: 'advanced-settings-dlg',
|
||||
header: true,
|
||||
toolclose: 'hide',
|
||||
toolcallback: _.bind(this.onToolClose, this)
|
||||
storageName: 'merge-editor',
|
||||
sdkplaceholder: 'id-merge-editor-placeholder',
|
||||
initwidth: 900,
|
||||
initheight: 700,
|
||||
minwidth: 370,
|
||||
minheight: 275
|
||||
}, options);
|
||||
|
||||
this.template = [
|
||||
'<div id="id-merge-editor-container" class="box" style="height:' + (_options.height-85) + 'px;">',
|
||||
'<div id="id-merge-editor-placeholder" style="width: 100%;height: 100%;"></div>',
|
||||
'</div>',
|
||||
'<div class="separator horizontal"></div>',
|
||||
'<div class="footer" style="text-align: center;">',
|
||||
'<button id="id-btn-merge-editor-apply" class="btn normal dlg-btn primary custom" result="ok" data-hint="1" data-hint-direction="bottom" data-hint-offset="big">' + this.textSave + '</button>',
|
||||
'<button id="id-btn-merge-editor-cancel" class="btn normal dlg-btn" result="cancel" data-hint="1" data-hint-direction="bottom" data-hint-offset="big">' + this.textClose + '</button>',
|
||||
'</div>'
|
||||
].join('');
|
||||
|
||||
_options.tpl = _.template(this.template)(_options);
|
||||
|
||||
this.handler = _options.handler;
|
||||
this._mergeData = null;
|
||||
this._isNewMerge = true;
|
||||
Common.UI.Window.prototype.initialize.call(this, _options);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
Common.UI.Window.prototype.render.call(this);
|
||||
|
||||
this.btnSave = new Common.UI.Button({
|
||||
el: $('#id-btn-merge-editor-apply'),
|
||||
disabled: true
|
||||
});
|
||||
this.btnCancel = new Common.UI.Button({
|
||||
el: $('#id-btn-merge-editor-cancel'),
|
||||
disabled: true
|
||||
});
|
||||
|
||||
this.$window.find('.tool.close').addClass('disabled');
|
||||
this.$window.find('.dlg-btn').on('click', _.bind(this.onDlgBtnClick, this));
|
||||
Common.Views.ExternalEditor.prototype.initialize.call(this, _options);
|
||||
},
|
||||
|
||||
setMergeData: function(data) {
|
||||
|
@ -96,54 +65,6 @@ define([
|
|||
this.fireEvent('setmergedata', this);
|
||||
},
|
||||
|
||||
setEditMode: function(mode) {
|
||||
this._isNewMerge = !mode;
|
||||
},
|
||||
|
||||
isEditMode: function() {
|
||||
return !this._isNewMerge;
|
||||
},
|
||||
|
||||
setControlsDisabled: function(disable) {
|
||||
this.btnSave.setDisabled(disable);
|
||||
this.btnCancel.setDisabled(disable);
|
||||
(disable) ? this.$window.find('.tool.close').addClass('disabled') : this.$window.find('.tool.close').removeClass('disabled');
|
||||
},
|
||||
|
||||
onDlgBtnClick: function(event) {
|
||||
var state = event.currentTarget.attributes['result'].value;
|
||||
if ( this.handler && this.handler.call(this, state) )
|
||||
return;
|
||||
this.hide();
|
||||
},
|
||||
|
||||
onToolClose: function() {
|
||||
if ( this.handler && this.handler.call(this, 'cancel') )
|
||||
return;
|
||||
this.hide();
|
||||
},
|
||||
|
||||
setHeight: function(height) {
|
||||
if (height >= 0) {
|
||||
var min = parseInt(this.$window.css('min-height'));
|
||||
height < min && (height = min);
|
||||
this.$window.height(height);
|
||||
|
||||
var header_height = (this.initConfig.header) ? parseInt(this.$window.find('> .header').css('height')) : 0;
|
||||
|
||||
this.$window.find('> .body').css('height', height-header_height);
|
||||
this.$window.find('> .body > .box').css('height', height-85);
|
||||
|
||||
var top = (Common.Utils.innerHeight() - parseInt(height)) / 2;
|
||||
var left = (Common.Utils.innerWidth() - parseInt(this.initConfig.width)) / 2;
|
||||
|
||||
this.$window.css('left',left);
|
||||
this.$window.css('top',top);
|
||||
}
|
||||
},
|
||||
|
||||
textSave: 'Save & Exit',
|
||||
textClose: 'Close',
|
||||
textTitle: 'Mail Merge Recipients'
|
||||
}, Common.Views.ExternalMergeEditor || {}));
|
||||
});
|
|
@ -39,59 +39,24 @@
|
|||
*/
|
||||
|
||||
define([
|
||||
'common/main/lib/component/Window'
|
||||
'common/main/lib/view/ExternalEditor'
|
||||
], function () { 'use strict';
|
||||
|
||||
Common.Views.ExternalOleEditor = Common.UI.Window.extend(_.extend({
|
||||
Common.Views.ExternalOleEditor = Common.Views.ExternalEditor.extend(_.extend({
|
||||
initialize : function(options) {
|
||||
var _options = {};
|
||||
var _inner_height = Common.Utils.innerHeight() - Common.Utils.InternalSettings.get('window-inactive-area-top');
|
||||
_.extend(_options, {
|
||||
title: this.textTitle,
|
||||
width: 910,
|
||||
height: (_inner_height - 700)<0 ? _inner_height : 700,
|
||||
cls: 'advanced-settings-dlg',
|
||||
header: true,
|
||||
toolclose: 'hide',
|
||||
toolcallback: _.bind(this.onToolClose, this)
|
||||
storageName: 'ole-editor',
|
||||
sdkplaceholder: 'id-ole-editor-placeholder',
|
||||
initwidth: 900,
|
||||
initheight: 700,
|
||||
minwidth: 860,
|
||||
minheight: 275
|
||||
}, options);
|
||||
|
||||
this.template = [
|
||||
'<div id="id-ole-editor-container" class="box" style="height:' + (_options.height-85) + 'px;">',
|
||||
'<div id="id-ole-editor-placeholder" style="width: 100%;height: 100%;"></div>',
|
||||
'</div>',
|
||||
'<div class="separator horizontal"></div>',
|
||||
'<div class="footer" style="text-align: center;">',
|
||||
'<button id="id-btn-ole-editor-apply" class="btn normal dlg-btn primary custom" result="ok" data-hint="1" data-hint-direction="bottom" data-hint-offset="big">' + this.textSave + '</button>',
|
||||
'<button id="id-btn-ole-editor-cancel" class="btn normal dlg-btn" result="cancel" data-hint="1" data-hint-direction="bottom" data-hint-offset="big">' + this.textClose + '</button>',
|
||||
'</div>'
|
||||
].join('');
|
||||
|
||||
_options.tpl = _.template(this.template)(_options);
|
||||
|
||||
this.handler = _options.handler;
|
||||
this._oleData = null;
|
||||
this._isNewOle = true;
|
||||
Common.UI.Window.prototype.initialize.call(this, _options);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
Common.UI.Window.prototype.render.call(this);
|
||||
|
||||
this.btnSave = new Common.UI.Button({
|
||||
el: $('#id-btn-ole-editor-apply'),
|
||||
disabled: true
|
||||
});
|
||||
this.btnCancel = new Common.UI.Button({
|
||||
el: $('#id-btn-ole-editor-cancel')
|
||||
});
|
||||
|
||||
this.$window.find('.dlg-btn').on('click', _.bind(this.onDlgBtnClick, this));
|
||||
},
|
||||
|
||||
show: function() {
|
||||
this.setPlaceholder();
|
||||
Common.UI.Window.prototype.show.apply(this, arguments);
|
||||
Common.Views.ExternalEditor.prototype.initialize.call(this, _options);
|
||||
},
|
||||
|
||||
setOleData: function(data) {
|
||||
|
@ -100,65 +65,6 @@ define([
|
|||
this.fireEvent('setoledata', this);
|
||||
},
|
||||
|
||||
setEditMode: function(mode) {
|
||||
this._isNewOle = !mode;
|
||||
},
|
||||
|
||||
isEditMode: function() {
|
||||
return !this._isNewOle;
|
||||
},
|
||||
|
||||
setControlsDisabled: function(disable) {
|
||||
this.btnSave.setDisabled(disable);
|
||||
this.btnCancel.setDisabled(disable);
|
||||
(disable) ? this.$window.find('.tool.close').addClass('disabled') : this.$window.find('.tool.close').removeClass('disabled');
|
||||
},
|
||||
|
||||
onDlgBtnClick: function(event) {
|
||||
if ( this.handler ) {
|
||||
this.handler.call(this, event.currentTarget.attributes['result'].value);
|
||||
return;
|
||||
}
|
||||
this.hide();
|
||||
},
|
||||
|
||||
onToolClose: function() {
|
||||
if ( this.handler ) {
|
||||
this.handler.call(this, 'cancel');
|
||||
return;
|
||||
}
|
||||
this.hide();
|
||||
},
|
||||
|
||||
setHeight: function(height) {
|
||||
if (height >= 0) {
|
||||
var min = parseInt(this.$window.css('min-height'));
|
||||
height < min && (height = min);
|
||||
this.$window.height(height);
|
||||
|
||||
var header_height = (this.initConfig.header) ? parseInt(this.$window.find('> .header').css('height')) : 0;
|
||||
|
||||
this.$window.find('> .body').css('height', height-header_height);
|
||||
this.$window.find('> .body > .box').css('height', height-85);
|
||||
|
||||
var top = (Common.Utils.innerHeight() - Common.Utils.InternalSettings.get('window-inactive-area-top') - parseInt(height)) / 2;
|
||||
var left = (Common.Utils.innerWidth() - parseInt(this.initConfig.width)) / 2;
|
||||
|
||||
this.$window.css('left',left);
|
||||
this.$window.css('top', Common.Utils.InternalSettings.get('window-inactive-area-top') + top);
|
||||
}
|
||||
},
|
||||
|
||||
setPlaceholder: function(placeholder) {
|
||||
this._placeholder = placeholder;
|
||||
},
|
||||
|
||||
getPlaceholder: function() {
|
||||
return this._placeholder;
|
||||
},
|
||||
|
||||
textSave: 'Save & Exit',
|
||||
textClose: 'Close',
|
||||
textTitle: 'Spreadsheet Editor'
|
||||
}, Common.Views.ExternalOleEditor || {}));
|
||||
});
|
||||
|
|
|
@ -123,9 +123,10 @@ define([
|
|||
'<div id="header-logo"><i></i></div>' +
|
||||
'</section>';
|
||||
|
||||
var templateTitleBox = '<section id="box-document-title">' +
|
||||
var templateTitleBox = '<section id="box-document-title">' +
|
||||
'<div class="extra"></div>' +
|
||||
'<div class="hedset">' +
|
||||
'<div class="btn-slot" id="slot-btn-dt-home"></div>' +
|
||||
'<div class="btn-slot" id="slot-btn-dt-save" data-layout-name="header-save"></div>' +
|
||||
'<div class="btn-slot" id="slot-btn-dt-print"></div>' +
|
||||
'<div class="btn-slot" id="slot-btn-dt-undo"></div>' +
|
||||
|
|
|
@ -207,6 +207,7 @@ define([
|
|||
type: 'password',
|
||||
showCls: (this.options.iconType==='svg' ? 'svg-icon' : 'toolbar__icon') + ' btn-sheet-view',
|
||||
hideCls: (this.options.iconType==='svg' ? 'svg-icon' : 'toolbar__icon') + ' hide-password',
|
||||
maxLength: this.options.maxPasswordLength,
|
||||
validateOnBlur: false,
|
||||
showPwdOnClick: true,
|
||||
validation : function(value) {
|
||||
|
|
|
@ -154,6 +154,8 @@ define([
|
|||
|
||||
this.$window.css('left',(maxWidth - width - borders_width) / 2);
|
||||
this.$window.css('top',(maxHeight - height - this._headerFooterHeight) / 2);
|
||||
|
||||
this._restoreHeight = this._restoreWidth = undefined;
|
||||
},
|
||||
|
||||
onWindowResize: function() {
|
||||
|
@ -162,26 +164,38 @@ define([
|
|||
win_width = this.getWidth(),
|
||||
win_height = this.getHeight(),
|
||||
bordersOffset = (this.resizable) ? 0 : this.bordersOffset;
|
||||
if (win_height<main_height-bordersOffset*2+0.1 && win_width<main_width-bordersOffset*2+0.1) {
|
||||
var left = this.getLeft(),
|
||||
top = this.getTop();
|
||||
|
||||
if (win_height<main_height-bordersOffset*2+0.1 ) {
|
||||
if (!this.resizable && this._restoreHeight>0 && win_height < this._restoreHeight) {
|
||||
var height = Math.max(Math.min(this._restoreHeight, main_height-bordersOffset*2), this.initConfig.minheight);
|
||||
this.setHeight(height);
|
||||
this.boxEl.css('height', height - this._headerFooterHeight);
|
||||
}
|
||||
var top = this.getTop();
|
||||
if (top<bordersOffset) this.$window.css('top', bordersOffset);
|
||||
else if (top+win_height>main_height-bordersOffset)
|
||||
this.$window.css('top', main_height-bordersOffset - win_height);
|
||||
} else {
|
||||
if (this._restoreHeight===undefined) {
|
||||
this._restoreHeight = win_height;
|
||||
}
|
||||
this.setHeight(Math.max(main_height-bordersOffset*2, this.initConfig.minheight));
|
||||
this.boxEl.css('height', Math.max(main_height-bordersOffset*2, this.initConfig.minheight) - this._headerFooterHeight);
|
||||
this.$window.css('top', bordersOffset);
|
||||
}
|
||||
if (win_width<main_width-bordersOffset*2+0.1) {
|
||||
if (!this.resizable && this._restoreWidth>0 && win_width < this._restoreWidth) {
|
||||
this.setWidth(Math.max(Math.min(this._restoreWidth, main_width-bordersOffset*2), this.initConfig.minwidth));
|
||||
}
|
||||
var left = this.getLeft();
|
||||
if (left<bordersOffset) this.$window.css('left', bordersOffset);
|
||||
else if (left+win_width>main_width-bordersOffset)
|
||||
this.$window.css('left', main_width-bordersOffset-win_width);
|
||||
} else {
|
||||
if (win_height>main_height-bordersOffset*2) {
|
||||
this.setHeight(Math.max(main_height-bordersOffset*2, this.initConfig.minheight));
|
||||
this.boxEl.css('height', Math.max(main_height-bordersOffset*2, this.initConfig.minheight) - this._headerFooterHeight);
|
||||
this.$window.css('top', bordersOffset);
|
||||
}
|
||||
if (win_width>main_width-bordersOffset*2) {
|
||||
this.setWidth(Math.max(main_width-bordersOffset*2, this.initConfig.minwidth));
|
||||
this.$window.css('left', bordersOffset);
|
||||
if (this._restoreWidth===undefined) {
|
||||
this._restoreWidth = win_width;
|
||||
}
|
||||
this.setWidth(Math.max(main_width-bordersOffset*2, this.initConfig.minwidth));
|
||||
this.$window.css('left', bordersOffset);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -74,14 +74,16 @@ define([
|
|||
_.extend(this, options);
|
||||
this._locked = false;
|
||||
this._state = {
|
||||
DisabledControls: false
|
||||
DisabledControls: false,
|
||||
docProtection: {
|
||||
isReadOnly: false,
|
||||
isReviewOnly: false,
|
||||
isFormsOnly: false,
|
||||
isCommentsOnly: false
|
||||
}
|
||||
};
|
||||
this.lockedControls = [];
|
||||
Common.UI.BaseView.prototype.initialize.call(this, arguments);
|
||||
|
||||
Common.NotificationCenter.on('app:ready', function (mode) {
|
||||
Common.Utils.asyncCall(this._onAppReady, this, mode);
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
render: function(el) {
|
||||
|
@ -153,6 +155,7 @@ define([
|
|||
if ( !this.storePlugins.isEmpty() ) {
|
||||
var me = this;
|
||||
var _group = $('<div class="group"></div>');
|
||||
var _set = Common.enumLock;
|
||||
this.storePlugins.each(function (model) {
|
||||
if (model.get('visible')) {
|
||||
var modes = model.get('variations'),
|
||||
|
@ -167,6 +170,7 @@ define([
|
|||
split: modes && modes.length > 1,
|
||||
value: guid,
|
||||
hint: model.get('name'),
|
||||
lock: model.get('isDisplayedInViewer') ? [_set.viewMode, _set.previewReviewMode, _set.viewFormMode, _set.selRangeEdit, _set.editFormula] : [_set.viewMode, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.selRangeEdit, _set.editFormula],
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
dataHintOffset: 'small'
|
||||
|
@ -179,6 +183,10 @@ define([
|
|||
me.lockedControls.push(btn);
|
||||
}
|
||||
});
|
||||
var docProtection = me._state.docProtection
|
||||
Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: me.lockedControls});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: me.lockedControls});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: me.lockedControls});
|
||||
|
||||
parent.html(_group);
|
||||
$('<div class="separator long"></div>').prependTo(parent);
|
||||
|
@ -204,6 +212,16 @@ define([
|
|||
}
|
||||
},
|
||||
|
||||
SetDisabled: function(disable, reviewMode, fillFormMode) {
|
||||
if (reviewMode) {
|
||||
Common.Utils.lockControls(Common.enumLock.previewReviewMode, disable, {array: this.lockedControls});
|
||||
} else if (fillFormMode) {
|
||||
Common.Utils.lockControls(Common.enumLock.viewFormMode, disable, {array: this.lockedControls});
|
||||
} else {
|
||||
Common.Utils.lockControls(Common.enumLock.viewMode, disable, {array: this.lockedControls});
|
||||
}
|
||||
},
|
||||
|
||||
openInsideMode: function(name, url, frameId) {
|
||||
if (!this.pluginsPanel) return false;
|
||||
|
||||
|
@ -289,9 +307,6 @@ define([
|
|||
this.loadMask.hide();
|
||||
},
|
||||
|
||||
_onAppReady: function (mode) {
|
||||
},
|
||||
|
||||
parseIcons: function(icons) {
|
||||
if (icons.length && typeof icons[0] !== 'string') {
|
||||
var theme = Common.UI.Themes.currentThemeId().toLowerCase(),
|
||||
|
@ -389,6 +404,7 @@ define([
|
|||
});
|
||||
});
|
||||
|
||||
var _set = Common.enumLock;
|
||||
var btn = new Common.UI.Button({
|
||||
cls: 'btn-toolbar x-huge icon-top',
|
||||
iconImg: icon_url,
|
||||
|
@ -397,6 +413,7 @@ define([
|
|||
split: _menu_items.length > 1,
|
||||
value: guid,
|
||||
hint: model.get('name'),
|
||||
lock: model.get('isDisplayedInViewer') ? [_set.viewMode, _set.previewReviewMode, _set.viewFormMode, _set.selRangeEdit, _set.editFormula] : [_set.viewMode, _set.previewReviewMode, _set.viewFormMode, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.selRangeEdit, _set.editFormula ],
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
dataHintOffset: 'small'
|
||||
|
|
|
@ -78,6 +78,9 @@ define([
|
|||
});
|
||||
});
|
||||
|
||||
this.btnPwd.on('click', function (b, e) {
|
||||
!b.pressed && me.fireEvent('protect:password', [b, 'delete']);
|
||||
});
|
||||
this.btnPwd.menu.on('item:click', function (menu, item, e) {
|
||||
me.fireEvent('protect:password', [menu, item.value]);
|
||||
});
|
||||
|
@ -132,6 +135,8 @@ define([
|
|||
cls: 'btn-toolbar x-huge icon-top',
|
||||
iconCls: 'toolbar__icon btn-ic-protect',
|
||||
caption: this.txtEncrypt,
|
||||
split: true,
|
||||
enableToggle: true,
|
||||
menu: true,
|
||||
visible: false,
|
||||
dataHint : '1',
|
||||
|
@ -172,7 +177,7 @@ define([
|
|||
if ( config.canProtect) {
|
||||
if ( config.isPasswordSupport) {
|
||||
me.btnAddPwd.updateHint(me.hintAddPwd);
|
||||
me.btnPwd.updateHint(me.hintPwd);
|
||||
me.btnPwd.updateHint([me.hintDelPwd, me.hintPwd]);
|
||||
|
||||
me.btnPwd.setMenu(
|
||||
new Common.UI.Menu({
|
||||
|
@ -342,6 +347,7 @@ define([
|
|||
}
|
||||
}, this);
|
||||
this.btnPwd.setVisible(hasPassword);
|
||||
this.btnPwd.toggle(hasPassword, true);
|
||||
},
|
||||
|
||||
txtEncrypt: 'Encrypt',
|
||||
|
@ -353,7 +359,8 @@ define([
|
|||
txtDeletePwd: 'Delete password',
|
||||
txtAddPwd: 'Add password',
|
||||
txtInvisibleSignature: 'Add digital signature',
|
||||
txtSignatureLine: 'Add Signature line'
|
||||
txtSignatureLine: 'Add Signature line',
|
||||
hintDelPwd: 'Delete password'
|
||||
}
|
||||
}()), Common.Views.Protection || {}));
|
||||
});
|
|
@ -238,6 +238,10 @@ define([
|
|||
me.fireEvent('comment:resolveComments', [item.value]);
|
||||
});
|
||||
}
|
||||
Common.NotificationCenter.on('protect:doclock', function (e) {
|
||||
me.fireEvent('protect:update');
|
||||
});
|
||||
me.fireEvent('protect:update');
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -259,7 +263,7 @@ define([
|
|||
caption: this.txtAccept,
|
||||
split: !this.appConfig.canUseReviewPermissions,
|
||||
iconCls: 'toolbar__icon btn-review-save',
|
||||
lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect],
|
||||
lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview],
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
dataHintOffset: 'small'
|
||||
|
@ -271,7 +275,7 @@ define([
|
|||
caption: this.txtReject,
|
||||
split: !this.appConfig.canUseReviewPermissions,
|
||||
iconCls: 'toolbar__icon btn-review-deny',
|
||||
lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect],
|
||||
lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview],
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
dataHintOffset: 'small'
|
||||
|
@ -284,7 +288,7 @@ define([
|
|||
caption: this.txtCompare,
|
||||
split: true,
|
||||
iconCls: 'toolbar__icon btn-compare',
|
||||
lock: [_set.hasCoeditingUsers, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect],
|
||||
lock: [_set.hasCoeditingUsers, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments],
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
dataHintOffset: 'small'
|
||||
|
@ -294,7 +298,7 @@ define([
|
|||
this.btnTurnOn = new Common.UI.Button({
|
||||
cls: 'btn-toolbar x-huge icon-top',
|
||||
iconCls: 'toolbar__icon btn-ic-review',
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect],
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview],
|
||||
caption: this.txtTurnon,
|
||||
split: !this.appConfig.isReviewOnly,
|
||||
enableToggle: true,
|
||||
|
@ -309,7 +313,7 @@ define([
|
|||
this.btnPrev = new Common.UI.Button({
|
||||
cls: 'btn-toolbar x-huge icon-top',
|
||||
iconCls: 'toolbar__icon btn-review-prev',
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect],
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments],
|
||||
caption: this.txtPrev,
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
|
@ -320,7 +324,7 @@ define([
|
|||
this.btnNext = new Common.UI.Button({
|
||||
cls: 'btn-toolbar x-huge icon-top',
|
||||
iconCls: 'toolbar__icon btn-review-next',
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect],
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments],
|
||||
caption: this.txtNext,
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
|
@ -336,7 +340,7 @@ define([
|
|||
this.btnReviewView = new Common.UI.Button({
|
||||
cls: 'btn-toolbar x-huge icon-top',
|
||||
iconCls: 'toolbar__icon btn-ic-reviewview',
|
||||
lock: [_set.viewFormMode, _set.lostConnect],
|
||||
lock: [_set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments],
|
||||
caption: this.txtView,
|
||||
menu: new Common.UI.Menu({
|
||||
cls: 'ppm-toolbar',
|
||||
|
@ -404,7 +408,7 @@ define([
|
|||
this.btnCoAuthMode = new Common.UI.Button({
|
||||
cls: 'btn-toolbar x-huge icon-top',
|
||||
iconCls: 'toolbar__icon btn-ic-coedit',
|
||||
lock: [_set.viewFormMode, _set.lostConnect],
|
||||
lock: [_set.viewFormMode, _set.lostConnect, _set.docLockView],
|
||||
caption: this.txtCoAuthMode,
|
||||
menu: true,
|
||||
dataHint: '1',
|
||||
|
@ -445,12 +449,13 @@ define([
|
|||
}
|
||||
|
||||
if ( this.appConfig.canCoAuthoring && this.appConfig.canComments ) {
|
||||
this.canComments = true; // fix for loading protected document
|
||||
this.btnCommentRemove = new Common.UI.Button({
|
||||
cls: 'btn-toolbar x-huge icon-top',
|
||||
caption: this.txtCommentRemove,
|
||||
split: true,
|
||||
iconCls: 'toolbar__icon btn-rem-comment',
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect],
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect, _set.docLockView, _set.docLockForms],
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
dataHintOffset: 'small'
|
||||
|
@ -461,15 +466,13 @@ define([
|
|||
caption: this.txtCommentResolve,
|
||||
split: true,
|
||||
iconCls: 'toolbar__icon btn-resolve-all',
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect],
|
||||
lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect, _set.docLockView, _set.docLockForms],
|
||||
dataHint: '1',
|
||||
dataHintDirection: 'bottom',
|
||||
dataHintOffset: 'small'
|
||||
});
|
||||
this.lockedControls.push(this.btnCommentResolve);
|
||||
}
|
||||
|
||||
Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this));
|
||||
},
|
||||
|
||||
render: function (el) {
|
||||
|
@ -658,7 +661,7 @@ define([
|
|||
}
|
||||
|
||||
var separator_sharing = !(me.btnSharing || me.btnCoAuthMode) ? me.$el.find('.separator.sharing') : '.separator.sharing',
|
||||
separator_comments = !(config.canComments && config.canCoAuthoring) ? me.$el.find('.separator.comments') : '.separator.comments',
|
||||
separator_comments = !(me.btnCommentRemove || me.btnCommentResolve) ? me.$el.find('.separator.comments') : '.separator.comments',
|
||||
separator_review = !(config.canReview || config.canViewReview) ? me.$el.find('.separator.review') : '.separator.review',
|
||||
separator_compare = !(config.canReview && config.canFeatureComparison) ? me.$el.find('.separator.compare') : '.separator.compare',
|
||||
separator_chat = !me.btnChat ? me.$el.find('.separator.chat') : '.separator.chat',
|
||||
|
@ -692,8 +695,7 @@ define([
|
|||
if (!me.btnHistory && separator_last)
|
||||
me.$el.find(separator_last).hide();
|
||||
|
||||
Common.NotificationCenter.trigger('tab:visible', 'review', (config.isEdit || config.canViewReview || config.canCoAuthoring && config.canComments) && Common.UI.LayoutManager.isElementVisible('toolbar-collaboration'));
|
||||
|
||||
Common.NotificationCenter.trigger('tab:visible', 'review', (config.isEdit || config.canViewReview || me.canComments) && Common.UI.LayoutManager.isElementVisible('toolbar-collaboration'));
|
||||
setEvents.call(me);
|
||||
});
|
||||
},
|
||||
|
@ -731,7 +733,7 @@ define([
|
|||
var button = new Common.UI.Button({
|
||||
cls : 'btn-toolbar',
|
||||
iconCls : 'toolbar__icon btn-ic-review',
|
||||
lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect],
|
||||
lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments, Common.enumLock.docLockReview],
|
||||
hintAnchor : 'top',
|
||||
hint : this.tipReview,
|
||||
split : !this.appConfig.isReviewOnly,
|
||||
|
@ -778,7 +780,7 @@ define([
|
|||
button = new Common.UI.Button({
|
||||
cls: 'btn-toolbar',
|
||||
iconCls: 'toolbar__icon btn-ic-docspell',
|
||||
lock: [Common.enumLock.viewMode, Common.enumLock.viewFormMode, Common.enumLock.previewReviewMode],
|
||||
lock: [Common.enumLock.viewMode, Common.enumLock.viewFormMode, Common.enumLock.previewReviewMode, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments],
|
||||
hintAnchor : 'top',
|
||||
hint: this.tipSetSpelling,
|
||||
enableToggle: true,
|
||||
|
@ -794,7 +796,7 @@ define([
|
|||
button = new Common.UI.Button({
|
||||
cls: 'btn-toolbar',
|
||||
iconCls: 'toolbar__icon btn-ic-doclang',
|
||||
lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.noSpellcheckLangs, Common.enumLock.lostConnect],
|
||||
lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.noSpellcheckLangs, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments],
|
||||
hintAnchor : 'top',
|
||||
hint: this.tipSetDocLang,
|
||||
dataHint: '0',
|
||||
|
@ -973,6 +975,7 @@ define([
|
|||
this.options.tpl = _.template(this.template)(this.options);
|
||||
this.popoverChanges = this.options.popoverChanges;
|
||||
this.mode = this.options.mode;
|
||||
this.docProtection = this.options.docProtection;
|
||||
|
||||
var filter = Common.localStorage.getKeysFilter();
|
||||
this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : '';
|
||||
|
@ -983,6 +986,7 @@ define([
|
|||
render: function() {
|
||||
Common.UI.Window.prototype.render.call(this);
|
||||
|
||||
var _set = Common.enumLock;
|
||||
this.btnPrev = new Common.UI.Button({
|
||||
cls: 'dlg-btn iconic',
|
||||
iconCls: 'img-commonctrl prev',
|
||||
|
@ -1003,7 +1007,8 @@ define([
|
|||
cls : 'btn-toolbar',
|
||||
caption : this.txtAccept,
|
||||
split : true,
|
||||
disabled : this.mode.isReviewOnly || !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"),
|
||||
disabled : this.mode.isReviewOnly || this.docProtection.isReviewOnly || !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"),
|
||||
lock : [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview],
|
||||
menu : this.mode.canUseReviewPermissions ? false : new Common.UI.Menu({
|
||||
items: [
|
||||
this.mnuAcceptCurrent = new Common.UI.MenuItem({
|
||||
|
@ -1023,7 +1028,7 @@ define([
|
|||
cls : 'btn-toolbar',
|
||||
caption : this.txtReject,
|
||||
split : true,
|
||||
disabled : this.mode.isReviewOnly || !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"),
|
||||
lock : [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview],
|
||||
menu : this.mode.canUseReviewPermissions ? false : new Common.UI.Menu({
|
||||
items: [
|
||||
this.mnuRejectCurrent = new Common.UI.MenuItem({
|
||||
|
@ -1038,6 +1043,13 @@ define([
|
|||
})
|
||||
});
|
||||
this.btnReject.render(this.$window.find('#id-review-button-reject'));
|
||||
var arr = [this.btnAccept, this.btnReject];
|
||||
Common.Utils.lockControls(Common.enumLock.isReviewOnly, this.mode.isReviewOnly, {array: arr});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockView, this.docProtection.isReadOnly, {array: arr});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockForms, this.docProtection.isFormsOnly, {array: arr});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockReview, this.docProtection.isReviewOnly, {array: arr});
|
||||
Common.Utils.lockControls(Common.enumLock.docLockComments, this.docProtection.isCommentsOnly, {array: arr});
|
||||
Common.Utils.lockControls(Common.enumLock.reviewChangelock, !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"), {array: arr});
|
||||
|
||||
var me = this;
|
||||
this.btnPrev.on('click', function (e) {
|
||||
|
|
|
@ -63,10 +63,7 @@ define([
|
|||
}, options || {});
|
||||
|
||||
this.template = [
|
||||
'<div class="box" style="height: 260px;">',
|
||||
'<div class="input-row">',
|
||||
'<label>' + this.textInfo + '</label>',
|
||||
'</div>',
|
||||
'<div class="box" style="height: 250px;">',
|
||||
'<div class="input-row">',
|
||||
'<label>' + this.textInfoName + '</label>',
|
||||
'</div>',
|
||||
|
@ -125,6 +122,7 @@ define([
|
|||
});
|
||||
|
||||
me.textareaInstructions = this.$window.find('textarea');
|
||||
me.textareaInstructions.val(this.textDefInstruction);
|
||||
me.textareaInstructions.keydown(function (event) {
|
||||
if (event.keyCode == Common.UI.Keys.RETURN) {
|
||||
event.stopPropagation();
|
||||
|
@ -136,7 +134,8 @@ define([
|
|||
this.chDate = new Common.UI.CheckBox({
|
||||
el: $('#id-dlg-sign-settings-date'),
|
||||
labelText: this.textShowDate,
|
||||
disabled: this.type=='view'
|
||||
disabled: this.type=='view',
|
||||
value: 'checked'
|
||||
});
|
||||
|
||||
$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this));
|
||||
|
@ -198,13 +197,14 @@ define([
|
|||
},
|
||||
|
||||
textInfo: 'Signer Info',
|
||||
textInfoName: 'Name',
|
||||
textInfoTitle: 'Signer Title',
|
||||
textInfoEmail: 'E-mail',
|
||||
textInstructions: 'Instructions for Signer',
|
||||
textInfoName: 'Suggested signer',
|
||||
textInfoTitle: 'Suggested signer\'s title',
|
||||
textInfoEmail: 'Suggested signer\'s e-mail',
|
||||
textInstructions: 'Instructions for signer',
|
||||
txtEmpty: 'This field is required',
|
||||
textAllowComment: 'Allow signer to add comment in the signature dialog',
|
||||
textShowDate: 'Show sign date in signature line',
|
||||
textTitle: 'Signature Setup'
|
||||
textTitle: 'Signature Setup',
|
||||
textDefInstruction: 'Before signing this document, verify that the content you are signing is correct.'
|
||||
}, Common.Views.SignSettingsDialog || {}))
|
||||
});
|
After Width: | Height: | Size: 168 B |
Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 169 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/big/smart-art.png
Normal file
After Width: | Height: | Size: 431 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/btn-home.png
Normal file
After Width: | Height: | Size: 338 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 310 B After Width: | Height: | Size: 185 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/btn-rotate-down.png
Normal file
After Width: | Height: | Size: 173 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/btn-rotate-up.png
Normal file
After Width: | Height: | Size: 174 B |
After Width: | Height: | Size: 297 B |
After Width: | Height: | Size: 292 B |
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 204 B |
After Width: | Height: | Size: 166 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/btn-text.png
Normal file
After Width: | Height: | Size: 168 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/smart-cycle.png
Normal file
After Width: | Height: | Size: 351 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/smart-hierarchy.png
Normal file
After Width: | Height: | Size: 158 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/smart-list.png
Normal file
After Width: | Height: | Size: 135 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/smart-matrix.png
Normal file
After Width: | Height: | Size: 153 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/smart-process.png
Normal file
After Width: | Height: | Size: 206 B |
BIN
apps/common/main/resources/img/toolbar/1.25x/smart-pyramid.png
Normal file
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 478 B |
After Width: | Height: | Size: 189 B |
Before Width: | Height: | Size: 315 B After Width: | Height: | Size: 191 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/big/smart-art.png
Normal file
After Width: | Height: | Size: 462 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/btn-home.png
Normal file
After Width: | Height: | Size: 360 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 328 B After Width: | Height: | Size: 195 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/btn-rotate-down.png
Normal file
After Width: | Height: | Size: 185 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/btn-rotate-up.png
Normal file
After Width: | Height: | Size: 191 B |
After Width: | Height: | Size: 329 B |
After Width: | Height: | Size: 346 B |
Before Width: | Height: | Size: 296 B After Width: | Height: | Size: 219 B |
After Width: | Height: | Size: 164 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/btn-text.png
Normal file
After Width: | Height: | Size: 163 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/smart-cycle.png
Normal file
After Width: | Height: | Size: 400 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/smart-hierarchy.png
Normal file
After Width: | Height: | Size: 168 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/smart-list.png
Normal file
After Width: | Height: | Size: 136 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/smart-matrix.png
Normal file
After Width: | Height: | Size: 166 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/smart-process.png
Normal file
After Width: | Height: | Size: 365 B |
BIN
apps/common/main/resources/img/toolbar/1.5x/smart-pyramid.png
Normal file
After Width: | Height: | Size: 150 B |
After Width: | Height: | Size: 562 B |
After Width: | Height: | Size: 187 B |
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 193 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/big/smart-art.png
Normal file
After Width: | Height: | Size: 548 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/btn-home.png
Normal file
After Width: | Height: | Size: 417 B |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 351 B After Width: | Height: | Size: 214 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/btn-rotate-down.png
Normal file
After Width: | Height: | Size: 201 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/btn-rotate-up.png
Normal file
After Width: | Height: | Size: 199 B |
After Width: | Height: | Size: 392 B |
After Width: | Height: | Size: 390 B |
Before Width: | Height: | Size: 330 B After Width: | Height: | Size: 244 B |
After Width: | Height: | Size: 168 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/btn-text.png
Normal file
After Width: | Height: | Size: 170 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/smart-cycle.png
Normal file
After Width: | Height: | Size: 441 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/smart-hierarchy.png
Normal file
After Width: | Height: | Size: 182 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/smart-list.png
Normal file
After Width: | Height: | Size: 139 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/smart-matrix.png
Normal file
After Width: | Height: | Size: 167 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/smart-process.png
Normal file
After Width: | Height: | Size: 363 B |
BIN
apps/common/main/resources/img/toolbar/1.75x/smart-pyramid.png
Normal file
After Width: | Height: | Size: 161 B |
After Width: | Height: | Size: 712 B |
|
@ -25,7 +25,7 @@
|
|||
}
|
||||
{{/spritesheet}}
|
||||
{{#sprites}}
|
||||
{{#parselang name}}.x-huge .{{name}}{{/parselang}},
|
||||
{{#parselang name}}.x-huge .{{name}}{{/parselang}}:not(.menu__icon),
|
||||
.toolbar__icon-big.{{name}}
|
||||
{
|
||||
background-position: 0 {{px.offset_y}};
|
||||
|
|
After Width: | Height: | Size: 165 B |
Before Width: | Height: | Size: 276 B After Width: | Height: | Size: 168 B |
BIN
apps/common/main/resources/img/toolbar/1x/big/smart-art.png
Normal file
After Width: | Height: | Size: 371 B |