Obsidian Portal
Menu
Sign In / Create Account
JavaScript is currently disabled. Obsidian Portal has a lot of really cool features that use JavaScript. You should check them out. We think you'll have a much more enjoyable experience.
Home
Campaigns
Games Nearby
Plans
Community
Help
Resources
Brimstone (a GUMSHOE game)
Author:
Aithanir
Slug:
aithanir_brimstone
Type:
GameCharacter
System:
GUMSHOE
DST Source Code
HTML Template
<div class="wrapper csx"> <div class="tabs"> <a class="tab fluff tab_fluff" title="Background Checks"></a> <a class="tab psych tab_psych" title="Psychological Profile"></a> <a class="tab crunch tab_crunch active" title="Occupational Proficiency"></a> </div> <div class="uicontainer"> <div class="formatBar"> <button type="button" class="boldButton" title="Bold (Ctrl+B)"></button> <button type="button" class="italicButton" title="Italic (Ctrl+I)"></button> <button type="button" class="underlineButton" title="Underline (Ctrl+U)"></button> <button type="button" class="indentButton" title="Indent (Ctrl+Tab)"></button> </div> <div class="tipBox"> <div class="corner topLeft"></div> <div class="corner topRight"></div> <div class="corner bottomLeft"></div> <div class="corner bottomRight"></div> <div class="contentBox"> <div class="tipArea edit"></div> </div> </div> </div> <div class="main" style="display:block;"> <div class="pagehead"> <div class="head"> <span class="readonly dsf dsf_name singlerow">Edit Character Name</span> </div> </div> <div class="page page_crunch active"> <!-- Sidebar --> <div class="column thirdwidth colspace"> <div class="section dossier"> <div class="group"> <div class="portraitholder"> <span class="portrait readonly dsf dsf_avatar_image"></span> </div> </div> <div class="group"> <dl> <dt>D/O/B</dt> <dd><span class="dsf dsf_dob singlerow" defaultString="dd/mm/yy">dd/mm/yy</span></dd> <dt>Nationality</dt> <dd><span class="dsf dsf_nationality singlerow" defaultString="Click to Edit">Click to Edit</span></dd> <dt>Occupation</dt> <dd><span class="dsf dsf_occupation singlerow" defaultString="Click to Edit">Click to Edit</span></dd> <dt>Education</dt> <dd><span class="dsf dsf_education singlerow" defaultString="Click to Edit">Click to Edit</span></dd> </dl> </div> </div> <div class="section"> <div class="head">HEALTH</div> <div class="group"> <div class="pips_pool readonly dsf dsf_health"></div> <span class="pool_status warning">Hurt</span> <span class="pool_status danger">Crippled</span> <span class="pool_status depleted">Dead</span> </div> </div> <div class="section"> <div class="head">SANITY</div> <div class="group"> <div class="pips_pool readonly dsf dsf_sanity"></div> <span class="pool_status warning">Shaken</span> <span class="pool_status danger">Traumatised</span> <span class="pool_status depleted">Gone</span> </div> </div> </div> <!-- End of sidebar --> <!-- Abilities --> <div class="column twothirdwidth"> <!-- Investigative abilities --> <div class="section investigative"> <div class="head">INVESTIGATIVE ABILITIES <span class="interface trash"></span> <span class="interface add addto_investigative" title="Add Investigative ability"></span> </div> <ul class="group list list_investigative"> <li class="proto item"> <div class="handle"> <div></div> </div> <span class="edit dslf dslf_name pips5label singlerow" defaultString="Investigative ability">Investigative ability</span> <span class="tip dslf dslf_tip"></span> <span class="pips pipsRange_4 dslf readonly dslf_rating">1</span> </li> <span class="oldfields hidden">[{}]</span> <span class="dsf dsf_investigative readonly hidden"></span> </ul> </div> <!-- End of investigative --> <!-- General abilities --> <div class="section general"> <div class="head">GENERAL ABILITIES <span class="interface trash"></span> <span class="interface add addto_general" title="Add General ability"></span> </div> <ul class="group list list_general"> <li class="proto item"> <div class="handle"> <div></div> </div> <span class="edit dslf dslf_name pips5label singlerow" defaultString="General ability">General ability</span> <span class="tip dslf dslf_tip"></span> <span class="pips pipsRange_12 dslf readonly dslf_rating">1</span> </li> <span class="oldfields hidden">[{}]</span> <span class="dsf dsf_general readonly hidden"></span> </ul> </div> <!-- End of general --> </div> <!-- End of abilities --> <!-- Experience --> <div class="section"> <div class="head">EXPERIENCE <span class="interface trash"></span> <span class="interface add addto_experience" title="Add Experience Award"></span> </div> <ul class="group list list_experience"> <li class="proto item"> <div class="handle"> <div></div> </div> <span signlerow> <span class="edit dslf dslf_case_name" defaultString="Case Name">Case Name</span> ( <span class="edit dslf dslf_date_awarded" defaultString="yyyy/mm/dd">yyyy/mm/dd</span>) </span> <span class="tip dslf dslf_tip"></span> <span class="singlerow right"><span class="edit dslf dslf_awarded" defaultString="1">1</span>xp</span> </li> <span class="oldfields hidden">[{}]</span> <span class="dsf dsf_experience readonly hidden"></span> </ul> <div class="group"> <div class="row">Experience Spent: <span class="singlerow right"><span class="dsf dsf_experience_spent" defaultString="0">0</span>xp</span> </div> </div> </div> <!-- End of experience --> </div> <!-- End of page_crunch --> <div class="page page_psych"> <!-- Motivation --> <div class="section"> <div class="head">MOTIVATION [<span class="dsf dsf_drive" defaultString="Drive">Drive</span>] </div> <div class="group"> <span class="dsf dsf_motivation fullwidth" defaultString="Click to Edit">Click to Edit</span> </div> </div> <!-- Sources of Stability --> <div class="section"> <div class="head">SOURCES OF STABILITY <span class="interface trash"></span> <span class="interface add addto_sources_of_stability" title="Add Source of stability"></span> </div> <ul class="group list list_sources_of_stability"> <li class="proto item"> <div class="handle"> <div></div> </div> <span class="left singlerow">(<span class="edit dslf dslf_type" defaultString="Source type">Source Type</span>) </span> <span class="edit dslf dslf_description fullcolumn singlerow" defaultString="Description">Description</span> <span class="tip dslf dslf_tip"></span> </li> <span class="oldfields hidden">[{}]</span> <span class="dsf dsf_sources_of_stability readonly hidden"></span> </ul> </div> <!-- Derangements --> <div class="section"> <div class="head">DERANGEMENTS <span class="interface trash"></span> <span class="interface add addto_derangements" title="Add Derangement"></span> </div> <ul class="group list list_derangements"> <li class="proto item"> <div class="handle"> <div></div> </div> <span class="edit dslf dslf_description fullwidth singlerow" defaultString="Derangement">Derangement</span> <span class="tip dslf dslf_tip"></span> </li> <span class="oldfields hidden">[{}]</span> <span class="dsf dsf_derangements readonly hidden"></span> </ul> </div> </div> <!-- End of page_psych --> <div class="page page_fluff"> <!-- Appearance --> <div class="section"> <div class="head">APPEARANCE</div> <div class="group"> <div class="portraitholder"> <span class="portrait readonly dsf dsf_avatar_image"></span> </div> <span class="dsf dsf_appearance" defaultString="Click to Edit">Click to Edit</span> </div> </div> <!-- Biography --> <div class="section"> <div class="head">BIOGRAPHY</div> <div class="group"> <span class="dsf dsf_bio readonly fullwidth" defaultString=""></span> </div> </div> <!-- Induction --> <div class="section"> <div class="head">INDUCTION</div> <div class="group"> <span class="dsf dsf_induction fullwidth" defaultString="Click to Edit">Click to Edit</span> </div> </div> </div> <!-- End of page_fluff --> <div class="page_foot"> <div> Character by <span class="align_right dsf dsf_player readonly">Player</span> for <span class="align_right dsf dsf_campaign readonly">Campaign</span> </div> <div class="copyright"> Sheet By <span class="align_left dsf dsf_dst_author readonly">DST Author</span> based on the work of <a class="dst_dst_author_link" href="/profile/chainsawxiv"><span>ChainSawXIV</span></span></a> </div> </div> </div> </div>
CSS
@import url("https://fonts.googleapis.com/css?family=Annie+Use+Your+Telescope|Special+Elite|Work+Sans:500"); /* Pips Pool */ @import url(https://chainsawxiv.github.io/DST/common/css/csx_exalted_common.css); div.ds_aithanir_brimstone .pips_pool { position: relative; z-index: 2; float: right; top: 3px; height: 17px; padding: 0 0 0 0; margin: 0 0 0 2px; } div.ds_aithanir_brimstone .pips_pool .pip { position: absolute; top: -2px; height: 15px; width: 15px; display: inline-block; } div.ds_aithanir_brimstone .pips_pool .pip.pipOn { background-image: url(https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/pip_on.png); } div.ds_aithanir_brimstone .pips_pool .pip.pipOff { background-image: url(https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/pip_off.png); } div.ds_aithanir_brimstone .pips_pool.dsf_health .pip.pipOn { background-image: url("https://aithanir.github.io/DST/sheets/aithanir_brimstone/images/health_pip_on.png"); } div.ds_aithanir_brimstone .pips_pool.dsf_health .pip.pipOn.warning { background-image: url("https://aithanir.github.io/DST/sheets/aithanir_brimstone/images/health_pip_on_warning.png"); } div.ds_aithanir_brimstone .pips_pool.dsf_health .pip.pipOn.danger { background-image: url("https://aithanir.github.io/DST/sheets/aithanir_brimstone/images/health_pip_on_danger.png"); } div.ds_aithanir_brimstone .pips_pool.dsf_sanity .pip.pipOn { background-image: url("https://aithanir.github.io/DST/sheets/aithanir_brimstone/images/sanity_pip_on.png"); } div.ds_aithanir_brimstone .pips_pool.dsf_sanity .pip.pipOn.warning { background-image: url("https://aithanir.github.io/DST/sheets/aithanir_brimstone/images/sanity_pip_on_warning.png"); } div.ds_aithanir_brimstone .pips_pool.dsf_sanity .pip.pipOn.danger, div.ds_aithanir_brimstone .pips_pool.dsf_sanity .pip.pipOn.depleted { background-image: url("https://aithanir.github.io/DST/sheets/aithanir_brimstone/images/sanity_pip_on_danger.png"); } div.ds_aithanir_brimstone .pool_status { position: absolute; top: 3px; left: 3px; visibility: hidden; } div.ds_aithanir_brimstone .pool_status.warning { color: #ff5126; } div.ds_aithanir_brimstone .pool_status.danger { color: #d50000; } div.ds_aithanir_brimstone .pool_status.depleted { color: red; font-weight: bold; font-style: italic; text-decoration: line-through; } /* Splat Specific: Sheet */ /* Component Includes */ .csx .AttribGroup { margin: 0px 0px 8px 0px; padding: 0px 3px 0px 3px; position: relative; display: inline-block; } .csx .section { margin: 0 0 1em 1px; } .csx .ShortSection { display: inline-block; width: 100%; padding: 0px 0px 0px 0px; margin: 0px 0px 2px 1px; min-height: 50px; } .csx .section a { text-decoration: none; } .csx .portraitholder { border: none; } .csx .portraitholder .portrait { background-color: transparent; } .csx .portraitholder .portrait img { border: 1px solid #554220; } /* Splat Specific: */ div.ds_aithanir_brimstone { /* Splat Specific: Tabs */ /* Splat Specific: Tips */ /* Splat Specific: Editable */ /* List item stuff */ /* Splat Specific: Checks */ /* Splat Specific: Pips */ } div.ds_aithanir_brimstone .main { width: 648px; padding: 0px 40px 80px 40px; margin: 40px 0px 20px 0px; background-image: url("https://aithanir.github.io/DST/sheets/aithanir_brimstone/images/top.png"), url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/bottom.png"), url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/background.jpg"); background-position: top left, bottom left, top left; background-repeat: no-repeat, no-repeat, repeat-y; background-color: #e4e5d5; border-style: solid; border-width: 1px; border-color: #554220; font-family: 'Work Sans', sans-serif; text-transform: uppercase; color: #554220; font-size: 14px; line-height: 17px; } div.ds_aithanir_brimstone .pagehead { height: 56px; } div.ds_aithanir_brimstone .pagehead .dsf { font-family: 'Special Elite', serif; text-transform: none; font-size: 0.75rem; color: #777; font-size: 1.7rem; margin: 0px 0px 9px 0px; } div.ds_aithanir_brimstone .page_foot { border-top: solid 1px #554220; } div.ds_aithanir_brimstone .page_foot .dsf_campaign, div.ds_aithanir_brimstone .page_foot .dsf_player { font-family: 'Special Elite', serif; text-transform: none; font-size: 0.75rem; color: #777; } div.ds_aithanir_brimstone .page_foot .copyright { font-size: 0.6rem; } div.ds_aithanir_brimstone .dossier .group { display: inline-block; width: 100%; } div.ds_aithanir_brimstone .dossier .portrait { height: 200px; width: 200px; background-image: url(https://aithanir.github.io/DST/common/images/attach_photo.png); } div.ds_aithanir_brimstone .head { border-bottom: solid 1px #554220; } div.ds_aithanir_brimstone a { text-decoration: none; color: #554220; } div.ds_aithanir_brimstone dl { margin: 0; } div.ds_aithanir_brimstone .tab.crunch { background: url("https://chainsawxiv.github.io/DST/common/images/crunch.png") no-repeat 50% 50%, url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab01_inactive.png"); background-size: 61% 70%, 100% 100%; } div.ds_aithanir_brimstone .tab.crunch:not(.active):hover { background-image: url("https://chainsawxiv.github.io/DST/common/images/crunch_hover.png"), url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab01_inactive.png"); } div.ds_aithanir_brimstone .tab.crunch.active { background-image: url("https://chainsawxiv.github.io/DST/common/images/crunch.png"), url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab01_active.png"); } div.ds_aithanir_brimstone .tab.psych { background: url("https://chainsawxiv.github.io/DST/common/images/magic.png") no-repeat 50% 50%, url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab02_inactive.png"); background-size: 61% 70%, 100% 100%; } div.ds_aithanir_brimstone .tab.psych:not(.active):hover { background-image: url("https://chainsawxiv.github.io/DST/common/images/magic_hover.png"), url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab02_inactive.png"); } div.ds_aithanir_brimstone .tab.psych.active { background-image: url("https://chainsawxiv.github.io/DST/common/images/magic.png"), url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab02_active.png"); } div.ds_aithanir_brimstone .tab.fluff { background: url("https://chainsawxiv.github.io/DST/common/images/fluff.png") no-repeat 50% 50%, url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab04_inactive.png"); background-size: 61% 70%, 100% 100%; } div.ds_aithanir_brimstone .tab.fluff:not(.active):hover { background-image: url("https://chainsawxiv.github.io/DST/common/images/fluff_hover.png"), url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab04_inactive.png"); } div.ds_aithanir_brimstone .tab.fluff.active { background-image: url("https://chainsawxiv.github.io/DST/common/images/fluff.png"), url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/tab04_active.png"); } div.ds_aithanir_brimstone .tipBox .corner.topLeft { background-size: 15px 15px; } div.ds_aithanir_brimstone .tipBox .corner.topRight { background-size: 15px 15px; } div.ds_aithanir_brimstone .tipBox .corner.bottomLeft { background-size: 15px 15px; } div.ds_aithanir_brimstone .tipBox .corner.bottomRight { background-size: 15px 15px; } div.ds_aithanir_brimstone .tipBox .contentBox { background: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/background.jpg") top left no-repeat; background-size: 730px 730px; background-color: #e4e5d5; border-color: #554220; } div.ds_aithanir_brimstone .tipBox .contentBox .tipArea, div.ds_aithanir_brimstone .tipBox .contentBox .tipArea:hover { background-color: rgba(255, 255, 224, 0.7); border: 1px dotted rgba(0, 0, 0, 0.3); border-radius: 4px; font-family: 'Sanchez', Sans Serif; color: #554220; } div.ds_aithanir_brimstone .page_foot { text-align: center; width: 600px; margin: 22px 0px 0px 24px; padding: 0px 0px 30px 0px; position: absolute; bottom: 12px; } div.ds_aithanir_brimstone .statwidth { width: 315px; } div.ds_aithanir_brimstone .thirdwidth { width: 207px; } div.ds_aithanir_brimstone .twothirdwidth { width: 430px; } div.ds_aithanir_brimstone .halfwidth { width: 300px; } div.ds_aithanir_brimstone .dsf:not(.readonly), div.ds_aithanir_brimstone .edit:not(.readonly) { font-family: 'Special Elite', serif; text-transform: none; font-size: 0.75rem; color: #777; } div.ds_aithanir_brimstone .dsf.dsf_appearance, div.ds_aithanir_brimstone .dsf.dsf_bio, div.ds_aithanir_brimstone .dsf.dsf_induction, div.ds_aithanir_brimstone .dsf.dsf_motivation { width: auto; display: block; font-family: 'Annie Use Your Telescope', cursive; font-size: 1rem; text-transform: none; color: #315ebe; } div.ds_aithanir_brimstone .dsf.dsf_appearance p, div.ds_aithanir_brimstone .dsf.dsf_bio p, div.ds_aithanir_brimstone .dsf.dsf_induction p, div.ds_aithanir_brimstone .dsf.dsf_motivation p { margin-top: 17px; } div.ds_aithanir_brimstone .dsf.dsf_appearance p:first-of-type, div.ds_aithanir_brimstone .dsf.dsf_bio p:first-of-type, div.ds_aithanir_brimstone .dsf.dsf_induction p:first-of-type, div.ds_aithanir_brimstone .dsf.dsf_motivation p:first-of-type { margin-top: 0px; } div.ds_aithanir_brimstone .dsf.dsf_appearance p:last-of-type, div.ds_aithanir_brimstone .dsf.dsf_bio p:last-of-type, div.ds_aithanir_brimstone .dsf.dsf_induction p:last-of-type, div.ds_aithanir_brimstone .dsf.dsf_motivation p:last-of-type { margin-bottom: 17px; } div.ds_aithanir_brimstone .dsf.fullwidth, div.ds_aithanir_brimstone .edit.fullwidth { width: 648px; min-height: 50px; display: inline-block; line-height: 17px; text-align: justify; } div.ds_aithanir_brimstone .dsf.fullcolumn, div.ds_aithanir_brimstone .edit.fullcolumn { width: 285px; } div.ds_aithanir_brimstone .list.twocolumn .column { width: 310px; } div.ds_aithanir_brimstone .twocolumn li.item { width: 312px; } div.ds_aithanir_brimstone .threecolumn .column { width: 207px; } div.ds_aithanir_brimstone .threecolumn li.item { width: 210px; } div.ds_aithanir_brimstone .list .column.colspace { margin-right: 12px; } div.ds_aithanir_brimstone .check .checkBorder { background-image: url("https://chainsawxiv.github.io/DST/common/images/check_border.svg"); } div.ds_aithanir_brimstone .check .checkOff { background-image: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/check_off.png"); } div.ds_aithanir_brimstone .check .checkOn { background-image: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/check_on.png"); } div.ds_aithanir_brimstone .pipBorder { background-image: url("https://chainsawxiv.github.io/DST/common/images/pip_border.svg"); } div.ds_aithanir_brimstone .pips .pipOff { background-image: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/pip_off.png"); } div.ds_aithanir_brimstone .pips .pipOn { background-image: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/pip_on.png"); } div.ds_aithanir_brimstone dt, div.ds_aithanir_brimstone dd { width: 100%; } div.ds_aithanir_brimstone dd { margin: 0; text-align: right; background-color: rgba(0, 0, 0, 0.05); } div.ds_aithanir_brimstone.editable .list .dsf.fullwidth, div.ds_aithanir_brimstone.editable .list .edit.fullwidth { width: 550px; } div.ds_aithanir_brimstone.editable .check .checkOff:hover { background-image: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/check_off_hover.png"); } div.ds_aithanir_brimstone.editable .check .checkOn:hover { background-image: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/check_on_hover.png"); } div.ds_aithanir_brimstone.editable .pips .pipOff:hover { background-image: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/pip_off_hover.png"); } div.ds_aithanir_brimstone.editable .pips .pipOn:hover { background-image: url("https://chainsawxiv.github.io/DST/sheets/Tendonin_nWoD_Hunter/images/pip_on_hover.png"); } /*# sourceMappingURL=sheet.css.map */
Javascript
// Global Options csx_opts = { 'setupCallback': function(item){aithanir_brimstone_setup(item);}, 'uiContainer': function(){return document;}, 'defaultFieldValue':'Click to edit', 'imagePath':'https://chainsawxiv.github.io/DST/common/images/', 'pipThresholds':[0,14,28,42,59,73,87,101,118,132,146,160,177,191,205,219,236], 'preloadFiles':[ 'add.png', 'add_hover.png', 'balance.png', 'balance_hover.png', 'bold_active.png', 'bold_hover.png', 'bullet.png', 'crunch.png', 'crunch_hover.png', 'equipment.png', 'equipment_hover.png', 'fb_back_bottom.png', 'fb_back_main.png', 'fb_back_top.png', 'fluff.png', 'fluff_hover.png', 'grab.png', 'grab_hover.png', 'indent.png', 'indent_active.png', 'indent_hover.png', 'italic.png', 'italic_active.png', 'italic_hover.png', 'magic.png', 'magic_hover.png', 'tip.png', 'tip_hover.png', 'trash.png', 'trash_active.png', 'trash_hover.png', 'underline.png', 'underline_active.png', 'underline_hover.png' ], }; aithanir_health = { 'base':4, 'threshold':{'warning':0, 'danger':-6 }, 'limit': -12 } aithanir_stability = { 'base': 4, 'threshold': {'warning':0, 'danger':-6}, 'limit': -12 } // Master Startup function aithanir_brimstone_dataPostLoad(data){ csx_opts.defaultContext = document.getElementById(data.containerId); csx_opts.uiContainer = csx_opts.defaultContext.querySelector('.uicontainer'); csx_opts.isEditable = data.isEditable; // Include the shared script file var includes = document.createElement('script'); includes.type = 'text/javascript'; includes.src = 'https://aithanir.github.io/DST/common/scripts/csx_common_brimstone.js'; includes.onload = function(){ // Fix container properties csx_firstParentWithClass(csx_opts.defaultContext,'dynamic_sheet_container').style.overflow = 'visible'; //csx_firstParentWithClass(csx_opts.defaultContext,'main-content-container').style.minWidth = '853px'; // Set up the editing interface csx_opts.setupCallback(); }; document.body.appendChild(includes); // Preload rollover images // Deferred to prevent blocking window.setTimeout(function(){ if (document.images){ for (var i = 0; i < csx_opts.preloadFiles.length; i++){ var img = new Image(); img.src = csx_opts.imagePath + csx_opts.preloadFiles[i]; } } },500); } // Setup After Script Load function aithanir_brimstone_setup(context){ // Provide default context if (context == undefined) context = csx_opts.defaultContext; // Do setup for interfaces csx_pips(context); aithanir_pip_pools(context); csx_check(context); csx_edit(context); csx_tip(context); csx_list(context); csx_tab(context); } // Shutdown Before Save function aithanir_brimstone_dataPreSave(){ // Default the context if not set var context = csx_opts.defaultContext; // Bake everything down to its field values var pips = context.querySelectorAll('.pips'); for (var i = 0; i < pips.length; i++){ if (pips[i].parentNode.className.match(/proto/)) continue; pips[i].unrender(); } var pip_pools = context.querySelectorAll('.pips_pool'); for (var i = 0; i < pip_pools.length; i++){ if (pip_pools[i].parentNode.className.match(/proto/)) continue; pip_pools[i].unrender(); } var checks = context.querySelectorAll('.check'); for (var i = 0; i < checks.length; i++) checks[i].unrender(); var edits = context.querySelectorAll('.dsf:not(.readonly),.edit'); for (var i = 0; i < edits.length; i++) edits[i].unrender(); var lists = context.querySelectorAll('.list'); for (var i = 0; i < lists.length; i++) lists[i].unrender(); } function aithanir_get_general_rating(name){ if(!dynamic_sheet_attrs) return 0; if(!dynamic_sheet_attrs.general) return 0; var general = JSON.parse(dynamic_sheet_attrs.general.toLowerCase()); console.log("golf"); console.log(general); var ability = general.find(function(n){ return n.name == name.toLowerCase();}) if(ability) { return parseInt(ability.rating); }else{ return 0; } } // pip_pools Interface Control function aithanir_pip_pools(context){ var pips_per_row = 8; // Default the context if not set if (!context) context = document; // Convert each pips field var pipsFields = context.querySelectorAll('.pips_pool'); for (var i = 0; i < pipsFields.length; i++){ var field = pipsFields[i]; // Skip list item prototype fields if (field.parentNode.className.match(/proto/)) continue; // Set the pixel threshold for each pip field.pipThresholds = (csx_opts.pipThresholds) ? csx_opts.pipThresholds :[0,14,28,42,59,73,87,101,118,132,146,160,177,191,205,219,236]; field.pipSpacing = 17; field.pipWidth = 15.0; field.pipLineHeight = 17.0; field.pipRadius = 6.0; field.pipStrokeColor = '#19110E'; //'#19110E'; field.pipStrokeThickness = 0.6; field.dsField = function(){ var match = this.className.match(/dsf_[\w]+/); if(match){ return match[0].substring(4); } return; } // Gets the total number of possible pips for the field field.range = function(){ // Return cached value if it exists if(this.rangeCache != null) return this.rangeCache; var ability = this.dsField(); if(ability){ var rating = aithanir_get_general_rating( ability ); if(!isNaN(rating)){ var range = rating+aithanir_health.base; this.rangeCache = range; return range; } } // Get the range from the class, cache, and return var range = this.className.match(/pipsRange_[\d]+/g)[0].substring(10); this.rangeCache = range; return range; }; // Gets the current field value from text or image field.value = function(){ // Return the cached value if it exists if(this.valueCache != null) return this.valueCache.toString(); // Get the value from the text content, cache, and return var value = this.innerHTML; value = (isNaN(value) || value==0) ? aithanir_health.base : value; // Catch and fix rare cases of HTML being saved instead of a number if(isNaN(value)){ var pips = this.querySelectorAll( '.pipOn' ); if(pips) value = pips.length; else value = 0; } this.valueCache = value; return value.toString(); }; field.poolFloor = function() { return aithanir_health.limit; }; field.isWarning = function(n) { return (aithanir_health.threshold.warning >= n && n > aithanir_health.threshold.danger); }; field.isDanger = function(n) { return (aithanir_health.threshold.danger >= n && n > aithanir_health.limit); }; field.isDepleted = function(n) { return (aithanir_health.limit >= n); }; field.foo = function(n) { if(isNaN(n)) return; if(n==0) return; if(n>0){ return Math.abs((n-1) % pips_per_row) }else{ return (pips_per_row-1) - Math.abs((n+1) % pips_per_row); } } field.bar = function(n) { if(isNaN(n)) return false; if(n==0) return false; if(n>0) { return n % pips_per_row == 0 } else { return Math.abs(n+1) % pips_per_row == 0 } }; // Converts the content to their visual representation field.render = function(){ // Skip hidden fields var allowEdit = true; var curr_row = 0; if (this.value()){ if (this.value().match(/[\s]*hidden/)){ allowEdit = false; if (csx_opts.isEditable) this.style.opacity = '0.1'; else{ this.innerHTML = ''; return; } } } // Skip fields with a value of -1 var intVal = parseInt(this.value()); // Replace the contents with the appropriate pips var border = document.createElement('div'); border.className = 'pipBorder'; this.innerHTML = ''; for (var i = this.range(); i >= field.poolFloor(); i--){ if(this.bar(i)) curr_row++; if(curr_row==0) curr_row++; if(i != 0){ var pip = document.createElement('div'); pip.value = i; pip.className = 'pip' pip.className += (pip.value <= intVal) ? ' pipOn' : ' pipOff'; pip.className += (this.isWarning(intVal)) ? ' warning' : (this.isDanger(intVal)) ? ' danger' : ''; pip.className += ( 0 > pip.value && pip.value >= -pips_per_row) ? ' subzero' : ''; pip.style.right = this.pipThresholds[this.foo(i)] + 'px'; pip.style.top = ((curr_row-1) * field.pipLineHeight) + 'px'; pip.appendChild(border.cloneNode(false)); if (allowEdit && csx_opts.isEditable){ pip.addEventListener('click', function(){this.parentNode.click(this.value);}, false); } this.appendChild(pip); } } // Display any status messages if( this.isWarning(this.value()) ){ Array.prototype.forEach.call(this.parentNode.querySelectorAll(".pool_status.warning"),function(t){ t.style.visibility = "visible"; }); }else{ Array.prototype.forEach.call(this.parentNode.querySelectorAll(".pool_status.warning"),function(t){ t.style.visibility = "hidden"; }); } if( this.isDanger(this.value()) ){ Array.prototype.forEach.call(this.parentNode.querySelectorAll(".pool_status.danger"),function(t){ t.style.visibility = "visible"; }); }else{ Array.prototype.forEach.call(this.parentNode.querySelectorAll(".pool_status.danger"),function(t){ t.style.visibility = "hidden"; }); } if( this.isDepleted(this.value()) ){ Array.prototype.forEach.call(this.parentNode.querySelectorAll(".pool_status.depleted"),function(t){ t.style.visibility = "visible"; }); }else{ Array.prototype.forEach.call(this.parentNode.querySelectorAll(".pool_status.depleted"),function(t){ t.style.visibility = "hidden"; }); } // Activate the pips if (allowEdit && csx_opts.isEditable){ this.title = 'Click to set value'; this.style.cursor = 'pointer'; this.style.height = (this.pipLineHeight*(curr_row+1)) + 'px'; } }; // Converts the value back from image to text field.unrender = function(){ // Replace the contents with the appropriate value string this.innerHTML = this.value(); }; // Click event handler for the pips interface field.click = function(clickedValue){ // If the user clicks the current score, they probably want to reduce by one if (clickedValue == this.value()) this.valueCache = clickedValue - 1; else this.valueCache = clickedValue; // Rerender the pips this.render(); // Invoke the update event handler this.update(); // Then we're done return; }; // Right mouse down handler for menu control field.rmousedown = function(e){ pipsMenu.currentField = this; if (this.value().match(/[\s]*hidden/)) pipsMenu.querySelector('menuitem').label = 'Show Pips'; else pipsMenu.querySelector('menuitem').label = 'Hide Pips'; } // Padds a value with leading zeros to length field.pad = function(value,digits){ value = value.toString(); while (value.length < digits) value = '0' + value; return value; } // On Update event function, typicaly overriden field.update = function(){ var ability = this.dsField(); if(ability){ $('.pool_display.readonly.dsf_' + ability).text(this.valueCache); } } // Convert the field value to pips display field.render(); } } // https://tc39.github.io/ecma262/#sec-array.prototype.find if (!Array.prototype.find) { Object.defineProperty(Array.prototype, 'find', { value: function(predicate) { // 1. Let O be ? ToObject(this value). if (this == null) { throw new TypeError('"this" is null or not defined'); } var o = Object(this); // 2. Let len be ? ToLength(? Get(O, "length")). var len = o.length >>> 0; // 3. If IsCallable(predicate) is false, throw a TypeError exception. if (typeof predicate !== 'function') { throw new TypeError('predicate must be a function'); } // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. var thisArg = arguments[1]; // 5. Let k be 0. var k = 0; // 6. Repeat, while k < len while (k < len) { // a. Let Pk be ! ToString(k). // b. Let kValue be ? Get(O, Pk). // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). // d. If testResult is true, return kValue. var kValue = o[k]; if (predicate.call(thisArg, kValue, k, o)) { return kValue; } // e. Increase k by 1. k++; } // 7. Return undefined. return undefined; } }); }
Submit Notes
Back