✨ feat: add comment and tag collections with metadata and mock data
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
########################################################################
|
||||
# Tags — verwaltete Schlagwörter für Mediathek und andere Collections
|
||||
########################################################################
|
||||
|
||||
name: tag
|
||||
meta:
|
||||
label: { de: "Schlagwörter", en: "Tags" }
|
||||
muiIcon: label
|
||||
group: content
|
||||
imageUrl: "https://images.unsplash.com/photo-1555421689-491a97ff2040?auto=format&fit=crop&w=800&q=80"
|
||||
preview:
|
||||
select: [name, color]
|
||||
label: name
|
||||
labelStyle:
|
||||
eval: |
|
||||
//js
|
||||
(function() {
|
||||
const raw = ($this?.color || '').trim()
|
||||
if (!raw) return ''
|
||||
|
||||
const hex = raw.replace(/^#/, '')
|
||||
if (!/^[0-9a-fA-F]{6}$/.test(hex)) {
|
||||
return 'background:' + raw + ';color:#F9FAFB;border:1px solid ' + raw
|
||||
}
|
||||
|
||||
const r = parseInt(hex.slice(0, 2), 16)
|
||||
const g = parseInt(hex.slice(2, 4), 16)
|
||||
const b = parseInt(hex.slice(4, 6), 16)
|
||||
|
||||
const toLinear = (channel) => {
|
||||
const normalized = channel / 255
|
||||
return normalized <= 0.04045
|
||||
? normalized / 12.92
|
||||
: Math.pow((normalized + 0.055) / 1.055, 2.4)
|
||||
}
|
||||
|
||||
const luminance = (
|
||||
0.2126 * toLinear(r) +
|
||||
0.7152 * toLinear(g) +
|
||||
0.0722 * toLinear(b)
|
||||
)
|
||||
const whiteContrast = 1.05 / (luminance + 0.05)
|
||||
const darkContrast = (luminance + 0.05) / 0.05
|
||||
const text = darkContrast >= whiteContrast ? '#111827' : '#F9FAFB'
|
||||
const border = luminance > 0.85 ? '#D1D5DB' : raw
|
||||
|
||||
return 'background:' + raw + ';color:' + text + ';border:1px solid ' + border
|
||||
})()
|
||||
//!js
|
||||
|
||||
permissions:
|
||||
public:
|
||||
methods:
|
||||
get: true
|
||||
user:
|
||||
methods:
|
||||
get: true
|
||||
post: true
|
||||
put: true
|
||||
delete: true
|
||||
"token:${ADMIN_TOKEN}":
|
||||
methods:
|
||||
get: true
|
||||
post: true
|
||||
put: true
|
||||
delete: true
|
||||
|
||||
fields:
|
||||
- name: name
|
||||
type: string
|
||||
meta:
|
||||
label: { de: "Name", en: "Name" }
|
||||
- name: group
|
||||
type: string
|
||||
meta:
|
||||
label: { de: "Gruppe", en: "Group" }
|
||||
widget: select
|
||||
choices:
|
||||
- id: system
|
||||
name: { de: "System", en: "System" }
|
||||
- id: kategorie
|
||||
name: { de: "Kategorie", en: "Category" }
|
||||
- name: color
|
||||
type: string
|
||||
meta:
|
||||
label: { de: "Farbe", en: "Color" }
|
||||
widget: select
|
||||
choices:
|
||||
- id: "#4caf50"
|
||||
name: { de: "Grün", en: "Green" }
|
||||
badgeStyle: { backgroundColor: "#4caf50", color: "#ffffff" }
|
||||
- id: "#2196f3"
|
||||
name: { de: "Blau", en: "Blue" }
|
||||
badgeStyle: { backgroundColor: "#2196f3", color: "#ffffff" }
|
||||
- id: "#f44336"
|
||||
name: { de: "Rot", en: "Red" }
|
||||
badgeStyle: { backgroundColor: "#f44336", color: "#ffffff" }
|
||||
- id: "#9c27b0"
|
||||
name: { de: "Lila", en: "Purple" }
|
||||
badgeStyle: { backgroundColor: "#9c27b0", color: "#ffffff" }
|
||||
- name: _testdata
|
||||
type: boolean
|
||||
meta:
|
||||
hide: true
|
||||
Reference in New Issue
Block a user