{"id":28249972,"url":"https://github.com/h5sh/handlebars","last_synced_at":"2026-01-27T15:01:55.214Z","repository":{"id":258954670,"uuid":"875972958","full_name":"H5SH/Handlebars","owner":"H5SH","description":"Learning Handlebars","archived":false,"fork":false,"pushed_at":"2024-10-21T12:54:48.000Z","size":12,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-13T23:34:29.783Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/H5SH.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-21T07:30:16.000Z","updated_at":"2024-12-17T05:58:07.000Z","dependencies_parsed_at":"2024-10-21T10:50:00.706Z","dependency_job_id":null,"html_url":"https://github.com/H5SH/Handlebars","commit_stats":null,"previous_names":["h5sh/handlebars"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/H5SH/Handlebars","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/H5SH%2FHandlebars","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/H5SH%2FHandlebars/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/H5SH%2FHandlebars/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/H5SH%2FHandlebars/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/H5SH","download_url":"https://codeload.github.com/H5SH/Handlebars/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/H5SH%2FHandlebars/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28815385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-19T13:16:15.068Z","updated_at":"2026-01-27T15:01:55.208Z","avatar_url":"https://github.com/H5SH.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Handlebars\n\n## Introduction\n\n### Installation Tag\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js\"\u003e\u003c/script\u003e\n```\n\n### Common Example\n\n```html\n\u003cscript\u003e\n        var template = Handlebars.compile(\"Handlebars \u003cb\u003e{{ doesWhat }}\u003c/b\u003e\")\n\n        console.log(template({doesWhat: \"rocks!\"}))\n\u003c/script\u003e\n```\n\n### Custom Helpers\n\nHandlebars helpers can be accessed from any context in a template. You can register a helper with the Handlebars.registerHelper method.\n\n```handlebars\n{{firstname}} {{loud lastname}}\n```\n\n```javascript\nHandlebars.registerHelper('loud', (aString)=\u003e{\n    return aString.toUpperCase()\n})\n```\n\n### Block Helpers\n\nBlock expressions allow you to define helpers that will invoke a section of your template with a different context than the current. These block helpers are identified by a # preceeding the helper name and require a matching closing mustache, /, of the same name. Let's consider a helper that will generate an HTML list:\n\n```javascript\nHandlebars.registerHelper(\"list\", (items, options)=\u003e{\n    const itemsAsHtml = items.map(item=\u003e `\u003cli\u003e${options.fn(item)}\u003c/li\u003e`);\n    return `\u003cul\u003e\\n${itemsAsHtml.join(\"\\n\")}\\n\u003c/ul\u003e`;\n})\n```\n\n#### Example Context\n\n```javascript\n    var template = Handlebars.compile(source);\n\n    var context = {\n        people: [\n            { firstname: \"John\", lastname: \"Doe\" },\n            { firstname: \"Jane\", lastname: \"Smith\" },\n            { firstname: \"Chris\", lastname: \"Evans\" }\n        ]\n    };\n\n    var html = template(context);\n```\n\n#### Inside Options \n\n```javascript\n{\n    data: {\n        root: {\n            people: [\n                {firstname: 'John', lastname: 'Doe'},\n                {firstname: 'Jane', lastname: 'Smith'},\n                {firstname: 'Chris', lastname: 'Evans'}\n            ],\n            length: 3\n        },\n        fn: ƒ prog(context),\n        hash: {},\n        inverse: ƒ noop(),\n        loc: {start: {line: 4, column: 17}, end: {line: 2, column: 8}},\n        lookupProperty: ƒ lookupProperty(parent, propertyName),\n        name: \"list\",\n    }\n}\n```\n\n#### body \n\n```html\n\u003cbody\u003e\n    \u003cscript id=\"list-template\" type=\"text/x-handlebars-template\"\u003e\n        {{#list people}}\n            {{firstname}} {{lastname}}\n        {{/list}}\n    \u003c/script\u003e\n\n    \u003cdiv id=\"content\"\u003e\u003c/div\u003e\n\u003c/body\u003e\n```\n\n#### full file\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n    \u003ctitle\u003eDocument\u003c/title\u003e\n    \u003cscript src=\"https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js\"\u003e\u003c/script\u003e\n    \u003cscript\u003e\n        Handlebars.registerHelper('list', function(items, options) {\n            console.log(items, options)\n            let itemsAsHtml = items.map(item =\u003e `\u003cli\u003e${options.fn(item)}\u003c/li\u003e`);\n            return `\u003cul\u003e\\n${itemsAsHtml.join(\"\\n\")}\\n\u003c/ul\u003e`;\n        });\n\n        document.addEventListener('DOMContentLoaded', function() {\n            var source = document.getElementById(\"list-template\").innerHTML;\n            \n            var template = Handlebars.compile(source);\n\n            var context = {\n                people: [\n                    { firstname: \"John\", lastname: \"Doe\" },\n                    { firstname: \"Jane\", lastname: \"Smith\" },\n                    { firstname: \"Chris\", lastname: \"Evans\" }\n                ]\n            };\n\n            var html = template(context);\n\n            document.getElementById(\"content\").innerHTML = html;\n        });\n    \u003c/script\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n    \u003cscript id=\"list-template\" type=\"text/x-handlebars-template\"\u003e\n        {{#list people}}\n            {{firstname}} {{lastname}}\n        {{/list}}\n    \u003c/script\u003e\n\n    \u003cdiv id=\"content\"\u003e\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n### HTML Escaping\n\nIf you don't want Handlebars to escape a value, use the \"triple-stash\", {{{\n\n```handlebars\nraw: {{{specialChars}}}\nhtml-escaped: {{specialChars}}\n```\n\nThe special characters in the second line will be escaped:\n\n```handlebars\nraw: $ \u003c \u003e \" ' ` =\nhtml-escaped: \u0026amp; \u0026lt; \u0026gt; \u0026quot; \u0026#x27; \u0026#x60; \u0026#x3D;\n```\n\nHandlebars.SafeString. If you write a helper that generates its own HTML, you will usually want to return a new Handlebars.SafeString(result). In such a circumstance, you will want to manually escape parameters.\n\n```javascript\nHandlebars.registerHelper('bold', (text)=\u003e{\n    var result = `\u003cb\u003e${Handlebars.escapeExpression(text)}\u003c/b\u003e`;\n    return new Handlebars.SafeString(result)\n})\n```\n\n### Partials\n\nHandlebars partials allow for code reuse by creating shared templates. You can register a partial using the registerPartial-method:\n\n```javascript\nHandlebars.registerPartial(\n    \"person\",\n    \"{{person.name}} is {{person.age}} years old.\\n\"\n)\n```\n\nThe following template and input:\n\n```handlebars\n{{#each persons}}\n    {{\u003eperson person=.}}\n{{/each}}\n```\n\n#### Example Context\n\n```javascript\n{\n    persons:[\n        {name: 'Hasham', age: 23},\n        {name: 'Teddy', age: 10},\n        {name: 'Nelson', age: 40}\n    ]\n}\n```\n\n#### result\n\nNils is 20 years old.\nTeddy is 10 years old.\nNelson is 40 years old.\n\n### FULL FILE (Intro)\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\n\u003chead\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n    \u003ctitle\u003eDocument\u003c/title\u003e\n    \u003cscript src=\"https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js\"\u003e\u003c/script\u003e\n    \u003cscript\u003e\n\n        let source = null\n        let template = null\n\n        var context = {\n\n            people: [\n                { firstname: \"John\", lastname: \"Doe\" },\n                { firstname: \"Jane\", lastname: \"Smith\" },\n                { firstname: \"Chris\", lastname: \"Evans\" }\n            ],\n\n            persons: [\n                { name: 'Hasham', age: 23 },\n                { name: 'Teddy', age: 10 },\n                { name: 'Nelson', age: 40 }\n            ]\n        };\n\n        Handlebars.registerHelper('list', function (items, options) {\n            let itemsAsHtml = items.map(item =\u003e `\u003cli\u003e${options.fn(item)}\u003c/li\u003e`);\n            return `\u003cul\u003e\\n${itemsAsHtml.join(\"\\n\")}\\n\u003c/ul\u003e`;\n        });\n\n        Handlebars.registerPartial(\n            \"person\",\n            \"{{person.name}} is {{person.age}} years old.\\n\"\n        )\n\n        document.addEventListener('DOMContentLoaded', () =\u003e {\n            source = document.getElementById('handlebar-template').innerHTML\n            template = Handlebars.compile(source)\n            const html = template(context)\n            document.getElementById('content').innerHTML = html;\n        });\n\n    \u003c/script\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e\n    \u003cscript id=\"handlebar-template\" type=\"text/x-handlebars-template\"\u003e\n        {{#list people}}\n            {{firstname}} {{lastname}}\n        {{/list}}\n\n        {{#each persons}}\n            {{\u003eperson person=.}}\n        {{/each}}\n    \u003c/script\u003e\n\n    \u003cdiv id=\"content\"\u003e\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n## Built-in Helpers\n\n### if\n\nfalsy values: false, undefined, null, \"\", 0 or []\n\n#### demo context\n\n```javascript\n{\n    author: true,\n    firstName: \"Yehuda\",\n    lastName: \"Katz\"\n}\n```\n\n#### Syntax\n\n```html\n\u003cdiv class='entry'\u003e\n    {{#if author}}\n    \u003ch1\u003e{{firstName}} {{lastName}}\u003c/h1\u003e\n    {{/if}}\n\u003c/div\u003e\n```\n\n#### includeZero\n\n```html\n{{#if 0 includeZero=true}}\n\u003ch1\u003eDoes Render\u003c/h1\u003e\n{{/if}}\n```\n\n#### Sub-expression using helper\n\n```handlebar\n{{#if (isdefined value)}}true{{else}}false{{/if}}\n```\n\n### unless\n\nYou can use the unless helper as the inverse of the if helper. Its block will be rendered if the expression returns a falsy value.\n\n#### Syntax\n\n```html\n\u003cdiv class='entry'\u003e\n    {{#unless license}}\n    \u003ch3 class='warning'\u003eWARNING: This entry does not have a license!\u003c/h3\u003e\n    {{/unless}}\n\u003c/div\u003e\n```\n\n### with\n\nThe with-helper dives into an object-property, giving you access to its properties\n\n```handlebars\n{{#with person}}\n{{firstname}} {{lastname}}\n{{/with}}\n```\n\nAlso\n\n```handlebars\n{{#with city as | city |}}\n    {{#with city.location as | loc |}}\n        {{city.name}}: {{loc.north}} {{loc.east}}\n    {{/with}}\n{{/with}}\n```\n\n### each\n\nThe each-helper iterates an array, allowing you to access the properties of each object via simple handlebars expressions.\n\n```html\n\u003cul class='people_list'\u003e\n{{#each people}}\n\u003cli\u003e{{this}}\u003c/li\u003e\n{{/each}}\n\u003c/ul\u003e\n```\n\n#### options\n\n|   option   |           function            |\n|------------|-------------------------------|\n| {{@index}} |       current loop index      |\n|  {{@key}}  | reference of current key name |\n| {{@first}} |    first step of iteration    |\n| {{@last}}  |    last step of iteration     |\n\n### lookup\n\nThe lookup helper allows for dynamic parameter resolution using Handlebars variables.\nThis is useful for resolving values for array indexes.\n\n```handlebars\n{{#each people}}\n    {{.}} lives in {{lookup ../cities @index}}\n{{/each}}\n```\n\nMore Complex\n\n```handlebars\n{{#each persons as | person |}}\n    {{name}} lives in {{#with (lookup ../cities [resident-in])~}}\n        {{name}} ({{country}})\n    {{/with}}\n{{/each}}\n```\n\n### lookup\n\nThe lookup helper allows for dynamic parameter resolution using Handlebars variables.\n\n```handlebars\n{{#each people}}\n    {{.}} lives in {{lookup ../cities @index}}\n{{/each}}\n```\n\n#### More Complex and tested example\n\n##### Demo Data\n\n```javascript\nconst context = {\n            cities: [\n                {\n                    name: 'Lahore',\n                    code: 'LAH'\n                },\n                {\n                    name: 'Karachi',\n                    code: 'KAR'\n                },\n                {\n                    name: 'Islamabad',\n                    code: 'ISL'\n                },\n                {\n                    name: 'Sialkot',\n                    code: 'SKT'\n                },\n                {\n                    name: 'Faislabad',\n                    code: 'FSD'\n                }\n            ],\n            \n            users: [\n                {\n                    name: 'John Doe',\n                    email: 'john.doe@example.com',\n                    cart: [\n                        { name: 'Laptop', price: 1200 },\n                        { name: 'Smartphone', price: 800 }\n                    ],\n                    wishlist: [\n                        { name: 'Smartwatch', price: 300 }\n                    ],\n                    orders: [\n                        {\n                            items: [\n                                { name: 'Tablet', price: 400 }\n                            ],\n                            total: 400,\n                            date: '2024-09-01',\n                            status: 'Delivered'\n                        }\n                    ],\n                    preferences: {\n                        notifications: ['orderUpdates', 'promoEmails'],\n                        currency: 'USD'\n                    },\n                    \"resident-in\": 1\n                },\n                ...\n            ]\n\n}\n```\n\n```html\n{{#each users as | user |}}\n    {{#with user}}\n        {{#with (lookup ../cities [resident-in])~}}\n                \u003cp\u003eCity: {{name}} Code: {{code}}\u003c/p\u003e\n        {{/with}}\n    {{/with}}\n{{/each}}\n```\n\nOutput\n\n```output\nCity: Karachi Code: KAR\n```\n\n### log\n\nThe log helper allows for logging of context state while executing a template.\n\n```html\n{{log 'firstname' firstname 'lastname' name}}\n```\n\nLogging is conditional based on the level and to value set in Handlebars.logger.level, which defaults to info. All log statements at or above the current level will be output.\n\n```html\n{{log \"debug logging\" level=\"debug\"}}\n{{log \"info logging\" level=\"info\"}}\n{{log \"info logging is the default\"}}\n{{log \"logging a warning\" level=\"warn\"}}\n{{log \"logging an error\" level=\"error\"}}\n```\n\n```javascript\nHandlebars.logger.level = 'error'\nconsole.log('Current log level: ', Handlebars.logger.level, '\\n---')\n```\n\n## FULL FILE\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\n\u003chead\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n    \u003ctitle\u003eDocument\u003c/title\u003e\n    \u003cscript src=\"https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js\"\u003e\u003c/script\u003e\n    \u003cscript\u003e\n\n        let source = null\n        let template = null\n\n        var context = {\n\n            people: [\n                { firstname: \"John\", lastname: \"Doe\" },\n                { firstname: \"Jane\", lastname: \"Smith\" },\n                { firstname: \"Chris\", lastname: \"Evans\" }\n            ],\n\n            persons: [\n                { name: 'Hasham', age: 23 },\n                { name: 'Teddy', age: 10 },\n                { name: 'Nelson', age: 40 }\n            ],\n\n            testingIf: {\n                author: false,\n                firstName: \"Yehuda\",\n                lastName: \"Katz\"\n            },\n\n            cities: [\n                {\n                    name: 'Lahore',\n                    code: 'LAH'\n                },\n                {\n                    name: 'Karachi',\n                    code: 'KAR'\n                },\n                {\n                    name: 'Islamabad',\n                    code: 'ISL'\n                },\n                {\n                    name: 'Sialkot',\n                    code: 'SKT'\n                },\n                {\n                    name: 'Faislabad',\n                    code: 'FSD'\n                }\n            ],\n\n            users: [\n                {\n                    name: 'John Doe',\n                    email: 'john.doe@example.com',\n                    cart: [\n                        { name: 'Laptop', price: 1200 },\n                        { name: 'Smartphone', price: 800 }\n                    ],\n                    wishlist: [\n                        { name: 'Smartwatch', price: 300 }\n                    ],\n                    orders: [\n                        {\n                            items: [\n                                { name: 'Tablet', price: 400 }\n                            ],\n                            total: 400,\n                            date: '2024-09-01',\n                            status: 'Delivered'\n                        }\n                    ],\n                    preferences: {\n                        notifications: ['orderUpdates', 'promoEmails'],\n                        currency: 'USD'\n                    },\n                    \"resident-in\": 1\n                },\n                {\n                    name: 'Jane Smith',\n                    email: 'jane.smith@example.com',\n                    cart: [\n                        { name: 'Camera', price: 900 }\n                    ],\n                    wishlist: [\n                        { name: 'Drone', price: 1200 },\n                        { name: 'Lens', price: 400 }\n                    ],\n                    orders: [\n                        {\n                            items: [\n                                { name: 'Smartphone', price: 700 }\n                            ],\n                            total: 700,\n                            date: '2024-09-15',\n                            status: 'Processing'\n                        }\n                    ],\n                    preferences: {\n                        notifications: ['promoEmails'],\n                        currency: 'EUR'\n                    },\n                    \"resident-in\": 2\n                },\n                {\n                    name: 'Michael Johnson',\n                    email: 'michael.johnson@example.com',\n                    cart: [\n                        { name: 'Gaming Console', price: 500 },\n                        { name: 'Controller', price: 60 }\n                    ],\n                    wishlist: [\n                        { name: '4K TV', price: 1500 }\n                    ],\n                    orders: [],\n                    preferences: {\n                        notifications: ['orderUpdates'],\n                        currency: 'GBP'\n                    },\n                    \"resident-in\": 1\n                },\n                {\n                    name: 'Emily Davis',\n                    email: 'emily.davis@example.com',\n                    cart: [],\n                    wishlist: [\n                        { name: 'Headphones', price: 200 },\n                        { name: 'Bluetooth Speaker', price: 150 }\n                    ],\n                    orders: [\n                        {\n                            items: [\n                                { name: 'Laptop', price: 1000 }\n                            ],\n                            total: 1000,\n                            date: '2024-08-28',\n                            status: 'Shipped'\n                        }\n                    ],\n                    preferences: {\n                        notifications: ['orderUpdates', 'productRecommendations'],\n                        currency: 'AUD'\n                    },\n                    \"resident-in\": 4\n                },\n                {\n                    name: 'David Lee',\n                    email: 'david.lee@example.com',\n                    cart: [\n                        { name: 'Electric Guitar', price: 1200 }\n                    ],\n                    wishlist: [],\n                    orders: [\n                        {\n                            items: [\n                                { name: 'Acoustic Guitar', price: 800 }\n                            ],\n                            total: 800,\n                            date: '2024-09-10',\n                            status: 'Delivered'\n                        }\n                    ],\n                    preferences: {\n                        notifications: ['promoEmails', 'orderUpdates'],\n                        currency: 'CAD'\n                    },\n                    \"resident-in\": 5\n                }\n            ]\n        };\n\n        Handlebars.registerHelper('list', function (items, options) {\n            let itemsAsHtml = items.map(item =\u003e `\u003cli\u003e${options.fn(item)}\u003c/li\u003e`);\n            return `\u003cul\u003e\\n${itemsAsHtml.join(\"\\n\")}\\n\u003c/ul\u003e`;\n        });\n\n        Handlebars.registerPartial(\n            \"person\",\n            \"{{person.name}} is {{person.age}} years old.\\n\"\n        )\n\n        Handlebars.registerPartial(\n            \"itemrow\",\n            \"\u003cstrong\u003e{{item.name}}\u003c/strong\u003e: {{item.price}},\"\n        )\n\n        Handlebars.registerPartial(\n            \"orderrow\",\n            \"\u003cp\u003e{{order.total}}, Ordered On: {{order.date}} \u003cstrong\u003e{{order.status}}\u003c/strong\u003e\u003c/p\u003e\"\n        )\n\n        Handlebars.registerPartial(\n            \"currency\",\n            \"Currency: {{currency}}\"\n        )\n\n        Handlebars.registerPartial(\n            \"city\",\n            \"City: {{lookup ../cities index}}\"\n        )\n\n        Handlebars.registerHelper('length', (list)=\u003e list.length)\n\n        document.addEventListener('DOMContentLoaded', () =\u003e {\n            source = document.getElementById('handlebar-template').innerHTML\n            template = Handlebars.compile(source)\n            const html = template(context)\n            document.getElementById('content').innerHTML = html;\n        });\n\n    \u003c/script\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e\n    \u003cscript id=\"handlebar-template\" type=\"text/x-handlebars-template\"\u003e\n        {{#list people}}\n            {{firstname}} {{lastname}}\n        {{/list}}\n\n        {{#each persons}}\n            {{\u003eperson person=.}}\n        {{/each}}\n\n        {{#if testingIf.author}}\n            {{#with testingIf}}\n                \u003ch3\u003e{{firstName}} {{lastName}}\u003c/h3\u003e\n            {{/with}}\n            {{else}}\n            \u003ch1\u003eNo Author\u003c/h1\u003e\n        {{/if}}\n\n        {{#if 0 includeZero=true}}\n            \u003ch1\u003eDoes Render\u003c/h1\u003e\n        {{/if}}\n\n        {{#each users as | user |}}\n            {{#with user}}\n                \u003ch1\u003e{{name}}\u003c/h1\u003e\n                \u003ch2\u003e{{email}}\u003c/h2\u003e\n                \u003ch3\u003eCart:\u003c/h3\u003e\n                {{#each cart}}\n                    {{\u003eitemrow item=.}}\n                {{/each}}\n                \u003ch3\u003eWishlist:\u003c/h3\u003e\n                {{#each wishlist}}\n                    {{\u003eitemrow item=.}}\n                {{/each}}\n                \u003ch3\u003e{{#if orders}}Orders{{/if}}\u003c/h3\u003e\n                {{#each orders as | order |}}\n                    {{#each order.items}}\n                        {{\u003eitemrow item=.}}\n                    {{/each}}\n                    {{\u003eorderrow order=order}}\n                {{/each}}\n                \u003cul\u003e\n                    {{#each preferences.notifications}}\n                        \u003cli\u003e{{this}}\u003c/li\u003e\n                    {{/each}}\n                \u003c/ul\u003e\n                {{\u003ecurrency currency=preferences.currency}}\n                    {{#with (lookup ../cities [resident-in])~}}\n                        \u003ch5\u003eCity: {{name}} Code: {{code}}\u003c/h5\u003e\n                    {{/with}}\n                {{/with}}\n            {{/each}}\n        {{log \"users\" users}}\n    \u003c/script\u003e\n\n    \u003cdiv id=\"content\"\u003e\u003c/div\u003e\n\u003c/body\u003e\n\n\u003c/html\u003e\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fh5sh%2Fhandlebars","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fh5sh%2Fhandlebars","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fh5sh%2Fhandlebars/lists"}