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.add(newTag)
|
||||||
models.db_session.commit()
|
models.db_session.commit()
|
||||||
return newTag.as_dict()
|
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="row">
|
||||||
<div class="col py-2">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
{% endraw %}
|
{% endraw %}
|
||||||
@@ -42,11 +45,17 @@
|
|||||||
var app = new Vue({
|
var app = new Vue({
|
||||||
el: '#app',
|
el: '#app',
|
||||||
data: {
|
data: {
|
||||||
tags: {{ pagedata['tags']|tojson|safe }},
|
tags: [],
|
||||||
formNewTag: false,
|
formNewTag: false,
|
||||||
newTag: ''
|
newTag: ''
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
arrayRemove: function(arr, value) {
|
||||||
|
/* Удаление элемента из списка */
|
||||||
|
return arr.filter(function(element){
|
||||||
|
return element != value;
|
||||||
|
});
|
||||||
|
},
|
||||||
addTag: function() {
|
addTag: function() {
|
||||||
/* Добавить тег */
|
/* Добавить тег */
|
||||||
var vm = this;
|
var vm = this;
|
||||||
@@ -73,7 +82,47 @@ var app = new Vue({
|
|||||||
/* Показать/скрыть форму добавления нового тега */
|
/* Показать/скрыть форму добавления нового тега */
|
||||||
var vm = this;
|
var vm = this;
|
||||||
vm.formNewTag = !vm.formNewTag;
|
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>
|
</script>
|
||||||
|
|||||||
@@ -16,16 +16,6 @@ def tags():
|
|||||||
"""
|
"""
|
||||||
pagedata = {}
|
pagedata = {}
|
||||||
pagedata['title'] = 'Список меток - ' + app.config['TITLE']
|
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)
|
body = render_template('tags.html', pagedata=pagedata)
|
||||||
return body
|
return body
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user