import of v2 on appearance tab works now
This commit is contained in:
parent
20e6382df6
commit
13838a75a9
|
@ -8,6 +8,7 @@ import FontControl from 'src/components/font_control/font_control.vue'
|
||||||
|
|
||||||
import { normalizeThemeData } from 'src/modules/interface'
|
import { normalizeThemeData } from 'src/modules/interface'
|
||||||
|
|
||||||
|
import { newImporter } from 'src/services/export_import/export_import.js'
|
||||||
import { convertTheme2To3 } from 'src/services/theme_data/theme2_to_theme3.js'
|
import { convertTheme2To3 } from 'src/services/theme_data/theme2_to_theme3.js'
|
||||||
import { init } from 'src/services/theme_data/theme_data_3.service.js'
|
import { init } from 'src/services/theme_data/theme_data_3.service.js'
|
||||||
import {
|
import {
|
||||||
|
@ -33,6 +34,12 @@ const AppearanceTab = {
|
||||||
return {
|
return {
|
||||||
availableStyles: [],
|
availableStyles: [],
|
||||||
availablePalettes: [],
|
availablePalettes: [],
|
||||||
|
themeImporter: newImporter({
|
||||||
|
accept: '.json, .piss',
|
||||||
|
validator: this.importValidator,
|
||||||
|
onImport: this.onImport,
|
||||||
|
onImportFailure: this.onImportFailure
|
||||||
|
}),
|
||||||
palettesKeys: [
|
palettesKeys: [
|
||||||
'background',
|
'background',
|
||||||
'foreground',
|
'foreground',
|
||||||
|
@ -184,7 +191,6 @@ const AppearanceTab = {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
updateFont (key, value) {
|
updateFont (key, value) {
|
||||||
console.log(key, value)
|
|
||||||
this.$store.dispatch('setOption', {
|
this.$store.dispatch('setOption', {
|
||||||
name: 'theme3hacks',
|
name: 'theme3hacks',
|
||||||
value: {
|
value: {
|
||||||
|
@ -196,6 +202,26 @@ const AppearanceTab = {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
importTheme () {
|
||||||
|
this.themeImporter.importData()
|
||||||
|
},
|
||||||
|
onImport (parsed, filename) {
|
||||||
|
if (filename.endsWith('.json')) {
|
||||||
|
this.$store.dispatch('setThemeCustom', parsed.source || parsed.theme)
|
||||||
|
this.$store.dispatch('applyTheme')
|
||||||
|
}
|
||||||
|
|
||||||
|
// this.loadTheme(parsed, 'file', forceSource)
|
||||||
|
},
|
||||||
|
onImportFailure (result) {
|
||||||
|
this.$store.dispatch('pushGlobalNotice', { messageKey: 'settings.invalid_theme_imported', level: 'error' })
|
||||||
|
},
|
||||||
|
importValidator (parsed, filename) {
|
||||||
|
if (filename.endsWith('.json')) {
|
||||||
|
const version = parsed._pleroma_theme_version
|
||||||
|
return version >= 1 || version <= 2
|
||||||
|
}
|
||||||
|
},
|
||||||
isThemeActive (key) {
|
isThemeActive (key) {
|
||||||
const { theme } = this.mergedConfig
|
const { theme } = this.mergedConfig
|
||||||
return key === theme
|
return key === theme
|
||||||
|
@ -207,6 +233,9 @@ const AppearanceTab = {
|
||||||
isPaletteActive (key) {
|
isPaletteActive (key) {
|
||||||
const { palette } = this.mergedConfig
|
const { palette } = this.mergedConfig
|
||||||
return key === palette
|
return key === palette
|
||||||
|
},
|
||||||
|
importStyle () {
|
||||||
|
|
||||||
},
|
},
|
||||||
setTheme (name) {
|
setTheme (name) {
|
||||||
this.$store.dispatch('setTheme', name)
|
this.$store.dispatch('setTheme', name)
|
||||||
|
|
|
@ -5,6 +5,21 @@
|
||||||
margin: 1em;
|
margin: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.setting-item {
|
||||||
|
padding-bottom: 0;
|
||||||
|
|
||||||
|
&.heading {
|
||||||
|
display: grid;
|
||||||
|
align-items: baseline;
|
||||||
|
grid-template-columns: 1fr auto auto auto;
|
||||||
|
grid-gap: 0.5em;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
flex: 1 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.palettes {
|
.palettes {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr;
|
grid-template-columns: 1fr 1fr;
|
||||||
|
|
|
@ -3,8 +3,17 @@
|
||||||
class="appearance-tab"
|
class="appearance-tab"
|
||||||
:label="$t('settings.general')"
|
:label="$t('settings.general')"
|
||||||
>
|
>
|
||||||
<div class="setting-item">
|
<div class="setting-item heading">
|
||||||
<h2>{{ $t('settings.theme') }}</h2>
|
<h2>{{ $t('settings.theme') }}</h2>
|
||||||
|
<button
|
||||||
|
class="btn button-default"
|
||||||
|
@click="importTheme"
|
||||||
|
>
|
||||||
|
<FAIcon icon="folder-open" />
|
||||||
|
{{ $t('settings.style.themes3.editor.load_style') }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="setting-item">
|
||||||
<ul
|
<ul
|
||||||
ref="themeList"
|
ref="themeList"
|
||||||
class="theme-list"
|
class="theme-list"
|
||||||
|
|
|
@ -347,33 +347,24 @@ const interfaceMod = {
|
||||||
let majorVersionUsed
|
let majorVersionUsed
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
'USER V3',
|
`USER V3 palette: ${userPaletteName}, style: ${userStyleName} `
|
||||||
userPaletteName,
|
|
||||||
userStyleName
|
|
||||||
)
|
)
|
||||||
console.log(
|
console.log(
|
||||||
'USER V2',
|
`USER V2 name: ${userThemeV2Name}, source: ${userThemeV2Source}, snapshot: ${userThemeV2Snapshot}`
|
||||||
userThemeV2Name,
|
|
||||||
userThemeV2Source,
|
|
||||||
userThemeV2Snapshot
|
|
||||||
)
|
)
|
||||||
|
|
||||||
console.log(
|
console.log(`INST V3 palette: ${instancePaletteName}, style: ${instanceStyleName}`)
|
||||||
'INST V3',
|
console.log('INST V2 theme: ' + instanceThemeV2Name)
|
||||||
instancePaletteName,
|
|
||||||
instanceStyleName
|
|
||||||
)
|
|
||||||
console.log(
|
|
||||||
'INST V2',
|
|
||||||
instanceThemeV2Name
|
|
||||||
)
|
|
||||||
|
|
||||||
if (userPaletteName || userPaletteCustomData ||
|
if (userPaletteName || userPaletteCustomData ||
|
||||||
userStyleName || userStyleCustomData ||
|
userStyleName || userStyleCustomData ||
|
||||||
instancePaletteName ||
|
(
|
||||||
instanceStyleName ||
|
// User V2 overrides instance V3
|
||||||
(instanceThemeV2Name == null &&
|
(instancePaletteName ||
|
||||||
userThemeV2Name == null)
|
instanceStyleName) &&
|
||||||
|
instanceThemeV2Name == null &&
|
||||||
|
userThemeV2Name == null
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
// Palette and/or style overrides V2 themes
|
// Palette and/or style overrides V2 themes
|
||||||
instanceThemeV2Name = null
|
instanceThemeV2Name = null
|
||||||
|
|
|
@ -20,6 +20,7 @@ export const newExporter = ({
|
||||||
})
|
})
|
||||||
|
|
||||||
export const newImporter = ({
|
export const newImporter = ({
|
||||||
|
accept = '.json',
|
||||||
onImport,
|
onImport,
|
||||||
onImportFailure,
|
onImportFailure,
|
||||||
validator = () => true
|
validator = () => true
|
||||||
|
@ -27,18 +28,19 @@ export const newImporter = ({
|
||||||
importData () {
|
importData () {
|
||||||
const filePicker = document.createElement('input')
|
const filePicker = document.createElement('input')
|
||||||
filePicker.setAttribute('type', 'file')
|
filePicker.setAttribute('type', 'file')
|
||||||
filePicker.setAttribute('accept', '.json')
|
filePicker.setAttribute('accept', accept)
|
||||||
|
|
||||||
filePicker.addEventListener('change', event => {
|
filePicker.addEventListener('change', event => {
|
||||||
if (event.target.files[0]) {
|
if (event.target.files[0]) {
|
||||||
|
const filename = event.target.files[0].name
|
||||||
// eslint-disable-next-line no-undef
|
// eslint-disable-next-line no-undef
|
||||||
const reader = new FileReader()
|
const reader = new FileReader()
|
||||||
reader.onload = ({ target }) => {
|
reader.onload = ({ target }) => {
|
||||||
try {
|
try {
|
||||||
const parsed = JSON.parse(target.result)
|
const parsed = JSON.parse(target.result)
|
||||||
const validationResult = validator(parsed)
|
const validationResult = validator(parsed, filename)
|
||||||
if (validationResult === true) {
|
if (validationResult === true) {
|
||||||
onImport(parsed)
|
onImport(parsed, filename)
|
||||||
} else {
|
} else {
|
||||||
onImportFailure({ validationResult })
|
onImportFailure({ validationResult })
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue