Merge pull request 'Merge branch hotfix/v9.0.3 into develop' (#368) from hotfix/v9.0.3 into develop

Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/desktop-apps/pulls/368
This commit is contained in:
Oleg Kozhukharenko
2025-07-10 07:27:59 +00:00
43 changed files with 668 additions and 58 deletions

View File

@ -120,7 +120,13 @@ l10n.de = {
tplDocument: "Dokumente",
tplSpreadsheet: "Tabellen",
tplPresentation: "Präsentationen",
tplSearch: "Vorlagen suchen",
tplSearchResult: "Ergebnisse für",
tplNoResultsTitle: "Keine Ergebnisse gefunden",
tplNoResultsText: "Keine passenden Ergebnisse für Ihre Suchanfrage gefunden",
colFileName: "Dateiname",
colLocation: 'Standort',
colLastOpened: 'Zuletzt geöffnet',
labelDropFile: 'Dateien hierher ziehen oder',
labelSelectFile: 'Datei auswählen',
}

View File

@ -125,6 +125,7 @@ l10n.en_GB = {
tplSearchResult: "Results for",
tplNoResultsTitle: "Nothing found",
tplNoResultsText: "No results matching your query could be found",
tplErrorTLS: "Windows XP doesn't support current TLS 1.1 and TLS 1.2 protocol versions, so Cloud Templates cannot be used on this operating system.",
colFileName: "File name",
colLocation: 'Location',
colLastOpened: 'Last opened',

View File

@ -120,7 +120,13 @@ l10n.es = {
tplDocument: "Documentos",
tplSpreadsheet: "Hojas de cálculo",
tplPresentation: "Presentaciones",
tplSearch: "Buscar plantillas",
tplSearchResult: "Resultados para",
tplNoResultsTitle: "No se ha encontrado nada",
tplNoResultsText: "No se han encontrado resultados que coincidan con su búsqueda",
colFileName: "Nombre de archivo",
colLocation: 'Ubicación',
colLastOpened: 'Última apertura',
labelDropFile: 'Arrastre los archivos aquí o',
labelSelectFile: 'Seleccione el archivo',
}

View File

@ -120,7 +120,13 @@ l10n.fr = {
tplDocument: "Documents",
tplSpreadsheet: "Feuilles de calcul",
tplPresentation: "Présentations",
tplSearch: "Rechercher des modèles",
tplSearchResult: "Résultats pour",
tplNoResultsTitle: "Aucun résultat trouvé",
tplNoResultsText: "Aucun résultat correspondant à votre demande n'a pu être trouvé",
colFileName: "Nom de fichier",
colLocation: 'Emplacement',
colLastOpened: 'Récemment ouvert',
labelDropFile: 'Glissez vos fichiers ici ou',
labelSelectFile: 'Sélectionnez le fichier',
}

View File

@ -120,7 +120,13 @@ l10n.it_IT = {
tplDocument: "Documenti",
tplSpreadsheet: "Fogli elettronici",
tplPresentation: "Presentazioni",
tplSearch: "Cerca modelli",
tplSearchResult: "Risultati per",
tplNoResultsTitle: "Nessun risultato trovato",
tplNoResultsText: "Nessun risultato corrispondente alla tua ricerca",
colFileName: "Nome del file",
colLocation: 'Posizione',
colLastOpened: 'Ultima apertura',
labelDropFile: 'Trascina i tuoi file qui oppure',
labelSelectFile: 'Seleziona file',
}

View File

@ -120,7 +120,13 @@ l10n.ja = {
tplDocument: "ドキュメント",
tplSpreadsheet: "スプレッドシート",
tplPresentation: "プレゼンテーション",
tplSearch: "テンプレートを検索",
tplSearchResult: "検索結果",
tplNoResultsTitle: "何も見つかりませんでした",
tplNoResultsText: "検索条件に一致する結果が見つかりませんでした",
colFileName: "ファイル名",
colLocation: '位置',
colLastOpened: '最終閲覧',
labelDropFile: 'ファイルをここにドラッグするか',
labelSelectFile: 'ファイルを選択',
}

View File

@ -120,7 +120,13 @@ l10n.pt_BR = {
tplDocument: "Documentos",
tplSpreadsheet: "Planilhas",
tplPresentation: "Apresentações",
tplSearch: "Pesquisar modelos",
tplSearchResult: "Resultados para",
tplNoResultsTitle: "Nada encontrado",
tplNoResultsText: "Nenhum resultado correspondente à sua consulta foi encontrado",
colFileName: "Nome do arquivo",
colLocation: 'Localização',
colLastOpened: 'Última abertura',
labelDropFile: 'Arraste seus arquivos aqui ou',
labelSelectFile: 'Selecione o arquivo',
}

View File

@ -120,7 +120,13 @@ l10n.ro = {
tplDocument: "Documente",
tplSpreadsheet: "Foi de calcul",
tplPresentation: "Prezentări",
tplSearch: "Căutare modele",
tplSearchResult: "Rezultate pentru",
tplNoResultsTitle: "Nu a fost găsit nimic",
tplNoResultsText: "Niciun rezultat găsit care să corespundă criteriilor căutării dvs",
colFileName: "Numele fișierului",
colLocation: 'Locația',
colLastOpened: 'Deschis recent',
labelDropFile: 'Glisați fișierele aici sau',
labelSelectFile: 'Selectare fișier',
}

View File

@ -120,7 +120,14 @@ l10n.ru = {
tplDocument: "Документы",
tplSpreadsheet: "Таблицы",
tplPresentation: "Презентации",
tplSearch: "Поиск шаблонов",
tplSearchResult: "Результаты для",
tplNoResultsTitle: "Ничего не найдено",
tplNoResultsText: "Результатов, соответствующих вашему запросу, не найдено",
tplErrorTLS: "Windows XP не поддерживает актуальные версии протокола TLS 1.1 и 1.2, поэтому облачные шаблоны не могут использоваться в этой операционной системе.",
fileName: "Имя файла",
location: "Расположение",
lastOpened: "Последнее открытие"
lastOpened: "Последнее открытие",
labelDropFile: 'Перетащите файлы сюда или',
labelSelectFile: 'Выберите файл',
}

View File

@ -120,7 +120,13 @@ l10n.sr_Cyrl_RS = {
tplDocument: "Документи",
tplSpreadsheet: "Прорачунске табеле",
tplPresentation: "Презентације",
tplSearch: "Претражи шаблоне",
tplSearchResult: "Резултати за",
tplNoResultsTitle: "Ништа није пронађено",
tplNoResultsText: "Нема резултата који одговарају вашем упиту",
colFileName: "Назив фајла",
colLocation: 'Локација',
colLastOpened: 'Последње отворено',
labelDropFile: 'Преувлачите фајлове овде или',
labelSelectFile: 'Изаберите фајл',
}

View File

@ -120,7 +120,13 @@ l10n.sr_Latn_RS = {
tplDocument: "Dokumenti",
tplSpreadsheet: "Proračunske tabele",
tplPresentation: "Prezentacije",
tplSearch: "Pretraži šablone",
tplSearchResult: "Rezultati za",
tplNoResultsTitle: "Ništa nije pronađeno",
tplNoResultsText: "Nema rezultata koji odgovaraju vašem upitu",
colFileName: "Naziv fajla",
colLocation: 'Lokacija',
colLastOpened: 'Poslednje otvoreno',
labelDropFile: 'Prevucite fajlove ovde ili',
labelSelectFile: 'Izaberite fajl',
}

View File

@ -120,7 +120,13 @@ l10n.zh_CN = {
tplDocument: "文档",
tplSpreadsheet: "表格",
tplPresentation: "演示文稿",
tplSearch: "搜索模板",
tplSearchResult: "搜索:",
tplNoResultsTitle: "未找到结果",
tplNoResultsText: "未找到相关结果",
colFileName: "文件名",
colLocation: '位置',
colLastOpened: '最近文档',
labelDropFile: '将文件拖拽到此处,或',
labelSelectFile: '选择文件',
}

View File

@ -0,0 +1,6 @@
<svg width="24" height="30" viewBox="0 0 24 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.5 2.5a2 2 0 0 1 2-2h13.283a1 1 0 0 1 .71.296l4.665 4.71a1 1 0 0 1 .29.701l.048 21.289a2 2 0 0 1-2 2.004H3.5a2 2 0 0 1-2-2z" fill="#fff" stroke="#BBB"/>
<path d="M16.5.5V5A1.5 1.5 0 0 0 18 6.5h4.5" stroke="#BBB"/>
<path d="M6.5 15h5a.5.5 0 0 0 .5-.5v-5a.47.47 0 0 1 .5-.48 6 6 0 1 1-6.48 6.48.47.47 0 0 1 .48-.5" fill="#FAC299"/>
<path d="M5.5 13c-.276 0-.503-.225-.475-.5a5 5 0 0 1 4.476-4.475c.275-.028.499.199.499.475v4a.5.5 0 0 1-.5.5z" fill="#F36700"/>
</svg>

After

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -41,6 +41,7 @@
--text-link: #acbfff;
--text-inverse: #333;
--text-contrast-background: #fff;
--text-negative: #F87171;
--icon-normal: fade(#fff, 80%);

View File

@ -562,6 +562,10 @@ input[type="radio"] {
p { margin: 0; }
button { margin-top: 12px; }
}
.win_xp & {
display: block;
}
}
// Document creation grid
@ -605,14 +609,14 @@ input[type="radio"] {
position: absolute;
top: 14px;
left: 10px;
padding: 4px 6px 6px;
padding: 0 6px;
border-radius: 6px;
background: conic-gradient(from 225deg at 50% 50%, var(--format-bg-start) 0deg, var(--format-bg-end) 360deg);
span {
color: @text-contrast-background;
font-size: 16px;
line-height: 16px;
line-height: 28px;
font-weight: 700;
}

View File

@ -381,7 +381,7 @@ li.menu-item {
.file-list-head, .file-list-body .row {
display: grid;
gap: 8px;
grid-template-columns: clamp(160px, calc(33vw - 250px), 500px) clamp(248px, calc(33vw - 100px), 650px) minmax(100px, 156px);
grid-template-columns: minmax(250px, 65fr) minmax(200px, 35fr) 130px;
align-items: center;
justify-content: space-between;
padding-left: 16px;
@ -390,10 +390,6 @@ li.menu-item {
padding-left: 56px;
padding-right: 16px;
}
@media (max-width: 1054px) {
grid-template-columns: 1fr 1fr 1fr;
}
}
.file-list-head {
@ -466,7 +462,8 @@ li.menu-item {
}
.col-location {
height: 24px;
height: 32px;
line-height: 32px;
text-align: left;
white-space: nowrap;
overflow: hidden;
@ -478,6 +475,7 @@ li.menu-item {
.col-date {
height: 24px;
line-height: 24px;
justify-content: flex-end;
}
@ -719,6 +717,14 @@ li.menu-item {
}
}
> * {
margin-bottom: 40px;
}
> *:last-child {
margin-bottom: 0;
}
.file-list-head,
.file-list-body .row {
> * {
@ -790,6 +796,7 @@ li.menu-item {
padding: 12px 16px 0; // 16px inner + outer 32px
overflow-x: auto;
min-height: 184px;
overflow-y: hidden;
@media(max-width: 1280px) {
padding-right: 48px;
@ -817,6 +824,11 @@ li.menu-item {
font-size: 18px;
line-height: 16px;
}
.win_xp & {
margin-left: auto;
margin-right: auto;
}
}
#box-container {
@ -839,6 +851,22 @@ li.menu-item {
&.empty {
display: none;
}
@media (max-width: 1037px) {
.file-list-head {
grid-template-columns: minmax(250px, 1fr) 130px;
}
.file-list-body .row {
grid-template-columns: minmax(250px, 1fr) 130px;
}
.file-list-body, .file-list-head {
.col-location {
display: none;
}
}
}
}
#box-recovery {
@ -895,9 +923,9 @@ li.menu-item {
}
.cicon {
padding: 0 0 0 10px;
padding: 0 0 0 8px;
text-align: center;
width: 55px;
width: 47px;
.rtl & {
padding: 0 10px 0 0;
@ -905,13 +933,17 @@ li.menu-item {
}
.cell-tools {
width: 45px;
width: 38px;
padding: 0 8px 0 0;
overflow: visible;
.hlayout {
justify-content: flex-end;
}
.btn-quick.more {
margin: 0 5px 0 0px;
}
}
}
@ -1241,6 +1273,10 @@ li.menu-item {
.format-from-index(48);
}
&.odg {
.format-from-index(49);
}
&.folder {
height: 24px;
width: 28px;
@ -2170,7 +2206,7 @@ li.menu-item {
#idx-about-version {
font-size: 14px;
margin: -4px 0;
margin: 4px 0 -4px;
}
#idx-btn-addtheme {

View File

@ -158,10 +158,11 @@ l10n.en = {
tplSearchResult: "Results for",
tplNoResultsTitle: "Nothing found",
tplNoResultsText: "No results matching your query could be found",
tplErrorTLS: "Windows XP doesn't support current TLS 1.1 and TLS 1.2 protocol versions, so Cloud Templates cannot be used on this operating system.",
colFileName: "File name",
colLocation: 'Location',
colLastOpened: 'Last opened',
labelDropFile: 'Drag you files here or',
labelDropFile: 'Drag your files here or',
labelSelectFile: 'Select file',
}
@ -242,7 +243,13 @@ function changelang(lang) {
};
function is_lang_rtl(code) {
return code.startsWith('ar') || code.startsWith('he');
const langs = ['ar', 'he', 'ur'];
for (const l of langs) {
if (code.startsWith(l))
return true;
}
return false;
}
+function mixLocale(lang) {

View File

@ -134,13 +134,24 @@ Menu.prototype.showUnderElem = function(el, data, align) {
let $el = $('#'+this.id);
const $rel = $(el);
// const $rel.width();
const pos = $rel.offset();
pos.top += $rel.height() + 2;
const $dd = $el.find('.dropdown-menu');
if ( align == 'right' )
pos.left -= $dd.outerWidth() - $rel.outerWidth();
let topPos = pos.top + $rel.outerHeight() + 2;
const dropdownHeight = $dd.outerHeight();
const viewportHeight = $(window).height();
const scrollTop = $(window).scrollTop();
if ((topPos + dropdownHeight) > (viewportHeight + scrollTop)) {
topPos = pos.top - dropdownHeight - 2;
}
pos.top = topPos;
if (align === 'right') {
pos.left = pos.left - ($dd.outerWidth() - $rel.outerWidth());
}
$el.css(pos);
$dd.dropdown('toggle');

View File

@ -215,7 +215,7 @@
</div>
</td>
<td class="row-cell">
<p class="cportal primary">${utils.skipUrlProtocol(info.portal)}</p>
<p class="cportal primary" title="${info.portal}">${utils.skipUrlProtocol(info.portal)}</p>
<p class="cuser minor">${info.user}${info.email.length && (' (' + info.email + ')') || ''}</p>
</td>
<td class="cell-tools">
@ -383,7 +383,7 @@
let el = this.view.$sidebarPortalList.find('#' + model.uid);
el.html(
$(this.view.portaltemplate({
portal: model.name,
portal: model.path,
iconid: _create_icon_id(model.provider),
iconsrc: _get_icon_scr(model.provider),
themeicons: _get_theme_icons(model.provider),
@ -400,7 +400,7 @@
collection.events.inserted.attach((collection, model) => {
let $listPortals = collection.view.find('.table-files.list');
let $item = $(this.view.portaltemplate({
portal: model.name,
portal: model.path,
iconid: _create_icon_id(model.provider),
iconsrc: _get_icon_scr(model.provider),
themeicons: _get_theme_icons(model.provider),
@ -433,6 +433,18 @@
collection.events.click.attach((collection, model)=>{
_on_context_menu(undefined, 'portal:open', model);
// TODO: doubful variant to check portal availability on click instead of on launch
if ( model.get('exists') === undefined )
(new DialogConnect).portalexists(model.path, model.provider)
.then(data => {
model.set('exists', true)
// data.status == 'success' && _is_logged && model.set('logged', true);
}, error => {
$('#' + model.uid, this.view.$sidebarPortalList).toggleClass('unavail', true);
model.set('logged', false)
model.set('exists', false)
});
});
collection.events.contextmenu.attach((collection, model, e)=>{
@ -465,15 +477,17 @@
let model = collection.find('name', i);
if (model) {
model.set('logged', false)
// TODO: doubful variant to check portal availability on click instead of on launch
model.set('logged', obj[i].length > 0)
const _is_logged = obj[i].length > 0;
(new DialogConnect).portalexists(model.path, model.provider)
.then(data => {
data.status == 'success' && _is_logged && model.set('logged', true);
}, error => {
$('#' + model.uid, this.view.$sidebarPortalList).toggleClass('unavail', true);
});
// model.set('logged', false)
// const _is_logged = obj[i].length > 0;
// (new DialogConnect).portalexists(model.path, model.provider)
// .then(data => {
// data.status == 'success' && _is_logged && model.set('logged', true);
// }, error => {
// $('#' + model.uid, this.view.$sidebarPortalList).toggleClass('unavail', true);
// });
}
};
};

View File

@ -69,7 +69,7 @@
<svg class="icon" data-iconname="plugin" data-precls="tool-icon">
<use href="#plugin"></use>
</svg>
${!isSvgIcons ? '<i class="icon tool-icon plugin"></i>`' : ''}
${!isSvgIcons ? '<i class="icon tool-icon plugin"></i>' : ''}
</div>
<span class="text" l10n>${args.itemtext}</span>
</a>

View File

@ -128,6 +128,7 @@
let id = !!info.uid ? (` id="${info.uid}"`) : '';
info.crypted === undefined && (info.crypted = false);
const dotIndex = info.name.lastIndexOf('.');
const fullName = info.name;
if (dotIndex !== -1) {
info.ext = info.name.substring(dotIndex);
info.name = info.name.substring(0, dotIndex);
@ -140,7 +141,7 @@
//language=HTML
let _tpl = `
<div ${id} class="row text-normal">
<div class="col-name">
<div class="col-name" title="${fullName}">
<div class="icon">
<svg class="icon" data-iconname="${info.type === 'folder' ? 'folder' : `${info.format}`}" data-precls="tool-icon">
<use xlink:href="#${info.type === 'folder' ? 'folder-small' : info.format}"></use>
@ -153,7 +154,7 @@
<p class="name">${info.name}</p>
<span class="ext">${info.ext}</span>
</div>
<div class="col-location">
<div class="col-location" title="${info.descr}">
<!-- todo: icon here -->
${info.descr}
</div>
@ -327,9 +328,16 @@
}
};
function addContextMenuEventListener(collection, model, view) {
function addContextMenuEventListener(collection, model, view, actionList) {
$(`#${model.uid}-more-btn`, view).click((e) => {
e.stopPropagation();
if (Menu.opened) {
Menu.closeAll();
return;
}
ppmenu.actionlist = actionList;
ppmenu.showUnderElem(e.currentTarget, model, $('body').hasClass('rtl') ? 'left' : 'right');
})
}
@ -352,7 +360,7 @@
collection.list.append($item);
addContextMenuEventListener(collection, model, this.view.$panel);
addContextMenuEventListener(collection, model, this.view.$panel, 'recent');
collection.list.parent().removeClass('empty');
});
@ -387,7 +395,7 @@
});
collectionRecovers.events.inserted.attach((collection, model)=>{
collection.list.append( this.view.listitemtemplate(model) );
addContextMenuEventListener(collection, model, this.view.$panel);
addContextMenuEventListener(collection, model, this.view.$panel, 'recovery');
});
collectionRecovers.events.click.attach((collection, model)=>{
openFile(OPEN_FILE_RECOVERY, model);
@ -584,7 +592,6 @@
}
],
onDocumentSelect: (docType) => {
console.log(docType)
window.sdk.command("create:new", docType);
}
});

View File

@ -385,7 +385,7 @@ document.getElementById('wrap').ondragover = function (e) {
$(document).on('keydown', function(e){
if ( e.ctrlKey && e.which == 79 ) {
if ($('.action-panel').filter('.recent, .open, .welcome').is(':visible')) {
if ($('.action-panel').filter('.recents, .open, .welcome').is(':visible')) {
openFile(OPEN_FILE_FOLDER, '');
}
}

View File

@ -127,8 +127,11 @@
`<svg class="icon cloud-icon" data-iconname="location-local" data-precls="tool-icon">
<use href="#location-local"></use>
</svg>`;
const icon_el = !info.icon ? `<svg class='icon'><use xlink:href='#template-item'></use></svg>`:
`<div class="box"><img src="${info.icon}">${badge}</div>`;
const icon_el = !info.icon ? `<svg class='icon icon--default'><use xlink:href='#template-item'></use></svg>
<div class="box"><img>${badge}</div>` :
`<div class="box"><img src="${info.icon}">${badge}</div>`;
return `<div id="${info.uid}" class='item' data-type="${type}">
<div class="wrapper">
${icon_el}
@ -176,7 +179,7 @@
let $item, isprepend = false;
if ( model instanceof Array ) {
const items = model;
$item = [], isprepend = true;
$item = [], isprepend = !items[0].isCloud;
items.forEach(m => {
$item.push($(this.view.listitemtemplate(m)));
});
@ -221,6 +224,14 @@
}));
}
});
collection.events.changed.attach((collection, m, v) => {
if ( v && v.icon ) {
const $el = $(`#${m.uid}`, collection.list);
$el.find('svg.icon--default').hide();
$el.find('.box img').attr('src', m.icon);
}
});
};
setupCollection(this.templates);
}
@ -245,7 +256,7 @@
const _on_add_local_templates = function(tmpls) {
const _func_ = () => {
this.templates.emptyLocal();
// this.templates.emptyLocal();
let items = [];
// [...tmpls]
@ -255,11 +266,20 @@
const type = utils.formatToEditor(item.type);
if (['word', 'cell', 'slide', 'pdf'].includes(type)) {
// this.templates.add(new FileTemplateModel(item));
items.push(new FileTemplateModel(item));
const m = this.templates.find('path', item.path);
if ( !m ) {
items.push(new FileTemplateModel(item));
} else {
if ( !m.icon && item.icon ) {
m.set('icon', item.icon);
}
}
}
});
this.templates.add(items);
if ( items.length )
this.templates.add(items);
};
// if ( this.timer_id )
@ -277,6 +297,7 @@
};
const _on_add_cloud_templates = function(data) {
let items = [];
data.forEach(i => {
const info = i['attributes'];
if ( !info['form_exts']['data'].length ) return;
@ -284,7 +305,8 @@
const file_ext = info['form_exts']['data'][0]['attributes']['ext'],
id = i.id;
if (!this.templates.items.some(t => t.uid === id)) {
this.templates.add(new FileTemplateModel({
const m = new FileTemplateModel({
uid: id,
name: info['name_form'],
descr: info['template_desc'],
@ -292,9 +314,15 @@
type: utils.fileExtensionToFileFormat(file_ext),
icon: info.template_image ? info.template_image.data.attributes.formats.thumbnail.url : undefined,
isCloud: true,
}));
});
items.push(m);
// this.templates.add(m);
}
});
if ( items.length )
this.templates.add(items);
}
const applyFilter = function($panel) {
@ -346,6 +374,12 @@
}
}
})
.catch (function (err) {
console.error(err);
if (window.utils.isWinXp) {
console.warn(utils.Lang.tplErrorTLS)
}
})
};
const loadAllPages = function() {

View File

@ -122,6 +122,10 @@
return _clouds;
};
sdk.setRecentFilePinned = function(id, value) {
this.command('recent:pinned', JSON.stringify({id:id, pinned:value}));
}
sdk.encrypt = {
ENCRYPT_MODE_NONE: 0,
ENCRYPT_MODE_SIMPLE: 1,

View File

@ -201,6 +201,7 @@ utils.defines.FileFormat = {
FILE_PRESENTATION_POTM: FILE_PRESENTATION + 0x0008,
FILE_PRESENTATION_ODP_FLAT: FILE_PRESENTATION + 0x0009,
FILE_PRESENTATION_OTP: FILE_PRESENTATION + 0x000a,
FILE_PRESENTATION_ODG: FILE_PRESENTATION + 0x000c,
FILE_PRESENTATION_KEY: FILE_PRESENTATION + 0x000d,
FILE_SPREADSHEET: FILE_SPREADSHEET,
@ -293,6 +294,7 @@ utils.parseFileFormat = function(format) {
case utils.defines.FileFormat.FILE_PRESENTATION_POTM: return 'potm';
case utils.defines.FileFormat.FILE_PRESENTATION_ODP_FLAT: return 'fodp';
case utils.defines.FileFormat.FILE_PRESENTATION_KEY: return 'key';
case utils.defines.FileFormat.FILE_PRESENTATION_ODG: return 'odg';
case utils.defines.FileFormat.FILE_CROSSPLATFORM_PDFA:
case utils.defines.FileFormat.FILE_CROSSPLATFORM_PDF: return 'pdf';

Binary file not shown.

View File

@ -0,0 +1,167 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ONLYOFFICE Release Notes</title>
<style type="text/css">
/* variables */
:root {
--color-black: #141923;
--color-white: #fff;
--color-gray-100: #f7fafc;
--color-gray-200: #edf2f7;
--color-gray-300: #e2e8f0;
--color-gray-400: #cbd5e0;
--color-gray-500: #a0aec0;
--color-gray-600: #718096;
--color-gray-700: #4a5568;
--color-gray-800: #2d3748;
--color-gray-900: #1a202c;
}
body {
background: var(--color-white);
color: var(--color-gray-800);
font: 12px "Lucida Grande", "Lucida Sans Unicode", Verdana, Lucida, Helvetica, sans-serif;
}
h1, h2, h3 {
color: var(--color-gray-800);
font-weight: normal;
font-style: normal;
}
h1 {
font-size: 1.7em;
}
h2 {
font-size: 1.4em;
font-weight: lighter;
}
h4 {
font-size: 1.2em;
font-weight: lighter;
}
code {
background: var(--color-gray-200);
font-family: monospace;
padding: 1px 5px;
}
ul {
padding: 8.1.3 20px;
}
li {
margin-left: 20px;
margin-bottom: 0.2em;
padding: 0;
}
hr {
margin: 20px 0;
border: var(--color-gray-400) solid 0.5px;
}
.releasedate {
color: var(--color-gray-600);
font-weight: lighter;
}
/* prefers light mode */
@media (prefers-color-scheme: dark) {
body {
background: var(--color-gray-900);
color: var(--color-gray-200);
}
h1, h2, h3 {
color: var(--color-white);
}
code {
background: var(--color-gray-800);
color: var(--color-gray-200);
}
.releasedate {
color: var(--color-gray-600);
}
}
</style>
</head>
<body>
<div class="version">
<h1>ONLYOFFICE 9.0.3<span class="releasedate"> - {{DATE}}</span></h1>
<h2>Fixes</h2>
<h4>All Editors</h4>
<ul>
<li>The display of the cursor and text selection is now limited by the size of the object/shape</li>
<li>Fixed some icons for Modern themes when the interface scale is higher than 200%</li>
<li>Improved appearance of the autoshape Merge/Flip icons for the Modern themes</li>
<li>Fixed the application freezes on the first launch during the template preview generation process</li>
<li>Fixed the ability to paste code in the Macros window</li>
<li>Fixed work of the Open existing file (Open Document) shortcut on the Home page</li>
<li>Improved display of icons for Clouds connection on the main page of the application</li>
<li>Changed the font for the Urdu Interface language</li>
<li>Fixed pausing when connecting to the portal if the debug window is open</li>
</ul>
<h4>Document Editor</h4>
<ul>
<li>Fixed stopping work of the editor when editing footer in some <code>DOCX</code> files</li>
<li>Fixed errors during Compare/Combine/Text from file operations with files containing images</li>
<li>Fixed a crash when restoring a placeholder with a list when deleting Content Control content</li>
<li>Fixed significant increasing of the file size due to including CJK fonts when exporting to <code>PDF</code></li>
<li>Fixed auto-detection of the document language in the text with the Text Direction > RTL option</li>
</ul>
<h4>Spreadsheet Editor</h4>
<ul>
<li>Fixed stopping work of the editor when trying to reference a cell with a formula</li>
<li>Fixed appearing the #NAME error in the final file when using a custom function and exporting to <code>PDF</code></li>
<li>Fixed a problem with saving custom function to a file</li>
<li>Fixed an issue with autofitting row height when changing column width if Wrap Text is applied to a cell</li>
<li>Fixed display of the Zoom option value in the bottom toolbar in RTL UI with the Sheet RTL option disabled</li>
<li>Fixed the incorrect position of the percent sign in the status bar for Zoom with Chinese (Simplified)</li>
<li>Fixed stopping work of the application when exporting a spreadsheet to <code>PDF</code></li>
</ul>
<h4>Presentation Editor</h4>
<ul>
<li>Fixed stopping work of the editor when applying some animations from the Emphasis Effects section to an image</li>
<li>Fixed the editor crash when deleting slides sequentially from preview panel</li>
<li>Fixed stopping work of the editor when copying all content on the slide in some <code>PPTX</code> files</li>
<li>Fixed incorrect translations of tools in the Draw menu of the Presenter View window</li>
<li>Fixed changing word order in the bidirectional text when opening some <code>PPTX</code> files in the application</li>
</ul>
<h4>Forms</h4>
<ul>
<li>Fixed stopping work of the editor after applying the TextArt setting to the Signature field</li>
<li>Fixed stopping work of the editor when restoring a file connection after a long period of inactivity</li>
<li>Fixed cursor change for Content Control buttons</li>
<li>Fixed missing the Clear Fields icons in the form viewing mode for the Modern themes</li>
</ul>
<h4>PDF Editor</h4>
<ul>
<li>Fixed stopping work of the editor when performing Cut/Paste operations simultaneously on the thumbnail panel</li>
<li>Fixed display of the text after breaking and restoring a session when working with some <code>PDF</code> files</li>
<li>Fixed saving form field settings when there are no other changes in the editor</li>
<li>Blocked the ability to change the contents of the document when the connection is lost</li>
<li>Fixed an error when trying to copy page contents from the thumbnail panel for <code>XPS/DjVu</code> formats</li>
<li>Blocked the ability to display of the form field titles in the embedded mode</li>
<li>Fixed display of the form field highlight when undoing and redoing actions</li>
<li>Fixed blocking the ability to enter text immediately after inserting a Text Comment</li>
<li>Fixed an error that occurred in the application when quickly opening several documents one after another</li>
</ul>
<h4>Diagram</h4>
<ul>
<li>Fixed display of the slide in the working area when opening some <code>VSTX</code> files</li>
</ul>
<h4>Convert</h4>
<ul>
<li>Fixed crash when converting some <code>DOCX</code> files to an image</li>
<li>Fixed crash when converting some <code>HWP</code> files to the binary format</li>
<li>Fixed endless conversion of some <code>HWP</code> files to the binary format</li>
<li>Fixed endless conversion of some <code>DOC</code> files to the binary format</li>
<li>Fixed the appearance of an error when opening the result of converting some <code>HWP</code> files to <code>DOCX</code> in third-party editors</li>
<li>Fixed crash when converting some <code>DOC</code> files to the binary format</li>
<li>Fixed the appearance of an error when opening the result of converting some <code>XLS</code> files to <code>XLSX</code> in third-party editors</li>
<li>Fixed crash when converting some <code>DOCX</code> files to the binary format</li>
<li>Fixed the difference in display of autoshapes after converting some <code>VSDX</code> files to <code>PNG</code></li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,167 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>История изменений ONLYOFFICE</title>
<style type="text/css">
/* variables */
:root {
--color-black: #141923;
--color-white: #fff;
--color-gray-100: #f7fafc;
--color-gray-200: #edf2f7;
--color-gray-300: #e2e8f0;
--color-gray-400: #cbd5e0;
--color-gray-500: #a0aec0;
--color-gray-600: #718096;
--color-gray-700: #4a5568;
--color-gray-800: #2d3748;
--color-gray-900: #1a202c;
}
body {
background: var(--color-white);
color: var(--color-gray-800);
font: 12px "Lucida Grande", "Lucida Sans Unicode", Verdana, Lucida, Helvetica, sans-serif;
}
h1, h2, h3 {
color: var(--color-gray-800);
font-weight: normal;
font-style: normal;
}
h1 {
font-size: 1.7em;
}
h2 {
font-size: 1.4em;
font-weight: lighter;
}
h4 {
font-size: 1.2em;
font-weight: lighter;
}
code {
background: var(--color-gray-200);
font-family: monospace;
padding: 1px 5px;
}
ul {
padding: 8.1.3 20px;
}
li {
margin-left: 20px;
margin-bottom: 0.2em;
padding: 0;
}
hr {
margin: 20px 0;
border: var(--color-gray-400) solid 0.5px;
}
.releasedate {
color: var(--color-gray-600);
font-weight: lighter;
}
/* prefers light mode */
@media (prefers-color-scheme: dark) {
body {
background: var(--color-gray-900);
color: var(--color-gray-200);
}
h1, h2, h3 {
color: var(--color-white);
}
code {
background: var(--color-gray-800);
color: var(--color-gray-200);
}
.releasedate {
color: var(--color-gray-600);
}
}
</style>
</head>
<body>
<div class="version">
<h1>ONLYOFFICE 9.0.3<span class="releasedate"> - {{DATE}}</span></h1>
<h2>Fixes</h2>
<h4>All Editors</h4>
<ul>
<li>The display of the cursor and text selection is now limited by the size of the object/shape</li>
<li>Fixed some icons for Modern themes when the interface scale is higher than 200%</li>
<li>Improved appearance of the autoshape Merge/Flip icons for the Modern themes</li>
<li>Fixed the application freezes on the first launch during the template preview generation process</li>
<li>Fixed the ability to paste code in the Macros window</li>
<li>Fixed work of the Open existing file (Open Document) shortcut on the Home page</li>
<li>Improved display of icons for Clouds connection on the main page of the application</li>
<li>Changed the font for the Urdu Interface language</li>
<li>Fixed pausing when connecting to the portal if the debug window is open</li>
</ul>
<h4>Document Editor</h4>
<ul>
<li>Fixed stopping work of the editor when editing footer in some <code>DOCX</code> files</li>
<li>Fixed errors during Compare/Combine/Text from file operations with files containing images</li>
<li>Fixed a crash when restoring a placeholder with a list when deleting Content Control content</li>
<li>Fixed significant increasing of the file size due to including CJK fonts when exporting to <code>PDF</code></li>
<li>Fixed auto-detection of the document language in the text with the Text Direction > RTL option</li>
</ul>
<h4>Spreadsheet Editor</h4>
<ul>
<li>Fixed stopping work of the editor when trying to reference a cell with a formula</li>
<li>Fixed appearing the #NAME error in the final file when using a custom function and exporting to <code>PDF</code></li>
<li>Fixed a problem with saving custom function to a file</li>
<li>Fixed an issue with autofitting row height when changing column width if Wrap Text is applied to a cell</li>
<li>Fixed display of the Zoom option value in the bottom toolbar in RTL UI with the Sheet RTL option disabled</li>
<li>Fixed the incorrect position of the percent sign in the status bar for Zoom with Chinese (Simplified)</li>
<li>Fixed stopping work of the application when exporting a spreadsheet to <code>PDF</code></li>
</ul>
<h4>Presentation Editor</h4>
<ul>
<li>Fixed stopping work of the editor when applying some animations from the Emphasis Effects section to an image</li>
<li>Fixed the editor crash when deleting slides sequentially from preview panel</li>
<li>Fixed stopping work of the editor when copying all content on the slide in some <code>PPTX</code> files</li>
<li>Fixed incorrect translations of tools in the Draw menu of the Presenter View window</li>
<li>Fixed changing word order in the bidirectional text when opening some <code>PPTX</code> files in the application</li>
</ul>
<h4>Forms</h4>
<ul>
<li>Fixed stopping work of the editor after applying the TextArt setting to the Signature field</li>
<li>Fixed stopping work of the editor when restoring a file connection after a long period of inactivity</li>
<li>Fixed cursor change for Content Control buttons</li>
<li>Fixed missing the Clear Fields icons in the form viewing mode for the Modern themes</li>
</ul>
<h4>PDF Editor</h4>
<ul>
<li>Fixed stopping work of the editor when performing Cut/Paste operations simultaneously on the thumbnail panel</li>
<li>Fixed display of the text after breaking and restoring a session when working with some <code>PDF</code> files</li>
<li>Fixed saving form field settings when there are no other changes in the editor</li>
<li>Blocked the ability to change the contents of the document when the connection is lost</li>
<li>Fixed an error when trying to copy page contents from the thumbnail panel for <code>XPS/DjVu</code> formats</li>
<li>Blocked the ability to display of the form field titles in the embedded mode</li>
<li>Fixed display of the form field highlight when undoing and redoing actions</li>
<li>Fixed blocking the ability to enter text immediately after inserting a Text Comment</li>
<li>Fixed an error that occurred in the application when quickly opening several documents one after another</li>
</ul>
<h4>Diagram</h4>
<ul>
<li>Fixed display of the slide in the working area when opening some <code>VSTX</code> files</li>
</ul>
<h4>Convert</h4>
<ul>
<li>Fixed crash when converting some <code>DOCX</code> files to an image</li>
<li>Fixed crash when converting some <code>HWP</code> files to the binary format</li>
<li>Fixed endless conversion of some <code>HWP</code> files to the binary format</li>
<li>Fixed endless conversion of some <code>DOC</code> files to the binary format</li>
<li>Fixed the appearance of an error when opening the result of converting some <code>HWP</code> files to <code>DOCX</code> in third-party editors</li>
<li>Fixed crash when converting some <code>DOC</code> files to the binary format</li>
<li>Fixed the appearance of an error when opening the result of converting some <code>XLS</code> files to <code>XLSX</code> in third-party editors</li>
<li>Fixed crash when converting some <code>DOCX</code> files to the binary format</li>
<li>Fixed the difference in display of autoshapes after converting some <code>VSDX</code> files to <code>PNG</code></li>
</ul>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -68,7 +68,7 @@
#define VER_FILEDESCRIPTION_STR "ONLYOFFICE Editors\0"
#define VER_PRODUCTNAME_STR "ONLYOFFICE Editors\0"
#define VER_COMPANYNAME_STR "Ascensio System SIA\0"
#define VER_LEGALCOPYRIGHT_STR "Copyright (C) Ascensio System SIA " TO_STR(COPYRIGHT_YEAR) ". All rights reserved\0"
#define VER_LEGALCOPYRIGHT_STR "© Ascensio System SIA " TO_STR(COPYRIGHT_YEAR) ". All rights reserved.\0"
#define VER_COMPANYDOMAIN_STR "www.onlyoffice.com\0"
#define VER_INTERNALNAME_STR "AppIcons\0"

View File

@ -68,7 +68,7 @@
#define VER_FILEDESCRIPTION_STR "ONLYOFFICE Update Service\0"
#define VER_PRODUCTNAME_STR "ONLYOFFICE Update Service\0"
#define VER_COMPANYNAME_STR "Ascensio System SIA\0"
#define VER_LEGALCOPYRIGHT_STR "Copyright (C) Ascensio System SIA " TO_STR(COPYRIGHT_YEAR) ". All rights reserved\0"
#define VER_LEGALCOPYRIGHT_STR "© Ascensio System SIA " TO_STR(COPYRIGHT_YEAR) ". All rights reserved.\0"
#define VER_COMPANYDOMAIN_STR "www.onlyoffice.com\0"
#define VER_INTERNALNAME_STR "AppIcons\0"

View File

@ -9,7 +9,7 @@
#define sAppPublisher "Ascensio System SIA"
#define sAppPublisherURL "https://www.onlyoffice.com/"
#define sAppSupportURL "https://www.onlyoffice.com/support.aspx"
#define sAppCopyright str("Copyright (C) " + sAppPublisher + " " + GetDateTimeString("yyyy",,) + ". All rights reserved")
#define sAppCopyright str("© " + sAppPublisher + " " + GetDateTimeString("yyyy",,) + ". All rights reserved.")
#define sAppIconName "ONLYOFFICE"
#define sOldAppIconName "ONLYOFFICE Editors"
#define sAppProtocol 'oo-office'

View File

@ -482,6 +482,15 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE
std::wstring param = L"{\"quickaccesschanged\":" + pData->get_Param() + L"}";
QMetaObject::invokeMethod(it->second, "onWebTitleChanged", Qt::QueuedConnection, Q_ARG(int, sid), Q_ARG(std::wstring, param));
}
} else
if ( !(cmd.find(L"recent:pinned") == std::wstring::npos) ) {
QJsonParseError jerror;
QJsonDocument jdoc = QJsonDocument::fromJson(QString::fromStdWString(pData->get_Param()).toUtf8(), &jerror);
if( jerror.error == QJsonParseError::NoError ) {
QJsonObject objRoot = jdoc.object();
SetRecentPin(objRoot["id"].toInt(), objRoot["pinned"].toBool(false));
}
}
break; }

View File

@ -34,6 +34,7 @@ namespace NSTheme {
static const QString theme_type_light = "light";
enum class ThemeType {
ttUndef,
ttDark,
ttLight
};
@ -183,6 +184,16 @@ auto getUserThemesPath() -> QString
class CTheme::CThemePrivate {
public:
CThemePrivate() {}
CThemePrivate(const CThemePrivate &other) :
id(other.id),
wstype(other.wstype),
type(other.type),
is_system(other.is_system),
jsonValues(other.jsonValues),
defdark(other.defdark),
deflight(other.deflight),
source_file(other.source_file)
{}
auto fromJsonObject(const QJsonObject& obj) -> void {
id = obj.value("id").toString().toStdWString();
@ -221,7 +232,7 @@ public:
std::wstring id;
std::wstring wstype;
NSTheme::ThemeType type;
NSTheme::ThemeType type = NSTheme::ThemeType::ttUndef;
bool is_system{false};
QJsonObject jsonValues;
@ -467,6 +478,16 @@ CTheme::CTheme(const QString& path)
fromFile(path);
}
CTheme::CTheme(const CTheme &other)
: m_priv(new CThemePrivate(*other.m_priv))
{}
CTheme::CTheme(CTheme &&other) noexcept
: m_priv(other.m_priv)
{
other.m_priv = nullptr;
}
CTheme::~CTheme()
{
if ( m_priv ) {
@ -475,6 +496,27 @@ CTheme::~CTheme()
}
}
CTheme& CTheme::operator=(const CTheme &other)
{
if (this != &other) {
if (m_priv)
delete m_priv;
m_priv = new CThemePrivate(*other.m_priv);
}
return *this;
}
CTheme& CTheme::operator=(CTheme &&other) noexcept
{
if (this != &other) {
if (m_priv)
delete m_priv;
m_priv = other.m_priv;
other.m_priv = nullptr;
}
return *this;
}
auto CTheme::fromFile(const QString& path) -> bool
{
QFile _file(path);
@ -578,6 +620,11 @@ auto CTheme::isSystem() const -> bool
return m_priv->is_system;
}
auto CTheme::isValid() const -> bool
{
return !m_priv->id.empty() && m_priv->type != NSTheme::ThemeType::ttUndef && !m_priv->jsonValues.isEmpty();
}
/**/
CThemes::CThemes()
@ -609,6 +656,16 @@ auto CThemes::defaultLight() -> const CTheme&
return *m_priv->getDefault(NSTheme::ThemeType::ttLight);
}
auto CThemes::localFromId(const QString &id) const -> CTheme
{
CTheme theme;
auto it = m_priv->rc_themes.find(id);
if (it != m_priv->rc_themes.end()) {
theme.fromFile(it->second);
}
return theme;
}
auto CThemes::setCurrentTheme(const std::wstring& name) -> void
{
if ( !isThemeCurrent(name) && m_priv->setCurrent(QString::fromStdWString(name), true) ) {

View File

@ -71,6 +71,13 @@ public:
, ecrTabThemeType
};
CTheme(const CTheme &other);
CTheme(CTheme &&other) noexcept;
~CTheme();
CTheme& operator=(const CTheme&);
CTheme& operator=(CTheme&&) noexcept;
auto fromFile(const QString&) -> bool;
auto fromJson(const QString&) -> bool;
@ -84,10 +91,10 @@ public:
auto value(ColorRole, const std::wstring& def = L"") const -> std::wstring;
auto isDark() const -> bool;
auto isSystem() const -> bool;
auto isValid() const -> bool;
private:
CTheme(const QString& id = QString());
~CTheme();
CTheme(const QString& path = QString());
class CThemePrivate;
CThemePrivate * m_priv = nullptr;
@ -104,6 +111,7 @@ public:
auto current() -> const CTheme&;
auto defaultDark() -> const CTheme&;
auto defaultLight() -> const CTheme&;
auto localFromId(const QString &id) const -> CTheme;
// auto addLocalTheme(const std::wstring&) -> bool;
auto addLocalTheme(QJsonObject&, const QString& filepath) -> bool;

View File

@ -66,7 +66,7 @@ void CMainWindowImpl::refreshAboutVersion()
#else
_json_obj["appname"] = WINDOW_NAME;
#endif
_json_obj["rights"] = "© " ABOUT_COPYRIGHT_STR;
_json_obj["rights"] = ABOUT_COPYRIGHT_STR;
_json_obj["link"] = URL_SITE;
// _json_obj["changelog"] = "https://github.com/ONLYOFFICE/DesktopEditors/blob/master/CHANGELOG.md";

View File

@ -62,7 +62,7 @@
#endif
#define VER_COMPANYNAME_STR "Ascensio System SIA\0"
#define VER_LEGALCOPYRIGHT_STR "Copyright (C) Ascensio System SIA " TO_STR(COPYRIGHT_YEAR) ". All rights reserved\0"
#define VER_LEGALCOPYRIGHT_STR "© Ascensio System SIA " TO_STR(COPYRIGHT_YEAR) ". All rights reserved.\0"
#define VER_COMPANYDOMAIN_STR "www.onlyoffice.com\0"
#define ABOUT_COPYRIGHT_STR VER_LEGALCOPYRIGHT_STR
#define VER_FILEDESCRIPTION_STR "ONLYOFFICE Desktop Editors\0"

View File

@ -920,13 +920,19 @@ void CMainWindow::onPortalUITheme(int viewid, const std::wstring& json)
if (index < 0 || m_pTabs->panel(index)->data()->isViewType(cvwtEditor))
return;
const QString id = QString::fromStdWString(json);
CTheme tm = AscAppManager::themes().localFromId(id);
if (tm.isValid()) {
const QString color = QString::fromStdWString(tm.value(CTheme::ColorRole::ecrTabSimpleActiveBackground));
m_pTabs->setTabTheme(index, tm.isDark() ? "dark" : "light", color);
} else
if ( json.rfind(L"default-", 0) == 0 ) {
if ( json.compare(L"default-dark") == 0 )
m_pTabs->setTabTheme(index, "dark", "#333");
else m_pTabs->setTabTheme(index, "light", "#fff");
} else {
QJsonParseError jerror;
QJsonDocument jdoc = QJsonDocument::fromJson(QString::fromStdWString(json).toLatin1(), &jerror);
QJsonDocument jdoc = QJsonDocument::fromJson(QString::fromStdWString(json).toUtf8(), &jerror);
if( jerror.error == QJsonParseError::NoError ) {
QJsonObject objRoot = jdoc.object();

View File

@ -111,7 +111,8 @@ void CWindowPlatform::adjustGeometry()
void CWindowPlatform::onWindowActivate(bool is_active)
{
for (auto *btn : m_pTopButtons) {
btn->setFaded(!is_active);
if (btn)
btn->setFaded(!is_active);
}
}

View File

@ -332,7 +332,8 @@ bool CWindowPlatform::isSessionInProgress()
void CWindowPlatform::onWindowActivate(bool is_active)
{
for (auto *btn : m_pTopButtons) {
btn->setFaded(!is_active);
if (btn)
btn->setFaded(!is_active);
}
}