Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

easytemplate

easytemplate is a simple system for initializing new projects. It only requires a project skeleton and a short configuration file.

Example

Deno must be installed to run easytemplate.

git clone https://github.com/Jamalam360/easytemplate
cd easytemplate/example
deno run --allow-read --allow-write https://raw.githubusercontent.com/Jamalam360/easytemplate/main/easytemplate.ts

A more complex example can be found here

easytemplate can also be run with the --debug flag to debug your templates (or more likely easytemplate itself).

Documentation

Structure

An easytemplate template is simply composed of the relevant files along with an easytemplate.json file, which is removed at the end of templating.

easytemplate.json

The configuration file is composed of the following fields:

{
"inputs": "Input[]",
"move": "Move[]",
"exclude": "string[]"
}

Input

Inputs are the questions which are asked to the user before filling in the template. All inputs share 4 common fields:

  • id: string; this is the name of the variable that will be passed to Handlebars.
  • label: string; this is the prompt shown to the user.
  • default?: T; this is the default response.
  • only_if?: string; this is a JavaScript expression which determines whether the user should be prompted about this input. All previously evaluated inputs are available (e.g. some_previous_input.includes("jeff")).
options
{
"type": "options",
"id": "some_id",
"label": "Enter ...:",
"options": [
{
"value": "john",
"label": "John"
},
{
"value": "bill",
"label": "Bill"
}
]
}
string
{
"type": "string",
"id": "some_id",
"label": "Enter ...:",
"regex": "optionally add a validating regex"
}
boolean
{
"type": "boolean",
"id": "some_id",
"label": "Enter ...:"
}

Move

Move operations are used to rename/move files after the template has been filled out (all Handlebars expressions have been expanded).

{
"from": "from_path",
"to": "to_path"
}

Exclude

Excludes are used to exclude some files from being templated. Exclude paths are extended, globstar-enabled globs.

easytemplate makes a best guess at automatically excluding non-text files from processing.

Ignore

Ignore paths are used to exclude files from the final initialized template. Ignore paths are extended, globstar-enabled globs.

Templating

easytemplate uses Handlebars as it's templating engine. Handlebars is useable in any file, as well as in directory paths/file names themselves.

Using Handlebars in File Paths

Since file paths cannot contain /, which is used by Handlebars, easytemplate will replace all occurrences of %% in a path with /. Other than this, Handlebars can be used as normal in path names - here is a complex example, along with an example output:

./my_template/{{ variable1 }}/{{ #replace "b" "a" }}{{ variable2 }}{{ %%replace }}/{{ variable3}}.txt
###
variable1 = james
variable2 = bob
variable3 = dave
./my_template/james/aoa/dave.txt

Handlebars Helpers

easytemplate includes a few default Handlebars helpers.

replace

Replaces all occurrences of find in the block with replace

{{ #replace 'find' 'replace' }}
I am finding this string, very cool!
{{ /replace }}
###
I am replacing this string, very cool!
ifCond

Implements the following binary operators between variables:

  • ==
  • ===
  • !=
  • !==
  • <
  • <=
  • >
  • >=
  • &&
  • ||
{{ #ifCond string1 '===' string2 }}
string one was equal to string two!
{{ /ifCond }}
###
string1 = test
string2 = test
string one was equal to string two!

.easytemplate

When using easytemplate myself, I found some IDEs that I had configured to format code automatically would create horrible formatting due to the random Handlebars syntax in what the IDE thought was a normal code file.

Due to this issue, I made easytemplate remove the .easytemplate suffix from any files that have it. Other than that, no other changes are made to these files outside of the usual processing.

The CLI

Options:

  • --debug: enable debug logging; mainly just helpful for me
  • --disable-interactive-mode: don't prompt for inputs, useful for CI environments. Must use along with --input.
  • --input: pass a value for a input, in the form id=value, e.g. --input my_string="a string here". Quotes are optional.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

easytemplate

easytemplate is a simple system for initializing new projects. It only requires a project skeleton and a short configuration file.

Example

Deno must be installed to run easytemplate.

git clone https://github.com/Jamalam360/easytemplate
cd easytemplate/example
deno run --allow-read --allow-write https://raw.githubusercontent.com/Jamalam360/easytemplate/main/easytemplate.ts

A more complex example can be found here

easytemplate can also be run with the --debug flag to debug your templates (or more likely easytemplate itself).

Documentation

Structure

An easytemplate template is simply composed of the relevant files along with an easytemplate.json file, which is removed at the end of templating.

easytemplate.json

The configuration file is composed of the following fields:

{
"inputs": "Input[]",
"move": "Move[]",
"exclude": "string[]"
}

Input

Inputs are the questions which are asked to the user before filling in the template. All inputs share 4 common fields:

  • id: string; this is the name of the variable that will be passed to Handlebars.
  • label: string; this is the prompt shown to the user.
  • default?: T; this is the default response.
  • only_if?: string; this is a JavaScript expression which determines whether the user should be prompted about this input. All previously evaluated inputs are available (e.g. some_previous_input.includes("jeff")).
options
{
"type": "options",
"id": "some_id",
"label": "Enter ...:",
"options": [
{
"value": "john",
"label": "John"
},
{
"value": "bill",
"label": "Bill"
}
]
}
string
{
"type": "string",
"id": "some_id",
"label": "Enter ...:",
"regex": "optionally add a validating regex"
}
boolean
{
"type": "boolean",
"id": "some_id",
"label": "Enter ...:"
}

Move

Move operations are used to rename/move files after the template has been filled out (all Handlebars expressions have been expanded).

{
"from": "from_path",
"to": "to_path"
}

Exclude

Excludes are used to exclude some files from being templated. Exclude paths are extended, globstar-enabled globs.

easytemplate makes a best guess at automatically excluding non-text files from processing.

Ignore

Ignore paths are used to exclude files from the final initialized template. Ignore paths are extended, globstar-enabled globs.

Templating

easytemplate uses Handlebars as it's templating engine. Handlebars is useable in any file, as well as in directory paths/file names themselves.

Using Handlebars in File Paths

Since file paths cannot contain /, which is used by Handlebars, easytemplate will replace all occurrences of %% in a path with /. Other than this, Handlebars can be used as normal in path names - here is a complex example, along with an example output:

./my_template/{{ variable1 }}/{{ #replace "b" "a" }}{{ variable2 }}{{ %%replace }}/{{ variable3}}.txt
###
variable1 = james
variable2 = bob
variable3 = dave
./my_template/james/aoa/dave.txt

Handlebars Helpers

easytemplate includes a few default Handlebars helpers.

replace

Replaces all occurrences of find in the block with replace

{{ #replace 'find' 'replace' }}
I am finding this string, very cool!
{{ /replace }}
###
I am replacing this string, very cool!
ifCond

Implements the following binary operators between variables:

  • ==
  • ===
  • !=
  • !==
  • <
  • <=
  • >
  • >=
  • &&
  • ||
{{ #ifCond string1 '===' string2 }}
string one was equal to string two!
{{ /ifCond }}
###
string1 = test
string2 = test
string one was equal to string two!

.easytemplate

When using easytemplate myself, I found some IDEs that I had configured to format code automatically would create horrible formatting due to the random Handlebars syntax in what the IDE thought was a normal code file.

Due to this issue, I made easytemplate remove the .easytemplate suffix from any files that have it. Other than that, no other changes are made to these files outside of the usual processing.

The CLI

Options:

  • --debug: enable debug logging; mainly just helpful for me
  • --disable-interactive-mode: don't prompt for inputs, useful for CI environments. Must use along with --input.
  • --input: pass a value for a input, in the form id=value, e.g. --input my_string="a string here". Quotes are optional.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

easytemplate

easytemplate is a simple system for initializing new projects. It only requires a project skeleton and a short configuration file.

Example

Deno must be installed to run easytemplate.

git clone https://github.com/Jamalam360/easytemplate
cd easytemplate/example
deno run --allow-read --allow-write https://raw.githubusercontent.com/Jamalam360/easytemplate/main/easytemplate.ts

A more complex example can be found here

easytemplate can also be run with the --debug flag to debug your templates (or more likely easytemplate itself).

Documentation

Structure

An easytemplate template is simply composed of the relevant files along with an easytemplate.json file, which is removed at the end of templating.

easytemplate.json

The configuration file is composed of the following fields:

{
"inputs": "Input[]",
"move": "Move[]",
"exclude": "string[]"
}

Input

Inputs are the questions which are asked to the user before filling in the template. All inputs share 4 common fields:

  • id: string; this is the name of the variable that will be passed to Handlebars.
  • label: string; this is the prompt shown to the user.
  • default?: T; this is the default response.
  • only_if?: string; this is a JavaScript expression which determines whether the user should be prompted about this input. All previously evaluated inputs are available (e.g. some_previous_input.includes("jeff")).
options
{
"type": "options",
"id": "some_id",
"label": "Enter ...:",
"options": [
{
"value": "john",
"label": "John"
},
{
"value": "bill",
"label": "Bill"
}
]
}
string
{
"type": "string",
"id": "some_id",
"label": "Enter ...:",
"regex": "optionally add a validating regex"
}
boolean
{
"type": "boolean",
"id": "some_id",
"label": "Enter ...:"
}

Move

Move operations are used to rename/move files after the template has been filled out (all Handlebars expressions have been expanded).

{
"from": "from_path",
"to": "to_path"
}

Exclude

Excludes are used to exclude some files from being templated. Exclude paths are extended, globstar-enabled globs.

easytemplate makes a best guess at automatically excluding non-text files from processing.

Ignore

Ignore paths are used to exclude files from the final initialized template. Ignore paths are extended, globstar-enabled globs.

Templating

easytemplate uses Handlebars as it's templating engine. Handlebars is useable in any file, as well as in directory paths/file names themselves.

Using Handlebars in File Paths

Since file paths cannot contain /, which is used by Handlebars, easytemplate will replace all occurrences of %% in a path with /. Other than this, Handlebars can be used as normal in path names - here is a complex example, along with an example output:

./my_template/{{ variable1 }}/{{ #replace "b" "a" }}{{ variable2 }}{{ %%replace }}/{{ variable3}}.txt
###
variable1 = james
variable2 = bob
variable3 = dave
./my_template/james/aoa/dave.txt

Handlebars Helpers

easytemplate includes a few default Handlebars helpers.

replace

Replaces all occurrences of find in the block with replace

{{ #replace 'find' 'replace' }}
I am finding this string, very cool!
{{ /replace }}
###
I am replacing this string, very cool!
ifCond

Implements the following binary operators between variables:

  • ==
  • ===
  • !=
  • !==
  • <
  • <=
  • >
  • >=
  • &&
  • ||
{{ #ifCond string1 '===' string2 }}
string one was equal to string two!
{{ /ifCond }}
###
string1 = test
string2 = test
string one was equal to string two!

.easytemplate

When using easytemplate myself, I found some IDEs that I had configured to format code automatically would create horrible formatting due to the random Handlebars syntax in what the IDE thought was a normal code file.

Due to this issue, I made easytemplate remove the .easytemplate suffix from any files that have it. Other than that, no other changes are made to these files outside of the usual processing.

The CLI

Options:

  • --debug: enable debug logging; mainly just helpful for me
  • --disable-interactive-mode: don't prompt for inputs, useful for CI environments. Must use along with --input.
  • --input: pass a value for a input, in the form id=value, e.g. --input my_string="a string here". Quotes are optional.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

easytemplate

easytemplate is a simple system for initializing new projects. It only requires a project skeleton and a short configuration file.

Example

Deno must be installed to run easytemplate.

git clone https://github.com/Jamalam360/easytemplate
cd easytemplate/example
deno run --allow-read --allow-write https://raw.githubusercontent.com/Jamalam360/easytemplate/main/easytemplate.ts

A more complex example can be found here

easytemplate can also be run with the --debug flag to debug your templates (or more likely easytemplate itself).

Documentation

Structure

An easytemplate template is simply composed of the relevant files along with an easytemplate.json file, which is removed at the end of templating.

easytemplate.json

The configuration file is composed of the following fields:

{
"inputs": "Input[]",
"move": "Move[]",
"exclude": "string[]"
}

Input

Inputs are the questions which are asked to the user before filling in the template. All inputs share 4 common fields:

  • id: string; this is the name of the variable that will be passed to Handlebars.
  • label: string; this is the prompt shown to the user.
  • default?: T; this is the default response.
  • only_if?: string; this is a JavaScript expression which determines whether the user should be prompted about this input. All previously evaluated inputs are available (e.g. some_previous_input.includes("jeff")).
options
{
"type": "options",
"id": "some_id",
"label": "Enter ...:",
"options": [
{
"value": "john",
"label": "John"
},
{
"value": "bill",
"label": "Bill"
}
]
}
string
{
"type": "string",
"id": "some_id",
"label": "Enter ...:",
"regex": "optionally add a validating regex"
}
boolean
{
"type": "boolean",
"id": "some_id",
"label": "Enter ...:"
}

Move

Move operations are used to rename/move files after the template has been filled out (all Handlebars expressions have been expanded).

{
"from": "from_path",
"to": "to_path"
}

Exclude

Excludes are used to exclude some files from being templated. Exclude paths are extended, globstar-enabled globs.

easytemplate makes a best guess at automatically excluding non-text files from processing.

Ignore

Ignore paths are used to exclude files from the final initialized template. Ignore paths are extended, globstar-enabled globs.

Templating

easytemplate uses Handlebars as it's templating engine. Handlebars is useable in any file, as well as in directory paths/file names themselves.

Using Handlebars in File Paths

Since file paths cannot contain /, which is used by Handlebars, easytemplate will replace all occurrences of %% in a path with /. Other than this, Handlebars can be used as normal in path names - here is a complex example, along with an example output:

./my_template/{{ variable1 }}/{{ #replace "b" "a" }}{{ variable2 }}{{ %%replace }}/{{ variable3}}.txt
###
variable1 = james
variable2 = bob
variable3 = dave
./my_template/james/aoa/dave.txt

Handlebars Helpers

easytemplate includes a few default Handlebars helpers.

replace

Replaces all occurrences of find in the block with replace

{{ #replace 'find' 'replace' }}
I am finding this string, very cool!
{{ /replace }}
###
I am replacing this string, very cool!
ifCond

Implements the following binary operators between variables:

  • ==
  • ===
  • !=
  • !==
  • <
  • <=
  • >
  • >=
  • &&
  • ||
{{ #ifCond string1 '===' string2 }}
string one was equal to string two!
{{ /ifCond }}
###
string1 = test
string2 = test
string one was equal to string two!

.easytemplate

When using easytemplate myself, I found some IDEs that I had configured to format code automatically would create horrible formatting due to the random Handlebars syntax in what the IDE thought was a normal code file.

Due to this issue, I made easytemplate remove the .easytemplate suffix from any files that have it. Other than that, no other changes are made to these files outside of the usual processing.

The CLI

Options:

  • --debug: enable debug logging; mainly just helpful for me
  • --disable-interactive-mode: don't prompt for inputs, useful for CI environments. Must use along with --input.
  • --input: pass a value for a input, in the form id=value, e.g. --input my_string="a string here". Quotes are optional.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

easytemplate

easytemplate is a simple system for initializing new projects. It only requires a project skeleton and a short configuration file.

Example

Deno must be installed to run easytemplate.

git clone https://github.com/Jamalam360/easytemplate
cd easytemplate/example
deno run --allow-read --allow-write https://raw.githubusercontent.com/Jamalam360/easytemplate/main/easytemplate.ts

A more complex example can be found here

easytemplate can also be run with the --debug flag to debug your templates (or more likely easytemplate itself).

Documentation

Structure

An easytemplate template is simply composed of the relevant files along with an easytemplate.json file, which is removed at the end of templating.

easytemplate.json

The configuration file is composed of the following fields:

{
"inputs": "Input[]",
"move": "Move[]",
"exclude": "string[]"
}

Input

Inputs are the questions which are asked to the user before filling in the template. All inputs share 4 common fields:

  • id: string; this is the name of the variable that will be passed to Handlebars.
  • label: string; this is the prompt shown to the user.
  • default?: T; this is the default response.
  • only_if?: string; this is a JavaScript expression which determines whether the user should be prompted about this input. All previously evaluated inputs are available (e.g. some_previous_input.includes("jeff")).
options
{
"type": "options",
"id": "some_id",
"label": "Enter ...:",
"options": [
{
"value": "john",
"label": "John"
},
{
"value": "bill",
"label": "Bill"
}
]
}
string
{
"type": "string",
"id": "some_id",
"label": "Enter ...:",
"regex": "optionally add a validating regex"
}
boolean
{
"type": "boolean",
"id": "some_id",
"label": "Enter ...:"
}

Move

Move operations are used to rename/move files after the template has been filled out (all Handlebars expressions have been expanded).

{
"from": "from_path",
"to": "to_path"
}

Exclude

Excludes are used to exclude some files from being templated. Exclude paths are extended, globstar-enabled globs.

easytemplate makes a best guess at automatically excluding non-text files from processing.

Ignore

Ignore paths are used to exclude files from the final initialized template. Ignore paths are extended, globstar-enabled globs.

Templating

easytemplate uses Handlebars as it's templating engine. Handlebars is useable in any file, as well as in directory paths/file names themselves.

Using Handlebars in File Paths

Since file paths cannot contain /, which is used by Handlebars, easytemplate will replace all occurrences of %% in a path with /. Other than this, Handlebars can be used as normal in path names - here is a complex example, along with an example output:

./my_template/{{ variable1 }}/{{ #replace "b" "a" }}{{ variable2 }}{{ %%replace }}/{{ variable3}}.txt
###
variable1 = james
variable2 = bob
variable3 = dave
./my_template/james/aoa/dave.txt

Handlebars Helpers

easytemplate includes a few default Handlebars helpers.

replace

Replaces all occurrences of find in the block with replace

{{ #replace 'find' 'replace' }}
I am finding this string, very cool!
{{ /replace }}
###
I am replacing this string, very cool!
ifCond

Implements the following binary operators between variables:

  • ==
  • ===
  • !=
  • !==
  • <
  • <=
  • >
  • >=
  • &&
  • ||
{{ #ifCond string1 '===' string2 }}
string one was equal to string two!
{{ /ifCond }}
###
string1 = test
string2 = test
string one was equal to string two!

.easytemplate

When using easytemplate myself, I found some IDEs that I had configured to format code automatically would create horrible formatting due to the random Handlebars syntax in what the IDE thought was a normal code file.

Due to this issue, I made easytemplate remove the .easytemplate suffix from any files that have it. Other than that, no other changes are made to these files outside of the usual processing.

The CLI

Options:

  • --debug: enable debug logging; mainly just helpful for me
  • --disable-interactive-mode: don't prompt for inputs, useful for CI environments. Must use along with --input.
  • --input: pass a value for a input, in the form id=value, e.g. --input my_string="a string here". Quotes are optional.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

easytemplate

easytemplate is a simple system for initializing new projects. It only requires a project skeleton and a short configuration file.

Example

Deno must be installed to run easytemplate.

git clone https://github.com/Jamalam360/easytemplate
cd easytemplate/example
deno run --allow-read --allow-write https://raw.githubusercontent.com/Jamalam360/easytemplate/main/easytemplate.ts

A more complex example can be found here

easytemplate can also be run with the --debug flag to debug your templates (or more likely easytemplate itself).

Documentation

Structure

An easytemplate template is simply composed of the relevant files along with an easytemplate.json file, which is removed at the end of templating.

easytemplate.json

The configuration file is composed of the following fields:

{
"inputs": "Input[]",
"move": "Move[]",
"exclude": "string[]"
}

Input

Inputs are the questions which are asked to the user before filling in the template. All inputs share 4 common fields:

  • id: string; this is the name of the variable that will be passed to Handlebars.
  • label: string; this is the prompt shown to the user.
  • default?: T; this is the default response.
  • only_if?: string; this is a JavaScript expression which determines whether the user should be prompted about this input. All previously evaluated inputs are available (e.g. some_previous_input.includes("jeff")).
options
{
"type": "options",
"id": "some_id",
"label": "Enter ...:",
"options": [
{
"value": "john",
"label": "John"
},
{
"value": "bill",
"label": "Bill"
}
]
}
string
{
"type": "string",
"id": "some_id",
"label": "Enter ...:",
"regex": "optionally add a validating regex"
}
boolean
{
"type": "boolean",
"id": "some_id",
"label": "Enter ...:"
}

Move

Move operations are used to rename/move files after the template has been filled out (all Handlebars expressions have been expanded).

{
"from": "from_path",
"to": "to_path"
}

Exclude

Excludes are used to exclude some files from being templated. Exclude paths are extended, globstar-enabled globs.

easytemplate makes a best guess at automatically excluding non-text files from processing.

Ignore

Ignore paths are used to exclude files from the final initialized template. Ignore paths are extended, globstar-enabled globs.

Templating

easytemplate uses Handlebars as it's templating engine. Handlebars is useable in any file, as well as in directory paths/file names themselves.

Using Handlebars in File Paths

Since file paths cannot contain /, which is used by Handlebars, easytemplate will replace all occurrences of %% in a path with /. Other than this, Handlebars can be used as normal in path names - here is a complex example, along with an example output:

./my_template/{{ variable1 }}/{{ #replace "b" "a" }}{{ variable2 }}{{ %%replace }}/{{ variable3}}.txt
###
variable1 = james
variable2 = bob
variable3 = dave
./my_template/james/aoa/dave.txt

Handlebars Helpers

easytemplate includes a few default Handlebars helpers.

replace

Replaces all occurrences of find in the block with replace

{{ #replace 'find' 'replace' }}
I am finding this string, very cool!
{{ /replace }}
###
I am replacing this string, very cool!
ifCond

Implements the following binary operators between variables:

  • ==
  • ===
  • !=
  • !==
  • <
  • <=
  • >
  • >=
  • &&
  • ||
{{ #ifCond string1 '===' string2 }}
string one was equal to string two!
{{ /ifCond }}
###
string1 = test
string2 = test
string one was equal to string two!

.easytemplate

When using easytemplate myself, I found some IDEs that I had configured to format code automatically would create horrible formatting due to the random Handlebars syntax in what the IDE thought was a normal code file.

Due to this issue, I made easytemplate remove the .easytemplate suffix from any files that have it. Other than that, no other changes are made to these files outside of the usual processing.

The CLI

Options:

  • --debug: enable debug logging; mainly just helpful for me
  • --disable-interactive-mode: don't prompt for inputs, useful for CI environments. Must use along with --input.
  • --input: pass a value for a input, in the form id=value, e.g. --input my_string="a string here". Quotes are optional.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

easytemplate

easytemplate is a simple system for initializing new projects. It only requires a project skeleton and a short configuration file.

Example

Deno must be installed to run easytemplate.

git clone https://github.com/Jamalam360/easytemplate
cd easytemplate/example
deno run --allow-read --allow-write https://raw.githubusercontent.com/Jamalam360/easytemplate/main/easytemplate.ts

A more complex example can be found here

easytemplate can also be run with the --debug flag to debug your templates (or more likely easytemplate itself).

Documentation

Structure

An easytemplate template is simply composed of the relevant files along with an easytemplate.json file, which is removed at the end of templating.

easytemplate.json

The configuration file is composed of the following fields:

{
"inputs": "Input[]",
"move": "Move[]",
"exclude": "string[]"
}

Input

Inputs are the questions which are asked to the user before filling in the template. All inputs share 4 common fields:

  • id: string; this is the name of the variable that will be passed to Handlebars.
  • label: string; this is the prompt shown to the user.
  • default?: T; this is the default response.
  • only_if?: string; this is a JavaScript expression which determines whether the user should be prompted about this input. All previously evaluated inputs are available (e.g. some_previous_input.includes("jeff")).
options
{
"type": "options",
"id": "some_id",
"label": "Enter ...:",
"options": [
{
"value": "john",
"label": "John"
},
{
"value": "bill",
"label": "Bill"
}
]
}
string
{
"type": "string",
"id": "some_id",
"label": "Enter ...:",
"regex": "optionally add a validating regex"
}
boolean
{
"type": "boolean",
"id": "some_id",
"label": "Enter ...:"
}

Move

Move operations are used to rename/move files after the template has been filled out (all Handlebars expressions have been expanded).

{
"from": "from_path",
"to": "to_path"
}

Exclude

Excludes are used to exclude some files from being templated. Exclude paths are extended, globstar-enabled globs.

easytemplate makes a best guess at automatically excluding non-text files from processing.

Ignore

Ignore paths are used to exclude files from the final initialized template. Ignore paths are extended, globstar-enabled globs.

Templating

easytemplate uses Handlebars as it's templating engine. Handlebars is useable in any file, as well as in directory paths/file names themselves.

Using Handlebars in File Paths

Since file paths cannot contain /, which is used by Handlebars, easytemplate will replace all occurrences of %% in a path with /. Other than this, Handlebars can be used as normal in path names - here is a complex example, along with an example output:

./my_template/{{ variable1 }}/{{ #replace "b" "a" }}{{ variable2 }}{{ %%replace }}/{{ variable3}}.txt
###
variable1 = james
variable2 = bob
variable3 = dave
./my_template/james/aoa/dave.txt

Handlebars Helpers

easytemplate includes a few default Handlebars helpers.

replace

Replaces all occurrences of find in the block with replace

{{ #replace 'find' 'replace' }}
I am finding this string, very cool!
{{ /replace }}
###
I am replacing this string, very cool!
ifCond

Implements the following binary operators between variables:

  • ==
  • ===
  • !=
  • !==
  • <
  • <=
  • >
  • >=
  • &&
  • ||
{{ #ifCond string1 '===' string2 }}
string one was equal to string two!
{{ /ifCond }}
###
string1 = test
string2 = test
string one was equal to string two!

.easytemplate

When using easytemplate myself, I found some IDEs that I had configured to format code automatically would create horrible formatting due to the random Handlebars syntax in what the IDE thought was a normal code file.

Due to this issue, I made easytemplate remove the .easytemplate suffix from any files that have it. Other than that, no other changes are made to these files outside of the usual processing.

The CLI

Options:

  • --debug: enable debug logging; mainly just helpful for me
  • --disable-interactive-mode: don't prompt for inputs, useful for CI environments. Must use along with --input.
  • --input: pass a value for a input, in the form id=value, e.g. --input my_string="a string here". Quotes are optional.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

easytemplate

easytemplate is a simple system for initializing new projects. It only requires a project skeleton and a short configuration file.

Example

Deno must be installed to run easytemplate.

git clone https://github.com/Jamalam360/easytemplate
cd easytemplate/example
deno run --allow-read --allow-write https://raw.githubusercontent.com/Jamalam360/easytemplate/main/easytemplate.ts

A more complex example can be found here

easytemplate can also be run with the --debug flag to debug your templates (or more likely easytemplate itself).

Documentation

Structure

An easytemplate template is simply composed of the relevant files along with an easytemplate.json file, which is removed at the end of templating.

easytemplate.json

The configuration file is composed of the following fields:

{
"inputs": "Input[]",
"move": "Move[]",
"exclude": "string[]"
}

Input

Inputs are the questions which are asked to the user before filling in the template. All inputs share 4 common fields:

  • id: string; this is the name of the variable that will be passed to Handlebars.
  • label: string; this is the prompt shown to the user.
  • default?: T; this is the default response.
  • only_if?: string; this is a JavaScript expression which determines whether the user should be prompted about this input. All previously evaluated inputs are available (e.g. some_previous_input.includes("jeff")).
options
{
"type": "options",
"id": "some_id",
"label": "Enter ...:",
"options": [
{
"value": "john",
"label": "John"
},
{
"value": "bill",
"label": "Bill"
}
]
}
string
{
"type": "string",
"id": "some_id",
"label": "Enter ...:",
"regex": "optionally add a validating regex"
}
boolean
{
"type": "boolean",
"id": "some_id",
"label": "Enter ...:"
}

Move

Move operations are used to rename/move files after the template has been filled out (all Handlebars expressions have been expanded).

{
"from": "from_path",
"to": "to_path"
}

Exclude

Excludes are used to exclude some files from being templated. Exclude paths are extended, globstar-enabled globs.

easytemplate makes a best guess at automatically excluding non-text files from processing.

Ignore

Ignore paths are used to exclude files from the final initialized template. Ignore paths are extended, globstar-enabled globs.

Templating

easytemplate uses Handlebars as it's templating engine. Handlebars is useable in any file, as well as in directory paths/file names themselves.

Using Handlebars in File Paths

Since file paths cannot contain /, which is used by Handlebars, easytemplate will replace all occurrences of %% in a path with /. Other than this, Handlebars can be used as normal in path names - here is a complex example, along with an example output:

./my_template/{{ variable1 }}/{{ #replace "b" "a" }}{{ variable2 }}{{ %%replace }}/{{ variable3}}.txt
###
variable1 = james
variable2 = bob
variable3 = dave
./my_template/james/aoa/dave.txt

Handlebars Helpers

easytemplate includes a few default Handlebars helpers.

replace

Replaces all occurrences of find in the block with replace

{{ #replace 'find' 'replace' }}
I am finding this string, very cool!
{{ /replace }}
###
I am replacing this string, very cool!
ifCond

Implements the following binary operators between variables:

  • ==
  • ===
  • !=
  • !==
  • <
  • <=
  • >
  • >=
  • &&
  • ||
{{ #ifCond string1 '===' string2 }}
string one was equal to string two!
{{ /ifCond }}
###
string1 = test
string2 = test
string one was equal to string two!

.easytemplate

When using easytemplate myself, I found some IDEs that I had configured to format code automatically would create horrible formatting due to the random Handlebars syntax in what the IDE thought was a normal code file.

Due to this issue, I made easytemplate remove the .easytemplate suffix from any files that have it. Other than that, no other changes are made to these files outside of the usual processing.

The CLI

Options:

  • --debug: enable debug logging; mainly just helpful for me
  • --disable-interactive-mode: don't prompt for inputs, useful for CI environments. Must use along with --input.
  • --input: pass a value for a input, in the form id=value, e.g. --input my_string="a string here". Quotes are optional.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages