"use strict"; const router = require("../router.js"); const uri = require("../util/uri.js"); const misc = require("../util/misc.js"); const views = require("../util/views.js"); const PostContentControl = require("../controls/post_content_control.js"); const PostNotesOverlayControl = require("../controls/post_notes_overlay_control.js"); const TagAutoCompleteControl = require("../controls/tag_auto_complete_control.js"); const template = views.getTemplate("home"); const footerTemplate = views.getTemplate("home-footer"); const featuredPostTemplate = views.getTemplate("home-featured-post"); class HomeView { constructor(ctx) { this._hostNode = document.getElementById("content-holder"); this._ctx = ctx; const sourceNode = template(ctx); views.replaceContent(this._hostNode, sourceNode); views.syncScrollPosition(); if (this._formNode) { this._autoCompleteControl = new TagAutoCompleteControl( this._searchInputNode, { confirm: (tag) => this._autoCompleteControl.replaceSelectedText( misc.escapeSearchTerm(tag.names[0]), true ), } ); this._formNode.addEventListener("submit", (e) => this._evtFormSubmit(e) ); } } showSuccess(text) { views.showSuccess(this._hostNode, text); } showError(text) { views.showError(this._hostNode, text); } setStats(stats) { views.replaceContent( this._footerContainerNode, footerTemplate(Object.assign({}, stats, this._ctx)) ); } setFeaturedPost(postInfo) { views.replaceContent( this._postInfoContainerNode, featuredPostTemplate(postInfo) ); if (this._postContainerNode && postInfo.featuredPost) { this._postContentControl = new PostContentControl( this._postContainerNode, postInfo.featuredPost, () => { return [window.innerWidth * 0.8, window.innerHeight * 0.7]; }, "fit-both" ); this._postNotesOverlay = new PostNotesOverlayControl( this._postContainerNode.querySelector(".post-overlay"), postInfo.featuredPost ); if ( postInfo.featuredPost.type === "video" || postInfo.featuredPost.type === "flash" ) { this._postContentControl.disableOverlay(); } } } get _footerContainerNode() { return this._hostNode.querySelector(".footer-container"); } get _postInfoContainerNode() { return this._hostNode.querySelector(".post-info-container"); } get _postContainerNode() { return this._hostNode.querySelector(".post-container"); } get _formNode() { return this._hostNode.querySelector("form"); } get _searchInputNode() { return this._formNode.querySelector("input[name=search-text]"); } _evtFormSubmit(e) { e.preventDefault(); this._searchInputNode.blur(); router.show( uri.formatClientLink("posts", { query: this._searchInputNode.value, }) ); } } module.exports = HomeView;