Skip to content

Commit a729d0f

Browse files
committed
feat(setting): add dark/light iframe CSS vars
Signed-off-by: codewithvk <vivek.javiya@collabora.com>
1 parent e98b257 commit a729d0f

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

src/components/CoolFrame.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<input type="hidden" name="wopi_setting_base_url" :value="wopiSettingBaseUrl">
1414
<input type="hidden" name="iframe_type" :value="iframeType">
1515
<input type="hidden" name="css_variables" :value="cssVariables">
16+
<input type="hidden" name="theme" :value="theme">
1617
<input type="hidden" name="ui_theme" :value="uiTheme">
1718
</form>
1819
<iframe :id="iframeName"
@@ -26,7 +27,7 @@
2627

2728
<script>
2829

29-
import { generateCSSVarTokens, getUITheme } from '../helpers/coolParameters.js'
30+
import { generateSettingCssVarTokens, getCollaboraTheme, getUITheme } from '../helpers/coolParameters.js'
3031

3132
export default {
3233
name: 'CoolFrame',
@@ -56,8 +57,9 @@ export default {
5657
return {
5758
iframeName: 'coolFrameIframe',
5859
formAction: '',
59-
cssVariables: generateCSSVarTokens(),
60+
cssVariables: generateSettingCssVarTokens(),
6061
isIframeLoaded: false,
62+
theme: getCollaboraTheme(),
6163
uiTheme: getUITheme(),
6264
}
6365
},

src/helpers/coolParameters.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,42 @@ const createDataThemeDiv = (elementType, theme) => {
4747
document.body.appendChild(element)
4848
return element
4949
}
50+
51+
const mapSettingVariables = (element, mapping) => {
52+
let result = ''
53+
for (const cssVarKey in mapping) {
54+
const computedStyle = window.getComputedStyle(element).getPropertyValue(cssVarKey)
55+
if (!computedStyle) continue
56+
const tokenName = mapping[cssVarKey]
57+
result += tokenName + '=' + computedStyle.trim() + ';'
58+
}
59+
return result
60+
}
61+
62+
const generateSettingCssVarTokens = () => {
63+
let str = ''
64+
const lightElement = createDataThemeDiv('div', 'light')
65+
const darkElement = createDataThemeDiv('div', 'dark')
66+
const settingVarMapping = {
67+
'--color-primary-element': '--co-settings-btn-primary',
68+
'--color-primary-element-text': '--co-settings-btn-primary-text',
69+
'--color-primary-element-light': '--co-settings-btn-light',
70+
'--color-primary-element-light-text': '--co-settings-btn-light-text',
71+
'--color-border': '--co-settings-border',
72+
'--color-border-dark': '--co--settings-border-contrast',
73+
'--color-main-text': '--co-settings-text',
74+
'--color-text-maxcontrast': '--co-settings-text-maxcontrast',
75+
'--color-main-background': '--co-settings-background',
76+
'color-background-hover': '--co-settings-background-hover',
77+
}
78+
if (getUITheme() === 'dark') {
79+
str += mapSettingVariables(darkElement, settingVarMapping)
80+
} else {
81+
str += mapSettingVariables(lightElement, settingVarMapping)
82+
}
83+
return str.replace(/["']/g, '\\\'')
84+
}
85+
5086
const generateCSSVarTokens = () => {
5187
/* NC versus COOL */
5288
const cssVarMap = {
@@ -169,4 +205,6 @@ export {
169205
getCollaboraTheme,
170206
generateCSSVarTokens,
171207
getUITheme,
208+
generateSettingCssVarTokens,
209+
172210
}

0 commit comments

Comments
 (0)