update tabs to use new API
This commit is contained in:
parent
dc531d4ef3
commit
3081504c64
4 changed files with 35 additions and 40 deletions
|
|
@ -2,6 +2,7 @@ import Checkbox from 'src/components/checkbox/checkbox.vue'
|
||||||
import ColorInput from 'src/components/color_input/color_input.vue'
|
import ColorInput from 'src/components/color_input/color_input.vue'
|
||||||
|
|
||||||
import genRandomSeed from 'src/services/random_seed/random_seed.service.js'
|
import genRandomSeed from 'src/services/random_seed/random_seed.service.js'
|
||||||
|
import { createStyleSheet, adoptStyleSheets } from 'src/services/style_setter/style_setter.js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
|
@ -51,15 +52,11 @@ export default {
|
||||||
this.$emit('update:shadow', { axis, value: Number(value) })
|
this.$emit('update:shadow', { axis, value: Number(value) })
|
||||||
},
|
},
|
||||||
update () {
|
update () {
|
||||||
const styleEl = document.getElementById('component-style-holder')
|
const sheet = createStyleSheet('style-component-preview')
|
||||||
const styleSheet = styleEl.sheet
|
|
||||||
|
|
||||||
for (let i = styleSheet.cssRules.length - 1; i >= 0; --i) {
|
sheet.clear()
|
||||||
styleSheet.deleteRule(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = []
|
|
||||||
|
|
||||||
|
const result = [this.previewCss]
|
||||||
if (this.colorOverride) result.push(`--background: ${this.colorOverride}`)
|
if (this.colorOverride) result.push(`--background: ${this.colorOverride}`)
|
||||||
|
|
||||||
const styleRule = [
|
const styleRule = [
|
||||||
|
|
@ -71,13 +68,15 @@ export default {
|
||||||
'\n}'
|
'\n}'
|
||||||
].join('')
|
].join('')
|
||||||
|
|
||||||
styleSheet.insertRule(styleRule)
|
sheet.addRule(styleRule)
|
||||||
styleSheet.insertRule([
|
sheet.addRule([
|
||||||
'#component-preview-', this.randomSeed, ' {\n',
|
'#component-preview-', this.randomSeed, ' {\n',
|
||||||
this.previewCss,
|
|
||||||
...result,
|
...result,
|
||||||
'\n}'
|
'\n}'
|
||||||
].join(''), 'index-max')
|
].join(''))
|
||||||
|
|
||||||
|
sheet.ready = true
|
||||||
|
adoptStyleSheets()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import {
|
||||||
getCssRules
|
getCssRules
|
||||||
} from 'src/services/theme_data/css_utils.js'
|
} from 'src/services/theme_data/css_utils.js'
|
||||||
import { deserialize } from 'src/services/theme_data/iss_deserializer.js'
|
import { deserialize } from 'src/services/theme_data/iss_deserializer.js'
|
||||||
|
import { createStyleSheet, adoptStyleSheets } from 'src/services/style_setter/style_setter.js'
|
||||||
|
|
||||||
import SharedComputedObject from '../helpers/shared_computed_object.js'
|
import SharedComputedObject from '../helpers/shared_computed_object.js'
|
||||||
import ProfileSettingIndicator from '../helpers/profile_setting_indicator.vue'
|
import ProfileSettingIndicator from '../helpers/profile_setting_indicator.vue'
|
||||||
|
|
@ -410,16 +411,17 @@ const AppearanceTab = {
|
||||||
this.compilationCache[key] = theme3
|
this.compilationCache[key] = theme3
|
||||||
}
|
}
|
||||||
|
|
||||||
const styleEl = document.getElementById('theme-preview-holder')
|
|
||||||
const styleSheet = styleEl.sheet
|
const sheet = createStyleSheet('appearance-tab-previews')
|
||||||
styleSheet.insertRule([
|
sheet.addRule([
|
||||||
'#theme-preview-',
|
'#theme-preview-',
|
||||||
key,
|
key,
|
||||||
' {\n',
|
' {\n',
|
||||||
getCssRules(theme3.eager).join('\n'),
|
getCssRules(theme3.eager).join('\n'),
|
||||||
'\n}'
|
'\n}'
|
||||||
].join(''), 'index-max')
|
].join(''))
|
||||||
|
sheet.ready = true
|
||||||
|
adoptStyleSheets()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { ref, reactive, computed, watch, watchEffect, provide, getCurrentInstance } from 'vue'
|
import { ref, reactive, computed, watch, provide, getCurrentInstance } from 'vue'
|
||||||
import { useInterfaceStore } from 'src/stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
import { get, set, unset, throttle } from 'lodash'
|
import { get, set, unset, throttle } from 'lodash'
|
||||||
|
|
||||||
|
|
@ -19,6 +19,7 @@ import Preview from '../theme_tab/theme_preview.vue'
|
||||||
|
|
||||||
import VirtualDirectivesTab from './virtual_directives_tab.vue'
|
import VirtualDirectivesTab from './virtual_directives_tab.vue'
|
||||||
|
|
||||||
|
import { createStyleSheet, adoptStyleSheets } from 'src/services/style_setter/style_setter.js'
|
||||||
import { init, findColor } from 'src/services/theme_data/theme_data_3.service.js'
|
import { init, findColor } from 'src/services/theme_data/theme_data_3.service.js'
|
||||||
import { getCssRules } from 'src/services/theme_data/css_utils.js'
|
import { getCssRules } from 'src/services/theme_data/css_utils.js'
|
||||||
import { serialize } from 'src/services/theme_data/iss_serializer.js'
|
import { serialize } from 'src/services/theme_data/iss_serializer.js'
|
||||||
|
|
@ -694,29 +695,19 @@ export default {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const styleEl = document.getElementById('editor-overall-holder')
|
const sheet = createStyleSheet('style-tab-overall-preview')
|
||||||
const styleSheet = styleEl.sheet
|
|
||||||
|
|
||||||
console.log(styleSheet)
|
sheet.clear()
|
||||||
console.log('BEFORE', styleSheet.cssRules)
|
sheet.addRule([
|
||||||
for (let i = styleSheet.cssRules.length - 1; i >= 0; --i) {
|
|
||||||
styleSheet.deleteRule(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
styleSheet.insertRule([
|
|
||||||
'#edited-style-preview {\n',
|
'#edited-style-preview {\n',
|
||||||
css.join('\n'),
|
css.join('\n'),
|
||||||
'\n}'
|
'\n}'
|
||||||
].join(''), 'index-max')
|
].join(''))
|
||||||
styleSheet.insertRule([
|
sheet.ready = true
|
||||||
'#edited-style-preview {\n',
|
adoptStyleSheets()
|
||||||
css.join('\n'),
|
|
||||||
'\n}'
|
|
||||||
].join(''), 'index-max')
|
|
||||||
console.log('AFTER', styleSheet.cssRules)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const updateOverallPreview = () => {
|
const updateOverallPreview = throttle(() => {
|
||||||
try {
|
try {
|
||||||
overallPreviewRules.value = init({
|
overallPreviewRules.value = init({
|
||||||
inputRuleset: [
|
inputRuleset: [
|
||||||
|
|
@ -738,7 +729,7 @@ export default {
|
||||||
console.error('Could not compile preview theme', e)
|
console.error('Could not compile preview theme', e)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
}
|
}, 1000)
|
||||||
//
|
//
|
||||||
// Apart from "hover" we can't really show how component looks like in
|
// Apart from "hover" we can't really show how component looks like in
|
||||||
// certain states, so we have to fake them.
|
// certain states, so we have to fake them.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { init, getEngineChecksum } from '../theme_data/theme_data_3.service.js'
|
import { init, getEngineChecksum } from '../theme_data/theme_data_3.service.js'
|
||||||
import { getCssRules } from '../theme_data/css_utils.js'
|
import { getCssRules } from '../theme_data/css_utils.js'
|
||||||
import { defaultState } from 'src/modules/default_config_state.js'
|
import { defaultState } from 'src/modules/default_config_state.js'
|
||||||
import { chunk } from 'lodash'
|
import { chunk, throttle } from 'lodash'
|
||||||
import localforage from 'localforage'
|
import localforage from 'localforage'
|
||||||
|
|
||||||
// On platforms where this is not supported, it will return undefined
|
// On platforms where this is not supported, it will return undefined
|
||||||
|
|
@ -10,10 +10,14 @@ const supportsAdoptedStyleSheets = !!document.adoptedStyleSheets
|
||||||
|
|
||||||
const stylesheets = {}
|
const stylesheets = {}
|
||||||
|
|
||||||
const createStyleSheet = (id) => {
|
export const createStyleSheet = (id) => {
|
||||||
|
if (stylesheets[id]) return stylesheets[id]
|
||||||
const newStyleSheet = {
|
const newStyleSheet = {
|
||||||
rules: [],
|
rules: [],
|
||||||
ready: false,
|
ready: false,
|
||||||
|
clear () {
|
||||||
|
this.rules = []
|
||||||
|
},
|
||||||
addRule (rule) {
|
addRule (rule) {
|
||||||
this.rules.push(
|
this.rules.push(
|
||||||
rule
|
rule
|
||||||
|
|
@ -28,7 +32,7 @@ const createStyleSheet = (id) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export const adoptStyleSheets = () => {
|
export const adoptStyleSheets = throttle(() => {
|
||||||
if (supportsAdoptedStyleSheets) {
|
if (supportsAdoptedStyleSheets) {
|
||||||
document.adoptedStyleSheets = Object
|
document.adoptedStyleSheets = Object
|
||||||
.values(stylesheets)
|
.values(stylesheets)
|
||||||
|
|
@ -46,13 +50,12 @@ export const adoptStyleSheets = () => {
|
||||||
.forEach(sheet => {
|
.forEach(sheet => {
|
||||||
sheet.rules.forEach(r => holder.sheet.insertRule(r))
|
sheet.rules.forEach(r => holder.sheet.insertRule(r))
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
// Some older browsers do not support document.adoptedStyleSheets.
|
// Some older browsers do not support document.adoptedStyleSheets.
|
||||||
// In this case, we use the <style> elements.
|
// In this case, we use the <style> elements.
|
||||||
// Since the <style> elements we need are already in the DOM, there
|
// Since the <style> elements we need are already in the DOM, there
|
||||||
// is nothing to do here.
|
// is nothing to do here.
|
||||||
}
|
}, 500)
|
||||||
|
|
||||||
|
|
||||||
const EAGER_STYLE_ID = 'pleroma-eager-styles'
|
const EAGER_STYLE_ID = 'pleroma-eager-styles'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue