mirror of https://github.com/doccano/doccano.git
pythondatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learningannotation-tool
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.1 KiB
126 lines
3.1 KiB
import Vue from 'vue';
|
|
import HTTP from './http';
|
|
import { simpleShortcut } from './filter';
|
|
|
|
Vue.filter('simpleShortcut', simpleShortcut);
|
|
|
|
|
|
const vm = new Vue({ // eslint-disable-line no-unused-vars
|
|
el: '#mail-app',
|
|
|
|
delimiters: ['[[', ']]'],
|
|
|
|
data: {
|
|
labels: [],
|
|
newLabel: null,
|
|
editedLabel: null,
|
|
messages: [],
|
|
},
|
|
|
|
created() {
|
|
HTTP.get('labels').then((response) => {
|
|
this.labels = response.data;
|
|
this.sortLabels();
|
|
});
|
|
},
|
|
|
|
methods: {
|
|
generateColor() {
|
|
const color = (Math.random() * 0xFFFFFF | 0).toString(16); // eslint-disable-line no-bitwise
|
|
const randomColor = '#' + ('000000' + color).slice(-6);
|
|
return randomColor;
|
|
},
|
|
|
|
blackOrWhite(hexcolor) {
|
|
const r = parseInt(hexcolor.substr(1, 2), 16);
|
|
const g = parseInt(hexcolor.substr(3, 2), 16);
|
|
const b = parseInt(hexcolor.substr(5, 2), 16);
|
|
return ((((r * 299) + (g * 587) + (b * 114)) / 1000) < 128) ? '#ffffff' : '#000000';
|
|
},
|
|
|
|
setColor(label) {
|
|
const bgColor = this.generateColor();
|
|
const textColor = this.blackOrWhite(bgColor);
|
|
label.background_color = bgColor;
|
|
label.text_color = textColor;
|
|
},
|
|
|
|
shortcutKey(label) {
|
|
let shortcut = label.suffix_key;
|
|
if (label.prefix_key) {
|
|
shortcut = `${label.prefix_key} ${shortcut}`;
|
|
}
|
|
return shortcut;
|
|
},
|
|
|
|
sortLabels() {
|
|
return this.labels.sort((a, b) => ((a.text < b.text) ? -1 : 1));
|
|
},
|
|
|
|
addLabel() {
|
|
HTTP.post('labels', this.newLabel)
|
|
.then((response) => {
|
|
this.cancelCreate();
|
|
this.labels.push(response.data);
|
|
this.sortLabels();
|
|
this.messages = [];
|
|
})
|
|
.catch((error) => {
|
|
console.log(error); // eslint-disable-line no-console
|
|
this.messages.push('You cannot use same label name or shortcut key.');
|
|
});
|
|
},
|
|
|
|
removeLabel(label) {
|
|
const labelId = label.id;
|
|
HTTP.delete(`labels/${labelId}`).then(() => {
|
|
const index = this.labels.indexOf(label);
|
|
this.labels.splice(index, 1);
|
|
});
|
|
},
|
|
|
|
createLabel() {
|
|
this.newLabel = {
|
|
text: '',
|
|
prefix_key: null,
|
|
suffix_key: null,
|
|
background_color: '#209cee',
|
|
text_color: '#ffffff',
|
|
};
|
|
},
|
|
|
|
cancelCreate() {
|
|
this.newLabel = null;
|
|
},
|
|
|
|
editLabel(label) {
|
|
this.beforeEditCache = Object.assign({}, label);
|
|
this.editedLabel = label;
|
|
},
|
|
|
|
doneEdit(label) {
|
|
if (!this.editedLabel) {
|
|
return;
|
|
}
|
|
this.editedLabel = null;
|
|
label.text = label.text.trim();
|
|
if (!label.text) {
|
|
this.removeLabel(label);
|
|
}
|
|
HTTP.patch(`labels/${label.id}`, label)
|
|
.then(() => {
|
|
this.sortLabels();
|
|
this.messages = [];
|
|
})
|
|
.catch((error) => {
|
|
console.log(error); // eslint-disable-line no-console
|
|
this.messages.push('You cannot use same label name or shortcut key.');
|
|
});
|
|
},
|
|
|
|
cancelEdit(label) {
|
|
this.editedLabel = null;
|
|
Object.assign(label, this.beforeEditCache);
|
|
},
|
|
},
|
|
});
|