{"id":15771802,"url":"https://github.com/akil-io/gulp-site","last_synced_at":"2026-02-05T06:03:39.736Z","repository":{"id":35046998,"uuid":"200066820","full_name":"akil-io/gulp-site","owner":"akil-io","description":"Gulp plugin for all in one static site building","archived":false,"fork":false,"pushed_at":"2023-01-07T04:25:40.000Z","size":2835,"stargazers_count":1,"open_issues_count":16,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-20T14:39:05.775Z","etag":null,"topics":["favicon-generator","flat-file","gulp","handlebars","handlebars-helpers","handlebars-partials","javascript","json","partials","static-site-generator","yaml"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akil-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-01T14:34:46.000Z","updated_at":"2021-11-08T14:50:52.000Z","dependencies_parsed_at":"2023-01-15T12:45:42.945Z","dependency_job_id":null,"html_url":"https://github.com/akil-io/gulp-site","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/akil-io/gulp-site","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akil-io%2Fgulp-site","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akil-io%2Fgulp-site/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akil-io%2Fgulp-site/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akil-io%2Fgulp-site/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akil-io","download_url":"https://codeload.github.com/akil-io/gulp-site/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akil-io%2Fgulp-site/sbom","scorecard":{"id":176042,"data":{"date":"2025-08-11","repo":{"name":"github.com/akil-io/gulp-site","commit":"54e009e086055468902b9f7bda590a8e1055fb2e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 6 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"78 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-cph5-m8f7-6c5x","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-r7jx-5m6m-cpg9","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-j4f2-536g-r55m","Warn: Project is vulnerable to: GHSA-r7qp-cfhv-p84w","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-x3cc-x39p-42qx","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-7wwv-vh3v-89cq","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-5v2h-r2cx-5xgj","Warn: Project is vulnerable to: GHSA-rrrm-qjm4-v8hf","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-8hfj-j24r-96c4","Warn: Project is vulnerable to: GHSA-wc69-rhjr-hc9g","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-6fx8-h7jm-663j","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-44c6-4v22-4mhx","Warn: Project is vulnerable to: GHSA-4x5v-gmq8-25ch","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-gp95-ppv5-3jc5","Warn: Project is vulnerable to: GHSA-54xq-cgqr-rpm3","Warn: Project is vulnerable to: GHSA-wpg7-2c88-r8xv","Warn: Project is vulnerable to: GHSA-25hc-qcg6-38wj","Warn: Project is vulnerable to: GHSA-qm95-pgcg-qqfq","Warn: Project is vulnerable to: GHSA-cqmj-92xf-r6r9","Warn: Project is vulnerable to: GHSA-652h-xwhf-q4h6","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-7p7h-4mm5-852v","Warn: Project is vulnerable to: GHSA-fhg7-m89q-25r3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T17:42:28.109Z","repository_id":35046998,"created_at":"2025-08-16T17:42:28.109Z","updated_at":"2025-08-16T17:42:28.109Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29114510,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T05:31:32.482Z","status":"ssl_error","status_checked_at":"2026-02-05T05:31:29.075Z","response_time":65,"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":["favicon-generator","flat-file","gulp","handlebars","handlebars-helpers","handlebars-partials","javascript","json","partials","static-site-generator","yaml"],"created_at":"2024-10-04T15:05:15.053Z","updated_at":"2026-02-05T06:03:39.720Z","avatar_url":"https://github.com/akil-io.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gulp-site\n\nGulp plugin for all in one static site building. \n\nMain features:\n- generate pages from **sitemap**\n- compile pages with **Handlebars** using layouts, partials and external data\n- compile and minify styles with **SASS**\n- compile and minify scripts with **Webpack**\n- generate favicon and minify images\n- generate **sitemap.xml** and **robots.txt**\n\n## Installation\nWe recommend using yarn insted of npm.\n```bash\nyarn add gulp-site\n```\n## Usage\nFirst time site generation:\n```bash\nmkdir my-new-site \u0026\u0026 cd my-new-site\nyarn init\nyarn add gulp-site\n```\nAdd to **package.json** scripts section:\n```json\n\"scripts\": {\n    \"setup\": \"site init \u0026\u0026 site generate\",\n    \"custom\": \"site create\",\n    \"start\": \"site default\",\n    \"build\": \"site build --production\",\n    \"generate\": \"site generate\",\n    \"favicon\": \"site favicon\",\n    \"catalog\": \"site catalog\"\n  },\n```\nAnd generate site base files and directories:\n```bash\nyarn setup\nyarn start\n```\nEnjoy.\n\n## Options\nYou can configure gulp-site builder with **config.yml**\n```yaml\n# Your project's server will run on localhost:xxxx at this port\nPORT: 8000\n# Your site production web-root, available in templates, but for dev will be replaced with http://localhost:\u003cport\u003e\nORIGIN: https://test.test\n\nINDEX:\n  # Additional disallow paths for generating robots.txt\n  disallow:\n    - /assets/\n\n# Autoprefixer will make sure your CSS works with these browsers\nCOMPATIBILITY:\n  - \"last 2 versions\"\n  - \"ie \u003e= 9\"\n  - \"ios \u003e= 7\"\n  - \"android \u003e= 4.4\"\n\n# Settings for UnCSS\nUNCSS:\n  enabled: true # false by default, has known UNCSS bug with js execution\n  ignore:\n    - !!js/regexp ^\\.is-.*\n\n# Include this styles and scripts in all pages\nCDN:\n  root: https://cdn.mysite.com/ # will set this to {{cdn}} variable with production build\n  js:\n    - \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/core.js\" integrity=\"sha256-36hEPcG8mKookfvUVvEqRkpdYV1unP6wvxIqbgdeVhk=\" crossorigin=\"anonymous\"\u003e\u003c/script\u003e\n  css:\n    - \u003clink rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.min.css\" integrity=\"sha256-vK3UTo/8wHbaUn+dTQD0X6dzidqc5l7gczvH+Bnowwk=\" crossorigin=\"anonymous\" /\u003e\n\n# All path must be relative to your working dir\nPATHS:\n  dist: dist # destination path\n  logo: src/assets/img/logo.png # at least 260x260px image or svg for favicon generation\n  sitemap: src/sitemap.yml # source file for generating site pages\n  pages: src/pages # site pages in .html, .json or .yaml files\n  layouts: src/layouts # .html, .hbs or .handlebars layouts\n\tpartials: src/partials # .html, .hbs or .handlebars partials\n\tpublic: src/public # this files will be copied to the root of destination\n\tassets: src/assets # images, styles, scripts and other required files\n    data: src/data # .json, .yaml files containing data for templates\n    helpers: src/helpers # .js files with helpers\n    sass: [] # this paths will be available for import in your scss files\n    entries: ['/js/app.js'] # scripts entry files\n    styles: ['/scss/app.scss'] # styles entry files\n```\nAll configuration options you can see in settings.js file in module folder.\n\n\n## Building blocks\n### Pages\nPage can be defined with .html, .yml or .json file. HTML files can contain YAML Front Matter:\n```html\n---\nlayout: default\nurl: /contact\ntitle: Contact page\nindex: true\n---\n\u003ch1\u003eContact page\u003c/h1\u003e\n```\nIn YAML format this will look as:\n```yaml\nlayout: default\nurl: /contact\ntitle: Contact page\nindex: true\nbody: \u003ch1\u003eContact page\u003c/h1\u003e\n```\nIn .yml and .json files you can define body as map of partials, where key is partial name and value data passed to partial exclusively:\n```json\n{\n\t\"layout\": \"default\",\n\t\"url\": \"/contact\",\n\t\"title\": \"Contact page\",\n\t\"index\": true,\n\t\"body\": {\n\t\t\"widget_map\": {\n\t\t\t\"link\": \"\u003clink to my map\u003e\"\n\t\t},\n\t\t\"feedback_form\": {\n\t\t\t\"title\": \"Contact us!\"\n\t\t}\n\t}\n}\n```\nThis body will be generated in template like this:\n```html\n{{#with body.widget_map}}\n\t{{\u003e widget_map}}\n{{/with}}\n{{#with body.feedback_form}}\n\t{{\u003e feedback_form}}\n{{/with}}\n```\n#### Page attributes\n**layout:** \u0026mdash; name of the layout file used for this page\n**url:** \u0026mdash; page will be available by this url, for example /contact will create file at contact/index.html\n**title:** \u0026mdash; page head title, in the default layout placed in `\u003ctitle\u003e{{title}}\u003c/title\u003e`\n**description:** \u0026mdash; page head description tag\n**keywords:** \u0026mdash; page head keywords tag\n**index:** \u0026mdash; boolean type, declare page indexation, indexed page (index: true) will be available in `sitemap.xml` with date of last file changing. Not indexed page (index: false) will de dissallowed in `robots.txt`\n**og:** \u0026mdash; open graph data, used in `meta.html` partial provided by gulp-site. Read about it in partials.\n**cdn:** \u0026mdash; contain js and css array properties with scripts and styles available only on this page\n\n### `layouts`\nLayout files can have the extension `.html`, `.hbs`, or `.handlebars`. Default layout provided:\n```html\n{{#wrap 'html5' this}}\n  {{\u003e body}}\n{{/wrap}}\n```\n\nYou can customise layout by calling next command:\n```bash\nyarn custom layout:default\n```\nAnd default layout will be copied to the `src/layouts/default.html`\nAll layouts have a special Handlebars partial called `body` which contains the contents of the page.\n\n```html\n\u003c!-- Header up here --\u003e\n{{\u003e body}}\n\u003c!-- Footer down here --\u003e\n```\n\n### `partials`\nPartial files can have the extension `.html`, `.hbs`, or `.handlebars`. Each will be registered as a Handlebars partial which can be accessed using the name of the file. (The path to the file doesn't matter\u0026mdash;only the name of the file itself is used.)\n\n```html\n\u003c!-- Renders partials/header.html --\u003e\n{{\u003e header}}\n```\n\nGulp-site provide partial {{\u003e meta}} for meta tags generation:\n```html\n\u003cmeta name=\"description\" content=\"{{description}}\" /\u003e\n\u003cmeta name=\"keywords\" content=\"{{keywords}}\" /\u003e\n\u003clink rel=\"canonical\" href=\"{{site.domain}}{{url}}\"/\u003e\n\n\u003clink rel='shortcut icon' type='image/x-icon' href='/favicon.ico'\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon.png\"\u003e\n\u003clink rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/favicon-32x32.png\"\u003e\n\u003clink rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/favicon-16x16.png\"\u003e\n\u003clink rel=\"manifest\" href=\"/site.webmanifest\"\u003e\n\n{{#if theme}}\n\u003clink rel=\"mask-icon\" href=\"/safari-pinned-tab.svg\" color=\"{{theme.safari_tab_color}}\"\u003e\n\u003cmeta name=\"msapplication-TileColor\" content=\"{{theme.msapp_color}}\"\u003e\n\u003cmeta name=\"theme-color\" content=\"{{theme.color}}\"\u003e\n{{/if}}\n\n{{#if og}}\n\u003cmeta property=\"og:type\" content=\"{{#if og.type}}{{og.type}}{{else}}website{{/if}}\" /\u003e\n\u003cmeta property=\"og:site_name\" content=\"{{og.site_name}}\" /\u003e\n\u003cmeta property=\"og:image:width\" content=\"{{#if og.image_width}}{{og.image_width}}{{else}}795{{/if}}\"\u003e\n\u003cmeta property=\"og:image:height\" content=\"{{#if og.image_wheight}}{{og.image_height}}{{else}}200{{/if}}\"\u003e\n\u003cmeta property=\"og:url\" content=\"{{settings.origin}}\"\u003e\n\u003cmeta property=\"og:image\" content=\"{{settings.origin}}/{{og.image}}\"\u003e\n\u003cmeta property=\"og:title\" content=\"{{#if og.image_width}}{{og.title}}{{else}}{{title}}{{/if}}\"\u003e\n\u003cmeta property=\"og:description\" content=\"{{#if og.image_width}}{{og.description}}{{else}}{{description}}{{/if}}\"\u003e\n{{/if}}\n\n{{#unless index}}\n\u003cmeta name=\"robots\" content=\"noindex, nofollow\"/\u003e\n{{/unless}}\n```\n\n#### `partial: wrapper`\nIs a special type of partials for wrapping around your code.\nFor example `html5` wrapper is contain next code:\n```html\n\u003c!doctype html\u003e\n\u003chtml class=\"no-js\" lang=\"{{site.language}}\"\u003e\n  \u003chead\u003e\n    {{#if site.tagID}}\n    \u003cscript\u003e(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','{{site.tagID}}');\u003c/script\u003e \u003c!-- End Google Tag Manager --\u003e\n    {{/if}}\n    \n    {{\u003e meta}}\n    \n    {{#if css}}\n      {{#each css}}\n    {{{this}}}\n      {{/each}}\n    {{/if}}\n\n    \u003clink rel=\"stylesheet\" href=\"{{cdn}}css/app.css?{{timestamp}}\"\u003e\n  \u003c/head\u003e\n\u003cbody\u003e\n  {{#if site.tagID}}\n  \u003c!-- Google Tag Manager (noscript) --\u003e\n  \u003cnoscript\u003e\u003ciframe src=\"https://www.googletagmanager.com/ns.html?id={{site.tagID}}\"\n  height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"\u003e\u003c/iframe\u003e\u003c/noscript\u003e\n  \u003c!-- End Google Tag Manager (noscript) --\u003e\n  {{/if}}\n  \n  {{{child}}}\n\n  {{#if js}}\n    {{#each js}}\n  {{{this}}}\n    {{/each}}\n  {{/if}}\n  \u003cscript src=\"{{cdn}}js/app.js?{{timestamp}}\"\u003e\u003c/script\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\nIs is like a layout, but replace `{{\u003e body}}` with `{{{child}}}` tag.\n```html\n\u003c!-- Wrapper start up here --\u003e\n{{{child}}}\n\u003c!-- Wrapper end down here --\u003e\n```\n\n### `helpers`\nHandlebars helpers are `.js` files which export a function via `module.exports`. The name used to register the helper is the same as the name of the file.\n\nFor example, a file named `content.js` that exports this function would add a Handlebars helper called `{{content}}`.\n\n```js\nmodule.exports = function(text, options) {\n  return `\u003cp\u003e${text}\u003c/p\u003e`\n}\n```\nArgument options contain all data, or **fn** function with child elements with helper block call:\n```html\n{{#content}}\n    \u003cb\u003eHello\u003c/b\u003e\n{{/content}}\n```\nAnd **content.js** will be:\n```js\nmodule.exports = function(text, options) {\n  return '\u003cp\u003e' + options.fn(options.data.root) + '\u003c/p\u003e';\n}\n```\nIn **this** context available Handlebars property if you need listing of partials or call .compile function.\n\nProvided default next helpers:\n**{{#code 'html'}} ... {{/code}}** \u0026mdash; highlight code examples with selected language using `highlight.js`\n**{{getData 'site.tagID'}}** \u0026mdash; get data by path from the root\n**{{getPage 'contact'}}** \u0026mdash; return page object with all data\n**{{getPage 'contact' 'body.feedback_form'}}** \u0026mdash; return data from selected page by path\n**{{ifEqual 'a' 'b'}} ... {{else}} ... {{/ifEqual}}** \u0026mdash; if the values are equal, content inside of the helper. If not, the content inside the `{{else}}` block\n**{{#markdown}} ... {{/markdown}}** \u0026mdash; render markdown formated text to html\n**{{repeat 3}} ... {{/repeat}}** \u0026mdash; repeate n times content inside of the helper\n**{{#wrap 'partial_name'}} ... {{/wrap}}** \u0026mdash; use selected partial for wraping content inside tags. Partial used in wrap must contain `{{{child}}}` tag, rendered in root context.\n**{{#wrap 'partial_name' withData}} ... {{/wrap}}** \u0026mdash; Partial used in wrap rendered in `withData` context., if withData not set used global context. For current context set `this`.\n\n### `data`\nData can be formatted as JSON (`.json`) or YAML (`.yml`). Within a template, the data is stored within a variable with the same name as the file it came from.\n\nFor example, a file named `contact.json` with key/value pairs such as the following:\n\n```js\n{\n    \"name\": \"John Doe\",\n    \"email\": \"john.doe@gmail.com\",\n    \"phone\": \"555-1212\"\n}\n```\n\nCould be used to output the value of John Doe within a template using the Handlebars syntax of `{{contact.name}}`.\n\nData can also be inserted into the page itself with a Front Matter template at the top of the .html file or defined in .yml or .json fields of page file.\n\nLastly, the reserved `page` variable is added to every page template as it renders. It contains the name of the page being rendered, without the extension.\n\nWhen generating initial setup will be provided `site.yml` file:\n```yaml\nname: new site\ntagID: \n\nabout: short description\ndescription: full description\n\ncontact:\n  phone:\n  email:\n  time:\n```\n\nProperty `tagID` used for Google Tag Manager code placement in the default layout provided by gulp-site.\n\n#### `data catalog`\nSite data can be readed from /data/\u003ccatalog-name\u003e/index.{yml,json,js} files. This files can be filled manual or generated by command `yarn catalog --name \u003ccatalog-name\u003e`. This command output catalog data file with directory tree of this catalog.\n\nBy default output will be looked like this:\n```yaml\nitems:\n  folder1:\n    images:\n      - url: /folder1/1.jpg\n        preview: /folder1/1@s.jpg\n    videos: []\n  folder2:\n    items:\n      subfolder1:\n        images:\n          - url: /folder2/subfolder1/1.jpg\n            preview: /folder2/subfolder1/1@s.jpg\n```\n\nBy default catalog generator copy media files to `/src/public/content/\u003ccatalog-name\u003e` folder, for images also make a preview with size 120x120px.\n\nYou can configure output by add settings.yml file on any level of catalog and this options will be applied to this folder.\n\n**Available options:**\n`prefix` - string prepended the folder name in result index.yml file.\n`flatItems` - do not place child items in `items` key, each of child will be placed on the folder root level.\n`dataTemplate` - object fields appended to result folder object. Work as template with ${keyname} style (warning: filled one by one by declaration order). Available two default variable: `${itemDirName}`, `${parentDirName}`.\n`subSettings` - settings applied to the each subfolders. If subfolder has own settings file this one merged with this options, but own subdolder settings has priority.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakil-io%2Fgulp-site","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakil-io%2Fgulp-site","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakil-io%2Fgulp-site/lists"}