Repository files navigation

PledgieGem VersionCode ClimateCoverage StatusBuild StatusInline docsLicense

For the current status of Volt, read: http://voltframework.com/blog

Volt is a Ruby web framework where your Ruby code runs on both the server and the client (via Opal). The DOM automatically updates as the user interacts with the page. Page state can be stored in the URL. If the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines. Subsequent local page interactions will be rendered on the client.

Instead of syncing data between the client and server via HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the database and any other listening clients (with almost no setup code needed).

Page HTML is written in a templating language where you can put Ruby between {{ and }}. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or to any other code that wants to know when a value has changed). When something in the DOM changes, Volt intelligently updates only the DOM nodes that need to be changed.

See some demo videos here:

Check out demo apps:

For a full list of all things volt, check out awesome-volt

Docs

Read the full docs on Volt here

There is also a work in progress tutorial by @rhgraysonii

More Videos

Rick Carlino has been putting together some great volt tutorial videos also.

@ahnbizcad maintains a playlist of Volt related videos.

Getting Help

Have a question and need help? The volt team watches stackoverflow for questions and will get back to you quickly. Be sure to post the question with the #voltrb tag. If you have something you'd like to discuss, drop into our gitter room.

Contributing

You want to contribute? Great! Thanks for being awesome! At the moment, we have a big internal todo list. Please hop on https://gitter.im/voltrb/volt so that we don't duplicate work. Pull requests are always welcome, but asking about helping on Gitter should save some duplication.

Support

VoltFramework is currently a labor of love mainly built by a small group of core developers. Donations are always welcome and will help Volt get to production faster :-) Also, if you or your company is interested in sponsoring Volt, please talk to @ryanstout in gitter.

Pledgie

Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ

About

A Ruby web framework where your Ruby runs on both server and client

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

Repository files navigation

PledgieGem VersionCode ClimateCoverage StatusBuild StatusInline docsLicense

For the current status of Volt, read: http://voltframework.com/blog

Volt is a Ruby web framework where your Ruby code runs on both the server and the client (via Opal). The DOM automatically updates as the user interacts with the page. Page state can be stored in the URL. If the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines. Subsequent local page interactions will be rendered on the client.

Instead of syncing data between the client and server via HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the database and any other listening clients (with almost no setup code needed).

Page HTML is written in a templating language where you can put Ruby between {{ and }}. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or to any other code that wants to know when a value has changed). When something in the DOM changes, Volt intelligently updates only the DOM nodes that need to be changed.

See some demo videos here:

Check out demo apps:

For a full list of all things volt, check out awesome-volt

Docs

Read the full docs on Volt here

There is also a work in progress tutorial by @rhgraysonii

More Videos

Rick Carlino has been putting together some great volt tutorial videos also.

@ahnbizcad maintains a playlist of Volt related videos.

Getting Help

Have a question and need help? The volt team watches stackoverflow for questions and will get back to you quickly. Be sure to post the question with the #voltrb tag. If you have something you'd like to discuss, drop into our gitter room.

Contributing

You want to contribute? Great! Thanks for being awesome! At the moment, we have a big internal todo list. Please hop on https://gitter.im/voltrb/volt so that we don't duplicate work. Pull requests are always welcome, but asking about helping on Gitter should save some duplication.

Support

VoltFramework is currently a labor of love mainly built by a small group of core developers. Donations are always welcome and will help Volt get to production faster :-) Also, if you or your company is interested in sponsoring Volt, please talk to @ryanstout in gitter.

Pledgie

Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ

About

A Ruby web framework where your Ruby runs on both server and client

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

Repository files navigation

PledgieGem VersionCode ClimateCoverage StatusBuild StatusInline docsLicense

For the current status of Volt, read: http://voltframework.com/blog

Volt is a Ruby web framework where your Ruby code runs on both the server and the client (via Opal). The DOM automatically updates as the user interacts with the page. Page state can be stored in the URL. If the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines. Subsequent local page interactions will be rendered on the client.

Instead of syncing data between the client and server via HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the database and any other listening clients (with almost no setup code needed).

Page HTML is written in a templating language where you can put Ruby between {{ and }}. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or to any other code that wants to know when a value has changed). When something in the DOM changes, Volt intelligently updates only the DOM nodes that need to be changed.

See some demo videos here:

Check out demo apps:

For a full list of all things volt, check out awesome-volt

Docs

Read the full docs on Volt here

There is also a work in progress tutorial by @rhgraysonii

More Videos

Rick Carlino has been putting together some great volt tutorial videos also.

@ahnbizcad maintains a playlist of Volt related videos.

Getting Help

Have a question and need help? The volt team watches stackoverflow for questions and will get back to you quickly. Be sure to post the question with the #voltrb tag. If you have something you'd like to discuss, drop into our gitter room.

Contributing

You want to contribute? Great! Thanks for being awesome! At the moment, we have a big internal todo list. Please hop on https://gitter.im/voltrb/volt so that we don't duplicate work. Pull requests are always welcome, but asking about helping on Gitter should save some duplication.

Support

VoltFramework is currently a labor of love mainly built by a small group of core developers. Donations are always welcome and will help Volt get to production faster :-) Also, if you or your company is interested in sponsoring Volt, please talk to @ryanstout in gitter.

Pledgie

Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ

About

A Ruby web framework where your Ruby runs on both server and client

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

Repository files navigation

PledgieGem VersionCode ClimateCoverage StatusBuild StatusInline docsLicense

For the current status of Volt, read: http://voltframework.com/blog

Volt is a Ruby web framework where your Ruby code runs on both the server and the client (via Opal). The DOM automatically updates as the user interacts with the page. Page state can be stored in the URL. If the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines. Subsequent local page interactions will be rendered on the client.

Instead of syncing data between the client and server via HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the database and any other listening clients (with almost no setup code needed).

Page HTML is written in a templating language where you can put Ruby between {{ and }}. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or to any other code that wants to know when a value has changed). When something in the DOM changes, Volt intelligently updates only the DOM nodes that need to be changed.

See some demo videos here:

Check out demo apps:

For a full list of all things volt, check out awesome-volt

Docs

Read the full docs on Volt here

There is also a work in progress tutorial by @rhgraysonii

More Videos

Rick Carlino has been putting together some great volt tutorial videos also.

@ahnbizcad maintains a playlist of Volt related videos.

Getting Help

Have a question and need help? The volt team watches stackoverflow for questions and will get back to you quickly. Be sure to post the question with the #voltrb tag. If you have something you'd like to discuss, drop into our gitter room.

Contributing

You want to contribute? Great! Thanks for being awesome! At the moment, we have a big internal todo list. Please hop on https://gitter.im/voltrb/volt so that we don't duplicate work. Pull requests are always welcome, but asking about helping on Gitter should save some duplication.

Support

VoltFramework is currently a labor of love mainly built by a small group of core developers. Donations are always welcome and will help Volt get to production faster :-) Also, if you or your company is interested in sponsoring Volt, please talk to @ryanstout in gitter.

Pledgie

Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ

About

A Ruby web framework where your Ruby runs on both server and client

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

Repository files navigation

PledgieGem VersionCode ClimateCoverage StatusBuild StatusInline docsLicense

For the current status of Volt, read: http://voltframework.com/blog

Volt is a Ruby web framework where your Ruby code runs on both the server and the client (via Opal). The DOM automatically updates as the user interacts with the page. Page state can be stored in the URL. If the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines. Subsequent local page interactions will be rendered on the client.

Instead of syncing data between the client and server via HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the database and any other listening clients (with almost no setup code needed).

Page HTML is written in a templating language where you can put Ruby between {{ and }}. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or to any other code that wants to know when a value has changed). When something in the DOM changes, Volt intelligently updates only the DOM nodes that need to be changed.

See some demo videos here:

Check out demo apps:

For a full list of all things volt, check out awesome-volt

Docs

Read the full docs on Volt here

There is also a work in progress tutorial by @rhgraysonii

More Videos

Rick Carlino has been putting together some great volt tutorial videos also.

@ahnbizcad maintains a playlist of Volt related videos.

Getting Help

Have a question and need help? The volt team watches stackoverflow for questions and will get back to you quickly. Be sure to post the question with the #voltrb tag. If you have something you'd like to discuss, drop into our gitter room.

Contributing

You want to contribute? Great! Thanks for being awesome! At the moment, we have a big internal todo list. Please hop on https://gitter.im/voltrb/volt so that we don't duplicate work. Pull requests are always welcome, but asking about helping on Gitter should save some duplication.

Support

VoltFramework is currently a labor of love mainly built by a small group of core developers. Donations are always welcome and will help Volt get to production faster :-) Also, if you or your company is interested in sponsoring Volt, please talk to @ryanstout in gitter.

Pledgie

Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ

About

A Ruby web framework where your Ruby runs on both server and client

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

Repository files navigation

PledgieGem VersionCode ClimateCoverage StatusBuild StatusInline docsLicense

For the current status of Volt, read: http://voltframework.com/blog

Volt is a Ruby web framework where your Ruby code runs on both the server and the client (via Opal). The DOM automatically updates as the user interacts with the page. Page state can be stored in the URL. If the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines. Subsequent local page interactions will be rendered on the client.

Instead of syncing data between the client and server via HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the database and any other listening clients (with almost no setup code needed).

Page HTML is written in a templating language where you can put Ruby between {{ and }}. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or to any other code that wants to know when a value has changed). When something in the DOM changes, Volt intelligently updates only the DOM nodes that need to be changed.

See some demo videos here:

Check out demo apps:

For a full list of all things volt, check out awesome-volt

Docs

Read the full docs on Volt here

There is also a work in progress tutorial by @rhgraysonii

More Videos

Rick Carlino has been putting together some great volt tutorial videos also.

@ahnbizcad maintains a playlist of Volt related videos.

Getting Help

Have a question and need help? The volt team watches stackoverflow for questions and will get back to you quickly. Be sure to post the question with the #voltrb tag. If you have something you'd like to discuss, drop into our gitter room.

Contributing

You want to contribute? Great! Thanks for being awesome! At the moment, we have a big internal todo list. Please hop on https://gitter.im/voltrb/volt so that we don't duplicate work. Pull requests are always welcome, but asking about helping on Gitter should save some duplication.

Support

VoltFramework is currently a labor of love mainly built by a small group of core developers. Donations are always welcome and will help Volt get to production faster :-) Also, if you or your company is interested in sponsoring Volt, please talk to @ryanstout in gitter.

Pledgie

Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ

About

A Ruby web framework where your Ruby runs on both server and client

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

Repository files navigation

PledgieGem VersionCode ClimateCoverage StatusBuild StatusInline docsLicense

For the current status of Volt, read: http://voltframework.com/blog

Volt is a Ruby web framework where your Ruby code runs on both the server and the client (via Opal). The DOM automatically updates as the user interacts with the page. Page state can be stored in the URL. If the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines. Subsequent local page interactions will be rendered on the client.

Instead of syncing data between the client and server via HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the database and any other listening clients (with almost no setup code needed).

Page HTML is written in a templating language where you can put Ruby between {{ and }}. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or to any other code that wants to know when a value has changed). When something in the DOM changes, Volt intelligently updates only the DOM nodes that need to be changed.

See some demo videos here:

Check out demo apps:

For a full list of all things volt, check out awesome-volt

Docs

Read the full docs on Volt here

There is also a work in progress tutorial by @rhgraysonii

More Videos

Rick Carlino has been putting together some great volt tutorial videos also.

@ahnbizcad maintains a playlist of Volt related videos.

Getting Help

Have a question and need help? The volt team watches stackoverflow for questions and will get back to you quickly. Be sure to post the question with the #voltrb tag. If you have something you'd like to discuss, drop into our gitter room.

Contributing

You want to contribute? Great! Thanks for being awesome! At the moment, we have a big internal todo list. Please hop on https://gitter.im/voltrb/volt so that we don't duplicate work. Pull requests are always welcome, but asking about helping on Gitter should save some duplication.

Support

VoltFramework is currently a labor of love mainly built by a small group of core developers. Donations are always welcome and will help Volt get to production faster :-) Also, if you or your company is interested in sponsoring Volt, please talk to @ryanstout in gitter.

Pledgie

Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ

About

A Ruby web framework where your Ruby runs on both server and client

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

Repository files navigation

PledgieGem VersionCode ClimateCoverage StatusBuild StatusInline docsLicense

For the current status of Volt, read: http://voltframework.com/blog

Volt is a Ruby web framework where your Ruby code runs on both the server and the client (via Opal). The DOM automatically updates as the user interacts with the page. Page state can be stored in the URL. If the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines. Subsequent local page interactions will be rendered on the client.

Instead of syncing data between the client and server via HTTP, Volt uses a persistent connection between the client and server. When data is updated on one client, it is updated in the database and any other listening clients (with almost no setup code needed).

Page HTML is written in a templating language where you can put Ruby between {{ and }}. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or to any other code that wants to know when a value has changed). When something in the DOM changes, Volt intelligently updates only the DOM nodes that need to be changed.

See some demo videos here:

Check out demo apps:

For a full list of all things volt, check out awesome-volt

Docs

Read the full docs on Volt here

There is also a work in progress tutorial by @rhgraysonii

More Videos

Rick Carlino has been putting together some great volt tutorial videos also.

@ahnbizcad maintains a playlist of Volt related videos.

Getting Help

Have a question and need help? The volt team watches stackoverflow for questions and will get back to you quickly. Be sure to post the question with the #voltrb tag. If you have something you'd like to discuss, drop into our gitter room.

Contributing

You want to contribute? Great! Thanks for being awesome! At the moment, we have a big internal todo list. Please hop on https://gitter.im/voltrb/volt so that we don't duplicate work. Pull requests are always welcome, but asking about helping on Gitter should save some duplication.

Support

VoltFramework is currently a labor of love mainly built by a small group of core developers. Donations are always welcome and will help Volt get to production faster :-) Also, if you or your company is interested in sponsoring Volt, please talk to @ryanstout in gitter.

Pledgie

Bitcoins can also be sent to 1AYiL3MiSVe2QFyexzozUvFFH7uGCJgJMZ

About

A Ruby web framework where your Ruby runs on both server and client

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages