Update tag
This commit is contained in:
@@ -1,365 +0,0 @@
|
||||
__author__ = 'RemiZOffAlex'
|
||||
__copyright__ = '(c) RemiZOffAlex'
|
||||
__license__ = 'MIT'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
__url__ = 'https://remizoffalex.ru'
|
||||
|
||||
from . import jsonrpc, login_required
|
||||
from .. import app, lib, models
|
||||
|
||||
|
||||
@jsonrpc.method('tag.add(name=str)')
|
||||
@login_required
|
||||
def tag_add(name):
|
||||
"""
|
||||
Добавить новый тег
|
||||
"""
|
||||
exist = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.name == name
|
||||
).first()
|
||||
if exist:
|
||||
raise ValueError
|
||||
|
||||
newTag = models.Tag(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('tag.exist(name=str)')
|
||||
def tag_exist(name):
|
||||
"""
|
||||
Проверить существует ли тег и вернуть информацию о нём
|
||||
"""
|
||||
text = name.lower().strip()
|
||||
tagRow = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.name==text
|
||||
).first()
|
||||
if tagRow is None:
|
||||
raise ValueError
|
||||
result = {
|
||||
'id': tagRow.id,
|
||||
'name': tagRow.name
|
||||
}
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.pages(id=int, page=int)')
|
||||
def tag_pages_list(id, page):
|
||||
"""
|
||||
Список статей
|
||||
"""
|
||||
tag = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if tag is None:
|
||||
raise ValueError
|
||||
indexes = models.db_session.query(
|
||||
models.TagPage.page_id
|
||||
).filter(
|
||||
models.TagPage.tag_id==id
|
||||
)
|
||||
pages = models.db_session.query(
|
||||
models.Page
|
||||
).filter(
|
||||
models.Page.id.in_(indexes)
|
||||
).order_by(
|
||||
models.Page.title.asc()
|
||||
)
|
||||
pages = lib.getpage(
|
||||
pages,
|
||||
page,
|
||||
app.config['ITEMS_ON_PAGE']
|
||||
).all()
|
||||
|
||||
result = []
|
||||
for page in pages:
|
||||
newRow = page.as_dict()
|
||||
newRow['user'] = page.user.as_dict()
|
||||
newRow['tags'] = []
|
||||
for tagLink in page.tags:
|
||||
newRow['tags'].append(tagLink.tag.as_dict())
|
||||
result.append(newRow)
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.pages.count(id=int)')
|
||||
def tag_pages_count(id):
|
||||
"""Общее количество статей
|
||||
"""
|
||||
tag = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if tag is None:
|
||||
raise ValueError
|
||||
indexes = models.db_session.query(
|
||||
models.TagPage.page_id
|
||||
).filter(
|
||||
models.TagPage.tag_id==id
|
||||
)
|
||||
result = models.db_session.query(
|
||||
models.Page
|
||||
).filter(
|
||||
models.Page.id.in_(indexes)
|
||||
).count()
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.notes(id=int, page=int)')
|
||||
@login_required
|
||||
def tag_notes_list(id, page):
|
||||
"""Список заметок
|
||||
"""
|
||||
tag = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if tag is None:
|
||||
raise ValueError
|
||||
indexes = models.db_session.query(
|
||||
models.TagNote.note_id
|
||||
).filter(
|
||||
models.TagNote.tag_id==id
|
||||
)
|
||||
notes = models.db_session.query(
|
||||
models.Note
|
||||
).filter(
|
||||
models.Note.user_id==lib.get_user().id,
|
||||
models.Note.id.in_(indexes)
|
||||
).order_by(
|
||||
models.Note.title.asc()
|
||||
)
|
||||
notes = lib.getpage(
|
||||
notes,
|
||||
page,
|
||||
app.config['ITEMS_ON_PAGE']
|
||||
).all()
|
||||
|
||||
result = []
|
||||
for note in notes:
|
||||
newRow = note.as_dict()
|
||||
newRow['tags'] = []
|
||||
for tagLink in note.tags:
|
||||
newRow['tags'].append(tagLink.tag.as_dict())
|
||||
result.append(newRow)
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.notes.count(id=int)')
|
||||
@login_required
|
||||
def tag_notes_count(id):
|
||||
"""Общее количество заметок
|
||||
"""
|
||||
tag = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if tag is None:
|
||||
raise ValueError
|
||||
indexes = models.db_session.query(
|
||||
models.TagNote.note_id
|
||||
).filter(
|
||||
models.TagNote.tag_id==id
|
||||
)
|
||||
result = models.db_session.query(
|
||||
models.Note
|
||||
).filter(
|
||||
models.Note.user_id==lib.get_user().id,
|
||||
models.Note.id.in_(indexes)
|
||||
).count()
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tags()')
|
||||
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
|
||||
|
||||
|
||||
@jsonrpc.method('tag.addToPage')
|
||||
@login_required
|
||||
def tag_addToPage(tag, id):
|
||||
"""
|
||||
Добавление тега на страницы
|
||||
"""
|
||||
tagRow = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==tag
|
||||
).first()
|
||||
if tagRow is None:
|
||||
raise ValueError
|
||||
page = models.db_session.query(
|
||||
models.Page
|
||||
).filter(
|
||||
models.Page.id==id
|
||||
).first()
|
||||
if page is None:
|
||||
raise ValueError
|
||||
exist = models.db_session.query(
|
||||
models.TagPage
|
||||
).filter(
|
||||
models.TagPage.tag_id==tagRow.id,
|
||||
models.TagPage.page_id==page.id
|
||||
).first()
|
||||
if exist:
|
||||
raise ValueError
|
||||
newtagpage = models.TagPage(
|
||||
page,
|
||||
tagRow
|
||||
)
|
||||
models.db_session.add(newtagpage)
|
||||
models.db_session.commit()
|
||||
result = tagRow.as_dict()
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.deleteFromPage')
|
||||
@login_required
|
||||
def tag_deleteFromPage(tag, id):
|
||||
"""
|
||||
Удаление тега со страницы
|
||||
"""
|
||||
exist = models.db_session.query(
|
||||
models.TagPage
|
||||
).filter(
|
||||
models.TagPage.tag_id==tag,
|
||||
models.TagPage.page_id==id
|
||||
).first()
|
||||
if exist is None:
|
||||
raise ValueError
|
||||
models.db_session.delete(exist)
|
||||
models.db_session.commit()
|
||||
return 'Тег {} удален'.format(id)
|
||||
|
||||
|
||||
@jsonrpc.method('tag.addToNote(tag=int, id=int)')
|
||||
@login_required
|
||||
def tag_addToNote(tag, id):
|
||||
"""
|
||||
Добавление тега в заметку
|
||||
"""
|
||||
noteRow = models.db_session.query(
|
||||
models.Note
|
||||
).filter(
|
||||
models.Note.id==id,
|
||||
models.Note.user_id==lib.get_user().id
|
||||
).first()
|
||||
if noteRow is None:
|
||||
raise ValueError
|
||||
tagRow = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==tag
|
||||
).first()
|
||||
if tagRow is None:
|
||||
raise ValueError
|
||||
exist = models.db_session.query(
|
||||
models.TagNote
|
||||
).filter(
|
||||
models.TagNote.tag_id==tagRow.id,
|
||||
models.TagNote.note_id==noteRow.id
|
||||
).first()
|
||||
if exist:
|
||||
raise ValueError
|
||||
newtagNote = models.TagNote(
|
||||
noteRow,
|
||||
tagRow
|
||||
)
|
||||
models.db_session.add(newtagNote)
|
||||
models.db_session.commit()
|
||||
result = tagRow.as_dict()
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.deleteFromNote(tag=int, id=int)')
|
||||
@login_required
|
||||
def tag_deleteFromNote(tag, id):
|
||||
"""
|
||||
Удаление тега из заметки
|
||||
"""
|
||||
noteRow = models.db_session.query(
|
||||
models.Note
|
||||
).filter(
|
||||
models.Note.id==id,
|
||||
models.Note.user_id==lib.get_user().id
|
||||
).first()
|
||||
if noteRow is None:
|
||||
raise ValueError
|
||||
tagRow = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==tag
|
||||
).first()
|
||||
if tagRow is None:
|
||||
raise ValueError
|
||||
exist = models.db_session.query(
|
||||
models.TagNote
|
||||
).filter(
|
||||
models.TagNote.tag_id==tag,
|
||||
models.TagNote.note_id==id
|
||||
).first()
|
||||
if exist is None:
|
||||
raise ValueError
|
||||
models.db_session.delete(exist)
|
||||
models.db_session.commit()
|
||||
return 'ok'
|
||||
|
||||
|
||||
@jsonrpc.method('tags.groups')
|
||||
def tags_groups():
|
||||
"""
|
||||
Облако тегов
|
||||
"""
|
||||
tags = models.db_session.query(
|
||||
models.Tag
|
||||
).order_by(
|
||||
models.Tag.name
|
||||
).all()
|
||||
result = {}
|
||||
for tag in tags:
|
||||
tag_json = tag.as_dict()
|
||||
if tag.name[0] in result:
|
||||
result[tag.name[0]].append(tag_json)
|
||||
else:
|
||||
result[tag.name[0]] = [tag_json]
|
||||
return result
|
||||
12
myapp/ns_api/tag/__init__.py
Normal file
12
myapp/ns_api/tag/__init__.py
Normal file
@@ -0,0 +1,12 @@
|
||||
__author__ = 'RemiZOffAlex'
|
||||
__copyright__ = '(c) RemiZOffAlex'
|
||||
__license__ = 'MIT'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
__url__ = 'https://remizoffalex.ru'
|
||||
|
||||
|
||||
from . import (
|
||||
note,
|
||||
page,
|
||||
tag
|
||||
)
|
||||
148
myapp/ns_api/tag/note.py
Normal file
148
myapp/ns_api/tag/note.py
Normal file
@@ -0,0 +1,148 @@
|
||||
__author__ = 'RemiZOffAlex'
|
||||
__copyright__ = '(c) RemiZOffAlex'
|
||||
__license__ = 'MIT'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
__url__ = 'https://remizoffalex.ru'
|
||||
|
||||
from .. import jsonrpc, login_required
|
||||
from ... import app, lib, models
|
||||
|
||||
|
||||
@jsonrpc.method('tag.note.add(tag=int, id=int)')
|
||||
@login_required
|
||||
def tag_note_add(tag, id):
|
||||
"""
|
||||
Добавление тега в заметку
|
||||
"""
|
||||
noteRow = models.db_session.query(
|
||||
models.Note
|
||||
).filter(
|
||||
models.Note.id==id,
|
||||
models.Note.user_id==lib.get_user().id
|
||||
).first()
|
||||
if noteRow is None:
|
||||
raise ValueError
|
||||
tagRow = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==tag
|
||||
).first()
|
||||
if tagRow is None:
|
||||
raise ValueError
|
||||
exist = models.db_session.query(
|
||||
models.TagNote
|
||||
).filter(
|
||||
models.TagNote.tag_id==tagRow.id,
|
||||
models.TagNote.note_id==noteRow.id
|
||||
).first()
|
||||
if exist:
|
||||
raise ValueError
|
||||
newtagNote = models.TagNote(
|
||||
noteRow,
|
||||
tagRow
|
||||
)
|
||||
models.db_session.add(newtagNote)
|
||||
models.db_session.commit()
|
||||
result = tagRow.as_dict()
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.note.delete(tag=int, id=int)')
|
||||
@login_required
|
||||
def tag_note_delete(tag, id):
|
||||
"""
|
||||
Удаление тега из заметки
|
||||
"""
|
||||
noteRow = models.db_session.query(
|
||||
models.Note
|
||||
).filter(
|
||||
models.Note.id==id,
|
||||
models.Note.user_id==lib.get_user().id
|
||||
).first()
|
||||
if noteRow is None:
|
||||
raise ValueError
|
||||
tagRow = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==tag
|
||||
).first()
|
||||
if tagRow is None:
|
||||
raise ValueError
|
||||
exist = models.db_session.query(
|
||||
models.TagNote
|
||||
).filter(
|
||||
models.TagNote.tag_id==tag,
|
||||
models.TagNote.note_id==id
|
||||
).first()
|
||||
if exist is None:
|
||||
raise ValueError
|
||||
models.db_session.delete(exist)
|
||||
models.db_session.commit()
|
||||
return 'ok'
|
||||
|
||||
|
||||
@jsonrpc.method('tag.notes(id=int, page=int)')
|
||||
@login_required
|
||||
def tag_notes_list(id, page):
|
||||
"""Список заметок
|
||||
"""
|
||||
tag = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if tag is None:
|
||||
raise ValueError
|
||||
indexes = models.db_session.query(
|
||||
models.TagNote.note_id
|
||||
).filter(
|
||||
models.TagNote.tag_id==id
|
||||
)
|
||||
notes = models.db_session.query(
|
||||
models.Note
|
||||
).filter(
|
||||
models.Note.user_id==lib.get_user().id,
|
||||
models.Note.id.in_(indexes)
|
||||
).order_by(
|
||||
models.Note.title.asc()
|
||||
)
|
||||
notes = lib.getpage(
|
||||
notes,
|
||||
page,
|
||||
app.config['ITEMS_ON_PAGE']
|
||||
).all()
|
||||
|
||||
result = []
|
||||
for note in notes:
|
||||
newRow = note.as_dict()
|
||||
newRow['tags'] = []
|
||||
for tagLink in note.tags:
|
||||
newRow['tags'].append(tagLink.tag.as_dict())
|
||||
result.append(newRow)
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.notes.count(id=int)')
|
||||
@login_required
|
||||
def tag_notes_count(id):
|
||||
"""Общее количество заметок
|
||||
"""
|
||||
tag = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if tag is None:
|
||||
raise ValueError
|
||||
indexes = models.db_session.query(
|
||||
models.TagNote.note_id
|
||||
).filter(
|
||||
models.TagNote.tag_id==id
|
||||
)
|
||||
result = models.db_session.query(
|
||||
models.Note
|
||||
).filter(
|
||||
models.Note.user_id==lib.get_user().id,
|
||||
models.Note.id.in_(indexes)
|
||||
).count()
|
||||
return result
|
||||
130
myapp/ns_api/tag/page.py
Normal file
130
myapp/ns_api/tag/page.py
Normal file
@@ -0,0 +1,130 @@
|
||||
__author__ = 'RemiZOffAlex'
|
||||
__copyright__ = '(c) RemiZOffAlex'
|
||||
__license__ = 'MIT'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
__url__ = 'https://remizoffalex.ru'
|
||||
|
||||
from .. import jsonrpc, login_required
|
||||
from ... import app, lib, models
|
||||
|
||||
|
||||
@jsonrpc.method('tag.page.add(id=int, tag=int)')
|
||||
@login_required
|
||||
def tag_page_add(tag, id):
|
||||
"""
|
||||
Добавление тега на страницы
|
||||
"""
|
||||
tagRow = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==tag
|
||||
).first()
|
||||
if tagRow is None:
|
||||
raise ValueError
|
||||
page = models.db_session.query(
|
||||
models.Page
|
||||
).filter(
|
||||
models.Page.id==id
|
||||
).first()
|
||||
if page is None:
|
||||
raise ValueError
|
||||
exist = models.db_session.query(
|
||||
models.TagPage
|
||||
).filter(
|
||||
models.TagPage.tag_id==tagRow.id,
|
||||
models.TagPage.page_id==page.id
|
||||
).first()
|
||||
if exist:
|
||||
raise ValueError
|
||||
newtagpage = models.TagPage(
|
||||
page,
|
||||
tagRow
|
||||
)
|
||||
models.db_session.add(newtagpage)
|
||||
models.db_session.commit()
|
||||
result = tagRow.as_dict()
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.page.delete(id=int, tag=int)')
|
||||
@login_required
|
||||
def tag_page_delete(tag, id):
|
||||
"""
|
||||
Удаление тега со страницы
|
||||
"""
|
||||
exist = models.db_session.query(
|
||||
models.TagPage
|
||||
).filter(
|
||||
models.TagPage.tag_id==tag,
|
||||
models.TagPage.page_id==id
|
||||
).first()
|
||||
if exist is None:
|
||||
raise ValueError
|
||||
models.db_session.delete(exist)
|
||||
models.db_session.commit()
|
||||
return 'Тег {} удален'.format(id)
|
||||
|
||||
|
||||
@jsonrpc.method('tag.pages(id=int, page=int)')
|
||||
def tag_pages_list(id, page):
|
||||
"""
|
||||
Список статей
|
||||
"""
|
||||
tag = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if tag is None:
|
||||
raise ValueError
|
||||
indexes = models.db_session.query(
|
||||
models.TagPage.page_id
|
||||
).filter(
|
||||
models.TagPage.tag_id==id
|
||||
)
|
||||
pages = models.db_session.query(
|
||||
models.Page
|
||||
).filter(
|
||||
models.Page.id.in_(indexes)
|
||||
).order_by(
|
||||
models.Page.title.asc()
|
||||
)
|
||||
pages = lib.getpage(
|
||||
pages,
|
||||
page,
|
||||
app.config['ITEMS_ON_PAGE']
|
||||
).all()
|
||||
|
||||
result = []
|
||||
for page in pages:
|
||||
newRow = page.as_dict()
|
||||
newRow['user'] = page.user.as_dict()
|
||||
newRow['tags'] = []
|
||||
for tagLink in page.tags:
|
||||
newRow['tags'].append(tagLink.tag.as_dict())
|
||||
result.append(newRow)
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tag.pages.count(id=int)')
|
||||
def tag_pages_count(id):
|
||||
"""Общее количество статей
|
||||
"""
|
||||
tag = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.id==id
|
||||
).first()
|
||||
if tag is None:
|
||||
raise ValueError
|
||||
indexes = models.db_session.query(
|
||||
models.TagPage.page_id
|
||||
).filter(
|
||||
models.TagPage.tag_id==id
|
||||
)
|
||||
result = models.db_session.query(
|
||||
models.Page
|
||||
).filter(
|
||||
models.Page.id.in_(indexes)
|
||||
).count()
|
||||
return result
|
||||
103
myapp/ns_api/tag/tag.py
Normal file
103
myapp/ns_api/tag/tag.py
Normal file
@@ -0,0 +1,103 @@
|
||||
__author__ = 'RemiZOffAlex'
|
||||
__copyright__ = '(c) RemiZOffAlex'
|
||||
__license__ = 'MIT'
|
||||
__email__ = 'remizoffalex@mail.ru'
|
||||
__url__ = 'https://remizoffalex.ru'
|
||||
|
||||
from .. import jsonrpc, login_required
|
||||
from ... import app, lib, models
|
||||
|
||||
|
||||
@jsonrpc.method('tag.add(name=str)')
|
||||
@login_required
|
||||
def tag_add(name):
|
||||
"""
|
||||
Добавить новый тег
|
||||
"""
|
||||
exist = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.name == name
|
||||
).first()
|
||||
if exist:
|
||||
raise ValueError
|
||||
|
||||
newTag = models.Tag(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('tag.exist(name=str)')
|
||||
def tag_exist(name):
|
||||
"""
|
||||
Проверить существует ли тег и вернуть информацию о нём
|
||||
"""
|
||||
text = name.lower().strip()
|
||||
tagRow = models.db_session.query(
|
||||
models.Tag
|
||||
).filter(
|
||||
models.Tag.name==text
|
||||
).first()
|
||||
if tagRow is None:
|
||||
raise ValueError
|
||||
result = {
|
||||
'id': tagRow.id,
|
||||
'name': tagRow.name
|
||||
}
|
||||
return result
|
||||
|
||||
|
||||
@jsonrpc.method('tags()')
|
||||
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
|
||||
|
||||
|
||||
@jsonrpc.method('tags.groups')
|
||||
def tags_groups():
|
||||
"""
|
||||
Облако тегов
|
||||
"""
|
||||
tags = models.db_session.query(
|
||||
models.Tag
|
||||
).order_by(
|
||||
models.Tag.name
|
||||
).all()
|
||||
result = {}
|
||||
for tag in tags:
|
||||
tag_json = tag.as_dict()
|
||||
if tag.name[0] in result:
|
||||
result[tag.name[0]].append(tag_json)
|
||||
else:
|
||||
result[tag.name[0]] = [tag_json]
|
||||
return result
|
||||
@@ -7,7 +7,7 @@
|
||||
{{ note.title }}
|
||||
</h3>
|
||||
|
||||
<tags-component v-bind:tags="note.tags" v-bind:node="note.id" v-bind:url="'Note'"></tags-component>
|
||||
<tags-component v-bind:tags="note.tags" v-bind:resource="{id: note.id, name: 'note'}"></tags-component>
|
||||
|
||||
<span v-html="note.body"></span>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
{{ page.title }}
|
||||
</h3>
|
||||
|
||||
<tags-component v-bind:tags="page.tags" v-bind:node="page.id" v-bind:url="'Page'"></tags-component>
|
||||
<tags-component v-bind:tags="page.tags" v-bind:resource="{id: page.id, name: 'page'}"></tags-component>
|
||||
|
||||
<span v-html="page.body"></span>
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
<tags-component v-bind:tags="document.tags" v-bind:resource="{id: document.id, name: 'document'}"></tags-component>
|
||||
<script type="text/javascript" src="/static/components/tags.js"></script>
|
||||
|
||||
*/
|
||||
|
||||
var tagsTemplate = `
|
||||
<div>
|
||||
<!-- Начало: Теги -->
|
||||
@@ -7,9 +13,9 @@ var tagsTemplate = `
|
||||
|
||||
<div class="btn btn-outline-success mb-1" v-on:click="showPanel(panels.standart)"><i class="fa fa-plus"></i></div>
|
||||
|
||||
<div class="btn-group mr-2 mb-1" v-for="(tag, index) in sortedTags">
|
||||
<div class="btn-group mr-2 mb-1" v-for="(tag, tagIdx) in sortedTags">
|
||||
<a class="btn btn-outline-secondary text-monospace" :href="'/tag/' + tag.id">{{ tag.name }}</a>
|
||||
<div class="btn btn-outline-danger" v-on:click="removeTag(tag.id)"><i class="fa fa-remove"></i></div>
|
||||
<div class="btn btn-outline-danger" v-on:click="removeTag(tag)"><i class="fa fa-remove"></i></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -25,8 +31,8 @@ var tagsTemplate = `
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mt-3">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col py-2">
|
||||
<template v-for="(tags, key, index) in groups">
|
||||
|
||||
<a class="btn btn-outline-secondary mt-2 mr-2" v-if="(index % 2)===0" :href="'#' + index">{{ key }}</a>
|
||||
@@ -56,8 +62,8 @@ var tagsTemplate = `
|
||||
<div class="col pr-0">
|
||||
<a :name="index" class="btn btn-outline-danger mr-2 mb-1">{{ key }}</a>
|
||||
<template v-for="(tag, tagIdx) in tags">
|
||||
<div class="btn btn-outline-secondary mr-2 mb-1" v-if="!tag_ids.includes(tag.id)" v-on:click="tag_add_to_node(tag)">{{ tag.name }}</div>
|
||||
<div class="btn btn-primary mr-2 mb-1" v-else v-on:click="removeTag(tag.id)">{{ tag.name }}</div>
|
||||
<button type="button" class="btn btn-primary mr-2 mb-1" v-if="tag_includes(tag)" v-on:click="removeTag(tag)">{{ tag.name }}</button>
|
||||
<button type="button" class="btn btn-outline-secondary mr-2 mb-1" v-else v-on:click="tag_add_to_node(tag)">{{ tag.name }}</button>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@@ -72,10 +78,6 @@ Vue.component('tags-component', {
|
||||
return {
|
||||
newtag: '',
|
||||
groups: {},
|
||||
forms: {
|
||||
modal: false,
|
||||
panel: false
|
||||
},
|
||||
panels: {
|
||||
standart: {
|
||||
visible: false
|
||||
@@ -86,7 +88,7 @@ Vue.component('tags-component', {
|
||||
}
|
||||
}
|
||||
},
|
||||
props: ['tags', 'node', 'url'],
|
||||
props: ['tags', 'resource'],
|
||||
template: tagsTemplate,
|
||||
methods: {
|
||||
arrayRemove: function(arr, value) {
|
||||
@@ -95,31 +97,24 @@ Vue.component('tags-component', {
|
||||
return ele != value;
|
||||
});
|
||||
},
|
||||
removeTag: function (id) {
|
||||
removeTag: function (tag) {
|
||||
/* Удаление тега из ресурса */
|
||||
let vm = this;
|
||||
var tag = null;
|
||||
for (var i = 0; i < vm.tags.length; i++) {
|
||||
if (id == vm.tags[i].id) {
|
||||
tag = vm.tags[i]
|
||||
}
|
||||
}
|
||||
if (!tag) {return;}
|
||||
axios.post(
|
||||
'/api',
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": 'tag.deleteFrom' + vm.url,
|
||||
"method": 'tag.' + vm.resource.name + '.delete',
|
||||
"params": {
|
||||
"id": vm.node,
|
||||
"tag": tag.id
|
||||
"tag": tag.id,
|
||||
"id": vm.resource.id
|
||||
},
|
||||
"id": 1
|
||||
}
|
||||
).then(
|
||||
function(response) {
|
||||
if ('result' in response.data) {
|
||||
vm.tags = vm.arrayRemove(vm.tags, tag);
|
||||
vm.tags = vm.arrayRemove(vm.tags, vm.tag_includes(tag));
|
||||
} else if ('error' in response.data) {
|
||||
console.log(response.data);
|
||||
}
|
||||
@@ -190,9 +185,9 @@ Vue.component('tags-component', {
|
||||
'/api',
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": 'tag.addTo' + this.url,
|
||||
"method": 'tag.' + vm.resource.name + '.add',
|
||||
"params": {
|
||||
"id": vm.node,
|
||||
"id": vm.resource.id,
|
||||
"tag": tag.id
|
||||
},
|
||||
"id": 1
|
||||
@@ -234,20 +229,19 @@ Vue.component('tags-component', {
|
||||
/* Показать/скрыть панель */
|
||||
panel.visible = !panel.visible;
|
||||
},
|
||||
tag_includes: function(tag) {
|
||||
let vm = this;
|
||||
let result = vm.tags.find(function(element, index, array) {
|
||||
return element.id===tag.id;
|
||||
}, tag);
|
||||
return result;
|
||||
},
|
||||
},
|
||||
mounted: function() {
|
||||
let vm = this;
|
||||
vm.getTags();
|
||||
},
|
||||
computed: {
|
||||
tag_ids: function() {
|
||||
let vm = this;
|
||||
var result = [];
|
||||
for (var i = 0; i < vm.tags.length; i++) {
|
||||
result.push(vm.tags[i].id);
|
||||
}
|
||||
return result;
|
||||
},
|
||||
sortedTags: function() {
|
||||
let vm = this;
|
||||
if (vm.tags === undefined) {return [];}
|
||||
|
||||
Reference in New Issue
Block a user