diff --git a/apps/common/main/lib/util/htmlutils.js b/apps/common/main/lib/util/htmlutils.js
index 77392abde..d75a54d0a 100644
--- a/apps/common/main/lib/util/htmlutils.js
+++ b/apps/common/main/lib/util/htmlutils.js
@@ -88,9 +88,11 @@ if ( !!params.uitheme && checkLocalStorage && !localStorage.getItem("ui-theme-id
}
var ui_theme_name = checkLocalStorage && localStorage.getItem("ui-theme-id") ? localStorage.getItem("ui-theme-id") : params.uitheme;
+var ui_theme_type;
if ( !ui_theme_name ) {
if ( window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ) {
ui_theme_name = 'theme-dark';
+ ui_theme_type = 'dark';
checkLocalStorage && localStorage.removeItem("ui-theme");
}
}
@@ -100,7 +102,7 @@ if ( !!ui_theme_name ) {
if ( checkLocalStorage ) {
let current_theme = localStorage.getItem("ui-theme");
- if ( !!current_theme && /type":\s*"dark/.test(current_theme) ) {
+ if ( !!current_theme && /type":\s*"dark/.test(current_theme) || ui_theme_type == 'dark' ) {
document.body.classList.add("theme-type-dark");
let content_theme = localStorage.getItem("content-theme");
diff --git a/apps/common/mobile/lib/controller/Themes.js b/apps/common/mobile/lib/controller/Themes.js
index 768fdf9bf..2c076a15f 100644
--- a/apps/common/mobile/lib/controller/Themes.js
+++ b/apps/common/mobile/lib/controller/Themes.js
@@ -12,6 +12,51 @@ class ThemesController {
id: 'theme-light',
type: 'light'
}};
+
+ this.name_colors = [
+ "canvas-background",
+ "canvas-content-background",
+ "canvas-page-border",
+
+ "canvas-ruler-background",
+ "canvas-ruler-border",
+ "canvas-ruler-margins-background",
+ "canvas-ruler-mark",
+ "canvas-ruler-handle-border",
+ "canvas-ruler-handle-border-disabled",
+
+ "canvas-high-contrast",
+ "canvas-high-contrast-disabled",
+
+ "canvas-cell-border",
+ "canvas-cell-title-border",
+ "canvas-cell-title-border-hover",
+ "canvas-cell-title-border-selected",
+ "canvas-cell-title-hover",
+ "canvas-cell-title-selected",
+
+ "canvas-dark-cell-title",
+ "canvas-dark-cell-title-hover",
+ "canvas-dark-cell-title-selected",
+ "canvas-dark-cell-title-border",
+ "canvas-dark-cell-title-border-hover",
+ "canvas-dark-cell-title-border-selected",
+ "canvas-dark-content-background",
+ "canvas-dark-page-border",
+
+ "canvas-scroll-thumb",
+ "canvas-scroll-thumb-hover",
+ "canvas-scroll-thumb-pressed",
+ "canvas-scroll-thumb-border",
+ "canvas-scroll-thumb-border-hover",
+ "canvas-scroll-thumb-border-pressed",
+ "canvas-scroll-arrow",
+ "canvas-scroll-arrow-hover",
+ "canvas-scroll-arrow-pressed",
+ "canvas-scroll-thumb-target",
+ "canvas-scroll-thumb-target-hover",
+ "canvas-scroll-thumb-target-pressed",
+ ];
}
init() {
@@ -41,6 +86,16 @@ class ThemesController {
return !!obj ? JSON.parse(obj).type === 'dark' : false;
}
+ get_current_theme_colors(colors) {
+ let out_object = {};
+ const style = getComputedStyle(document.body);
+ colors.forEach((item, index) => {
+ out_object[item] = style.getPropertyValue('--' + item).trim()
+ })
+
+ return out_object;
+ }
+
switchDarkTheme(dark) {
const theme = typeof dark == 'object' ? dark : this.themes_map[dark ? 'dark' : 'light'];
const refresh_only = !!arguments[1];
@@ -53,7 +108,11 @@ class ThemesController {
$body.addClass(`theme-type-${theme.type}`);
const on_engine_created = api => {
- api.asc_setSkin(theme.id);
+ let obj = this.get_current_theme_colors(this.name_colors);
+ obj.type = theme.type;
+ obj.name = theme.id;
+
+ api.asc_setSkin(obj);
};
const api = Common.EditorApi ? Common.EditorApi.get() : undefined;
diff --git a/apps/common/mobile/resources/less/colors-table-dark.less b/apps/common/mobile/resources/less/colors-table-dark.less
index e97d2d9a0..972f85d49 100644
--- a/apps/common/mobile/resources/less/colors-table-dark.less
+++ b/apps/common/mobile/resources/less/colors-table-dark.less
@@ -33,12 +33,53 @@
--image-border-types-filter: invert(100%) brightness(4);
- --canvas-content-background: #fff;
-
--active-opacity-word: fade(#446995, 20%);
--active-opacity-slide: fade(#AA5252, 20%);
--active-opacity-cell: fade(#40865C, 20%);
--image-border-types-filter: invert(100%) brightness(4);
+
+ // Canvas
+
+ --canvas-background: #555;
+ --canvas-content-background: #fff;
+ --canvas-page-border: #555;
+
+ --canvas-ruler-background: #555;
+ --canvas-ruler-border: #2A2A2A;
+ --canvas-ruler-margins-background: #444;
+ --canvas-ruler-mark: #b6b6b6;
+ --canvas-ruler-handle-border: #b6b6b6;
+ --canvas-ruler-handle-border-disabled: #808080;
+
+ --canvas-high-contrast: #fff;
+ --canvas-high-contrast-disabled: #ccc;
+
+ --canvas-cell-border: fade(#000, 10%);
+ --canvas-cell-title-border: #757575;
+ --canvas-cell-title-border-hover: #858585;
+ --canvas-cell-title-border-selected: #9e9e9e;
+ --canvas-cell-title-hover: #787878;
+ --canvas-cell-title-selected: #939393;
+
+ --canvas-dark-cell-title: #111;
+ --canvas-dark-cell-title-hover: #000;
+ --canvas-dark-cell-title-selected: #333;
+ --canvas-dark-cell-title-border: #282828;
+ --canvas-dark-cell-title-border-hover: #191919;
+ --canvas-dark-cell-title-border-selected: #474747;
+
+ --canvas-scroll-thumb: #404040;
+ --canvas-scroll-thumb-hover: #999;
+ --canvas-scroll-thumb-pressed: #adadad;
+ --canvas-scroll-thumb-border: #2a2a2a;
+ --canvas-scroll-thumb-border-hover: #999;
+ --canvas-scroll-thumb-border-pressed: #adadad;
+ --canvas-scroll-arrow: #999;
+ --canvas-scroll-arrow-hover: #404040;
+ --canvas-scroll-arrow-pressed: #404040;
+ --canvas-scroll-thumb-target: #999;
+ --canvas-scroll-thumb-target-hover: #404040;
+ --canvas-scroll-thumb-target-pressed: #404040;
}
}
\ No newline at end of file
diff --git a/apps/common/mobile/resources/less/colors-table.less b/apps/common/mobile/resources/less/colors-table.less
index 0ce2667ca..331ca6779 100644
--- a/apps/common/mobile/resources/less/colors-table.less
+++ b/apps/common/mobile/resources/less/colors-table.less
@@ -29,13 +29,56 @@
--component-disabled-opacity: .4;
- --canvas-content-background: #fff;
-
--active-opacity-word: fade(#446995, 30%);
--active-opacity-slide: fade(#AA5252, 30%);
--active-opacity-cell: fade(#40865C, 30%);
--image-border-types-filter: none;
+
+ // Canvas
+
+ --canvas-background: #eee;
+ --canvas-content-background: #fff;
+ --canvas-page-border: #ccc;
+
+ --canvas-ruler-background: #fff;
+ --canvas-ruler-border: #cbcbcb;
+ --canvas-ruler-margins-background: #d9d9d9;
+ --canvas-ruler-mark: #555;
+ --canvas-ruler-handle-border: #555;
+ --canvas-ruler-handle-border-disabled: #aaa;
+
+ --canvas-high-contrast: #000;
+ --canvas-high-contrast-disabled: #666;
+
+ --canvas-cell-border: fade(#000, 10%);
+ --canvas-cell-title-hover: #dfdfdf;
+ --canvas-cell-title-selected: #cfcfcf;
+ --canvas-cell-title-border: #d8d8d8;
+ --canvas-cell-title-border-hover: #c9c9c9;
+ --canvas-cell-title-border-selected: #bbb;
+
+ --canvas-dark-cell-title: #444;
+ --canvas-dark-cell-title-hover: #666 ;
+ --canvas-dark-cell-title-selected: #111;
+ --canvas-dark-cell-title-border: #3d3d3d;
+ --canvas-dark-cell-title-border-hover: #5c5c5c;
+ --canvas-dark-cell-title-border-selected: #0f0f0f;
+ --canvas-dark-content-background: #3a3a3a;
+ --canvas-dark-page-border: #2a2a2a;
+
+ --canvas-scroll-thumb: #f7f7f7;
+ --canvas-scroll-thumb-hover: #c0c0c0;
+ --canvas-scroll-thumb-pressed: #adadad;
+ --canvas-scroll-thumb-border: #cbcbcb;
+ --canvas-scroll-thumb-border-hover: #cbcbcb;
+ --canvas-scroll-thumb-border-pressed: #adadad;
+ --canvas-scroll-arrow: #adadad;
+ --canvas-scroll-arrow-hover: #f7f7f7;
+ --canvas-scroll-arrow-pressed: #f7f7f7;
+ --canvas-scroll-thumb-target: #c0c0c0;
+ --canvas-scroll-thumb-target-hover: #f7f7f7;
+ --canvas-scroll-thumb-target-pressed: #f7f7f7;
}
@brand-word: var(--brand-word);
diff --git a/apps/documenteditor/forms/app/controller/SearchBar.js b/apps/documenteditor/forms/app/controller/SearchBar.js
index 53ce27e4f..2465a8466 100644
--- a/apps/documenteditor/forms/app/controller/SearchBar.js
+++ b/apps/documenteditor/forms/app/controller/SearchBar.js
@@ -127,7 +127,7 @@ define([
onInputSearchChange: function (text) {
var text = text[0];
- if (this._state.searchText !== text) {
+ if ((text && this._state.searchText !== text) || (!text && this._state.newSearchText)) {
this._state.newSearchText = text;
this._lastInputChange = (new Date());
if (this._searchTimer === undefined) {
@@ -136,7 +136,11 @@ define([
if ((new Date()) - me._lastInputChange < 400) return;
me._state.searchText = me._state.newSearchText;
- (me._state.newSearchText !== '') && me.onQuerySearch();
+ if (me._state.newSearchText !== '') {
+ me.onQuerySearch();
+ } else {
+ me.api.asc_endFindText();
+ }
clearInterval(me._searchTimer);
me._searchTimer = undefined;
}, 10);
diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js
index 1a9e70001..956af1bed 100644
--- a/apps/documenteditor/main/app/controller/LeftMenu.js
+++ b/apps/documenteditor/main/app/controller/LeftMenu.js
@@ -293,6 +293,9 @@ define([
}
})).show();
break;
+ case 'help':
+ close_menu = !!isopts;
+ break;
default: close_menu = false;
}
diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js
index 0b23ce8e1..8d1f840f5 100644
--- a/apps/documenteditor/main/app/view/FileMenu.js
+++ b/apps/documenteditor/main/app/view/FileMenu.js
@@ -66,6 +66,14 @@ define([
var item = _.findWhere(this.items, {el: event.currentTarget});
if (item) {
var panel = this.panels[item.options.action];
+ if (item.options.action === 'help') {
+ if ( panel.usedHelpCenter === true && navigator.onLine ) {
+ this.fireEvent('item:click', [this, item.options.action, true]);
+ window.open(panel.urlHelpCenter, '_blank');
+ return;
+ }
+ }
+
this.fireEvent('item:click', [this, item.options.action, !!panel]);
if (panel) {
diff --git a/apps/documenteditor/main/app/view/FileMenuPanels.js b/apps/documenteditor/main/app/view/FileMenuPanels.js
index 46f03cfca..7c5689823 100644
--- a/apps/documenteditor/main/app/view/FileMenuPanels.js
+++ b/apps/documenteditor/main/app/view/FileMenuPanels.js
@@ -1989,6 +1989,7 @@ define([
this.menu = options.menu;
this.urlPref = 'resources/help/{{DEFAULT_LANG}}/';
this.openUrl = null;
+ this.urlHelpCenter = '{{HELP_CENTER_WEB_EDITORS}}';
this.en_data = [
{"src": "ProgramInterface/ProgramInterface.htm", "name": "Introducing Document Editor user interface", "headername": "Program Interface"},
@@ -2111,9 +2112,10 @@ define([
store.fetch(config);
} else {
if ( Common.Controllers.Desktop.isActive() ) {
- if ( store.contentLang === '{{DEFAULT_LANG}}' || !Common.Controllers.Desktop.helpUrl() )
+ if ( store.contentLang === '{{DEFAULT_LANG}}' || !Common.Controllers.Desktop.helpUrl() ) {
+ me.usedHelpCenter = true;
me.iFrame.src = '../../common/main/resources/help/download.html';
- else {
+ } else {
store.contentLang = store.contentLang === lang ? '{{DEFAULT_LANG}}' : lang;
me.urlPref = Common.Controllers.Desktop.helpUrl() + '/' + store.contentLang + '/';
store.url = me.urlPref + 'Contents.json';
diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json
index e05ffd021..dbb9d862d 100644
--- a/apps/documenteditor/main/locale/en.json
+++ b/apps/documenteditor/main/locale/en.json
@@ -2077,6 +2077,7 @@
"DE.Views.LeftMenu.tipSearch": "Search",
"DE.Views.LeftMenu.tipSupport": "Feedback & Support",
"DE.Views.LeftMenu.tipTitles": "Titles",
+ "DE.Views.LeftMenu.tipPageThumbnails": "Page Thumbnails",
"DE.Views.LeftMenu.txtDeveloper": "DEVELOPER MODE",
"DE.Views.LeftMenu.txtEditor": "Document Editor",
"DE.Views.LeftMenu.txtLimit": "Limit Access",
diff --git a/build/Gruntfile.js b/build/Gruntfile.js
index f0ed31065..c4f166801 100644
--- a/build/Gruntfile.js
+++ b/build/Gruntfile.js
@@ -67,6 +67,9 @@ module.exports = function(grunt) {
}, {
from: /\{\{HELP_URL\}\}/g,
to: _encode(process.env.HELP_URL) || 'https://helpcenter.onlyoffice.com'
+ }, {
+ from: /\{\{HELP_CENTER_WEB_EDITORS\}\}/g,
+ to: _encode(process.env.HELP_CENTER_WEB_EDITORS) || 'https://helpcenter.onlyoffice.com/userguides/docs-index.aspx'
}, {
from: /\{\{DEFAULT_LANG\}\}/g,
to: _encode(process.env.DEFAULT_LANG) || 'en'