diff --git a/src/myapp/models/__init__.py b/src/myapp/models/__init__.py index 3ffa1f6..28bc205 100644 --- a/src/myapp/models/__init__.py +++ b/src/myapp/models/__init__.py @@ -16,9 +16,13 @@ engine = create_engine( if not database_exists(engine.url): create_database(engine.url) -db_session = scoped_session(sessionmaker(autocommit=False, - autoflush=False, - bind=engine)) +db_session = scoped_session( + sessionmaker( + autocommit=False, + autoflush=False, + bind=engine + ) +) Base = declarative_base() Base.query = db_session.query_property() @@ -29,10 +33,14 @@ from .users import User # noqa F401 from .tag import Tag # noqa F401 # Статьи -from .page import Page, TagPage # noqa F401 +from .page.common import Page # noqa F401 +from .page.favorite import PageFavorite # noqa F401 +from .page.tag import PageTag # noqa F401 # Заметки -from .note import Note, TagNote # noqa F401 +from .note.common import Note # noqa F401 +from .note.favorite import NoteFavorite # noqa F401 +from .note.tag import NoteTag # noqa F401 Base.metadata.create_all(engine) diff --git a/src/myapp/models/note/__init__.py b/src/myapp/models/note/__init__.py new file mode 100644 index 0000000..18c55bb --- /dev/null +++ b/src/myapp/models/note/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' diff --git a/src/myapp/models/note.py b/src/myapp/models/note/common.py similarity index 54% rename from src/myapp/models/note.py rename to src/myapp/models/note/common.py index 5b2c1f4..e1e8c5b 100644 --- a/src/myapp/models/note.py +++ b/src/myapp/models/note/common.py @@ -6,7 +6,7 @@ import datetime from sqlalchemy import Column, Integer, ForeignKey, String, DateTime from sqlalchemy.orm import relationship -from . import Base +from .. import Base class Note(Base): @@ -27,7 +27,7 @@ class Note(Base): primaryjoin="Note.user_id==User.id", uselist=False ) - tags = relationship("TagNote", primaryjoin="Note.id==TagNote.note_id") + tags = relationship("NoteTag", primaryjoin="Note.id==NoteTag.note_id") def __init__(self, user, title): assert type(user).__name__ == 'User', 'Не передан объект User' @@ -41,36 +41,3 @@ class Note(Base): def as_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} - - -class TagNote(Base): - """Теги к заметкам""" - __tablename__ = "tagnote" - - id = Column(Integer, primary_key=True) - note_id = Column(Integer, ForeignKey('note.id')) - tag_id = Column(Integer, ForeignKey('tag.id')) - - # Связи - note = relationship( - "Note", - primaryjoin="TagNote.note_id==Note.id", - uselist=False - ) - tag = relationship( - "Tag", - primaryjoin="TagNote.tag_id==Tag.id", - uselist=False - ) - - def __init__(self, note, tag): - assert type(note).__name__ == 'Note', 'Не передан объект Note' - assert type(tag).__name__ == 'Tag', 'Не передан объект Tag' - self.note_id = note.id - self.tag_id = tag.id - - def __repr__(self): - return "" % (self.id) - - def as_dict(self): - return {c.name: getattr(self, c.name) for c in self.__table__.columns} diff --git a/src/myapp/models/note/favorite.py b/src/myapp/models/note/favorite.py new file mode 100644 index 0000000..15eb944 --- /dev/null +++ b/src/myapp/models/note/favorite.py @@ -0,0 +1,43 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + +import datetime +from sqlalchemy import Column, Boolean, Integer, ForeignKey, String, DateTime +from sqlalchemy.orm import relationship +from sqlalchemy.schema import Sequence + +from .. import Base + + +class NoteFavorite(Base): + """Избранные статьи + """ + __tablename__ = "note_favorite" + + # ID + id = Column(Integer, primary_key=True, index=True, unique=True) + user_id = Column(Integer, ForeignKey('user.id'), index=True) + note_id = Column(Integer, ForeignKey('note.id'), index=True) + created = Column(DateTime) + + # Связи + note = relationship( + "Note", + primaryjoin="NoteFavorite.note_id == Note.id", + uselist=False + ) + user = relationship( + "User", + primaryjoin="NoteFavorite.user_id == User.id", + uselist=False + ) + + def __init__(self, user, note): + assert type(user).__name__ == 'User', 'Не передан объект User' + assert type(note).__name__ == 'Note', 'Не передан объект Note' + self.user_id = user.id + self.note_id = note.id + self.created = datetime.datetime.now() + + def as_dict(self): + return {c.name: getattr(self, c.name) for c in self.__table__.columns} diff --git a/src/myapp/models/note/tag.py b/src/myapp/models/note/tag.py new file mode 100644 index 0000000..4e5dbfb --- /dev/null +++ b/src/myapp/models/note/tag.py @@ -0,0 +1,42 @@ +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + +import datetime +from sqlalchemy import Column, Integer, ForeignKey, String, DateTime +from sqlalchemy.orm import relationship + +from .. import Base + + +class NoteTag(Base): + """Теги к заметкам""" + __tablename__ = "note_tag" + + id = Column(Integer, primary_key=True) + note_id = Column(Integer, ForeignKey('note.id')) + tag_id = Column(Integer, ForeignKey('tag.id')) + + # Связи + note = relationship( + "Note", + primaryjoin="NoteTag.note_id==Note.id", + uselist=False + ) + tag = relationship( + "Tag", + primaryjoin="NoteTag.tag_id==Tag.id", + uselist=False + ) + + def __init__(self, note, tag): + assert type(note).__name__ == 'Note', 'Не передан объект Note' + assert type(tag).__name__ == 'Tag', 'Не передан объект Tag' + self.note_id = note.id + self.tag_id = tag.id + + def __repr__(self): + return "" % (self.id) + + def as_dict(self): + return {c.name: getattr(self, c.name) for c in self.__table__.columns} diff --git a/src/myapp/models/page/__init__.py b/src/myapp/models/page/__init__.py new file mode 100644 index 0000000..18c55bb --- /dev/null +++ b/src/myapp/models/page/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' diff --git a/src/myapp/models/page.py b/src/myapp/models/page/common.py similarity index 51% rename from src/myapp/models/page.py rename to src/myapp/models/page/common.py index 51bfd96..7730b4e 100644 --- a/src/myapp/models/page.py +++ b/src/myapp/models/page/common.py @@ -6,7 +6,7 @@ import datetime from sqlalchemy import Column, Integer, ForeignKey, String, DateTime from sqlalchemy.orm import relationship -from . import Base +from .. import Base class Page(Base): @@ -27,7 +27,7 @@ class Page(Base): primaryjoin="Page.user_id==User.id", uselist=False ) - tags = relationship("TagPage", primaryjoin="Page.id==TagPage.page_id") + tags = relationship("PageTag", primaryjoin="Page.id==PageTag.page_id") def __init__(self, user, title): assert type(user).__name__ == 'User', 'Не передан объект User' @@ -41,38 +41,3 @@ class Page(Base): def as_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} - - -class TagPage(Base): - """Теги к страницам""" - __tablename__ = "tagpage" - - id = Column(Integer, primary_key=True) - page_id = Column(Integer, ForeignKey('page.id')) - tag_id = Column(Integer, ForeignKey('tag.id')) - created = Column(DateTime) # Дата создания - - # Связи - page = relationship( - "Page", - primaryjoin="TagPage.page_id==Page.id", - uselist=False - ) - tag = relationship( - "Tag", - primaryjoin="TagPage.tag_id==Tag.id", - uselist=False - ) - - def __init__(self, page, tag): - assert type(page).__name__ == 'Page', 'Не передан объект Page' - assert type(tag).__name__ == 'Tag', 'Не передан объект Tag' - self.page_id = page.id - self.tag_id = tag.id - self.created = datetime.datetime.now() - - def __repr__(self): - return "" % (self.id) - - def as_dict(self): - return {c.name: getattr(self, c.name) for c in self.__table__.columns} diff --git a/src/myapp/models/page/favorite.py b/src/myapp/models/page/favorite.py new file mode 100644 index 0000000..edf66f9 --- /dev/null +++ b/src/myapp/models/page/favorite.py @@ -0,0 +1,43 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + +import datetime +from sqlalchemy import Column, Boolean, Integer, ForeignKey, String, DateTime +from sqlalchemy.orm import relationship +from sqlalchemy.schema import Sequence + +from .. import Base + + +class PageFavorite(Base): + """Избранные статьи + """ + __tablename__ = "page_favorite" + + # ID + id = Column(Integer, primary_key=True, index=True, unique=True) + user_id = Column(Integer, ForeignKey('user.id'), index=True) + page_id = Column(Integer, ForeignKey('page.id'), index=True) + created = Column(DateTime) + + # Связи + page = relationship( + "Page", + primaryjoin="PageFavorite.page_id == Page.id", + uselist=False + ) + user = relationship( + "User", + primaryjoin="PageFavorite.user_id == User.id", + uselist=False + ) + + def __init__(self, user, page): + assert type(user).__name__ == 'User', 'Не передан объект User' + assert type(page).__name__ == 'Page', 'Не передан объект Page' + self.user_id = user.id + self.page_id = page.id + self.created = datetime.datetime.now() + + def as_dict(self): + return {c.name: getattr(self, c.name) for c in self.__table__.columns} diff --git a/src/myapp/models/page/tag.py b/src/myapp/models/page/tag.py new file mode 100644 index 0000000..19a0dc1 --- /dev/null +++ b/src/myapp/models/page/tag.py @@ -0,0 +1,44 @@ +__author__ = 'RemiZOffAlex' +__copyright__ = '(c) RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + +import datetime +from sqlalchemy import Column, Integer, ForeignKey, String, DateTime +from sqlalchemy.orm import relationship + +from .. import Base + + +class PageTag(Base): + """Теги к страницам""" + __tablename__ = "page_tag" + + id = Column(Integer, primary_key=True) + page_id = Column(Integer, ForeignKey('page.id')) + tag_id = Column(Integer, ForeignKey('tag.id')) + created = Column(DateTime) # Дата создания + + # Связи + page = relationship( + "Page", + primaryjoin="PageTag.page_id==Page.id", + uselist=False + ) + tag = relationship( + "Tag", + primaryjoin="PageTag.tag_id==Tag.id", + uselist=False + ) + + def __init__(self, page, tag): + assert type(page).__name__ == 'Page', 'Не передан объект Page' + assert type(tag).__name__ == 'Tag', 'Не передан объект Tag' + self.page_id = page.id + self.tag_id = tag.id + self.created = datetime.datetime.now() + + def __repr__(self): + return "" % (self.id) + + def as_dict(self): + return {c.name: getattr(self, c.name) for c in self.__table__.columns} diff --git a/src/myapp/models/tag.py b/src/myapp/models/tag.py index 69cafeb..9685e55 100644 --- a/src/myapp/models/tag.py +++ b/src/myapp/models/tag.py @@ -23,7 +23,7 @@ class Tag(Base): name = Column(String, nullable=False, unique=True) # Связи - pages = relationship("TagPage", primaryjoin="Tag.id==TagPage.tag_id") + pages = relationship("PageTag", primaryjoin="Tag.id==PageTag.tag_id") def __init__(self, name): self.name = name diff --git a/src/myapp/mutations/note.py b/src/myapp/mutations/note.py new file mode 100644 index 0000000..059c2b7 --- /dev/null +++ b/src/myapp/mutations/note.py @@ -0,0 +1,80 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + +import logging + +from .. import lib, models + + +log = logging.getLogger(__name__) + + +def note_as_dict( + note: models.Note, + fields: list = ['id', 'title'] +): + """Статью как словарь (в JSON) + """ + def field_favorite(note): + # Избранное + assert lib.get_user(), 'favorite only authorized users' + result = False + favorite = models.db_session.query( + models.NoteFavorite + ).filter( + models.NoteFavorite.note_id == note.id, + models.NoteFavorite.user_id == lib.get_user().id + ).first() + if favorite: + result = True + return result + + def field_tags(note): + # Теги + result = [] + for tagLink in note.tags: + newTag = tagLink.tag.as_dict() + result.append(newTag) + return result + + def field_user(note): + # Пользователь + return note.user.as_dict() + + def field_parents(note): + # Родители + result = [] + parent = note.parent + while parent: + result.append(parent.as_dict()) + parent = parent.parent + result.reverse() + return result + + def field_nodes(note): + # Дети + result = [] + for item in note.nodes: + result.append(note_as_dict(item)) + return result + + funcs = { + 'favorite': field_favorite, + 'tags': field_tags, + 'user': field_user, + 'parents': field_parents, + 'nodes': field_nodes + } + result = {} + + for column in note.__table__.columns: + if column.name in fields: + result[column.name] = getattr(note, column.name) + + for field in fields: + if field in funcs: + func = funcs[field] + result[field] = func(note) + + log.info(result) + return result diff --git a/src/myapp/mutations/page.py b/src/myapp/mutations/page.py index 491e336..74c6cc5 100644 --- a/src/myapp/mutations/page.py +++ b/src/myapp/mutations/page.py @@ -20,10 +20,10 @@ def page_as_dict( assert lib.get_user(), 'favorite only authorized users' result = False favorite = models.db_session.query( - models.FavoritePage + models.PageFavorite ).filter( - models.FavoritePage.page_id == page.id, - models.FavoritePage.user_id == lib.get_user().id + models.PageFavorite.page_id == page.id, + models.PageFavorite.user_id == lib.get_user().id ).first() if favorite: result = True diff --git a/src/myapp/mutations/user.py b/src/myapp/mutations/user.py index c0ae7c5..0580f4a 100644 --- a/src/myapp/mutations/user.py +++ b/src/myapp/mutations/user.py @@ -20,10 +20,10 @@ def user_as_dict( assert lib.get_user(), 'favorite only authorized users' result = False favorite = models.db_session.query( - models.FavoritePage + models.PageFavorite ).filter( - models.FavoritePage.user_id == user.id, - models.FavoritePage.user_id == lib.get_user().id + models.PageFavorite.user_id == user.id, + models.PageFavorite.user_id == lib.get_user().id ).first() if favorite: result = True diff --git a/src/myapp/ns_api/tag/note.py b/src/myapp/ns_api/tag/note.py index 1f01ef9..d5ca900 100644 --- a/src/myapp/ns_api/tag/note.py +++ b/src/myapp/ns_api/tag/note.py @@ -27,14 +27,14 @@ def tag_note_add(tag: int, id: int) -> dict: if tagRow is None: raise ValueError exist = models.db_session.query( - models.TagNote + models.NoteTag ).filter( - models.TagNote.tag_id == tagRow.id, - models.TagNote.note_id == noteRow.id + models.NoteTag.tag_id == tagRow.id, + models.NoteTag.note_id == noteRow.id ).first() if exist: raise ValueError - newtagNote = models.TagNote( + newtagNote = models.NoteTag( noteRow, tagRow ) @@ -65,10 +65,10 @@ def tag_note_delete(tag: int, id: int) -> bool: if tagRow is None: raise ValueError exist = models.db_session.query( - models.TagNote + models.NoteTag ).filter( - models.TagNote.tag_id == tag, - models.TagNote.note_id == id + models.NoteTag.tag_id == tag, + models.NoteTag.note_id == id ).first() if exist is None: raise ValueError @@ -79,7 +79,12 @@ def tag_note_delete(tag: int, id: int) -> bool: @jsonrpc.method('tag.notes') @login_required -def tag_notes_list(id: int, page: int) -> list: +def tag_notes_list( + id: int, + page: int = 1, + order_by: dict = {'field': 'title', 'order': 'asc'}, + fields: list = ['id', 'title', 'tags', 'user'] +) -> list: """Список заметок """ tag = models.db_session.query( @@ -90,18 +95,28 @@ def tag_notes_list(id: int, page: int) -> list: if tag is None: raise ValueError indexes = models.db_session.query( - models.TagNote.note_id + models.NoteTag.note_id ).filter( - models.TagNote.tag_id == id + models.NoteTag.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() ) + + # Сортировка + if order_by['field'] not in ['created', 'id', 'title', 'updated']: + raise ValueError + if order_by['order'] not in ['asc', 'desc']: + raise ValueError + field = getattr(models.Note, order_by['field']) + order = getattr(field, order_by['order']) + notes = notes.order_by( + order() + ) + notes = lib.getpage( notes, page, @@ -110,10 +125,7 @@ def tag_notes_list(id: int, page: int) -> list: result = [] for note in notes: - newRow = note.as_dict() - newRow['tags'] = [] - for tagLink in note.tags: - newRow['tags'].append(tagLink.tag.as_dict()) + newRow = note_as_dict(note, fields) result.append(newRow) return result @@ -131,9 +143,9 @@ def tag_notes_count(id: int) -> int: if tag is None: raise ValueError indexes = models.db_session.query( - models.TagNote.note_id + models.NoteTag.note_id ).filter( - models.TagNote.tag_id == id + models.NoteTag.tag_id == id ) result = models.db_session.query( models.Note diff --git a/src/myapp/ns_api/tag/page.py b/src/myapp/ns_api/tag/page.py index a0165ca..c089d37 100644 --- a/src/myapp/ns_api/tag/page.py +++ b/src/myapp/ns_api/tag/page.py @@ -26,14 +26,14 @@ def tag_page_add(tag: int, id: int) -> dict: if page is None: raise ValueError exist = models.db_session.query( - models.TagPage + models.PageTag ).filter( - models.TagPage.tag_id == tagRow.id, - models.TagPage.page_id == page.id + models.PageTag.tag_id == tagRow.id, + models.PageTag.page_id == page.id ).first() if exist: raise ValueError - newtagpage = models.TagPage( + newtagpage = models.PageTag( page, tagRow ) @@ -49,10 +49,10 @@ def tag_page_delete(tag: int, id: int) -> bool: """Удаление тега со страницы """ exist = models.db_session.query( - models.TagPage + models.PageTag ).filter( - models.TagPage.tag_id == tag, - models.TagPage.page_id == id + models.PageTag.tag_id == tag, + models.PageTag.page_id == id ).first() if exist is None: raise ValueError @@ -78,9 +78,9 @@ def tag_pages_list( if tag is None: raise ValueError indexes = models.db_session.query( - models.TagPage.page_id + models.PageTag.page_id ).filter( - models.TagPage.tag_id == id + models.PageTag.tag_id == id ) pages = models.db_session.query( models.Page @@ -128,9 +128,9 @@ def tag_pages_count(id: int) -> int: if tag is None: raise ValueError indexes = models.db_session.query( - models.TagPage.page_id + models.PageTag.page_id ).filter( - models.TagPage.tag_id == id + models.PageTag.tag_id == id ) result = models.db_session.query( models.Page diff --git a/src/myapp/ns_tag/views_guest.py b/src/myapp/ns_tag/views_guest.py index 6d8052c..5106141 100644 --- a/src/myapp/ns_tag/views_guest.py +++ b/src/myapp/ns_tag/views_guest.py @@ -38,9 +38,9 @@ def tag_id(id: int, page: int = 1): pagedata['tag'] = tag pages_idx = models.db_session.query( - models.TagPage.page_id + models.PageTag.page_id ).filter( - models.TagPage.tag_id == id + models.PageTag.tag_id == id ) pages = models.db_session.query( models.Page diff --git a/src/myapp/templates/private/domains/tag/inc.j2 b/src/myapp/templates/private/domains/tag/inc.j2 index 01943b1..18e7d2d 100644 --- a/src/myapp/templates/private/domains/tag/inc.j2 +++ b/src/myapp/templates/private/domains/tag/inc.j2 @@ -1,18 +1,18 @@ {% include '/private/domains/tag/edit.js' %} {% include '/private/domains/tag/menu.js' %} +{% include '/private/domains/tag/notes.js' %} {% include '/private/domains/tag/pages.js' %} {% include '/private/domains/tag/tag.js' %} {% include '/private/domains/tag/tags.js' %} -{% include '/private/domains/tag/users.js' %} Object.assign( routes, { "/tag/:id/edit": layout_decorator(TagEdit), + "/tag/:id/notes": layout_decorator(TagNotes), + "/tag/:id/notes/:page": layout_decorator(TagNotes), "/tag/:id/pages": layout_decorator(TagPages), "/tag/:id/pages/:page": layout_decorator(TagPages), - "/tag/:id/users": layout_decorator(TagUsers), - "/tag/:id/users/:page": layout_decorator(TagUsers), "/tag/:id": layout_decorator(Tag), "/tags": layout_decorator(Tags), } diff --git a/src/myapp/templates/private/domains/tag/menu.js b/src/myapp/templates/private/domains/tag/menu.js index cc0f65f..71263be 100644 --- a/src/myapp/templates/private/domains/tag/menu.js +++ b/src/myapp/templates/private/domains/tag/menu.js @@ -12,16 +12,16 @@ function MenuTag() { }; function button_pages() { if (data.menuitem==='pages') { - return {tag: '<', children: '
Статьи
'}; + return {tag: '<', children: '
Статьи
'}; } else { return m(m.route.Link, {class: "btn btn-outline-secondary me-2 text-decoration-none", href: `/tag/${data.tag.id}/pages`}, 'Статьи') } }; - function button_users() { - if (data.menuitem==='users') { - return {tag: '<', children: '
Пользователи
'}; + function button_notes() { + if (data.menuitem ==='notes') { + return {tag: '<', children: '
Заметки
'}; } else { - return m(m.route.Link, {class: "btn btn-outline-secondary me-2 text-decoration-none", href: `/tag/${data.tag.id}/users`}, 'Пользователи') + return m(m.route.Link, { class: "btn btn-outline-secondary me-2 text-decoration-none", href: `/tag/${data.tag.id}/notes` }, 'Заметки') } }; return { @@ -43,7 +43,7 @@ function MenuTag() { m('div', {class: 'col py-2'}, [ button_common(), button_pages(), - button_users(), + button_notes(), ]), ]); } diff --git a/src/myapp/templates/private/domains/tag/users.js b/src/myapp/templates/private/domains/tag/notes.js similarity index 69% rename from src/myapp/templates/private/domains/tag/users.js rename to src/myapp/templates/private/domains/tag/notes.js index e091ad2..b0768b5 100644 --- a/src/myapp/templates/private/domains/tag/users.js +++ b/src/myapp/templates/private/domains/tag/notes.js @@ -1,21 +1,27 @@ -function TagUsers() { +function TagNotes() { let data = { filter: PanelFilter(), order_by: PanelOrderBy({ - field: 'name', + field: 'title', fields: [ {value: 'id', text: 'ID'}, - {value: 'name', text: 'заголовку'} + {value: 'title', text: 'заголовку'}, + {value: 'created', text: 'дате создания'}, + {value: 'updated', text: 'дате обновления'} ], - clickHandler: users_get, + clickHandler: notes_get, order: 'asc', }), tag: null, - users: [], + raw_notes: [], + get notes() { + let result = data.raw_notes.filter(note_filter); + return result; + }, pagination: { page: 1, size: 0, - prefix_url: '/users' + prefix_url: '/notes' }, }; function breadcrumbs_render() { @@ -23,10 +29,21 @@ function TagUsers() { m('li', {class: 'breadcrumb-item'}, m(m.route.Link, {href: '/'}, m('i', {class: 'fa fa-home'}))), m('li', {class: 'breadcrumb-item'}, m(m.route.Link, {href: '/tags'}, 'Список тегов')), m('li', {class: 'breadcrumb-item'}, m(m.route.Link, {href: `/tag/${data.tag.id}`}, data.tag.name)), - m('li', {class: 'breadcrumb-item active'}, 'Список пользователей'), + m('li', {class: 'breadcrumb-item active'}, 'Список статей'), ]); return result; }; + function note_filter(note) { + let filter = data.filter.data; + let value = filter.value; + if ( value.length<1 ) { + return true; + } + if ( note.title.toLowerCase().includes(value.toLowerCase()) ) { + return true; + } + return false; + }; function tag_get(id) { m.request({ url: '/api', @@ -43,34 +60,34 @@ function TagUsers() { function(response) { if ('result' in response) { data.tag = response['result']; - data.pagination.prefix_url = `/tag/${data.tag.id}/users`; - document.title = `Пользователи с навыком [${data.tag.name}] - ${SETTINGS.TITLE}`; - users_get(); + data.pagination.prefix_url = `/tag/${data.tag.id}/notes`; + document.title = `Статьи с тегом [${data.tag.name}] - ${SETTINGS.TITLE}`; + notes_get(); } } ); }; - function users_get() { + function notes_get() { m.request({ url: '/api', method: "POST", body: [ { "jsonrpc": "2.0", - "method": 'tag.users', + "method": 'tag.notes', "params": { "id": data.tag.id, "page": data.pagination.page, "order_by": data.order_by.value, - "fields": ["id", "name", "skills"] + "fields": ["id", "title", "created", "updated", "tags", "user"] }, "id": get_id() }, { "jsonrpc": "2.0", - "method": 'tag.users.count', + "method": 'tag.notes.count', "params": { - "id": data.tag.id + "id": data.tag.id, }, "id": get_id() } @@ -79,33 +96,33 @@ function TagUsers() { }).then( function(response) { if ('result' in response[0]) { - data.users = response[0]['result']; + data.raw_notes = response[0]['result']; } if ('result' in response[1]) { data.pagination.size = response[1]['result']; } } ); - } + }; return { oninit: function(vnode) { - console.log('TagUsers.oninit'); + console.log('TagNotes.oninit'); if (vnode.attrs.page!==undefined) { data.pagination.page = Number(vnode.attrs.page); }; tag_get(vnode.attrs.id); }, onbeforeupdate: function(vnode) { - console.log('TagUsers.onbeforeupdate'); + console.log('TagNotes.onbeforeupdate'); if (vnode.attrs.page!==undefined) { if (data.pagination.page != Number(vnode.attrs.page)) { data.pagination.page = Number(vnode.attrs.page); - users_get(); + notes_get(); }; }; }, view: function(vnode) { - console.log('TagUsers.view'); + console.log('TagNotes.view'); result = []; if (data.tag!=null) { result.push( @@ -121,20 +138,20 @@ function TagUsers() { m('i', {class: "fa fa-sort-alpha-asc"}) ) ]), - `Пользователи с тегом [${data.tag.name}]` - ]) + `Статьи с тегом [${data.tag.name}]` + ]), ), - m('hr'), + m('hr') ); - // result.push(m(MenuTag, {menuitem: 'users', tag: data.tag})); - result.push({tag: MenuTag, attrs: {menuitem: 'users', tag: data.tag}}); + // result.push(m(MenuTag, {menuitem: 'notes', tag: data.tag})); + result.push({tag: MenuTag, attrs: {menuitem: 'notes', tag: data.tag}}); result.push(m(data.filter)); result.push(m(data.order_by)); result.push(m(Pagination, data.pagination)); - if (data.users.length>0) { - result.push(m(ComponentUsers, {users: data.users})); + if (data.notes.length>0) { + result.push(m(ComponentNotes, {notes: data.notes})); result.push(m(Pagination, data.pagination)); }; result.push(breadcrumbs_render()); diff --git a/src/myapp/templates/public/domains/tag/menu.js b/src/myapp/templates/public/domains/tag/menu.js index dd59060..0d84f73 100644 --- a/src/myapp/templates/public/domains/tag/menu.js +++ b/src/myapp/templates/public/domains/tag/menu.js @@ -12,7 +12,7 @@ function MenuTag() { }; function button_pages() { if (data.menuitem==='pages') { - return {tag: '<', children: '
Статьи
'}; + return {tag: '<', children: '
Статьи
'}; } else { return m(m.route.Link, {class: "btn btn-outline-secondary me-2 text-decoration-none", href: `/tag/${data.tag.id}/pages`}, 'Статьи') }