Update tags: add delete tag function
This commit is contained in:
@@ -26,3 +26,39 @@ def tag_add(name):
|
||||
models.db_session.add(newTag)
|
||||
models.db_session.commit()
|
||||
return newTag.as_dict()
|
||||
|
||||
|
||||
@jsonrpc.method('tag.delete(id=int)')
|
||||
@login_required
|
||||
def tag_delete(id):
|
||||
"""
|
||||
Удалить тег
|
||||
"""
|
||||
exist = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if exist is None:
|
||||
raise ValueError
|
||||
|
||||
models.db_session.delete(exist)
|
||||
models.db_session.commit()
|
||||
return 'OK'
|
||||
|
||||
|
||||
@jsonrpc.method('tags()')
|
||||
@login_required
|
||||
def tags_list():
|
||||
"""
|
||||
Список тегов
|
||||
"""
|
||||
tags = models.db_session.query(
|
||||
models.Tag
|
||||
).all()
|
||||
|
||||
result = []
|
||||
for tag in tags:
|
||||
newRow = tag.as_dict()
|
||||
result.append(newRow)
|
||||
return result
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col py-2">
|
||||
<a class="btn btn-outline-secondary mr-2 mb-3" v-for="(tag, tagIdx) in tags" :href="'/tag/' + tag.id">{{ tag.name }}</a>
|
||||
<div class="btn-group mr-2 mb-3" v-for="(tag, tagIdx) in tags">
|
||||
<a class="btn btn-outline-secondary" :href="'/tag/' + tag.id">{{ tag.name }}</a>
|
||||
<button type="button" class="btn btn-outline-danger" v-on:click="deleteTag(tag)"><i class="fa fa-remove"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endraw %}
|
||||
@@ -42,11 +45,17 @@
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data: {
|
||||
tags: {{ pagedata['tags']|tojson|safe }},
|
||||
tags: [],
|
||||
formNewTag: false,
|
||||
newTag: ''
|
||||
},
|
||||
methods: {
|
||||
arrayRemove: function(arr, value) {
|
||||
/* Удаление элемента из списка */
|
||||
return arr.filter(function(element){
|
||||
return element != value;
|
||||
});
|
||||
},
|
||||
addTag: function() {
|
||||
/* Добавить тег */
|
||||
var vm = this;
|
||||
@@ -73,7 +82,47 @@ var app = new Vue({
|
||||
/* Показать/скрыть форму добавления нового тега */
|
||||
var vm = this;
|
||||
vm.formNewTag = !vm.formNewTag;
|
||||
},
|
||||
deleteTag: function(tag) {
|
||||
/* Удалить тег */
|
||||
var vm = this;
|
||||
axios.post(
|
||||
'/api',
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": 'tag.delete',
|
||||
"params": {
|
||||
"id": tag.id
|
||||
},
|
||||
"id": 1
|
||||
}
|
||||
).then(
|
||||
function(response) {
|
||||
if ('result' in response.data) {
|
||||
vm.tags = vm.arrayRemove(vm.tags, tag);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
},
|
||||
created: function() {
|
||||
/* Получить список тегов после загрузки страницы */
|
||||
var vm = this;
|
||||
axios.post(
|
||||
'/api',
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": 'tags',
|
||||
"params": {},
|
||||
"id": 1
|
||||
}
|
||||
).then(
|
||||
function(response) {
|
||||
if ('result' in response.data) {
|
||||
vm.tags = response.data['result'];
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -16,16 +16,6 @@ def tags():
|
||||
"""
|
||||
pagedata = {}
|
||||
pagedata['title'] = 'Список меток - ' + app.config['TITLE']
|
||||
tags = models.db_session.query(
|
||||
models.Tag
|
||||
).order_by(
|
||||
models.Tag.name.asc()
|
||||
).all()
|
||||
|
||||
pagedata['tags'] = []
|
||||
for tag in tags:
|
||||
pagedata['tags'].append(tag.as_dict())
|
||||
|
||||
body = render_template('tags.html', pagedata=pagedata)
|
||||
return body
|
||||
|
||||
|
||||
Reference in New Issue
Block a user