Repository files navigation

EternaJS

Eterna game/RNA design interface

Interested in development? Join the discusson on the Eterna Discord!

Eterna Discord

Setup

The project uses NPM for dependency management, webpack for packaging, and babel to polyfill ES2015 language features into ES5 and earlier.

  • Install npm (via nodejs):
  • $ npm install in root directory
  • Install and build the energy models via the instructions in lib/README.md. These are not included due to licensing restrictions.
  • If you want to modify any values in .env:
    • Create a file named .env.local and add any values from .env that you want to override.
    • You may want to use your actual username and password for DEBUG_PLAYER_ID and DEBUG_PLAYER_PASSWORD, instead of using EternaJS unauthenticated (i.e., as a guest user).
    • If you will be performing actions which cause data to be uploaded to our servers that could create inconsistencies, spam, or other potential problems, please leave APP_SERVER_URL as https://eternadev.org. If your changes are purely cosmetic, you may benefit from using https://eternagame.org instead.
    • If you are using eternadev, please note that this is using a clone of our production database. We wipe and re-clone it occasionally, but some times the time span we do this in may be longer or shorter. Depending on when we last cloned the DB and when you made your account, YOU MAY NOT YET HAVE AN ACCOUNT. Feel free to create one at http://eternadev.org. Additionally, make sure to back up anything you have on eternadev that you want to keep around.

Running tests

$ npm run test

Building and running

  • Compile and Serve:

    • $ npm run start
  • To do the first puzzle in Eterna, load up http://localhost:63343/?puzzle=4350940, and ask your browser to View JavaScript Console. To create your own test puzzles, check out the next section.

Setting up new test puzzles

  • Create your puzzle using the puzzlemaker GUI by clicking the "Create Puzzle" button at http://eternadev.org/web/playerpuzzles/

  • For functionality not available via the puzzlemaker, a puzzle can be directly set up via Drupal on the eternadev server through http://eternadev.org/node/add/puzzle and edited with http://eternadev.org/node/<id>/edit. Your login will need to have been granted Drupal admin access. We are working on a way to define and load puzzles locally, but until that time if you need a custom puzzle set up, let us know.

  • After you publish, you should be able to see the puzzle on the same player puzzles page, and figure out its ID by clicking on the puzzle.

Contributing

For introductory material to this codebase and the technologies it is built with, check out https://github.com/eternagame/development-bootcamp. If you're looking for somewhere to start contributing, check out our issues labelled good first issue.

  • Fork the repository

  • Make your changes in a separate git branch. In command line, use a command like git checkout -b myawesomefeature.

  • VS Code is a superb IDE for developing EternaJS, available for Mac & Windows. (Even Rhiju, a hardcore Emacs user, has converted.)

  • When you're ready to merge into master for deployment, create a pull request at https://github.com/Eternagame/EternaJS/pulls. We will then perform a code review.

Please note that for some reason or another, we may not approve of adding a feature you may have written. To avoid doing work we may reject later please open an issue and we will triage it and/or initiate discussion about the feature. That said, feel free to work on changes for your own experimentation. Eternascript boosters are also a great way to add in extra tools you want to see added, without needing us to consider whether or not that feature makes sense as a first-class citizen, or the specifics of how it needs to be implemented for a consistent user experience.

We also recommend joining our Discord to chat with other developers.

Releases

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

Repository files navigation

EternaJS

Eterna game/RNA design interface

Interested in development? Join the discusson on the Eterna Discord!

Eterna Discord

Setup

The project uses NPM for dependency management, webpack for packaging, and babel to polyfill ES2015 language features into ES5 and earlier.

  • Install npm (via nodejs):
  • $ npm install in root directory
  • Install and build the energy models via the instructions in lib/README.md. These are not included due to licensing restrictions.
  • If you want to modify any values in .env:
    • Create a file named .env.local and add any values from .env that you want to override.
    • You may want to use your actual username and password for DEBUG_PLAYER_ID and DEBUG_PLAYER_PASSWORD, instead of using EternaJS unauthenticated (i.e., as a guest user).
    • If you will be performing actions which cause data to be uploaded to our servers that could create inconsistencies, spam, or other potential problems, please leave APP_SERVER_URL as https://eternadev.org. If your changes are purely cosmetic, you may benefit from using https://eternagame.org instead.
    • If you are using eternadev, please note that this is using a clone of our production database. We wipe and re-clone it occasionally, but some times the time span we do this in may be longer or shorter. Depending on when we last cloned the DB and when you made your account, YOU MAY NOT YET HAVE AN ACCOUNT. Feel free to create one at http://eternadev.org. Additionally, make sure to back up anything you have on eternadev that you want to keep around.

Running tests

$ npm run test

Building and running

  • Compile and Serve:

    • $ npm run start
  • To do the first puzzle in Eterna, load up http://localhost:63343/?puzzle=4350940, and ask your browser to View JavaScript Console. To create your own test puzzles, check out the next section.

Setting up new test puzzles

  • Create your puzzle using the puzzlemaker GUI by clicking the "Create Puzzle" button at http://eternadev.org/web/playerpuzzles/

  • For functionality not available via the puzzlemaker, a puzzle can be directly set up via Drupal on the eternadev server through http://eternadev.org/node/add/puzzle and edited with http://eternadev.org/node/<id>/edit. Your login will need to have been granted Drupal admin access. We are working on a way to define and load puzzles locally, but until that time if you need a custom puzzle set up, let us know.

  • After you publish, you should be able to see the puzzle on the same player puzzles page, and figure out its ID by clicking on the puzzle.

Contributing

For introductory material to this codebase and the technologies it is built with, check out https://github.com/eternagame/development-bootcamp. If you're looking for somewhere to start contributing, check out our issues labelled good first issue.

  • Fork the repository

  • Make your changes in a separate git branch. In command line, use a command like git checkout -b myawesomefeature.

  • VS Code is a superb IDE for developing EternaJS, available for Mac & Windows. (Even Rhiju, a hardcore Emacs user, has converted.)

  • When you're ready to merge into master for deployment, create a pull request at https://github.com/Eternagame/EternaJS/pulls. We will then perform a code review.

Please note that for some reason or another, we may not approve of adding a feature you may have written. To avoid doing work we may reject later please open an issue and we will triage it and/or initiate discussion about the feature. That said, feel free to work on changes for your own experimentation. Eternascript boosters are also a great way to add in extra tools you want to see added, without needing us to consider whether or not that feature makes sense as a first-class citizen, or the specifics of how it needs to be implemented for a consistent user experience.

We also recommend joining our Discord to chat with other developers.

Releases

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

Repository files navigation

EternaJS

Eterna game/RNA design interface

Interested in development? Join the discusson on the Eterna Discord!

Eterna Discord

Setup

The project uses NPM for dependency management, webpack for packaging, and babel to polyfill ES2015 language features into ES5 and earlier.

  • Install npm (via nodejs):
  • $ npm install in root directory
  • Install and build the energy models via the instructions in lib/README.md. These are not included due to licensing restrictions.
  • If you want to modify any values in .env:
    • Create a file named .env.local and add any values from .env that you want to override.
    • You may want to use your actual username and password for DEBUG_PLAYER_ID and DEBUG_PLAYER_PASSWORD, instead of using EternaJS unauthenticated (i.e., as a guest user).
    • If you will be performing actions which cause data to be uploaded to our servers that could create inconsistencies, spam, or other potential problems, please leave APP_SERVER_URL as https://eternadev.org. If your changes are purely cosmetic, you may benefit from using https://eternagame.org instead.
    • If you are using eternadev, please note that this is using a clone of our production database. We wipe and re-clone it occasionally, but some times the time span we do this in may be longer or shorter. Depending on when we last cloned the DB and when you made your account, YOU MAY NOT YET HAVE AN ACCOUNT. Feel free to create one at http://eternadev.org. Additionally, make sure to back up anything you have on eternadev that you want to keep around.

Running tests

$ npm run test

Building and running

  • Compile and Serve:

    • $ npm run start
  • To do the first puzzle in Eterna, load up http://localhost:63343/?puzzle=4350940, and ask your browser to View JavaScript Console. To create your own test puzzles, check out the next section.

Setting up new test puzzles

  • Create your puzzle using the puzzlemaker GUI by clicking the "Create Puzzle" button at http://eternadev.org/web/playerpuzzles/

  • For functionality not available via the puzzlemaker, a puzzle can be directly set up via Drupal on the eternadev server through http://eternadev.org/node/add/puzzle and edited with http://eternadev.org/node/<id>/edit. Your login will need to have been granted Drupal admin access. We are working on a way to define and load puzzles locally, but until that time if you need a custom puzzle set up, let us know.

  • After you publish, you should be able to see the puzzle on the same player puzzles page, and figure out its ID by clicking on the puzzle.

Contributing

For introductory material to this codebase and the technologies it is built with, check out https://github.com/eternagame/development-bootcamp. If you're looking for somewhere to start contributing, check out our issues labelled good first issue.

  • Fork the repository

  • Make your changes in a separate git branch. In command line, use a command like git checkout -b myawesomefeature.

  • VS Code is a superb IDE for developing EternaJS, available for Mac & Windows. (Even Rhiju, a hardcore Emacs user, has converted.)

  • When you're ready to merge into master for deployment, create a pull request at https://github.com/Eternagame/EternaJS/pulls. We will then perform a code review.

Please note that for some reason or another, we may not approve of adding a feature you may have written. To avoid doing work we may reject later please open an issue and we will triage it and/or initiate discussion about the feature. That said, feel free to work on changes for your own experimentation. Eternascript boosters are also a great way to add in extra tools you want to see added, without needing us to consider whether or not that feature makes sense as a first-class citizen, or the specifics of how it needs to be implemented for a consistent user experience.

We also recommend joining our Discord to chat with other developers.

Releases

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

Repository files navigation

EternaJS

Eterna game/RNA design interface

Interested in development? Join the discusson on the Eterna Discord!

Eterna Discord

Setup

The project uses NPM for dependency management, webpack for packaging, and babel to polyfill ES2015 language features into ES5 and earlier.

  • Install npm (via nodejs):
  • $ npm install in root directory
  • Install and build the energy models via the instructions in lib/README.md. These are not included due to licensing restrictions.
  • If you want to modify any values in .env:
    • Create a file named .env.local and add any values from .env that you want to override.
    • You may want to use your actual username and password for DEBUG_PLAYER_ID and DEBUG_PLAYER_PASSWORD, instead of using EternaJS unauthenticated (i.e., as a guest user).
    • If you will be performing actions which cause data to be uploaded to our servers that could create inconsistencies, spam, or other potential problems, please leave APP_SERVER_URL as https://eternadev.org. If your changes are purely cosmetic, you may benefit from using https://eternagame.org instead.
    • If you are using eternadev, please note that this is using a clone of our production database. We wipe and re-clone it occasionally, but some times the time span we do this in may be longer or shorter. Depending on when we last cloned the DB and when you made your account, YOU MAY NOT YET HAVE AN ACCOUNT. Feel free to create one at http://eternadev.org. Additionally, make sure to back up anything you have on eternadev that you want to keep around.

Running tests

$ npm run test

Building and running

  • Compile and Serve:

    • $ npm run start
  • To do the first puzzle in Eterna, load up http://localhost:63343/?puzzle=4350940, and ask your browser to View JavaScript Console. To create your own test puzzles, check out the next section.

Setting up new test puzzles

  • Create your puzzle using the puzzlemaker GUI by clicking the "Create Puzzle" button at http://eternadev.org/web/playerpuzzles/

  • For functionality not available via the puzzlemaker, a puzzle can be directly set up via Drupal on the eternadev server through http://eternadev.org/node/add/puzzle and edited with http://eternadev.org/node/<id>/edit. Your login will need to have been granted Drupal admin access. We are working on a way to define and load puzzles locally, but until that time if you need a custom puzzle set up, let us know.

  • After you publish, you should be able to see the puzzle on the same player puzzles page, and figure out its ID by clicking on the puzzle.

Contributing

For introductory material to this codebase and the technologies it is built with, check out https://github.com/eternagame/development-bootcamp. If you're looking for somewhere to start contributing, check out our issues labelled good first issue.

  • Fork the repository

  • Make your changes in a separate git branch. In command line, use a command like git checkout -b myawesomefeature.

  • VS Code is a superb IDE for developing EternaJS, available for Mac & Windows. (Even Rhiju, a hardcore Emacs user, has converted.)

  • When you're ready to merge into master for deployment, create a pull request at https://github.com/Eternagame/EternaJS/pulls. We will then perform a code review.

Please note that for some reason or another, we may not approve of adding a feature you may have written. To avoid doing work we may reject later please open an issue and we will triage it and/or initiate discussion about the feature. That said, feel free to work on changes for your own experimentation. Eternascript boosters are also a great way to add in extra tools you want to see added, without needing us to consider whether or not that feature makes sense as a first-class citizen, or the specifics of how it needs to be implemented for a consistent user experience.

We also recommend joining our Discord to chat with other developers.

Releases

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

Repository files navigation

EternaJS

Eterna game/RNA design interface

Interested in development? Join the discusson on the Eterna Discord!

Eterna Discord

Setup

The project uses NPM for dependency management, webpack for packaging, and babel to polyfill ES2015 language features into ES5 and earlier.

  • Install npm (via nodejs):
  • $ npm install in root directory
  • Install and build the energy models via the instructions in lib/README.md. These are not included due to licensing restrictions.
  • If you want to modify any values in .env:
    • Create a file named .env.local and add any values from .env that you want to override.
    • You may want to use your actual username and password for DEBUG_PLAYER_ID and DEBUG_PLAYER_PASSWORD, instead of using EternaJS unauthenticated (i.e., as a guest user).
    • If you will be performing actions which cause data to be uploaded to our servers that could create inconsistencies, spam, or other potential problems, please leave APP_SERVER_URL as https://eternadev.org. If your changes are purely cosmetic, you may benefit from using https://eternagame.org instead.
    • If you are using eternadev, please note that this is using a clone of our production database. We wipe and re-clone it occasionally, but some times the time span we do this in may be longer or shorter. Depending on when we last cloned the DB and when you made your account, YOU MAY NOT YET HAVE AN ACCOUNT. Feel free to create one at http://eternadev.org. Additionally, make sure to back up anything you have on eternadev that you want to keep around.

Running tests

$ npm run test

Building and running

  • Compile and Serve:

    • $ npm run start
  • To do the first puzzle in Eterna, load up http://localhost:63343/?puzzle=4350940, and ask your browser to View JavaScript Console. To create your own test puzzles, check out the next section.

Setting up new test puzzles

  • Create your puzzle using the puzzlemaker GUI by clicking the "Create Puzzle" button at http://eternadev.org/web/playerpuzzles/

  • For functionality not available via the puzzlemaker, a puzzle can be directly set up via Drupal on the eternadev server through http://eternadev.org/node/add/puzzle and edited with http://eternadev.org/node/<id>/edit. Your login will need to have been granted Drupal admin access. We are working on a way to define and load puzzles locally, but until that time if you need a custom puzzle set up, let us know.

  • After you publish, you should be able to see the puzzle on the same player puzzles page, and figure out its ID by clicking on the puzzle.

Contributing

For introductory material to this codebase and the technologies it is built with, check out https://github.com/eternagame/development-bootcamp. If you're looking for somewhere to start contributing, check out our issues labelled good first issue.

  • Fork the repository

  • Make your changes in a separate git branch. In command line, use a command like git checkout -b myawesomefeature.

  • VS Code is a superb IDE for developing EternaJS, available for Mac & Windows. (Even Rhiju, a hardcore Emacs user, has converted.)

  • When you're ready to merge into master for deployment, create a pull request at https://github.com/Eternagame/EternaJS/pulls. We will then perform a code review.

Please note that for some reason or another, we may not approve of adding a feature you may have written. To avoid doing work we may reject later please open an issue and we will triage it and/or initiate discussion about the feature. That said, feel free to work on changes for your own experimentation. Eternascript boosters are also a great way to add in extra tools you want to see added, without needing us to consider whether or not that feature makes sense as a first-class citizen, or the specifics of how it needs to be implemented for a consistent user experience.

We also recommend joining our Discord to chat with other developers.

Releases

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

Repository files navigation

EternaJS

Eterna game/RNA design interface

Interested in development? Join the discusson on the Eterna Discord!

Eterna Discord

Setup

The project uses NPM for dependency management, webpack for packaging, and babel to polyfill ES2015 language features into ES5 and earlier.

  • Install npm (via nodejs):
  • $ npm install in root directory
  • Install and build the energy models via the instructions in lib/README.md. These are not included due to licensing restrictions.
  • If you want to modify any values in .env:
    • Create a file named .env.local and add any values from .env that you want to override.
    • You may want to use your actual username and password for DEBUG_PLAYER_ID and DEBUG_PLAYER_PASSWORD, instead of using EternaJS unauthenticated (i.e., as a guest user).
    • If you will be performing actions which cause data to be uploaded to our servers that could create inconsistencies, spam, or other potential problems, please leave APP_SERVER_URL as https://eternadev.org. If your changes are purely cosmetic, you may benefit from using https://eternagame.org instead.
    • If you are using eternadev, please note that this is using a clone of our production database. We wipe and re-clone it occasionally, but some times the time span we do this in may be longer or shorter. Depending on when we last cloned the DB and when you made your account, YOU MAY NOT YET HAVE AN ACCOUNT. Feel free to create one at http://eternadev.org. Additionally, make sure to back up anything you have on eternadev that you want to keep around.

Running tests

$ npm run test

Building and running

  • Compile and Serve:

    • $ npm run start
  • To do the first puzzle in Eterna, load up http://localhost:63343/?puzzle=4350940, and ask your browser to View JavaScript Console. To create your own test puzzles, check out the next section.

Setting up new test puzzles

  • Create your puzzle using the puzzlemaker GUI by clicking the "Create Puzzle" button at http://eternadev.org/web/playerpuzzles/

  • For functionality not available via the puzzlemaker, a puzzle can be directly set up via Drupal on the eternadev server through http://eternadev.org/node/add/puzzle and edited with http://eternadev.org/node/<id>/edit. Your login will need to have been granted Drupal admin access. We are working on a way to define and load puzzles locally, but until that time if you need a custom puzzle set up, let us know.

  • After you publish, you should be able to see the puzzle on the same player puzzles page, and figure out its ID by clicking on the puzzle.

Contributing

For introductory material to this codebase and the technologies it is built with, check out https://github.com/eternagame/development-bootcamp. If you're looking for somewhere to start contributing, check out our issues labelled good first issue.

  • Fork the repository

  • Make your changes in a separate git branch. In command line, use a command like git checkout -b myawesomefeature.

  • VS Code is a superb IDE for developing EternaJS, available for Mac & Windows. (Even Rhiju, a hardcore Emacs user, has converted.)

  • When you're ready to merge into master for deployment, create a pull request at https://github.com/Eternagame/EternaJS/pulls. We will then perform a code review.

Please note that for some reason or another, we may not approve of adding a feature you may have written. To avoid doing work we may reject later please open an issue and we will triage it and/or initiate discussion about the feature. That said, feel free to work on changes for your own experimentation. Eternascript boosters are also a great way to add in extra tools you want to see added, without needing us to consider whether or not that feature makes sense as a first-class citizen, or the specifics of how it needs to be implemented for a consistent user experience.

We also recommend joining our Discord to chat with other developers.

Releases

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

Repository files navigation

EternaJS

Eterna game/RNA design interface

Interested in development? Join the discusson on the Eterna Discord!

Eterna Discord

Setup

The project uses NPM for dependency management, webpack for packaging, and babel to polyfill ES2015 language features into ES5 and earlier.

  • Install npm (via nodejs):
  • $ npm install in root directory
  • Install and build the energy models via the instructions in lib/README.md. These are not included due to licensing restrictions.
  • If you want to modify any values in .env:
    • Create a file named .env.local and add any values from .env that you want to override.
    • You may want to use your actual username and password for DEBUG_PLAYER_ID and DEBUG_PLAYER_PASSWORD, instead of using EternaJS unauthenticated (i.e., as a guest user).
    • If you will be performing actions which cause data to be uploaded to our servers that could create inconsistencies, spam, or other potential problems, please leave APP_SERVER_URL as https://eternadev.org. If your changes are purely cosmetic, you may benefit from using https://eternagame.org instead.
    • If you are using eternadev, please note that this is using a clone of our production database. We wipe and re-clone it occasionally, but some times the time span we do this in may be longer or shorter. Depending on when we last cloned the DB and when you made your account, YOU MAY NOT YET HAVE AN ACCOUNT. Feel free to create one at http://eternadev.org. Additionally, make sure to back up anything you have on eternadev that you want to keep around.

Running tests

$ npm run test

Building and running

  • Compile and Serve:

    • $ npm run start
  • To do the first puzzle in Eterna, load up http://localhost:63343/?puzzle=4350940, and ask your browser to View JavaScript Console. To create your own test puzzles, check out the next section.

Setting up new test puzzles

  • Create your puzzle using the puzzlemaker GUI by clicking the "Create Puzzle" button at http://eternadev.org/web/playerpuzzles/

  • For functionality not available via the puzzlemaker, a puzzle can be directly set up via Drupal on the eternadev server through http://eternadev.org/node/add/puzzle and edited with http://eternadev.org/node/<id>/edit. Your login will need to have been granted Drupal admin access. We are working on a way to define and load puzzles locally, but until that time if you need a custom puzzle set up, let us know.

  • After you publish, you should be able to see the puzzle on the same player puzzles page, and figure out its ID by clicking on the puzzle.

Contributing

For introductory material to this codebase and the technologies it is built with, check out https://github.com/eternagame/development-bootcamp. If you're looking for somewhere to start contributing, check out our issues labelled good first issue.

  • Fork the repository

  • Make your changes in a separate git branch. In command line, use a command like git checkout -b myawesomefeature.

  • VS Code is a superb IDE for developing EternaJS, available for Mac & Windows. (Even Rhiju, a hardcore Emacs user, has converted.)

  • When you're ready to merge into master for deployment, create a pull request at https://github.com/Eternagame/EternaJS/pulls. We will then perform a code review.

Please note that for some reason or another, we may not approve of adding a feature you may have written. To avoid doing work we may reject later please open an issue and we will triage it and/or initiate discussion about the feature. That said, feel free to work on changes for your own experimentation. Eternascript boosters are also a great way to add in extra tools you want to see added, without needing us to consider whether or not that feature makes sense as a first-class citizen, or the specifics of how it needs to be implemented for a consistent user experience.

We also recommend joining our Discord to chat with other developers.

Releases

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

Repository files navigation

EternaJS

Eterna game/RNA design interface

Interested in development? Join the discusson on the Eterna Discord!

Eterna Discord

Setup

The project uses NPM for dependency management, webpack for packaging, and babel to polyfill ES2015 language features into ES5 and earlier.

  • Install npm (via nodejs):
  • $ npm install in root directory
  • Install and build the energy models via the instructions in lib/README.md. These are not included due to licensing restrictions.
  • If you want to modify any values in .env:
    • Create a file named .env.local and add any values from .env that you want to override.
    • You may want to use your actual username and password for DEBUG_PLAYER_ID and DEBUG_PLAYER_PASSWORD, instead of using EternaJS unauthenticated (i.e., as a guest user).
    • If you will be performing actions which cause data to be uploaded to our servers that could create inconsistencies, spam, or other potential problems, please leave APP_SERVER_URL as https://eternadev.org. If your changes are purely cosmetic, you may benefit from using https://eternagame.org instead.
    • If you are using eternadev, please note that this is using a clone of our production database. We wipe and re-clone it occasionally, but some times the time span we do this in may be longer or shorter. Depending on when we last cloned the DB and when you made your account, YOU MAY NOT YET HAVE AN ACCOUNT. Feel free to create one at http://eternadev.org. Additionally, make sure to back up anything you have on eternadev that you want to keep around.

Running tests

$ npm run test

Building and running

  • Compile and Serve:

    • $ npm run start
  • To do the first puzzle in Eterna, load up http://localhost:63343/?puzzle=4350940, and ask your browser to View JavaScript Console. To create your own test puzzles, check out the next section.

Setting up new test puzzles

  • Create your puzzle using the puzzlemaker GUI by clicking the "Create Puzzle" button at http://eternadev.org/web/playerpuzzles/

  • For functionality not available via the puzzlemaker, a puzzle can be directly set up via Drupal on the eternadev server through http://eternadev.org/node/add/puzzle and edited with http://eternadev.org/node/<id>/edit. Your login will need to have been granted Drupal admin access. We are working on a way to define and load puzzles locally, but until that time if you need a custom puzzle set up, let us know.

  • After you publish, you should be able to see the puzzle on the same player puzzles page, and figure out its ID by clicking on the puzzle.

Contributing

For introductory material to this codebase and the technologies it is built with, check out https://github.com/eternagame/development-bootcamp. If you're looking for somewhere to start contributing, check out our issues labelled good first issue.

  • Fork the repository

  • Make your changes in a separate git branch. In command line, use a command like git checkout -b myawesomefeature.

  • VS Code is a superb IDE for developing EternaJS, available for Mac & Windows. (Even Rhiju, a hardcore Emacs user, has converted.)

  • When you're ready to merge into master for deployment, create a pull request at https://github.com/Eternagame/EternaJS/pulls. We will then perform a code review.

Please note that for some reason or another, we may not approve of adding a feature you may have written. To avoid doing work we may reject later please open an issue and we will triage it and/or initiate discussion about the feature. That said, feel free to work on changes for your own experimentation. Eternascript boosters are also a great way to add in extra tools you want to see added, without needing us to consider whether or not that feature makes sense as a first-class citizen, or the specifics of how it needs to be implemented for a consistent user experience.

We also recommend joining our Discord to chat with other developers.

Releases

Used by

Contributors

Languages