Repository files navigation

40K List Builder 8e

Please Note

  • Warhammer 40K and associated content is the property of Games Workshop.
  • This project is intended only for personal use.
  • This repo is only public so that I can host the content on github pages. If you wish to clone this then please ensure that you have a copy of the relevant rule book.
  • This project is far from complete and only gains traction occassionally.
  • I cannot guarantee that the data represented in the app is valid as I have not been keeping up to date with the latest changes from Games Workshop.

A list building web app for Warhammer 40K 8th edition.
I started this project because I did not like the alternatives - the official list builder (Combat Roster) is disgustingly under-featured and the free alternatives are either convoluted, not user-friendly, or just as under-featured.

Supported Factions

  • Craftworlds
  • Harlequins
  • Ynnari

The plan was to make it work for all the factions, but trying to convert all of the data into rule-based structures that are common across all factions is a real mission. So I started with the ones that I personally use as I understand them better.

Outstanding work/Work to be done

  • Spells
  • Strategems
  • Warlord traits
  • Detachments
  • Need a way of easily identifying which wargear belongs to which model in a unit
  • Full faction support
  • Print view - points header obscures top row of table

Installing/Running the project

  1. Clone repo
  2. Open a terminal within the repo
  3. run npm i to install dependencies
  4. run gulp watch to build and launch the project while watching for changes

It's worth noting that GitHub has detected various security vulnerabilities within the project's dependencies.

About

WIP: 40K list building webapp for Craftworlds, Harlequins, and Ynnari.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

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

40K List Builder 8e

Please Note

  • Warhammer 40K and associated content is the property of Games Workshop.
  • This project is intended only for personal use.
  • This repo is only public so that I can host the content on github pages. If you wish to clone this then please ensure that you have a copy of the relevant rule book.
  • This project is far from complete and only gains traction occassionally.
  • I cannot guarantee that the data represented in the app is valid as I have not been keeping up to date with the latest changes from Games Workshop.

A list building web app for Warhammer 40K 8th edition.
I started this project because I did not like the alternatives - the official list builder (Combat Roster) is disgustingly under-featured and the free alternatives are either convoluted, not user-friendly, or just as under-featured.

Supported Factions

  • Craftworlds
  • Harlequins
  • Ynnari

The plan was to make it work for all the factions, but trying to convert all of the data into rule-based structures that are common across all factions is a real mission. So I started with the ones that I personally use as I understand them better.

Outstanding work/Work to be done

  • Spells
  • Strategems
  • Warlord traits
  • Detachments
  • Need a way of easily identifying which wargear belongs to which model in a unit
  • Full faction support
  • Print view - points header obscures top row of table

Installing/Running the project

  1. Clone repo
  2. Open a terminal within the repo
  3. run npm i to install dependencies
  4. run gulp watch to build and launch the project while watching for changes

It's worth noting that GitHub has detected various security vulnerabilities within the project's dependencies.

About

WIP: 40K list building webapp for Craftworlds, Harlequins, and Ynnari.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

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

40K List Builder 8e

Please Note

  • Warhammer 40K and associated content is the property of Games Workshop.
  • This project is intended only for personal use.
  • This repo is only public so that I can host the content on github pages. If you wish to clone this then please ensure that you have a copy of the relevant rule book.
  • This project is far from complete and only gains traction occassionally.
  • I cannot guarantee that the data represented in the app is valid as I have not been keeping up to date with the latest changes from Games Workshop.

A list building web app for Warhammer 40K 8th edition.
I started this project because I did not like the alternatives - the official list builder (Combat Roster) is disgustingly under-featured and the free alternatives are either convoluted, not user-friendly, or just as under-featured.

Supported Factions

  • Craftworlds
  • Harlequins
  • Ynnari

The plan was to make it work for all the factions, but trying to convert all of the data into rule-based structures that are common across all factions is a real mission. So I started with the ones that I personally use as I understand them better.

Outstanding work/Work to be done

  • Spells
  • Strategems
  • Warlord traits
  • Detachments
  • Need a way of easily identifying which wargear belongs to which model in a unit
  • Full faction support
  • Print view - points header obscures top row of table

Installing/Running the project

  1. Clone repo
  2. Open a terminal within the repo
  3. run npm i to install dependencies
  4. run gulp watch to build and launch the project while watching for changes

It's worth noting that GitHub has detected various security vulnerabilities within the project's dependencies.

About

WIP: 40K list building webapp for Craftworlds, Harlequins, and Ynnari.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

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

40K List Builder 8e

Please Note

  • Warhammer 40K and associated content is the property of Games Workshop.
  • This project is intended only for personal use.
  • This repo is only public so that I can host the content on github pages. If you wish to clone this then please ensure that you have a copy of the relevant rule book.
  • This project is far from complete and only gains traction occassionally.
  • I cannot guarantee that the data represented in the app is valid as I have not been keeping up to date with the latest changes from Games Workshop.

A list building web app for Warhammer 40K 8th edition.
I started this project because I did not like the alternatives - the official list builder (Combat Roster) is disgustingly under-featured and the free alternatives are either convoluted, not user-friendly, or just as under-featured.

Supported Factions

  • Craftworlds
  • Harlequins
  • Ynnari

The plan was to make it work for all the factions, but trying to convert all of the data into rule-based structures that are common across all factions is a real mission. So I started with the ones that I personally use as I understand them better.

Outstanding work/Work to be done

  • Spells
  • Strategems
  • Warlord traits
  • Detachments
  • Need a way of easily identifying which wargear belongs to which model in a unit
  • Full faction support
  • Print view - points header obscures top row of table

Installing/Running the project

  1. Clone repo
  2. Open a terminal within the repo
  3. run npm i to install dependencies
  4. run gulp watch to build and launch the project while watching for changes

It's worth noting that GitHub has detected various security vulnerabilities within the project's dependencies.

About

WIP: 40K list building webapp for Craftworlds, Harlequins, and Ynnari.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

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

40K List Builder 8e

Please Note

  • Warhammer 40K and associated content is the property of Games Workshop.
  • This project is intended only for personal use.
  • This repo is only public so that I can host the content on github pages. If you wish to clone this then please ensure that you have a copy of the relevant rule book.
  • This project is far from complete and only gains traction occassionally.
  • I cannot guarantee that the data represented in the app is valid as I have not been keeping up to date with the latest changes from Games Workshop.

A list building web app for Warhammer 40K 8th edition.
I started this project because I did not like the alternatives - the official list builder (Combat Roster) is disgustingly under-featured and the free alternatives are either convoluted, not user-friendly, or just as under-featured.

Supported Factions

  • Craftworlds
  • Harlequins
  • Ynnari

The plan was to make it work for all the factions, but trying to convert all of the data into rule-based structures that are common across all factions is a real mission. So I started with the ones that I personally use as I understand them better.

Outstanding work/Work to be done

  • Spells
  • Strategems
  • Warlord traits
  • Detachments
  • Need a way of easily identifying which wargear belongs to which model in a unit
  • Full faction support
  • Print view - points header obscures top row of table

Installing/Running the project

  1. Clone repo
  2. Open a terminal within the repo
  3. run npm i to install dependencies
  4. run gulp watch to build and launch the project while watching for changes

It's worth noting that GitHub has detected various security vulnerabilities within the project's dependencies.

About

WIP: 40K list building webapp for Craftworlds, Harlequins, and Ynnari.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

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

40K List Builder 8e

Please Note

  • Warhammer 40K and associated content is the property of Games Workshop.
  • This project is intended only for personal use.
  • This repo is only public so that I can host the content on github pages. If you wish to clone this then please ensure that you have a copy of the relevant rule book.
  • This project is far from complete and only gains traction occassionally.
  • I cannot guarantee that the data represented in the app is valid as I have not been keeping up to date with the latest changes from Games Workshop.

A list building web app for Warhammer 40K 8th edition.
I started this project because I did not like the alternatives - the official list builder (Combat Roster) is disgustingly under-featured and the free alternatives are either convoluted, not user-friendly, or just as under-featured.

Supported Factions

  • Craftworlds
  • Harlequins
  • Ynnari

The plan was to make it work for all the factions, but trying to convert all of the data into rule-based structures that are common across all factions is a real mission. So I started with the ones that I personally use as I understand them better.

Outstanding work/Work to be done

  • Spells
  • Strategems
  • Warlord traits
  • Detachments
  • Need a way of easily identifying which wargear belongs to which model in a unit
  • Full faction support
  • Print view - points header obscures top row of table

Installing/Running the project

  1. Clone repo
  2. Open a terminal within the repo
  3. run npm i to install dependencies
  4. run gulp watch to build and launch the project while watching for changes

It's worth noting that GitHub has detected various security vulnerabilities within the project's dependencies.

About

WIP: 40K list building webapp for Craftworlds, Harlequins, and Ynnari.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

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

40K List Builder 8e

Please Note

  • Warhammer 40K and associated content is the property of Games Workshop.
  • This project is intended only for personal use.
  • This repo is only public so that I can host the content on github pages. If you wish to clone this then please ensure that you have a copy of the relevant rule book.
  • This project is far from complete and only gains traction occassionally.
  • I cannot guarantee that the data represented in the app is valid as I have not been keeping up to date with the latest changes from Games Workshop.

A list building web app for Warhammer 40K 8th edition.
I started this project because I did not like the alternatives - the official list builder (Combat Roster) is disgustingly under-featured and the free alternatives are either convoluted, not user-friendly, or just as under-featured.

Supported Factions

  • Craftworlds
  • Harlequins
  • Ynnari

The plan was to make it work for all the factions, but trying to convert all of the data into rule-based structures that are common across all factions is a real mission. So I started with the ones that I personally use as I understand them better.

Outstanding work/Work to be done

  • Spells
  • Strategems
  • Warlord traits
  • Detachments
  • Need a way of easily identifying which wargear belongs to which model in a unit
  • Full faction support
  • Print view - points header obscures top row of table

Installing/Running the project

  1. Clone repo
  2. Open a terminal within the repo
  3. run npm i to install dependencies
  4. run gulp watch to build and launch the project while watching for changes

It's worth noting that GitHub has detected various security vulnerabilities within the project's dependencies.

About

WIP: 40K list building webapp for Craftworlds, Harlequins, and Ynnari.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

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

40K List Builder 8e

Please Note

  • Warhammer 40K and associated content is the property of Games Workshop.
  • This project is intended only for personal use.
  • This repo is only public so that I can host the content on github pages. If you wish to clone this then please ensure that you have a copy of the relevant rule book.
  • This project is far from complete and only gains traction occassionally.
  • I cannot guarantee that the data represented in the app is valid as I have not been keeping up to date with the latest changes from Games Workshop.

A list building web app for Warhammer 40K 8th edition.
I started this project because I did not like the alternatives - the official list builder (Combat Roster) is disgustingly under-featured and the free alternatives are either convoluted, not user-friendly, or just as under-featured.

Supported Factions

  • Craftworlds
  • Harlequins
  • Ynnari

The plan was to make it work for all the factions, but trying to convert all of the data into rule-based structures that are common across all factions is a real mission. So I started with the ones that I personally use as I understand them better.

Outstanding work/Work to be done

  • Spells
  • Strategems
  • Warlord traits
  • Detachments
  • Need a way of easily identifying which wargear belongs to which model in a unit
  • Full faction support
  • Print view - points header obscures top row of table

Installing/Running the project

  1. Clone repo
  2. Open a terminal within the repo
  3. run npm i to install dependencies
  4. run gulp watch to build and launch the project while watching for changes

It's worth noting that GitHub has detected various security vulnerabilities within the project's dependencies.

About

WIP: 40K list building webapp for Craftworlds, Harlequins, and Ynnari.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Contributors

Languages