This repository was archived by the owner on Apr 12, 2019. It is now read-only.

Latest commit

History

148 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Icon

Wraps HandlebarsJS to make it usable from .net.

Nuget

Has a dependency on the MsieJavaScriptEngine package.

Has a dependency on the Jint package.

ILMerges the Jint assembly to avoid an extra dependency

Has a dependency on the ClearScript.V8 package.

Has a dependency on the MsieJavaScriptEngine and Chevron.IE packages.

ILMerges the MsieJavaScriptEngine and Chevron.IE assembly to avoid an any extra dependencies.

Has a dependency on the Jint and Chevron.Jint packages.

ILMerges the Jint and Chevron.Jint assembly to avoid an any extra dependencies.

Has a dependency on the ClearScript.V8 and Chevron.V8 packages.

What Nuget to choose

IE or V8 or Jint

Performance

In my basic testing V8 was (in most cases) faster than IE. Note that this testing was done on the IE 10 engine and the IE 11 engine is rumored to have significant performance improvements. I have done no testing on Jint performance.

Consistency

When using the V8 or Jint engines you can control the specific version that is used. When using the IE engine the specific version of the engine can vary with windows updates.

Packaging and deployment

V8 is a native dll, to the nuget package needs to tweak your project file to manually copy it to the output directory. While this generally works it is is more moving pieces and not seamless when upgrading packages or when double hop references are used. IE and Jint are single .net dlls and are managed as such

Size

  • IE: 78KB
  • Jint: 233KB
  • V8: 5MB

Merged or Non-Merged IE/Jint

If you only want to render simple files then use the merged version. If you want full control over the JS engine (eg to load custom scripts) then use the non-merged version.

Usage

Rendering a template

Input

var source = @"<p>Hello, my name is {{name}}. I am from {{hometown}}. I have ' +
'{{kids.length}} kids:</p>' +
'<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var context = new
{
name = "Alan",
hometown = "Somewhere, TX",
kids = new[]
{
new
{
name = "Sally",
age = "4"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<p>Hello, my name is Alan. I am from Somewhere, TX. I have 1 kids:</p>
<ul>
<li>Sally is 4</li>
</ul>

Register Helpers

Input

var source = "<ul>{{#posts}}<li>{{link_to}}</li>{{/posts}}</ul>";
var context = new
{
posts = new[]
{
new
{
url = "/hello-world",
body = "Hello World!"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterHelper("link_to",
@"function() {
return new Handlebars.SafeString(""<a href='"" + this.url + ""'>"" + this.body + ""</a>"");
}");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li>
<a href='/hello-world'>Hello World!</a>
</li>
</ul>

Register Partials

Input

var source = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
var context = new
{
people = new[]
{
new
{
name = "Alan",
id = 1
},
new
{
name = "Yehuda",
id = 2
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterPartial("link",@"<a href=""/people/{{id}}"">{{name}}</a>");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

HandlebarsJS

The binary ships with a resource merged version of HandlebarsJS. Also see the License.

Current merged version

The current version included in the library is v4.0.5. If you feel a newer version should be included at any point in time please raise an issue.

Running a custom version

If you want to run a custom version of HandlebaseJS simply place the custom handlebars.js in the current running directory and that file will be used instead of the merged version.

Icon

Mustache designed by Matt Brooks from The Noun Project

About

Wraps Handlebars to make it usable from .net.

Resources

Stars

20 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 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
This repository was archived by the owner on Apr 12, 2019. It is now read-only.

Latest commit

History

148 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Icon

Wraps HandlebarsJS to make it usable from .net.

Nuget

Has a dependency on the MsieJavaScriptEngine package.

Has a dependency on the Jint package.

ILMerges the Jint assembly to avoid an extra dependency

Has a dependency on the ClearScript.V8 package.

Has a dependency on the MsieJavaScriptEngine and Chevron.IE packages.

ILMerges the MsieJavaScriptEngine and Chevron.IE assembly to avoid an any extra dependencies.

Has a dependency on the Jint and Chevron.Jint packages.

ILMerges the Jint and Chevron.Jint assembly to avoid an any extra dependencies.

Has a dependency on the ClearScript.V8 and Chevron.V8 packages.

What Nuget to choose

IE or V8 or Jint

Performance

In my basic testing V8 was (in most cases) faster than IE. Note that this testing was done on the IE 10 engine and the IE 11 engine is rumored to have significant performance improvements. I have done no testing on Jint performance.

Consistency

When using the V8 or Jint engines you can control the specific version that is used. When using the IE engine the specific version of the engine can vary with windows updates.

Packaging and deployment

V8 is a native dll, to the nuget package needs to tweak your project file to manually copy it to the output directory. While this generally works it is is more moving pieces and not seamless when upgrading packages or when double hop references are used. IE and Jint are single .net dlls and are managed as such

Size

  • IE: 78KB
  • Jint: 233KB
  • V8: 5MB

Merged or Non-Merged IE/Jint

If you only want to render simple files then use the merged version. If you want full control over the JS engine (eg to load custom scripts) then use the non-merged version.

Usage

Rendering a template

Input

var source = @"<p>Hello, my name is {{name}}. I am from {{hometown}}. I have ' +
'{{kids.length}} kids:</p>' +
'<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var context = new
{
name = "Alan",
hometown = "Somewhere, TX",
kids = new[]
{
new
{
name = "Sally",
age = "4"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<p>Hello, my name is Alan. I am from Somewhere, TX. I have 1 kids:</p>
<ul>
<li>Sally is 4</li>
</ul>

Register Helpers

Input

var source = "<ul>{{#posts}}<li>{{link_to}}</li>{{/posts}}</ul>";
var context = new
{
posts = new[]
{
new
{
url = "/hello-world",
body = "Hello World!"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterHelper("link_to",
@"function() {
return new Handlebars.SafeString(""<a href='"" + this.url + ""'>"" + this.body + ""</a>"");
}");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li>
<a href='/hello-world'>Hello World!</a>
</li>
</ul>

Register Partials

Input

var source = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
var context = new
{
people = new[]
{
new
{
name = "Alan",
id = 1
},
new
{
name = "Yehuda",
id = 2
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterPartial("link",@"<a href=""/people/{{id}}"">{{name}}</a>");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

HandlebarsJS

The binary ships with a resource merged version of HandlebarsJS. Also see the License.

Current merged version

The current version included in the library is v4.0.5. If you feel a newer version should be included at any point in time please raise an issue.

Running a custom version

If you want to run a custom version of HandlebaseJS simply place the custom handlebars.js in the current running directory and that file will be used instead of the merged version.

Icon

Mustache designed by Matt Brooks from The Noun Project

About

Wraps Handlebars to make it usable from .net.

Resources

Stars

20 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
This repository was archived by the owner on Apr 12, 2019. It is now read-only.

Latest commit

History

148 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Icon

Wraps HandlebarsJS to make it usable from .net.

Nuget

Has a dependency on the MsieJavaScriptEngine package.

Has a dependency on the Jint package.

ILMerges the Jint assembly to avoid an extra dependency

Has a dependency on the ClearScript.V8 package.

Has a dependency on the MsieJavaScriptEngine and Chevron.IE packages.

ILMerges the MsieJavaScriptEngine and Chevron.IE assembly to avoid an any extra dependencies.

Has a dependency on the Jint and Chevron.Jint packages.

ILMerges the Jint and Chevron.Jint assembly to avoid an any extra dependencies.

Has a dependency on the ClearScript.V8 and Chevron.V8 packages.

What Nuget to choose

IE or V8 or Jint

Performance

In my basic testing V8 was (in most cases) faster than IE. Note that this testing was done on the IE 10 engine and the IE 11 engine is rumored to have significant performance improvements. I have done no testing on Jint performance.

Consistency

When using the V8 or Jint engines you can control the specific version that is used. When using the IE engine the specific version of the engine can vary with windows updates.

Packaging and deployment

V8 is a native dll, to the nuget package needs to tweak your project file to manually copy it to the output directory. While this generally works it is is more moving pieces and not seamless when upgrading packages or when double hop references are used. IE and Jint are single .net dlls and are managed as such

Size

  • IE: 78KB
  • Jint: 233KB
  • V8: 5MB

Merged or Non-Merged IE/Jint

If you only want to render simple files then use the merged version. If you want full control over the JS engine (eg to load custom scripts) then use the non-merged version.

Usage

Rendering a template

Input

var source = @"<p>Hello, my name is {{name}}. I am from {{hometown}}. I have ' +
'{{kids.length}} kids:</p>' +
'<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var context = new
{
name = "Alan",
hometown = "Somewhere, TX",
kids = new[]
{
new
{
name = "Sally",
age = "4"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<p>Hello, my name is Alan. I am from Somewhere, TX. I have 1 kids:</p>
<ul>
<li>Sally is 4</li>
</ul>

Register Helpers

Input

var source = "<ul>{{#posts}}<li>{{link_to}}</li>{{/posts}}</ul>";
var context = new
{
posts = new[]
{
new
{
url = "/hello-world",
body = "Hello World!"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterHelper("link_to",
@"function() {
return new Handlebars.SafeString(""<a href='"" + this.url + ""'>"" + this.body + ""</a>"");
}");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li>
<a href='/hello-world'>Hello World!</a>
</li>
</ul>

Register Partials

Input

var source = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
var context = new
{
people = new[]
{
new
{
name = "Alan",
id = 1
},
new
{
name = "Yehuda",
id = 2
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterPartial("link",@"<a href=""/people/{{id}}"">{{name}}</a>");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

HandlebarsJS

The binary ships with a resource merged version of HandlebarsJS. Also see the License.

Current merged version

The current version included in the library is v4.0.5. If you feel a newer version should be included at any point in time please raise an issue.

Running a custom version

If you want to run a custom version of HandlebaseJS simply place the custom handlebars.js in the current running directory and that file will be used instead of the merged version.

Icon

Mustache designed by Matt Brooks from The Noun Project

About

Wraps Handlebars to make it usable from .net.

Resources

Stars

20 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 > 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
This repository was archived by the owner on Apr 12, 2019. It is now read-only.

Latest commit

History

148 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Icon

Wraps HandlebarsJS to make it usable from .net.

Nuget

Has a dependency on the MsieJavaScriptEngine package.

Has a dependency on the Jint package.

ILMerges the Jint assembly to avoid an extra dependency

Has a dependency on the ClearScript.V8 package.

Has a dependency on the MsieJavaScriptEngine and Chevron.IE packages.

ILMerges the MsieJavaScriptEngine and Chevron.IE assembly to avoid an any extra dependencies.

Has a dependency on the Jint and Chevron.Jint packages.

ILMerges the Jint and Chevron.Jint assembly to avoid an any extra dependencies.

Has a dependency on the ClearScript.V8 and Chevron.V8 packages.

What Nuget to choose

IE or V8 or Jint

Performance

In my basic testing V8 was (in most cases) faster than IE. Note that this testing was done on the IE 10 engine and the IE 11 engine is rumored to have significant performance improvements. I have done no testing on Jint performance.

Consistency

When using the V8 or Jint engines you can control the specific version that is used. When using the IE engine the specific version of the engine can vary with windows updates.

Packaging and deployment

V8 is a native dll, to the nuget package needs to tweak your project file to manually copy it to the output directory. While this generally works it is is more moving pieces and not seamless when upgrading packages or when double hop references are used. IE and Jint are single .net dlls and are managed as such

Size

  • IE: 78KB
  • Jint: 233KB
  • V8: 5MB

Merged or Non-Merged IE/Jint

If you only want to render simple files then use the merged version. If you want full control over the JS engine (eg to load custom scripts) then use the non-merged version.

Usage

Rendering a template

Input

var source = @"<p>Hello, my name is {{name}}. I am from {{hometown}}. I have ' +
'{{kids.length}} kids:</p>' +
'<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var context = new
{
name = "Alan",
hometown = "Somewhere, TX",
kids = new[]
{
new
{
name = "Sally",
age = "4"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<p>Hello, my name is Alan. I am from Somewhere, TX. I have 1 kids:</p>
<ul>
<li>Sally is 4</li>
</ul>

Register Helpers

Input

var source = "<ul>{{#posts}}<li>{{link_to}}</li>{{/posts}}</ul>";
var context = new
{
posts = new[]
{
new
{
url = "/hello-world",
body = "Hello World!"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterHelper("link_to",
@"function() {
return new Handlebars.SafeString(""<a href='"" + this.url + ""'>"" + this.body + ""</a>"");
}");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li>
<a href='/hello-world'>Hello World!</a>
</li>
</ul>

Register Partials

Input

var source = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
var context = new
{
people = new[]
{
new
{
name = "Alan",
id = 1
},
new
{
name = "Yehuda",
id = 2
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterPartial("link",@"<a href=""/people/{{id}}"">{{name}}</a>");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

HandlebarsJS

The binary ships with a resource merged version of HandlebarsJS. Also see the License.

Current merged version

The current version included in the library is v4.0.5. If you feel a newer version should be included at any point in time please raise an issue.

Running a custom version

If you want to run a custom version of HandlebaseJS simply place the custom handlebars.js in the current running directory and that file will be used instead of the merged version.

Icon

Mustache designed by Matt Brooks from The Noun Project

About

Wraps Handlebars to make it usable from .net.

Resources

Stars

20 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
This repository was archived by the owner on Apr 12, 2019. It is now read-only.

Latest commit

History

148 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Icon

Wraps HandlebarsJS to make it usable from .net.

Nuget

Has a dependency on the MsieJavaScriptEngine package.

Has a dependency on the Jint package.

ILMerges the Jint assembly to avoid an extra dependency

Has a dependency on the ClearScript.V8 package.

Has a dependency on the MsieJavaScriptEngine and Chevron.IE packages.

ILMerges the MsieJavaScriptEngine and Chevron.IE assembly to avoid an any extra dependencies.

Has a dependency on the Jint and Chevron.Jint packages.

ILMerges the Jint and Chevron.Jint assembly to avoid an any extra dependencies.

Has a dependency on the ClearScript.V8 and Chevron.V8 packages.

What Nuget to choose

IE or V8 or Jint

Performance

In my basic testing V8 was (in most cases) faster than IE. Note that this testing was done on the IE 10 engine and the IE 11 engine is rumored to have significant performance improvements. I have done no testing on Jint performance.

Consistency

When using the V8 or Jint engines you can control the specific version that is used. When using the IE engine the specific version of the engine can vary with windows updates.

Packaging and deployment

V8 is a native dll, to the nuget package needs to tweak your project file to manually copy it to the output directory. While this generally works it is is more moving pieces and not seamless when upgrading packages or when double hop references are used. IE and Jint are single .net dlls and are managed as such

Size

  • IE: 78KB
  • Jint: 233KB
  • V8: 5MB

Merged or Non-Merged IE/Jint

If you only want to render simple files then use the merged version. If you want full control over the JS engine (eg to load custom scripts) then use the non-merged version.

Usage

Rendering a template

Input

var source = @"<p>Hello, my name is {{name}}. I am from {{hometown}}. I have ' +
'{{kids.length}} kids:</p>' +
'<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var context = new
{
name = "Alan",
hometown = "Somewhere, TX",
kids = new[]
{
new
{
name = "Sally",
age = "4"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<p>Hello, my name is Alan. I am from Somewhere, TX. I have 1 kids:</p>
<ul>
<li>Sally is 4</li>
</ul>

Register Helpers

Input

var source = "<ul>{{#posts}}<li>{{link_to}}</li>{{/posts}}</ul>";
var context = new
{
posts = new[]
{
new
{
url = "/hello-world",
body = "Hello World!"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterHelper("link_to",
@"function() {
return new Handlebars.SafeString(""<a href='"" + this.url + ""'>"" + this.body + ""</a>"");
}");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li>
<a href='/hello-world'>Hello World!</a>
</li>
</ul>

Register Partials

Input

var source = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
var context = new
{
people = new[]
{
new
{
name = "Alan",
id = 1
},
new
{
name = "Yehuda",
id = 2
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterPartial("link",@"<a href=""/people/{{id}}"">{{name}}</a>");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

HandlebarsJS

The binary ships with a resource merged version of HandlebarsJS. Also see the License.

Current merged version

The current version included in the library is v4.0.5. If you feel a newer version should be included at any point in time please raise an issue.

Running a custom version

If you want to run a custom version of HandlebaseJS simply place the custom handlebars.js in the current running directory and that file will be used instead of the merged version.

Icon

Mustache designed by Matt Brooks from The Noun Project

About

Wraps Handlebars to make it usable from .net.

Resources

Stars

20 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
This repository was archived by the owner on Apr 12, 2019. It is now read-only.

Latest commit

History

148 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Icon

Wraps HandlebarsJS to make it usable from .net.

Nuget

Has a dependency on the MsieJavaScriptEngine package.

Has a dependency on the Jint package.

ILMerges the Jint assembly to avoid an extra dependency

Has a dependency on the ClearScript.V8 package.

Has a dependency on the MsieJavaScriptEngine and Chevron.IE packages.

ILMerges the MsieJavaScriptEngine and Chevron.IE assembly to avoid an any extra dependencies.

Has a dependency on the Jint and Chevron.Jint packages.

ILMerges the Jint and Chevron.Jint assembly to avoid an any extra dependencies.

Has a dependency on the ClearScript.V8 and Chevron.V8 packages.

What Nuget to choose

IE or V8 or Jint

Performance

In my basic testing V8 was (in most cases) faster than IE. Note that this testing was done on the IE 10 engine and the IE 11 engine is rumored to have significant performance improvements. I have done no testing on Jint performance.

Consistency

When using the V8 or Jint engines you can control the specific version that is used. When using the IE engine the specific version of the engine can vary with windows updates.

Packaging and deployment

V8 is a native dll, to the nuget package needs to tweak your project file to manually copy it to the output directory. While this generally works it is is more moving pieces and not seamless when upgrading packages or when double hop references are used. IE and Jint are single .net dlls and are managed as such

Size

  • IE: 78KB
  • Jint: 233KB
  • V8: 5MB

Merged or Non-Merged IE/Jint

If you only want to render simple files then use the merged version. If you want full control over the JS engine (eg to load custom scripts) then use the non-merged version.

Usage

Rendering a template

Input

var source = @"<p>Hello, my name is {{name}}. I am from {{hometown}}. I have ' +
'{{kids.length}} kids:</p>' +
'<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var context = new
{
name = "Alan",
hometown = "Somewhere, TX",
kids = new[]
{
new
{
name = "Sally",
age = "4"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<p>Hello, my name is Alan. I am from Somewhere, TX. I have 1 kids:</p>
<ul>
<li>Sally is 4</li>
</ul>

Register Helpers

Input

var source = "<ul>{{#posts}}<li>{{link_to}}</li>{{/posts}}</ul>";
var context = new
{
posts = new[]
{
new
{
url = "/hello-world",
body = "Hello World!"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterHelper("link_to",
@"function() {
return new Handlebars.SafeString(""<a href='"" + this.url + ""'>"" + this.body + ""</a>"");
}");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li>
<a href='/hello-world'>Hello World!</a>
</li>
</ul>

Register Partials

Input

var source = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
var context = new
{
people = new[]
{
new
{
name = "Alan",
id = 1
},
new
{
name = "Yehuda",
id = 2
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterPartial("link",@"<a href=""/people/{{id}}"">{{name}}</a>");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

HandlebarsJS

The binary ships with a resource merged version of HandlebarsJS. Also see the License.

Current merged version

The current version included in the library is v4.0.5. If you feel a newer version should be included at any point in time please raise an issue.

Running a custom version

If you want to run a custom version of HandlebaseJS simply place the custom handlebars.js in the current running directory and that file will be used instead of the merged version.

Icon

Mustache designed by Matt Brooks from The Noun Project

About

Wraps Handlebars to make it usable from .net.

Resources

Stars

20 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
This repository was archived by the owner on Apr 12, 2019. It is now read-only.

Latest commit

History

148 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Icon

Wraps HandlebarsJS to make it usable from .net.

Nuget

Has a dependency on the MsieJavaScriptEngine package.

Has a dependency on the Jint package.

ILMerges the Jint assembly to avoid an extra dependency

Has a dependency on the ClearScript.V8 package.

Has a dependency on the MsieJavaScriptEngine and Chevron.IE packages.

ILMerges the MsieJavaScriptEngine and Chevron.IE assembly to avoid an any extra dependencies.

Has a dependency on the Jint and Chevron.Jint packages.

ILMerges the Jint and Chevron.Jint assembly to avoid an any extra dependencies.

Has a dependency on the ClearScript.V8 and Chevron.V8 packages.

What Nuget to choose

IE or V8 or Jint

Performance

In my basic testing V8 was (in most cases) faster than IE. Note that this testing was done on the IE 10 engine and the IE 11 engine is rumored to have significant performance improvements. I have done no testing on Jint performance.

Consistency

When using the V8 or Jint engines you can control the specific version that is used. When using the IE engine the specific version of the engine can vary with windows updates.

Packaging and deployment

V8 is a native dll, to the nuget package needs to tweak your project file to manually copy it to the output directory. While this generally works it is is more moving pieces and not seamless when upgrading packages or when double hop references are used. IE and Jint are single .net dlls and are managed as such

Size

  • IE: 78KB
  • Jint: 233KB
  • V8: 5MB

Merged or Non-Merged IE/Jint

If you only want to render simple files then use the merged version. If you want full control over the JS engine (eg to load custom scripts) then use the non-merged version.

Usage

Rendering a template

Input

var source = @"<p>Hello, my name is {{name}}. I am from {{hometown}}. I have ' +
'{{kids.length}} kids:</p>' +
'<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var context = new
{
name = "Alan",
hometown = "Somewhere, TX",
kids = new[]
{
new
{
name = "Sally",
age = "4"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<p>Hello, my name is Alan. I am from Somewhere, TX. I have 1 kids:</p>
<ul>
<li>Sally is 4</li>
</ul>

Register Helpers

Input

var source = "<ul>{{#posts}}<li>{{link_to}}</li>{{/posts}}</ul>";
var context = new
{
posts = new[]
{
new
{
url = "/hello-world",
body = "Hello World!"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterHelper("link_to",
@"function() {
return new Handlebars.SafeString(""<a href='"" + this.url + ""'>"" + this.body + ""</a>"");
}");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li>
<a href='/hello-world'>Hello World!</a>
</li>
</ul>

Register Partials

Input

var source = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
var context = new
{
people = new[]
{
new
{
name = "Alan",
id = 1
},
new
{
name = "Yehuda",
id = 2
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterPartial("link",@"<a href=""/people/{{id}}"">{{name}}</a>");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

HandlebarsJS

The binary ships with a resource merged version of HandlebarsJS. Also see the License.

Current merged version

The current version included in the library is v4.0.5. If you feel a newer version should be included at any point in time please raise an issue.

Running a custom version

If you want to run a custom version of HandlebaseJS simply place the custom handlebars.js in the current running directory and that file will be used instead of the merged version.

Icon

Mustache designed by Matt Brooks from The Noun Project

About

Wraps Handlebars to make it usable from .net.

Resources

Stars

20 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
This repository was archived by the owner on Apr 12, 2019. It is now read-only.

Latest commit

History

148 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Icon

Wraps HandlebarsJS to make it usable from .net.

Nuget

Has a dependency on the MsieJavaScriptEngine package.

Has a dependency on the Jint package.

ILMerges the Jint assembly to avoid an extra dependency

Has a dependency on the ClearScript.V8 package.

Has a dependency on the MsieJavaScriptEngine and Chevron.IE packages.

ILMerges the MsieJavaScriptEngine and Chevron.IE assembly to avoid an any extra dependencies.

Has a dependency on the Jint and Chevron.Jint packages.

ILMerges the Jint and Chevron.Jint assembly to avoid an any extra dependencies.

Has a dependency on the ClearScript.V8 and Chevron.V8 packages.

What Nuget to choose

IE or V8 or Jint

Performance

In my basic testing V8 was (in most cases) faster than IE. Note that this testing was done on the IE 10 engine and the IE 11 engine is rumored to have significant performance improvements. I have done no testing on Jint performance.

Consistency

When using the V8 or Jint engines you can control the specific version that is used. When using the IE engine the specific version of the engine can vary with windows updates.

Packaging and deployment

V8 is a native dll, to the nuget package needs to tweak your project file to manually copy it to the output directory. While this generally works it is is more moving pieces and not seamless when upgrading packages or when double hop references are used. IE and Jint are single .net dlls and are managed as such

Size

  • IE: 78KB
  • Jint: 233KB
  • V8: 5MB

Merged or Non-Merged IE/Jint

If you only want to render simple files then use the merged version. If you want full control over the JS engine (eg to load custom scripts) then use the non-merged version.

Usage

Rendering a template

Input

var source = @"<p>Hello, my name is {{name}}. I am from {{hometown}}. I have ' +
'{{kids.length}} kids:</p>' +
'<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var context = new
{
name = "Alan",
hometown = "Somewhere, TX",
kids = new[]
{
new
{
name = "Sally",
age = "4"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<p>Hello, my name is Alan. I am from Somewhere, TX. I have 1 kids:</p>
<ul>
<li>Sally is 4</li>
</ul>

Register Helpers

Input

var source = "<ul>{{#posts}}<li>{{link_to}}</li>{{/posts}}</ul>";
var context = new
{
posts = new[]
{
new
{
url = "/hello-world",
body = "Hello World!"
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterHelper("link_to",
@"function() {
return new Handlebars.SafeString(""<a href='"" + this.url + ""'>"" + this.body + ""</a>"");
}");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li>
<a href='/hello-world'>Hello World!</a>
</li>
</ul>

Register Partials

Input

var source = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
var context = new
{
people = new[]
{
new
{
name = "Alan",
id = 1
},
new
{
name = "Yehuda",
id = 2
}
}
};
using (var handleBars = new Handlebars())
{
handleBars.RegisterPartial("link",@"<a href=""/people/{{id}}"">{{name}}</a>");
handleBars.RegisterTemplate("myTemplate", source);
var result = handleBars.Transform("myTemplate", context);
}

Output

<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

HandlebarsJS

The binary ships with a resource merged version of HandlebarsJS. Also see the License.

Current merged version

The current version included in the library is v4.0.5. If you feel a newer version should be included at any point in time please raise an issue.

Running a custom version

If you want to run a custom version of HandlebaseJS simply place the custom handlebars.js in the current running directory and that file will be used instead of the merged version.

Icon

Mustache designed by Matt Brooks from The Noun Project

About

Wraps Handlebars to make it usable from .net.

Resources

Stars

20 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages