Skip to content
This repository was archived by the owner on Sep 21, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion .ember-cli
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,17 @@
Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
*/
"isTypeScriptProject": false
"isTypeScriptProject": false,

/**
Setting `componentAuthoringFormat` to "strict" will force the blueprint generators to generate GJS
or GTS files for the component and the component rendering test. "loose" is the default.
*/
"componentAuthoringFormat": "loose",

/**
Setting `routeAuthoringFormat` to "strict" will force the blueprint generators to generate GJS
or GTS templates for routes. "loose" is the default
*/
"routeAuthoringFormat": "loose"
}
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 18.x
node-version: 24.x
cache: pnpm
- name: Install Dependencies
run: pnpm install --frozen-lockfile
Expand All @@ -39,7 +39,7 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 18.x
node-version: 24.x
cache: pnpm
- name: Install Dependencies
run: pnpm install --frozen-lockfile
Expand Down
7 changes: 0 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,5 @@
/testem.log
/yarn-error.log

# ember-try
/.node_modules.ember-try/
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try

# broccoli-debug
/DEBUG/
6 changes: 3 additions & 3 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@
/coverage/
!.*
.*/

# ember-try
/.node_modules.ember-try/
/pnpm-lock.yaml
ember-cli-update.json
*.html
3 changes: 2 additions & 1 deletion .prettierrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ module.exports = {
plugins: ['prettier-plugin-ember-template-tag'],
overrides: [
{
files: '*.{js,ts,gjs,gts}',
files: '*.{js,gjs,ts,gts,mjs,mts,cjs,cts}',
options: {
singleQuote: true,
templateSingleQuote: true,
},
},
// ...
Expand Down
2 changes: 1 addition & 1 deletion .stylelintrc.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

module.exports = {
extends: ['stylelint-config-standard', 'stylelint-prettier/recommended'],
extends: ['stylelint-config-standard'],
rules: {
'custom-property-pattern': null,
'block-no-empty': null,
Expand Down
5 changes: 5 additions & 0 deletions app/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers';
import config from 'netrunnerdb/config/environment';
import './font-awesome'; // Add this import statement for Font Awesome setup
import { importSync, isDevelopingApp, macroCondition } from '@embroider/macros';

if (macroCondition(isDevelopingApp())) {
importSync('./deprecation-workflow');
}

export default class App extends Application {
modulePrefix = config.modulePrefix;
Expand Down
3 changes: 2 additions & 1 deletion app/components/banlist/banned.gjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import Component from '@glimmer/component';
import { cached } from '@glimmer/tracking';
import CardLinkTo from '../card/link-to';

const capitalize = 'text-transform: capitalize';

export default class Banned extends Component {
get bannedCards() {
@cached get bannedCards() {
return this.args.restriction.verdicts.banned
.map((cardId) => {
return this.args.cards.get(cardId);
Expand Down
4 changes: 2 additions & 2 deletions app/components/decklist-box.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { tracked } from '@glimmer/tracking';
import { LinkTo } from '@ember/routing';
import { service } from '@ember/service';
import FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';
import { faCardsBlank } from '@fortawesome/free-solid-svg-icons';
import { faLayerGroup } from '@fortawesome/free-solid-svg-icons';

import {
GetIdentityTitle,
Expand Down Expand Up @@ -71,7 +71,7 @@ export default class DecklistBoxComponent extends Component {
}})
</p>
<p class='decklist-cards'>
<FaIcon @icon={{faCardsBlank}} @flip='horizontal' />
<FaIcon @icon={{faLayerGroup}} @flip='horizontal' />
{{@decklist.numCards}}
cards (min
{{@decklist.identityCard.minimumDeckSize}})
Expand Down
6 changes: 2 additions & 4 deletions app/components/navbar.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ import { action } from '@ember/object';
import { LinkTo } from '@ember/routing';
import { on } from '@ember/modifier';
import FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';
import {
faBars,
faFantasyFlightGames,
} from '@fortawesome/free-solid-svg-icons';
import { faBars } from '@fortawesome/free-solid-svg-icons';
import { faFantasyFlightGames } from '@fortawesome/free-brands-svg-icons';

import Collapse from 'ember-bootstrap/components/bs-collapse';
import formatMessage from 'ember-intl/helpers/format-message';
Expand Down
24 changes: 24 additions & 0 deletions app/deprecation-workflow.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import setupDeprecationWorkflow from 'ember-cli-deprecation-workflow';

/**
* Docs: https://github.com/ember-cli/ember-cli-deprecation-workflow
*/
setupDeprecationWorkflow({
/**
false by default, but if a developer / team wants to be more aggressive about being proactive with
handling their deprecations, this should be set to "true"
*/
throwOnUnhandled: false,
workflow: [
/* ... handlers ... */
/* to generate this list, run your app for a while (or run the test suite),
* and then run in the browser console:
*
* deprecationWorkflow.flushDeprecations()
*
* And copy the handlers here
*/
/* example: */
/* { handler: 'silence', matchId: 'template-action' }, */
],
});
32 changes: 16 additions & 16 deletions app/templates/formats/format.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,31 +8,31 @@ import Navbar from 'netrunnerdb/components/navbar';
import FancyHeader from 'netrunnerdb/components/fancy-header';

const FormatSection = <template>
<div class="col-12">
<div class='col-12'>
<FancyHeader>{{@format.name}}</FancyHeader>
<img
alt={{@format.name}}
src="/assets/image/format/{{@format.name}}.png"
class="float-{{@float}} me-4"
style="width: 100px"
src='/assets/image/format/{{@format.name}}.png'
class='float-{{@float}} me-4'
style='width: 100px'
/>

{{yield to="description"}}
{{yield to='description'}}

<h3>Current Ban List</h3>
<p>
<LinkTo
@route="bans"
@route='bans'
@query={{hash format=@format.id search=@format.currentRestriction.name}}
>
{{formatMessage
"{name} active as of {dateStart}"
'{name} active as of {dateStart}'
name=@format.currentRestriction.name
dateStart=(formatDate
@format.currentRestriction.dateStart
day="numeric"
month="long"
year="numeric"
day='numeric'
month='long'
year='numeric'
)
}}
</LinkTo>
Expand All @@ -41,16 +41,16 @@ const FormatSection = <template>
</template>;

<template>
{{pageTitle "Formats"}}
{{pageTitle 'Formats'}}

<main class="pb-4">
<main class='pb-4'>

<Navbar />
<Titlebar @title="Formats" @subtitle={{@model.standard.format.name}} />
<Titlebar @title='Formats' @subtitle={{@model.standard.format.name}} />

<div class="container">
<div class="row">
<FormatSection @format={{@model.standard.format}} @float="start">
<div class='container'>
<div class='row'>
<FormatSection @format={{@model.standard.format}} @float='start'>
<:description>
<p>
The flagship format of Netrunner Organized Play, Standard is
Expand Down
74 changes: 37 additions & 37 deletions app/templates/formats/index.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,31 +8,31 @@ import Navbar from 'netrunnerdb/components/navbar';
import FancyHeader from 'netrunnerdb/components/fancy-header';

const FormatSection = <template>
<div class="col-12">
<div class='col-12'>
<FancyHeader>{{@format.name}}</FancyHeader>
<img
alt={{@format.name}}
src="/assets/image/format/{{@format.name}}.png"
class="float-{{@float}} me-4"
style="width: 100px"
src='/assets/image/format/{{@format.name}}.png'
class='float-{{@float}} me-4'
style='width: 100px'
/>

{{yield to="description"}}
{{yield to='description'}}

<h3>Current Ban List</h3>
<p>
<LinkTo
@route="bans"
@route='bans'
@query={{hash format=@format.id search=@format.currentRestriction.name}}
>
{{formatMessage
"{name} active as of {dateStart}"
'{name} active as of {dateStart}'
name=@format.currentRestriction.name
dateStart=(formatDate
@format.currentRestriction.dateStart
day="numeric"
month="long"
year="numeric"
day='numeric'
month='long'
year='numeric'
)
}}
</LinkTo>
Expand All @@ -41,19 +41,19 @@ const FormatSection = <template>
</template>;

<template>
{{pageTitle "Formats"}}
{{pageTitle 'Formats'}}

<main class="pb-4">
<main class='pb-4'>

<Navbar />
<Titlebar
@title="Formats"
@subtitle="All official past and present formats of play"
@title='Formats'
@subtitle='All official past and present formats of play'
/>

<div class="container">
<div class="row">
<FormatSection @format={{@model.standard.format}} @float="start">
<div class='container'>
<div class='row'>
<FormatSection @format={{@model.standard.format}} @float='start'>
<:description>
<p>
The flagship format of Netrunner Organized Play, Standard is
Expand All @@ -65,30 +65,30 @@ const FormatSection = <template>
</:description>
</FormatSection>

<FormatSection @format={{@model.startup.format}} @float="end">
<FormatSection @format={{@model.startup.format}} @float='end'>
<:description>
<p>
If you’re looking to get into organized play, Startup is the place
to, well, start. It’s a limited-cardpool format, intended for new
players taking their first steps into Organized Play as well as
experienced players who want a slimmed-down deckbuilding
challenge. The cardpool for Startup consists of:</p>
<ul class="mt-2">
<ul class='mt-2'>
<li>System Gateway and System Update 2021</li>
<li>The most recent complete Null Signal narrative cycle</li>
<li>All sets in the current incomplete Null Signal narrative cycle</li>
</ul>
</:description>
</FormatSection>

<FormatSection @format={{@model.eternal.format}} @float="start">
<FormatSection @format={{@model.eternal.format}} @float='start'>
<:description>
<p>
Eternal is not affected by rotation and has a far less restrictive
list governing it. The largest and most complex format, it
encompasses nearly the entirety of the printed card pool and only
grows larger with time.</p>
<p class="mt-2">
<p class='mt-2'>
The Eternal Points List bans a small number of cards, and assigns
a points value between 0 and 3 points to every card in the format.
You have 7 points to spend during deckbuilding (these are not
Expand All @@ -100,52 +100,52 @@ const FormatSection = <template>
</:description>
</FormatSection>

<div class="col-12 col-lg-6">
<div class='col-12 col-lg-6'>
<FancyHeader>Random Access Memories</FancyHeader>
<img
alt="Random Access Memories"
src="/assets/image/format/ram.png"
class="float-end float-lg-start ms-4 ms-lg-0 me-0 me-lg-4"
style="width: 100px"
alt='Random Access Memories'
src='/assets/image/format/ram.png'
class='float-end float-lg-start ms-4 ms-lg-0 me-0 me-lg-4'
style='width: 100px'
/>
{{! template-lint-disable no-whitespace-within-word }}
<p>
Random Access Memories is a special format with a a randomly
determined card pool. The legal sets for each period are generated
in a
<a href="https://www.twitch.tv/nullsignalnetrunner">livestreamed
<a href='https://www.twitch.tv/nullsignalnetrunner'>livestreamed
draw</a>. This is followed by a tournament, and the sets drawn are
then the legal RAM card pool for the following period. Please
<a
href="https://nullsignal.games/blog/random-access-memories-format-and-tournament/"
href='https://nullsignal.games/blog/random-access-memories-format-and-tournament/'
>see here</a>
for more info on how the card pool is generated.</p>
<p class="mt-2">
<p class='mt-2'>
The regularly-scheduled RAM tournaments are currently on hiatus, and
the card pool generated for the latest tournament is provided for
historical purposes. However, you can find tools with which to
randomly generate your own card pool if you wish to run unofficial
tournaments on
<a href="https://ram-checker.lostgeek.de/randomizer.html">this page</a>,
<a href='https://ram-checker.lostgeek.de/randomizer.html'>this page</a>,
and you can visit
<a href="https://ram-checker.lostgeek.de/">this page</a>
<a href='https://ram-checker.lostgeek.de/'>this page</a>
to find a legality checker for your RAM decks.</p>
</div>

<div class="col-12 col-lg-6">
<div class='col-12 col-lg-6'>
<FancyHeader>Snapshot</FancyHeader>
<img
alt="Snapshot"
src="/assets/image/format/snapshot.png"
class="float-start float-lg-end ms-0 ms-lg-4 me-4 me-lg-0"
style="width: 100px"
alt='Snapshot'
src='/assets/image/format/snapshot.png'
class='float-start float-lg-end ms-0 ms-lg-4 me-4 me-lg-0'
style='width: 100px'
/>
<p>This format is a “snapshot” of the meta at Magnum Opus 2018, the
culmination of FFG Organized Play. It will see minimal changes
unless strictly necessary.</p>
</div>

<div class="col-12">
<div class='col-12'>
<FancyHeader>Other Formats</FancyHeader>
<p>There are, of course, many other ways to play Netrunner! The
Netrunner community is nothing if not passionate and creative, so be
Expand Down
Loading
Loading