{"tid":10163,"uid":10574,"cid":16,"mainPid":57949,"title":"Where is the template parsing logic?","slug":"10163/where-is-the-template-parsing-logic","timestamp":1485559062934,"lastposttime":1485794298617,"postcount":8,"viewcount":2895,"isQuestion":1,"isSolved":1,"teaserPid":"58000","upvotes":0,"downvotes":0,"postercount":5,"deleted":0,"locked":0,"pinned":0,"pinExpiry":0,"deleterUid":0,"titleRaw":"Where is the template parsing logic?","timestampISO":"2017-01-27T23:17:42.934Z","scheduled":false,"lastposttimeISO":"2017-01-30T16:38:18.617Z","pinExpiryISO":"","votes":0,"tags":[],"thumbs":[],"posts":[{"pid":57949,"uid":10574,"tid":10163,"content":"
I can't find decent documentation for it anywhere.
\nLooked under here https://nodebb.readthedocs.io/en/latest/themes/templates.html,
\nhere https://github.com/NodeBB/NodeBB/blob/master/src/middleware/render.js,
All I found was the logic that injects partial templates into each other here https://github.com/NodeBB/NodeBB/blob/master/src/meta/templates.js
\nBut as far as the parsing goes I'm clueless.
\nWhat I'm trying to accomplish:
\nThanks
\n","timestamp":1485559062934,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[{"uid":7693,"username":"jiangcaiyang","userslug":"jiangcaiyang","picture":"https://i.imgur.com/OtJ25LW.png","fullname":"蒋彩阳","displayname":"jiangcaiyang","icon:text":"J","icon:bgColor":"#1b5e20"}],"text":"[[topic:one-reply-to-this-post]]","count":1,"timestampISO":"2017-01-29T08:33:44.074Z"},"deleted":0,"upvotes":0,"downvotes":0,"deleterUid":0,"edited":0,"bookmarks":0,"votes":0,"timestampISO":"2017-01-27T23:17:42.934Z","editedISO":"","index":0,"user":{"uid":10574,"username":"Qwertyzw","userslug":"qwertyzw","reputation":3,"postcount":11,"topiccount":4,"picture":null,"signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1487088133158,"groupTitle":null,"mutedUntil":0,"displayname":"Qwertyzw","groupTitleArray":[],"icon:text":"Q","icon:bgColor":"#ff5722","lastonlineISO":"2017-02-14T16:02:13.158Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false,"events":[],"topicOwnerPost":true,"display_edit_tools":false,"display_delete_tools":false,"display_moderator_tools":false,"display_move_tools":false,"display_post_menu":true},{"pid":57950,"uid":6782,"tid":10163,"content":"not sure about most of your questions but the templating engine can be found here https://github.com/psychobunny/templates.js
\n","timestamp":1485564697145,"upvotes":1,"downvotes":0,"deleted":0,"deleterUid":0,"edited":0,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[],"text":"[[topic:one-reply-to-this-post]]","count":0},"bookmarks":0,"votes":1,"timestampISO":"2017-01-28T00:51:37.145Z","editedISO":"","index":1,"user":{"uid":6782,"username":"phit","userslug":"phit","reputation":82,"postcount":102,"topiccount":3,"picture":"","signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1672954406623,"groupTitle":"[\"Users with 50 posts\"]","mutedUntil":0,"displayname":"phit","groupTitleArray":["Users with 50 posts"],"icon:text":"P","icon:bgColor":"#673ab7","lastonlineISO":"2023-01-05T21:33:26.623Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false,"events":[],"topicOwnerPost":false,"display_edit_tools":false,"display_delete_tools":false,"display_moderator_tools":false,"display_move_tools":false,"display_post_menu":true},{"pid":57966,"uid":7693,"tid":10163,"content":"@Qwertyzw Maybe one could not parse it's parent and siblings within a tpl file.:rage1:
\n","timestamp":1485678824074,"toPid":"57949","upvotes":0,"downvotes":0,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[{"uid":10574,"username":"Qwertyzw","userslug":"qwertyzw","picture":null,"fullname":null,"displayname":"Qwertyzw","icon:text":"Q","icon:bgColor":"#ff5722"}],"text":"[[topic:one-reply-to-this-post]]","count":1,"timestampISO":"2017-01-30T16:38:18.617Z"},"deleted":0,"deleterUid":0,"edited":0,"bookmarks":0,"votes":0,"timestampISO":"2017-01-29T08:33:44.074Z","editedISO":"","index":2,"parent":{"username":"Qwertyzw","displayname":"Qwertyzw"},"user":{"uid":7693,"username":"jiangcaiyang","userslug":"jiangcaiyang","reputation":16,"postcount":97,"topiccount":32,"picture":"https://i.imgur.com/OtJ25LW.png","signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1573695655358,"groupTitle":"[\"Anime Lovers\"]","mutedUntil":0,"displayname":"jiangcaiyang","groupTitleArray":["Anime Lovers"],"icon:text":"J","icon:bgColor":"#1b5e20","lastonlineISO":"2019-11-14T01:40:55.358Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[{"name":"Anime Lovers","slug":"anime-lovers","labelColor":"#c90e78","textColor":"#ffffff","icon":"fa-heart-o","userTitle":"Anime Lovers"}],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false,"events":[],"topicOwnerPost":false,"display_edit_tools":false,"display_delete_tools":false,"display_moderator_tools":false,"display_move_tools":false,"display_post_menu":true},{"pid":57975,"uid":2,"tid":10163,"content":"The way the template engine works is it takes the data sent to it (handled by NodeBB). You can see this data by navigating to the corresponding /api
route. For example, the api route for this topic: https://community.nodebb.org/api/topic/10163/where-is-the-template-parsing-logic
From inside of a <!-- BEGIN -->..<!-- END -->
you can reference values in that array object with ../
.
e.g.
\n{\n foobar: [\n {\n baz: 'quux'\n },\n {\n baz: 'test'\n }\n ]\n}\n
\nand...
\n<!-- BEGIN foobar -->\nthis is the value of baz: {../baz}\n<!-- END foobar -->\n
\n","timestamp":1485714304411,"upvotes":1,"downvotes":0,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[{"uid":3888,"username":"Giggiux","userslug":"giggiux","picture":"","fullname":null,"displayname":"Giggiux","icon:text":"G","icon:bgColor":"#e65100"},{"uid":10574,"username":"Qwertyzw","userslug":"qwertyzw","picture":null,"fullname":null,"displayname":"Qwertyzw","icon:text":"Q","icon:bgColor":"#ff5722"}],"text":"[[topic:replies-to-this-post, 2]]","count":2,"timestampISO":"2017-01-30T15:58:02.322Z"},"deleted":0,"deleterUid":0,"edited":0,"bookmarks":0,"votes":1,"timestampISO":"2017-01-29T18:25:04.411Z","editedISO":"","index":3,"user":{"uid":2,"username":"julian","userslug":"julian","reputation":4421,"postcount":9835,"topiccount":397,"picture":"/assets/uploads/profile/2-profileavatar-1701457270279.jpeg","signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1711601350403,"groupTitle":"[\"Staff\",\"GNU/Linux User\"]","mutedUntil":0,"displayname":"julian","groupTitleArray":["Staff","GNU/Linux User"],"icon:text":"J","icon:bgColor":"#607d8b","lastonlineISO":"2024-03-28T04:49:10.403Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[{"name":"Staff","slug":"staff","labelColor":"#1852be","textColor":"#ffffff","icon":"","userTitle":"NodeBB"},{"name":"GNU/Linux User","slug":"gnu-linux-user","labelColor":"#ebad32","textColor":"#262626","icon":"fa-linux","userTitle":"GNU/Linux"}],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false,"events":[],"topicOwnerPost":false,"display_edit_tools":false,"display_delete_tools":false,"display_moderator_tools":false,"display_move_tools":false,"display_post_menu":true},{"pid":57991,"uid":10574,"tid":10163,"content":"Thanks guys. That covers mostly everything for now.
\n","timestamp":1485790891714,"deleted":0,"upvotes":0,"downvotes":0,"deleterUid":0,"edited":0,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[],"text":"[[topic:one-reply-to-this-post]]","count":0},"bookmarks":0,"votes":0,"timestampISO":"2017-01-30T15:41:31.714Z","editedISO":"","index":4,"user":{"uid":10574,"username":"Qwertyzw","userslug":"qwertyzw","reputation":3,"postcount":11,"topiccount":4,"picture":null,"signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1487088133158,"groupTitle":null,"mutedUntil":0,"displayname":"Qwertyzw","groupTitleArray":[],"icon:text":"Q","icon:bgColor":"#ff5722","lastonlineISO":"2017-02-14T16:02:13.158Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false,"events":[],"topicOwnerPost":true,"display_edit_tools":false,"display_delete_tools":false,"display_moderator_tools":false,"display_move_tools":false,"display_post_menu":true},{"pid":57992,"uid":3888,"tid":10163,"content":"@julian what if I'd like to create an helper for the template system in my plugin?
\nThis is what's written on GitHub:
\ntemplates.registerHelper('print_is_human', function(data, iterator, numblocks) {\n return (data.isHuman) ? \"Is human\" : \"Isn't human\";\n});\n\n<!-- BEGIN animals -->\n{function.print_is_human}\n<!-- END animals -->\n\nprints out:\n\nIsn't human\nIsn't human\nIs human\n
\nSo I just do something like
\nres.registerHelper('myhepler', function(data, iterator, numblocks) {\n return (data.myValue) ? \"It is my value\" : \"It isn't my value\";\n});\n\n\n<!-- BEGIN values -->\n{function.myhelper}\n<!-- END values -->\n\n
\n?
\n","timestamp":1485791882322,"toPid":"57975","deleted":0,"upvotes":0,"downvotes":0,"deleterUid":0,"edited":0,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[],"text":"[[topic:one-reply-to-this-post]]","count":0},"bookmarks":0,"votes":0,"timestampISO":"2017-01-30T15:58:02.322Z","editedISO":"","index":5,"parent":{"username":"julian","displayname":"julian"},"user":{"uid":3888,"username":"Giggiux","userslug":"giggiux","reputation":31,"postcount":120,"topiccount":18,"picture":"","signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1616714514828,"groupTitle":"","mutedUntil":0,"displayname":"Giggiux","groupTitleArray":[],"icon:text":"G","icon:bgColor":"#e65100","lastonlineISO":"2021-03-25T23:21:54.828Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false,"events":[],"topicOwnerPost":false,"display_edit_tools":false,"display_delete_tools":false,"display_moderator_tools":false,"display_move_tools":false,"display_post_menu":true},{"pid":57993,"uid":10574,"tid":10163,"content":"@julian This is what I was looking for for the most part. I think it would be helpful to put this example in the documentation. I just went through the page I linked and found what I was looking for but only after seeing this example.
\n","timestamp":1485791956363,"toPid":"57975","deleted":0,"upvotes":0,"downvotes":0,"deleterUid":0,"edited":0,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[],"text":"[[topic:one-reply-to-this-post]]","count":0},"bookmarks":0,"votes":0,"timestampISO":"2017-01-30T15:59:16.363Z","editedISO":"","index":6,"parent":{"username":"julian","displayname":"julian"},"user":{"uid":10574,"username":"Qwertyzw","userslug":"qwertyzw","reputation":3,"postcount":11,"topiccount":4,"picture":null,"signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1487088133158,"groupTitle":null,"mutedUntil":0,"displayname":"Qwertyzw","groupTitleArray":[],"icon:text":"Q","icon:bgColor":"#ff5722","lastonlineISO":"2017-02-14T16:02:13.158Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false,"events":[],"topicOwnerPost":true,"display_edit_tools":false,"display_delete_tools":false,"display_moderator_tools":false,"display_move_tools":false,"display_post_menu":true},{"pid":58000,"uid":10574,"tid":10163,"content":"@jiangcaiyang I meant to say siblings, the (misleading?) path syntax '../' lead me to saying parent's siblings. I don't mean parsing them either, I only intend to reference them.
\n","timestamp":1485794298617,"toPid":"57966","edited":1485798601977,"editor":{"uid":10574,"username":"Qwertyzw","userslug":"qwertyzw","displayname":"Qwertyzw"},"deleted":0,"upvotes":0,"downvotes":0,"deleterUid":0,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[],"text":"[[topic:one-reply-to-this-post]]","count":0},"bookmarks":0,"votes":0,"timestampISO":"2017-01-30T16:38:18.617Z","editedISO":"2017-01-30T17:50:01.977Z","index":7,"parent":{"username":"jiangcaiyang","displayname":"jiangcaiyang"},"user":{"uid":10574,"username":"Qwertyzw","userslug":"qwertyzw","reputation":3,"postcount":11,"topiccount":4,"picture":null,"signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1487088133158,"groupTitle":null,"mutedUntil":0,"displayname":"Qwertyzw","groupTitleArray":[],"icon:text":"Q","icon:bgColor":"#ff5722","lastonlineISO":"2017-02-14T16:02:13.158Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[],"custom_profile_info":[]},"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false,"events":[],"topicOwnerPost":true,"display_edit_tools":false,"display_delete_tools":false,"display_moderator_tools":false,"display_move_tools":false,"display_post_menu":true}],"events":[],"category":{"cid":16,"name":"Technical Support","description":"Need help with installing or configuring NodeBB? Look here.","icon":"fa-exclamation-triangle","bgColor":"#6c7d3f","color":"#ffffff","slug":"16/technical-support","parentCid":0,"topic_count":4539,"post_count":25228,"disabled":0,"order":6,"link":"","numRecentReplies":1,"class":"col-md-3 col-xs-12","imageClass":"auto","descriptionParsed":"Need help with installing or configuring NodeBB? Look here.
\n","subCategoriesPerPage":10,"handle":"technical-support","minTags":0,"maxTags":5,"postQueue":1,"isSection":0,"totalPostCount":25228,"totalTopicCount":4539},"tagWhitelist":[],"minTags":0,"maxTags":5,"thread_tools":[{"class":"toggleSolved topic-solved","title":"[[qanda:thread.tool.mark_unsolved]]","icon":"fa-question-circle"},{"class":"toggleQuestionStatus","title":"[[qanda:thread.tool.make_normal]]","icon":"fa-comments"}],"isFollowing":false,"isNotFollowing":true,"isIgnoring":false,"bookmark":null,"postSharing":[{"id":"facebook","name":"Facebook","class":"fa-brands fa-facebook","activated":true},{"id":"twitter","name":"X (Twitter)","class":"fa-brands fa-x-twitter","activated":true},{"id":"whatsapp","name":"Whatsapp","class":"fa-brands fa-whatsapp","activated":true},{"id":"telegram","name":"Telegram","class":"fa-brands fa-telegram","activated":true},{"id":"linkedin","name":"LinkedIn","class":"fa-brands fa-linkedin","activated":true}],"deleter":null,"merger":null,"forker":null,"related":[],"unreplied":false,"icons":[" [[qanda:topic_solved]]"],"privileges":{"topics:reply":false,"topics:read":true,"topics:schedule":false,"topics:tag":false,"topics:delete":false,"posts:edit":false,"posts:history":false,"posts:upvote":false,"posts:downvote":false,"posts:delete":false,"posts:view_deleted":false,"read":true,"purge":false,"view_thread_tools":false,"editable":false,"deletable":false,"view_deleted":false,"view_scheduled":false,"isAdminOrMod":false,"disabled":0,"tid":"10163","uid":-1},"topicStaleDays":60,"reputation:disabled":0,"downvote:disabled":0,"feeds:disableRSS":0,"signatures:hideDuplicates":0,"bookmarkThreshold":5,"necroThreshold":7,"postEditDuration":0,"postDeleteDuration":0,"scrollToMyPost":false,"updateUrlWithPostIndex":false,"allowMultipleBadges":true,"privateUploads":false,"showPostPreviewsOnHover":true,"sortOptionLabel":"[[topic:oldest-to-newest]]","rssFeedUrl":"/topic/10163.rss","postIndex":1,"breadcrumbs":[{"text":"[[global:home]]","url":"https://community.nodebb.org"},{"text":"Technical Support","url":"https://community.nodebb.org/category/16/technical-support","cid":16},{"text":"Where is the template parsing logic?"}],"author":{"username":"Qwertyzw","userslug":"qwertyzw","uid":10574,"displayname":"Qwertyzw"},"pagination":{"prev":{"page":1,"active":false},"next":{"page":1,"active":false},"first":{"page":1,"active":true},"last":{"page":1,"active":true},"rel":[],"pages":[],"currentPage":1,"pageCount":1},"loggedIn":false,"loggedInUser":{"uid":0,"username":"[[global:guest]]","picture":"","icon:text":"?","icon:bgColor":"#aaa"},"relative_path":"","template":{"name":"topic","topic":true},"url":"/topic/10163/where-is-the-template-parsing-logic","bodyClass":"page-topic page-topic-10163 page-topic-where-is-the-template-parsing-logic template-topic page-topic-category-16 page-topic-category-technical-support parent-category-16 page-status-200 theme-harmony user-guest","mainPost":{"pid":57949,"uid":10574,"tid":10163,"content":"I can't find decent documentation for it anywhere.
\\nLooked under here https://nodebb.readthedocs.io/en/latest/themes/templates.html,
\\nhere https://github.com/NodeBB/NodeBB/blob/master/src/middleware/render.js,
All I found was the logic that injects partial templates into each other here https://github.com/NodeBB/NodeBB/blob/master/src/meta/templates.js
\\nBut as far as the parsing goes I'm clueless.
\\nWhat I'm trying to accomplish:
\\nThanks
\\n","timestamp":1485559062934,"ip":"206.223.191.106","replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[{"uid":7693,"username":"jiangcaiyang","userslug":"jiangcaiyang","picture":"https://i.imgur.com/OtJ25LW.png","fullname":"蒋彩阳","displayname":"jiangcaiyang","icon:text":"J","icon:bgColor":"#1b5e20"}],"text":"[[topic:one-reply-to-this-post]]","count":1,"timestampISO":"2017-01-29T08:33:44.074Z"},"deleted":0,"upvotes":0,"downvotes":0,"deleterUid":0,"edited":0,"bookmarks":0,"votes":0,"timestampISO":"2017-01-27T23:17:42.934Z","editedISO":"","user":{"uid":10574,"username":"Qwertyzw","userslug":"qwertyzw","reputation":3,"postcount":11,"topiccount":4,"picture":null,"signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1487088133158,"groupTitle":null,"mutedUntil":0,"displayname":"Qwertyzw","groupTitleArray":[],"icon:text":"Q","icon:bgColor":"#ff5722","lastonlineISO":"2017-02-14T16:02:13.158Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false},"acceptedAnswer":{},"suggestedAnswer":{"pid":57950,"uid":6782,"tid":10163,"content":"not sure about most of your questions but the templating engine can be found here https://github.com/psychobunny/templates.js
\\n","timestamp":1485564697145,"ip":"46.83.206.191","upvotes":1,"downvotes":0,"deleted":0,"deleterUid":0,"edited":0,"replies":{"hasMore":false,"hasSingleImmediateReply":false,"users":[],"text":"[[topic:one-reply-to-this-post]]","count":0},"bookmarks":0,"votes":1,"timestampISO":"2017-01-28T00:51:37.145Z","editedISO":"","user":{"uid":6782,"username":"phit","userslug":"phit","reputation":82,"postcount":102,"topiccount":3,"picture":"","signature":"","banned":false,"banned:expire":0,"status":"offline","lastonline":1672954406623,"groupTitle":"[\"Users with 50 posts\"]","mutedUntil":0,"displayname":"phit","groupTitleArray":["Users with 50 posts"],"icon:text":"P","icon:bgColor":"#673ab7","lastonlineISO":"2023-01-05T21:33:26.623Z","banned_until":0,"banned_until_readable":"Not Banned","muted":false,"selectedGroups":[],"custom_profile_info":[]},"editor":null,"bookmarked":false,"upvoted":false,"downvoted":false,"selfPost":false},"answerCount":7,"browsingUsers":true,"_header":{"tags":{"meta":[{"name":"viewport","content":"width=device-width, initial-scale=1.0"},{"name":"content-type","content":"text/html; charset=UTF-8","noEscape":true},{"name":"apple-mobile-web-app-capable","content":"yes"},{"name":"mobile-web-app-capable","content":"yes"},{"property":"og:site_name","content":"NodeBB Community"},{"name":"msapplication-badge","content":"frequency=30; polling-uri=https://community.nodebb.org/sitemap.xml","noEscape":true},{"name":"theme-color","content":"#0471ff"},{"name":"keywords","content":"nodebb,forum,community,discussion,javascript,nodejs,mongodb,redis,websockets"},{"name":"msapplication-square150x150logo","content":"/assets/uploads/system/site-logo.png","noEscape":true},{"name":"title","content":"Where is the template parsing logic?"},{"property":"og:title","content":"Where is the template parsing logic?"},{"property":"og:type","content":"article"},{"property":"article:published_time","content":"2017-01-27T23:17:42.934Z"},{"property":"article:modified_time","content":"2017-01-30T16:38:18.617Z"},{"property":"article:section","content":"Technical Support"},{"name":"description","content":"I can't find decent documentation for it anywhere. Looked under here https://nodebb.readthedocs.io/en/latest/themes/templates.html, here https://github.com/N..."},{"property":"og:description","content":"I can't find decent documentation for it anywhere. Looked under here https://nodebb.readthedocs.io/en/latest/themes/templates.html, here https://github.com/N..."},{"property":"og:image","content":"https://community.nodebb.org/assets/uploads/system/site-logo.png","noEscape":true},{"property":"og:image:url","content":"https://community.nodebb.org/assets/uploads/system/site-logo.png","noEscape":true},{"property":"og:image:width","content":"376"},{"property":"og:image:height","content":"132"},{"content":"https://community.nodebb.org/api/topic/10163/where-is-the-template-parsing-logic","property":"og:url"}],"link":[{"rel":"icon","type":"image/x-icon","href":"/assets/uploads/system/favicon.ico?v=af2f86gdel8"},{"rel":"manifest","href":"/manifest.webmanifest","crossorigin":"use-credentials"},{"rel":"search","type":"application/opensearchdescription+xml","title":"NodeBB Community","href":"/osd.xml"},{"rel":"apple-touch-icon","href":"/assets/uploads/system/touchicon-orig.png"},{"rel":"icon","sizes":"36x36","href":"/assets/uploads/system/touchicon-36.png"},{"rel":"icon","sizes":"48x48","href":"/assets/uploads/system/touchicon-48.png"},{"rel":"icon","sizes":"72x72","href":"/assets/uploads/system/touchicon-72.png"},{"rel":"icon","sizes":"96x96","href":"/assets/uploads/system/touchicon-96.png"},{"rel":"icon","sizes":"144x144","href":"/assets/uploads/system/touchicon-144.png"},{"rel":"icon","sizes":"192x192","href":"/assets/uploads/system/touchicon-192.png"},{"rel":"prefetch stylesheet","type":"","href":"/assets/plugins/nodebb-plugin-markdown/styles/github.css"},{"rel":"prefetch","href":"/assets/language/en-GB/markdown.json?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/src/modules/composer.js?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/src/modules/composer/uploads.js?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/src/modules/composer/drafts.js?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/src/modules/composer/tags.js?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/src/modules/composer/categoryList.js?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/src/modules/composer/resize.js?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/src/modules/composer/autocomplete.js?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/templates/composer.tpl?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/language/en-GB/topic.json?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/language/en-GB/modules.json?v=af2f86gdel8"},{"rel":"prefetch","href":"/assets/language/en-GB/tags.json?v=af2f86gdel8"},{"rel":"stylesheet","href":"https://community.nodebb.org/assets/plugins/nodebb-plugin-emoji/emoji/styles.css?v=af2f86gdel8"},{"rel":"canonical","href":"https://community.nodebb.org/topic/10163/where-is-the-template-parsing-logic","noEscape":true},{"rel":"alternate","type":"application/rss+xml","href":"/topic/10163.rss"},{"rel":"up","href":"https://community.nodebb.org/category/16/technical-support"},{"rel":"author","href":"https://community.nodebb.org/user/qwertyzw"}]}},"widgets":{"footer":[{"html":"\r\n\r\n