4a413e7f3c
Change all snake/camelCase mix and match to camelCase everywhere Fix conversion to not interfer with service interceptors Add dynamic conversion between camelCase and snake_case to services Co-authored-by: kolaente <k@knt.li> Reviewed-on: https://kolaente.dev/vikunja/frontend/pulls/105
50 lines
No EOL
1.2 KiB
JavaScript
50 lines
No EOL
1.2 KiB
JavaScript
import AbstractModel from './abstractModel'
|
|
import UserModel from "./user";
|
|
|
|
export default class LabelModel extends AbstractModel {
|
|
constructor(data) {
|
|
super(data)
|
|
// Set the default color
|
|
if (this.hexColor === '') {
|
|
this.hexColor = 'e8e8e8'
|
|
}
|
|
if (this.hexColor.substring(0, 1) !== '#') {
|
|
this.hexColor = '#' + this.hexColor
|
|
}
|
|
this.textColor = this.hasDarkColor() ? '#4a4a4a' : '#e5e5e5'
|
|
this.createdBy = new UserModel(this.createdBy)
|
|
|
|
this.created = new Date(this.created)
|
|
this.updated = new Date(this.updated)
|
|
}
|
|
|
|
defaults() {
|
|
return {
|
|
id: 0,
|
|
title: '',
|
|
hexColor: '',
|
|
description: '',
|
|
createdBy: UserModel,
|
|
listId: 0,
|
|
textColor: '',
|
|
|
|
created: null,
|
|
updated: null,
|
|
}
|
|
}
|
|
|
|
hasDarkColor() {
|
|
if (this.hexColor === '#') {
|
|
return true // Defaults to dark
|
|
}
|
|
|
|
let rgb = parseInt(this.hexColor.substring(1, 7), 16); // convert rrggbb to decimal
|
|
let r = (rgb >> 16) & 0xff; // extract red
|
|
let g = (rgb >> 8) & 0xff; // extract green
|
|
let b = (rgb >> 0) & 0xff; // extract blue
|
|
|
|
// luma will be a value 0..255 where 0 indicates the darkest, and 255 the brightest
|
|
let luma = 0.2126 * r + 0.7152 * g + 0.0722 * b; // per ITU-R BT.709
|
|
return luma > 128
|
|
}
|
|
} |