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
Rippers - ADH
Author:
dawnhawk
Slug:
rippers_adh
System:
Savage Worlds
DST Source Code
HTML Template
<div class="rippers_adh_wrapper"> <div class="rippers_adh_section" style="width:450px;height:137px;"> <div class="rippers_adh_section_header" style="width:100%">BASIC INFORMATION</div> <span class="rippers_adh_linefield dsf dsf_name" style="left:2px;top:24px;width:200px;"></span> <span class="rippers_adh_linefield dsf dsf_role" style="left:207px;top:24px;width:240px;"></span> <span class="rippers_adh_label" style="left:5px;top:42px;">Character Name</span> <span class="rippers_adh_label" style="left:210px;top:42px;">Aliases</span> <span class="rippers_adh_linefield dsf dsf_player" style="left:2px;top:63px;width:200px;"></span> <span class="rippers_adh_linefield dsf dsf_campaign" style="left:207px;top:63px;width:240px;"></span> <span class="rippers_adh_label" style="left:5px;top:81px;">Player Name</span> <span class="rippers_adh_label" style="left:210px;top:81px;">Campaign</span> <span class="rippers_adh_linefield dsf dsf_faction" style="left:2px;top:102px;width:120px;"></span> <span class="rippers_adh_linefield dsf dsf_lodge" style="left:125px;top:102px;width:97px;"></span> <span class="rippers_adh_linefield dsf dsf_rank" style="left:226px;top:102px;width:60px;"></span> <span class="rippers_adh_linefield dsf dsf_xp" style="left:289px;top:102px;width:40px"></span> <span class="rippers_adh_linefield dsf dsf_gender" style="left:336px;top:102px;width:60px;"></span> <span class="rippers_adh_linefield dsf dsf_age" style="left:403px;top:102px;width:40px"></span> <span class="rippers_adh_label" style="left:5px;top:120px;">Faction</span> <span class="rippers_adh_label" style="left:128px;top:120px;">Lodge</span> <span class="rippers_adh_label" style="left:229px;top:120px;">Rank</span> <span class="rippers_adh_label" style="left:292px;top:120px;">XP</span> <span class="rippers_adh_label" style="left:339px;top:120px;">Gender</span> <span class="rippers_adh_label" style="left:406px;top:120px;">Age</span> </div> <div class="rippers_adh_section_no_border" style="width:250px;top:-14px;"> <div class="rippers_adh_section_image"><span class="dsf dsf_avatar_image"></span></div> <span class="rippers_adh_linefield dsf dsf_quote rippers_adh_quote" style="left:2px;top:252px;width:250px;"></span> <span class="rippers_adh_quote_label" style="left:5px;top:270px;">Quote</span> </div> <div class="rippers_adh_section" style="height:132px;"> <div class="rippers_adh_section_header" style="width:100%">ATTRIBUTES</div> <table class="rippers_adh_table_basic_main" style="width:450px;"> <tbody> <tr> <th class="rippers_adh_table_header_horizontal" style="width:50px;">AG</th> <td class="rippers_adh_table_box_field" style="width:40px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_agility_points"></span></td> <td class="rippers_adh_table_box_points" style="width:30px;"><span class="rippers_adh_field rippers_adh_atpoints dsf dsf_agility_mod"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">Charisma</th> <td class="rippers_adh_table_box_field" style="width:40px;"><span class="rippers_adh_field rippers_adh_sc dsf dsf_charisma_points"></span></td> <td class="rippers_adh_table_box_points" style="width:30px;"><span class="rippers_adh_field rippers_adh_scpoints dsf dsf_charisma_mod"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:100px;">Pace</th> <td class="rippers_adh_table_box_field" style="width:40px;"><span class="rippers_adh_field rippers_adh_sc dsf dsf_pace"></span></td> <td class="rippers_adh_table_box_points" style="width:30px;"><span class="rippers_adh_field rippers_adh_scpoints dsf dsf_pace_mod"></span></td> </tr> <tr> <th class="rippers_adh_table_header_horizontal">SMA</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field rippers_adh_at dsf dsf_smarts_points"></span></td> <td class="rippers_adh_table_box_points"><span class="rippers_adh_field rippers_adh_atpoints dsf dsf_smarts_mod"></span></td> <th class="rippers_adh_table_header_horizontal">Status</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field rippers_adh_sc dsf dsf_status_points"></span></td> <td class="rippers_adh_table_box_points"><span class="rippers_adh_field rippers_adh_scpoints dsf dsf_status_mod"></span></td> <th class="rippers_adh_table_header_horizontal">Wounds</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field rippers_adh_sc dsf dsf_wounds"></span></td> </tr> <tr> <th class="rippers_adh_table_header_horizontal">SPI</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field rippers_adh_at dsf dsf_spirit_points"></span></td> <td class="rippers_adh_table_box_points"><span class="rippers_adh_field rippers_adh_atpoints dsf dsf_spirit_mod"></span></td> <th class="rippers_adh_table_header_horizontal">Reason</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field rippers_adh_sc dsf dsf_reason_points"></span></td> <td class="rippers_adh_table_box_points"><span class="rippers_adh_field rippers_adh_scpoints dsf dsf_reason_mod"></span></td> <th class="rippers_adh_table_header_horizontal">Fatigue</th> <td class="rippers_adh_table_box_field rippers_adh_secondary_move_two"><span class="rippers_adh_field rippers_adh_sc dsf dsf_fatigue"></span></td> </tr> <tr> <th class="rippers_adh_table_header_horizontal">STR</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field rippers_adh_at dsf dsf_strength_points"></span></td> <td class="rippers_adh_table_box_points"><span class="rippers_adh_field rippers_adh_atpoints dsf dsf_strength_mod"></span></td> <th class="rippers_adh_table_header_horizontal">Parry</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field dsf dsf_parry_points"></span></td> <td class="rippers_adh_table_box_points"><span class="rippers_adh_field rippers_adh_sc rippers_adh_scpoints dsf dsf_parry_mod"></span></td> </tr> <tr> <th class="rippers_adh_table_header_horizontal">VG</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field rippers_adh_at dsf dsf_vigor_points"></span></td> <td class="rippers_adh_table_box_points"><span class="rippers_adh_field rippers_adh_atpoints dsf dsf_vigor_mod"></span></td> <th class="rippers_adh_table_header_horizontal">Tough</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field dsf dsf_toughness_points"></span></td> <td class="rippers_adh_table_box_points"><span class="rippers_adh_field rippers_adh_sc rippers_adh_scpoints dsf dsf_toughness_mod"></span></td> </tr> </tbody> </table> </div> <div class="rippers_adh_section rippers_adh_social_section" style="width:710px;"> <div class="rippers_adh_section_header">SOCIAL BACKGROUND</div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <th class="rippers_adh_table_header_horizontal" style="width:80px">Clothing</th> <td class="rippers_adh_table_box_field" style="width:100px"><span class="rippers_adh_field dsf dsf_clothing"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:70px">Languages</th> <td class="rippers_adh_table_box_field"><span class="rippers_adh_field dsf dsf_languages"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px">Money</th> <td style="width:5px;">£</td> <td class="rippers_adh_table_box_field" style="width:40px"><span class="rippers_adh_field dsf dsf_pounds"></span></td> <td style="width:5px;">s</td> <td class="rippers_adh_table_box_field" style="width:40px"><span class="rippers_adh_field dsf dsf_shillings"></span></td> </tr> </tbody> </table> <div style="height:5px"></div> </div> <div style="height:15px"></div> <div> <div class="rippers_adh_section_left rippers_adh_skill_section_one" style="width:353px;"> <div class="rippers_adh_section_header_left">SKILLS<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Skills" onclick="rippers_adh_getElementsByClassName('list_skills_one')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">Skill</td> <td class="rippers_adh_table_header" style="width:45px">Attr</td> <td class="rippers_adh_table_header" style="width:120px">Spec</td> <td class="rippers_adh_table_header" style="width:30px">LVL</td> </tr> </tbody> </table> <div class="listColumns_1 list_skills_one"> <span class="dsf dsf_num_elements_skills_one" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_skill_one_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Formatting</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_skill_one_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle rippers_adh_field dsf dsf_skill_one_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle rippers_adh_field dsf dsf_skill_one_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_skill_one_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Toggle Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field rippers_adh_entry dsf dsf_skill_one_" style="text-align:left;"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_skill_one_attr_"></span> </td> <td class="rippers_adh_table_field" style="width:115px"> <span class="rippers_adh_field dsf dsf_skill_one_spec_level_"></span> </td> <td class="rippers_adh_table_field" style="width:26px"> <span class="rippers_adh_field dsf dsf_skill_one_level_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> <div class="rippers_adh_section_right rippers_adh_skill_section_two" style="width:353px"> <div class="rippers_adh_section_header_right">SKILLS<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Skills" onclick="rippers_adh_getElementsByClassName('list_skills_two')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">Skill</td> <td class="rippers_adh_table_header" style="width:60px">Attr</td> <td class="rippers_adh_table_header" style="width:120px">Spec</td> <td class="rippers_adh_table_header" style="width:30px">LVL</td> </tr> </tbody> </table> <div class="listColumns_1 list_skills_two"> <span class="dsf dsf_num_elements_skills_two" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_skill_two_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Formatting</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_skill_two_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle rippers_adh_field dsf dsf_skill_two_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle rippers_adh_field dsf dsf_skill_two_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_skill_two_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Toggle Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field rippers_adh_entry dsf dsf_skill_two_" style="text-align:left;"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_skill_two_diff_"></span> </td> <td class="rippers_adh_table_field" style="width:115px"> <span class="rippers_adh_field dsf dsf_skill_two_result_level_"></span> </td> <td class="rippers_adh_table_field" style="width:26px"> <span class="rippers_adh_field dsf dsf_skill_two_level_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> </div> <div> <div class="rippers_adh_section_left rippers_adh_edges_section" style="width:353px;"> <div class="rippers_adh_section_header_left">EDGES<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Edge" onclick="rippers_adh_getElementsByClassName('list_edges')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">Edge</td> <td class="rippers_adh_table_header" style="width:60px">Req</td> <td class="rippers_adh_table_header" style="width:60px">Type</td> <td class="rippers_adh_table_header" style="width:120px">Effect</td> </tr> </tbody> </table> <div class="listColumns_1 list_edges"> <span class="dsf dsf_num_elements_edges" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_edges_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Formatting</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_edges_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle dsf dsf_edges_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle dsf dsf_edges_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_edges_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Edit Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field_wide rippers_adh_entry dsf dsf_edges_"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_edges_req_"></span> </td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_edges_type_"></span> </td> <td class="rippers_adh_table_field" style="width:115px"> <span class="rippers_adh_field dsf dsf_edges_effect_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> <div class="rippers_adh_section_right rippers_adh_hindrances_section" style="width:353px;"> <div class="rippers_adh_section_header_right">HINDRANCES<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Hindrance" onclick="rippers_adh_getElementsByClassName('list_hindrances')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">Hindrance</td> <td class="rippers_adh_table_header" style="width:36px">Level</td> <td class="rippers_adh_table_header" style="width:120px">Effect</td> </tr> </tbody> </table> <div class="listColumns_1 list_hindrances"> <span class="dsf dsf_num_elements_hindrances" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_hindrances_one_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Formatting</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_hindrances_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle dsf dsf_hindrances_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle dsf dsf_hindrances_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_advantage_one_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row" style="width:353px;"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Edit Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field_wide rippers_adh_entry dsf dsf_hindrances_"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:32px"> <span class="rippers_adh_field dsf dsf_hindrances_level_"></span> </td> <td class="rippers_adh_table_field" style="width:115px"> <span class="rippers_adh_field dsf dsf_hindrances_effect_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> </div> <div style="height:15px"></div> <div class="rippers_adh_section rippers_adh_armor_section" style="width:710px"> <div class="rippers_adh_section_header">ARMOR AND APPAREL<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Armor" onclick="rippers_adh_getElementsByClassName('list_armor')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">Armor</td> <td class="rippers_adh_table_header" style="width:115px">Area Covered</td> <td class="rippers_adh_table_header" style="width:45px">Tn</td> <td class="rippers_adh_table_header" style="width:45px">Cst</td> <td class="rippers_adh_table_header" style="width:45px">Wt</td> <td class="rippers_adh_table_header" style="width:115px">Notes</td> </tr> </tbody> </table> <div class="listColumns_1 list_armor"> <span class="dsf dsf_num_elements_armor" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_armor_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Subarmor</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_armor_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle rippers_adh_field dsf dsf_armor_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle rippers_adh_field dsf dsf_armor_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_armor_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Toggle Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field_wide rippers_adh_entry dsf dsf_armor_name_"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:111px"> <span class="rippers_adh_field dsf dsf_armor_area_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_armor_tn_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_armor_cst_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_armor_wt_"></span> </td> <td class="rippers_adh_table_field" style="width:111px"> <span class="rippers_adh_field dsf dsf_armor_notes_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> <div class="rippers_adh_section rippers_adh_weapons_section" style="width:710px"> <div class="rippers_adh_section_header">WEAPONS<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Weapon" onclick="rippers_adh_getElementsByClassName('list_weapons')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">Weapon</td> <td class="rippers_adh_table_header" style="width:45px">Calibre</td> <td class="rippers_adh_table_header" style="width:45px">Range</td> <td class="rippers_adh_table_header" style="width:45px">ROF</td> <td class="rippers_adh_table_header" style="width:45px">AP</td> <td class="rippers_adh_table_header" style="width:45px">Damage</td> <td class="rippers_adh_table_header" style="width:45px">Shots</td> <td class="rippers_adh_table_header" style="width:45px">Ammo</td> <td class="rippers_adh_table_header" style="width:45px">Min Str</td> <td class="rippers_adh_table_header" style="width:45px">Wt</td> <td class="rippers_adh_table_header" style="width:115px">Notes</td> </tr> </tbody> </table> <div class="listColumns_1 list_weapons"> <span class="dsf dsf_num_elements_weapons" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_weapons_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Subarmor</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_weapons_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle rippers_adh_field dsf dsf_weapons_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle rippers_adh_field dsf dsf_weapons_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_weapons_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Toggle Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field_wide rippers_adh_entry dsf dsf_weapons_name_"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_calibre_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_range_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_rof_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_ap_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_damage_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_shots_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_ammo_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_minstr_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_weapons_wt_"></span> </td> <td class="rippers_adh_table_field" style="width:111px"> <span class="rippers_adh_field dsf dsf_weapons_notes_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> <div class="rippers_adh_section rippers_adh_possessions_section" style="width:710px"> <div class="rippers_adh_section_header">POSSESSIONS<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Possession" onclick="rippers_adh_getElementsByClassName('list_possessions')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">Possession</td> <td class="rippers_adh_table_header" style="width:115px">Location</td> <td class="rippers_adh_table_header" style="width:45px">Cst</td> <td class="rippers_adh_table_header" style="width:45px">Wt</td> <td class="rippers_adh_table_header" style="width:115px">Notes</td> </tr> </tbody> </table> <div class="listColumns_1 list_possessions"> <span class="dsf dsf_num_elements_possessions" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_possessions_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Subarmor</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_possessions_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle rippers_adh_field dsf dsf_possessions_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle rippers_adh_field dsf dsf_possessions_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_possessions_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Toggle Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field_wide rippers_adh_entry dsf dsf_possessions_name_"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:111px"> <span class="rippers_adh_field dsf dsf_possessions_location_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_possessions_cst_"></span> </td> <td class="rippers_adh_table_field" style="width:40px"> <span class="rippers_adh_field dsf dsf_possessions_wt_"></span> </td> <td class="rippers_adh_table_field" style="width:111px"> <span class="rippers_adh_field dsf dsf_possessions_notes_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> <div class="rippers_adh_section rippers_adh_encumbrance_section" style="width:710px;"> <div class="rippers_adh_section_header">ENCUMBRANCE</div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <th class="rippers_adh_table_header_horizontal" style="width:120px">Total Weight Carried</th> <td class="rippers_adh_table_box_field" style="width:40px"><span class="rippers_adh_field dsf dsf_weight_carried"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:120px">Weight Limit</th> <td class="rippers_adh_table_box_field" style="width:40px"><span class="rippers_adh_field dsf dsf_weight_limit"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:120px">Encumbrance Penalty</th> <td class="rippers_adh_table_box_field" style="width:40px"><span class="rippers_adh_field dsf dsf_weight_penalty"></span></td> </tr> </tbody> </table> <div style="height:5px"></div> </div> <div style="height:15px"></div> <div class="rippers_adh_section rippers_adh_powers_section" style="width:710px"> <div class="rippers_adh_section_header">POWERS<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Power" onclick="rippers_adh_getElementsByClassName('list_powers')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">Power</td> <td class="rippers_adh_table_header" style="width:60px">Cost</td> <td class="rippers_adh_table_header" style="width:60px">Range</td> <td class="rippers_adh_table_header" style="width:120px">Damage/Effect</td> <td class="rippers_adh_table_header" style="width:60px">Duration</td> </tr> </tbody> </table> <div class="listColumns_1 list_powers"> <span class="dsf dsf_num_elements_powers" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_powers_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Attack Mode</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_powers_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle rippers_adh_field dsf dsf_powers_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle rippers_adh_field dsf dsf_powers_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_melee_attack_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Toggle Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field_wide rippers_adh_entry dsf dsf_powers_name_"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_powers_cost_"></span> </td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_powers_range_"></span> </td> <td class="rippers_adh_table_field" style="width:116px"> <span class="rippers_adh_field dsf dsf_powers_damage_"></span> </td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_powers_duration_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> <div style="height:15px"></div> <div class="rippers_adh_section rippers_adh_rippertech_section" style="width:710px"> <div class="rippers_adh_section_header">RIPPERTECH<a class="rippers_adh_listAdd rippers_adh_interface" title="Add Rippertech" onclick="rippers_adh_getElementsByClassName('list_rippertech')[0].addItem();">+</a></div> <table class="rippers_adh_table_basic_main"> <tbody> <tr> <td class="rippers_adh_table_header">RipperTech</td> <td class="rippers_adh_table_header" style="width:60px">Implant/Extract</td> <td class="rippers_adh_table_header" style="width:120px">Benefits</td> <td class="rippers_adh_table_header" style="width:120px">Side Effects</td> <td class="rippers_adh_table_header" style="width:60px">Damage</td> <td class="rippers_adh_table_header" style="width:120px">Additional Benefits</td> </tr> </tbody> </table> <div class="listColumns_1 list_rippertech"> <span class="dsf dsf_num_elements_rippertech" style="display:none"></span> <div class="template"> <div class="rippers_adh_details_parent"> <span class="dsf dsf_rippertech_popup_on_ rippers_adh_pop_toggle" style="display:none"></span> <div class="rippers_adh_popup" style="display:none"> <a class="rippers_adh_listDetailsNoPointer"><object><div class="rippers_adh_popup_background"></div></object></a> <div class="rippers_adh_popup_container"> <div class="rippers_adh_popup_box"> <div class="rippers_adh_section_header">DETAILS</div> <div class="rippers_adh_popup_section"> <table class="rippers_adh_table_basic_main rippers_adh_ed_only_table"> <tbody> <tr> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSubheader">Toggle Header</a></td> <td class="rippers_adh_table_basic_cell"><a class="rippers_adh_listSpecial">Toggle Attack Mode</a></td> </tr> </tbody> </table> <span class="rippers_adh_area readonly rippers_adh_details dsf dsf_rippertech_desc_" style="position:relative;left:10px;width:450px;height:175px;"></span> </div> </div> </div> </div> <span class="rippers_adh_subheader_toggle rippers_adh_field dsf dsf_ranged_attack_subheader_on_" style="display:none"></span> <span class="rippers_adh_special_toggle rippers_adh_field dsf dsf_ranged_attack_special_on_" style="display:none"></span> <table class="rippers_adh_table_basic_main rippers_adh_subheader" style="display:none"> <tbody> <tr> <td class="rippers_adh_table_subheader"><span class="rippers_adh_field dsf dsf_rippertech_subheader_"></span></td> </tr> </tbody> </table> <table class="rippers_adh_table_basic_main rippers_adh_table_row"> <tbody> <tr> <td class="interface" style="text-align:right;width:42px"> <a class="rippers_adh_listDelete interface" title="Delete this item">✘</a> <a class="rippers_adh_listPromote interface" title="Move this item up">↑</a> <a class="rippers_adh_listDemote interface" title="Move this item down">↓</a> <a class="rippers_adh_listDetails interface" title="Toggle Details">D</a> </td> <td class="rippers_adh_table_field" style="text-align:left;"> <a class="rippers_adh_listDetails_viewer"><span class="rippers_adh_field_wide rippers_adh_entry dsf dsf_rippertech_name_"></span></a> </td> <td class="rippers_adh_details_notifier" style="width:5px"></td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_rippertech_implant_"></span> </td> <td class="rippers_adh_table_field" style="width:116px"> <span class="rippers_adh_field dsf dsf_rippertech_benefits_"></span> </td> <td class="rippers_adh_table_field" style="width:116px"> <span class="rippers_adh_field dsf dsf_rippertech_sideeffects_"></span> </td> <td class="rippers_adh_table_field" style="width:56px"> <span class="rippers_adh_field dsf dsf_rippertech_damage_"></span> </td> <td class="rippers_adh_table_field" style="width:116px"> <span class="rippers_adh_field dsf dsf_rippertech_addbens_"></span> </td> </tr> </tbody> </table> </div> </div> </div> <div style="height:5px"></div> </div> <div style="height:15px"></div> <div class="rippers_adh_section" style="height:105px;"> <div class="rippers_adh_section_header" style="width:100%">ADVANCEMENTS</div> <table class="rippers_adh_table_basic_main" style="width:710px;"> <tbody> <tr> <th class="rippers_adh_table_header_horizontal" style="width:30px;">N</th> <td style="width:85px;">X</td> <th class="rippers_adh_table_header_horizontal" style="width:30px;">S</th> <td class="rippers_adh_table_field" style="width:85px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_seasoned_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:30px;">V</th> <td class="rippers_adh_table_field" style="width:85px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_veteran_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:30px;">H</th> <td class="rippers_adh_table_field" style="width:85px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_heroic_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:30px;">L</th> <td class="rippers_adh_table_field" style="width:85px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_legendary_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:30px;">120</th> <td class="rippers_adh_table_field" style="width:85px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_120_adv"></span></td> </tr> <tr> <th class="rippers_adh_table_header_horizontal" style="width:50px;">5</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_5_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">25</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_25_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">45</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_45_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">65</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_65_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">90</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_90_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">130</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_130_adv"></span></td> </tr> <tr> <th class="rippers_adh_table_header_horizontal" style="width:50px;">10</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_10_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">30</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_30_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">50</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_50_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">70</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_70_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">100</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_100_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">140</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_140_adv"></span></td> </tr> <tr> <th class="rippers_adh_table_header_horizontal" style="width:50px;">15</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_15_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">35</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_35_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">55</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_55_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">75</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_75_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">110</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_110_adv"></span></td> <th class="rippers_adh_table_header_horizontal" style="width:50px;">150</th> <td class="rippers_adh_table_field" style="width:65px;"><span class="rippers_adh_field rippers_adh_at dsf dsf_150_adv"></span></td> </tr> </tbody> </table> </div> <div style="height:15px"></div> <div class="rippers_adh_section rippers_adh_traits_section" style="min-height:50px;width:710px"> <div class="rippers_adh_section_header">NOTES</div> <span class="rippers_adh_area readonly dsf dsf_traits" style="width:720px;"></span> <div style="height:5px"></div> </div> <div class="rippers_adh_section rippers_adh_description_section" style="min-height:50px;width:710px"> <div class="rippers_adh_section_header">DESCRIPTION</div> <span class="rippers_adh_area readonly dsf dsf_desc" style="width:720px;"></span> <div style="height:5px"></div> </div> <div class="rippers_adh_section rippers_adh_bio_section" style="min-height:50px;width:710px"> <div class="rippers_adh_section_header">BIOGRAPHY</div> <span class="readonly rippers_adh_bio dsf dsf_bio"></span> <div style="height:5px"></div> </div> <div class="rippers_adh_section rippers_adh_credits" style="text-align:left;min-height:50px;width:710px"> <div class="rippers_adh_section_header">CREDITS</div> <span>This gaming aid references the Savage Worlds game system, available from Pinnacle Entertainment Group at <a href="www.peginc.com">www.peginc.com</a>. Savage Worlds, Rippers and all associated logos and trademarks are copyrights of Pinnacle Entertainment Group. Used with permission. Pinnacle makes no representation or warranty as to the quality, viability, or suitability for purpose of this product. This game aid is the original creation of Alicia Hanwell (<span class="dsf dsf_dst_author"></span>), based on the GURPS 4e DST created by Jeffrey Head(<a href="http://www.obsidianportal.com/profile/Langy">Langy</a>), and is released for free distribution, and not for resale, under the permissions granted in the <a href="http://www.peginc.com/licensing/">Pinnacle Entertainment Fan Material Licensing</a>.</span> <div style="height:5px"></div> </div> </div>
CSS
/* Page Style */ div .ds_rippers_adh .rippers_adh_wrapper{ font-family:palatino; font-size:13px; color:black; width:715px; margin: 0; padding: 0; border: 0; vertical-align: middle; display: block; line-height: 1; list-style: none; quotes: none; content: ''; content: none; margin-bottom: 0em; background-image:none; } div .ds_rippers_adh a{ color:inherit; text-decoration:none; } div .rippers_adh_ed_only{ display:none; } div .editable .rippers_adh_ed_only { display:inline; } div .rippers_adh_ed_only_table{ display:none; } div .editable .rippers_adh_ed_only_table { display:table; } div .ds_rippers_adh table{ margin:0px; border-collapse: separate; border-spacing: 2px; } div .ds_rippers_adh table td{ font-size: inherit; padding: inherit; background-image:none; } div .ds_rippers_adh table th{ font-size: inherit; padding: inherit; background-image:none; } div .rippers_adh_bio a{ text-decoration:none; color:#996633; } div .rippers_adh_area a{ text-decoration:none; color:#996633; } div .rippers_adh_credits a{ text-decoration:none; color:#996633; } div .rippers_adh_quote{ text-decoration:none; color:#996633; } div .rippers_adh_quote_label{ position:absolute; font-size:11px; color:#996633; font-variant:small-caps; white-space:nowrap; } div form{ position:relative; } div field { padding:0px 0px 0px 0px; margin:-1px 0px 0px -1px; font-family:palatino; font-size:10px; color:#554220; } div .template{ display:none; } div .jeditable_submit{ display:none; } div .jeditable_submit_text { display:none; } /* Popup Box Styles */ div .rippers_adh_popup_background { position:fixed; width:100%; height:100%; top:0px; left:0px; z-index:5; background-color:#000000; opacity:0.5; } div .rippers_adh_popup_container { position:fixed; z-index:5; width:0px; height:0px; top:50%; left:50%; background-color:#FFFFFF; overflow:visible; } div .rippers_adh_popup_box { position:fixed; z-index:10; width:500px; height:300px; margin-left:-250px; margin-top:-150px; background-color:#FFFFFF; border: 1px solid #303; border-radius: 8px; } div .rippers_adh_popup_section { position:relative; padding: 0; margin: 0px; display: inline-block; vertical-align: top; overflow-y:auto; overflow-x:hidden; height:275px; width:500px; } div .rippers_adh_highlight_enc{ text-decoration:none; color:#FFFFFF; } div .editable .rippers_adh_highlight_enc{ text-decoration:none; color:#FFFFFF; cursor:pointer; } /* List Styles */ div .ds_rippers_adh .rippers_adh_listAdd{ float:right; cursor:pointer; text-decoration:none; color:#FFFFFF; position:relative; right:5px; } div .rippers_adh_listAdd:hover{ color:#CCCC99; } div .ds_rippers_adh .rippers_adh_listDelete{ color:#660000; cursor:pointer; letter-spacing:-1px; text-decoration:none; } div .ds_rippers_adh .rippers_adh_listDetails{ color:#660000; cursor:pointer; letter-spacing:-1px; text-decoration:none; } div .rippers_adh_listDetails_viewer { color:#000000; cursor:text; text-decoration:none; } div .rippers_adh_listDetails_view { color:#000000; cursor:pointer; text-decoration:none; } div .rippers_adh_listDetails_view:hover { color:#cc0000; cursor:pointer; text-decoration:none; } div .editable .rippers_adh_listDetails_view { color:#000000; cursor:text; text-decoration:none; } div .rippers_adh_details_notifier { font-weight:bold; } div .ds_rippers_adh .rippers_adh_listDelete:hover{ color:#cc0000; } div .ds_rippers_adh .rippers_adh_listPromote{ cursor:pointer; letter-spacing:-1px; text-decoration:none; color:#554220; } div .ds_rippers_adh .rippers_adh_listPromote:hover{ color:#957438; } div .ds_rippers_adh .rippers_adh_listDemote{ cursor:pointer; text-decoration:none; color:#554220; } div .ds_rippers_adh .rippers_adh_listDemote:hover{ color:#957438; } div .ds_rippers_adh .rippers_adh_listSpecial{ cursor:pointer; text-decoration:none; color:#554220; } div .ds_rippers_adh .rippers_adh_listSpecial:hover{ color:#957438; } div .ds_rippers_adh .rippers_adh_listSubheader{ cursor:pointer; text-decoration:none; color:#554220; height:22px; } div .ds_rippers_adh .rippers_adh_listSubheader:hover{ color:#957438; } div .rippers_adh_template{ display:none; } table .rippers_adh_table_row{ min-height:24px; } /* Edit Field Styles */ div .ds_rippers_adh .rippers_adh_linefield{ position:absolute; display:inline-block; min-height:16px; border-width:1px; border-color:#000000; border-bottom-style:solid; text-align:left; font-size:13px; line-height:16px; } div .ds_rippers_adh .rippers_adh_field{ position:relative; display:inline-block; min-height:16px; text-align:center; font-size:13px; width:100%; color:inherit; line-height:16px; } div .ds_rippers_adh .rippers_adh_field_wide{ position:relative; display:inline-block; min-height:16px; text-align:left; font-size:13px; width:100%; color:inherit; } div .ds_rippers_adh .rippers_adh_interface_small{ position:relative; width:5%; } div .ds_rippers_adh .rippers_adh_linefield_2{ display:inline-block; margin:0px 0px 1px 0px; min-height:16px; border-width:1px; border-color:#000000; border-bottom-style:solid; left:5px; width:75%; position:relative; } div .ds_rippers_adh .editable .rippers_adh_linefield_2{ display:inline-block; margin:0px 0px 1px 0px; min-height:16px; border-width:1px; border-color:#000000; border-bottom-style:solid; width:280px; position:relative; } div .ds_rippers_adh .rippers_adh_field_points{ display:inline-block; position:relative; border-bottom: 1px solid #330000; min-height:16px; vertical-align: middle; font-size:13px; text-align:center; left:10px; } div .ds_rippers_adh .editable .rippers_adh_field_points{ display:inline-block; position:relative; border-bottom: 1px solid #330000; min-height:16px; vertical-align: middle; font-size:13px; text-align:center; left:5px; width:100%; } div .ds_rippers_adh .rippers_adh_boxfield{ position:absolute; display:inline-block; width:24px; min-height:15px; vertical-align:middle; padding:0px 0px 0px 0px; text-align:center; font-weight:normal; border-width:1px; border-style:solid; border-color:#AAAAAA; font-size:13px; } div .ds_rippers_adh .rippers_adh_label{ position:absolute; font-size:11px; color:#333333; font-variant:small-caps; white-space:nowrap; } div .ds_rippers_adh .rippers_adh_area{ font-family:palatino; font-size:13px; position:relative; display:inline-block; padding:2px 4px 0px 4px; } div .ds_rippers_adh .rippers_adh_bio{ font-family:palatino; font-size:13px; position:relative; display:inline-block; padding:2px 4px 0px 4px; } div .ds_rippers_adh .rippers_adh_border_line{ border-bottom:black solid thin; position:absolute; font-size:13px; } div .area_submit{ display:none; } div .area_submit_text { display:none; } div.editable .area:hover{ color:#957438; } /* Section Styles */ div .ds_rippers_adh .rippers_adh_section{ position:relative; padding: 0; margin: 5px 0 0 0; border: 1px solid #303; border-radius: 8px; display: inline-block; background-color:#FFFFFF; } div .ds_rippers_adh .rippers_adh_section_left{ position:relative; padding: 0; margin: 5px 0 0 0; border: 1px solid #303; border-top-left-radius: 8px; border-bottom-left-radius: 8px; display: inline-block; background-color:#FFFFFF; } div .ds_rippers_adh .rippers_adh_section_right{ position:relative; padding: 0; margin: 5px 0 0 0; border: 1px solid #303; border-top-right-radius: 8px; border-bottom-right-radius: 8px; display: inline-block; background-color:#FFFFFF; } div .ds_rippers_adh .rippers_adh_section_no_border{ position:relative; padding: 0; margin: 5px 0 0 0; display: inline-block; } div .ds_rippers_adh .rippers_adh_section_image{ position:absolute; padding: 0; border: 1px solid #303; border-radius: 8px; display: inline-block; vertical-align: top; background-color:#996633; width:250px; height:250px; overflow:hidden; text-align:center; display: table-cell; vertical-align: middle; } div .ds_rippers_adh .rippers_adh_section_header{ width: 100%; font-weight:bold; background-color: #996633; color: #FFF; text-align: center; margin: 0; padding: 2px 0; border-top-left-radius: 8px; border-top-right-radius: 8px; } div .ds_rippers_adh .rippers_adh_section_header_left{ width: 100%; font-weight:bold; background-color: #996633; color: #FFF; text-align: center; margin: 0; padding: 2px 0; border-top-left-radius: 8px; } div .ds_rippers_adh .rippers_adh_section_header_right{ width: 100%; font-weight:bold; background-color: #996633; color: #FFF; text-align: center; margin: 0; padding: 2px 0; border-top-right-radius: 8px; } div .ds_rippers_adh .rippers_adh_field_header{ display: inline-block; font-weight:bold; background-color: #330000; color: #FFF; text-align: center; margin: 0; padding: 2px 0; border: 1px solid white; } /* Table Styles */ div .ds_rippers_adh .rippers_adh_table_basic_main{ text-align:center; width:100%; } div .rippers_adh_table_header.rippers_adh_highlight{ background-color:#003366 !important; } div .rippers_adh_table_box_field.rippers_adh_highlight{ font-weight:bold; border-color:#003366 !important; } div .ds_rippers_adh .rippers_adh_table_basic_cell{ text-align:center; } div .ds_rippers_adh .rippers_adh_table_special{ font-style:italic; background-color:#DDDDDD; } div .ds_rippers_adh .rippers_adh_table_field{ border-bottom-style:solid; border-color:#330000; border-width:2px; /*border: 2px solid #330000;*/ vertical-align: middle; padding: 0px 2px; } div .ds_rippers_adh .rippers_adh_table_box_field{ border: 2px solid #330000; vertical-align: middle; background-color:#FFFFFF; } div .ds_rippers_adh .rippers_adh_table_points{ border: 2px solid #330000; vertical-align: middle; } div .ds_rippers_adh .rippers_adh_table_box_points{ border: 2px solid #330000; vertical-align: middle; background-color: #ffffcc; } div .ds_rippers_adh .rippers_adh_table_main{ text-align:center; width:340px; } div .ds_rippers_adh .rippers_adh_table_header_horizontal{ font-weight:bold; background-color: #330000; color: #FFF; text-align: center; margin: 0; padding: 2px 0; border-top-left-radius: 8px; border-bottom-left-radius: 8px; } div .ds_rippers_adh .rippers_adh_table_subheader{ font-weight:bold; background-color: #000033; color: #FFF; text-align: center; margin: 0; padding: 2px 0; } div .ds_rippers_adh .rippers_adh_table_header{ font-weight:bold; background-color: #330000; color: #FFF; text-align: center; margin: 0; padding: 2px 0; } div .ds_rippers_adh .rippers_adh_table_cell_regular{ border: thin solid black; }
Javascript
// Global Storage rippers_adh_context = {}; var $ = jQuery; ////////////////////////////////////////// // Event Hooks :: Credit to ChainsawXIV // ////////////////////////////////////////// // Called immediately before the script fills the Span fields with data function rippers_adh_dataPreLoad(opts){ $.fn.editable.defaults['onblur'] = 'submit'; // Set the jeditable button aisleten.characters.jeditableSubmit = ''; aisleten.characters.jeditablePlaceholder = "Edit"; if(typeof dynamic_sheet_attrs == "undefined") dynamic_sheet_attrs = {}; //Set defaults to keep the editing fields from making the form gross var defaults = { "agility_points":"d4", "smarts_points":"d4", "spirit_points":"d4", "strength_points":"d4", "vigor_points":"d4", "agility_mod":"0", "smarts_mod":"0", "spirit_mod":"0", "strength_mod":"0", "vigor_mod":"0", "charisma_points":"0", "status_points":"5", "reason_points":"0", "parry_points":"2", "toughness_points":"4", "charisma_mod":"0", "status_mod":"0", "reason_mod":"0", "parry_mod":"0", "toughness_mod":"0", "pace":"6"", "wounds":"0", "fatigue":"0", "pace_mod":"0", "pounds":"0", "shillings":"0", "weight_carried":"0", "weight_limit":"20", "weight_penalty":"0", } dynamic_sheet_attrs = $.extend(defaults, dynamic_sheet_attrs); if (opts.isEditable){ //Replace fake-nbsp with real-nbsp for(var key in dynamic_sheet_attrs){ if (dynamic_sheet_attrs[key] === '&nbsp;') { // text was fake nbsp dynamic_sheet_attrs[key] = aisleten.characters.jeditablePlaceholder; } if (dynamic_sheet_attrs[key] === 'undefined') { // text was fake nbsp dynamic_sheet_attrs[key] = aisleten.characters.jeditablePlaceholder; } }; } else{ for(var key in dynamic_sheet_attrs){ if (dynamic_sheet_attrs[key] === '&nbsp;') { // text was fake nbsp dynamic_sheet_attrs[key] = " "; } if (dynamic_sheet_attrs[key] === 'undefined') { // text was fake nbsp dynamic_sheet_attrs[key] = " "; } }; } } function rippers_adh_dataChange(opts){ //var parrytotal = 0; var toughnesstotal = 2; var weightTotal = 20; var overweight = -1; //Calculate Toughness as (2+half of Vigor die type) $('[class*="vigor_points"]').each(function(index,element) { if (!isNaN(Number($(element).text().charAt(1)))) toughnesstotal = 2+(Number($(element).text().substr(1))/2); }); $('[class*="toughness_points"]').text(toughnesstotal); //Calculate Weight Limit as (5*Strength die type) $('[class*="strength_points"]').each(function(index,element) { if (!isNaN(Number($(element).text().charAt(1)))) weightTotal = 5*(Number($(element).text().substr(1))); }); $('[class*="weight_limit"]').text(weightTotal); //check for weight penalty $('[class*="weight_carried"]').each(function(index,element) { if (Number($(element).text()) > weightTotal) $('[class*="weight_penalty"]').text(overweight); else $('[class*="weight_penalty"]').text(0); }); } // Called immediately after the script fills the Span fields with data, before jeditable attachement function rippers_adh_dataPostLoad(opts){ var containerId = "#" + opts['containerId']; // Store global context for search by class name rippers_adh_context = document.getElementById(opts['containerId']); // Set additional options opts['imagePath'] = 'http://omnichron.net/external/op/src/solar/'; opts['context'] = document.getElementById(opts['containerId']); opts['debugThreshold'] = -1; //Convert interface elements rippers_adh_convertLists(opts); rippers_adh_convertAreas(opts); if (!opts.isEditable) { //We're in read-only mode, so alter the sheet a little to make it more useful $('[class*="interface"]').hide(); if (($(containerId + " .dsf_powers_name_00").length == 0)) { //No powers, so hide that section $(containerId + " .rippers_adh_powers_section").hide(); } if (($(containerId + " .dsf_rippertech_name_00").length == 0)) { //No rippertech, so hide that section $(containerId + " .rippers_adh_rippertech_section").hide(); } if (($(containerId + " .dsf_edges_00").length == 0)) { //No edges, so hide that section $(containerId + " .rippers_adh_edges_section").hide(); } if (($(containerId + " .dsf_hindrances_00").length == 0)) { //No hindrances, so hide that section $(containerId + " .rippers_adh_hindrances_section").hide(); } if (($(containerId + " .dsf_skill_one_00").length == 0)) { //No skills, so hide that section $(containerId + " .rippers_adh_skill_section_one").hide(); } if (($(containerId + " .dsf_skill_two_00").length == 0)) { //No skills, so hide that section $(containerId + " .rippers_adh_skill_section_two").hide(); } if (($(containerId + " .dsf_weapons_name_00").length == 0)) { //No weapons, so hide that section $(containerId + " .rippers_adh_weapons_section").hide(); } if (($(containerId + " .dsf_armor_name_00").length == 0)) { //No armor, so hide that section $(containerId + " .rippers_adh_armor_section").hide(); } if (($(containerId + " .dsf_possessions_name_00").length == 0)) { //No possessions, so hide that section $(containerId + " .rippers_adh_possessions_section").hide(); } if (($(containerId + " .dsf_traits").text().length <= 2)) { //No notes, so hide that section $(containerId + " .rippers_adh_traits_section").hide(); } if (($(containerId + " .dsf_desc").text().length <= 2)) { //No description, so hide that section $(containerId + " .rippers_adh_description_section").hide(); } if (($(containerId + " .dsf_bio").text().length <= 2)) { //No biography, so hide that section $(containerId + " .rippers_adh_bio_section").hide(); } } rippers_adh_update_inputbox(); } // Called immediately before the sheet's data is saved function rippers_adh_dataPreSave(opts){ // Set additional options opts['context'] = document.getElementById(opts['containerId']); rippers_adh_unconvertAreas(opts); var containerId = "#" + opts['containerId']; //Save whitespaced areas in order to preserve table structures $(containerId + " .dsf").each(function(index,element) { var tester = $(element).text().replace(/^\s+/, '').replace(/\s+$/, ''); if($(element).filter('.rippers_adh_entry').length > 0){ if (tester === '') { // text was all whitespace $(element).text(" "); } if ($(element).text() === aisleten.characters.jeditablePlaceholder) { // text was default $(element).text(" "); } } else{ if (tester === '') { // text was all whitespace $(element).remove(); } if ($(element).text() === aisleten.characters.jeditablePlaceholder) { // text was default $(element).remove(); } } }); } //////////////////////////////////////////// // Rationalize Heights :: Credit to Langy // //////////////////////////////////////////// function rippers_adh_update_inputbox() { var multiple = 24; $(rippers_adh_context).find('table').filter('[class*="table_row"]').each(function(){ if($(this).innerHeight() > 20){ $(this).removeAttr('height'); $(this).css({height: "" });; } }); $(rippers_adh_context).find('table').filter('[class*="table_row"]').each(function(){ if($(this).innerHeight() > 20){ if($(this).innerHeight()%multiple >= 1){ $(this).height(parseInt($(this).height())+(multiple-$(this).innerHeight()%multiple)); } } }); } ///////////////////////////////////////////////////// // Text Area Edit Control :: Credit to ChainsawXIV // ///////////////////////////////////////////////////// // Core Textarea Class function rippers_adh_area(oElement,opts){ // Store options oElement.setAttribute('optsIsEditable',opts['isEditable']); oElement.setAttribute('optsDebugThreshold',opts['debugThreshold']); // Attaches edit events to area text oElement.activate = function(){ // Don't activate the element if we're not in edit mode if (this.getAttribute('optsIsEditable') != 'true') return; // Activate the element oElement.onclick = this.edit; // Add default value if (this.innerHTML == '') this.innerHTML = aisleten.characters.jeditablePlaceholder; // Set the element's alt text this.title = 'Edit'; // Set the cursor for the item this.style.cursor = 'pointer'; }; // Converts the element to an editable area oElement.edit = function(){ // Abort click function if we just clicked submit if(this.getAttribute('eventLock') == 'locked'){ this.setAttribute('eventLock',null); return; } // Force submit any other area in the context var aAreas = rippers_adh_getElementsByClassName('area','span'); for (var i = 0; i < aAreas.length; i++){ if (aAreas[i].getAttribute('status') == 'editing') aAreas[i].submit(); } // Set the editing flag this.setAttribute('status','editing'); // Disable click functionality this.onclick = null; // Set cursor this.style.cursor = 'text'; // Remove default if (this.innerHTML == aisleten.characters.jeditablePlaceholder) this.innerHTML = ''; // Convert <br /> tags to line breaks var sText = this.innerHTML.replace(/<br>/g,'\n'); // Select dimensions and classes var iWidth = this.offsetWidth + parseInt(this.getAttribute('widthMod')); var iHeight = this.offsetHeight + parseInt(this.getAttribute('heightMod')) + 60; var sClasses = this.getAttribute('areaClasses'); // Convert content into form with button this.innerHTML = '<textarea class=rippers_adh_textarea "' + sClasses + '" style="width:' + iWidth + 'px;height:' + iHeight + 'px;">' + sText + '</textarea>'; // Set the user's focus to the textarea and set it to save on loss-of-focus var focusRef = function(){$('.rippers_adh_textarea').focus();}; var submitRef = function(){$('.rippers_adh_textarea').parent().submit();}; var unfocusRef = function(){$('.rippers_adh_textarea').blur(submitRef)}; this.focusTimeout = setTimeout(focusRef,50); this.unfocusTimeout = setTimeout(unfocusRef,60); }; // Converts the edit box back into regular text form oElement.submit = function(){ // Get the data from the edit box var sContent = this.getElementsByTagName('textarea')[0].value.replace(/\n/g,'<br>'); // Remove the form elements this.innerHTML = sContent; // Reapply the default value if needed if (this.innerHTML == '') this.innerHTML = aisleten.characters.jeditablePlaceholder; // Lock out the click event until we're done this.setAttribute('eventLock','locked'); // Automatically unlock after a twentieth of a second var submitRef = function(){oElement.setAttribute('eventLock',null);}; this.timeout = setTimeout(submitRef,50); // Set pointer this.style.cursor = 'pointer'; // Reattach the click functionality this.onclick = this.edit; // Reset the editing flag this.setAttribute('status',null); // Call the onUpdate event this.onUpdate(); }; // On Update event function, typicaly overriden oElement.onUpdate = function(){ } // Error handling function - alerts on errors if bug reporting is on oElement.error = function(iImportance,sText){ if (this.getAttribute('optsDebugThreshold')) var iThreshold = this.getAttribute('debugThreshold'); else iThreshold = 0; if (iImportance < iThreshold){ alert(sText); } } // Return the element for ease of refference return oElement; } // Converts all properly classed divs in the context to areas function rippers_adh_convertAreas(opts){ // Find all the spans on the page with "area" in their class name if (opts['context']) var aSpans = opts['context'].getElementsByTagName('span'); else var aSpans = document.getElementsByTagName('span'); var taTemp = {}; for (var i = 0; i < aSpans.length; i++){ if (aSpans[i].className.match(/area/)){ // Convert each element to a full featured area object taTemp = rippers_adh_area(aSpans[i],opts); taTemp.activate(); // Load up custom parameters and such depending on class if (aSpans[i].className.match('is_tooltip')){ taTemp.setAttribute('widthMod',-9); taTemp.setAttribute('heightMod',-9); taTemp.setAttribute('areaClasses','area tip_area'); taTemp.onUpdate = function(){ oParent = this.parentNode; oParent.setAttribute("editLock","unlocked"); oParent.mouseOut(); }; } else{ taTemp.setAttribute('widthMod',-23); taTemp.setAttribute('heightMod',-6); taTemp.setAttribute('areaClasses','area'); } } } } // Sets the necesary class name on areas for them to be saved function rippers_adh_unconvertAreas(opts){ // Find all the spans on the page with "area" in their class name if (opts['context']) var aSpans = opts['context'].getElementsByTagName('span'); else var aSpans = document.getElementsByTagName('span'); // Add the necesary save key to the class name // Also close out any active edit boxes for (var i = 0; i < aSpans.length; i++){ if (aSpans[i].className.match(/area/)){ if (aSpans[i].innerHTML == aisleten.characters.jeditablePlaceholder) aSpans[i].innerHTML = ''; } } } ////////////////////////////////////////////////////////////////////////////////// // List Interface Control :: Credit to ChainsawXIV / Massively altered by Langy // ////////////////////////////////////////////////////////////////////////////////// // Applies a bunch of list functionality to the specified element function rippers_adh_list(oElement,opts){ // Store options oElement.setAttribute('optsContainerId',opts['containerId']); oElement.setAttribute('optsIsEditable',opts['isEditable']); oElement.setAttribute('optsDebugThreshold',opts['debugThreshold']); var slug = $(oElement).parents('.dynamic_sheet').find('.dst_slug').text(); // Parses the number of columns the list has from its class name oElement.columns = function(){ // Get the column count from the element's class name var iColumns = this.className.match(/listColumns_[\d]+/)[0].substring(12); // Default if needed, and return if (isNaN(iColumns) || iColumns < 1){ this.error(1,"Invalid column count specification in List Element (Element Class: " + this.className + ")"); return 1; } else return iColumns; }; // Gets the list's list item template from the element based on class oElement.template = function(){ if ($(this).find(".template").length > 0) { return $(this).find(".template")[0]; } // Create a semi-persistent default row template if needed if (!this.defaultTemplate){ this.defaultTemplate = document.createElement('div'); this.defaultTemplate.innerHTML = '<span class="dsf"></span>'; } // If we got here, there wasn't a template in the list, default and return this.error(1,"No template row found in List Element (Element Class: " + this.className + ")"); return this.defaultTemplate; }; // Gets an array of the fields in the template row oElement.fields = function(){ // This is easy assuming all the fields are span tags, and all the spans are fields return $(this.template()).find(".dsf"); } // Gets an array of the rows in the list, excluding the template oElement.rows = function(){ // Initialize the list of rows var aRows = new Array(); // Getting the divs in the list the hard way to avoid nested divs making the cut var aElements = this.childNodes; var aDivs = new Array(); var iCounter = 0; for (var n = 0; n < aElements.length; n++){ if (aElements[n].tagName == 'DIV'){ aDivs[iCounter] = aElements[n]; iCounter++; } } // If we have multiple columns, then get the rows from inside each one if (this.columns() > 1){ var aTemp = new Array(); for (var x = 0; x < aDivs.length; x++){ if (!aDivs[x].className.match(/template/)){ aTemp = aDivs[x].getElementsByTagName('div'); for (var y = 0; y < aTemp.length; y++){ aRows[aRows.length] = aTemp[y]; } } } } // Otherwise just get them all from the main div else{ for (var i = 1; i < aDivs.length; i++){ aRows[aRows.length] = aDivs[i]; } } // Return the array of rows // This may have been disassociated by the splices, not sure yet return aRows; } // Generates a structure containing the list's data from the save object oElement.loadData = function(){ // Pattern match on the first field for simplicity's sake var iCounter = 0; var oData = {}; // Get the fields in order (doesn't allow missing fields) // Allow missing fields, bitch! // Add items-in-list storage var numRows = parseInt($(this).find("[class*='dsf_num_elements']").text()); if(isNaN(numRows)){ var sClassPattern = this.fields()[0].className.match(/dsf_[\w\d]+/)[0].substring(4); while (dynamic_sheet_attrs[sClassPattern + this.padDigits(iCounter,2)] != undefined){ oData[iCounter] = new Array(); for (var i = 0; i < this.fields().length; i++){ oData[iCounter][i] = dynamic_sheet_attrs[this.fields()[i].className.match(/dsf_[\w\d]+/)[0].substring(4) + this.padDigits(iCounter,2)]; } iCounter++; } } else{ var sClassPattern = this.fields()[0].className.match(/dsf_[\w\d]+/)[0].substring(4); for(iCounter = 0; iCounter < numRows; iCounter++){ oData[iCounter] = new Array(); for (var i = 0; i < this.fields().length; i++){ oData[iCounter][i] = dynamic_sheet_attrs[this.fields()[i].className.match(/dsf_[\w\d]+/)[0].substring(4) + this.padDigits(iCounter,2)]; if(oData[iCounter][i] == undefined){ if($(this).parents(".editable").length > 0){ oData[iCounter][i] = aisleten.characters.jeditablePlaceholder; } else{ oData[iCounter][i] = ' '; } } } } } // Write the length oData.length = iCounter; // Write the completed data structure to the object this.data = oData; } // Generates a structure contianing the list's data form the list itself oElement.parseData = function(){ // Go through each row of each field and populate the structure var oData = {}; oData.length = 0; for (var i = 0; i < this.rows().length; i++){ oData[i] = new Array(); $(this.rows()[i]).find(".dsf").each(function(index,element){ oData[i][index] = $(element).html(); oData.length = i + 1; }); } // Write the completed data structure to the object this.data = oData; } // Renders out the code for the list and puts it into the list element oElement.render = function(){ var sTemp = ''; var iCurrentColumn = 1; var iBreak = 0; var sClass = ''; var fieldNames = {}; // Reset the template if it was used for (var x = 0; x < this.fields().length; x++){ fieldNames[x] = this.fields()[x].className; } // Add the first column opener if multiple columns, and calc first col break if (this.columns() > 1){ sTemp = '\n<div class="column column_spacing">'; iBreak += Math.floor(this.data.length / this.columns()) - 1; if (iCurrentColumn <= (this.data.length % this.columns())) iBreak++; } // Accumulate the list code for each row for (var i = 0; i < this.data.length; i++){ // Populate and class the fields for (var n = 0; n < this.fields().length; n++){ this.fields()[n].className = this.fields()[n].className.replace(/dsf_[\w\d]+/,this.fields()[n].className.match(/dsf_[\w\d]+/)[0] + this.padDigits(i,2)); this.fields()[n].innerHTML = this.data[i][n]; } // Add the list item to the code sTemp += "<div class='list_element list_index_" + this.padDigits(i,2) + "'>" + this.template().innerHTML + "</div>" // Reset the template if it was used for (var x = 0; x < this.fields().length; x++){ sClass = this.fields()[x].className.match(/dsf_[\w\d]+/)[0]; this.fields()[x].className = fieldNames[x]; this.fields()[x].innerHTML = ''; } // Add column breaks where needed if (this.columns() > 1 && (i == iBreak)){ // Add the column opener for the last column if (iCurrentColumn == (this.columns() - 1)) sTemp += '</div>\n<div class="column">'; // Add the final column's column closer else if (i == (this.data.length - 1)) sTemp += '</div>'; // Add the column openers for other columns else sTemp += '</div>\n<div class="column column_spacing">'; // Update the column break and current column iCurrentColumn++; iBreak += Math.floor(this.data.length / this.columns()); if (iCurrentColumn <= (this.data.length % this.columns())) iBreak++; } } // Prepend the template to the list code sTemp = '<div class="template">' + this.template().innerHTML + '</div>' + sTemp; var listName = $(this)[0].className; listName = listName.substring(listName.indexOf("list_") + 5).split(/\s+/)[0]; // Prepend the element count sTemp = '<span class="dsf dsf_num_elements_' + listName + '" style="display:none">' + this.data.length + '</span>\n' + sTemp; // Purge jquery expandos in explorer sTemp = sTemp.replace(/jQuery[\d]+="[\d]+"/g,''); // Put the code in the list this.innerHTML = sTemp; // Activate the interface if in edit mode if (this.getAttribute('optsIsEditable') == 'true'){ $(this).find('.' + slug + '_listDelete').click(this.deleteItem); $(this).find('.' + slug + '_listPromote').click(this.promoteItem); $(this).find('.' + slug + '_listDemote').click(this.demoteItem); $(this).find('.' + slug + '_listSubheader').click(this.toggleSubheader); $(this).find('.' + slug + '_listSpecial').click(this.toggleSpecial); $(this).find('.' + slug + '_listDetails').click(this.toggleDetails); $(this).find('.' + slug + '_listDetailsNoPointer').click(this.toggleDetails); } // Hide them if not else{ $(this).find('.' + slug + '_listDetails_viewer').click(this.toggleDetails); $(this).find('.' + slug + '_listDetailsNoPointer').click(this.toggleDetails); } //Show skill subheaders $(this).find('[class*="subheader_on_"]').each(function(index,element) { if($(element).text() === "1"){ $(element).siblings(".rippers_adh_subheader").show(); } }); //Show special $(this).find('[class*="special_on_"]').each(function(index,element) { if($(element).text() === "1"){ $(element).siblings(".rippers_adh_table_row").addClass("rippers_adh_table_special"); } }); //Show details notifier $(this).find('[class="rippers_adh_details_parent"]').each(function(index,element){ if($(element).find('.rippers_adh_details').text().length >= 2){ if($(element).find('.rippers_adh_details').text() != aisleten.characters.jeditablePlaceholder){ $(element).find('.rippers_adh_details_notifier').text('†'); $(element).find('.rippers_adh_listDetails_viewer').addClass('rippers_adh_listDetails_view'); $(element).find('.rippers_adh_listDetails_viewer').removeClass('rippers_adh_listDetails_viewer'); } } }); }; // Adds a blank element to the list oElement.addItem = function(){ var elNum = $(this).find('.list_element').length; $(this).append("<div class='list_element list_index_" + this.padDigits(elNum,2) + "'>" + this.template().innerHTML + "</div>"); var newbie = $(this).find('.list_element')[elNum]; $(newbie).find('.' + slug + '_listDelete').click(this.deleteItem); $(newbie).find('.' + slug + '_listPromote').click(this.promoteItem); $(newbie).find('.' + slug + '_listDemote').click(this.demoteItem); $(newbie).find('.' + slug + '_listSubheader').click(this.toggleSubheader); $(newbie).find('.' + slug + '_listSpecial').click(this.toggleSpecial); $(newbie).find('.' + slug + '_listDetails').click(this.toggleDetails); $(newbie).find('.' + slug + '_listDetailsNoPointer').click(this.toggleDetails); for (var n = 0; n < $(newbie).find('.dsf').length; n++){ var name = this.fields()[n].className.replace(/dsf_[\w\d]+/,this.fields()[n].className.match(/dsf_[\w\d]+/)[0] + this.padDigits(elNum,2)); $(newbie).find('.dsf')[n].className = name; if(this.fields()[n].className.indexOf("readonly") == -1) { name = name.substring(name.indexOf("dsf_") + 4).split(/\s+/)[0]; aisleten.characters.bindField(name,$(this).attr('optsContainerId'),slug); } } $(this).find("[class*='dsf_num_elements']").text(elNum+1); this.length = elNum + 1; rippers_adh_convertAreas(opts); }; // Deletes the specified element from the list oElement.deleteItem = function(){ var lList = $(this).parents('[class*="listCol"]')[0]; var elNum = $(lList).find('.list_element').length; $(lList).find("[class*='dsf_num_elements']").text(elNum-1); lList.length = elNum - 1; $(this).parents('.list_element').remove(); lList.renumberRows(); }; // Shows or hides the row's subheader oElement.toggleSubheader = function(){ // Activate the list the item belongs to var oItem = this; var lList; while(oItem.parentNode){ if (oItem.parentNode.className.match(/list/)){ lList = oItem.parentNode; break; } else oItem = oItem.parentNode; } //The header showing/hiding element *must* be the first span in the row template! if($(oItem).find('.rippers_adh_subheader_toggle').text() === "1") { $(oItem).find('.rippers_adh_subheader_toggle').text(aisleten.characters.jeditablePlaceholder); $(oItem).find(".rippers_adh_subheader").hide(); } else { $(oItem).find('.rippers_adh_subheader_toggle').text("1"); $(oItem).find(".rippers_adh_subheader").show(); } }; // Shows or hides the row's special formating oElement.toggleSpecial = function(){ // Activate the list the item belongs to var oItem = this; var lList; while(oItem.parentNode){ if (oItem.parentNode.className.match(/list/)){ lList = oItem.parentNode; break; } else oItem = oItem.parentNode; } if($(oItem).find('.rippers_adh_special_toggle').text() === "1") { $(oItem).find('.rippers_adh_special_toggle').text(aisleten.characters.jeditablePlaceholder); //Hide special $(oItem).find(".rippers_adh_table_row").removeClass("rippers_adh_table_special"); } else { $(oItem).find('.rippers_adh_special_toggle').text("1"); //Show special $(oItem).find(".rippers_adh_table_row").addClass("rippers_adh_table_special"); } }; // Shows or hides the row's popup oElement.toggleDetails = function(){ // Activate the list the item belongs to var oItem = this; var lList; while(oItem.parentNode){ if (oItem.parentNode.className.match(/list/)){ lList = oItem.parentNode; break; } else oItem = oItem.parentNode; } if($(this).parents(".editable").length == 0){ if ($(this).closest('.rippers_adh_details_parent').find('.rippers_adh_details').text().length >= 2) { if ($(this).closest('.rippers_adh_details_parent').find('.rippers_adh_details').text() != aisleten.characters.jeditablePlaceholder){ if($(oItem).find('.rippers_adh_pop_toggle').text() === "1") { $(oItem).find('.rippers_adh_pop_toggle').text(aisleten.characters.jeditablePlaceholder); //Hide popup $(oItem).find('.rippers_adh_popup').hide() } else { $(oItem).find('.rippers_adh_pop_toggle').text("1"); //Show popup $(oItem).find('.rippers_adh_popup').show(); } } } } else{ if($(oItem).find('.rippers_adh_pop_toggle').text() === "1") { $(oItem).find('.rippers_adh_pop_toggle').text(aisleten.characters.jeditablePlaceholder); //Hide popup $(oItem).find('.rippers_adh_popup').hide() } else { $(oItem).find('.rippers_adh_pop_toggle').text("1"); //Show popup $(oItem).find('.rippers_adh_popup').show(); } } var element = $(this).parents('.list_element'); //Show details notifier if(element.find('.rippers_adh_details').text().length >= 2){ if($(element).find('.rippers_adh_details').text() != aisleten.characters.jeditablePlaceholder){ $(element).find('.rippers_adh_details_notifier').text('†'); $(element).find('.rippers_adh_listDetails_viewer').addClass('rippers_adh_listDetails_view'); $(element).find('.rippers_adh_listDetails_viewer').removeClass('rippers_adh_listDetails_viewer'); } } }; // Moves the specified element up the list one place oElement.promoteItem = function(){ var cur = $(this).parents('.list_element'); if($(this).parents('.list_element').prev('.list_element').length > 0){ var prev = $(this).parents('.list_element').prev('.list_element'); $(cur).after($(prev)); } $(this).parents('[class*="listCol"]')[0].renumberRows(); }; // Moves the specified element down the list one place oElement.demoteItem = function(){ var cur = $(this).parents('.list_element'); if($(this).parents('.list_element').next('.list_element').length > 0){ var next = $(this).parents('.list_element').next('.list_element'); $(next).after($(cur)); } $(this).parents('[class*="listCol"]')[0].renumberRows(); }; // Moves the specified element down the list one place oElement.renumberRows = function(){ var lList = $(this).find(".list_element"); var listFields; var name; var numDigits = 2; for (var i = 0; i < lList.length; i++){ listFields = $(lList[i]).find(".dsf"); name = this.fields()[0].className; name = name.substring(name.indexOf("dsf_")).split(/\s+/)[0]; index = listFields[0].className.substring(listFields[0].className.indexOf("dsf_")).split(/\s+/)[0].substring(name.length); for (var j = 0; j < listFields.length; j++){ listFields[j].className = listFields[j].className.replace(index,this.padDigits(i,2)); lList[i].className = lList[i].className.replace(index,this.padDigits(i,2)); } } }; // Error handling function - alerts on errors if bug reporting is on oElement.error = function(iImportance,sText){ if (this.getAttribute('optsDebugThreshold')) var iThreshold = this.getAttribute('optsDebugThreshold'); else iThreshold = 0; if (iImportance < iThreshold){ alert(sText); } } // Converts a number to a string with prepended zeros to the specified character length oElement.padDigits = function(iNumber,iDigits){ var sNumber = iNumber.toString(); var sTemp = ''; if (iDigits > sNumber.length){ for (var i = 0; i < (iDigits - sNumber.length); i++){ sTemp += '0'; } } return sTemp + sNumber; } // On Update event function, typically overridden oElement.onUpdate = function(){ } // Return the original element now that it's fully equipped return oElement; } // Converts all properly classed divs in the context to lists function rippers_adh_convertLists(opts){ // Find all the divs on the page with "list" in their class name if (opts['context']) var aDivs = opts['context'].getElementsByTagName('div'); else var aDivs = document.getElementsByTagName('div'); var lTemp = {}; for (var i = 0; i < aDivs.length; i++){ if (aDivs[i].className.match(/list/)){ if (!aDivs[i].className.match(/list_element/)){ // Convert each element to a full featured list object lTemp = rippers_adh_list(aDivs[i],opts); // Populate the list from the data variable lTemp.loadData(); lTemp.render(); // Assign the onUpdate function lTemp.onUpdate = function(){ rippers_adh_convertAreas(opts); aisleten.characters.bindAllFields(opts['slug'],opts['containerId']); } } } } } //////////////////////////////////////////////////////// // General Utility Functions :: Credit to ChainsawXIV // //////////////////////////////////////////////////////// // Gets an array of elements with a particular class from the context function rippers_adh_getElementsByClassName(sClassName,sElementType){ // Provide default element type if (!sElementType) sElementType = 'div'; var aList = new Array(); var aDivs = rippers_adh_context.getElementsByTagName(sElementType); for (var i = 0; i < aDivs.length; i++){ if (aDivs[i].className.match(sClassName)) aList[aList.length] = aDivs[i]; } return aList; }
Submit Notes
Back