208 lines
8.4 KiB
JavaScript
208 lines
8.4 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2024
|
|
*
|
|
* 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-6 Ernesta Birznieka-Upish
|
|
* 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
|
|
*
|
|
*/
|
|
|
|
var checkLocalStorage = (function () {
|
|
try {
|
|
localStorage.setItem('test', 1); // for WebView checking !!window.localStorage not enough
|
|
localStorage.removeItem('test');
|
|
return true;
|
|
}
|
|
catch(e) {
|
|
return false;
|
|
}
|
|
})();
|
|
|
|
if (!window.lang) {
|
|
window.lang = (/(?:&|^)lang=([^&]+)&?/i).exec(window.location.search.substring(1));
|
|
window.lang = window.lang ? window.lang[1] : '';
|
|
}
|
|
window.lang && (window.lang = window.lang.split(/[\-\_]/)[0].toLowerCase());
|
|
|
|
var isLangRtl = function (lang) {
|
|
return lang && (/^(ar|he|ur)$/i.test(lang));
|
|
}
|
|
|
|
var ui_rtl = false;
|
|
if ( window.nativeprocvars && window.nativeprocvars.rtl !== undefined ) {
|
|
ui_rtl = window.nativeprocvars.rtl;
|
|
} else {
|
|
if ( isLangRtl(lang) )
|
|
if ( checkLocalStorage && localStorage.getItem("settings-ui-rtl") !== null )
|
|
ui_rtl = localStorage.getItem("settings-ui-rtl") === '1';
|
|
else ui_rtl = true;
|
|
}
|
|
|
|
if ( ui_rtl && window.isIEBrowser !== true ) {
|
|
document.body.setAttribute('dir', 'rtl');
|
|
document.body.classList.add('rtl');
|
|
}
|
|
if ( isLangRtl(lang) ) {
|
|
document.body.classList.add('rtl-font');
|
|
}
|
|
document.body.setAttribute('applang', lang);
|
|
|
|
function checkScaling() {
|
|
var matches = {
|
|
'pixel-ratio__1_25': "screen and (-webkit-min-device-pixel-ratio: 1.25) and (-webkit-max-device-pixel-ratio: 1.49), " +
|
|
"screen and (min-resolution: 1.25dppx) and (max-resolution: 1.49dppx)",
|
|
'pixel-ratio__1_5': "screen and (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 1.74), " +
|
|
"screen and (min-resolution: 1.5dppx) and (max-resolution: 1.74dppx)",
|
|
'pixel-ratio__1_75': "screen and (-webkit-min-device-pixel-ratio: 1.75) and (-webkit-max-device-pixel-ratio: 1.99), " +
|
|
"screen and (min-resolution: 1.75dppx) and (max-resolution: 1.99dppx)",
|
|
};
|
|
|
|
for (var c in matches) {
|
|
if ( window.matchMedia(matches[c]).matches ) {
|
|
document.body.classList.add(c);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( window.isIEBrowser !== true ) {
|
|
matches = {
|
|
'pixel-ratio__2_5': 'screen and (-webkit-min-device-pixel-ratio: 2.25), screen and (min-resolution: 2.25dppx)',
|
|
};
|
|
for (let c in matches) {
|
|
if ( window.matchMedia(matches[c]).matches ) {
|
|
document.body.classList.add(c);
|
|
Common.Utils.injectSvgIcons();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
let svg_icons = window.uitheme.svg_icons || [
|
|
'./resources/img/iconssmall@2.5x.svg',
|
|
'./resources/img/iconsbig@2.5x.svg',
|
|
'./resources/img/iconshuge@2.5x.svg',
|
|
'../../common/main/resources/img/doc-formats/formats@2.5x.svg'
|
|
];
|
|
|
|
window.Common = {
|
|
Utils: {
|
|
injectSvgIcons: function (svg_icons_array, force) {
|
|
if ( window.isIEBrowser === true ) return;
|
|
|
|
window.svgiconsrunonce;
|
|
// const el = document.querySelector('div.inlined-svg');
|
|
// if (!el || !el.innerHTML.firstChild) {
|
|
if ( !window.svgiconsrunonce || force === true ) {
|
|
window.svgiconsrunonce = true;
|
|
function htmlToElements(html, id) {
|
|
var template = document.createElement('template');
|
|
template.innerHTML = html;
|
|
// return template.content.childNodes;
|
|
if ( !!id ) template.content.firstChild.id = id;
|
|
return template.content.firstChild;
|
|
}
|
|
|
|
const sprite_uid = getComputedStyle(document.body).getPropertyValue('--sprite-button-icons-uid');
|
|
|
|
!svg_icons_array && (svg_icons_array = svg_icons);
|
|
svg_icons_array.map(function (url) {
|
|
fetch(url)
|
|
.then(function (r) {
|
|
if (r.ok) return r.text();
|
|
else {/* error */}
|
|
}).then(function (text) {
|
|
const btnMatch = /icons(\w+)(?:@2\.5x)\.svg$/.exec(url);
|
|
const formatMatch = /doc-formats\/(\w+)(?:@2\.5x)\.svg$/.exec(url);
|
|
const type = btnMatch ? btnMatch[1] : (formatMatch ? formatMatch[1] : null);
|
|
|
|
let el_id;
|
|
if ( type ) {
|
|
const prefix = btnMatch ? 'idx-sprite-btns-' : 'idx-sprite-formats-';
|
|
const el = document.getElementById((el_id = prefix + type));
|
|
if ( el ) {
|
|
const idx = el.getAttribute('data-sprite-uid');
|
|
if ( idx != sprite_uid )
|
|
el.remove()
|
|
else return;
|
|
};
|
|
}
|
|
|
|
const el = document.querySelector('div.inlined-svg');
|
|
const child = htmlToElements(text, el_id);
|
|
if ( sprite_uid.length )
|
|
child.setAttribute('data-sprite-uid', sprite_uid);
|
|
el.appendChild(child);
|
|
|
|
const i = svg_icons_array.findIndex(function (item) {return item == url});
|
|
if ( !(i < 0) ) svg_icons_array.splice(i, 1)
|
|
}).catch(console.error.bind(console))
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
!params.skipScaling && checkScaling();
|
|
|
|
if ( !window.uitheme.id && !!params.uitheme ) {
|
|
if ( params.uitheme == 'default-dark' ) {
|
|
window.uitheme.id = window.uitheme.DEFAULT_DARK_THEME_ID;
|
|
window.uitheme.type = 'dark';
|
|
} else
|
|
if ( params.uitheme == 'default-light' ) {
|
|
window.uitheme.id = window.uitheme.DEFAULT_LIGHT_THEME_ID;
|
|
window.uitheme.type = 'light';
|
|
} else
|
|
if ( params.uitheme == 'theme-system' ) {
|
|
window.uitheme.adapt_to_system_theme();
|
|
} else {
|
|
window.uitheme.id = params.uitheme;
|
|
window.uitheme.type = params.uithemetype;
|
|
}
|
|
}
|
|
|
|
if ( !window.uitheme.id ) {
|
|
window.uitheme.adapt_to_system_theme();
|
|
} else {
|
|
!window.uitheme.type && params.uitheme && (window.uitheme.type = params.uithemetype);
|
|
}
|
|
|
|
document.body.classList.add(window.uitheme.relevant_theme_id());
|
|
|
|
if ( window.uitheme.type == 'dark' ) {
|
|
document.body.classList.add("theme-type-dark");
|
|
|
|
if ( checkLocalStorage && localStorage.getItem("content-theme") == 'dark' ) {
|
|
document.body.classList.add("content-theme-dark");
|
|
} else {
|
|
// document.body.classList.add("theme-type-ligth");
|
|
}
|
|
}
|
|
|
|
if ( !window.is_system_theme_dark )
|
|
delete window.is_system_theme_dark;
|