Skip to content

Repository files navigation

ruby-handlebars

Build StatusMaintainabilityTest Coverage

Pure Ruby library for Handlebars template system. The main goal of this library is to simplify the use of Ruby and Handlebars on Windows machine. If you do not have any need of working on Windows, take a look at handlebars.rb that uses the real Handlebars library.

Installing

Simply run:

gem install ruby-handlebars

No need for libv8, ruby-racer or any JS related tool.

Using

A very simple case:

require'ruby-handlebars'hbs=Handlebars::Handlebars.newhbs.compile("Hello {{name}}").call({name: 'world'})# Gives: "Hello world", how original ...

You can also use partials:

hbs.register_partial('full_name',"{{person.first_name}} {{person.last_name}}")hbs.compile("Hello {{> full_name}}").call({person: {first_name: 'Pinkie',last_name: 'Pie'}})# Gives: "Hello Pinkie Pie"

Partials support parameters:

hbs.register_partial('full_name',"{{fname}} {{lname}}")hbs.compile("Hello {{> full_name fname='jon' lname='doe'}}")# Gives: "Hello jon doe"

You can also register inline helpers:

hbs.register_helper('strip'){|context,value| value.strip}hbs.compile("Hello {{strip name}}").call({name: ' world '})# Will give (again ....): "Hello world"

or block helpers:

hbs.register_helper('comment')do |context,commenter,block|
block.fn(context).split("\n").mapdo |line|
"#{commenter}#{line}"end.join("\n")endhbs.compile("{{#comment '//'}}My comment{{/comment}}").call# Will give: "// My comment"

Note that in any block helper you can use an else block:

hbs.register_helper('markdown')do |context,block,else_block|
html=md_to_html(block.fn(context))html.nil? : else_block.fn(context) : htmlendtemplate=["{{#markdown}}"," {{ description }}","{{else}}"," Description is not valid markdown, no preview available","{{/markdown}}"].join("\n")hbs.compile(template).call({description: my_description})# Output will depend on the validity of the 'my_description' variable

Default helpers:

Three default helpers are provided: each, if and unless.

The each helper let you walk through a list. You can either use the basic notation and referencing the current item as this:

 {{#each items}}
{{{ this }}}
{{else}}
No items
{{/each}}

or the "as |name|" notation:

 {{#each items as |item| }}
{{{ item }}}
{{else}}
No items
{{/each}}

The if helper can be used to write conditionnal templates:

 {{#if my_condition}}
It's ok
{{else}}
or maybe not
{{/if}}

The unless helper works the opposite way to if:

 {{#unless my_condition}}
It's not ok
{{else}}
or maybe it is
{{/unless}}

Currently, if you call an unknown helper, it will raise an exception. You can override that by registering your own version of the helperMissing helper. Note that only the name of the missing helper will be provided.

For example:

hbs.register_helper('helperMissing')do |context,name|
puts"No helper found with name #{name}"end

Limitations and roadmap

This gem does not reuse the real Handlebars code (the JS one) and not everything is handled yet (but it will be someday ;) ):

  • the parser is not fully tested yet, it may complain with spaces ...
  • parsing errors are, well, not helpful at all

Aknowledgements

This gem would simply not exist if the handlebars team was not here. Thanks a lot for this awesome templating system. Thanks a lot to @cowboyd for the handlebars.rb gem. We used it for a while and it's great (and as told at the beginning of the README, if you do not need any Windows support, use handlebars.rb instead ;) )

Thanks a lot to the contributors @mvz, @schuetzm and @stewartmckee for making it a way better Handlebars renderer :)

About

Pure Ruby library for Handlebars templates

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - rinsed-org/ruby-handlebars: Pure Ruby library for Handlebars templates · GitHub
Skip to content

Repository files navigation

ruby-handlebars

Build StatusMaintainabilityTest Coverage

Pure Ruby library for Handlebars template system. The main goal of this library is to simplify the use of Ruby and Handlebars on Windows machine. If you do not have any need of working on Windows, take a look at handlebars.rb that uses the real Handlebars library.

Installing

Simply run:

gem install ruby-handlebars

No need for libv8, ruby-racer or any JS related tool.

Using

A very simple case:

require'ruby-handlebars'hbs=Handlebars::Handlebars.newhbs.compile("Hello {{name}}").call({name: 'world'})# Gives: "Hello world", how original ...

You can also use partials:

hbs.register_partial('full_name',"{{person.first_name}} {{person.last_name}}")hbs.compile("Hello {{> full_name}}").call({person: {first_name: 'Pinkie',last_name: 'Pie'}})# Gives: "Hello Pinkie Pie"

Partials support parameters:

hbs.register_partial('full_name',"{{fname}} {{lname}}")hbs.compile("Hello {{> full_name fname='jon' lname='doe'}}")# Gives: "Hello jon doe"

You can also register inline helpers:

hbs.register_helper('strip'){|context,value| value.strip}hbs.compile("Hello {{strip name}}").call({name: ' world '})# Will give (again ....): "Hello world"

or block helpers:

hbs.register_helper('comment')do |context,commenter,block|
block.fn(context).split("\n").mapdo |line|
"#{commenter}#{line}"end.join("\n")endhbs.compile("{{#comment '//'}}My comment{{/comment}}").call# Will give: "// My comment"

Note that in any block helper you can use an else block:

hbs.register_helper('markdown')do |context,block,else_block|
html=md_to_html(block.fn(context))html.nil? : else_block.fn(context) : htmlendtemplate=["{{#markdown}}"," {{ description }}","{{else}}"," Description is not valid markdown, no preview available","{{/markdown}}"].join("\n")hbs.compile(template).call({description: my_description})# Output will depend on the validity of the 'my_description' variable

Default helpers:

Three default helpers are provided: each, if and unless.

The each helper let you walk through a list. You can either use the basic notation and referencing the current item as this:

 {{#each items}}
{{{ this }}}
{{else}}
No items
{{/each}}

or the "as |name|" notation:

 {{#each items as |item| }}
{{{ item }}}
{{else}}
No items
{{/each}}

The if helper can be used to write conditionnal templates:

 {{#if my_condition}}
It's ok
{{else}}
or maybe not
{{/if}}

The unless helper works the opposite way to if:

 {{#unless my_condition}}
It's not ok
{{else}}
or maybe it is
{{/unless}}

Currently, if you call an unknown helper, it will raise an exception. You can override that by registering your own version of the helperMissing helper. Note that only the name of the missing helper will be provided.

For example:

hbs.register_helper('helperMissing')do |context,name|
puts"No helper found with name #{name}"end

Limitations and roadmap

This gem does not reuse the real Handlebars code (the JS one) and not everything is handled yet (but it will be someday ;) ):

  • the parser is not fully tested yet, it may complain with spaces ...
  • parsing errors are, well, not helpful at all

Aknowledgements

This gem would simply not exist if the handlebars team was not here. Thanks a lot for this awesome templating system. Thanks a lot to @cowboyd for the handlebars.rb gem. We used it for a while and it's great (and as told at the beginning of the README, if you do not need any Windows support, use handlebars.rb instead ;) )

Thanks a lot to the contributors @mvz, @schuetzm and @stewartmckee for making it a way better Handlebars renderer :)

About

Pure Ruby library for Handlebars templates

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

ruby-handlebars

Build StatusMaintainabilityTest Coverage

Pure Ruby library for Handlebars template system. The main goal of this library is to simplify the use of Ruby and Handlebars on Windows machine. If you do not have any need of working on Windows, take a look at handlebars.rb that uses the real Handlebars library.

Installing

Simply run:

gem install ruby-handlebars

No need for libv8, ruby-racer or any JS related tool.

Using

A very simple case:

require'ruby-handlebars'hbs=Handlebars::Handlebars.newhbs.compile("Hello {{name}}").call({name: 'world'})# Gives: "Hello world", how original ...

You can also use partials:

hbs.register_partial('full_name',"{{person.first_name}} {{person.last_name}}")hbs.compile("Hello {{> full_name}}").call({person: {first_name: 'Pinkie',last_name: 'Pie'}})# Gives: "Hello Pinkie Pie"

Partials support parameters:

hbs.register_partial('full_name',"{{fname}} {{lname}}")hbs.compile("Hello {{> full_name fname='jon' lname='doe'}}")# Gives: "Hello jon doe"

You can also register inline helpers:

hbs.register_helper('strip'){|context,value| value.strip}hbs.compile("Hello {{strip name}}").call({name: ' world '})# Will give (again ....): "Hello world"

or block helpers:

hbs.register_helper('comment')do |context,commenter,block|
block.fn(context).split("\n").mapdo |line|
"#{commenter}#{line}"end.join("\n")endhbs.compile("{{#comment '//'}}My comment{{/comment}}").call# Will give: "// My comment"

Note that in any block helper you can use an else block:

hbs.register_helper('markdown')do |context,block,else_block|
html=md_to_html(block.fn(context))html.nil? : else_block.fn(context) : htmlendtemplate=["{{#markdown}}"," {{ description }}","{{else}}"," Description is not valid markdown, no preview available","{{/markdown}}"].join("\n")hbs.compile(template).call({description: my_description})# Output will depend on the validity of the 'my_description' variable

Default helpers:

Three default helpers are provided: each, if and unless.

The each helper let you walk through a list. You can either use the basic notation and referencing the current item as this:

 {{#each items}}
{{{ this }}}
{{else}}
No items
{{/each}}

or the "as |name|" notation:

 {{#each items as |item| }}
{{{ item }}}
{{else}}
No items
{{/each}}

The if helper can be used to write conditionnal templates:

 {{#if my_condition}}
It's ok
{{else}}
or maybe not
{{/if}}

The unless helper works the opposite way to if:

 {{#unless my_condition}}
It's not ok
{{else}}
or maybe it is
{{/unless}}

Currently, if you call an unknown helper, it will raise an exception. You can override that by registering your own version of the helperMissing helper. Note that only the name of the missing helper will be provided.

For example:

hbs.register_helper('helperMissing')do |context,name|
puts"No helper found with name #{name}"end

Limitations and roadmap

This gem does not reuse the real Handlebars code (the JS one) and not everything is handled yet (but it will be someday ;) ):

  • the parser is not fully tested yet, it may complain with spaces ...
  • parsing errors are, well, not helpful at all

Aknowledgements

This gem would simply not exist if the handlebars team was not here. Thanks a lot for this awesome templating system. Thanks a lot to @cowboyd for the handlebars.rb gem. We used it for a while and it's great (and as told at the beginning of the README, if you do not need any Windows support, use handlebars.rb instead ;) )

Thanks a lot to the contributors @mvz, @schuetzm and @stewartmckee for making it a way better Handlebars renderer :)

About

Pure Ruby library for Handlebars templates

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

ruby-handlebars

Build StatusMaintainabilityTest Coverage

Pure Ruby library for Handlebars template system. The main goal of this library is to simplify the use of Ruby and Handlebars on Windows machine. If you do not have any need of working on Windows, take a look at handlebars.rb that uses the real Handlebars library.

Installing

Simply run:

gem install ruby-handlebars

No need for libv8, ruby-racer or any JS related tool.

Using

A very simple case:

require'ruby-handlebars'hbs=Handlebars::Handlebars.newhbs.compile("Hello {{name}}").call({name: 'world'})# Gives: "Hello world", how original ...

You can also use partials:

hbs.register_partial('full_name',"{{person.first_name}} {{person.last_name}}")hbs.compile("Hello {{> full_name}}").call({person: {first_name: 'Pinkie',last_name: 'Pie'}})# Gives: "Hello Pinkie Pie"

Partials support parameters:

hbs.register_partial('full_name',"{{fname}} {{lname}}")hbs.compile("Hello {{> full_name fname='jon' lname='doe'}}")# Gives: "Hello jon doe"

You can also register inline helpers:

hbs.register_helper('strip'){|context,value| value.strip}hbs.compile("Hello {{strip name}}").call({name: ' world '})# Will give (again ....): "Hello world"

or block helpers:

hbs.register_helper('comment')do |context,commenter,block|
block.fn(context).split("\n").mapdo |line|
"#{commenter}#{line}"end.join("\n")endhbs.compile("{{#comment '//'}}My comment{{/comment}}").call# Will give: "// My comment"

Note that in any block helper you can use an else block:

hbs.register_helper('markdown')do |context,block,else_block|
html=md_to_html(block.fn(context))html.nil? : else_block.fn(context) : htmlendtemplate=["{{#markdown}}"," {{ description }}","{{else}}"," Description is not valid markdown, no preview available","{{/markdown}}"].join("\n")hbs.compile(template).call({description: my_description})# Output will depend on the validity of the 'my_description' variable

Default helpers:

Three default helpers are provided: each, if and unless.

The each helper let you walk through a list. You can either use the basic notation and referencing the current item as this:

 {{#each items}}
{{{ this }}}
{{else}}
No items
{{/each}}

or the "as |name|" notation:

 {{#each items as |item| }}
{{{ item }}}
{{else}}
No items
{{/each}}

The if helper can be used to write conditionnal templates:

 {{#if my_condition}}
It's ok
{{else}}
or maybe not
{{/if}}

The unless helper works the opposite way to if:

 {{#unless my_condition}}
It's not ok
{{else}}
or maybe it is
{{/unless}}

Currently, if you call an unknown helper, it will raise an exception. You can override that by registering your own version of the helperMissing helper. Note that only the name of the missing helper will be provided.

For example:

hbs.register_helper('helperMissing')do |context,name|
puts"No helper found with name #{name}"end

Limitations and roadmap

This gem does not reuse the real Handlebars code (the JS one) and not everything is handled yet (but it will be someday ;) ):

  • the parser is not fully tested yet, it may complain with spaces ...
  • parsing errors are, well, not helpful at all

Aknowledgements

This gem would simply not exist if the handlebars team was not here. Thanks a lot for this awesome templating system. Thanks a lot to @cowboyd for the handlebars.rb gem. We used it for a while and it's great (and as told at the beginning of the README, if you do not need any Windows support, use handlebars.rb instead ;) )

Thanks a lot to the contributors @mvz, @schuetzm and @stewartmckee for making it a way better Handlebars renderer :)

About

Pure Ruby library for Handlebars templates

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

ruby-handlebars

Build StatusMaintainabilityTest Coverage

Pure Ruby library for Handlebars template system. The main goal of this library is to simplify the use of Ruby and Handlebars on Windows machine. If you do not have any need of working on Windows, take a look at handlebars.rb that uses the real Handlebars library.

Installing

Simply run:

gem install ruby-handlebars

No need for libv8, ruby-racer or any JS related tool.

Using

A very simple case:

require'ruby-handlebars'hbs=Handlebars::Handlebars.newhbs.compile("Hello {{name}}").call({name: 'world'})# Gives: "Hello world", how original ...

You can also use partials:

hbs.register_partial('full_name',"{{person.first_name}} {{person.last_name}}")hbs.compile("Hello {{> full_name}}").call({person: {first_name: 'Pinkie',last_name: 'Pie'}})# Gives: "Hello Pinkie Pie"

Partials support parameters:

hbs.register_partial('full_name',"{{fname}} {{lname}}")hbs.compile("Hello {{> full_name fname='jon' lname='doe'}}")# Gives: "Hello jon doe"

You can also register inline helpers:

hbs.register_helper('strip'){|context,value| value.strip}hbs.compile("Hello {{strip name}}").call({name: ' world '})# Will give (again ....): "Hello world"

or block helpers:

hbs.register_helper('comment')do |context,commenter,block|
block.fn(context).split("\n").mapdo |line|
"#{commenter}#{line}"end.join("\n")endhbs.compile("{{#comment '//'}}My comment{{/comment}}").call# Will give: "// My comment"

Note that in any block helper you can use an else block:

hbs.register_helper('markdown')do |context,block,else_block|
html=md_to_html(block.fn(context))html.nil? : else_block.fn(context) : htmlendtemplate=["{{#markdown}}"," {{ description }}","{{else}}"," Description is not valid markdown, no preview available","{{/markdown}}"].join("\n")hbs.compile(template).call({description: my_description})# Output will depend on the validity of the 'my_description' variable

Default helpers:

Three default helpers are provided: each, if and unless.

The each helper let you walk through a list. You can either use the basic notation and referencing the current item as this:

 {{#each items}}
{{{ this }}}
{{else}}
No items
{{/each}}

or the "as |name|" notation:

 {{#each items as |item| }}
{{{ item }}}
{{else}}
No items
{{/each}}

The if helper can be used to write conditionnal templates:

 {{#if my_condition}}
It's ok
{{else}}
or maybe not
{{/if}}

The unless helper works the opposite way to if:

 {{#unless my_condition}}
It's not ok
{{else}}
or maybe it is
{{/unless}}

Currently, if you call an unknown helper, it will raise an exception. You can override that by registering your own version of the helperMissing helper. Note that only the name of the missing helper will be provided.

For example:

hbs.register_helper('helperMissing')do |context,name|
puts"No helper found with name #{name}"end

Limitations and roadmap

This gem does not reuse the real Handlebars code (the JS one) and not everything is handled yet (but it will be someday ;) ):

  • the parser is not fully tested yet, it may complain with spaces ...
  • parsing errors are, well, not helpful at all

Aknowledgements

This gem would simply not exist if the handlebars team was not here. Thanks a lot for this awesome templating system. Thanks a lot to @cowboyd for the handlebars.rb gem. We used it for a while and it's great (and as told at the beginning of the README, if you do not need any Windows support, use handlebars.rb instead ;) )

Thanks a lot to the contributors @mvz, @schuetzm and @stewartmckee for making it a way better Handlebars renderer :)

About

Pure Ruby library for Handlebars templates

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

ruby-handlebars

Build StatusMaintainabilityTest Coverage

Pure Ruby library for Handlebars template system. The main goal of this library is to simplify the use of Ruby and Handlebars on Windows machine. If you do not have any need of working on Windows, take a look at handlebars.rb that uses the real Handlebars library.

Installing

Simply run:

gem install ruby-handlebars

No need for libv8, ruby-racer or any JS related tool.

Using

A very simple case:

require'ruby-handlebars'hbs=Handlebars::Handlebars.newhbs.compile("Hello {{name}}").call({name: 'world'})# Gives: "Hello world", how original ...

You can also use partials:

hbs.register_partial('full_name',"{{person.first_name}} {{person.last_name}}")hbs.compile("Hello {{> full_name}}").call({person: {first_name: 'Pinkie',last_name: 'Pie'}})# Gives: "Hello Pinkie Pie"

Partials support parameters:

hbs.register_partial('full_name',"{{fname}} {{lname}}")hbs.compile("Hello {{> full_name fname='jon' lname='doe'}}")# Gives: "Hello jon doe"

You can also register inline helpers:

hbs.register_helper('strip'){|context,value| value.strip}hbs.compile("Hello {{strip name}}").call({name: ' world '})# Will give (again ....): "Hello world"

or block helpers:

hbs.register_helper('comment')do |context,commenter,block|
block.fn(context).split("\n").mapdo |line|
"#{commenter}#{line}"end.join("\n")endhbs.compile("{{#comment '//'}}My comment{{/comment}}").call# Will give: "// My comment"

Note that in any block helper you can use an else block:

hbs.register_helper('markdown')do |context,block,else_block|
html=md_to_html(block.fn(context))html.nil? : else_block.fn(context) : htmlendtemplate=["{{#markdown}}"," {{ description }}","{{else}}"," Description is not valid markdown, no preview available","{{/markdown}}"].join("\n")hbs.compile(template).call({description: my_description})# Output will depend on the validity of the 'my_description' variable

Default helpers:

Three default helpers are provided: each, if and unless.

The each helper let you walk through a list. You can either use the basic notation and referencing the current item as this:

 {{#each items}}
{{{ this }}}
{{else}}
No items
{{/each}}

or the "as |name|" notation:

 {{#each items as |item| }}
{{{ item }}}
{{else}}
No items
{{/each}}

The if helper can be used to write conditionnal templates:

 {{#if my_condition}}
It's ok
{{else}}
or maybe not
{{/if}}

The unless helper works the opposite way to if:

 {{#unless my_condition}}
It's not ok
{{else}}
or maybe it is
{{/unless}}

Currently, if you call an unknown helper, it will raise an exception. You can override that by registering your own version of the helperMissing helper. Note that only the name of the missing helper will be provided.

For example:

hbs.register_helper('helperMissing')do |context,name|
puts"No helper found with name #{name}"end

Limitations and roadmap

This gem does not reuse the real Handlebars code (the JS one) and not everything is handled yet (but it will be someday ;) ):

  • the parser is not fully tested yet, it may complain with spaces ...
  • parsing errors are, well, not helpful at all

Aknowledgements

This gem would simply not exist if the handlebars team was not here. Thanks a lot for this awesome templating system. Thanks a lot to @cowboyd for the handlebars.rb gem. We used it for a while and it's great (and as told at the beginning of the README, if you do not need any Windows support, use handlebars.rb instead ;) )

Thanks a lot to the contributors @mvz, @schuetzm and @stewartmckee for making it a way better Handlebars renderer :)

About

Pure Ruby library for Handlebars templates

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

ruby-handlebars

Build StatusMaintainabilityTest Coverage

Pure Ruby library for Handlebars template system. The main goal of this library is to simplify the use of Ruby and Handlebars on Windows machine. If you do not have any need of working on Windows, take a look at handlebars.rb that uses the real Handlebars library.

Installing

Simply run:

gem install ruby-handlebars

No need for libv8, ruby-racer or any JS related tool.

Using

A very simple case:

require'ruby-handlebars'hbs=Handlebars::Handlebars.newhbs.compile("Hello {{name}}").call({name: 'world'})# Gives: "Hello world", how original ...

You can also use partials:

hbs.register_partial('full_name',"{{person.first_name}} {{person.last_name}}")hbs.compile("Hello {{> full_name}}").call({person: {first_name: 'Pinkie',last_name: 'Pie'}})# Gives: "Hello Pinkie Pie"

Partials support parameters:

hbs.register_partial('full_name',"{{fname}} {{lname}}")hbs.compile("Hello {{> full_name fname='jon' lname='doe'}}")# Gives: "Hello jon doe"

You can also register inline helpers:

hbs.register_helper('strip'){|context,value| value.strip}hbs.compile("Hello {{strip name}}").call({name: ' world '})# Will give (again ....): "Hello world"

or block helpers:

hbs.register_helper('comment')do |context,commenter,block|
block.fn(context).split("\n").mapdo |line|
"#{commenter}#{line}"end.join("\n")endhbs.compile("{{#comment '//'}}My comment{{/comment}}").call# Will give: "// My comment"

Note that in any block helper you can use an else block:

hbs.register_helper('markdown')do |context,block,else_block|
html=md_to_html(block.fn(context))html.nil? : else_block.fn(context) : htmlendtemplate=["{{#markdown}}"," {{ description }}","{{else}}"," Description is not valid markdown, no preview available","{{/markdown}}"].join("\n")hbs.compile(template).call({description: my_description})# Output will depend on the validity of the 'my_description' variable

Default helpers:

Three default helpers are provided: each, if and unless.

The each helper let you walk through a list. You can either use the basic notation and referencing the current item as this:

 {{#each items}}
{{{ this }}}
{{else}}
No items
{{/each}}

or the "as |name|" notation:

 {{#each items as |item| }}
{{{ item }}}
{{else}}
No items
{{/each}}

The if helper can be used to write conditionnal templates:

 {{#if my_condition}}
It's ok
{{else}}
or maybe not
{{/if}}

The unless helper works the opposite way to if:

 {{#unless my_condition}}
It's not ok
{{else}}
or maybe it is
{{/unless}}

Currently, if you call an unknown helper, it will raise an exception. You can override that by registering your own version of the helperMissing helper. Note that only the name of the missing helper will be provided.

For example:

hbs.register_helper('helperMissing')do |context,name|
puts"No helper found with name #{name}"end

Limitations and roadmap

This gem does not reuse the real Handlebars code (the JS one) and not everything is handled yet (but it will be someday ;) ):

  • the parser is not fully tested yet, it may complain with spaces ...
  • parsing errors are, well, not helpful at all

Aknowledgements

This gem would simply not exist if the handlebars team was not here. Thanks a lot for this awesome templating system. Thanks a lot to @cowboyd for the handlebars.rb gem. We used it for a while and it's great (and as told at the beginning of the README, if you do not need any Windows support, use handlebars.rb instead ;) )

Thanks a lot to the contributors @mvz, @schuetzm and @stewartmckee for making it a way better Handlebars renderer :)

About

Pure Ruby library for Handlebars templates

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

ruby-handlebars

Build StatusMaintainabilityTest Coverage

Pure Ruby library for Handlebars template system. The main goal of this library is to simplify the use of Ruby and Handlebars on Windows machine. If you do not have any need of working on Windows, take a look at handlebars.rb that uses the real Handlebars library.

Installing

Simply run:

gem install ruby-handlebars

No need for libv8, ruby-racer or any JS related tool.

Using

A very simple case:

require'ruby-handlebars'hbs=Handlebars::Handlebars.newhbs.compile("Hello {{name}}").call({name: 'world'})# Gives: "Hello world", how original ...

You can also use partials:

hbs.register_partial('full_name',"{{person.first_name}} {{person.last_name}}")hbs.compile("Hello {{> full_name}}").call({person: {first_name: 'Pinkie',last_name: 'Pie'}})# Gives: "Hello Pinkie Pie"

Partials support parameters:

hbs.register_partial('full_name',"{{fname}} {{lname}}")hbs.compile("Hello {{> full_name fname='jon' lname='doe'}}")# Gives: "Hello jon doe"

You can also register inline helpers:

hbs.register_helper('strip'){|context,value| value.strip}hbs.compile("Hello {{strip name}}").call({name: ' world '})# Will give (again ....): "Hello world"

or block helpers:

hbs.register_helper('comment')do |context,commenter,block|
block.fn(context).split("\n").mapdo |line|
"#{commenter}#{line}"end.join("\n")endhbs.compile("{{#comment '//'}}My comment{{/comment}}").call# Will give: "// My comment"

Note that in any block helper you can use an else block:

hbs.register_helper('markdown')do |context,block,else_block|
html=md_to_html(block.fn(context))html.nil? : else_block.fn(context) : htmlendtemplate=["{{#markdown}}"," {{ description }}","{{else}}"," Description is not valid markdown, no preview available","{{/markdown}}"].join("\n")hbs.compile(template).call({description: my_description})# Output will depend on the validity of the 'my_description' variable

Default helpers:

Three default helpers are provided: each, if and unless.

The each helper let you walk through a list. You can either use the basic notation and referencing the current item as this:

 {{#each items}}
{{{ this }}}
{{else}}
No items
{{/each}}

or the "as |name|" notation:

 {{#each items as |item| }}
{{{ item }}}
{{else}}
No items
{{/each}}

The if helper can be used to write conditionnal templates:

 {{#if my_condition}}
It's ok
{{else}}
or maybe not
{{/if}}

The unless helper works the opposite way to if:

 {{#unless my_condition}}
It's not ok
{{else}}
or maybe it is
{{/unless}}

Currently, if you call an unknown helper, it will raise an exception. You can override that by registering your own version of the helperMissing helper. Note that only the name of the missing helper will be provided.

For example:

hbs.register_helper('helperMissing')do |context,name|
puts"No helper found with name #{name}"end

Limitations and roadmap

This gem does not reuse the real Handlebars code (the JS one) and not everything is handled yet (but it will be someday ;) ):

  • the parser is not fully tested yet, it may complain with spaces ...
  • parsing errors are, well, not helpful at all

Aknowledgements

This gem would simply not exist if the handlebars team was not here. Thanks a lot for this awesome templating system. Thanks a lot to @cowboyd for the handlebars.rb gem. We used it for a while and it's great (and as told at the beginning of the README, if you do not need any Windows support, use handlebars.rb instead ;) )

Thanks a lot to the contributors @mvz, @schuetzm and @stewartmckee for making it a way better Handlebars renderer :)

About

Pure Ruby library for Handlebars templates

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages