{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-jsx/src/client/reactive/components/rewritten/conduit/src/components/article-rp19.js"],"names":["marked","ReactiveMorph","articleStore","userStore","commentStore","ArticleMeta","TagList","CommentContainer","router","Article","attachedCallback","isDummy","slug","getSlugFromRoutingProps","loadArticle","acceptCached","isArticleAuthor","article","user","routingProps","handleDeleteArticle","deleteArticle","target","handleDeleteComment","id","deleteComment","render","markdown","sanitize","tagList","tags","commentContainer","comments","errors","currentUser","onDelete","articleMeta","canModify"],"mappings":"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","file":"article-rp19.js","sourcesContent":["'enable rp19-jsx';\n\nimport marked from 'src/external/marked.js';\nimport ReactiveMorph from 'src/client/reactive/components/rewritten/conduit/rpComponents/reactiveMorph.js';\nimport articleStore from 'src/client/reactive/components/rewritten/conduit/src/stores/articleStore.js';\nimport userStore from 'src/client/reactive/components/rewritten/conduit/src/stores/userStore.js';\nimport commentStore from 'src/client/reactive/components/rewritten/conduit/src/stores/commentStore.js';\nimport ArticleMeta from 'src/client/reactive/components/rewritten/conduit/src/components/article/article-meta-rp19.js';\nimport TagList from 'src/client/reactive/components/rewritten/conduit/src/components/generic/tag-list-rp19.js';\nimport CommentContainer from 'src/client/reactive/components/rewritten/conduit/src/components/article/comment/comment-container-rp19.js';\n\n\nimport { router } from 'src/client/reactive/components/rewritten/conduit/rpComponents/router-rp19.js';\n\nexport default class Article extends ReactiveMorph {\n\n  attachedCallback() {\n    super.attachedCallback().then(() => {\n      if (this.isDummy()) return;\n      const slug = this.getSlugFromRoutingProps();\n      articleStore.loadArticle(slug, { acceptCached: true });\n      commentStore.articleSlug = slug;\n    });\n  }\n  \n  isArticleAuthor(article, user) {\n    return user && user.username === article.author.username;\n  }\n  \n  getSlugFromRoutingProps() {\n    const routingProps = router() && router().current;\n    return routingProps && routingProps.slug;\n  }\n  \n  handleDeleteArticle(slug) {\n    articleStore.deleteArticle(slug)\n      .then(() => router().navigateTo({ target: 'home' }))\n  }\n  \n  handleDeleteComment(id) {\n    commentStore.deleteComment(id);\n  }\n  \n  async render() {\n    const article = articleStore.articlesRegistry[this.getSlugFromRoutingProps()];\n    if (!article) return <red-error-rp19 v-message=\"Can't load article\" />;\n    const markdown = <div />;\n    markdown.innerHTML = marked(article.body, { sanitize: true });\n    const tagList = { tags: article.tagList };\n    const commentContainer = { \n      comments: commentStore.comments,\n      errors: commentStore.commentErrors,\n      currentUser: userStore.currentUser,\n      onDelete: this.handleDeleteComment\n    };\n    const articleMeta = { \n      article, \n      canModify: this.isArticleAuthor(article, userStore.currentUser), \n      onDelete: this.handleDeleteArticle\n    };\n    return (\n      <div class='article-page'>\n        <div class='banner'>\n          <div class='container'>\n\n            <h1>{ article.title }</h1>\n            { await ArticleMeta(articleMeta) }\n          </div>\n        </div>\n        <div class='container page'>\n          <div class='row article-content'>\n            <div class='col-xs-12'>\n              { markdown }\n              { await TagList(tagList) }\n            </div>\n          </div>\n          <hr />\n\n          <div className=\"article-actions\" />\n          <div className=\"row\">\n            { await CommentContainer(commentContainer) }\n          </div>\n        </div>\n      </div>\n    );\n  }\n}"]}