Pug Library Intro Placeholder
34 |├── test.md ├── docs ├── source │ ├── index.scss │ ├── js.scss │ ├── pug.scss │ ├── clear.scss │ ├── _mixins.scss │ ├── js.pug │ ├── pug.pug │ ├── _mixins.pug │ └── codeDisplay.scss ├── .vscode │ └── settings.json ├── assets │ ├── css │ │ ├── clear.css │ │ ├── prettify.css │ │ ├── sons-of-obsidian.css │ │ └── codeDisplay.css │ └── javascript │ │ ├── lang-rd.js │ │ ├── lang-tex.js │ │ ├── lang-latex.js │ │ ├── lang-go.js │ │ ├── prettify-small │ │ └── google-code-prettify │ │ │ └── skins │ │ │ ├── desert.css │ │ │ ├── sunburst.css │ │ │ └── doxy.css │ │ ├── lang-proto.js │ │ ├── lang-ll.js │ │ ├── lang-llvm.js │ │ ├── lang-yaml.js │ │ ├── lang-yml.js │ │ ├── lang-basic.js │ │ ├── lang-cbm.js │ │ ├── lang-wiki.js │ │ ├── lang-lua.js │ │ ├── lang-erl.js │ │ ├── lang-erlang.js │ │ ├── lang-hs.js │ │ ├── lang-tcl.js │ │ ├── lang-pascal.js │ │ ├── lang-Splus.js │ │ ├── lang-r.js │ │ ├── lang-s.js │ │ ├── lang-cl.js │ │ ├── lang-el.js │ │ ├── lang-lisp.js │ │ ├── lang-lsp.js │ │ ├── lang-rkt.js │ │ ├── lang-scm.js │ │ ├── lang-ss.js │ │ ├── lang-kotlin.js │ │ ├── lang-lgt.js │ │ ├── lang-logtalk.js │ │ ├── lang-clj.js │ │ ├── lang-mumps.js │ │ ├── lang-css.js │ │ ├── lang-scala.js │ │ ├── lang-aea.js │ │ ├── lang-agc.js │ │ ├── lang-apollo.js │ │ ├── lang-dart.js │ │ ├── lang-fs.js │ │ ├── lang-ml.js │ │ ├── lang-ex.js │ │ ├── lang-exs.js │ │ ├── lang-vhd.js │ │ ├── lang-vhdl.js │ │ ├── lang-n.js │ │ ├── lang-nemerle.js │ │ └── lang-swift.js └── subpages │ ├── pug.html │ └── js.html ├── K_Scaffold ├── Template v2 │ ├── translation.json │ ├── scaffold │ │ ├── _k.scss │ │ ├── _scaffold.scss │ │ ├── _kpug.pug │ │ ├── tabs │ │ │ ├── _tabs.scss │ │ │ └── tabs.js │ │ └── kvariables.js │ ├── Mixins │ │ ├── _Sheet Mixins.pug │ │ ├── _rolltemplate.scss │ │ └── _systemplaceholders.scss │ ├── Javascript │ │ ├── updaters.js │ │ ├── variables.js │ │ └── demoworkers.js │ ├── sheet.json │ └── system.pug └── Tutorial Sheet │ ├── 6 Roll on! │ └── thj2e │ │ ├── README.md │ │ ├── articles │ │ ├── npc │ │ │ └── _npc.pug │ │ ├── character │ │ │ ├── _character.pug │ │ │ └── sections │ │ │ │ ├── _archetype.pug │ │ │ │ ├── _lineage.pug │ │ │ │ ├── _equipment.pug │ │ │ │ ├── _header.pug │ │ │ │ ├── _defenses.pug │ │ │ │ ├── _armor.pug │ │ │ │ ├── _spells.pug │ │ │ │ └── _attributes.pug │ │ └── settings │ │ │ └── _settings.pug │ │ ├── scaffold │ │ ├── docs.pug │ │ ├── _kpug.pug │ │ ├── listeners.js │ │ └── kvariables.js │ │ ├── assets │ │ ├── 123D.png │ │ ├── 123_Stars.png │ │ ├── 123_Stars.psd │ │ ├── 123_Stars_BW.png │ │ ├── spell_star_01.png │ │ ├── spell_star_02.png │ │ ├── spell_star_03.png │ │ ├── paper-background.png │ │ ├── 123_golden_Stars_01.png │ │ ├── 123_golden_Stars_02.png │ │ ├── 123_golden_Stars_03.png │ │ ├── Heroes_Journey_Logo.png │ │ ├── images │ │ │ └── 123_golden_Stars_02.png │ │ └── paper-background-dark-mode.png │ │ ├── sheet.json │ │ ├── mixins │ │ ├── scss │ │ │ ├── _settings.scss │ │ │ ├── _archetype.scss │ │ │ ├── _defenses.scss │ │ │ ├── _roll20clear.scss │ │ │ ├── _header.scss │ │ │ ├── _nav.scss │ │ │ ├── _weapons_armor.scss │ │ │ ├── _attributes.scss │ │ │ └── _spells.scss │ │ └── _sheetmixins.pug │ │ ├── javascript │ │ └── variables.js │ │ └── system.scss │ ├── 2 First Code │ └── thj2e │ │ ├── README.md │ │ ├── system.scss │ │ ├── articles │ │ ├── npc │ │ │ └── _npc.pug │ │ ├── settings │ │ │ └── _settings.pug │ │ └── character │ │ │ ├── sections │ │ │ ├── _armor.pug │ │ │ ├── _archetype.pug │ │ │ ├── _equipment.pug │ │ │ ├── _lineage.pug │ │ │ ├── _spells.pug │ │ │ ├── _weapons.pug │ │ │ ├── _header.pug │ │ │ ├── _defenses.pug │ │ │ └── _attributes.pug │ │ │ └── _character.pug │ │ ├── mixins │ │ └── _sheetmixins.pug │ │ ├── rolltemplates │ │ └── _thj2etemplate.pug │ │ ├── translation.json │ │ ├── scaffold │ │ ├── _kpug.pug │ │ ├── docs.pug │ │ ├── listeners.js │ │ └── kvariables.js │ │ ├── assets │ │ └── Heroes_Journey_Logo.png │ │ └── sheet.json │ ├── 4 Layout CSS and SCSS │ └── thj2e │ │ ├── README.md │ │ ├── articles │ │ ├── npc │ │ │ └── _npc.pug │ │ ├── settings │ │ │ └── _settings.pug │ │ └── character │ │ │ ├── _character.pug │ │ │ └── sections │ │ │ ├── _archetype.pug │ │ │ ├── _lineage.pug │ │ │ ├── _equipment.pug │ │ │ ├── _spells.pug │ │ │ ├── _armor.pug │ │ │ ├── _header.pug │ │ │ ├── _defenses.pug │ │ │ ├── _attributes.pug │ │ │ └── _weapons.pug │ │ ├── translation.json │ │ ├── rolltemplates │ │ └── _thj2etemplate.pug │ │ ├── scaffold │ │ ├── _kpug.pug │ │ ├── docs.pug │ │ ├── listeners.js │ │ └── kvariables.js │ │ ├── mixins │ │ ├── scss │ │ │ ├── _rolltemplate.scss │ │ │ ├── _header.scss │ │ │ └── _generalsetup.scss │ │ └── _sheetmixins.pug │ │ ├── system.scss │ │ ├── assets │ │ └── Heroes_Journey_Logo.png │ │ └── sheet.json │ ├── 5 Finding our Flair! │ └── thj2e │ │ ├── README.md │ │ ├── articles │ │ ├── npc │ │ │ └── _npc.pug │ │ ├── character │ │ │ ├── _character.pug │ │ │ └── sections │ │ │ │ ├── _archetype.pug │ │ │ │ ├── _lineage.pug │ │ │ │ ├── _equipment.pug │ │ │ │ ├── _header.pug │ │ │ │ ├── _defenses.pug │ │ │ │ ├── _armor.pug │ │ │ │ ├── _attributes.pug │ │ │ │ └── _spells.pug │ │ └── settings │ │ │ └── _settings.pug │ │ ├── rolltemplates │ │ └── _thj2etemplate.pug │ │ ├── javascript │ │ └── variables.js │ │ ├── scaffold │ │ ├── _kpug.pug │ │ ├── docs.pug │ │ ├── listeners.js │ │ └── kvariables.js │ │ ├── mixins │ │ ├── scss │ │ │ ├── _rolltemplate.scss │ │ │ ├── _settings.scss │ │ │ ├── _archetype.scss │ │ │ ├── _defenses.scss │ │ │ ├── _roll20clear.scss │ │ │ ├── _header.scss │ │ │ ├── _nav.scss │ │ │ ├── _weapons_armor.scss │ │ │ ├── _spells.scss │ │ │ └── _attributes.scss │ │ └── _sheetmixins.pug │ │ ├── assets │ │ ├── 123D.png │ │ ├── 123_Stars.png │ │ ├── 123_Stars.psd │ │ ├── 123_Stars_BW.png │ │ ├── paper-background.png │ │ ├── Heroes_Journey_Logo.png │ │ └── paper-background-dark-mode.png │ │ ├── sheet.json │ │ ├── system.scss │ │ └── translation.json │ ├── 3 Repeating Sections and Javascript │ └── thj2e │ │ ├── README.md │ │ ├── system.scss │ │ ├── articles │ │ ├── npc │ │ │ └── _npc.pug │ │ ├── settings │ │ │ └── _settings.pug │ │ └── character │ │ │ ├── sections │ │ │ ├── _spells.pug │ │ │ ├── _equipment.pug │ │ │ ├── _archetype.pug │ │ │ ├── _lineage.pug │ │ │ ├── _armor.pug │ │ │ ├── _header.pug │ │ │ ├── _defenses.pug │ │ │ ├── _attributes.pug │ │ │ └── _weapons.pug │ │ │ └── _character.pug │ │ ├── translation.json │ │ ├── rolltemplates │ │ └── _thj2etemplate.pug │ │ ├── scaffold │ │ ├── _kpug.pug │ │ ├── docs.pug │ │ ├── listeners.js │ │ └── kvariables.js │ │ ├── assets │ │ └── Heroes_Journey_Logo.png │ │ ├── sheet.json │ │ └── mixins │ │ └── _sheetmixins.pug │ ├── assets │ └── wireframe.png │ └── README.md ├── .github ├── FUNDING.yml └── workflows │ └── main.yml ├── JS Snippets └── parseRepeatName │ └── parseRepeatName.js ├── LICENSE └── HTML & CSS Snippets └── Fill to left using in-range ├── Fill to left using in-range.html └── Fill to left using in-range.css /test.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/source/index.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/source/js.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/source/pug.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Template v2/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/system.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Template v2/scaffold/_k.scss: -------------------------------------------------------------------------------- 1 | @use 'tabs/_tabs.scss'; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/npc/_npc.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/mixins/_sheetmixins.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/npc/_npc.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [Kurohyou] 2 | patreon: kurohyoustudios 3 | -------------------------------------------------------------------------------- /K_Scaffold/Template v2/scaffold/_scaffold.scss: -------------------------------------------------------------------------------- 1 | @use 'tabs/_tabs.scss'; -------------------------------------------------------------------------------- /docs/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "liveServer.settings.port": 5501 3 | } -------------------------------------------------------------------------------- /docs/source/clear.scss: -------------------------------------------------------------------------------- 1 | body *:where(:not(script)){ 2 | all:unset; 3 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/settings/_settings.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/rolltemplates/_thj2etemplate.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/npc/_npc.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/npc/_npc.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/assets/css/clear.css: -------------------------------------------------------------------------------- 1 | body *:where(:not(script)) { 2 | all: unset; 3 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_armor.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/system.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } -------------------------------------------------------------------------------- /K_Scaffold/Template v2/Mixins/_Sheet Mixins.pug: -------------------------------------------------------------------------------- 1 | //- File for system specific mixins 2 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_archetype.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_equipment.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_lineage.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_spells.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_weapons.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/settings/_settings.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/rolltemplates/_thj2etemplate.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/rolltemplates/_thj2etemplate.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/npc/_npc.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Template v2/Mixins/_rolltemplate.scss: -------------------------------------------------------------------------------- 1 | /* 2 | Roll Template 3 | #rolltemplate 4 | */ 5 | -------------------------------------------------------------------------------- /K_Scaffold/Template v2/Mixins/_systemplaceholders.scss: -------------------------------------------------------------------------------- 1 | @forward '_genericplaceholders.scss'; 2 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/scaffold/docs.pug: -------------------------------------------------------------------------------- 1 | include _kpug.pug 2 | +kscript(true) -------------------------------------------------------------------------------- /K_Scaffold/Template v2/scaffold/_kpug.pug: -------------------------------------------------------------------------------- 1 | include _htmlelements.pug 2 | include _rolltemplate_mixins.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/settings/_settings.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/rolltemplates/_thj2etemplate.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/sections/_spells.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/sections/_equipment.pug: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/javascript/variables.js: -------------------------------------------------------------------------------- 1 | k.version = 0; 2 | k.sheetName = "THJ2e"; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/scaffold/_kpug.pug: -------------------------------------------------------------------------------- 1 | include _htmlelements.pug 2 | include _rolltemplate_mixins.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/scaffold/_kpug.pug: -------------------------------------------------------------------------------- 1 | include _htmlelements.pug 2 | include _rolltemplate_mixins.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/scaffold/_kpug.pug: -------------------------------------------------------------------------------- 1 | include _htmlelements.pug 2 | include _rolltemplate_mixins.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/scaffold/_kpug.pug: -------------------------------------------------------------------------------- 1 | include _htmlelements.pug 2 | include _rolltemplate_mixins.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/scaffold/_kpug.pug: -------------------------------------------------------------------------------- 1 | include _htmlelements.pug 2 | include _rolltemplate_mixins.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/assets/wireframe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/assets/wireframe.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/scaffold/docs.pug: -------------------------------------------------------------------------------- 1 | include _kpug.pug 2 | +textarea({name:'kjsdocs'}) 3 | +textarea({name:'kpugdocs'}) 4 | +kscript(true) -------------------------------------------------------------------------------- /K_Scaffold/Template v2/Javascript/updaters.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | // Functions to update 4 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/scaffold/docs.pug: -------------------------------------------------------------------------------- 1 | include _kpug.pug 2 | +textarea({name:'kjsdocs'}) 3 | +textarea({name:'kpugdocs'}) 4 | +kscript(true) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/scaffold/docs.pug: -------------------------------------------------------------------------------- 1 | include _kpug.pug 2 | +textarea({name:'kjsdocs'}) 3 | +textarea({name:'kpugdocs'}) 4 | +kscript(true) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/mixins/scss/_rolltemplate.scss: -------------------------------------------------------------------------------- 1 | //Styling for our rolltemplate. This won't be written yet. 2 | @use '_mixinsandplaceholders'; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_rolltemplate.scss: -------------------------------------------------------------------------------- 1 | //Styling for our rolltemplate. This won't be written yet. 2 | @use '_mixinsandplaceholders'; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123D.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/scaffold/docs.pug: -------------------------------------------------------------------------------- 1 | include _kpug.pug 2 | +textarea({name:'kjsdocs'}) 3 | +textarea({name:'kpugdocs'}) 4 | +kscript(true) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_Stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_Stars.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_Stars.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_Stars.psd -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_Stars_BW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_Stars_BW.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/123D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/123D.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/spell_star_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/spell_star_01.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/spell_star_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/spell_star_02.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/spell_star_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/spell_star_03.png -------------------------------------------------------------------------------- /K_Scaffold/Template v2/scaffold/tabs/_tabs.scss: -------------------------------------------------------------------------------- 1 | .tabs { 2 | .tabs__body { 3 | .tabs__container:not(.k-active-tab) { 4 | display: none ! important; 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/paper-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/paper-background.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/123_Stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/123_Stars.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/123_Stars.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/123_Stars.psd -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_golden_Stars_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_golden_Stars_01.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_golden_Stars_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_golden_Stars_02.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_golden_Stars_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/123_golden_Stars_03.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/Heroes_Journey_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/Heroes_Journey_Logo.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/assets/Heroes_Journey_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/2 First Code/thj2e/assets/Heroes_Journey_Logo.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/123_Stars_BW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/123_Stars_BW.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/system.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/scss/_mixinsandplaceholders'; 2 | @use 'mixins/scss/_generalsetup'; 3 | @use 'mixins/scss/_header'; 4 | @use 'mixins/scss/_rolltemplate'; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/paper-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/paper-background.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/images/123_golden_Stars_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/images/123_golden_Stars_02.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/paper-background-dark-mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/assets/paper-background-dark-mode.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/assets/Heroes_Journey_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/assets/Heroes_Journey_Logo.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/Heroes_Journey_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/Heroes_Journey_Logo.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/paper-background-dark-mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/assets/paper-background-dark-mode.png -------------------------------------------------------------------------------- /K_Scaffold/Template v2/sheet.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": "system.html", 3 | "css": "style.css", 4 | "authors": "Scott Casey", 5 | "roll20userid": "459831", 6 | "preview": ".jpg", 7 | "instructions": "", 8 | "legacy": false 9 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/assets/Heroes_Journey_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kurohyou/Roll20-Snippets/HEAD/K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/assets/Heroes_Journey_Logo.png -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/sheet.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": "system.html", 3 | "css": "system.css", 4 | "authors": "Scott Casey", 5 | "roll20userid": "459831", 6 | "preview": ".jpg", 7 | "instructions": "", 8 | "legacy": false 9 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/sheet.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": "system.html", 3 | "css": "system.css", 4 | "authors": "Scott Casey", 5 | "roll20userid": "459831", 6 | "preview": ".jpg", 7 | "instructions": "", 8 | "legacy": false 9 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/sheet.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": "system.html", 3 | "css": "system.css", 4 | "authors": "Scott Casey", 5 | "roll20userid": "459831", 6 | "preview": ".jpg", 7 | "instructions": "", 8 | "legacy": false 9 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/sheet.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": "system.html", 3 | "css": "system.css", 4 | "authors": "Scott Casey", 5 | "roll20userid": "459831", 6 | "preview": ".jpg", 7 | "instructions": "", 8 | "legacy": false 9 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/sheet.json: -------------------------------------------------------------------------------- 1 | { 2 | "html": "system.html", 3 | "css": "system.css", 4 | "authors": "Scott Casey", 5 | "roll20userid": "459831", 6 | "preview": ".jpg", 7 | "instructions": "", 8 | "legacy": false 9 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_settings.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #settings{ 3 | display:flex; 4 | flex-wrap:wrap; 5 | gap:var(--half-gap); 6 | h2{ 7 | width:100%; 8 | } 9 | .input-label *{ 10 | width:auto; 11 | } 12 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_settings.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #settings{ 3 | display:flex; 4 | flex-wrap:wrap; 5 | gap:var(--half-gap); 6 | h2{ 7 | width:100%; 8 | } 9 | .input-label *{ 10 | width:auto; 11 | } 12 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/javascript/variables.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | k.version = 0; 4 | k.sheetName = "THJ2e"; 5 | 6 | //The attributes that are needed for all roll functions. 7 | const rollGet = ['roll_state','whisper']; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/_sheetmixins.pug: -------------------------------------------------------------------------------- 1 | //- A mixin that will create a checkbox for use in controlling the display of extra information on an item. Takes an optional name property to override the name of the checkbox. 2 | mixin collapse(name='collapse') 3 | +checkbox({name,value:1,class:'collapse'}) 4 | //- End Mixin -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/mixins/_sheetmixins.pug: -------------------------------------------------------------------------------- 1 | //- A mixin that will create a checkbox for use in controlling the display of extra information on an item. Takes an optional name property to override the name of the checkbox. 2 | mixin collapse(name='collapse') 3 | +checkbox({name,value:1,class:'collapse'}) 4 | //- End Mixin -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/_sheetmixins.pug: -------------------------------------------------------------------------------- 1 | //- A mixin that will create a checkbox for use in controlling the display of extra information on an item. Takes an optional name property to override the name of the checkbox. 2 | mixin collapse(name='collapse') 3 | +checkbox({name,value:1,class:'collapse'}) 4 | //- End Mixin -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/mixins/_sheetmixins.pug: -------------------------------------------------------------------------------- 1 | //- A mixin that will create a checkbox for use in controlling the display of extra information on an item. Takes an optional name property to override the name of the checkbox. 2 | mixin collapse(name='collapse') 3 | +checkbox({name,value:1,class:'collapse'}) 4 | //- End Mixin -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_archetype.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #archetype{ 3 | .repitem{ 4 | display:grid; 5 | grid-template-columns:1fr auto; 6 | gap:var(--tiny-gap); 7 | &:not(:last-child){ 8 | border-bottom:1px dashed black; 9 | padding-bottom:var(--half-gap); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_archetype.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #archetype{ 3 | .repitem{ 4 | display:grid; 5 | grid-template-columns:1fr auto; 6 | gap:var(--tiny-gap); 7 | &:not(:last-child){ 8 | border-bottom:1px dashed black; 9 | padding-bottom:var(--half-gap); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_defenses.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #defenses{ 3 | display:grid; 4 | grid-template-columns:1fr repeat(2,auto); 5 | gap:var(--half-gap); 6 | .boxed{ 7 | display:grid; 8 | grid-template-columns:1fr auto 1fr; 9 | align-items:center; 10 | } 11 | >:not(:where(input,div)){ 12 | justify-self:start; 13 | } 14 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_defenses.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #defenses{ 3 | display:grid; 4 | grid-template-columns:1fr repeat(2,auto); 5 | gap:var(--half-gap); 6 | .boxed{ 7 | display:grid; 8 | grid-template-columns:1fr auto 1fr; 9 | align-items:center; 10 | } 11 | >:not(:where(input,div)){ 12 | justify-self:start; 13 | } 14 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/_character.pug: -------------------------------------------------------------------------------- 1 | article#character.character 2 | include sections/_header.pug 3 | include sections/_attributes.pug 4 | include sections/_defenses.pug 5 | include sections/_weapons.pug 6 | include sections/_armor.pug 7 | include sections/_lineage.pug 8 | include sections/_archetype.pug 9 | include sections/_equipment.pug 10 | include sections/_spells.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/system.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/scss/_roll20clear'; 2 | @use 'mixins/scss/_generalsetup'; 3 | @use 'mixins/scss/_nav'; 4 | @use 'mixins/scss/_settings'; 5 | @use 'mixins/scss/_header'; 6 | @use 'mixins/scss/_attributes'; 7 | @use 'mixins/scss/_defenses'; 8 | @use 'mixins/scss/_weapons_armor'; 9 | @use 'mixins/scss/_archetype'; 10 | @use 'mixins/scss/_spells'; 11 | @use 'mixins/scss/_rolltemplate'; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/_character.pug: -------------------------------------------------------------------------------- 1 | article#character.character 2 | include sections/_header.pug 3 | include sections/_attributes.pug 4 | include sections/_defenses.pug 5 | include sections/_weapons.pug 6 | include sections/_armor.pug 7 | include sections/_lineage.pug 8 | include sections/_archetype.pug 9 | include sections/_equipment.pug 10 | include sections/_spells.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/_character.pug: -------------------------------------------------------------------------------- 1 | article#character.character.nav-display 2 | include sections/_header.pug 3 | include sections/_attributes.pug 4 | include sections/_defenses.pug 5 | include sections/_armor.pug 6 | include sections/_weapons.pug 7 | include sections/_lineage.pug 8 | include sections/_archetype.pug 9 | include sections/_equipment.pug 10 | include sections/_spells.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/system.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/scss/_roll20clear'; 2 | @use 'mixins/scss/_generalsetup'; 3 | @use 'mixins/scss/_nav'; 4 | @use 'mixins/scss/_settings'; 5 | @use 'mixins/scss/_header'; 6 | @use 'mixins/scss/_attributes'; 7 | @use 'mixins/scss/_defenses'; 8 | @use 'mixins/scss/_weapons_armor'; 9 | @use 'mixins/scss/_archetype'; 10 | @use 'mixins/scss/_spells'; 11 | @use 'mixins/scss/_rolltemplate'; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/_character.pug: -------------------------------------------------------------------------------- 1 | article#character.character.nav-display 2 | include sections/_header.pug 3 | include sections/_attributes.pug 4 | include sections/_defenses.pug 5 | include sections/_armor.pug 6 | include sections/_weapons.pug 7 | include sections/_lineage.pug 8 | include sections/_archetype.pug 9 | include sections/_equipment.pug 10 | include sections/_spells.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/_character.pug: -------------------------------------------------------------------------------- 1 | article#character.character 2 | include sections/_header.pug 3 | include sections/_attributes.pug 4 | include sections/_defenses.pug 5 | include sections/_weapons.pug 6 | include sections/_armor.pug 7 | include sections/_lineage.pug 8 | include sections/_archetype.pug 9 | include sections/_equipment.pug 10 | include sections/_spells.pug -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_archetype.pug: -------------------------------------------------------------------------------- 1 | section#archetype.archetype.paper-background 2 | h4(data-i18n='archetype abilities') 3 | +fieldset({name:'archetype'}) 4 | +collapse 5 | +text({name:'name',class:'underlined'}) 6 | +number({name:'rating',class:'underlined'}) 7 | .headed-textarea.notes.expanded 8 | +h5({'data-i18n':'notes'}) 9 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/sections/_archetype.pug: -------------------------------------------------------------------------------- 1 | section#archetype.archetype.paper-background 2 | h4(data-i18n='archetype abilities') 3 | +fieldset({name:'archetype'}) 4 | +collapse() 5 | +text({name:'name',class:'underlined'}) 6 | +number({name:'rating',class:'underlined'}) 7 | .headed-textarea.notes.expanded 8 | +h5({'data-i18n':'notes'}) 9 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Template v2/Javascript/variables.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | //Sheet Variables 4 | //const actionAttributes = ['body','mind','spirit','initiative','repeating_skill_$x_roll','repeating_weapon_$x_roll','situational_awareness','remnant_initiative','assault_roll','strike_roll','motion_roll','repeating_remnant-weapon_$x_roll','repeating_drone_$x_assault','repeating_drone_$x_strike']; 5 | k.sheetName = 'demo-system'; 6 | k.version = 0; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_roll20clear.scss: -------------------------------------------------------------------------------- 1 | // Clears the default Roll20 styling from all elements so that we can style them as we want more easily. We are using 3 classes here because we have to use at least that level of specificity to overcome many of the default Roll20 styles. 2 | .ui-dialog{ 3 | .tab-content .charsheet{ 4 | select, 5 | textarea, 6 | input, 7 | .uneditable-input, 8 | label, 9 | button{ 10 | all: initial; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_roll20clear.scss: -------------------------------------------------------------------------------- 1 | // Clears the default Roll20 styling from all elements so that we can style them as we want more easily. We are using 3 classes here because we have to use at least that level of specificity to overcome many of the default Roll20 styles. 2 | .ui-dialog{ 3 | .tab-content .charsheet{ 4 | select, 5 | textarea, 6 | input, 7 | .uneditable-input, 8 | label, 9 | button{ 10 | all: initial; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/mixins/scss/_header.scss: -------------------------------------------------------------------------------- 1 | //This file will define how our header section is laid out. 2 | @use '_mixinsandplaceholders'; 3 | #character-header{ 4 | display:grid; 5 | grid-template-columns:14rem; 6 | grid-auto-columns: 1fr; 7 | grid-auto-flow: column; 8 | .character-details{ 9 | display:grid; 10 | grid-template-columns:repeat(4,1fr); 11 | gap:var(--half-gap); 12 | > :not(:is(.span-2,.span-all)){ 13 | justify-self:end; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_lineage.pug: -------------------------------------------------------------------------------- 1 | section#lineage.lineage.paper-background 2 | h4(data-i18n='lineage abilities') 3 | +fieldset({name:'lineage'}) 4 | //- This will be our collapse control so that users can shrink their abilities down when they don't need all the information 5 | +collapse 6 | +text({name:'name',class:'underlined'}) 7 | .headed-textarea.notes.expanded 8 | +h5({'data-i18n':'notes'}) 9 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_header.scss: -------------------------------------------------------------------------------- 1 | //This file will define how our header section is laid out. 2 | @use '_mixinsandplaceholders'; 3 | #character-header{ 4 | display:grid; 5 | gap:var(--half-gap); 6 | grid-template-columns:14rem; 7 | grid-auto-columns: 1fr; 8 | grid-auto-flow: column; 9 | .character-details{ 10 | display:grid; 11 | grid-template-columns:repeat(4,1fr); 12 | gap:var(--half-gap); 13 | > :not(:is(.span-2,.span-all)){ 14 | justify-self:end; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/sections/_lineage.pug: -------------------------------------------------------------------------------- 1 | section#lineage.lineage.paper-background 2 | h4(data-i18n='lineage abilities') 3 | +fieldset({name:'lineage'}) 4 | //- This will be our collapse control so that users can shrink their abilities down when they don't need all the information 5 | +collapse() 6 | +text({name:'name',class:'underlined'}) 7 | .headed-textarea.notes.expanded 8 | +h5({'data-i18n':'notes'}) 9 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_header.scss: -------------------------------------------------------------------------------- 1 | //This file will define how our header section is laid out. 2 | @use '_mixinsandplaceholders'; 3 | #character-header{ 4 | display:grid; 5 | gap:var(--half-gap); 6 | grid-template-columns:14rem; 7 | grid-auto-columns: 1fr; 8 | grid-auto-flow: column; 9 | .character-details{ 10 | display:grid; 11 | grid-template-columns:repeat(4,1fr); 12 | gap:var(--half-gap); 13 | > :not(:is(.span-2,.span-all)){ 14 | justify-self:end; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/sections/_archetype.pug: -------------------------------------------------------------------------------- 1 | section(aria-labelledby='archetype-header')#archetype.archetype.paper-background.repeating-container 2 | h3(data-i18n='archetype abilities')#archetype-header 3 | +customControlFieldset({name:'archetype'}) 4 | +collapse 5 | +text({name:'name',class:'underlined','data-i18n-placeholder':'ability name'}) 6 | +number({name:'rating',class:'underlined'}) 7 | .headed-textarea.description.expanded 8 | +h5({'data-i18n':'description'}) 9 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/sections/_archetype.pug: -------------------------------------------------------------------------------- 1 | section(aria-labelledby='archetype-header')#archetype.archetype.paper-background.repeating-container 2 | h3(data-i18n='archetype abilities')#archetype-header 3 | +customControlFieldset({name:'archetype'}) 4 | +collapse 5 | +text({name:'name',class:'underlined','data-i18n-placeholder':'ability name'}) 6 | +number({name:'rating',class:'underlined'}) 7 | .headed-textarea.description.expanded 8 | +h5({'data-i18n':'description'}) 9 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_nav.scss: -------------------------------------------------------------------------------- 1 | ul.nav-tabs.nav{ 2 | position:sticky; 3 | top:0; 4 | background-color:var(--backColor); 5 | z-index:9999; 6 | margin-bottom:0px; 7 | } 8 | #main-nav{ 9 | display:flex; 10 | align-items: center; 11 | gap: 2px; 12 | position:sticky; 13 | top:40px; 14 | background-color:var(--backColor); 15 | padding:var(--tiny-gap) 0 0; 16 | margin-bottom:var(--big-gap); 17 | border-bottom:1px solid #dddddd; 18 | z-index:999; 19 | box-shadow:30px 0 var(--backColor),-30px 0 var(--backColor); 20 | color:var(--fontColor); 21 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_nav.scss: -------------------------------------------------------------------------------- 1 | ul.nav-tabs.nav{ 2 | position:sticky; 3 | top:0; 4 | background-color:var(--backColor); 5 | z-index:9999; 6 | margin-bottom:0px; 7 | } 8 | #main-nav{ 9 | display:flex; 10 | flex-wrap:wrap; 11 | align-items: center; 12 | gap: var(--tiny-gap); 13 | position:sticky; 14 | top:40px; 15 | background-color:var(--backColor); 16 | padding:var(--tiny-gap) 0 0; 17 | margin-bottom:var(--big-gap); 18 | border-bottom:1px solid #dddddd; 19 | z-index:999; 20 | box-shadow:30px 0 var(--backColor),-30px 0 var(--backColor); 21 | color:var(--fontColor); 22 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_weapons_armor.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #weapons, 3 | #armor{ 4 | display:grid; 5 | gap:var(--half-gap); 6 | .repitem{ 7 | display:grid; 8 | grid-template-columns:repeat(2,1fr); 9 | gap:var(--tiny-gap); 10 | .name{ 11 | display:flex; 12 | gap:var(--tiny-gap); 13 | align-items: center; 14 | input[type='text']{ 15 | flex:1 1 0; 16 | width:0; 17 | } 18 | } 19 | &:not(:last-child){ 20 | border-bottom:1px dashed black; 21 | padding-bottom:var(--half-gap); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_weapons_armor.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #weapons, 3 | #armor{ 4 | display:grid; 5 | gap:var(--half-gap); 6 | .repitem{ 7 | display:grid; 8 | grid-template-columns:repeat(2,1fr); 9 | gap:var(--tiny-gap); 10 | .name{ 11 | display:flex; 12 | gap:var(--tiny-gap); 13 | align-items: center; 14 | input[type='text']{ 15 | flex:1 1 0; 16 | width:0; 17 | } 18 | } 19 | &:not(:last-child){ 20 | border-bottom:1px dashed black; 21 | padding-bottom:var(--half-gap); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/sections/_lineage.pug: -------------------------------------------------------------------------------- 1 | section(aria-labelledby='lineage-header')#lineage.lineage.paper-background.repeating-container 2 | h3(data-i18n='lineage abilities')#lineage-header 3 | +customControlFieldset({name:'lineage'}) 4 | //- This will be our collapse control so that users can shrink their abilities down when they don't need all the information 5 | +collapse 6 | +text({name:'name',class:'underlined','data-i18n-placeholder':'ability name'}) 7 | .headed-textarea.description.expanded 8 | +h5({'data-i18n':'description'}) 9 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /docs/assets/css/prettify.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.clo,.opn,.pun{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.kwd,.tag,.typ{font-weight:700}.str{color:#060}.kwd{color:#006}.com{color:#600;font-style:italic}.typ{color:#404}.lit{color:#044}.clo,.opn,.pun{color:#440}.tag{color:#006}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Build & deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | build: 13 | name: Build 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: Checkout code 18 | uses: actions/checkout@v2 19 | 20 | - name: Install Node.js 21 | uses: actions/setup-node@v1 22 | with: 23 | node-version: 13.x 24 | 25 | - name: Install NPM packages 26 | run: npm ci 27 | 28 | - name: Build project 29 | run: npm run build 30 | 31 | - name: Test 32 | run: npm test 33 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/sections/_lineage.pug: -------------------------------------------------------------------------------- 1 | section(aria-labelledby='lineage-header')#lineage.lineage.paper-background.repeating-container 2 | h3(data-i18n='lineage abilities')#lineage-header 3 | +customControlFieldset({name:'lineage'}) 4 | //- This will be our collapse control so that users can shrink their abilities down when they don't need all the information 5 | +collapse 6 | +text({name:'name',class:'underlined','data-i18n-placeholder':'ability name'}) 7 | .headed-textarea.description.expanded 8 | +h5({'data-i18n':'description'}) 9 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /docs/assets/css/sons-of-obsidian.css: -------------------------------------------------------------------------------- 1 | .str{color:#EC7600}.kwd{color:#93C763}.com{color:#66747B}.typ{color:#678CB1}.lit{color:#FACD22}.pln,.pun{color:#F1F2F3}.tag{color:#8AC763}.atn{color:#E0E2E4}.atv{color:#EC7600}.dec{color:purple}pre.prettyprint{border:0 solid #888}ol.linenums{margin-top:0;margin-bottom:0}.prettyprint{background:#000}li.L0,li.L1,li.L2,li.L3,li.L4,li.L5,li.L6,li.L7,li.L8,li.L9{color:#555;list-style-type:decimal}li.L1,li.L3,li.L5,li.L7,li.L9{background:#111}@media print{.kwd,.tag,.typ{font-weight:700}.str{color:#060}.kwd{color:#006}.com{color:#600;font-style:italic}.typ{color:#404}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006}.atn{color:#404}.atv{color:#060}} -------------------------------------------------------------------------------- /docs/source/_mixins.scss: -------------------------------------------------------------------------------- 1 | %generalHeader{ 2 | text-transform:capitalize; 3 | font-family:Aldrich; 4 | } 5 | %h2{ 6 | @extend %generalHeader; 7 | font-size:1.75rem 8 | } 9 | %h3{ 10 | @extend %generalHeader; 11 | font-size:1.5rem; 12 | } 13 | %h4{ 14 | @extend %generalHeader; 15 | font-size:1.25rem; 16 | } 17 | %h5{ 18 | @extend %generalHeader; 19 | font-size:1rem; 20 | } 21 | %normalText{ 22 | font-size:1rem; 23 | font-family:"Exo 2"; 24 | color:var(--primaryTextColor); 25 | } 26 | %hfStyle{ 27 | padding:var(--mainPadding); 28 | background-color:var(--hfBackground); 29 | *{ 30 | color:var(--hfColor); 31 | } 32 | } 33 | %hfGeneral{ 34 | @extend %hfStyle; 35 | display:grid; 36 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/README.md: -------------------------------------------------------------------------------- 1 | # K-scaffold Tutorial 2 | This tutorial is intended to demonstrate how to use the K-scaffold to build a character sheet on Roll20 and was originally written as a series of blog posts. The tutorial is split up into several files reflecting the state of the code at the end of each blog post. Once the tutorial sheet is completed, it will be in a folder called `final_code`. The code is left in the multiple states to demonstrate how a character sheet's code evolves over the course of a project. To start your own project, it is recommended that you download the current version of the K-scaffold from the [template v2 directory](https://github.com/Kurohyou/Roll20-Snippets/tree/main/K_Scaffold/Template%20v2). -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_equipment.pug: -------------------------------------------------------------------------------- 1 | - const coins = ['gp','sp','cp'] 2 | section#equipment.equipment.paper-background 3 | .wealth 4 | each name in coins 5 | +input-label({ 6 | label:name, 7 | inputObj:{name,type:'number',class:'underlined'} 8 | }) 9 | .other-treasures.headed-textarea 10 | +h5({'data-i18n':'other treasures'}) 11 | +adaptiveTextarea({name:'other treasures',class:'underlined'}) 12 | +fieldset({name:'equipment'}) 13 | +collapse 14 | +text({name:'name',class:'underlined',role:'heading','aria-level':5}) 15 | .notes.headed-textarea.expanded 16 | +h5({'data-i18n':'notes'}) 17 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_spells.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #spells{ 3 | display:grid; 4 | .repitem{ 5 | display:grid; 6 | gap:var(--tiny-gap); 7 | grid-template-columns:1fr auto; 8 | .name{ 9 | display:grid; 10 | grid-template-columns:[roller-start] 1.4rem [input-start roller-end] 1fr [input-end] auto; 11 | grid-template-rows:[input-start roller-start] auto[input-end roller-end]; 12 | gap:var(--tiny-gap); 13 | align-items: center; 14 | input[type='text']{ 15 | grid-area:input; 16 | width:100%; 17 | } 18 | } 19 | .roller-container{ 20 | grid-area:roller; 21 | box-sizing:border-box; 22 | } 23 | &:not(:last-child){ 24 | border-bottom:1px dashed black; 25 | padding-bottom:var(--half-gap); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_spells.pug: -------------------------------------------------------------------------------- 1 | - const spellLevels = ['apprentice','journeyman','master'] 2 | section#spells.spells.paper-background 3 | each level in spellLevels 4 | .input-label.input-label--dual 5 | label(for=`${level}-current` data-i18n=`${level} per day`) 6 | +number({name:`${level} per day`,class:'underlined',id:`${level}-current`}) 7 | span.separator / 8 | +number({name:`${level} per day max`,class:'underlined'}) 9 | +fieldset({name:'spells'}) 10 | +collapse 11 | +text({name:'name',class:'underlined',role:'heading','aria-level':5}) 12 | +select({name:'level',class:'underlined'}) 13 | each value in spellLevels 14 | +option({value,'data-i18n':value}) 15 | .headed-textarea.notes.expanded 16 | +h5({'data-i18n':'notes'}) 17 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/sections/_equipment.pug: -------------------------------------------------------------------------------- 1 | - const coins = ['gp','sp','cp'] 2 | section(aria-labelledby="equipment-header")#equipment.equipment.paper-background.repeating-container 3 | h3(data-i18n="equipment")#equipment-header 4 | .wealth 5 | each name in coins 6 | +input-label({ 7 | label:name, 8 | inputObj:{name,type:'number',class:'underlined'}, 9 | spanObj:{class:'uppercase'}}) 10 | .other-treasures.headed-textarea 11 | +h5({'data-i18n':'other treasures'}) 12 | +adaptiveTextarea({name:'other treasures',class:'underlined'}) 13 | +customControlFieldset({name:'equipment'}) 14 | +collapse 15 | +text({name:'name',class:'underlined',role:'heading','aria-level':5}) 16 | .description.headed-textarea.expanded 17 | +h5({'data-i18n':'description'}) 18 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /JS Snippets/parseRepeatName/parseRepeatName.js: -------------------------------------------------------------------------------- 1 | /* 2 | parseRepeatName takes a string name of a repeating attribute (e.g. repeating_inventory_-mjesdf09-32Z_weight). It then returns the section name (repeating_inventory), the row's ID (-mjesdf09-32Z), and the name of the field itself (weight). An example of how to call it is included immediately after it. This makes it easy to figure out what action needs to be taken and/or which section and row in that section needs to be worked on. If passed a regular attribute name (e.g. strength), it simply returns the attribute name. 3 | */ 4 | const parseRepeatName = function(string){ 5 | let match = string.match(/(?:(repeating_[^_]+)_([^_]+)_)?(.+)/); 6 | match.shift(); 7 | return match; 8 | }; 9 | let [section,rowID,field] = parseRepeatName('repeating_inventory_-mjesdf09-32Z_weight'); 10 | /* 11 | section => repeating_inventory 12 | rowID => -mjesdf09-32Z 13 | field => weight 14 | */ -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/sections/_equipment.pug: -------------------------------------------------------------------------------- 1 | - const coins = ['gp','sp','cp'] 2 | section(aria-labelledby="equipment-header")#equipment.equipment.paper-background.repeating-container 3 | h3(data-i18n="equipment")#equipment-header 4 | .wealth 5 | each name in coins 6 | +input-label({ 7 | label:name, 8 | inputObj:{name,type:'number',class:'underlined'}, 9 | spanObj:{class:'uppercase'}}) 10 | .other-treasures.headed-textarea 11 | +h5({'data-i18n':'other treasures'}) 12 | +adaptiveTextarea({name:'other treasures',class:'underlined'}) 13 | +customControlFieldset({name:'equipment'}) 14 | +collapse 15 | +text({name:'name',class:'underlined',role:'heading','aria-level':5}) 16 | .description.headed-textarea.expanded 17 | +h5({'data-i18n':'description'}) 18 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-rd.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2012 Jeffrey Arnold 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["lit",/^\\(?:cr|l?dots|R|tab)\b/],["kwd",/^\\[a-zA-Z@]+/],["kwd",/^#(?:ifn?def|endif)/],["pln",/^\\[{}]/],["pun",/^[{}()\[\]]+/]]),["Rd","rd"]); 18 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/mixins/scss/_attributes.scss: -------------------------------------------------------------------------------- 1 | //This file will define how our attribute section is laid out. 2 | @use '_mixinsandplaceholders'; 3 | #attributes{ 4 | display:grid; 5 | grid-template-columns: 1fr repeat(2,auto); 6 | gap:var(--half-gap); 7 | grid-template-areas: 8 | 'header header header' 9 | '. score modifier' 10 | 'might might might' 11 | 'finesse finesse finesse' 12 | 'resolve resolve resolve' 13 | 'insight insight insight' 14 | 'bearing bearing bearing' 15 | ; 16 | h3{ 17 | grid-area:header; 18 | } 19 | margin:0; 20 | .score-head{ 21 | grid-area:score; 22 | } 23 | .modifier-head{ 24 | grid-area:modifier; 25 | } 26 | @each $attribute in might,finesse,resolve,insight,bearing,weal{ 27 | .#{$attribute}{ 28 | grid-row-start:$attribute; 29 | } 30 | } 31 | :not(button){ 32 | justify-self:center; 33 | } 34 | } -------------------------------------------------------------------------------- /docs/assets/javascript/lang-tex.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2011 Martin S. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["kwd",/^\\[a-zA-Z@]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[{}()\[\]=]+/]]),["latex","tex"]); 18 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-latex.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2011 Martin S. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\r\n]*/,null,"%"]],[["kwd",/^\\[a-zA-Z@]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[{}()\[\]=]+/]]),["latex","tex"]); 18 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-go.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2010 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["pln",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])+(?:\'|$)|`[^`]*(?:`|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\r\n]*|\/\*[\s\S]*?\*\/)/],["pln",/^(?:[^\/\"\'`]|\/(?![\/\*]))+/i]]),["go"]); 18 | -------------------------------------------------------------------------------- /docs/assets/javascript/prettify-small/google-code-prettify/skins/desert.css: -------------------------------------------------------------------------------- 1 | pre .atn,pre .kwd,pre .tag{font-weight:700}pre.prettyprint{display:block;background-color:#333}pre .nocode{background-color:none;color:#000}pre .str{color:#ffa0a0}pre .kwd{color:khaki}pre .com{color:#87ceeb}pre .typ{color:#98fb98}pre .lit{color:#cd5c5c}pre .pln,pre .pun{color:#fff}pre .tag{color:khaki}pre .atn{color:#bdb76b}pre .atv{color:#ffa0a0}pre .dec{color:#98fb98}ol.linenums{margin-top:0;margin-bottom:0;color:#AEAEAE}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}@media print{pre.prettyprint{background-color:none}code .str,pre .str{color:#060}code .kwd,pre .kwd{color:#006;font-weight:700}code .com,pre .com{color:#600;font-style:italic}code .typ,pre .typ{color:#404;font-weight:700}code .lit,pre .lit{color:#044}code .pun,pre .pun{color:#440}code .pln,pre .pln{color:#000}code .tag,pre .tag{color:#006;font-weight:700}code .atn,pre .atn{color:#404}code .atv,pre .atv{color:#060}} -------------------------------------------------------------------------------- /docs/assets/javascript/lang-proto.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2006 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.sourceDecorator({keywords:"bytes,default,double,enum,extend,extensions,false,group,import,max,message,option,optional,package,repeated,required,returns,rpc,service,syntax,to,true",types:/^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\b/,cStyleComments:!0}),["proto"]); 18 | -------------------------------------------------------------------------------- /docs/source/js.pug: -------------------------------------------------------------------------------- 1 | include _mixins.pug 2 | doctype html 3 | html(lang="en") 4 | head 5 | meta(charset="UTF-8") 6 | meta(http-equiv="X-UA-Compatible", content="IE=edge") 7 | +generalStyleSheets('js') 8 | link(rel="stylesheet", href="/docs/assets/css/prettify.css") 9 | link(rel="stylesheet", href="/docs/assets/css/sons-of-obsidian.css") 10 | link(rel="stylesheet" href="/docs/assets/css/codeDisplay.css") 11 | title K-Scaffold Sheetworker 12 | body 13 | +pageHead('Sheetworker Documentation') 14 | li 15 | a(href="#intro-header") 16 | li 17 | a(href="#")#doc-link 18 | li 19 | main#doc-target 20 | +mainSection('js library','intro-header') 21 | p JS Library Intro Placeholder 22 | aside 23 | h2 Table of Contents 24 | nav 25 | ul#toc-target 26 | +pageFooter 27 | script(src="/docs/assets/javascript/prettify.js") 28 | script(src="/docs/assets/javascript/parser.js") -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_attributes.scss: -------------------------------------------------------------------------------- 1 | //This file will define how our attribute section is laid out. 2 | @use '_mixinsandplaceholders'; 3 | #attributes{ 4 | display:grid; 5 | grid-template-columns: 1fr repeat(2,auto); 6 | gap:var(--half-gap); 7 | grid-template-areas: 8 | 'header header header' 9 | '. score modifier' 10 | 'might might might' 11 | 'finesse finesse finesse' 12 | 'resolve resolve resolve' 13 | 'insight insight insight' 14 | 'bearing bearing bearing' 15 | 'weal weal weal ' 16 | ; 17 | h3{ 18 | grid-area:header; 19 | } 20 | margin:0; 21 | .score-head{ 22 | grid-area:score; 23 | } 24 | .modifier-head{ 25 | grid-area:modifier; 26 | } 27 | @each $attribute in might,finesse,resolve,insight,bearing,weal{ 28 | .#{$attribute}{ 29 | grid-row-start:$attribute; 30 | } 31 | } 32 | :not(button){ 33 | justify-self:center; 34 | } 35 | } -------------------------------------------------------------------------------- /docs/source/pug.pug: -------------------------------------------------------------------------------- 1 | include _mixins.pug 2 | doctype html 3 | html(lang="en") 4 | head 5 | meta(charset="UTF-8") 6 | meta(http-equiv="X-UA-Compatible", content="IE=edge") 7 | +generalStyleSheets('pug') 8 | link(rel="stylesheet", href="/docs/assets/css/prettify.css") 9 | link(rel="stylesheet", href="/docs/assets/css/sons-of-obsidian.css") 10 | link(rel="stylesheet" href="/docs/assets/css/codeDisplay.css") 11 | title K-Scaffold PUG 12 | body 13 | +pageHead('PUG Documentation') 14 | li 15 | a(href="#intro-header") K-Scaffold Pug 16 | li 17 | a(href="#")#doc-link PUG Mixins & Functions 18 | main#doc-target 19 | +mainSection('The PUG Library','intro-header') 20 | p Pug Library Intro Placeholder 21 | aside 22 | h2 Mixins 23 | nav 24 | ul#toc-target 25 | +pageFooter 26 | script(src="/docs/assets/javascript/prettify.js") 27 | script(src="/docs/assets/javascript/parser.js") -------------------------------------------------------------------------------- /K_Scaffold/Template v2/Javascript/demoworkers.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | const calcStrengthMod = function({attributes}){ 4 | return Math.floor( (attributes.strength - 10) / 2); 5 | }; 6 | k.registerFuncs({calcStrengthMod}); 7 | 8 | const calcAthletics = function({attributes}){ 9 | return attributes.strength_mod + attributes.athletics_base; 10 | }; 11 | k.registerFuncs({calcAthletics}); 12 | 13 | const calcAttackMod = function({trigger,attributes}){ 14 | let [section,rowID,field] = k.parseTriggerName(trigger.name); 15 | return attributes.strength_mod + attributes[`${section}_${rowID}_bonus`]; 16 | }; 17 | k.registerFuncs({calcAttackMod}); 18 | 19 | const calcWeaponWeight = function({trigger,attributes,sections}){ 20 | return sections.repeating_attack.reduce((total,rowID)=>{ 21 | return total + 22 | attributes[`repeating_attack_${rowID}_weight`] * 23 | attributes[`repeating_attack_${rowID}_quantity`]; 24 | },0); 25 | }; 26 | k.registerFuncs({calcWeaponWeight}); -------------------------------------------------------------------------------- /docs/assets/javascript/lang-ll.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2013 Nikhil Dabas 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^!?\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["com",/^;[^\r\n]*/,null,";"]],[["pln",/^[%@!](?:[-a-zA-Z$._][-a-zA-Z$._0-9]*|\d+)/],["kwd",/^[A-Za-z_][0-9A-Za-z_]*/,null],["lit",/^\d+\.\d+/],["lit",/^(?:\d+|0[xX][a-fA-F0-9]+)/],["pun",/^[()\[\]{},=*<>:]|\.\.\.$/]]),["llvm","ll"]); 18 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-llvm.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2013 Nikhil Dabas 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^!?\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["com",/^;[^\r\n]*/,null,";"]],[["pln",/^[%@!](?:[-a-zA-Z$._][-a-zA-Z$._0-9]*|\d+)/],["kwd",/^[A-Za-z_][0-9A-Za-z_]*/,null],["lit",/^\d+\.\d+/],["lit",/^(?:\d+|0[xX][a-fA-F0-9]+)/],["pun",/^[()\[\]{},=*<>:]|\.\.\.$/]]),["llvm","ll"]); 18 | -------------------------------------------------------------------------------- /docs/assets/javascript/prettify-small/google-code-prettify/skins/sunburst.css: -------------------------------------------------------------------------------- 1 | code .str,pre .str{color:#65B042}code .kwd,pre .kwd{color:#E28964}code .com,pre .com{color:#AEAEAE;font-style:italic}code .typ,pre .typ{color:#89bdff}code .lit,pre .lit{color:#3387CC}code .pln,code .pun,pre .pln,pre .pun{color:#fff}code .tag,pre .tag{color:#89bdff}code .atn,pre .atn{color:#bdb76b}code .atv,pre .atv{color:#65B042}code .dec,pre .dec{color:#3387CC}code.prettyprint,pre.prettyprint{background-color:#000;border-radius:8px}pre.prettyprint{width:95%;margin:1em auto;padding:1em;white-space:pre-wrap}ol.linenums{margin-top:0;margin-bottom:0;color:#AEAEAE}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}@media print{code .str,pre .str{color:#060}code .kwd,pre .kwd{color:#006;font-weight:700}code .com,pre .com{color:#600;font-style:italic}code .typ,pre .typ{color:#404;font-weight:700}code .lit,pre .lit{color:#044}code .pun,pre .pun{color:#440}code .pln,pre .pln{color:#000}code .tag,pre .tag{color:#006;font-weight:700}code .atn,pre .atn{color:#404}code .atv,pre .atv{color:#060}} -------------------------------------------------------------------------------- /docs/assets/javascript/lang-yaml.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2015 ribrdb @ code.google.com 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:|>?]+/,null,":|>?"],["dec",/^%(?:YAML|TAG)[^#\r\n]+/,null,"%"],["typ",/^[&]\S+/,null,"&"],["typ",/^!\S*/,null,"!"],["str",/^"(?:[^\\"]|\\.)*(?:"|$)/,null,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,null,"'"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^\s+/,null," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\r\n]|$)/],["pun",/^-/],["kwd",/^[\w-]+:[ \r\n]/],["pln", 18 | /^\w+/]]),["yaml","yml"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-yml.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2015 ribrdb @ code.google.com 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:|>?]+/,null,":|>?"],["dec",/^%(?:YAML|TAG)[^#\r\n]+/,null,"%"],["typ",/^[&]\S+/,null,"&"],["typ",/^!\S*/,null,"!"],["str",/^"(?:[^\\"]|\\.)*(?:"|$)/,null,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,null,"'"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^\s+/,null," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\r\n]|$)/],["pun",/^-/],["kwd",/^[\w-]+:[ \r\n]/],["pln", 18 | /^\w+/]]),["yaml","yml"]); 19 | -------------------------------------------------------------------------------- /docs/source/_mixins.pug: -------------------------------------------------------------------------------- 1 | mixin pageHead(subHead = "PUG, HTML, and Javascript") 2 | header 3 | h1 The K-Scaffold Framework 4 | span.subhead #{subHead} 5 | nav 6 | ul 7 | block 8 | li 9 | a(href="#contact-header") Contact & Feedback 10 | mixin pageFooter 11 | footer 12 | span By Scott Casey, Kurohyou Studios 13 | //- Will do the contact icons 14 | 15 | mixin siteFonts 16 | link(rel="preconnect" href="https://fonts.googleapis.com") 17 | link(rel="preconnect" href="https://fonts.gstatic.com" crossorigin) 18 | link(href="https://fonts.googleapis.com/css2?family=Aldrich&family=Exo+2:ital,wght@0,400;0,700;1,400&family=Fira+Code&display=swap" rel="stylesheet") 19 | 20 | mixin generalStyleSheets(page) 21 | +siteFonts 22 | link(rel="stylesheet" href="docs/assets/css/clear.css") 23 | link(rel="stylesheet" href="docs/assets/css/generic.css") 24 | link(rel="stylesheet" href=`docs/assets/css/${page}.css`) 25 | 26 | mixin mainSection(headText,headID) 27 | section(aria-labelledby=headID) 28 | h2(id=headID) #{headText} 29 | .border 30 | .content 31 | block -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Kurohyou 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_armor.pug: -------------------------------------------------------------------------------- 1 | section#armor.armor.paper-background 2 | //- See the _weapons.pug file for a full comment on what's going on here. 3 | .repeat-columns 4 | h4(data-i18n='armor and shield') 5 | each label in ['reduction value','defense bonus','traits','aspects'] 6 | h5(data-i18n=label) 7 | +fieldset({name:'armor',trigger:{listenerFunc:'rowDeleted'}}) 8 | +collapse 9 | //- This checkbox will mark this piece of armor or shield as being equipped or not, and will trigger a recalc of the defense score and reduction value. 10 | +checkbox({name:'equipped',value:1,trigger:{affects:['defense_total','reduction_value']}}) 11 | +text({name:'name',class:'underlined'}) 12 | +number({name:'reduction',class:'underlined',trigger:{affects:['reduction_value']}}) 13 | +number({name:'defense',class:'underlined',trigger:{affects:['defense_total']}}) 14 | each name in ['traits','aspects'] 15 | +text({name,class:'underlined'}) 16 | .headed-textarea.notes.expanded 17 | +h5({'data-i18n':'notes'}) 18 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /HTML & CSS Snippets/Fill to left using in-range/Fill to left using in-range.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/sections/_armor.pug: -------------------------------------------------------------------------------- 1 | section#armor.armor.paper-background 2 | //- See the _weapons.pug file for a full comment on what's going on here. 3 | .repeat-columns 4 | h4(data-i18n='armor and shield') 5 | each label in ['reduction value','defense bonus','traits','aspects'] 6 | h5(data-i18n=label) 7 | +fieldset({name:'armor',trigger:{affects:['defense_total','reduction_value']}}) 8 | +collapse() 9 | //- This checkbox will mark this piece of armor or shield as being equipped or not, and will trigger a recalc of the defense score and reduction value. 10 | +checkbox({name:'equipped',value:1,trigger:{affects:['defense_total','reduction_value']}}) 11 | +text({name:'name',class:'underlined'}) 12 | +number({name:'reduction',class:'underlined',trigger:{affects:['reduction_value']}}) 13 | +number({name:'defense',class:'underlined',trigger:{affects:['defense_total']}}) 14 | each name in ['traits','aspects'] 15 | +text({name,class:'underlined'}) 16 | .headed-textarea.notes.expanded 17 | +h5({'data-i18n':'notes'}) 18 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-basic.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2013 Peter Kofler 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:"(?:[^\\"\r\n]|\\.)*(?:"|$))/,null,'"'],["pln",/^\s+/,null," \r\n\t\u00a0"]],[["com",/^REM[^\r\n]*/,null],["kwd",/^\b(?:AND|CLOSE|CLR|CMD|CONT|DATA|DEF ?FN|DIM|END|FOR|GET|GOSUB|GOTO|IF|INPUT|LET|LIST|LOAD|NEW|NEXT|NOT|ON|OPEN|OR|POKE|PRINT|READ|RESTORE|RETURN|RUN|SAVE|STEP|STOP|SYS|THEN|TO|VERIFY|WAIT)\b/,null],["pln",/^[A-Z][A-Z0-9]?(?:\$|%)?/i,null],["lit",/^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?/i, 18 | null,"0123456789"],["pun",/^.[^\s\w\.$%"]*/,null]]),["basic","cbm"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-cbm.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2013 Peter Kofler 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:"(?:[^\\"\r\n]|\\.)*(?:"|$))/,null,'"'],["pln",/^\s+/,null," \r\n\t\u00a0"]],[["com",/^REM[^\r\n]*/,null],["kwd",/^\b(?:AND|CLOSE|CLR|CMD|CONT|DATA|DEF ?FN|DIM|END|FOR|GET|GOSUB|GOTO|IF|INPUT|LET|LIST|LOAD|NEW|NEXT|NOT|ON|OPEN|OR|POKE|PRINT|READ|RESTORE|RETURN|RUN|SAVE|STEP|STOP|SYS|THEN|TO|VERIFY|WAIT)\b/,null],["pln",/^[A-Z][A-Z0-9]?(?:\$|%)?/i,null],["lit",/^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?/i, 18 | null,"0123456789"],["pun",/^.[^\s\w\.$%"]*/,null]]),["basic","cbm"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-wiki.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2009 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t \xA0a-gi-z0-9]+/,null,"\t \u00a0abcdefgijklmnopqrstuvwxyz0123456789"],["pun",/^[=*~\^\[\]]+/,null,"=*~^[]"]],[["lang-wiki.meta",/(?:^^|\r\n?|\n)(#[a-z]+)\b/],["lit",/^(?:[A-Z][a-z][a-z0-9]+[A-Z][a-z][a-zA-Z0-9]+)\b/],["lang-",/^\{\{\{([\s\S]+?)\}\}\}/],["lang-",/^`([^\r\n`]+)`/],["str",/^https?:\/\/[^\/?#\s]*(?:\/[^?#\s]*)?(?:\?[^#\s]*)?(?:#\S*)?/i],["pln",/^(?:\r\n|[\s\S])[^#=*~^A-Zh\{`\[\r\n]*/]]),["wiki"]); 18 | PR.registerLangHandler(PR.createSimpleLexer([["kwd",/^#[a-z]+/i,null,"#"]],[]),["wiki.meta"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-lua.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/,null,"\"'"]],[["com",/^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/],["str",/^\[(=*)\[[\s\S]*?(?:\]\1\]|$)/],["kwd",/^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,null],["lit",/^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i], 18 | ["pln",/^[a-z_]\w*/i],["pun",/^[^\w\t\n\r \xA0][^\w\t\n\r \xA0\"\'\-\+=]*/]]),["lua"]); 19 | -------------------------------------------------------------------------------- /K_Scaffold/Template v2/scaffold/kvariables.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This stores the name of your sheet for use in the logging functions {@link log} and {@link debug}. Accessible by `k.sheetName` 3 | * @var 4 | * @type {string} 5 | */ 6 | let sheetName = 'kScaffold Powered Sheet'; 7 | kFuncs.sheetName = sheetName; 8 | /** 9 | * This stores the version of your sheet for use in the logging functions{@link log} and {@link debug}. It is also stored in the sheet_version attribute on your character sheet. Accessible via `k.version` 10 | * @var 11 | * @type {number} 12 | */ 13 | let version = 0; 14 | kFuncs.version = version; 15 | /** 16 | * A boolean flag that tells the script whether to enable or disable {@link debug} calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for your entire session. Otherwise, it remains false. 17 | * @var 18 | * @type {boolean} 19 | */ 20 | let debugMode = false; 21 | kFuncs.debugMode = debugMode; 22 | const funcs = {}; 23 | kFuncs.funcs = funcs; 24 | const updateHandlers = {}; 25 | const openHandlers = {}; 26 | const initialSetups = {}; 27 | const allHandlers = {}; 28 | const addFuncs = {}; 29 | 30 | const kscaffoldJSVersion = '0.0.4'; 31 | const kscaffoldPUGVersion = '0.0.4'; 32 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-erl.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2013 Andrew Allen 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\x0B\x0C\r ]+/,null,"\t\n\x0B\f\r "],["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["lit",/^[a-z][a-zA-Z0-9_]*/],["lit",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])+\'?/,null,"'"],["lit",/^\?[^ \t\n({]+/,null,"?"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\n]*/],["kwd",/^(?:module|attributes|do|let|in|letrec|apply|call|primop|case|of|end|when|fun|try|catch|receive|after|char|integer|float,atom,string,var)\b/], 18 | ["kwd",/^-[a-z_]+/],["typ",/^[A-Z_][a-zA-Z0-9_]*/],["pun",/^[.,;]/]]),["erlang","erl"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-erlang.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2013 Andrew Allen 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\x0B\x0C\r ]+/,null,"\t\n\x0B\f\r "],["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["lit",/^[a-z][a-zA-Z0-9_]*/],["lit",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])+\'?/,null,"'"],["lit",/^\?[^ \t\n({]+/,null,"?"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\n]*/],["kwd",/^(?:module|attributes|do|let|in|letrec|apply|call|primop|case|of|end|when|fun|try|catch|receive|after|char|integer|float,atom,string,var)\b/], 18 | ["kwd",/^-[a-z_]+/],["typ",/^[A-Z_][a-zA-Z0-9_]*/],["pun",/^[.,;]/]]),["erlang","erl"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-hs.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2009 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\x0B\x0C\r ]+/,null,"\t\n\x0B\f\r "],["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])\'?/,null,"'"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^(?:(?:--+(?:[^\r\n\x0C]*)?)|(?:\{-(?:[^-]|-+[^-\}])*-\}))/],["kwd",/^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^a-zA-Z0-9\']|$)/, 18 | null],["pln",/^(?:[A-Z][\w\']*\.)*[a-zA-Z][\w\']*/],["pun",/^[^\t\n\x0B\x0C\r a-zA-Z0-9\'\"]+/]]),["hs"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-tcl.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2012 Pyrios 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\{+/,null,"{"],["clo",/^\}+/,null,"}"],["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:after|append|apply|array|break|case|catch|continue|error|eval|exec|exit|expr|for|foreach|if|incr|info|proc|return|set|switch|trace|uplevel|upvar|while)\b/,null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i], 18 | ["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["tcl"]); 19 | -------------------------------------------------------------------------------- /HTML & CSS Snippets/Fill to left using in-range/Fill to left using in-range.css: -------------------------------------------------------------------------------- 1 | /* 2 | This styling makes the .dot elements circles, hides the radio inside the label, and fills the labels that are to the left of the currently checked radio. 3 | # Notes # 4 | - Only one of width or height should be applied to .dot in order for aspect-ratio to function. 5 | */ 6 | .dot{ 7 | border:1px solid black; 8 | border-radius:50%; 9 | width:1rem;/*Set our width*/ 10 | aspect-ratio:1/1;/*make our label a 1:1 aspect ratio. You could specify a different ratio here if you want an ellipse, or specify a height instead*/ 11 | } 12 | .dot input{ 13 | display:none; 14 | } 15 | .fill-control:in-range + .dot{ 16 | --innerFillPoint:3px;/*The distance from the center at which the central bit of color will end*/ 17 | --outerFillPoint:5px;/*The distance from the center at which the outer ring of color will start*/ 18 | --fillColor:blue;/*The color to use for the center and outer ring*/ 19 | --midColor:transparent;/*The color to use for the middle ring*/ 20 | background:radial-gradient(circle,var(--fillColor) var(--innerFillPoint),var(--midColor) var(--innerFillPoint),var(--midColor) var(--outerFillPoint),var(--fillColor) var(--outerFillPoint));/*Create a radial gradient with hard color stops at our inner and outer fill point*/ 21 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_header.pug: -------------------------------------------------------------------------------- 1 | section#character-header 2 | img(src="https://s3.amazonaws.com/files.d20.io/images/269781785/NLg9vcFOn6o_0dLEFcTDLg/original.png").header__image 3 | .character-details.paper-background 4 | +input-label({ 5 | label:'name', 6 | inputObj:{name:'character name',class:'underlined',type:'text'}, 7 | spanObj:{role:'heading','aria-level':5} 8 | }) 9 | +input-label({ 10 | label:'level', 11 | inputObj:{name:'level',class:'underlined',type:'number'}, 12 | spanObj:{role:'heading','aria-level':5} 13 | }) 14 | +input-label({ 15 | label:'xp', 16 | inputObj:{name:'experience',class:'underlined',type:'number'}, 17 | spanObj:{role:'heading','aria-level':5,class:'uppercase'} 18 | }) 19 | +input-label({ 20 | label:'lineage', 21 | inputObj:{name:'lineage',class:'underlined',type:'text'}, 22 | spanObj:{role:'heading','aria-level':5} 23 | }) 24 | +input-label({ 25 | label:'archetype', 26 | inputObj:{name:'archetype',class:'underlined',type:'text'}, 27 | spanObj:{role:'heading','aria-level':5} 28 | }) 29 | +input-label({ 30 | label:'profession', 31 | inputObj:{name:'profession',class:'underlined',type:'text'}, 32 | spanObj:{role:'heading','aria-level':5} 33 | }) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_header.pug: -------------------------------------------------------------------------------- 1 | section#character-header 2 | img(src="https://s3.amazonaws.com/files.d20.io/images/269781785/NLg9vcFOn6o_0dLEFcTDLg/original.png").header__image 3 | .character-details.paper-background 4 | +input-label({ 5 | label:'name', 6 | inputObj:{name:'character name',class:'underlined',type:'text'}, 7 | spanObj:{role:'heading','aria-level':5} 8 | }) 9 | +input-label({ 10 | label:'level', 11 | inputObj:{name:'level',class:'underlined',type:'number'}, 12 | spanObj:{role:'heading','aria-level':5} 13 | }) 14 | +input-label({ 15 | label:'xp', 16 | inputObj:{name:'experience',class:'underlined',type:'number'}, 17 | spanObj:{role:'heading','aria-level':5,class:'uppercase'} 18 | }) 19 | +input-label({ 20 | label:'lineage', 21 | inputObj:{name:'lineage',class:'underlined',type:'text'}, 22 | spanObj:{role:'heading','aria-level':5} 23 | }) 24 | +input-label({ 25 | label:'archetype', 26 | inputObj:{name:'archetype',class:'underlined',type:'text'}, 27 | spanObj:{role:'heading','aria-level':5} 28 | }) 29 | +input-label({ 30 | label:'profession', 31 | inputObj:{name:'profession',class:'underlined',type:'text'}, 32 | spanObj:{role:'heading','aria-level':5} 33 | }) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/sections/_header.pug: -------------------------------------------------------------------------------- 1 | section#character-header 2 | img(src="https://s3.amazonaws.com/files.d20.io/images/269781785/NLg9vcFOn6o_0dLEFcTDLg/original.png").header__image 3 | .character-details.paper-background 4 | +input-label({ 5 | label:'name', 6 | inputObj:{name:'character name',class:'underlined',type:'text'}, 7 | spanObj:{role:'heading','aria-level':5} 8 | }) 9 | +input-label({ 10 | label:'level', 11 | inputObj:{name:'level',class:'underlined',type:'number'}, 12 | spanObj:{role:'heading','aria-level':5} 13 | }) 14 | +input-label({ 15 | label:'xp', 16 | inputObj:{name:'experience',class:'underlined',type:'number'}, 17 | spanObj:{role:'heading','aria-level':5,class:'uppercase'} 18 | }) 19 | +input-label({ 20 | label:'lineage', 21 | inputObj:{name:'lineage',class:'underlined',type:'text'}, 22 | spanObj:{role:'heading','aria-level':5} 23 | }) 24 | +input-label({ 25 | label:'archetype', 26 | inputObj:{name:'archetype',class:'underlined',type:'text'}, 27 | spanObj:{role:'heading','aria-level':5} 28 | }) 29 | +input-label({ 30 | label:'profession', 31 | inputObj:{name:'profession',class:'underlined',type:'text'}, 32 | spanObj:{role:'heading','aria-level':5} 33 | }) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-pascal.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2013 Peter Kofler 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$))/,null,"'"],["pln",/^\s+/,null," \r\n\t\u00a0"]],[["com",/^\(\*[\s\S]*?(?:\*\)|$)|^\{[\s\S]*?(?:\}|$)/,null],["kwd",/^(?:ABSOLUTE|AND|ARRAY|ASM|ASSEMBLER|BEGIN|CASE|CONST|CONSTRUCTOR|DESTRUCTOR|DIV|DO|DOWNTO|ELSE|END|EXTERNAL|FOR|FORWARD|FUNCTION|GOTO|IF|IMPLEMENTATION|IN|INLINE|INTERFACE|INTERRUPT|LABEL|MOD|NOT|OBJECT|OF|OR|PACKED|PROCEDURE|PROGRAM|RECORD|REPEAT|SET|SHL|SHR|THEN|TO|TYPE|UNIT|UNTIL|USES|VAR|VIRTUAL|WHILE|WITH|XOR)\b/i, 18 | null],["lit",/^(?:true|false|self|nil)/i,null],["pln",/^[a-z][a-z0-9]*/i,null],["lit",/^(?:\$[a-f0-9]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?)/i,null,"0123456789"],["pun",/^.[^\s\w\.$@\'\/]*/,null]]),["pascal"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-Splus.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2012 Jeffrey B. Arnold 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![A-Za-z0-9_.])/],["lit",/^0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/],["lit",/^[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|[0-9]+))(?![A-Za-z0-9_.])/], 18 | ["pun",/^(?:<-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|\*|\+|\^|\/|!|%.*?%|=|~|\$|@|:{1,3}|[\[\](){};,?])/],["pln",/^(?:[A-Za-z]+[A-Za-z0-9_.]*|\.[a-zA-Z_][0-9a-zA-Z\._]*)(?![A-Za-z0-9_.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-r.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2012 Jeffrey B. Arnold 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![A-Za-z0-9_.])/],["lit",/^0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/],["lit",/^[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|[0-9]+))(?![A-Za-z0-9_.])/], 18 | ["pun",/^(?:<-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|\*|\+|\^|\/|!|%.*?%|=|~|\$|@|:{1,3}|[\[\](){};,?])/],["pln",/^(?:[A-Za-z]+[A-Za-z0-9_.]*|\.[a-zA-Z_][0-9a-zA-Z\._]*)(?![A-Za-z0-9_.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-s.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2012 Jeffrey B. Arnold 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"'],["str",/^\'(?:[^\'\\]|\\[\s\S])*(?:\'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![A-Za-z0-9_.])/],["lit",/^0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/],["lit",/^[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|[0-9]+))(?![A-Za-z0-9_.])/], 18 | ["pun",/^(?:<-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|\*|\+|\^|\/|!|%.*?%|=|~|\$|@|:{1,3}|[\[\](){};,?])/],["pln",/^(?:[A-Za-z]+[A-Za-z0-9_.]*|\.[a-zA-Z_][0-9a-zA-Z\._]*)(?![A-Za-z0-9_.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]); 19 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_defenses.pug: -------------------------------------------------------------------------------- 1 | //- See _attributes.pug for info on these IDs and classes 2 | section#defenses.defenses.paper-background 3 | +input-label({ 4 | label:'defense', 5 | inputObj:{name:'defense',type:'number',class:'underlined'}, 6 | spanObj:{role:'heading','aria-level':4} 7 | }) 8 | +input-label({ 9 | label:'reduction value', 10 | inputObj:{name:'reduction value',type:'number',class:'underlined'}, 11 | spanObj:{role:'heading','aria-level':4} 12 | }) 13 | //- The next few lines relate to the endurance. We're going to adjust the endurance format from what it is on the paper sheet 14 | label(for='endurance' class='endurance-label' data-i18n='endurance',role='heading' aria-level=4) 15 | .boxed.span-2 16 | +number({name:'endurance',id:'endurance',value:0}) 17 | span.slash / 18 | +number({name:'endurance max',trigger:{affects:['defence'],triggeredFuncs:['calcHealth']}}) 19 | +roller-label({ 20 | inputObj:{name:'saving throw',type:'number',class:'underlined'}, 21 | buttonObj:{name:'saving throw',role:'heading','aria-level':4,'data-i18n':'saving throw',trigger:{listenerFunc:'initiateRoll'}} 22 | }) 23 | //- We're removing the attack modifier summary here because we'll incorporate it directly into the weapons section. 24 | +input-label({ 25 | label:'myth points', 26 | inputObj:{name:'myth points',type:'number',class:'underlined'} 27 | }) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-cl.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, 18 | null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" ")); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-el.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, 18 | null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" ")); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-lisp.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, 18 | null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" ")); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-lsp.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, 18 | null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" ")); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-rkt.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, 18 | null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" ")); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-scm.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, 18 | null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" ")); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-ss.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,null,"("],["clo",/^\)+/,null,")"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, 18 | null],["lit",/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),"cl el lisp lsp scm ss rkt".split(" ")); 19 | -------------------------------------------------------------------------------- /docs/source/codeDisplay.scss: -------------------------------------------------------------------------------- 1 | @use "_mixins"; 2 | .arguments-container{ 3 | display:grid; 4 | grid-template-columns:repeat(2,auto) 1fr; 5 | gap:var(--half-gap); 6 | > :first-child{ 7 | grid-column:1 / -1; 8 | } 9 | > p{ 10 | grid-column:3; 11 | } 12 | } 13 | pre.prettyprint{ 14 | padding:var(--tiny-gap); 15 | white-space: pre-wrap; 16 | font-family:"Fira Code", monospace; 17 | } 18 | body{ 19 | display:grid; 20 | grid-template-columns:1fr auto; 21 | grid-template-rows:repeat(4,auto); 22 | grid-template-areas: 23 | "header header" 24 | "nav nav" 25 | "main aside" 26 | "footer footer"; 27 | } 28 | header{ 29 | grid-area:header; 30 | + nav{ 31 | grid-area:nav; 32 | } 33 | } 34 | main{ 35 | grid-area:main; 36 | } 37 | footer{ 38 | grid-area:footer; 39 | } 40 | aside{ 41 | position:sticky; 42 | top:35.2px; 43 | grid-area:aside; 44 | align-self:start; 45 | max-height:calc(100vh - 35.2px); 46 | overflow:auto; 47 | padding:var(--half-gap); 48 | margin-left:var(--half-gap); 49 | background-color:var(--hfBackground); 50 | box-sizing:border-box; 51 | > :first-child{ 52 | display:block; 53 | text-align:right; 54 | color:var(--hfColor); 55 | } 56 | > nav{ 57 | > ul{ 58 | display:flex; 59 | flex-direction:column; 60 | gap:var(--tiny-gap); 61 | > li{ 62 | text-align:right; 63 | } 64 | } 65 | } 66 | a{ 67 | color:var(--hfColor); 68 | } 69 | } -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/mixins/scss/_spells.scss: -------------------------------------------------------------------------------- 1 | @use '_mixinsandplaceholders'; 2 | #spells{ 3 | display:grid; 4 | .repitem{ 5 | display:grid; 6 | gap:var(--tiny-gap); 7 | grid-template-columns:1fr auto; 8 | .name{ 9 | display:grid; 10 | grid-template-columns:[roller-start] 1.4rem [input-start roller-end] 1fr [input-end] auto; 11 | grid-template-rows:[input-start roller-start] auto[input-end roller-end]; 12 | gap:var(--tiny-gap); 13 | align-items: center; 14 | input[type='text']{ 15 | grid-area:input; 16 | width:100%; 17 | } 18 | } 19 | .roller-container{ 20 | grid-area:roller; 21 | box-sizing:border-box; 22 | } 23 | &:not(:last-child){ 24 | border-bottom:1px dashed black; 25 | padding-bottom:var(--half-gap); 26 | } 27 | .hover-container{ 28 | .glyph-only{ 29 | &[name*="1"]{ 30 | background-image:var(--star1Image); 31 | } 32 | &[name*="2"]{ 33 | background-image:var(--star2Image); 34 | } 35 | &[name*="3"]{ 36 | background-image:var(--star3Image); 37 | } 38 | &:not(:first-child){ 39 | width:18px; 40 | aspect-ratio:1 / 1; 41 | background:{ 42 | repeat:no-repeat; 43 | size:contain; 44 | } 45 | &:before{ 46 | content:none; 47 | } 48 | } 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /docs/assets/javascript/lang-kotlin.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2017 Micha?? B??czkowski 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["pun",/^[.!%&()*+,\-;<=>?\[\\\]^{|}:]+/,null,".!%&()*+,-;<=>?[\\]^{|}:"]],[["kwd",/^\b(package|public|protected|private|open|abstract|constructor|final|override|import|for|while|as|typealias|get|set|((data|enum|annotation|sealed) )?class|this|super|val|var|fun|is|in|throw|return|break|continue|(companion )?object|if|try|else|do|when|init|interface|typeof)\b/],["lit",/^(?:true|false|null)\b/], 18 | ["lit",/^(0[xX][0-9a-fA-F_]+L?|0[bB][0-1]+L?|[0-9_.]+([eE]-?[0-9]+)?[fFL]?)/],["typ",/^(\b[A-Z]+[a-z][a-zA-Z0-9_$@]*|`.*`)/,null],["com",/^\/\/.*/],["com",/^\/\*[\s\S]*?(?:\*\/|$)/],["str",/'.'/],["str",/^"([^"\\]|\\[\s\S])*"/],["str",/^"{3}[\s\S]*?[^\\]"{3}/],["lit",/^@([a-zA-Z0-9_$@]*|`.*`)/],["lit",/^[a-zA-Z0-9_]+@/]]),["kotlin"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-lgt.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2014 Paulo Moura 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["lit",/^[a-z][a-zA-Z0-9_]*/],["lit",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])+\'?/,null,"'"],["lit",/^(?:0'.|0b[0-1]+|0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\r\n]*/,null,"%"],["com",/^\/\*[\s\S]*?\*\//],["kwd",/^\s*:-\s(c(a(lls|tegory)|oinductive)|p(ublic|r(ot(ocol|ected)|ivate))|e(l(if|se)|n(coding|sure_loaded)|xport)|i(f|n(clude|itialization|fo))|alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|od(e|ule)|ultifile)|reexport|s(et_(logtalk|prolog)_flag|ynchronized)|o(bject|p)|use(s|_module))/], 18 | ["kwd",/^\s*:-\s(e(lse|nd(if|_(category|object|protocol)))|built_in|dynamic|synchronized|threaded)/],["typ",/^[A-Z_][a-zA-Z0-9_]*/],["pun",/^[.,;{}:^<>=\\/+*?#!-]/]]),["logtalk","lgt"]); 19 | -------------------------------------------------------------------------------- /docs/assets/css/codeDisplay.css: -------------------------------------------------------------------------------- 1 | .arguments-container { 2 | display: grid; 3 | grid-template-columns: repeat(2, auto) 1fr; 4 | gap: var(--half-gap); 5 | } 6 | .arguments-container > :first-child { 7 | grid-column: 1/-1; 8 | } 9 | .arguments-container > p { 10 | grid-column: 3; 11 | } 12 | 13 | pre.prettyprint { 14 | padding: var(--tiny-gap); 15 | white-space: pre-wrap; 16 | font-family: "Fira Code", monospace; 17 | } 18 | 19 | body { 20 | display: grid; 21 | grid-template-columns: 1fr auto; 22 | grid-template-rows: repeat(4, auto); 23 | grid-template-areas: "header header" "nav nav" "main aside" "footer footer"; 24 | } 25 | 26 | header { 27 | grid-area: header; 28 | } 29 | header + nav { 30 | grid-area: nav; 31 | } 32 | 33 | main { 34 | grid-area: main; 35 | } 36 | 37 | footer { 38 | grid-area: footer; 39 | } 40 | 41 | aside { 42 | position: sticky; 43 | top: 35.2px; 44 | grid-area: aside; 45 | align-self: start; 46 | max-height: calc(100vh - 35.2px); 47 | overflow: auto; 48 | padding: var(--half-gap); 49 | margin-left: var(--half-gap); 50 | background-color: var(--hfBackground); 51 | box-sizing: border-box; 52 | } 53 | aside > :first-child { 54 | display: block; 55 | text-align: right; 56 | color: var(--hfColor); 57 | } 58 | aside > nav > ul { 59 | display: flex; 60 | flex-direction: column; 61 | gap: var(--tiny-gap); 62 | } 63 | aside > nav > ul > li { 64 | text-align: right; 65 | } 66 | aside a { 67 | color: var(--hfColor); 68 | } -------------------------------------------------------------------------------- /docs/assets/javascript/lang-logtalk.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2014 Paulo Moura 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["str",/^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,null,'"'],["lit",/^[a-z][a-zA-Z0-9_]*/],["lit",/^\'(?:[^\'\\\n\x0C\r]|\\[^&])+\'?/,null,"'"],["lit",/^(?:0'.|0b[0-1]+|0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\r\n]*/,null,"%"],["com",/^\/\*[\s\S]*?\*\//],["kwd",/^\s*:-\s(c(a(lls|tegory)|oinductive)|p(ublic|r(ot(ocol|ected)|ivate))|e(l(if|se)|n(coding|sure_loaded)|xport)|i(f|n(clude|itialization|fo))|alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|od(e|ule)|ultifile)|reexport|s(et_(logtalk|prolog)_flag|ynchronized)|o(bject|p)|use(s|_module))/], 18 | ["kwd",/^\s*:-\s(e(lse|nd(if|_(category|object|protocol)))|built_in|dynamic|synchronized|threaded)/],["typ",/^[A-Z_][a-zA-Z0-9_]*/],["pun",/^[.,;{}:^<>=\\/+*?#!-]/]]),["logtalk","lgt"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-clj.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2011 Google Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | PR.registerLangHandler(PR.createSimpleLexer([["opn",/^[\(\{\[]+/,null,"([{"],["clo",/^[\)\}\]]+/,null,")]}"],["com",/^;[^\r\n]*/,null,";"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\b/, 17 | null],["typ",/^:[0-9a-zA-Z\-]+/]]),["clj"]); 18 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/sections/_header.pug: -------------------------------------------------------------------------------- 1 | header(data-i18n-aria-label='character header')#character-header.header.span-all 2 | img(src="https://s3.amazonaws.com/files.d20.io/images/269781785/NLg9vcFOn6o_0dLEFcTDLg/original.png").header__image 3 | .character-details.paper-background 4 | +input-label({ 5 | label:'name', 6 | inputObj:{name:'character name',class:'underlined',type:'text'}, 7 | divObj:{class:'span-all'}, 8 | spanObj:{role:'heading','aria-level':5} 9 | }) 10 | +input-label({ 11 | label:'lineage', 12 | inputObj:{name:'lineage',class:'underlined',type:'text'}, 13 | divObj:{class:'span-2'}, 14 | spanObj:{role:'heading','aria-level':5} 15 | }) 16 | +input-label({ 17 | label:'level', 18 | inputObj:{name:'level',class:'underlined',type:'number'}, 19 | spanObj:{role:'heading','aria-level':5} 20 | }) 21 | +input-label({ 22 | label:'xp', 23 | inputObj:{name:'experience',class:'underlined',type:'number'}, 24 | spanObj:{role:'heading','aria-level':5,class:'uppercase'} 25 | }) 26 | +input-label({ 27 | label:'archetype', 28 | inputObj:{name:'archetype',class:'underlined',type:'text'}, 29 | divObj:{class:'span-2'}, 30 | spanObj:{role:'heading','aria-level':5} 31 | }) 32 | +input-label({ 33 | label:'profession', 34 | inputObj:{name:'profession',class:'underlined',type:'text'}, 35 | divObj:{class:'span-2'}, 36 | spanObj:{role:'heading','aria-level':5} 37 | }) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-mumps.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2011 Kitware Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:[^"]|\\.)*")/,null,'"']],[["com",/^;[^\r\n]*/,null,";"],["dec",/^(?:\$(?:D|DEVICE|EC|ECODE|ES|ESTACK|ET|ETRAP|H|HOROLOG|I|IO|J|JOB|K|KEY|P|PRINCIPAL|Q|QUIT|ST|STACK|S|STORAGE|SY|SYSTEM|T|TEST|TL|TLEVEL|TR|TRESTART|X|Y|Z[A-Z]*|A|ASCII|C|CHAR|D|DATA|E|EXTRACT|F|FIND|FN|FNUMBER|G|GET|J|JUSTIFY|L|LENGTH|NA|NAME|O|ORDER|P|PIECE|QL|QLENGTH|QS|QSUBSCRIPT|Q|QUERY|R|RANDOM|RE|REVERSE|S|SELECT|ST|STACK|T|TEXT|TR|TRANSLATE|NaN))\b/i, 18 | null],["kwd",/^(?:[^\$]B|BREAK|C|CLOSE|D|DO|E|ELSE|F|FOR|G|GOTO|H|HALT|H|HANG|I|IF|J|JOB|K|KILL|L|LOCK|M|MERGE|N|NEW|O|OPEN|Q|QUIT|R|READ|S|SET|TC|TCOMMIT|TRE|TRESTART|TRO|TROLLBACK|TS|TSTART|U|USE|V|VIEW|W|WRITE|X|XECUTE)\b/i,null],["lit",/^[+-]?(?:(?:\.\d+|\d+(?:\.\d*)?)(?:E[+\-]?\d+)?)/i],["pln",/^[a-z][a-zA-Z0-9]*/i],["pun",/^[^\w\t\n\r\xA0\"\$;%\^]|_/]]),["mumps"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/prettify-small/google-code-prettify/skins/doxy.css: -------------------------------------------------------------------------------- 1 | a,code.prettyprint a,pre.prettyprint a{text-decoration:none}code .str,pre .str{color:#fec243}code .kwd,pre .kwd{color:#8470FF}code .com,pre .com{color:#32cd32;font-style:italic}code .typ,pre .typ{color:#6ecbcc}code .lit,pre .lit{color:#d06}code .pun,pre .pun{color:#8B8970}code .pln,pre .pln{color:#f0f0f0}code .tag,pre .tag{color:#9c9cff}code .htm,pre .htm{color:plum}code .xsl,pre .xsl{color:#d0a0d0}code .atn,pre .atn{color:#46eeee;font-weight:400}code .atv,pre .atv{color:#EEB4B4}code .dec,pre .dec{color:#3387CC}code.prettyprint,pre.prettyprint{font-family:'Droid Sans Mono','CPMono_v07 Bold','Droid Sans';font-weight:700;font-size:9pt;background-color:#0f0f0f;-moz-border-radius:8px;-webkit-border-radius:8px;-o-border-radius:8px;-ms-border-radius:8px;-khtml-border-radius:8px;border-radius:8px}pre.prettyprint{width:95%;margin:1em auto;padding:1em;white-space:pre-wrap}ol.linenums{margin-top:0;margin-bottom:0;color:#8B8970}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}@media print{code.prettyprint,pre.prettyprint{background-color:#fff}code .str,pre .str{color:#088}code .kwd,pre .kwd{color:#006;font-weight:700}code .com,pre .com{color:#oc3;font-style:italic}code .typ,pre .typ{color:#404;font-weight:700}code .lit,pre .lit{color:#044}code .pun,pre .pun{color:#440}code .pln,pre .pln{color:#000}code .tag,pre .tag{color:#b66ff7;font-weight:700}code .htm,code .xsl,pre .htm,pre .xsl{color:#606;font-weight:700}code .atn,pre .atn{color:#c71585;font-weight:400}code .atv,pre .atv{color:#088;font-weight:400}} -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/sections/_header.pug: -------------------------------------------------------------------------------- 1 | header(data-i18n-aria-label='character header')#character-header.header.span-all 2 | img(src="https://s3.amazonaws.com/files.d20.io/images/269781785/NLg9vcFOn6o_0dLEFcTDLg/original.png").header__image 3 | .character-details.paper-background 4 | +input-label({ 5 | label:'name', 6 | inputObj:{name:'character name',class:'underlined',type:'text'}, 7 | divObj:{class:'span-all'}, 8 | spanObj:{role:'heading','aria-level':5} 9 | }) 10 | +input-label({ 11 | label:'lineage', 12 | inputObj:{name:'lineage',class:'underlined',type:'text'}, 13 | divObj:{class:'span-2'}, 14 | spanObj:{role:'heading','aria-level':5} 15 | }) 16 | +input-label({ 17 | label:'level', 18 | inputObj:{name:'level',class:'underlined',type:'number'}, 19 | spanObj:{role:'heading','aria-level':5} 20 | }) 21 | +input-label({ 22 | label:'xp', 23 | inputObj:{name:'experience',class:'underlined',type:'number'}, 24 | spanObj:{role:'heading','aria-level':5,class:'uppercase'} 25 | }) 26 | +input-label({ 27 | label:'archetype', 28 | inputObj:{name:'archetype',class:'underlined',type:'text'}, 29 | divObj:{class:'span-2'}, 30 | spanObj:{role:'heading','aria-level':5} 31 | }) 32 | +input-label({ 33 | label:'profession', 34 | inputObj:{name:'profession',class:'underlined',type:'text'}, 35 | divObj:{class:'span-2'}, 36 | spanObj:{role:'heading','aria-level':5} 37 | }) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-css.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2009 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[["str",/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],["str",/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']+)\)/i],["kwd",/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//], 18 | ["com",/^(?:\x3c!--|--\x3e)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#(?:[0-9a-f]{3}){1,2}\b/i],["pln",/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],["pun",/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^\)\"\']+/]]),["css-str"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-scala.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2010 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:(?:""(?:""?(?!")|[^\\"]|\\.)*"{0,3})|(?:[^"\r\n\\]|\\.)*"?))/,null,'"'],["lit",/^`(?:[^\r\n\\`]|\\.)*`?/,null,"`"],["pun",/^[!#%&()*+,\-:;<=>?@\[\\\]^{|}~]+/,null,"!#%&()*+,-:;<=>?@[\\]^{|}~"]],[["str",/^'(?:[^\r\n\\']|\\(?:'|[^\r\n']+))'/],["lit",/^'[a-zA-Z_$][\w$]*(?!['$\w])/],["kwd",/^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/], 18 | ["lit",/^(?:true|false|null|this)\b/],["lit",/^(?:(?:0(?:[0-7]+|X[0-9A-F]+))L?|(?:(?:0|[1-9][0-9]*)(?:(?:\.[0-9]+)?(?:E[+\-]?[0-9]+)?F?|L?))|\\.[0-9]+(?:E[+\-]?[0-9]+)?F?)/i],["typ",/^[$_]*[A-Z][_$A-Z0-9]*[a-z][\w$]*/],["pln",/^[$a-zA-Z_][\w$]*/],["com",/^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/],["pun",/^(?:\.+|\/)/]]),["scala"]); 19 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/settings/_settings.pug: -------------------------------------------------------------------------------- 1 | article#settings.settings.paper-background.nav-display 2 | //- This is our sheet's settings page. We'll have just two settings on our sheet at the moment. The first will be whether to whisper rolls or not. The second will be what type of sheet this is (NPC or character). 3 | h2(data-i18n='settings') 4 | //- We define a select-label that will group our label and the select together. Note that the syntax has changed here to use the destructuring assignment pattern. 5 | +select-label({ 6 | label:'whisper to gm', 7 | inputObj:{name:'whisper',class:'underlined'}, 8 | spanObj:{role:'heading','aria-level':4} 9 | }) 10 | +option({value:'','data-i18n':'never',selected:''}) 11 | +option({value:'/w gm','data-i18n':'always'}) 12 | +option({value:'query','data-i18n':'ask'}) 13 | +select-label({ 14 | label:'sheet type', 15 | inputObj:{name:'sheet type',class:'underlined'}, 16 | spanObj:{role:'heading','aria-level':4} 17 | }) 18 | //- Our sheet type select is going to trigger some actual sheet workers. The trigger object goes on the default selected option. The displayArticles function will change what areas of the sheet are accessible based on the character type. 19 | each value in varObjects.sheetTypes 20 | //- Iterate through our sheet types 21 | - const optObj = {value,'data-i18n':value}; 22 | if value === 'character' 23 | - optObj.trigger = {triggeredFuncs:['displayArticles']}; 24 | -optObj.selected = ''; 25 | else if value === 'npc' 26 | - optObj.class = 'uppercase'; 27 | +option(optObj) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-aea.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2009 Onno Hommes. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/, 18 | null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-agc.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2009 Onno Hommes. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/, 18 | null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-apollo.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2009 Onno Hommes. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/, 18 | null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]); 19 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/settings/_settings.pug: -------------------------------------------------------------------------------- 1 | article#settings.settings.paper-background.nav-display 2 | //- This is our sheet's settings page. We'll have just two settings on our sheet at the moment. The first will be whether to whisper rolls or not. The second will be what type of sheet this is (NPC or character). 3 | h2(data-i18n='settings') 4 | //- We define a select-label that will group our label and the select together. Note that the syntax has changed here to use the destructuring assignment pattern. 5 | +select-label({ 6 | label:'whisper to gm', 7 | inputObj:{name:'whisper',class:'underlined'}, 8 | spanObj:{role:'heading','aria-level':4} 9 | }) 10 | +option({value:'','data-i18n':'never',selected:''}) 11 | +option({value:'/w gm','data-i18n':'always'}) 12 | +option({value:'?{Whisper to GM|No, |Yes,/w gm }','data-i18n':'ask'}) 13 | +select-label({ 14 | label:'sheet type', 15 | inputObj:{name:'sheet type',class:'underlined'}, 16 | spanObj:{role:'heading','aria-level':4} 17 | }) 18 | //- Our sheet type select is going to trigger some actual sheet workers. The trigger object goes on the default selected option. The displayArticles function will change what areas of the sheet are accessible based on the character type. 19 | each value in varObjects.sheetTypes 20 | //- Iterate through our sheet types 21 | - const optObj = {value,'data-i18n':value}; 22 | if value === 'character' 23 | - optObj.trigger = {triggeredFuncs:['displayArticles']}; 24 | -optObj.selected = ''; 25 | else if value === 'npc' 26 | - optObj.class = 'uppercase'; 27 | +option(optObj) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/sections/_defenses.pug: -------------------------------------------------------------------------------- 1 | //- See _attributes.pug for info on these IDs and classes 2 | section(data-i18n-aria-label='defenses')#defenses.defenses.paper-background 3 | label(for='defense-bonus' data-i18n='defense' role='heading' aria-level=4) 4 | +number({name:'defense total',type:'number',readonly:'',class:'underlined',value:10,trigger:{calculation:'calcDefense'}}) 5 | +number({name:'defense mod',class:'underlined',trigger:{affects:['defense_total']}}) 6 | label(for='reduction-bonus' data-i18n='reduction' role='heading' aria-level=4) 7 | +number({name:'reduction value',readonly:'',class:'underlined',trigger:{calculation:'calcDefense'}}) 8 | +number({name:'reduction mod',class:'underlined',trigger:{affects:['reduction_value']}}) 9 | //- The next few lines relate to the endurance. We're going to adjust the endurance format from what it is on the paper sheet 10 | label(for='endurance' class='endurance-label' data-i18n='endurance',role='heading' aria-level=4) 11 | .boxed.span-2 12 | +number({name:'endurance',id:'endurance',value:0}) 13 | span.slash / 14 | +number({name:'endurance max',trigger:{affects:['defence'],triggeredFuncs:['calcHealth']}}) 15 | +roller({name:'saving throw',class:'span-2',role:'heading','aria-level':4,'data-i18n':'saving throw',trigger:{listenerFunc:'rollGeneric'}}) 16 | +number({name:'saving throw',class:'underlined'}) 17 | //- We're removing the attack modifier summary here because we'll incorporate it directly into the weapons section. 18 | label(for='myth-points' data-i18n='myth points' role='heading' aria-level=4).span-2 19 | +number({name:'myth points',class:'underlined'}) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-dart.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2013 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"]],[["com",/^#!(?:.*)/],["kwd",/^\b(?:import|library|part of|part|as|show|hide)\b/i],["com",/^\/\/(?:.*)/],["com",/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],["kwd",/^\b(?:class|interface)\b/i],["kwd",/^\b(?:assert|async|await|break|case|catch|continue|default|do|else|finally|for|if|in|is|new|return|super|switch|sync|this|throw|try|while)\b/i],["kwd",/^\b(?:abstract|const|extends|factory|final|get|implements|native|operator|set|static|typedef|var)\b/i], 18 | ["typ",/^\b(?:bool|double|Dynamic|int|num|Object|String|void)\b/i],["kwd",/^\b(?:false|null|true)\b/i],["str",/^r?[\']{3}[\s|\S]*?[^\\][\']{3}/],["str",/^r?[\"]{3}[\s|\S]*?[^\\][\"]{3}/],["str",/^r?\'(\'|(?:[^\n\r\f])*?[^\\]\')/],["str",/^r?\"(\"|(?:[^\n\r\f])*?[^\\]\")/],["typ",/^[A-Z]\w*/],["pln",/^[a-z_$][a-z0-9_]*/i],["pun",/^[~!%^&*+=|?:<>/-]/],["lit",/^\b0x[0-9a-f]+/i],["lit",/^\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i],["lit", 19 | /^\b\.\d+(?:e[+-]?\d+)?/i],["pun",/^[(){}\[\],.;]/]]),["dart"]); 20 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/sections/_defenses.pug: -------------------------------------------------------------------------------- 1 | //- See _attributes.pug for info on these IDs and classes 2 | section(data-i18n-aria-label='defenses')#defenses.defenses.paper-background 3 | label(for='defense-bonus' data-i18n='defense' role='heading' aria-level=4) 4 | +number({name:'defense total',type:'number',readonly:'',class:'underlined',value:10,trigger:{calculation:'calcDefense'}}) 5 | +number({name:'defense mod',class:'underlined',trigger:{affects:['defense_total']}}) 6 | label(for='reduction-bonus' data-i18n='reduction' role='heading' aria-level=4) 7 | +number({name:'reduction value',readonly:'',class:'underlined',trigger:{calculation:'calcDefense'}}) 8 | +number({name:'reduction mod',class:'underlined',trigger:{affects:['reduction_value']}}) 9 | //- The next few lines relate to the endurance. We're going to adjust the endurance format from what it is on the paper sheet 10 | label(for='endurance' class='endurance-label' data-i18n='endurance',role='heading' aria-level=4) 11 | .boxed.span-2 12 | +number({name:'endurance',id:'endurance',value:0}) 13 | span.slash / 14 | +number({name:'endurance max',trigger:{affects:['defence'],triggeredFuncs:['calcHealth']}}) 15 | +roller({name:'saving throw',class:'span-2',role:'heading','aria-level':4,'data-i18n':'saving throw',trigger:{listenerFunc:'initiateRoll'}}) 16 | +number({name:'saving throw',class:'underlined'}) 17 | //- We're removing the attack modifier summary here because we'll incorporate it directly into the weapons section. 18 | label(for='myth-points' data-i18n='myth points' role='heading' aria-level=4).span-2 19 | +number({name:'myth points',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/articles/character/sections/_attributes.pug: -------------------------------------------------------------------------------- 1 | //- An array of all the attributes for the system. We'll iterate through this so we don't have to write the same code 6 times. 2 | - 3 | const attributes = [ 4 | 'might', 5 | 'finesse', 6 | 'resolve', 7 | 'insight', 8 | 'bearing', 9 | 'weal' 10 | ]; 11 | //- Let's store that array in the K-scaffold provided varObjects object so that we'll be able to reuse it in our HTML. 12 | - varObjects.attributeNames = attributes; 13 | //- Our attributes section. We'll use the ID and class in our CSS and our navigation functions. paper-background will be used to style the backgrounds of our sections. 14 | section#attributes.attributes.paper-background 15 | //- We'll use CSS grid to lay this section out once we get to writing our SCSS 16 | h5(data-i18n='score').score-head 17 | h5(data-i18n='modifier').modifier-head 18 | //- iterating through the attributes array. 19 | each name in attributes 20 | //- This is a roller mixin from the k-scaffold. It will make our action buttons draggable to the macro bar. We'll write the listener function later. 21 | +roller({name,role:'heading','aria-level':4,'data-i18n':name,trigger:{listenerFunc:'initiateRoll'}}) 22 | //- The raw score of the attribute. It affects the mod for the attribute. 23 | +number({name,class:'underlined',trigger:{affects:[`${name}_mod`]}}) 24 | //- the modifier for the attribute, it will be calculated by the calcAttribute function that we will write in the future. It is set to readonly, so that only our sheetworker will be able edit it. 25 | +number({name:`${name} mod`,readonly:'',class:'underlined',trigger:{calculation:'calcAttribute'}}) -------------------------------------------------------------------------------- /K_Scaffold/Template v2/system.pug: -------------------------------------------------------------------------------- 1 | include scaffold/_kpug.pug 2 | //- additional includes should be below this point 3 | +input-label({ 4 | label:'strength', 5 | inputObj:{name:'strength',type:'number',value:10,trigger:{affects:['strength mod']}} 6 | }) 7 | +input-label({ 8 | label:'strength mod', 9 | inputObj:{name:'strength mod',type:'number',value:0,trigger:{affects:['athletics','repeating attack $x mod'],calculation:'calcStrengthMod'}} 10 | }) 11 | +input-label({ 12 | label:'athletics base', 13 | inputObj:{name:'athletics base',type:'number',value:0,trigger:{affects:['athletics']}} 14 | }) 15 | +input-label({ 16 | label:'athletics', 17 | inputObj:{name:'athletics',type:'number',value:0,trigger:{calculation:'calcAthletics'}} 18 | }) 19 | +fieldset({name:'attack'}) 20 | +text({name:'name',placeholder:'name'}) 21 | +input-label({ 22 | label:'mod', 23 | inputObj:{name:'mod',readonly:'',type:'number',value:0,trigger:{calculation:'calcAttackMod'}} 24 | }) 25 | +input-label({ 26 | label:'bonus', 27 | inputObj:{name:'bonus',type:'number',value:0,trigger:{affects:['repeating attack $x mod']}} 28 | }) 29 | +input-label({ 30 | label:'weight', 31 | inputObj:{name:'weight',type:'number',value:0,trigger:{affects:['weapon weight']}} 32 | }) 33 | +input-label({ 34 | label:'quantity', 35 | inputObj:{name:'quantity',type:'number',value:0,trigger:{affects:['weapon weight']}} 36 | }) 37 | +input-label({ 38 | label:'weapon weight', 39 | inputObj:{name:'weapon weight',type:'number',readonly:'',value:0,trigger:{calculation:'calcWeaponWeight'}} 40 | }) 41 | +kscript 42 | //- All additional javascript files should start here 43 | include Javascript/variables.js 44 | include Javascript/demoworkers.js -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_defenses.pug: -------------------------------------------------------------------------------- 1 | //- See _attributes.pug for info on these IDs and classes 2 | section#defenses.defenses.paper-background 3 | .boxed.span-all 4 | label(for='defense-bonus' data-i18n='defense' role='heading' aria-level=4) 5 | +number({name:'defense total',type:'number',readonly:'',class:'underlined',value:10,trigger:{calculation:'calcDefense'}}) 6 | +number({name:'defense mod',class:'underlined',trigger:{affects:['defense_total']}}) 7 | .boxed.span-all 8 | label(for='reduction-bonus' data-i18n='reduction value' role='heading' aria-level=4) 9 | +number({name:'reduction value',readonly:'',class:'underlined',trigger:{calculation:'calcDefense'}}) 10 | +number({name:'reduction mod',class:'underlined',trigger:{affects:['reduction_value']}}) 11 | //- The next few lines relate to the endurance. We're going to adjust the endurance format from what it is on the paper sheet 12 | label(for='endurance' class='endurance-label' data-i18n='endurance',role='heading' aria-level=4) 13 | .boxed.span-2 14 | +number({name:'endurance',id:'endurance',value:0}) 15 | span.slash / 16 | +number({name:'endurance max',trigger:{affects:['defence'],triggeredFuncs:['calcHealth']}}) 17 | +roller-label({ 18 | inputObj:{name:'saving throw',type:'number',class:'underlined'}, 19 | buttonObj:{name:'saving throw',role:'heading','aria-level':4,'data-i18n':'saving throw',trigger:{listenerFunc:'initiateRoll'}} 20 | }) 21 | //- We're removing the attack modifier summary here because we'll incorporate it directly into the weapons section. 22 | +input-label({ 23 | label:'myth points', 24 | inputObj:{name:'myth points',type:'number',class:'underlined'} 25 | }) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/sections/_defenses.pug: -------------------------------------------------------------------------------- 1 | //- See _attributes.pug for info on these IDs and classes 2 | section#defenses.defenses.paper-background 3 | .boxed.span-all 4 | label(for='defense-bonus' data-i18n='defense' role='heading' aria-level=4) 5 | +number({name:'defense total',type:'number',readonly:'',class:'underlined',value:10,trigger:{calculation:'calcDefense'}}) 6 | +number({name:'defense mod',class:'underlined',trigger:{affects:['defense_total']}}) 7 | .boxed.span-all 8 | label(for='reduction-bonus' data-i18n='reduction value' role='heading' aria-level=4) 9 | +number({name:'reduction value',readonly:'',class:'underlined',trigger:{calculation:'calcDefense'}}) 10 | +number({name:'reduction mod',class:'underlined',trigger:{affects:['reduction_value']}}) 11 | //- The next few lines relate to the endurance. We're going to adjust the endurance format from what it is on the paper sheet 12 | label(for='endurance' class='endurance-label' data-i18n='endurance',role='heading' aria-level=4) 13 | .boxed.span-2 14 | +number({name:'endurance',id:'endurance',value:0}) 15 | span.slash / 16 | +number({name:'endurance max',trigger:{affects:['defence'],triggeredFuncs:['calcHealth']}}) 17 | +roller-label({ 18 | inputObj:{name:'saving throw',type:'number',class:'underlined'}, 19 | buttonObj:{name:'saving throw',role:'heading','aria-level':4,'data-i18n':'saving throw',trigger:{listenerFunc:'initiateRoll'}} 20 | }) 21 | //- We're removing the attack modifier summary here because we'll incorporate it directly into the weapons section. 22 | +input-label({ 23 | label:'myth points', 24 | inputObj:{name:'myth points',type:'number',class:'underlined'} 25 | }) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-fs.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^#(?:if[\t\n\r \xA0]+(?:[a-z_$][\w\']*|``[^\r\n\t`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])(?:\'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\r\n]*|\(\*[\s\S]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/], 18 | ["lit",/^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^(?:[a-z_][\w']*[!?#]?|``[^\r\n\t`]*(?:``|$))/i],["pun",/^[^\t\n\r \xA0\"\'\w]+/]]),["fs","ml"]); 19 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-ml.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2008 Google Inc. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^#(?:if[\t\n\r \xA0]+(?:[a-z_$][\w\']*|``[^\r\n\t`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])(?:\'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\r\n]*|\(\*[\s\S]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/], 18 | ["lit",/^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^(?:[a-z_][\w']*[!?#]?|``[^\r\n\t`]*(?:``|$))/i],["pun",/^[^\t\n\r \xA0\"\'\w]+/]]),["fs","ml"]); 19 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/sections/_armor.pug: -------------------------------------------------------------------------------- 1 | section(aria-labelledby='armor-header')#armor.armor.paper-background.repeating-container 2 | h3(data-i18n='armor and shield')#armor-header 3 | //- See the _weapons.pug file for a full comment on what's going on here. 4 | //- We've added a trigger property to this fieldset so that when an armor item is removed, reduction_value and defense_total will be updated. 5 | +customControlFieldset({name:'armor',trigger:{affects:['reduction_value','defense_total']}}) 6 | +collapse 7 | //- This checkbox will mark this piece of armor or shield as being equipped or not, and will trigger a recalc of the defense score and reduction value. 8 | .span-all.name 9 | +checkbox({name:'equipped',value:1,trigger:{affects:['defense_total','reduction_value']}}) 10 | +text({name:'name',class:'underlined','data-i18n-placeholder':'armor name'}) 11 | +input-label({ 12 | label:'reduction', 13 | inputObj:{name:'reduction',type:'number',class:'underlined',trigger:{affects:['reduction_value']}}, 14 | spanObj:{role:'heading','aria-level':5} 15 | }) 16 | +input-label({ 17 | label:'defense', 18 | inputObj:{name:'defense',type:'number',class:'underlined',trigger:{affects:['defense_total']}}, 19 | spanObj:{role:'heading','aria-level':5} 20 | }) 21 | each name in ['traits','aspects'] 22 | +input-label({ 23 | label:name, 24 | inputObj:{name,type:'text',class:'underlined'}, 25 | divObj:{class:'span-all expanded'}, 26 | spanObj:{role:'heading','aria-level':5} 27 | }) 28 | .headed-textarea.description.expanded.span-all 29 | +h5({'data-i18n':'description'}) 30 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/sections/_armor.pug: -------------------------------------------------------------------------------- 1 | section(aria-labelledby='armor-header')#armor.armor.paper-background.repeating-container 2 | h3(data-i18n='armor and shield')#armor-header 3 | //- See the _weapons.pug file for a full comment on what's going on here. 4 | //- We've added a trigger property to this fieldset so that when an armor item is removed, reduction_value and defense_total will be updated. 5 | +customControlFieldset({name:'armor',trigger:{affects:['reduction_value','defense_total']}}) 6 | +collapse 7 | //- This checkbox will mark this piece of armor or shield as being equipped or not, and will trigger a recalc of the defense score and reduction value. 8 | .span-all.name 9 | +checkbox({name:'equipped',value:1,trigger:{affects:['defense_total','reduction_value']}}) 10 | +text({name:'name',class:'underlined','data-i18n-placeholder':'armor name'}) 11 | +input-label({ 12 | label:'reduction', 13 | inputObj:{name:'reduction',type:'number',class:'underlined',trigger:{affects:['reduction_value']}}, 14 | spanObj:{role:'heading','aria-level':5} 15 | }) 16 | +input-label({ 17 | label:'defense', 18 | inputObj:{name:'defense',type:'number',class:'underlined',trigger:{affects:['defense_total']}}, 19 | spanObj:{role:'heading','aria-level':5} 20 | }) 21 | each name in ['traits','aspects'] 22 | +input-label({ 23 | label:name, 24 | inputObj:{name,type:'text',class:'underlined'}, 25 | divObj:{class:'span-all expanded'}, 26 | spanObj:{role:'heading','aria-level':5} 27 | }) 28 | .headed-textarea.description.expanded.span-all 29 | +h5({'data-i18n':'description'}) 30 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/scaffold/listeners.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | const listeners = {}; 4 | const baseGet = Object.entries(cascades).reduce((memo,[attrName,detailObj])=>{ 5 | if(!/repeating/.test(attrName) && detailObj.type !== 'action'){ 6 | memo.push(detailObj.name); 7 | } 8 | if(detailObj.listener){ 9 | listeners[detailObj.listener] = detailObj.listenerFunc; 10 | } 11 | return memo; 12 | },[]); 13 | kFuncs.baseGet = baseGet; 14 | const registerEventHandlers = function(){ 15 | on('sheet:opened',updateSheet); 16 | debug({funcKeys:Object.keys(funcs),funcs}); 17 | //Roll20 change and click listeners 18 | Object.entries(listeners).forEach(([event,funcName])=>{ 19 | if(funcs[funcName]){ 20 | on(event,funcs[funcName]); 21 | }else{ 22 | debug(`!!!Warning!!! no function named ${funcName} found. No listener created for ${event}`,true); 23 | } 24 | }); 25 | log(`kScaffold Loaded`); 26 | }; 27 | setTimeout(registerEventHandlers,0);//Delay the execution of event registration to ensure all event properties are present. 28 | 29 | const addItem = function(event){ 30 | let [,,section] = parseClickTrigger(event.triggerName); 31 | section = section.replace(/add-/,''); 32 | let rowID = generateRowID(); 33 | const setObj = {}; 34 | setObj[`repeating_${section}_${rowID}_name`] = ''; 35 | k.setAttrs(setObj); 36 | }; 37 | registerFuncs({addItem}); 38 | 39 | const editSection = function(event){ 40 | let [,,section] = parseClickTrigger(event.triggerName); 41 | section = section.replace(/edit-/,''); 42 | let target = `fieldset.repeating_${section} + .repcontainer`; 43 | $20(target).toggleClass('editmode'); 44 | }; 45 | registerFuncs({editSection}); 46 | 47 | return kFuncs; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/scaffold/listeners.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | const listeners = {}; 4 | const baseGet = Object.entries(cascades).reduce((memo,[attrName,detailObj])=>{ 5 | if(!/repeating/.test(attrName) && detailObj.type !== 'action'){ 6 | memo.push(detailObj.name); 7 | } 8 | if(detailObj.listener){ 9 | listeners[detailObj.listener] = detailObj.listenerFunc; 10 | } 11 | return memo; 12 | },[]); 13 | kFuncs.baseGet = baseGet; 14 | const registerEventHandlers = function(){ 15 | on('sheet:opened',updateSheet); 16 | debug({funcKeys:Object.keys(funcs),funcs}); 17 | //Roll20 change and click listeners 18 | Object.entries(listeners).forEach(([event,funcName])=>{ 19 | if(funcs[funcName]){ 20 | on(event,funcs[funcName]); 21 | }else{ 22 | debug(`!!!Warning!!! no function named ${funcName} found. No listener created for ${event}`,true); 23 | } 24 | }); 25 | log(`kScaffold Loaded`); 26 | }; 27 | setTimeout(registerEventHandlers,0);//Delay the execution of event registration to ensure all event properties are present. 28 | 29 | const addItem = function(event){ 30 | let [,,section] = parseClickTrigger(event.triggerName); 31 | section = section.replace(/add-/,''); 32 | let rowID = generateRowID(); 33 | const setObj = {}; 34 | setObj[`repeating_${section}_${rowID}_name`] = ''; 35 | k.setAttrs(setObj); 36 | }; 37 | registerFuncs({addItem}); 38 | 39 | const editSection = function(event){ 40 | let [,,section] = parseClickTrigger(event.triggerName); 41 | section = section.replace(/edit-/,''); 42 | let target = `fieldset.repeating_${section} + .repcontainer`; 43 | $20(target).toggleClass('editmode'); 44 | }; 45 | registerFuncs({editSection}); 46 | 47 | return kFuncs; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/scaffold/listeners.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | const listeners = {}; 4 | const baseGet = Object.entries(cascades).reduce((memo,[attrName,detailObj])=>{ 5 | if(!/repeating/.test(attrName) && detailObj.type !== 'action'){ 6 | memo.push(detailObj.name); 7 | } 8 | if(detailObj.listener){ 9 | listeners[detailObj.listener] = detailObj.listenerFunc; 10 | } 11 | return memo; 12 | },[]); 13 | kFuncs.baseGet = baseGet; 14 | const registerEventHandlers = function(){ 15 | on('sheet:opened',updateSheet); 16 | debug({funcKeys:Object.keys(funcs),funcs}); 17 | //Roll20 change and click listeners 18 | Object.entries(listeners).forEach(([event,funcName])=>{ 19 | if(funcs[funcName]){ 20 | on(event,funcs[funcName]); 21 | }else{ 22 | debug(`!!!Warning!!! no function named ${funcName} found. No listener created for ${event}`,true); 23 | } 24 | }); 25 | log(`kScaffold Loaded`); 26 | }; 27 | setTimeout(registerEventHandlers,0);//Delay the execution of event registration to ensure all event properties are present. 28 | 29 | const addItem = function(event){ 30 | let [,,section] = parseClickTrigger(event.triggerName); 31 | section = section.replace(/add-/,''); 32 | let rowID = generateRowID(); 33 | const setObj = {}; 34 | setObj[`repeating_${section}_${rowID}_name`] = ''; 35 | k.setAttrs(setObj); 36 | }; 37 | registerFuncs({addItem}); 38 | 39 | const editSection = function(event){ 40 | let [,,section] = parseClickTrigger(event.triggerName); 41 | section = section.replace(/edit-/,''); 42 | let target = `fieldset.repeating_${section} + .repcontainer`; 43 | $20(target).toggleClass('editmode'); 44 | }; 45 | registerFuncs({editSection}); 46 | 47 | return kFuncs; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/scaffold/listeners.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | const listeners = {}; 4 | const baseGet = Object.entries(cascades).reduce((memo,[attrName,detailObj])=>{ 5 | if(!/repeating/.test(attrName) && detailObj.type !== 'action'){ 6 | memo.push(detailObj.name); 7 | } 8 | if(detailObj.listener){ 9 | listeners[detailObj.listener] = detailObj.listenerFunc; 10 | } 11 | return memo; 12 | },[]); 13 | kFuncs.baseGet = baseGet; 14 | const registerEventHandlers = function(){ 15 | on('sheet:opened',updateSheet); 16 | debug({funcKeys:Object.keys(funcs),funcs}); 17 | //Roll20 change and click listeners 18 | Object.entries(listeners).forEach(([event,funcName])=>{ 19 | if(funcs[funcName]){ 20 | on(event,funcs[funcName]); 21 | }else{ 22 | debug(`!!!Warning!!! no function named ${funcName} found. No listener created for ${event}`,true); 23 | } 24 | }); 25 | log(`kScaffold Loaded`); 26 | }; 27 | setTimeout(registerEventHandlers,0);//Delay the execution of event registration to ensure all event properties are present. 28 | 29 | const addItem = function(event){ 30 | let [,,section] = parseClickTrigger(event.triggerName); 31 | section = section.replace(/add-/,''); 32 | let rowID = generateRowID(); 33 | const setObj = {}; 34 | setObj[`repeating_${section}_${rowID}_name`] = ''; 35 | k.setAttrs(setObj); 36 | }; 37 | registerFuncs({addItem}); 38 | 39 | const editSection = function(event){ 40 | let [,,section] = parseClickTrigger(event.triggerName); 41 | section = section.replace(/edit-/,''); 42 | let target = `fieldset.repeating_${section} + .repcontainer`; 43 | $20(target).toggleClass('editmode'); 44 | }; 45 | registerFuncs({editSection}); 46 | 47 | return kFuncs; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/scaffold/listeners.js: -------------------------------------------------------------------------------- 1 | /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ 2 | /*jshint -W014,-W084,-W030,-W033*/ 3 | const listeners = {}; 4 | const baseGet = Object.entries(cascades).reduce((memo,[attrName,detailObj])=>{ 5 | if(!/repeating/.test(attrName) && detailObj.type !== 'action'){ 6 | memo.push(detailObj.name); 7 | } 8 | if(detailObj.listener){ 9 | listeners[detailObj.listener] = detailObj.listenerFunc; 10 | } 11 | return memo; 12 | },[]); 13 | kFuncs.baseGet = baseGet; 14 | const registerEventHandlers = function(){ 15 | on('sheet:opened',updateSheet); 16 | debug({funcKeys:Object.keys(funcs),funcs}); 17 | //Roll20 change and click listeners 18 | Object.entries(listeners).forEach(([event,funcName])=>{ 19 | if(funcs[funcName]){ 20 | on(event,funcs[funcName]); 21 | }else{ 22 | debug(`!!!Warning!!! no function named ${funcName} found. No listener created for ${event}`,true); 23 | } 24 | }); 25 | log(`kScaffold Loaded`); 26 | }; 27 | setTimeout(registerEventHandlers,0);//Delay the execution of event registration to ensure all event properties are present. 28 | 29 | const addItem = function(event){ 30 | let [,,section] = parseClickTrigger(event.triggerName); 31 | section = section.replace(/add-/,''); 32 | let rowID = generateRowID(); 33 | const setObj = {}; 34 | setObj[`repeating_${section}_${rowID}_name`] = ''; 35 | k.setAttrs(setObj); 36 | }; 37 | registerFuncs({addItem}); 38 | 39 | const editSection = function(event){ 40 | let [,,section] = parseClickTrigger(event.triggerName); 41 | section = section.replace(/edit-/,''); 42 | let target = `fieldset.repeating_${section} + .repcontainer`; 43 | $20(target).toggleClass('editmode'); 44 | }; 45 | registerFuncs({editSection}); 46 | 47 | return kFuncs; -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_attributes.pug: -------------------------------------------------------------------------------- 1 | //- An array of all the attributes for the system. We'll iterate through this so we don't have to write the same code 6 times. 2 | - 3 | const attributes = [ 4 | 'might', 5 | 'finesse', 6 | 'resolve', 7 | 'insight', 8 | 'bearing', 9 | 'weal' 10 | ]; 11 | //- Let's store that array in the K-scaffold provided varObjects object so that we'll be able to reuse it in our HTML. 12 | - varObjects.attributeNames = attributes; 13 | //- Our attributes section. We'll use the ID and class in our CSS and our navigation functions. paper-background will be used to style the backgrounds of our sections. 14 | section#attributes.attributes.paper-background 15 | //- We'll use CSS grid to lay this section out once we get to writing our SCSS 16 | h5(data-i18n='score').score-head 17 | h5(data-i18n='modifier').modifier-head 18 | //- iterating through the attributes array. 19 | each name in attributes 20 | //- This is a roller mixin from the k-scaffold. It will make our action buttons draggable to the macro bar. We'll write the listener function later. 21 | +roller({name,role:'heading','aria-level':4,'data-i18n':name,trigger:{listenerFunc:'initiateRoll'}}) 22 | //- The raw score of the attribute. It affects the mod for the attribute. 23 | +number({name,class:'underlined',value:10,trigger:{affects:[`${name}_mod`]}}) 24 | //- the modifier for the attribute, it will be calculated by the calcAttribute function that we will write in the future. It is set to readonly, so that only our sheetworker will be able edit it. 25 | - let modObj = {name:`${name} mod`,readonly:'',value:0,class:'underlined',trigger:{calculation:'calcAttributeMod'}}; 26 | if name === 'finesse' 27 | - modObj.trigger.affects = ['defense_total']; 28 | +number(modObj) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/2 First Code/thj2e/scaffold/kvariables.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This stores the name of your sheet for use in the logging functions {@link log} and {@link debug} 3 | * * @var 4 | * @type {string} 5 | */ 6 | docs.js['k.sheetName'] = { 7 | type:'string', 8 | description:'This stores the name of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug).' 9 | }; 10 | let sheetName = 'kScaffold Powered Sheet'; 11 | kFuncs.sheetName = sheetName; 12 | /** 13 | * This stores the version of your sheet for use in the logging functions{@link log} and {@link debug}. It is also stored in the sheet_version attribute on your character sheet. 14 | * @var 15 | * @type {number} 16 | */ 17 | docs.js['k.version'] = { 18 | type:'number', 19 | description:'This stores the version of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug), and in the K-scaffolds sheet versioning handling. It is also stored in the sheet_version attribute on your character sheet.' 20 | }; 21 | let version = 0; 22 | kFuncs.version = version; 23 | /** 24 | * A boolean flag that tells the script whether to enable or disable {@link debug} calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for your entire session. Otherwise, it remains false. 25 | * @var 26 | * @type {boolean} 27 | */ 28 | docs.js['k.debugMode'] = { 29 | type:'boolean', 30 | description:'A boolean flag that tells the script whether to enable or disable [k.debug](#kdebug) calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for all sheets you open from that point on. Otherwise, it remains false.' 31 | }; 32 | let debugMode = false; 33 | kFuncs.debugMode = debugMode; 34 | 35 | const kscaffoldJSVersion = 0.20; 36 | const kscaffoldPUGVersion = 0.20; 37 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/scaffold/kvariables.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This stores the name of your sheet for use in the logging functions {@link log} and {@link debug} 3 | * * @var 4 | * @type {string} 5 | */ 6 | docs.js['k.sheetName'] = { 7 | type:'string', 8 | description:'This stores the name of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug).' 9 | }; 10 | let sheetName = 'kScaffold Powered Sheet'; 11 | kFuncs.sheetName = sheetName; 12 | /** 13 | * This stores the version of your sheet for use in the logging functions{@link log} and {@link debug}. It is also stored in the sheet_version attribute on your character sheet. 14 | * @var 15 | * @type {number} 16 | */ 17 | docs.js['k.version'] = { 18 | type:'number', 19 | description:'This stores the version of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug), and in the K-scaffolds sheet versioning handling. It is also stored in the sheet_version attribute on your character sheet.' 20 | }; 21 | let version = 0; 22 | kFuncs.version = version; 23 | /** 24 | * A boolean flag that tells the script whether to enable or disable {@link debug} calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for your entire session. Otherwise, it remains false. 25 | * @var 26 | * @type {boolean} 27 | */ 28 | docs.js['k.debugMode'] = { 29 | type:'boolean', 30 | description:'A boolean flag that tells the script whether to enable or disable [k.debug](#kdebug) calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for all sheets you open from that point on. Otherwise, it remains false.' 31 | }; 32 | let debugMode = false; 33 | kFuncs.debugMode = debugMode; 34 | 35 | const kscaffoldJSVersion = 0.20; 36 | const kscaffoldPUGVersion = 0.20; 37 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/articles/character/sections/_attributes.pug: -------------------------------------------------------------------------------- 1 | //- An array of all the attributes for the system. We'll iterate through this so we don't have to write the same code 6 times. 2 | - 3 | const attributes = [ 4 | 'might', 5 | 'finesse', 6 | 'resolve', 7 | 'insight', 8 | 'bearing', 9 | 'weal' 10 | ]; 11 | //- Let's store that array in the K-scaffold provided varObjects object so that we'll be able to reuse it in our HTML. 12 | - varObjects.attributeNames = attributes; 13 | //- Our attributes section. We'll use the ID and class in our CSS and our navigation functions. paper-background will be used to style the backgrounds of our sections. 14 | section#attributes.attributes.paper-background 15 | //- We'll use CSS grid to lay this section out once we get to writing our SCSS 16 | h5(data-i18n='score').score-head 17 | h5(data-i18n='modifier').modifier-head 18 | //- iterating through the attributes array. 19 | each name in attributes 20 | //- This is a roller mixin from the k-scaffold. It will make our action buttons draggable to the macro bar. We'll write the listener function later. 21 | +roller({name,role:'heading','aria-level':4,'data-i18n':name,trigger:{listenerFunc:'initiateRoll'}}) 22 | //- The raw score of the attribute. It affects the mod for the attribute. 23 | +number({name,class:'underlined',value:10,trigger:{affects:[`${name}_mod`]}}) 24 | //- the modifier for the attribute, it will be calculated by the calcAttribute function that we will write in the future. It is set to readonly, so that only our sheetworker will be able edit it. 25 | - let modObj = {name:`${name} mod`,readonly:'',value:0,class:'underlined',trigger:{calculation:'calcAttributeMod'}}; 26 | if name === 'finesse' 27 | - modObj.trigger.affects = ['defense_total']; 28 | +number(modObj) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/scaffold/kvariables.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This stores the name of your sheet for use in the logging functions {@link log} and {@link debug} 3 | * * @var 4 | * @type {string} 5 | */ 6 | docs.js['k.sheetName'] = { 7 | type:'string', 8 | description:'This stores the name of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug).' 9 | }; 10 | let sheetName = 'kScaffold Powered Sheet'; 11 | kFuncs.sheetName = sheetName; 12 | /** 13 | * This stores the version of your sheet for use in the logging functions{@link log} and {@link debug}. It is also stored in the sheet_version attribute on your character sheet. 14 | * @var 15 | * @type {number} 16 | */ 17 | docs.js['k.version'] = { 18 | type:'number', 19 | description:'This stores the version of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug), and in the K-scaffolds sheet versioning handling. It is also stored in the sheet_version attribute on your character sheet.' 20 | }; 21 | let version = 0; 22 | kFuncs.version = version; 23 | /** 24 | * A boolean flag that tells the script whether to enable or disable {@link debug} calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for your entire session. Otherwise, it remains false. 25 | * @var 26 | * @type {boolean} 27 | */ 28 | docs.js['k.debugMode'] = { 29 | type:'boolean', 30 | description:'A boolean flag that tells the script whether to enable or disable [k.debug](#kdebug) calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for all sheets you open from that point on. Otherwise, it remains false.' 31 | }; 32 | let debugMode = false; 33 | kFuncs.debugMode = debugMode; 34 | 35 | const kscaffoldJSVersion = 0.20; 36 | const kscaffoldPUGVersion = 0.20; 37 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/scaffold/kvariables.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This stores the name of your sheet for use in the logging functions {@link log} and {@link debug} 3 | * * @var 4 | * @type {string} 5 | */ 6 | docs.js['k.sheetName'] = { 7 | type:'string', 8 | description:'This stores the name of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug).' 9 | }; 10 | let sheetName = 'kScaffold Powered Sheet'; 11 | kFuncs.sheetName = sheetName; 12 | /** 13 | * This stores the version of your sheet for use in the logging functions{@link log} and {@link debug}. It is also stored in the sheet_version attribute on your character sheet. 14 | * @var 15 | * @type {number} 16 | */ 17 | docs.js['k.version'] = { 18 | type:'number', 19 | description:'This stores the version of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug), and in the K-scaffolds sheet versioning handling. It is also stored in the sheet_version attribute on your character sheet.' 20 | }; 21 | let version = 0; 22 | kFuncs.version = version; 23 | /** 24 | * A boolean flag that tells the script whether to enable or disable {@link debug} calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for your entire session. Otherwise, it remains false. 25 | * @var 26 | * @type {boolean} 27 | */ 28 | docs.js['k.debugMode'] = { 29 | type:'boolean', 30 | description:'A boolean flag that tells the script whether to enable or disable [k.debug](#kdebug) calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for all sheets you open from that point on. Otherwise, it remains false.' 31 | }; 32 | let debugMode = false; 33 | kFuncs.debugMode = debugMode; 34 | 35 | const kscaffoldJSVersion = 0.20; 36 | const kscaffoldPUGVersion = 0.20; 37 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/3 Repeating Sections and Javascript/thj2e/scaffold/kvariables.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This stores the name of your sheet for use in the logging functions {@link log} and {@link debug} 3 | * * @var 4 | * @type {string} 5 | */ 6 | docs.js['k.sheetName'] = { 7 | type:'string', 8 | description:'This stores the name of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug).' 9 | }; 10 | let sheetName = 'kScaffold Powered Sheet'; 11 | kFuncs.sheetName = sheetName; 12 | /** 13 | * This stores the version of your sheet for use in the logging functions{@link log} and {@link debug}. It is also stored in the sheet_version attribute on your character sheet. 14 | * @var 15 | * @type {number} 16 | */ 17 | docs.js['k.version'] = { 18 | type:'number', 19 | description:'This stores the version of your sheet for use in the logging functions [k.log](#klog) and [k.debug](#kdebug), and in the K-scaffolds sheet versioning handling. It is also stored in the sheet_version attribute on your character sheet.' 20 | }; 21 | let version = 0; 22 | kFuncs.version = version; 23 | /** 24 | * A boolean flag that tells the script whether to enable or disable {@link debug} calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for your entire session. Otherwise, it remains false. 25 | * @var 26 | * @type {boolean} 27 | */ 28 | docs.js['k.debugMode'] = { 29 | type:'boolean', 30 | description:'A boolean flag that tells the script whether to enable or disable [k.debug](#kdebug) calls. If the version of the sheet is `0`, or an attribute named `debug_mode` is found on opening this is set to true for all sheets you open from that point on. Otherwise, it remains false.' 31 | }; 32 | let debugMode = false; 33 | kFuncs.debugMode = debugMode; 34 | 35 | const kscaffoldJSVersion = 0.20; 36 | const kscaffoldPUGVersion = 0.20; 37 | -------------------------------------------------------------------------------- /K_Scaffold/Template v2/scaffold/tabs/tabs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * The default tab navigation function of the K-scaffold. Courtesy of Riernar. It will add `k-active-tab` to the active tab-container and `k-active-button` to the active button. You can either write your own CSS to control display of these, or use the default CSS included in `scaffold/_k.scss`. Note that `k-active-button` has no default CSS as it is assumed that you will want to style the active button to match your system. 3 | * @param {Object} trigger - The trigger object 4 | */ 5 | const kSwitchTab = function ({ trigger, attributes }) { 6 | const [container, tab] = ( 7 | trigger.name.match(/nav-tabs-(.+)--(.+)/) || 8 | [] 9 | ).slice(1); 10 | $20(`[data-container-tab="${container}"]`).removeClass('k-active-tab'); 11 | $20(`[data-container-tab="${container}"][data-tab="${tab}"]`).addClass('k-active-tab'); 12 | $20(`[data-container-button="${container}"]`).removeClass('k-active-button'); 13 | $20(`[data-container-button="${container}"][data-button="${tab}"]`).addClass('k-active-button'); 14 | const tabInputName = `${container.replace(/\-/g,'_')}_tab`; 15 | if(persistentTabs.indexOf(tabInputName) > -1){ 16 | attributes[tabInputName] = trigger.name; 17 | } 18 | } 19 | 20 | registerFuncs({ kSwitchTab }); 21 | 22 | /** 23 | * Sets persistent tabs to their last active state 24 | * @param {object} trigger - The trigger that caused the function to be called 25 | * @param {object} attributes - The attribute values of the character 26 | * @param {object[]} sections - All the repeating section IDs 27 | * @param {object} casc - Expanded cascade object 28 | */ 29 | const kTabOnOpen = function({trigger,attributes,sections,casc}){ 30 | persistentTabs.forEach((tabInput) => { 31 | const pseudoTrigger = {name:attributes[tabInput]}; 32 | kSwitchTab({trigger:pseudoTrigger, attributes}); 33 | }); 34 | }; 35 | registerFuncs({ kTabOnOpen },{type:['opener']}); -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/sections/_spells.pug: -------------------------------------------------------------------------------- 1 | - const spellLevels = ['apprentice','journeyman','master'] 2 | section(aria-labelledby='spell-header')#spells.spells.paper-background.repeating-container 3 | h3(data-i18n='spells')#spell-header 4 | each level in spellLevels 5 | .input-label.input-label--dual 6 | label(for=`${level}-current` data-i18n=`${level} per day` role='heading' aria-level=5) 7 | +number({name:`${level} per day`,class:'underlined',id:`${level}-current`}) 8 | span.separator / 9 | +number({name:`${level} per day max`,class:'underlined'}) 10 | +customControlFieldset({name:'spells'}) 11 | +collapse 12 | .name 13 | .roller-container.hover-container.hover-container--two-row.hover-container--two-column 14 | +roller({name:'describe',class:'glyph-only hover-container__content roller--scroll align-start justify-start',trigger:{listenerFunc:'castSpell'}}) 15 | +roller({name:'cast 1',class:'glyph-only hover-container__hover-visible align-start justify-end',trigger:{listenerFunc:'castSpell'}}) 16 | +roller({name:'cast 2',class:'glyph-only hover-container__hover-visible align-end justify-start',trigger:{listenerFunc:'castSpell'}}) 17 | +roller({name:'cast 3',class:'glyph-only hover-container__hover-visible align-end justify-end',trigger:{listenerFunc:'castSpell'}}) 18 | +text({name:'name',class:'underlined',role:'heading','aria-level':5}) 19 | +select({name:'level',class:'underlined'}) 20 | each value in spellLevels 21 | +option({value,'data-i18n':value}) 22 | each n in [1,2,3] 23 | .headed-textarea.description.expanded 24 | h5(data-i18n=`effect ${n}`) 25 | +adaptiveTextarea({name:`effect ${n}`,class:'underlined'}) 26 | .headed-textarea.description.expanded 27 | +h5({'data-i18n':'description'}) 28 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/6 Roll on!/thj2e/articles/character/sections/_attributes.pug: -------------------------------------------------------------------------------- 1 | //- An array of all the attributes for the system. We'll iterate through this so we don't have to write the same code 6 times. 2 | - 3 | const attributes = [ 4 | 'might', 5 | 'finesse', 6 | 'resolve', 7 | 'insight', 8 | 'bearing', 9 | 'weal' 10 | ]; 11 | //- Let's store that array in the K-scaffold provided varObjects object so that we'll be able to reuse it in our HTML. 12 | - varObjects.attributeNames = attributes; 13 | //- Our attributes section. We'll use the ID and class in our CSS and our navigation functions. paper-background will be used to style the backgrounds of our sections. 14 | section(data-i18n-aria-label='attributes')#attributes.attributes.paper-background 15 | h3(data-i18n='attributes') 16 | //- We'll use CSS grid to lay this section out once we get to writing our SCSS 17 | h5(data-i18n='score').score-head 18 | h5(data-i18n='modifier').modifier-head 19 | //- iterating through the attributes array. 20 | each name in attributes 21 | //- This is a roller mixin from the k-scaffold. It will make our action buttons draggable to the macro bar. We'll write the listener function later. 22 | +roller({name,class:name,role:'heading','aria-level':4,'data-i18n':name,trigger:{listenerFunc:'rollGeneric'}}) 23 | //- The raw score of the attribute. It affects the mod for the attribute. 24 | +number({name,class:`${name} underlined`,value:10,trigger:{affects:[`${name}_mod`]}}) 25 | //- the modifier for the attribute, it will be calculated by the calcAttribute function that we will write in the future. It is set to readonly, so that only our sheetworker will be able edit it. 26 | - let modObj = {name:`${name} mod`,readonly:'',value:0,class:`${name} underlined`,trigger:{calculation:'calcAttributeMod'}}; 27 | if name === 'finesse' 28 | - modObj.trigger.affects = ['defense_total']; 29 | +number(modObj) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/sections/_attributes.pug: -------------------------------------------------------------------------------- 1 | //- An array of all the attributes for the system. We'll iterate through this so we don't have to write the same code 6 times. 2 | - 3 | const attributes = [ 4 | 'might', 5 | 'finesse', 6 | 'resolve', 7 | 'insight', 8 | 'bearing', 9 | 'weal' 10 | ]; 11 | //- Let's store that array in the K-scaffold provided varObjects object so that we'll be able to reuse it in our HTML. 12 | - varObjects.attributeNames = attributes; 13 | //- Our attributes section. We'll use the ID and class in our CSS and our navigation functions. paper-background will be used to style the backgrounds of our sections. 14 | section(data-i18n-aria-label='attributes')#attributes.attributes.paper-background 15 | h3(data-i18n='attributes') 16 | //- We'll use CSS grid to lay this section out once we get to writing our SCSS 17 | h5(data-i18n='score').score-head 18 | h5(data-i18n='modifier').modifier-head 19 | //- iterating through the attributes array. 20 | each name in attributes 21 | //- This is a roller mixin from the k-scaffold. It will make our action buttons draggable to the macro bar. We'll write the listener function later. 22 | +roller({name,class:name,role:'heading','aria-level':4,'data-i18n':name,trigger:{listenerFunc:'initiateRoll'}}) 23 | //- The raw score of the attribute. It affects the mod for the attribute. 24 | +number({name,class:`${name} underlined`,value:10,trigger:{affects:[`${name}_mod`]}}) 25 | //- the modifier for the attribute, it will be calculated by the calcAttribute function that we will write in the future. It is set to readonly, so that only our sheetworker will be able edit it. 26 | - let modObj = {name:`${name} mod`,readonly:'',value:0,class:`${name} underlined`,trigger:{calculation:'calcAttributeMod'}}; 27 | if name === 'finesse' 28 | - modObj.trigger.affects = ['defense_total']; 29 | +number(modObj) -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/5 Finding our Flair!/thj2e/articles/character/sections/_spells.pug: -------------------------------------------------------------------------------- 1 | - const spellLevels = ['apprentice','journeyman','master'] 2 | section(aria-labelledby='spell-header')#spells.spells.paper-background.repeating-container 3 | h3(data-i18n='spells')#spell-header 4 | each level in spellLevels 5 | .input-label.input-label--dual 6 | label(for=`${level}-current` data-i18n=`${level} per day` role='heading' aria-level=5) 7 | +number({name:`${level} per day`,class:'underlined',id:`${level}-current`}) 8 | span.separator / 9 | +number({name:`${level} per day max`,class:'underlined'}) 10 | +customControlFieldset({name:'spells'}) 11 | +collapse 12 | .name 13 | .roller-container.hover-container.hover-container--two-row.hover-container--two-column 14 | +roller({name:'describe',class:'glyph-only hover-container__content roller--scroll align-start justify-start',trigger:{listenerFunc:'initiatieRoll'}}) 15 | +roller({name:'cast 1',class:'glyph-only hover-container__hover-visible align-start justify-end',trigger:{listenerFunc:'initiateRoll'}}) 16 | +roller({name:'cast 2',class:'glyph-only hover-container__hover-visible align-end justify-start',trigger:{listenerFunc:'initiateRoll'}}) 17 | +roller({name:'cast 3',class:'glyph-only hover-container__hover-visible align-end justify-end',trigger:{listenerFunc:'initiateRoll'}}) 18 | +text({name:'name',class:'underlined',role:'heading','aria-level':5}) 19 | +select({name:'level',class:'underlined'}) 20 | each value in spellLevels 21 | +option({value,'data-i18n':value}) 22 | each n in [1,2,3] 23 | .headed-textarea.description.expanded 24 | h5(data-i18n=`effect ${n}`) 25 | +adaptiveTextarea({name:`effect ${n}`,class:'underlined'}) 26 | .headed-textarea.description.expanded 27 | +h5({'data-i18n':'description'}) 28 | +adaptiveTextarea({name:'description',class:'underlined'}) -------------------------------------------------------------------------------- /docs/assets/javascript/lang-ex.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2017 Jacek Kr??likowski 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^#.*/,null,"#"],["lit",/^'(?:[^'\\]|\\(?:.|\n|\r))*'?/,null,"'"],["atn",/^@\w+/,null,"@"],["pun",/^[!%&()*+,\-;<=>?\[\\\]^{|}]+/,null,"!%&()*+,-;<=>?[\\]^{|}"],["lit",/^(?:0o[0-7](?:[0-7]|_[0-7])*|0x[\da-fA-F](?:[\da-fA-F]|_[\da-fA-F])*|\d(?:\d|_\d)*(?:\.\d(?:\d|_\d)*)?(?:[eE][+\-]?\d(?:\d|_\d)*)?)/,null,"0123456789"]],[["atn",/^iex(?:\(\d+\))?> /], 18 | ["pun",/^::/],["lit",/^:(?:\w+[\!\?\@]?|"(?:[^"\\]|\\.)*"?)/],["atn",/^(?:__(?:CALLER|ENV|MODULE|DIR)__)/],["kwd",/^(?:alias|case|catch|def(?:delegate|exception|impl|macrop?|module|overridable|p?|protocol|struct)|do|else|end|fn|for|if|in|import|quote|raise|require|rescue|super|throw|try|unless|unquote(?:_splicing)?|use|when|with|yield)\b/],["lit",/^(?:true|false|nil)\b/],["lit",/^(?:\w+[\!\?\@]?|"(?:[^"\\]|\\.)*"):(?!:)/],["str",/^"""\s*(\r|\n)+(?:""?(?!")|[^\\"]|\\(?:.|\n|\r))*"{0,3}/], 19 | ["str",/^"(?:[^"\\]|\\(?:.|\n|\r))*"?(?!")/],["typ",/^[A-Z]\w*/],["com",/^_\w*/],["pln",/^[$a-z]\w*[\!\?]?/],["atv",/^~[A-Z](?:\/(?:[^\/\r\n\\]|\\.)+\/|\|(?:[^\|\r\n\\]|\\.)+\||"(?:[^"\r\n\\]|\\.)+"|'(?:[^'\r\n\\]|\\.)+')[A-Z]*/i],["atv",/^~[A-Z](?:\((?:[^\)\r\n\\]|\\.)+\)|\[(?:[^\]\r\n\\]|\\.)+\]|\{(?:[^\}\r\n\\]|\\.)+\}|\<(?:[^\>\r\n\\]|\\.)+\>)[A-Z]*/i],["pun",/^(?:\.+|\/|[:~])/]]),["ex","exs"]); 20 | -------------------------------------------------------------------------------- /docs/assets/javascript/lang-exs.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (C) 2017 Jacek Kr??likowski 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | */ 17 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["com",/^#.*/,null,"#"],["lit",/^'(?:[^'\\]|\\(?:.|\n|\r))*'?/,null,"'"],["atn",/^@\w+/,null,"@"],["pun",/^[!%&()*+,\-;<=>?\[\\\]^{|}]+/,null,"!%&()*+,-;<=>?[\\]^{|}"],["lit",/^(?:0o[0-7](?:[0-7]|_[0-7])*|0x[\da-fA-F](?:[\da-fA-F]|_[\da-fA-F])*|\d(?:\d|_\d)*(?:\.\d(?:\d|_\d)*)?(?:[eE][+\-]?\d(?:\d|_\d)*)?)/,null,"0123456789"]],[["atn",/^iex(?:\(\d+\))?> /], 18 | ["pun",/^::/],["lit",/^:(?:\w+[\!\?\@]?|"(?:[^"\\]|\\.)*"?)/],["atn",/^(?:__(?:CALLER|ENV|MODULE|DIR)__)/],["kwd",/^(?:alias|case|catch|def(?:delegate|exception|impl|macrop?|module|overridable|p?|protocol|struct)|do|else|end|fn|for|if|in|import|quote|raise|require|rescue|super|throw|try|unless|unquote(?:_splicing)?|use|when|with|yield)\b/],["lit",/^(?:true|false|nil)\b/],["lit",/^(?:\w+[\!\?\@]?|"(?:[^"\\]|\\.)*"):(?!:)/],["str",/^"""\s*(\r|\n)+(?:""?(?!")|[^\\"]|\\(?:.|\n|\r))*"{0,3}/], 19 | ["str",/^"(?:[^"\\]|\\(?:.|\n|\r))*"?(?!")/],["typ",/^[A-Z]\w*/],["com",/^_\w*/],["pln",/^[$a-z]\w*[\!\?]?/],["atv",/^~[A-Z](?:\/(?:[^\/\r\n\\]|\\.)+\/|\|(?:[^\|\r\n\\]|\\.)+\||"(?:[^"\r\n\\]|\\.)+"|'(?:[^'\r\n\\]|\\.)+')[A-Z]*/i],["atv",/^~[A-Z](?:\((?:[^\)\r\n\\]|\\.)+\)|\[(?:[^\]\r\n\\]|\\.)+\]|\{(?:[^\}\r\n\\]|\\.)+\}|\<(?:[^\>\r\n\\]|\\.)+\>)[A-Z]*/i],["pun",/^(?:\.+|\/|[:~])/]]),["ex","exs"]); 20 | -------------------------------------------------------------------------------- /K_Scaffold/Tutorial Sheet/4 Layout CSS and SCSS/thj2e/articles/character/sections/_weapons.pug: -------------------------------------------------------------------------------- 1 | section#weapons.weapons.paper-background 2 | //- We'll put the character's generic attack modifier here. It will affect the attack stat of each weapon. 3 | +input-label({ 4 | label:'attack modifier', 5 | inputObj:{name:'attack modifier',type:'number',class:'underlined',trigger:{affects:['repeating_weapon_$X_attack']}} 6 | }) 7 | //- The headers for our repeating section's columns 8 | .repeat-columns 9 | h4(data-i18n='weapons') 10 | each label in ['attack modifier','damage','traits','range','aspects'] 11 | h5(data-i18n=label) 12 | //- The fieldset that Roll20 will generate our weapon repeating section. The mixin will handle the naming of the repeating section to `repeating_weapon` 13 | +fieldset({name:'weapon'}) 14 | //- A checkbox that will allow users to collapse the entry down to just the stats. 15 | //- This mixin is defined in our sheet specific mixins file `_sheetmixins.pug` so that we don't have to wrtie the same checkbox definition for all of our fieldsets 16 | +collapse 17 | +roller({name:'roll',class:'die',trigger:{listenerFunc:'initiateRoll'}}) 18 | +text({name:'name',class:'underlined'}) 19 | //- The total attack stat. It's set to `readonly` so that only our sheetworkers will edit this. We'll write the calcAttack function later on in today's tutorial 20 | +number({name:'attack',class:'underlined',readonly:'',trigger:{calculation:'calcAttack'}}) 21 | //- An input so players can note that a weapon has bonus to attacks (or penalties). It will affect the attack stat 22 | +number({name:'attack bonus',class:'underlined',trigger:{affects:['repeating_weapon_$X_attack']}}) 23 | //- Several text inputs for noting various aspects of the weapon 24 | each name in ['damage','traits','range','aspects'] 25 | +text({name,class:'underlined'}) 26 | .headed-textarea.notes.expanded 27 | +h5({'data-i18n':'notes'}) 28 | +adaptiveTextarea({name:'notes',class:'underlined'}) -------------------------------------------------------------------------------- /docs/subpages/pug.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |Pug Library Intro Placeholder
34 |JS Library Intro Placeholder
35 |