Skip to content
FloRad edited this page Feb 18, 2022 · 7 revisions

The API

Looking at the Moral Code

Moral Code offers two ways to visualize an Actor's moral code

The Moral Code viewer

The Moral Code viewer is a FormApplication that has been deposited in the API. See the example below;

const actor = game.actors.getName("MyCoolActor");
const viewer = game.modules.get("moral-code")?.api?.MoralCodeViewer;
new viewer(actor).render(true);

The Summary

The module also provides a handy function that assembles a given actor's moral code into text form, alternatively posting it directly to chat!

const actor = game.actors.getName("MyCoolActor");

//returns the constructed string
game.modules.get("moral-code")?.api?.getMoralCodeSummary(actor);

// posts the string directly to chat and returns a promise
await game.modules.get("moral-code")?.api?.getMoralCodeSummary(actor, true);

Hooks

Moral Code fires the moralCodeReady which provides 2 functions

  • registerTheme
  • registerSheet

Registering a Theme

Registering a theme can either be done in the moralCodeReady hook or any time after Foundry's setup hook is finished

Example:

Hooks.on('moralCodeReady', (api) => {
 const myCoolTheme = {
   label: 'Some Cool Theme',
   class: 'cool-theme',
 };

 api.registerTheme(myCoolTheme);
});

To avoid CSS collisions please always scope your theme under the parent class moral-code

.moral-code.cool-theme {
  //add CSS here
}

Any themes registered that way can then be selected in the Module Settings with the Theme dropdown


Registering a Sheet

Registering a theme can either be done in the moralCodeReady hook or any time after Foundry's setup hook is finished

Sheet registration data:

Name Type Description
system string The system that this sheet is used in
sheetClass string The sheet class to look for
target string The selector used to select the element that will be replaced by the moral code button
classes string[] (optional) The class(es) to apply to the button to make it look good. Defaults to ["btn-moral-code"]
insert boolean (optional) If true, the Moral Code button will be inserted as a standalone button instead of replacing an element
prepend boolean (optional) If true the Moral Code button will be prepended to the target on insert, otherwise it is appended

Please keep in mind that you need to provide your own css rules. The module only applies the class you have defined.

Example:

Hooks.on('moralCodeReady', (api) => {
  const myCoolSheet = {
    system: 'my-cool-system',
    sheetClass: 'MyCoolSheet',
    target: 'some.css.selector',
  };

  api.registerSheet(myCoolSheet);
});
Clone this wiki locally