2018-11-19 12:40:25 +11:00
|
|
|
import ColorInput from '../color_input/color_input.vue'
|
|
|
|
import OpacityInput from '../opacity_input/opacity_input.vue'
|
2020-01-13 11:08:39 +11:00
|
|
|
import { getCssShadow } from '../../services/style_setter/style_setter.js'
|
|
|
|
import { hex2rgb } from '../../services/color_convert/color_convert.js'
|
2018-11-19 12:40:25 +11:00
|
|
|
|
2020-02-18 08:43:35 +11:00
|
|
|
const toModel = (object = {}) => ({
|
|
|
|
x: 0,
|
|
|
|
y: 0,
|
|
|
|
blur: 0,
|
|
|
|
spread: 0,
|
|
|
|
inset: false,
|
|
|
|
color: '#000000',
|
|
|
|
alpha: 1,
|
|
|
|
...object
|
|
|
|
})
|
|
|
|
|
2018-11-19 12:40:25 +11:00
|
|
|
export default {
|
2018-11-22 11:55:45 +11:00
|
|
|
// 'Value' and 'Fallback' can be undefined, but if they are
|
|
|
|
// initially vue won't detect it when they become something else
|
|
|
|
// therefore i'm using "ready" which should be passed as true when
|
|
|
|
// data becomes available
|
2018-11-19 12:40:25 +11:00
|
|
|
props: [
|
2018-11-22 11:55:45 +11:00
|
|
|
'value', 'fallback', 'ready'
|
2018-11-19 12:40:25 +11:00
|
|
|
],
|
|
|
|
data () {
|
|
|
|
return {
|
|
|
|
selectedId: 0,
|
2018-12-02 20:56:02 +11:00
|
|
|
// TODO there are some bugs regarding display of array (it's not getting updated when deleting for some reason)
|
2020-02-18 08:43:35 +11:00
|
|
|
cValue: (this.value || this.fallback || []).map(toModel)
|
2018-11-19 12:40:25 +11:00
|
|
|
}
|
|
|
|
},
|
|
|
|
components: {
|
|
|
|
ColorInput,
|
|
|
|
OpacityInput
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
add () {
|
2020-02-18 08:43:35 +11:00
|
|
|
this.cValue.push(toModel(this.selected))
|
2018-11-19 12:40:25 +11:00
|
|
|
this.selectedId = this.cValue.length - 1
|
|
|
|
},
|
|
|
|
del () {
|
|
|
|
this.cValue.splice(this.selectedId, 1)
|
2020-02-18 08:43:35 +11:00
|
|
|
this.selectedId = this.cValue.length === 0 ? undefined : Math.max(this.selectedId - 1, 0)
|
2018-11-19 12:40:25 +11:00
|
|
|
},
|
|
|
|
moveUp () {
|
|
|
|
const movable = this.cValue.splice(this.selectedId, 1)[0]
|
|
|
|
this.cValue.splice(this.selectedId - 1, 0, movable)
|
|
|
|
this.selectedId -= 1
|
|
|
|
},
|
|
|
|
moveDn () {
|
|
|
|
const movable = this.cValue.splice(this.selectedId, 1)[0]
|
|
|
|
this.cValue.splice(this.selectedId + 1, 0, movable)
|
|
|
|
this.selectedId += 1
|
|
|
|
}
|
|
|
|
},
|
2018-11-21 07:25:38 +11:00
|
|
|
beforeUpdate () {
|
|
|
|
this.cValue = this.value || this.fallback
|
|
|
|
},
|
2018-11-19 12:40:25 +11:00
|
|
|
computed: {
|
2020-02-18 08:43:35 +11:00
|
|
|
anyShadows () {
|
|
|
|
return this.cValue.length > 0
|
|
|
|
},
|
|
|
|
anyShadowsFallback () {
|
|
|
|
return this.fallback.length > 0
|
|
|
|
},
|
2018-11-19 12:40:25 +11:00
|
|
|
selected () {
|
2020-02-18 08:43:35 +11:00
|
|
|
if (this.ready && this.anyShadows) {
|
2018-11-22 11:55:45 +11:00
|
|
|
return this.cValue[this.selectedId]
|
|
|
|
} else {
|
2020-02-18 08:43:35 +11:00
|
|
|
return toModel({})
|
2018-11-19 12:40:25 +11:00
|
|
|
}
|
|
|
|
},
|
2020-01-20 09:34:49 +11:00
|
|
|
currentFallback () {
|
2020-02-18 08:43:35 +11:00
|
|
|
if (this.ready && this.anyShadowsFallback) {
|
2020-01-20 09:34:49 +11:00
|
|
|
return this.fallback[this.selectedId]
|
|
|
|
} else {
|
2020-02-18 08:43:35 +11:00
|
|
|
return toModel({})
|
2020-01-20 09:34:49 +11:00
|
|
|
}
|
|
|
|
},
|
2018-11-19 12:40:25 +11:00
|
|
|
moveUpValid () {
|
2018-11-22 11:55:45 +11:00
|
|
|
return this.ready && this.selectedId > 0
|
2018-11-19 12:40:25 +11:00
|
|
|
},
|
|
|
|
moveDnValid () {
|
2018-11-22 11:55:45 +11:00
|
|
|
return this.ready && this.selectedId < this.cValue.length - 1
|
2018-11-19 12:40:25 +11:00
|
|
|
},
|
|
|
|
present () {
|
2018-11-22 11:55:45 +11:00
|
|
|
return this.ready &&
|
2018-11-21 07:25:38 +11:00
|
|
|
typeof this.cValue[this.selectedId] !== 'undefined' &&
|
2018-11-19 12:40:25 +11:00
|
|
|
!this.usingFallback
|
|
|
|
},
|
|
|
|
usingFallback () {
|
|
|
|
return typeof this.value === 'undefined'
|
|
|
|
},
|
|
|
|
rgb () {
|
|
|
|
return hex2rgb(this.selected.color)
|
|
|
|
},
|
|
|
|
style () {
|
2018-11-22 11:55:45 +11:00
|
|
|
return this.ready ? {
|
2020-01-20 11:00:13 +11:00
|
|
|
boxShadow: getCssShadow(this.fallback)
|
2018-11-21 07:25:38 +11:00
|
|
|
} : {}
|
2018-11-19 12:40:25 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|