Merge branch 'Roll20:master' into master

This commit is contained in:
Paul Venner
2023-01-27 08:43:52 +00:00
committed by GitHub
952 changed files with 253587 additions and 57930 deletions
+185 -185
View File
@@ -1,245 +1,245 @@
{
"info-ability": "Info & Abilities",
"intrigue-combat": "Intrigue & Combat",
"info-ability": "Info & Fähigkeiten",
"intrigue-combat": "Intrige & Kampf",
"character-details": "Charakter Details",
"npcs": "NSCs",
"armies": "Armies",
"armies": "Armeen",
"journal": "Notizbuch",
"name": "Name :",
"player-name": "Player Name",
"house": "House:",
"player-name": "Spielername:",
"house": "Haus:",
"motto": "Motto",
"age": "Alter",
"gender": "Geschlecht",
"height": "Höhe",
"weight": "Gewicht",
"hair-color": "Hair Color",
"eye-color": "Eye Color",
"hair-color": "Haarfarbe",
"eye-color": "Augenfarbe",
"custom-roll": "Benutzerdef. Wurf",
"agility": "Agility",
"agility": "Gewandtheit",
"acrobatics": "Akrobatik",
"balance": "Balance",
"contortions": "Contortions",
"dodge": "Dodge",
"quickness": "Quickness",
"animal-handling": "Mit Tieren umgehen",
"charm": "Charm",
"drive": "Drive",
"ride": "Ride",
"train": "Train",
"balance": "Gleichgewicht",
"contortions": "Verrenkung",
"dodge": "Ausweichen",
"quickness": "Schnelligkeit",
"animal-handling": "Umgang mit Tieren",
"charm": "Beruhigen",
"drive": "Lenken",
"ride": "Reiten",
"train": "Abrichten",
"athletics": "Athletik",
"climb": "Klettern",
"jump": "Jump",
"run": "Run",
"jump": "Springen",
"run": "Rennen",
"strength": "Stärke",
"swim": "Schwimmen",
"Throw": "Werfen",
"awareness": "Awareness",
"empathy": "Empathy",
"notice": "Notice",
"cunning": "Cunning",
"decipher": "Decipher",
"logic": "Logic",
"memory": "Memory",
"deception": "Täuschen",
"act": "Act",
"bluff": "Bluff",
"cheat": "Cheat",
"disguise": "Disguise",
"endurance": "Endurance",
"resilience": "Widerstandskraft",
"stamina": "Stamina",
"fighting": "Kämpfen",
"axes": "Axes",
"bluggeons": "Bludgeons",
"brawling": "Brawling",
"fencing": "Fencing",
"long-blade": "Long Blades",
"awareness": "Wahrnehmung",
"empathy": "Empathie",
"notice": "Aufmerksamkeit",
"cunning": "Scharfsinn",
"decipher": "Entschlüsseln",
"logic": "Logik",
"memory": "Erinnerung",
"deception": "Täuschung",
"act": "Schauspielern",
"bluff": "Bluffen",
"cheat": "Betrügen",
"disguise": "Verkleiden",
"endurance": "Ausdauer",
"resilience": "Widerstandsfähigkeit",
"stamina": "Kondition",
"fighting": "Kampf",
"axes": "Äxte",
"bluggeons": "Schlagwaffen",
"brawling": "Prügeln",
"fencing": "Fechten",
"long-blade": "Langklinge",
"polearms": "Stangenwaffen",
"shields": "Schilde",
"short-blade": "Short Blades",
"short-blade": "Kurzklinge",
"spears": "Speere",
"healing": "Heilung",
"healing": "Heilkunst",
"diagnose": "Diagnose",
"treat-ailment": "Treat Ailment",
"treat-injury": "Treat Injury",
"laguage": "Language",
"treat-ailment": "Leiden Behandeln",
"treat-injury": "Verletzung Behandeln",
"laguage": "Sprache",
"roll": "Wurf",
"knowledge": "Knowledge",
"education": "Allgemeinbildung",
"research": "Forschung",
"streetwise": "Straßenwissen",
"marksmanship": "Fernkampf",
"knowledge": "Wissen",
"education": "Bildung",
"research": "Recherche",
"streetwise": "Gassenwissen",
"marksmanship": "Schiesskunst",
"bows": "Bögen",
"crossbows": "Crossbows",
"siege": "Siege",
"thrown": "Thrown",
"persuasuion": "Überzeugen",
"bargain": "Bargain",
"crossbows": "Armbrüste",
"siege": "Belagerung",
"thrown": "Wurfwaffen",
"persuasuion": "Überredung",
"bargain": "Feilschen",
"convince": "Überzeugen",
"incite": "Incite",
"intimidate": "Intimidate",
"seduce": "Seduce",
"taunt": "Provozieren",
"incite": "Aufstacheln",
"intimidate": "Einschüchtern",
"seduce": "Verführen",
"taunt": "Verspotten",
"status": "Status",
"breeding": "Breeding",
"reputation": "Reputation",
"stewardship": "Stewardship",
"tournaments": "Tournaments",
"stealth": "Heimlichkeit",
"blend-in": "Blend In",
"breeding": "Erziehung",
"reputation": "Ansehen",
"stewardship": "Verwaltung",
"tournaments": "Turniere",
"stealth": "Verstohlenheit",
"blend-in": "Untertauchen",
"sneak": "Schleichen",
"survival": "Überlebenskunst",
"forage": "Forage",
"hunt": "Hunt",
"orientation": "Orientation",
"track": "Titel",
"survival": "Überleben",
"forage": "Nahrungssuche",
"hunt": "Jagen",
"orientation": "Orientierung",
"track": "Verfolgen",
"thievery": "Diebeskunst",
"pick-lock": "Schlösser öffnen",
"sleight-of-hand": "Fingerfertigkeit",
"steal": "Steal",
"warfare": "Warfare",
"command": "Kommando",
"strategy": "Strategy",
"tactics": "Tactics",
"steal": "Stehlen",
"warfare": "Kriegsführung",
"command": "Befehligen",
"strategy": "Strategie",
"tactics": "Taktik",
"will": "Willen",
"courage": "Mut",
"coordonate": "Coordinate",
"dedication": "Dedication",
"coordonate": "Koordinierung",
"dedication": "Hingabe",
"initiative": "Inititative",
"defense": "Defense",
"defense-bonus": "Defense Bonus",
"composure": "Composure Bonus",
"defense": "Verteidigung",
"defense-bonus": "Abwehrbonus",
"composure": "Gelassenheit",
"current": "Aktuell",
"max": "Max",
"frustration": "Frustration:",
"d-malus-deception-persuation": "1D on Deception and Persuasion",
"health": "Health",
"1-on-all-tests": "1 on all tests",
"d-malus-deception-persuation": "-1W auf Täuschung und Überredung",
"health": "Gesundheit",
"1-on-all-tests": "-1 bei allen Proben",
"armor": "Rüstung",
"armor-rating": "Panzerungswert",
"armor-penalty": "Armor Penalty",
"armor-bulk": "Armor Bulk",
"injuries-wounds": "Injuries & Wounds",
"injuries": "Injuries",
"injuries-impose": "Injuries impose -1 to all tests.",
"wounds": "Wounds:",
"wounds-impose": "Wounds impose -1D to all tests.",
"destiny-point": "Destiny Points",
"avaible": "Available:",
"armor-rating": "Rüstungswert",
"armor-penalty": "Rüstimgsabzug",
"armor-bulk": "Rüstungslast",
"injuries-wounds": "Verletzungen & Wunden",
"injuries": "Verletzungen",
"injuries-impose": "-1 auf Ergebnisse aller Proben",
"wounds": "Wunden:",
"wounds-impose": "-1W für alle deine Proben",
"destiny-point": "Schicksalspunkte",
"avaible": "Verfügbar:",
"maximum": "Maximum",
"base": "Basis",
"invested": "Invested",
"invested": "Verbrannte",
"bonus": "Bonus",
"yds": "yds",
"move-speed": "Move Speed",
"sprint-multi": "Sprint Multi",
"sprint-speed": "Sprint Speed",
"bulk": "Bulk",
"equiped-weapons": "Equipped Weapons",
"type": "Type: ",
"intrigue": "Intrigue",
"yds": "m",
"move-speed": "Bewegung",
"sprint-multi": "Rennen Multi",
"sprint-speed": "Rennen",
"bulk": "Last",
"equiped-weapons": "Ausgerüstete Waffen",
"type": "Art:",
"intrigue": "Intrige",
"combat": "Kampf",
"fatigue": "Fatigue:",
"fatigue": "Erschöpfung:",
"movement": "Bewegung",
"melee": "Nahkampf",
"ranged": "Fernkampf",
"specialty": "Specialty:",
"axe": "Axes",
"bludgeons": "Bludgeons",
"long-blades": "Long Blades",
"short-blades": "Short Blades",
"training": "Training :",
"specialty": "Spezialisierung:",
"axe": "Axt",
"bludgeons": "Schlagwaffen",
"long-blades": "Langklingen",
"short-blades": "Kurzklingen",
"training": "Ausbildung :",
"damage": "Schaden",
"damage-mod": "Schadens-Mod.:",
"qualities": "Qualities",
"qualities": "Eigenschaften",
"hit": "Treffer",
"possessions": "Possessions",
"equipment-gear": "Equipment & Gear",
"possessions": "Besitztümer",
"equipment-gear": "Ausrüstung & Gegenstände",
"item-name": "Name des Gegenstands",
"value": "Value",
"mount-livestock": "Mounts & Livestock",
"animal": "Animal",
"value": "Wert",
"mount-livestock": "Reit- & Haustiere",
"animal": "Tier",
"currency": "Währung",
"copper-pennies": "Copper Pennies:",
"silver-stags": "Silver Stags:",
"gold-dragons": "Gold Dragons:",
"silver-stags-to-pennies": "Silver Stag = 56 Pennies",
"gold-dragon-to-stags": "Gold Dragon = 210 Stags (11,760 Pennies)",
"character-information": "Character Information",
"copper-pennies": "Kupferstücke:",
"silver-stags": "Silberhirsche:",
"gold-dragons": "Golddrachen:",
"silver-stags-to-pennies": "Silberhirschen = 56 Kupferstücke",
"gold-dragon-to-stags": "Golddrachen = 210 Hirsche (11.760 Kupfer)",
"character-information": "Charakter Informationen",
"experience": "Erfahrungspunkte",
"total": "Total:",
"spent": "Spent:",
"total": "Gesamt:",
"spent": "Ausgegeben:",
"expenditures": "Expenditures",
"glory": "Ruhm",
"benefits": "Benefits",
"benefits": "Vorteile",
"effect": "Effekt",
"drawbacks": "Drawbacks",
"drawbacks": "Nachteile",
"virtues": "Tugenden",
"vices": "Vices",
"goals": "Goals",
"vices": "Laster",
"goals": "Ziele",
"motivations": "Motivationen",
"mannerisms": "Mannerisms",
"distinguishing-features": "Distinguishing Features",
"retainers": "Retainers",
"allies": "Allies",
"enemies": "Enemies",
"Oaths": "Oaths",
"personnal-history": "Personal History",
"notable-npc": "Notable NPCs",
"realm": "Realm:",
"mannerisms": "Angewohnheiten",
"distinguishing-features": "Besondere Merkmale",
"retainers": "Gefolgsleute",
"allies": "Verbündete",
"enemies": "Feinde",
"Oaths": "Eide",
"personnal-history": "Persönliche Geschichte",
"notable-npc": "Bedeutende NPCs",
"realm": "Reich:",
"liege": "Liege:",
"appearance": "Appearance:",
"disposition": "Disposition (Deceive/Persuade):",
"mine": "Mine:",
"affectionate": "Affectionate (-2/+5)",
"friendly": "Friendly (-1/+3)",
"amiable": "Amiable (0/+1)",
"indifferent": "Indifferent (0/0)",
"dislike": "Dislike (+1/-2)",
"unfriendly": "Unfriendly (+2/-4)",
"malicious": "Malicious (+3/-6)",
"theirs": "Theirs:",
"appearance": "Aussehen:",
"disposition": "Gesinnung (Täuschung/Überredung)",
"mine": "Meine:",
"affectionate": "Zugeneigt (-2/+5)",
"friendly": "Freundlich (-1/+3)",
"amiable": "Wohlgesinnt (0/+1)",
"indifferent": "Gleichgültig (0/0)",
"dislike": "Ablehnend (+1/-2)",
"unfriendly": "Unfreundlich (+2/-4)",
"malicious": "Bösartig (+3/-6)",
"theirs": "Deren:",
"notes": "Notizen:",
"unit-type": "Unit Type:",
"archers": "Archers",
"cavalery": "Cavalery",
"criminals": "Criminals",
"crusaders": "Crusaders",
"engineers": "Engineers",
"garrison": "Garrison",
"guerillas": "Guerillas",
"infantry": "Infantry",
"mercenaries": "Mercenaries",
"peasant-levies": "Peasant Levies",
"personal-guards": "Personal Guards",
"raiders": "Raiders",
"sailors": "Sailors",
"scouts": "Scouts",
"special": "Speziell",
"support": "Support",
"warship": "Warship",
"green": "Green",
"trained": "Gelernt",
"veteran": "Veteran",
"unit-type": "Einheitstyp:",
"archers": "Bogenschützen",
"cavalery": "Kavallerie",
"criminals": "Verbrecher",
"crusaders": "Kreuzzügler",
"engineers": "Ingenieure",
"garrison": "Garnison",
"guerillas": "Guerillakämpfer",
"infantry": "Infanterie",
"mercenaries": "Söldner",
"peasant-levies": "Bauern",
"personal-guards": "Leibgarde",
"raiders": "Plünderer",
"sailors": "Seeleute ",
"scouts": "Späher",
"special": "Spezialeinheit",
"support": "Unterstützungstrupp",
"warship": "Kriegsschiffe",
"green": "Unerfahren",
"trained": "Geübt",
"veteran": "Erfahren",
"elite": "Elite",
"armystatus": "Status :",
"organize": "Organize",
"disorganize": "Disorganize",
"rally": "Rally",
"routed": "Routed",
"abilities": "Abilities",
"discipline": "Discipline",
"fight-damage": "Fight Damage",
"marksmanship-damage": "Marksman Dam.",
"organize": "Organisiert",
"disorganize": "Desorganisiert",
"rally": "Sammeln",
"routed": "Zerstreut",
"abilities": "Fähigkeiten",
"discipline": "Disziplin",
"fight-damage": "Kampf Schaden",
"marksmanship-damage": "Schiesskunst Schaden",
"mvt": "Mvt",
"fight-dam-mod": "Fight Dam. Mod.",
"marksmanship-dam-mod": "Marksman Dam. Mod.",
"defense-mod": "Defense Mod.",
"available": "Available:",
"defense-sante": "DEFENSE & HEALTH",
"malus-disorganize": "Malus Disorganized",
"armyhero": "Hero :",
"nohero": "Without Hero",
"hero": "With Hero"
"fight-dam-mod": "Kampf Schadens Mod",
"marksmanship-dam-mod": "Schiesskunst Schadens Mod",
"defense-mod": "Verteidigungs Mod.",
"available": "Verfügbar:",
"defense-sante": "Verteidiegung & Gesundheit",
"malus-disorganize": "Desorganisiert Mali",
"armyhero": "Held :",
"nohero": "Ohne Held",
"hero": "Mit Held"
}
+3433 -1011
View File
File diff suppressed because one or more lines are too long
+49 -47
View File
@@ -239,30 +239,6 @@ input[type="number"].sheet-nobut::-webkit-inner-spin-button {
-webkit-appearance: none;
}
.charsheet input.sheet-invisible,
.charsheet input.sheet-version-large,
.charsheet input.sheet-version-right {
border: none;
box-shadow: none;
background-color: transparent;
display: inline;
cursor: text;
}
.charsheet input.sheet-version-right {
float: right;
text-align: right;
width: 80px;
}
.charsheet input.sheet-version-large {
font-size:24px;
font-weight: 800;
color: black;
padding: 0;
margin-bottom: 6px;
}
input.sheet-arrow
{
float: left;
@@ -911,7 +887,7 @@ button {
.sheet-rolltemplate-2Esave .sheet-ignore-inlineroll .inlinerollresult,
.sheet-rolltemplate-2Epsionic .sheet-ignore-inlineroll .inlinerollresult {
background-color: inherit;
border: inherit;
border: none;
color: #000000;
padding: 0;
font-weight: inherit;
@@ -1304,22 +1280,6 @@ button {
background: #512E5F;
}
.sheet-rolltemplate-2Esave .sheet-template-body td,
.sheet-rolltemplate-2Echeck .sheet-template-body td,
.sheet-rolltemplate-2Einversecheck .sheet-template-body td,
.sheet-rolltemplate-2Egrenademiss .sheet-template-body td {
font-size: 10pt;
font-weight: bold;
text-align: center;
border: none;
}
.sheet-rolltemplate-2Esave td.sheet-check-c1,
.sheet-rolltemplate-2Echeck td.sheet-check-c1,
.sheet-rolltemplate-2Einversecheck td.sheet-check-c1,
.sheet-rolltemplate-2Egrenademiss td.sheet-check-c1 {
width: 50%;
}
/*#endregion*/
/*#region Styles for the 2Egrenade Template /*/
.sheet-rolltemplate-2Egrenademiss .sheet-template-head {
@@ -1327,6 +1287,8 @@ button {
}
.sheet-rolltemplate-2Egrenademiss td.sheet-grenade-c1 {
font-size: 9pt;
font-weight: bold;
text-align: center;
}
.sheet-rolltemplate-2Egrenademiss .sheet-hit-text {
font-size: 10pt;
@@ -1361,21 +1323,47 @@ button {
}
/*#endregion*/
/*#region Styles for the 2Epsionic Template*/
.sheet-rolltemplate-2Epsionic td.sheet-check-c1 {
width: 50%;
/*#region Roll checks Template*/
.sheet-rolltemplate-2Espell tr.sheet-check,
.sheet-rolltemplate-2Esave tr.sheet-check,
.sheet-rolltemplate-2Echeck tr.sheet-check,
.sheet-rolltemplate-2Einversecheck tr.sheet-check,
.sheet-rolltemplate-2Egrenademiss tr.sheet-check,
.sheet-rolltemplate-2Epsionic tr.sheet-check {
border: none;
}
.sheet-rolltemplate-2Espell tr.sheet-check td,
.sheet-rolltemplate-2Esave tr.sheet-check td,
.sheet-rolltemplate-2Echeck tr.sheet-check td,
.sheet-rolltemplate-2Einversecheck tr.sheet-check td,
.sheet-rolltemplate-2Egrenademiss tr.sheet-check td,
.sheet-rolltemplate-2Epsionic tr.sheet-check td {
font-size: 10pt;
font-weight: bold;
text-align: center;
border: none;
}
.sheet-rolltemplate-2Epsionic tr.sheet-border-none td {
border: none;
.sheet-rolltemplate-2Espell tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Esave tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Echeck tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Einversecheck tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Egrenademiss tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Epsionic tr.sheet-check td:nth-child(odd) {
width: 50%;
}
.sheet-rolltemplate-2Espell tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Esave tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Echeck tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Einversecheck tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Egrenademiss tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Epsionic tr.sheet-check td:nth-child(even) {
width: 1%;
}
/*#endregion*/
/*#region Success, Failure, Info sections*/
.sheet-rolltemplate-2Eattack .sheet-template-body .sheet-template-result,
.sheet-rolltemplate-2Espell .sheet-template-body .sheet-template-result,
.sheet-rolltemplate-2Esave .sheet-template-body .sheet-template-result,
.sheet-rolltemplate-2Echeck .sheet-template-body .sheet-template-result,
.sheet-rolltemplate-2Einversecheck .sheet-template-body .sheet-template-result,
@@ -1388,6 +1376,7 @@ button {
color: #ffffff;
}
.sheet-rolltemplate-2Eattack .sheet-template-body .sheet-template-result .inlinerollresult,
.sheet-rolltemplate-2Espell .sheet-template-body .sheet-template-result .inlinerollresult,
.sheet-rolltemplate-2Esave .sheet-template-body .sheet-template-result .inlinerollresult,
.sheet-rolltemplate-2Echeck .sheet-template-body .sheet-template-result .inlinerollresult,
.sheet-rolltemplate-2Einversecheck .sheet-template-body .sheet-template-result .inlinerollresult,
@@ -1397,6 +1386,7 @@ button {
border: none;
}
.sheet-rolltemplate-2Eattack .sheet-template-body .sheet-template-result span.sheet-template-result-description,
.sheet-rolltemplate-2Espell .sheet-template-body .sheet-template-result span.sheet-template-result-description,
.sheet-rolltemplate-2Esave .sheet-template-body .sheet-template-result span.sheet-template-result-description,
.sheet-rolltemplate-2Echeck .sheet-template-body .sheet-template-result span.sheet-template-result-description,
.sheet-rolltemplate-2Einversecheck .sheet-template-body .sheet-template-result span.sheet-template-result-description,
@@ -1407,6 +1397,7 @@ button {
padding: 2px;
}
.sheet-rolltemplate-2Eattack .sheet-template-success,
.sheet-rolltemplate-2Espell .sheet-template-success,
.sheet-rolltemplate-2Esave .sheet-template-success,
.sheet-rolltemplate-2Echeck .sheet-template-success,
.sheet-rolltemplate-2Einversecheck .sheet-template-success,
@@ -1415,6 +1406,7 @@ button {
background-color: #093a01;
}
.sheet-rolltemplate-2Eattack .sheet-template-failure,
.sheet-rolltemplate-2Espell .sheet-template-failure,
.sheet-rolltemplate-2Esave .sheet-template-failure,
.sheet-rolltemplate-2Echeck .sheet-template-failure,
.sheet-rolltemplate-2Einversecheck .sheet-template-failure,
@@ -1423,6 +1415,7 @@ button {
background-color: #a01616;
}
.sheet-rolltemplate-2Eattack .sheet-template-info,
.sheet-rolltemplate-2Espell .sheet-template-info,
.sheet-rolltemplate-2Esave .sheet-template-info,
.sheet-rolltemplate-2Echeck .sheet-template-info,
.sheet-rolltemplate-2Einversecheck .sheet-template-info,
@@ -1672,6 +1665,15 @@ table.sheet-padding-right-column2 td:nth-child(2) {
font-weight: bold;
}
.sheet-table-slim-first-column td:first-child {
width: 1px;
}
.sheet-table-sub-ability-score tr:nth-child(3n) button:first-child,
.sheet-table-sub-ability-score tr:nth-child(3n-1) button:first-child {
margin-left: 10px;
}
.sheet-note {
line-height:1em;
font-family: Arial, sans-serif;
@@ -1784,7 +1786,7 @@ input.sheet-show-spell-details:checked ~ div.sheet-spell-details {
/* Overwrite Roll20 base styling */
details > summary:first-of-type {
display: revert;
display: list-item;
}
/* Show hide styling */
+30 -24
View File
@@ -7,30 +7,32 @@ const pugFolder = path.join(sourceFolder, 'pug');
const htmlFolder = path.join(sourceFolder, 'html', 'components');
const miscFolder = path.join(sourceFolder, 'misc');
const booksPriority = [
'PHB',
'The Complete Fighter\'s Handbook',
'The Complete Thief\'s Handbook',
'The Complete Priest\'s Handbook',
'The Complete Wizard\'s Handbook',
'The Complete Psionics Handbook',
'Tome of Magic',
'Arms and Equipment Guide',
'The Complete Book of Dwarves',
'The Complete Bard\'s Handbook',
'The Complete Book of Elves',
'The Complete Book of Humanoids',
'The Complete Ranger\'s Handbook',
'The Complete Paladin\'s Handbook',
'The Complete Druid\'s Handbook',
'The Complete Barbarian\'s Handbook',
'The Complete Book of Necromancers',
'The Complete Ninja\'s Handbook',
'Player\'s Option: Combat & Tactics',
'Player\'s Option: Skills & Powers',
'Player\'s Option: Spells & Magic',
{book: 'PHB', print: 'First Printing May 2013'},
{book: 'The Complete Fighter\'s Handbook', print: '11th Printing, May 1996'},
{book: 'The Complete Thief\'s Handbook', print: 'November 1993'},
{book: 'The Complete Priest\'s Handbook', print: 'Seventh printing, October 1996'},
{book: 'The Complete Wizard\'s Handbook', print: '10th printing, March 1996'},
{book: 'The Complete Psionics Handbook', print: 'Ninth printing: October 1996'},
{book: 'Tome of Magic', print: 'Seventh Printing: March, 1996'},
{book: 'Arms and Equipment Guide', print: 'Fifth Printing: January 1994'},
{book: 'The Complete Book of Dwarves', print: 'November 1993'},
{book: 'The Complete Bard\'s Handbook', print: 'Fourth printing, November 1994'},
{book: 'The Complete Book of Elves', print: ''},
{book: 'The Complete Book of Humanoids', print: 'Sixth printing, March 1999'},
{book: 'The Complete Ranger\'s Handbook', print: 'Fifth printing, July 1995'},
{book: 'The Complete Paladin\'s Handbook', print: ''},
{book: 'The Complete Druid\'s Handbook', print: ''},
{book: 'The Complete Barbarian\'s Handbook', print: ''},
{book: 'The Complete Book of Necromancers', print: ''},
{book: 'The Complete Ninja\'s Handbook', print: '2nd printing, March 1996'},
{book: 'Player\'s Option: Combat & Tactics', print: ''},
{book: 'Player\'s Option: Skills & Powers', print: ''},
{book: 'Player\'s Option: Spells & Magic', print: ''},
];
let sortOrder = booksPriority.map(bookPriority => bookPriority.book)
function bookShorthand(books) {
return books.map(b => b.replace('The Complete', '')
return books.sort((x,y) => sortOrder.indexOf(x) - sortOrder.indexOf(y))
.map(b => b.replace('The Complete', '')
.replace('Book of', '')
.replace('Handbook', '')
.replace('Player\'s Option:','')
@@ -54,15 +56,19 @@ spellsJs.forEach(jsFile => {
html += pug.renderFile(path.join(pugFolder, 'spellsDatalists.pug'), {pretty: true, data: spells});
if (jsFile === 'wizardSpells.js') {
let schoolTable = pug.renderFile(path.join(pugFolder, 'schoolsOverview.pug'), {pretty: true, data: spells});
let schoolTable = pug.renderFile(path.join(pugFolder, 'schoolsOverview.pug'), {pretty: true, data: spells, booksPriority});
fs.writeFileSync(path.join(miscFolder, 'schools-overview.html'), schoolTable);
}
if (jsFile === 'priestSpells.js') {
let sphereTable = pug.renderFile(path.join(pugFolder, 'spheresOverview.pug'), {pretty: true, data: spells});
let sphereTable = pug.renderFile(path.join(pugFolder, 'spheresOverview.pug'), {pretty: true, data: spells, booksPriority});
fs.writeFileSync(path.join(miscFolder, 'spheres-overview.html'), sphereTable);
}
});
const wizardSpells = require(path.join(jsFolder, 'wizardSpells.js'));
const priestSpells = require(path.join(jsFolder, 'priestSpells.js'));
html += pug.renderFile(path.join(pugFolder, 'spellScrollsDatalists.pug'), {pretty: true, wizardSpells, priestSpells});
const psionicCorePowers = require(path.join(jsFolder, 'psionicPowers.js'));
html += pug.renderFile(path.join(pugFolder, 'psionicCorePowerDatalists.pug'), {pretty: true, data: psionicCorePowers});
+1 -1
View File
@@ -39,7 +39,7 @@ function CombineRecursive([String[]] $inputContent) {
$fileName = $split[1]
$arguments = $split[2]
$file = Get-ChildItem -Path $sourceFolder -Filter $fileName -Recurse
$fileContent = Get-Content -Path $file.FullName
$fileContent = @(Get-Content -Path $file.FullName)
$replaceDic = CreateReplaceDictionary($arguments)
+10 -25
View File
@@ -239,30 +239,6 @@ input[type="number"].sheet-nobut::-webkit-inner-spin-button {
-webkit-appearance: none;
}
.charsheet input.sheet-invisible,
.charsheet input.sheet-version-large,
.charsheet input.sheet-version-right {
border: none;
box-shadow: none;
background-color: transparent;
display: inline;
cursor: text;
}
.charsheet input.sheet-version-right {
float: right;
text-align: right;
width: 80px;
}
.charsheet input.sheet-version-large {
font-size:24px;
font-weight: 800;
color: black;
padding: 0;
margin-bottom: 6px;
}
input.sheet-arrow
{
float: left;
@@ -995,6 +971,15 @@ table.sheet-padding-right-column2 td:nth-child(2) {
font-weight: bold;
}
.sheet-table-slim-first-column td:first-child {
width: 1px;
}
.sheet-table-sub-ability-score tr:nth-child(3n) button:first-child,
.sheet-table-sub-ability-score tr:nth-child(3n-1) button:first-child {
margin-left: 10px;
}
.sheet-note {
line-height:1em;
font-family: Arial, sans-serif;
@@ -1107,7 +1092,7 @@ input.sheet-show-spell-details:checked ~ div.sheet-spell-details {
/* Overwrite Roll20 base styling */
details > summary:first-of-type {
display: revert;
display: list-item;
}
/* Show hide styling */
+39 -22
View File
@@ -14,7 +14,7 @@
.sheet-rolltemplate-2Esave .sheet-ignore-inlineroll .inlinerollresult,
.sheet-rolltemplate-2Epsionic .sheet-ignore-inlineroll .inlinerollresult {
background-color: inherit;
border: inherit;
border: none;
color: #000000;
padding: 0;
font-weight: inherit;
@@ -407,22 +407,6 @@
background: #512E5F;
}
.sheet-rolltemplate-2Esave .sheet-template-body td,
.sheet-rolltemplate-2Echeck .sheet-template-body td,
.sheet-rolltemplate-2Einversecheck .sheet-template-body td,
.sheet-rolltemplate-2Egrenademiss .sheet-template-body td {
font-size: 10pt;
font-weight: bold;
text-align: center;
border: none;
}
.sheet-rolltemplate-2Esave td.sheet-check-c1,
.sheet-rolltemplate-2Echeck td.sheet-check-c1,
.sheet-rolltemplate-2Einversecheck td.sheet-check-c1,
.sheet-rolltemplate-2Egrenademiss td.sheet-check-c1 {
width: 50%;
}
/*#endregion*/
/*#region Styles for the 2Egrenade Template /*/
.sheet-rolltemplate-2Egrenademiss .sheet-template-head {
@@ -430,6 +414,8 @@
}
.sheet-rolltemplate-2Egrenademiss td.sheet-grenade-c1 {
font-size: 9pt;
font-weight: bold;
text-align: center;
}
.sheet-rolltemplate-2Egrenademiss .sheet-hit-text {
font-size: 10pt;
@@ -464,21 +450,47 @@
}
/*#endregion*/
/*#region Styles for the 2Epsionic Template*/
.sheet-rolltemplate-2Epsionic td.sheet-check-c1 {
width: 50%;
/*#region Roll checks Template*/
.sheet-rolltemplate-2Espell tr.sheet-check,
.sheet-rolltemplate-2Esave tr.sheet-check,
.sheet-rolltemplate-2Echeck tr.sheet-check,
.sheet-rolltemplate-2Einversecheck tr.sheet-check,
.sheet-rolltemplate-2Egrenademiss tr.sheet-check,
.sheet-rolltemplate-2Epsionic tr.sheet-check {
border: none;
}
.sheet-rolltemplate-2Espell tr.sheet-check td,
.sheet-rolltemplate-2Esave tr.sheet-check td,
.sheet-rolltemplate-2Echeck tr.sheet-check td,
.sheet-rolltemplate-2Einversecheck tr.sheet-check td,
.sheet-rolltemplate-2Egrenademiss tr.sheet-check td,
.sheet-rolltemplate-2Epsionic tr.sheet-check td {
font-size: 10pt;
font-weight: bold;
text-align: center;
border: none;
}
.sheet-rolltemplate-2Epsionic tr.sheet-border-none td {
border: none;
.sheet-rolltemplate-2Espell tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Esave tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Echeck tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Einversecheck tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Egrenademiss tr.sheet-check td:nth-child(odd),
.sheet-rolltemplate-2Epsionic tr.sheet-check td:nth-child(odd) {
width: 50%;
}
.sheet-rolltemplate-2Espell tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Esave tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Echeck tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Einversecheck tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Egrenademiss tr.sheet-check td:nth-child(even),
.sheet-rolltemplate-2Epsionic tr.sheet-check td:nth-child(even) {
width: 1%;
}
/*#endregion*/
/*#region Success, Failure, Info sections*/
.sheet-rolltemplate-2Eattack .sheet-template-body .sheet-template-result,
.sheet-rolltemplate-2Espell .sheet-template-body .sheet-template-result,
.sheet-rolltemplate-2Esave .sheet-template-body .sheet-template-result,
.sheet-rolltemplate-2Echeck .sheet-template-body .sheet-template-result,
.sheet-rolltemplate-2Einversecheck .sheet-template-body .sheet-template-result,
@@ -491,6 +503,7 @@
color: #ffffff;
}
.sheet-rolltemplate-2Eattack .sheet-template-body .sheet-template-result .inlinerollresult,
.sheet-rolltemplate-2Espell .sheet-template-body .sheet-template-result .inlinerollresult,
.sheet-rolltemplate-2Esave .sheet-template-body .sheet-template-result .inlinerollresult,
.sheet-rolltemplate-2Echeck .sheet-template-body .sheet-template-result .inlinerollresult,
.sheet-rolltemplate-2Einversecheck .sheet-template-body .sheet-template-result .inlinerollresult,
@@ -500,6 +513,7 @@
border: none;
}
.sheet-rolltemplate-2Eattack .sheet-template-body .sheet-template-result span.sheet-template-result-description,
.sheet-rolltemplate-2Espell .sheet-template-body .sheet-template-result span.sheet-template-result-description,
.sheet-rolltemplate-2Esave .sheet-template-body .sheet-template-result span.sheet-template-result-description,
.sheet-rolltemplate-2Echeck .sheet-template-body .sheet-template-result span.sheet-template-result-description,
.sheet-rolltemplate-2Einversecheck .sheet-template-body .sheet-template-result span.sheet-template-result-description,
@@ -510,6 +524,7 @@
padding: 2px;
}
.sheet-rolltemplate-2Eattack .sheet-template-success,
.sheet-rolltemplate-2Espell .sheet-template-success,
.sheet-rolltemplate-2Esave .sheet-template-success,
.sheet-rolltemplate-2Echeck .sheet-template-success,
.sheet-rolltemplate-2Einversecheck .sheet-template-success,
@@ -518,6 +533,7 @@
background-color: #093a01;
}
.sheet-rolltemplate-2Eattack .sheet-template-failure,
.sheet-rolltemplate-2Espell .sheet-template-failure,
.sheet-rolltemplate-2Esave .sheet-template-failure,
.sheet-rolltemplate-2Echeck .sheet-template-failure,
.sheet-rolltemplate-2Einversecheck .sheet-template-failure,
@@ -526,6 +542,7 @@
background-color: #a01616;
}
.sheet-rolltemplate-2Eattack .sheet-template-info,
.sheet-rolltemplate-2Espell .sheet-template-info,
.sheet-rolltemplate-2Esave .sheet-template-info,
.sheet-rolltemplate-2Echeck .sheet-template-info,
.sheet-rolltemplate-2Einversecheck .sheet-template-info,
+161 -42
View File
@@ -100,56 +100,175 @@ Priests. DMG p. 121
Druids
- Druids with 3 proficiency slots in the Herbalism Nonweapon proficiency can create magical herbal brews. The Complete Druid's Handbook p. 103
// minimum double devotions compared to sciences
// same ability can be relearned instead of a new ability (maybe track "slots" put into single ability)
Player's Handbook (First Printing May 2013)
Wizard
Sepia Snake Sigil - Fixed broken tab character
Spectral Force - Fixed broken area of effect calculation
Water Breathing - Fixed broken calculation preventing the spell from printing
Wind Wall - Fixed broken calculation preventing the spell from printing
Wraithform - Fixed broken calculation preventing the spell from printing
Fire Shield - Fixed broken calculation preventing the spell from printing
Monster Summoning II - Fixed broken calculation preventing the spell from printing
Wall of Fire - Fixed area of effect calculation to calculate the number of sheets. This reduces the overall area of effect by an order of magnitude
Summon shadow - Fixed broken calculation preventing the spell from printing
Chaos - Fixed broken tab character
Seeming - Fixed broken calculation preventing the spell from printing
// base PSP: 20 + (wiz-15*2) + (int-15) + (con-15) (only positive numbers, kh1)
// PSP Advancement: level-1 * (10 + (wiz-15)kl1)
Priest
Wall of Fire - Fixed area of effect calculation to calculate the number of sheets. This reduces the overall area of effect by an order of magnitude
// defense modes does not require Telepathic disciplines, learned at 1,3,5,7,9. 1 + (level-1/2) round down
// defense modes do not count towards the max number of powers
// defense modes are counted towards the number of disciplines in Telepathic... maybe?
Complete Fighter's Handbook (11th Printing, May 1996)
One / two handed javelin changed to medium size - Book update
One / two handed stone javelin changed to medium size - Book update
// Thac0 as rogues
// saving throws unique, +2 vs enchantment/charm spells
Complete Wizard's Handbook (10th printing, March 1996)
Jitte change size to small - typo
Shuriken changed ROF to 2/1 - book update
Detect Disease - scaling no longer goes above 100% chance
Choke - fixed whitespace
Detect life - fixed range scaling and missing material components - typo
Hovering skull - added M for material component - book update
Pain Touch - changed school to Necromancy - book update
Force Shaprechange - changed damage when save is made - book update
Bone club - Updated effect about clubs not being available to wizards - Book update
Wind breath - Updated how damage is displayed
Force Shapechange - Updated casting speed to 5 - Book update
Force Shapechange - Updated damage to always be 3d10 - Book update
// Psionic power options: Reduce power score based on armor
Complete Psionics Handbook (Ninth printing: October 1996)
Added the Power Score as written in the book to the template output
Fixed whitespace when a power has 1 round of prep to say "1 round" instead of "1round"
All-round vision - Fixed linebreak mid-sentence
Clairvoyance - Fixed linebreak mid-sentence
Precognition - Added 20 effect to be displayed by the template
Danger Sense - Added 1 effect to be displayed by the template
Know Direction - Fixed linebreak mid-sentence
Spirit Sense - Corrected description to state that it sense noncorporeal undead - Book update
Create Object - Fixed table in effect text
Detonate - Fixed linebreak mid-sentence
Animate Object - Fixed table header - Book update
Create Sound - Power Score modifier changed to -2 from -7 - Book update
Inertial Barrier - Fixed linebreak mid-sentence
Molecular Agitation - Added that only magical items gets a +10 modifier - Book update
Molecular Agitation - Corrected the displayed damage to match the effect text - typo
Animal Affinity - Added missing linebreak - typo
Flesh Armor - Added clarification that the armor is nonmagical - Book Update
Flesh Armor - Added clarification that this power works with rings of protection - Book Update
Probability Travel - changed reference to the Planescape accessory - Book update
Probability Travel - Fixed linebreak mid-sentence
Summon Planar Creature - Updated book references - Book update
Teleport - Fixed table so that PSP cost starts at 10 PSP - Book update
Astral Projection - changed reference to the Planescape accessory - Book update
Dream Travel - Calculate the aount of PSP used based on passengers
Probe - Removed Mindlink as a prerequisite
Contact - Added missing bold styling to text
Empathy - Added missing Power Score effect
Appraise - Fixed linebreak mid-sentence
Ultrablast - Fixed linebreak mid-sentence
Intensify - Made popup options more readable
Psychic Drain - Updated psionic potential description - Book update
Wrench - Fixed page number - typo
// weapon Proficiencies: 2 (5, 10, 15, ...) -4 penalty
// nonweapon prof: 3 (3,6,9, ...)
Tome of Magic (Seventh Printing: March, 1996)
Maximilian's Earthen Grasp - School changed to Alteration - Book update
There/Not There - Fixed page number
Turn Pebble to Boulder - Fixed reverse spell calculation
Khazid's Procurement - Fixed presentation of table
Lower Resistance - Fixed spelling error in turn
Waveform - Fixed area of effect calculations
Bloodstone's Spectral Steed - Added number of passengers calculation
Acid Storm - Added how acid damage can be healed - Typo
Airboat - Changed movement rate from mile per hour calculation to movement rate 21 - Book update
Gunther's Kaleidoscopic Strike - Fixed broken calculation
Homunculus Shield - Fixed hp calculations - Typo
Elemental Aura - Greatly improve the presentation of the table data
Estate Transference - Updated area of effect from 1000 square feet to 1 square mile per level - Book update
Wail of the Banshee - Fixed linebreak mid-sentence and fixed missing description text
Wildfire - Fixed page number - type
Analyze Balance - Fixed calculation to no longer go above 100%
Personal Reading - Greatly improve the presentation of the table data
Emotion Perception - Added level scaling for area of effect. Minimum 1 unit as the spell would do nothing before level 5 which would make no sense.
Emotion Control - Added level scaling for saving throw bonus
Random Causality - Corrected Duration and Casting time as per - Sage Advice #247 update
Rigid Thinking - Corrected "in capable" to "incapable"
Unearthly Choir - Added damage for quick reference
Defensive Harmony - Fixed area of effect calculation
Probability Control - Fixed modification calculation from 5% per level to 5% per 5 levels.
Age Object - Fixed broken level scaling calculation
Barrier of Retention - Corrected area of effect calculation
Time Pool - Improve presentation of bullet point list
Crushing Walls - Fixed area of effect from square feet to foot square. This increases the area of effect by an order of magnitude
The Great Circle - Added damage overview
Spiritual Wrath - Added self damage to the caster, to the damage overview
Mind Tracker - Added material components
Uncontrolled Weather - No longer rolls area of effect, as it should be done by the DM
Circle of Sunmotes - Added damage type
Revelation - Fixed linebreak mid-sentence
Sphere of Security - Fixed calculation that prevented spell from printing
Spiral of Degeneration - Added missing bullet point in effect description - Typo
Undead Plague - Removed calculated level scaling as it is unclear how it should be calculated
// defense modes are available, does not require telepathic to all and is learned at
// attack modes are learned like any other power
// attack vs defense mode table
Complete Book of Dwarves (November 1993)
Lip Reading (Dwarf) - Modifier changed from 0 to -2 - Typo
// dark sun campaign box set (1991) says above 20 removes 20 negative effect and power score effect.
// dark sun Will and the Way (1994) if power score is 20 or above -> reduce to 19, and 20 is normal failure
// enhanced powers have a range for power scores, and remove the minimum effect of 1
Complete Book of Humanoids (Sixth printing, March 1999)
Crowd Working - Version added from this book with modifier of +2
Naginata - S/M damage changed to 1d8. L damage changed to 1d10 - Typo
Finhead broadsword - Added new weapon - Book update
Complete Ranger's Handbook (Fifth printing, July 1995)
Cartography - Changed ability to score to Int and modifier to -2 - Typo
// Telepathic defense modes have no prerequisites: intellect fortress, mental barrier, mind blank, thought shield, tower of iron will
//
// Ego Whip has contact as a prerequisite
//
// p. 75 The heading for the "Fate Link" power is missing
//
// Mindlink
//
// Mindlink is not a prerequisite for the following telepathic devotions: empathy, ESP, identity penetration, incarnation awareness, psychic impersonation, send thoughts.
//
// Mindlink has never been a prerequisite for: ejection, conceal thoughts, contact, life detection, mind bar, psionic blast, and psychic messenger
//
// Mindlink is a prerequisite for all other telepathic powers.
//
// All references to the "telepathy" power should be to the "mindlink" power.
//
// Mind thrust has contact as a prerequisite.
//
// Psionic blast is a science.
//
// Psychic crush is a devotion.
//
// Psychokinesis: The following PK devotions do not require telekinesis as a prerequisite: animate shadow, control light, control sound, molecular agitation, soften, telekinesis.
Complete Druid's Handbook
Beastmask - Fixed page number - Typo
Animal Spy - Clarified that only wizard familiars can save vs. spell - Typo
Fortifying Stew - Added calculation for ounces of stew enchanted
Fortifying Stew - Added sheet authors's note to tell that calculations have been changed
Shape Wood - Fixed calculation for area of effect, adding together static and scaling part
Earthmaw - Added calculation for what hit dice the monster attacks as, and what its THAC0 is
Complete Barbarian's Handbook
Sign Language - Corrected ability score from Charisma to Dexterity - Typo
Jumping - Added Barbarian specific version
Tightrope Walking - Added Barbarian specific version
Tumbling - Added Barbarian specific version
Horde Summoning - Changed modifier from 0 to -2
Check: probe, psionic sense,
Complete Book of Necromancers
Animate Dead Animals - Fixed animated skeletons Hit dice from 1-4 to ¼ - Typo
Living Link - Limited number of senses calculation to 5.
Empathic Wound Transfer - Set amount of healing / self damage leave the caster at 1 hp, instead of 0, because at 0 you would be dead (if not using deaths door rule)
Transmute Bone to Steel - Fixed linebreak mid-sentence
Death Ward - Fixed page number
Spectral Senses - Change level scaling to follow priest levels instead of wizard levels
Resist Turning - Full of errors. More research needed
Death's Door - Fixed page number
Undead Alacrity - Change level scaling to follow priest levels instead of wizard levels
Plague Curse - Added calculation for how many lives the plague kills
Asphyxiate - Corrected damage to depend on Constitution check instead of saving throw
Complete Ninjas Handbook (2nd printing, March 1996)
Featherfoot - Swapped duration and casting time as increasing casting time with level did not make sense. This is highlighted with a sheet authors note
Fixed sling, Stone long range to 160 from 1600 yards - Typo
Fixed staff sling, stone long range to 90 yards from 200 yards - Typo
Improved Mirror Image - Removed incorrect quote character - typo
Chu-ko-nu - Change ammo size to medium - Typo
Light crossbow - Change ammo size to medium, and weapon size to small - Typo
Metsubishi (blinding powders) - Rate of fire changed to 1/3 - Typo
Bokken, Two-handed (wooden sword) - Changed S/M damage to 1d6 - Typo
Bokken, Two-handed (wooden sword) - Changed L damage to 1d3 - Typo
Default casting level for items:
Scrolls - typically one level higher than that required to cast the spell, never below 6th level - DMG p. 196 and Clarified in Dragon Magazine #248 Sage Advice
Rings - 12th level unless the power requires a higher level. In that case it functions at minimum level to use the magic. DMG p. 198
Rods - DMG: Not mentioned. 12th level or minimum level. FGaG p. 230
Staves - 8th level unless otherwise stated. DMG p. 207
Wands - 6th level unless otherwise stated. DMG p. 210
AD&D 2E Errata wayback machine
http://www.wizards.com/dnd/DnDPlayersHandbook2ndEditionErrata.asp
http://www.wizards.com/dnd/DnDDMGErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowersErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowers2ndErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowers3rdErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionCombatTacticsErrata.asp
+1 -1
View File
@@ -1,6 +1,6 @@
<div>
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/sheet-logo.png" style="max-height: 70px;" alt="AD&D Logo"/>
<input type="text" name="attr_version" class="sheet-version-right" readonly/>
<span style="float: right;" name="attr_version"></span>
</div>
<br>
insert_changelog.html
+9 -2
View File
@@ -1,10 +1,17 @@
<div aria-label="Announces changes to sheet">
<input type="checkbox" class="sheet-show-announcement" value="1" title="Show Announcements" name="attr_announcement"/><span></span><b style="color:red;" title="Show Announcements">Announcements</b>
<div class="sheet-announcement">
<h2 style="color: black;">Changes in <input type="text" name="attr_version" class="sheet-version-large" readonly/></h2>
<h2 style="color: black;">Changes in <span name="attr_version"></span></h2>
<div class="sheet-announce-items">
<ul style="font-style:italic">
<li>Fixed Magic resistance calculations for players and monsters so that a positive modifier makes the check easier to make</li>
<li>Fixed autofill for simple magic weapons where the bonus is inserted in a spot without a whitespace. Here are some examples that have been fixed:
<ul>
<li>"Short bow, Flight Arrow" -> "Short bow +1, Flight Arrow"</li>
<li>"Bastard sword, One-handed" -> "Bastard sword +2, One-handed"</li>
<li>"Katana, One-handed (samurai long sword)" -> "Katana +1, One-handed (samurai long sword)"</li>
<li>"Sling, Bullet" -> "Sling +1, Bullet"</li>
</ul>
</li>
</ul>
<hr>
<p>
@@ -0,0 +1,9 @@
<tr>
<td colspan="100" class="sheet-template-result sheet-template-#REPLACE0#">
#REPLACE1#
{{##REPLACE2#}}
<br>
<span class="sheet-template-result-description">{{#REPLACE2#}}</span>
{{/#REPLACE2#}}
</td>
</tr>
@@ -207,6 +207,10 @@
<option value="Kobold">Dwarf/Gnome</option>
<option value="Orc">Dwarf/Elf//Half-Elf/Halfling</option>
<option value="Common Burrowing mammals">Gnome</option>
<option value="Deep tongue (under-common)">Dwarf</option>
<option value="Drow">Dwarf</option>
<option value="Troll">Dwarf</option>
<option value="Ogre">Dwarf</option>
<option value="Druidic">Druid</option>
<option value="Centaurs">Druid</option>
<option value="Dryads">Druid</option>
@@ -233,6 +237,10 @@
<option value="Kobold"></option>
<option value="Orc"></option>
<option value="Common Burrowing mammals"></option>
<option value="Deep tongue (under-common)"></option>
<option value="Drow"></option>
<option value="Troll"></option>
<option value="Ogre"></option>
<option value="Druidic"></option>
<option value="Centaurs"></option>
<option value="Dryads"></option>
File diff suppressed because it is too large Load Diff
+122 -172
View File
@@ -86,26 +86,11 @@
<td><b>AC Hit</b></td>
</tr>
{{#rollWasCrit() ac_hit}}
<tr>
<td colspan="3" class="sheet-template-result sheet-template-success">
CRITICAL HIT!
<br>
{{#crit}}
<span class='sheet-template-result-description'>{{crit}}</span>
{{/crit}}
</td>
</tr>
insert_check-result.html_(success,CRITICAL HIT!,crit)
{{/rollWasCrit() ac_hit}}
{{#rollWasFumble() ac_hit}}
<tr>
<td colspan="3" class="sheet-template-result sheet-template-failure">
FUMBLE!
<br>
{{#fumble}}
<span class='sheet-template-result-description'>{{fumble}}</span>
{{/fumble}}
</td>
</tr>
insert_check-result.html_(failure,FUMBLE!,fumble)
{{/rollWasFumble() ac_hit}}
</table>
</div>
@@ -132,64 +117,73 @@
<div class="sheet-template-body">
<table>
<tr>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Range</span><br>{{range}}</td>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Components</span><br>{{components}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Range</span><br>{{range}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Components</span><br>{{components}}</td>
</tr>
<tr>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Duration</span><br>{{duration}}</td>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Casting Time</span><br>{{time}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Duration</span><br>{{duration}}</td>
<td class="sheet-spell-c1" colspan="3">
{{#scroll}}
<span class="sheet-spell-prop">Reading Time</span>
{{/scroll}}
{{^scroll}}
<span class="sheet-spell-prop">Casting Time</span>
{{/scroll}}
<br>
{{time}}
</td>
</tr>
<tr>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Area of Effect</span><br>{{aoe}}</td>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Saving Throw</span><br>{{save}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Area of Effect</span><br>{{aoe}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Saving Throw</span><br>{{save}}</td>
</tr>
{{#subtlety}}
{{#sensory}}
<tr>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Casting Subtlety</span><br>{{subtlety}}</td>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Sensory Signature</span><br>{{sensory}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Casting Subtlety</span><br>{{subtlety}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Sensory Signature</span><br>{{sensory}}</td>
</tr>
{{/sensory}}
{{/subtlety}}
{{#subtlety}}
{{^sensory}}
<tr>
<td class="sheet-spell-c1" colspan="2"><span class="sheet-spell-prop">Casting Subtlety</span><br>{{subtlety}}</td>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Casting Subtlety</span><br>{{subtlety}}</td>
</tr>
{{/sensory}}
{{/subtlety}}
{{^subtlety}}
{{#sensory}}
<tr>
<td class="sheet-spell-c1" colspan="2"><span class="sheet-spell-prop">Sensory Signature</span><br>{{sensory}}</td>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Sensory Signature</span><br>{{sensory}}</td>
</tr>
{{/sensory}}
{{/subtlety}}
{{#knockdown}}
{{#crit}}
<tr>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Knockdown</span><br>{{knockdown}}</td>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Critical Strikes</span><br>{{crit}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Knockdown</span><br>{{knockdown}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Critical Strikes</span><br>{{crit}}</td>
</tr>
{{/crit}}
{{/knockdown}}
{{#knockdown}}
{{^crit}}
<tr>
<td class="sheet-spell-c1" colspan="2"><span class="sheet-spell-prop">Knockdown</span><br>{{knockdown}}</td>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Knockdown</span><br>{{knockdown}}</td>
</tr>
{{/crit}}
{{/knockdown}}
{{^knockdown}}
{{#crit}}
<tr>
<td class="sheet-spell-c1" colspan="2"><span class="sheet-spell-prop">Critical Strikes</span><br>{{crit}}</td>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Critical Strikes</span><br>{{crit}}</td>
</tr>
{{/crit}}
{{/knockdown}}
{{#damage}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Damage: </span>
<td colspan="6" class="sheet-spell-c1"><span class="sheet-spell-prop">Damage: </span>
{{damage}}
{{#rollGreater() d2t 0}}{{d2}}{{/rollGreater() d2t 0}}
{{#rollGreater() d3t 0}}{{d3}}{{/rollGreater() d3t 0}}
@@ -208,19 +202,42 @@
{{/damage}}
{{#healing}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Healing: </span>{{healing}}</td>
<td colspan="6" class="sheet-spell-c1"><span class="sheet-spell-prop">Healing: </span>{{healing}}</td>
</tr>
{{/healing}}
{{#reference}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Reference: </span>{{reference}}</td>
<td colspan="6" class="sheet-spell-c1"><span class="sheet-spell-prop">Reference: </span>{{reference}}</td>
</tr>
{{/reference}}
{{#materials}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Spell Materials: </span>{{materials}}</td>
<td colspan="6" class="sheet-spell-c1"><span class="sheet-spell-prop">Spell Materials: </span>{{materials}}</td>
</tr>
{{/materials}}
{{#rollGreater() checktarget 0}}
<tr class="sheet-check">
<td colspan="2">Roll</td>
<td colspan="2"></td>
<td colspan="2">Failure Target</td>
</tr>
<tr class="sheet-check">
<td colspan="2">{{checkroll}}</td>
<td colspan="2">&#62;</td>
<td colspan="2">{{checktarget}}</td>
</tr>
{{#rollTotal() checkroll checktarget}}
insert_check-result.html_(failure,Failed!,fail)
{{/rollTotal() checkroll checktarget}}
{{#rollLess() checkroll checktarget}}
insert_check-result.html_(failure,Failed!,fail)
{{/rollLess() checkroll checktarget}}
{{#rollGreater() checkroll checktarget}}
insert_check-result.html_(success,Success!,success)
{{/rollGreater() checkroll checktarget}}
{{/rollGreater() checktarget 0}}
{{#effects}}
insert_rolltemplate-effects.html
{{/effects}}
@@ -273,30 +290,26 @@
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="sheet-check-c1">Roll</td>
<tr class="sheet-check">
<td>Roll</td>
<td></td>
<td class="sheet-check-c1">Target</td>
<td>Target</td>
</tr>
<tr>
<tr class="sheet-check">
<td>{{saveroll}}</td>
<td>&ge;</td>
<td>{{savetarget}}</td>
</tr>
{{#rollTotal() saveroll savetarget}}
<tr>
<td class="sheet-template-result sheet-template-success" colspan="3">Success!</td>
</tr>
insert_check-result.html_(success,Success!,success)
{{/rollTotal() saveroll savetarget}}
{{#rollGreater() saveroll savetarget}}
<tr>
<td class="sheet-template-result sheet-template-success" colspan="3">Success!</td>
</tr>
insert_check-result.html_(success,Success!,success)
{{/rollGreater() saveroll savetarget}}
{{#rollLess() saveroll savetarget}}
<tr>
<td class="sheet-template-result sheet-template-failure" colspan="3">Failed!</td>
</tr>
insert_check-result.html_(failure,Failed!,fail)
{{/rollLess() saveroll savetarget}}
</table>
</div>
@@ -317,30 +330,26 @@
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="sheet-check-c1">Roll</td>
<tr class="sheet-check">
<td>Roll</td>
<td></td>
<td class="sheet-check-c1">Target</td>
<td>Target</td>
</tr>
<tr>
<tr class="sheet-check">
<td>{{checkroll}}</td>
<td>&le;</td>
<td>{{checktarget}}</td>
</tr>
{{#rollTotal() checkroll checktarget}}
<tr>
<td class="sheet-template-result sheet-template-success" colspan="3">Success!</td>
</tr>
insert_check-result.html_(success,Success!,success)
{{/rollTotal() checkroll checktarget}}
{{#rollLess() checkroll checktarget}}
<tr>
<td class="sheet-template-result sheet-template-success" colspan="3">Success!</td>
</tr>
insert_check-result.html_(success,Success!,success)
{{/rollLess() checkroll checktarget}}
{{#rollGreater() checkroll checktarget}}
<tr>
<td class="sheet-template-result sheet-template-failure" colspan="3">Failed!</td>
</tr>
insert_check-result.html_(failure,Failed!,fail)
{{/rollGreater() checkroll checktarget}}
</table>
</div>
@@ -361,30 +370,26 @@
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="sheet-check-c1">Roll</td>
<tr class="sheet-check">
<td>Roll</td>
<td></td>
<td class="sheet-check-c1">Target</td>
<td>Target</td>
</tr>
<tr>
<tr class="sheet-check">
<td>{{checkroll}}</td>
<td>&#62;</td>
<td>{{checktarget}}</td>
</tr>
{{#rollTotal() checkroll checktarget}}
<tr>
<td class="sheet-template-result sheet-template-failure" colspan="3">Fail!</td>
</tr>
insert_check-result.html_(failure,Failed!,fail)
{{/rollTotal() checkroll checktarget}}
{{#rollLess() checkroll checktarget}}
<tr>
<td class="sheet-template-result sheet-template-failure" colspan="3">Fail!</td>
</tr>
insert_check-result.html_(failure,Failed!,fail)
{{/rollLess() checkroll checktarget}}
{{#rollGreater() checkroll checktarget}}
<tr>
<td class="sheet-template-result sheet-template-success" colspan="3">Success!</td>
</tr>
insert_check-result.html_(success,Success!,success)
{{/rollGreater() checkroll checktarget}}
</table>
</div>
@@ -396,7 +401,7 @@
<div class="sheet-template-head {{color}}">
<table>
<tr>
<th>Grenadelike miss for {{name}}</th>
<th>Grenade-like miss for {{name}}</th>
</tr>
<tr>
<td>
@@ -421,15 +426,9 @@
{{#rollTotal() direction 7}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/rolltemplate/scatter-diagram-7.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 7}}
{{#rollTotal() direction 8}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/rolltemplate/scatter-diagram-8.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 8}}
{{#rollTotal() direction 9}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/rolltemplate/scatter-diagram-9.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 9}}
{{#rollTotal() direction 10}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/rolltemplate/scatter-diagram-10.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 10}}
{{#rollBetween() direction 8 10}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/rolltemplate/scatter-diagram-8-10.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollBetween() direction 8 10}}
{{#^rollBetween() direction 1 10}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/rolltemplate/scatter-diagram.png" style="width: 100%;" alt="scatter diagram"/>
{{/^rollBetween() direction 1 10}}
@@ -441,37 +440,37 @@
<table>
<tr>
<td class="sheet-grenade-c1">Direction:</td>
<td>{{direction}}</td>
<td class="sheet-grenade-c1">{{direction}}</td>
</tr>
<tr>
<td class="sheet-grenade-c1">Distance ({{distancename}}):</td>
<td>{{distance}} feet</td>
<td class="sheet-grenade-c1">{{distance}} Feet</td>
</tr>
<tr>
<td class="sheet-grenade-c1 sheet-ignore-inlineroll">Direct Hit:<br>({{aoe}} Feet Diameter)</td>
{{#^rollBetween() computed::hit 0 0}}
{{#rollTotal() computed::hit 1}}
<td class="sheet-template-result sheet-template-success sheet-ignore-inlineroll">Hit!<br><span class="sheet-hit-text">{{hitdmg}}</span></td>
{{/^rollBetween() computed::hit 0 0}}
{{#rollBetween() computed::hit 0 0}}
{{/rollTotal() computed::hit 1}}
{{#rollTotal() computed::hit 0}}
<td class="sheet-template-result sheet-template-failure sheet-ignore-inlineroll">Miss!<br><span class="sheet-miss-text">{{hitdmg}}</span></td>
{{/rollBetween() computed::hit 0 0}}
{{/rollTotal() computed::hit 0}}
</tr>
<tr>
<td class="sheet-grenade-c1 sheet-ignore-inlineroll">Splash Hit:<br>({{aoesplash}} Feet Diameter)</td>
<!-- Direct hit is true -->
{{#^rollBetween() computed::hit 0 0}}
{{#rollTotal() computed::hit 1}}
<td class="sheet-template-result sheet-template-info sheet-ignore-inlineroll sheet-hit-text">Info<br><span class="sheet-miss-text">{{splashdmg}}</span></td>
{{/^rollBetween() computed::hit 0 0}}
{{/rollTotal() computed::hit 1}}
<!-- Direct hit is false -->
{{#rollBetween() computed::hit 0 0}}
{{#^rollBetween() computed::splash 0 0}}
{{#rollTotal() computed::hit 0}}
{{#rollTotal() computed::splash 1}}
<td class="sheet-template-result sheet-template-success sheet-ignore-inlineroll">Hit!<br><span class="sheet-hit-text">{{splashdmg}}</span></td>
{{/^rollBetween() computed::splash 0 0}}
{{#rollBetween() computed::splash 0 0}}
{{/rollTotal() computed::splash 1}}
{{#rollTotal() computed::splash 0}}
<td class="sheet-template-result sheet-template-failure sheet-ignore-inlineroll">Miss!<br><span class="sheet-miss-text">{{splashdmg}}</span></td>
{{/rollBetween() computed::splash 0 0}}
{{/rollBetween() computed::hit 0 0}}
{{/rollTotal() computed::splash 0}}
{{/rollTotal() computed::hit 0}}
</tr>
</table>
</div>
@@ -684,6 +683,11 @@
</div>
<div class="sheet-template-body">
<table>
{{#powerscoretext}}
<tr>
<td colspan="6" class="sheet-spell-c1"><span class="sheet-spell-prop">Power Score:</span> {{powerscoretext}}</td>
</tr>
{{/powerscoretext}}
{{#initial}}
{{#maintenance}}
<tr>
@@ -737,15 +741,15 @@
<td colspan="6" class="sheet-spell-c1"><span class="sheet-spell-prop">Reference: </span>{{reference}}</td>
</tr>
{{/reference}}
<tr class="sheet-border-none">
<td colspan="2" class="sheet-check-c1">Roll</td>
<td colspan="2" style="width: 1%;"></td>
<td colspan="2" class="sheet-check-c1">Power Score</td>
<tr class="sheet-check">
<td colspan="2">Roll</td>
<td colspan="2"></td>
<td colspan="2">Power Score</td>
</tr>
<tr class="sheet-border-none">
<td colspan="2" class="sheet-check-c1">{{powerroll}}</td>
<tr class="sheet-check">
<td colspan="2">{{powerroll}}</td>
<td colspan="2">&le;</td>
<td colspan="2" class="sheet-check-c1">
<td colspan="2">
{{computed::powerscore}}{{#^rollTotal() powerscore computed::powerscore}}&ast;{{/^rollTotal() powerscore computed::powerscore}}
{{#rollGreater() powerscoreenhanced powerscore}}
-
@@ -755,129 +759,75 @@
</tr>
{{#rollGreater() powerscoreenhanced powerscore}}
{{#rollBetween() powerroll computed::powerscore computed::powerscoreenhanced}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-success">
Power Score!
<br>
{{#powerscoreeffect}}
<span class='sheet-template-result-description'>{{powerscoreeffect}}</span>
{{/powerscoreeffect}}
</td>
</tr>
insert_check-result.html_(success,Power Score!,powerscoreeffect)
{{/rollBetween() powerroll computed::powerscore computed::powerscoreenhanced}}
{{#rollGreater() powerroll computed::powerscoreenhanced}}
{{#rollLess() powerscoreenhanced 20}}
{{#^rollTotal() powerroll 20}}
{{#^rollTotal() powerroll 1}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-failure">Failure!</td>
</tr>
insert_check-result.html_(failure,Failed!,fail)
{{/^rollTotal() powerroll 1}}
{{/^rollTotal() powerroll 20}}
{{/rollLess() powerscoreenhanced 20}}
{{#rollGreater() powerscoreenhanced 19}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-failure">Failure!</td>
</tr>
insert_check-result.html_(failure,Failed!,fail)
{{/rollGreater() powerscoreenhanced 19}}
{{/rollGreater() powerroll computed::powerscoreenhanced}}
{{#rollLess() powerscoreenhanced 20}}
{{#rollTotal() powerroll 20}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-failure">
20 Negative effect!
<br>
{{#20effect}}
<span class='sheet-template-result-description'>{{20effect}}</span>
{{/20effect}}
</td>
</tr>
insert_check-result.html_(failure,20 Negative effect!,20effect)
{{/rollTotal() powerroll 20}}
{{/rollLess() powerscoreenhanced 20}}
{{#rollTotal() powerroll 1}}
{{#rollLess() powerscoreenhanced 1}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-success">Success!</td>
</tr>
insert_check-result.html_(success,Success!,success)
{{/rollLess() powerscoreenhanced 1}}
{{/rollTotal() powerroll 1}}
{{#rollLess() powerroll computed::powerscore}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-success">Success!</td>
</tr>
insert_check-result.html_(success,Success!,success)
{{/rollLess() powerroll computed::powerscore}}
{{/rollGreater() powerscoreenhanced powerscore}}
<!--#region Regular Powers-->
{{#^rollGreater() powerscoreenhanced powerscore}}
{{#rollTotal() powerroll computed::powerscore}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-success">
Power Score!
<br>
{{#powerscoreeffect}}
<span class='sheet-template-result-description'>{{powerscoreeffect}}</span>
{{/powerscoreeffect}}
</td>
</tr>
insert_check-result.html_(success,Power Score!,powerscoreeffect)
{{/rollTotal() powerroll computed::powerscore}}
{{#rollGreater() powerroll computed::powerscore}}
{{#rollLess() powerscore 20}}
{{#^rollTotal() powerroll 20}}
{{#^rollTotal() powerroll 1}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-failure">Failure!</td>
</tr>
insert_check-result.html_(failure,Failed!,fail)
{{/^rollTotal() powerroll 1}}
{{/^rollTotal() powerroll 20}}
{{/rollLess() powerscore 20}}
{{#rollGreater() powerscore 19}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-failure">Failure!</td>
</tr>
insert_check-result.html_(failure,Failed!,fail)
{{/rollGreater() powerscore 19}}
{{/rollGreater() powerroll computed::powerscore}}
{{#rollTotal() powerroll 20}}
{{#rollLess() powerscore 20}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-failure">
20 Negative effect!
<br>
{{#20effect}}
<span class='sheet-template-result-description'>{{20effect}}</span>
{{/20effect}}
</td>
</tr>
insert_check-result.html_(failure,20 Negative effect!,20effect)
{{/rollLess() powerscore 20}}
{{/rollTotal() powerroll 20}}
{{#rollTotal() powerroll 1}}
{{#^rollTotal() powerscore 1}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-success">
Minimum Success!
<br>
{{#1effect}}
<span class='sheet-template-result-description'>{{1effect}}</span>
{{/1effect}}
</td>
</tr>
insert_check-result.html_(success,Minimum Success!,1effect)
{{/^rollTotal() powerscore 1}}
{{/rollTotal() powerroll 1}}
{{#rollLess() powerroll computed::powerscore}}
{{#^rollTotal() powerroll 1}}
<tr>
<td colspan="6" class="sheet-template-result sheet-template-success">Success!</td>
</tr>
insert_check-result.html_(success,Success!,success)
{{/^rollTotal() powerroll 1}}
{{/rollLess() powerroll computed::powerscore}}
{{/^rollGreater() powerscoreenhanced powerscore}}
@@ -35,7 +35,7 @@
</td>
<td>School:</td>
<td><input type="text" name="attr_spell-school" title="@{repeating_spells-#REPLACE0#_$X_spell-school}" class="sheet-spell-half" placeholder="School"></td>
<td>Compoenets:</td>
<td>Components:</td>
<td><input type="text" name="attr_spell-components" title="@{repeating_spells-#REPLACE0#_$X_spell-components}" class="sheet-spell-half" placeholder="Components"></td>
</tr>
<tr>
@@ -58,7 +58,7 @@
<td>Healing:</td>
<td><textarea type="text" name="attr_spell-healing" title="@{repeating_spells-#REPLACE0#_$X_spell-healing}" class="sheet-spell-half sheet-input-like" placeholder="[[Healing]]"></textarea></td>
<td>Materials:</td>
<td><input type="text" name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" class="sheet-spell-half" placeholder="Materials"></td>
<td><textarea type="text" name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" class="sheet-spell-half sheet-input-like" placeholder="Materials"></textarea></td>
<td>Book reference:</td>
<td><input type="text" name="attr_spell-reference" title="@{repeating_spells-#REPLACE0#_$X_spell-reference}" class="sheet-spell-half" placeholder="Book Reference"></td>
</tr>
@@ -82,7 +82,7 @@
<td>
<button type="roll" name="roll_spell-cast" title="%{repeating_spells-#REPLACE0#_$X_spell-cast}" value="#REPLACE1#@{spell-effect}" style="margin-bottom: 5px">Roll Spell Effects</button>
<br>
<button type="roll" name="roll_spell-template" title="%{repeating_spells-#REPLACE0#_$X_spell-template}" value="#REPLACE1#&{template:2Espell}{{title=@{spell-name}}}{{splevel=@{spell-level}}}{{school=@{spell-school}}}{{sphere=@{spell-sphere}}}{{components=@{spell-components}}}{{time=@{spell-cast-time}}}{{range=@{spell-range}}}{{duration=@{spell-duration}}}{{aoe=@{spell-aoe}}}{{save=@{spell-saving-throw}}}{{subtlety=@{spell-subtlety}}}{{sensory=@{spell-sensory}}}{{knockdown=@{spell-knockdown}}}{{crit=@{spell-crit-size}}}{{damage=@{spell-damage}}}{{damagetype=@{spell-damage-type}}}{{healing=@{spell-healing}}}{{reference=@{spell-reference}}}{{materials=@{spell-materials}}}{{effects=@{spell-effect}}}">Roll Template</button>
<button type="roll" name="roll_spell-template" title="%{repeating_spells-#REPLACE0#_$X_spell-template}" value="#REPLACE1#&{template:2Espell}{{title=@{spell-name}}}{{splevel=@{spell-level}}}{{school=@{spell-school}}}{{sphere=@{spell-sphere}}}{{components=@{spell-components}}}{{time=@{spell-cast-time}}}{{range=@{spell-range}}}{{duration=@{spell-duration}}}{{aoe=@{spell-aoe}}}{{save=@{spell-saving-throw}}}{{subtlety=@{spell-subtlety}}}{{sensory=@{spell-sensory}}}{{knockdown=@{spell-knockdown}}}{{crit=@{spell-crit-size}}}{{damage=@{spell-damage}}}{{damagetype=@{spell-damage-type}}}{{healing=@{spell-healing}}}{{reference=@{spell-reference}}}{{materials=@{spell-materials}}}{{checkroll=[[1d100]]%}}{{checktarget=#REPLACE2#}}{{fail=The spell is expended with absolutely no effect whatsoever.}}{{effects=@{spell-effect}}}">Roll Template</button>
</td>
</tr>
</table>
@@ -32,7 +32,7 @@
<td><input type="text" name="attr_spell-level" title="@{repeating_spells-#REPLACE0#_$X_spell-level}" class="sheet-spell-half" placeholder="Spell level"></td>
<td>School:</td>
<td><input type="text" name="attr_spell-school" title="@{repeating_spells-#REPLACE0#_$X_spell-school}" class="sheet-spell-half" placeholder="School"></td>
<td>Compoenets:</td>
<td>Components:</td>
<td><input type="text" name="attr_spell-components" title="@{repeating_spells-#REPLACE0#_$X_spell-components}" class="sheet-spell-half" placeholder="Components"></td>
</tr>
<tr>
@@ -55,7 +55,7 @@
<td>Healing:</td>
<td><textarea type="text" name="attr_spell-healing" title="@{repeating_spells-#REPLACE0#_$X_spell-healing}" class="sheet-spell-half sheet-input-like" placeholder="[[Healing]]"></textarea></td>
<td>Materials:</td>
<td><input type="text" name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" class="sheet-spell-half" placeholder="Materials"></td>
<td><textarea type="text" name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" class="sheet-spell-half sheet-input-like" placeholder="Materials"></textarea></td>
<td>Book reference:</td>
<td><input type="text" name="attr_spell-reference" title="@{repeating_spells-#REPLACE0#_$X_spell-reference}" class="sheet-spell-half" placeholder="Book Reference"></td>
</tr>
@@ -0,0 +1 @@
<td><button type="roll" name="roll_#REPLACE0#-check" title="%{#REPLACE0#-check}" value="&{template:2Echeck} {{checkvs=#REPLACE0# Check}} {{character=@{character_name}}} {{success=You made your check by [[ abs([[@{#REPLACE0#}]] - [[1d20cs1cf20-(@{misc-mod})]]) ]]}} {{fail=You missed your check by $[[2]]}} {{checktarget=[[@{#REPLACE0#}]]}} {{checkroll=$[[1]]}} {{color=blue}}">#REPLACE0#</button></td>
@@ -1,7 +1,7 @@
<div class="sheet-tab-content sheet-section-attributes-player-option">
<table class="sheet-default-header-first-column sheet-default-header-every-third-row sheet-table-white" style='width:100%;'>
<table class="sheet-default-header-first-column sheet-default-header-every-third-row sheet-table-white sheet-table-slim-first-column sheet-table-sub-ability-score" style='width:100%;'>
<tr>
<td style="width: 1px;"><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="&{template:2Echeck} {{checkvs=Strength Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Strength}]]}} {{color=blue}}">Strength</button></td>
insert_attribute-button.html_(Strength)
<td><input type="text" name="attr_Strength" title="@{Strength}" class="sheet-shortish" placeholder="18[67]"></td>
<td>Hit<br>Probability</td>
<td>Damage<br>Adjustment</td>
@@ -12,7 +12,7 @@
<td style="width: 1px;">Notes</td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Stamina-check" title="%{Stamina-check}" value="&{template:2Echeck} {{checkvs=Stamina Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Stamina}]]}} {{color=blue}}"><em>Stamina</em></button></td>
insert_attribute-button.html_(Stamina)
<td><input type="text" name="attr_Stamina" title="@{Stamina}" class="sheet-shortish" placeholder="18[67]"/></td>
<td colspan="2"></td>
<td><input type="text" name="attr_carryweight" title="@{carryweight}" class="sheet-shortish" value="0"/></td>
@@ -20,18 +20,18 @@
<td><input type="text" name="attr_strnotes" title="@{strnotes}"></td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Muscle-check" title="%{Muscle-check}" value="&{template:2Echeck} {{checkvs=Muscle Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Muscle}]]}} {{color=blue}}"><em>Muscle</em></button></td>
insert_attribute-button.html_(Muscle)
<td><input type="text" name="attr_Muscle" title="@{Muscle}" class="sheet-shortish" placeholder="18[67]"/></td>
<td><input type="text" name="attr_strengthhit" title="@{strengthhit}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_strengthdmg" title="@{strengthdmg}" class="sheet-shortish" value="0"/></td>
<td></td>
<td><input type="text" name="attr_maxpress" title="@{maxpress}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0[0]"/><button type="action" name="act_opendoor-check" title="%{opendoor-check}" class="btn sheet-action-button-roll"></button></td>
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="&{template:2Echeck} {{checkvs=Bend Bars / Lift Gate Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{bendbar}]]%}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="&{template:2Echeck} {{checkvs=Bend Bars / Lift Gate Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{bendbar}]]%}} {{success=You bend the bars / lift the gate}} {{fail=You failed the attempt and will never succeed at it.}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_str2notes" title="@{str2notes}"></td>
</tr>
<tr>
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="&{template:2Echeck} {{checkvs=Dexterity Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Dexterity}]]}} {{color=blue}}">Dexterity</button></td>
insert_attribute-button.html_(Dexterity)
<td><input type="text" name="attr_Dexterity" title="@{Dexterity}" class="sheet-shortish" placeholder="18"></td>
<td colspan="2">Reaction<br>Adjustment</td>
<td colspan="2">Missile Attack<br>Adjustment</td>
@@ -39,7 +39,7 @@
<td>Notes</td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Aim-check" title="%{Aim-check}" value="&{template:2Echeck} {{checkvs=Aim Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Aim}]]}} {{color=blue}}"><em>Aim</em></button></td>
insert_attribute-button.html_(Aim)
<td><input type="text" name="attr_Aim" title="@{Aim}" class="sheet-shortish" placeholder="18"/></td>
<td colspan="2"></td>
<td colspan="2"><input type="text" name="attr_dexmissile" title="@{dexmissile}" class="sheet-shortish" value="0"/></td>
@@ -47,7 +47,7 @@
<td><input type="text" name="attr_dexnotes" title="@{dexnotes}"></td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Balance-check" title="%{Balance-check}" value="&{template:2Echeck} {{checkvs=Balance Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Balance}]]}} {{color=blue}}"><em>Balance</em></button></td>
insert_attribute-button.html_(Balance)
<td><input type="text" name="attr_Balance" title="@{Balance}" class="sheet-shortish" placeholder="18"/></td>
<td colspan="2"><input type="text" name="attr_dexreact" title="@{dexreact}" class="sheet-shortish" value="0"/></td>
<td colspan="2"></td>
@@ -55,7 +55,7 @@
<td><input type="text" name="attr_dex2notes" title="@{dex2notes}"></td>
</tr>
<tr>
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="&{template:2Echeck} {{checkvs=Constitution Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Constitution}]]}} {{color=blue}}">Constitution</button></td>
insert_attribute-button.html_(Constitution)
<td><input type="text" name="attr_Constitution" title="@{Constitution}" class="sheet-shortish" placeholder="18"/></td>
<td>Hit Point<br>Adjustment</td>
<td>System<br>Shock</td>
@@ -65,7 +65,7 @@
<td>Notes</td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Health-check" title="%{Health-check}" value="&{template:2Echeck} {{checkvs=Health Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Health}]]}} {{color=blue}}">Health</button></td>
insert_attribute-button.html_(Health)
<td><input type="text" name="attr_Health" title="@{Health}" class="sheet-shortish" placeholder="18"/></td>
<td></td>
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/w gm &{template:2Echeck} {{checkvs=System Shock Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conshock}]]%}} {{color=blue}}"></button></td>
@@ -75,7 +75,7 @@
<td><input type="text" name="attr_connotes" title="@{connotes}"></td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Fitness-check" title="%{Fitness-check}" value="&{template:2Echeck} {{checkvs=Fitness Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Fitness}]]}} {{color=blue}}">Fitness</button></td>
insert_attribute-button.html_(Fitness)
<td><input type="text" name="attr_Fitness" title="@{Fitness}" class="sheet-shortish" placeholder="18"/></td>
<td><input type="text" name="attr_conadj" title="@{conadj}" class="sheet-shortish" value="0"/></td>
<td></td>
@@ -84,7 +84,7 @@
<td><input type="text" name="attr_con2notes" title="@{con2notes}"></td>
</tr>
<tr>
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="&{template:2Echeck} {{checkvs=Intelligence Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intelligence}]]}} {{color=blue}}">Intelligence</button></td>
insert_attribute-button.html_(Intelligence)
<td><input type="text" name="attr_Intelligence" title="@{Intelligence}" class="sheet-shortish" placeholder="18"/></td>
<td>Number of<br>Languages</td>
<td>Maximum<br>Spell Level</td>
@@ -94,7 +94,7 @@
<td>Notes</td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Reason-check" title="%{Reason-check}" value="&{template:2Echeck} {{checkvs=Reason Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Reason}]]}} {{color=blue}}">Reason</button></td>
insert_attribute-button.html_(Reason)
<td><input type="text" name="attr_Reason" title="@{Reason}" class="sheet-shortish" placeholder="18"/></td>
<td></td>
<td><input type="text" name="attr_intlvl" title="@{intlvl}" class="sheet-shortish" value="0"/></td>
@@ -104,35 +104,35 @@
<td><input type="text" name="attr_intnotes" title="@{intnotes}"></td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Knowledge-check" title="%{Knowledge-check}" value="&{template:2Echeck} {{checkvs=Knowledge Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Knowledge}]]}} {{color=blue}}">Knowledge</button></td>
insert_attribute-button.html_(Knowledge)
<td><input type="text" name="attr_Knowledge" title="@{Knowledge}" class="sheet-shortish" placeholder="18"/></td>
<td><input type="text" name="attr_intlang" title="@{intlang}" class="sheet-shortish" value="0"/></td>
<td></td>
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/w gm &{template:2Echeck} {{checkvs=Learn *?{Name of Spell?|Spell name}* Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{intchance}]]%}} {{color=blue}}"></button>
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/w gm &{template:2Echeck} {{checkvs=Learn *?{Name of Spell?|Spell name}* Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{intchance}]]%}} {{success=You learned **?{Name of Spell?}**}} {{fail=You can try again at next level (provided you still have access to the spell)}} {{color=blue}}"></button>
<td></td>
<td colspan="2"></td>
<td><input type="text" name="attr_int2notes" title="@{int2notes}"></td>
</tr>
<tr>
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="&{template:2Echeck} {{checkvs=Wisdom Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Wisdom}]]}} {{color=blue}}">Wisdom</button></td>
insert_attribute-button.html_(Wisdom)
<td><input type="text" name="attr_Wisdom" title="@{Wisdom}" class="sheet-shortish" placeholder="18"/></td>
<td>Magical Def<br>Adjustment</td>
<td colspan="2">Bonus<br>Priest Spells</td>
<td>Clerical<br>Spell Failure</td>
<td>Priestly<br>Spell Failure</td>
<td colspan="2">Spell<br>Immunity</td>
<td>Notes</td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Intuition-check" title="%{Intuition-check}" value="&{template:2Echeck} {{checkvs=Intuition Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intuition}]]}} {{color=blue}}">Intuition</button></td>
insert_attribute-button.html_(Intuition)
<td><input type="text" name="attr_Intuition" title="@{Intuition}" class="sheet-shortish" placeholder="18"/></td>
<td></td>
<td colspan="2"><input type="text" name="attr_wisbonus-prime" title="@{wisbonus-prime}"/></td>
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="&{template:2Einversecheck} {{checkvs=Spell Failure Check}} {{character=@{character_name}}} {{checkroll=[[1d100+(@{misc-mod})]]%}} {{checktarget=[[@{wisfail}]]%}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="&{template:2Einversecheck} {{checkvs=Spell Failure Check}} {{character=@{character_name}}} {{checkroll=[[1d100+(@{misc-mod})]]%}} {{checktarget=[[@{wisfail}]]%}} {{fail=The spell is expended with absolutely no effect whatsoever.}} {{color=blue}}"></button></td>
<td colspan="2"><input type="text" name="attr_wisimm1" title="@{wisimm1}" class="sheet-spell-immune"/></td>
<td><input type="text" name="attr_wisnotes" title="@{wisnotes}"/></td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Willpower-check" title="%{Willpower-check}" value="&{template:2Echeck} {{checkvs=Willpower Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Willpower}]]}} {{color=blue}}">Willpower</button></td>
insert_attribute-button.html_(Willpower)
<td><input type="text" name="attr_Willpower" title="@{Willpower}" class="sheet-shortish" placeholder="18"/></td>
<td><input type="text" name="attr_wisdef" title="@{wisdef}" class="sheet-shortish" value="0"/></td>
<td colspan="2"><input type="text" name="attr_wisbonus-extra" title="@{wisbonus-extra}"/></td>
@@ -141,7 +141,7 @@
<td><input type="text" name="attr_wis2notes" title="@{wis2notes}"/></td>
</tr>
<tr>
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="&{template:2Echeck} {{checkvs=Charisma Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Charisma}]]}} {{color=blue}}">Charisma</button></td>
insert_attribute-button.html_(Charisma)
<td><input type="text" name="attr_Charisma" title="@{Charisma}" class="sheet-shortish" placeholder="18"/></td>
<td colspan="2">Maximum Number<br>of Henchmen</td>
<td colspan="2">Loyalty<br>Base</td>
@@ -149,7 +149,7 @@
<td>Notes</td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Leadership-check" title="%{Leadership-check}" value="&{template:2Echeck} {{checkvs=Leadership Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Leadership}]]}} {{color=blue}}">Leadership</button></td>
insert_attribute-button.html_(Leadership)
<td><input type="text" name="attr_Leadership" title="@{Leadership}" class="sheet-shortish" placeholder="18"/></td>
<td colspan="2"><input type="text" name="attr_chamax" title="@{chamax}" class="sheet-shortish" value="0"/></td>
<td colspan="2"><input type="text" name="attr_chaloy" title="@{chaloy}" class="sheet-shortish" value="0"/></td>
@@ -157,7 +157,7 @@
<td><input type="text" name="attr_chanotes" title="@{chanotes}"/></td>
</tr>
<tr>
<td><button style="margin-left: 10px;" type="roll" name="roll_Appearance-check" title="%{Appearance-check}" value="&{template:2Echeck} {{checkvs=Appearance Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Appearance}]]}} {{color=blue}}">Appearance</button></td>
insert_attribute-button.html_(Appearance)
<td><input type="text" name="attr_Appearance" title="@{Appearance}" class="sheet-shortish" placeholder="18"/></td>
<td colspan="2"></td>
<td colspan="2"></td>
@@ -1,7 +1,7 @@
<div class="sheet-tab-content sheet-section-attributes-standard">
<table class="sheet-default-header-first-column sheet-default-header-odd-row sheet-table-white" style='width:100%;'>
<table class="sheet-default-header-first-column sheet-default-header-odd-row sheet-table-white sheet-table-slim-first-column" style='width:100%;'>
<tr>
<td style="width: 1px;"></td>
<td></td>
<td>Ability<br>Score</td>
<td>Hit<br>Probability</td>
<td>Damage<br>Adjustment</td>
@@ -12,14 +12,14 @@
<td style="width: 1px;">Notes</td>
</tr>
<tr>
<td><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="&{template:2Echeck} {{checkvs=Strength Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Strength}]]}} {{color=blue}}">Strength</button></td>
insert_attribute-button.html_(Strength)
<td><input type="text" name="attr_Strength" title="@{Strength}" class="sheet-shortish" placeholder="18[67]"/></td>
<td><input type="text" name="attr_strengthhit" title="@{strengthhit}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_strengthdmg" title="@{strengthdmg}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_carryweight" title="@{carryweight}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_maxpress" title="@{maxpress}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0(0)"><button type="action" name="act_opendoor-check" title="%{opendoor-check}" class="btn sheet-action-button-roll"></button></td>
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0">%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="&{template:2Echeck} {{checkvs=Bend Bars / Lift Gate Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{bendbar}]]%}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0">%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="&{template:2Echeck} {{checkvs=Bend Bars / Lift Gate Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{bendbar}]]%}} {{success=You bend the bars / lift the gate}} {{fail=You failed the attempt and will never succeed at it.}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_strnotes" title="@{strnotes}"></td>
</tr>
<tr>
@@ -31,7 +31,7 @@
<td>Notes</td>
</tr>
<tr>
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="&{template:2Echeck} {{checkvs=Dexterity Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Dexterity}]]}} {{color=blue}}">Dexterity</button></td>
insert_attribute-button.html_(Dexterity)
<td><input type="text" name="attr_Dexterity" title="@{Dexterity}" class="sheet-shortish" placeholder="18"/></td>
<td colspan="2"><input type="text" name="attr_dexreact" title="@{dexreact}" class="sheet-shortish" value="0"/></td>
<td colspan="2"><input type="text" name="attr_dexmissile" title="@{dexmissile}" class="sheet-shortish" value="0"/></td>
@@ -49,7 +49,7 @@
<td>Notes</td>
</tr>
<tr>
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="&{template:2Echeck} {{checkvs=Constitution Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Constitution}]]}} {{color=blue}}">Constitution</button></td>
insert_attribute-button.html_(Constitution)
<td><input type="text" name="attr_Constitution" title="@{Constitution}" class="sheet-shortish" placeholder="18"/></td>
<td><input type="text" name="attr_conadj" title="@{conadj}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/w gm &{template:2Echeck} {{checkvs=System Shock Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conshock}]]%}} {{color=blue}}"></button></td>
@@ -69,11 +69,11 @@
<td>Notes</td>
</tr>
<tr>
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="&{template:2Echeck} {{checkvs=Intelligence Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intelligence}]]}} {{color=blue}}">Intelligence</button></td>
insert_attribute-button.html_(Intelligence)
<td><input type="text" name="attr_Intelligence" title="@{Intelligence}" class="sheet-shortish" placeholder="18"/></td>
<td><input type="text" name="attr_intlang" title="@{intlang}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_intlvl" title="@{intlvl}" class="sheet-shortish" value="0"/></td>
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/w gm &{template:2Echeck} {{checkvs=Learn *?{Name of Spell?|Spell name}* Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{intchance}]]%}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/w gm &{template:2Echeck} {{checkvs=Learn *?{Name of Spell?|Spell name}* Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{intchance}]]%}} {{success=You learned **?{Name of Spell?}**}} {{fail=You can try again at next level (provided you still have access to the spell)}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-shortish" value="0"/></td>
<td colspan="2"><input type="text" name="attr_intimm1st" title="@{intimm1st}" placeholder="1" class="sheet-small"><input type="text" name="attr_intimm2nd" title="@{intimm2nd}" placeholder="2" class="sheet-small"><input type="text" name="attr_intimm3rd" title="@{intimm3rd}" placeholder="3" class="sheet-small"><input type="text" name="attr_intimm4th" title="@{intimm4th}" placeholder="4" class="sheet-small"><input type="text" name="attr_intimm5th" title="@{intimm5th}" placeholder="5" class="sheet-small"><input type="text" name="attr_intimm6th" title="@{intimm6th}" placeholder="6" class="sheet-small"><input type="text" name="attr_intimm7th" title="@{intimm7th}" placeholder="7" class="sheet-small"></td>
<td><input type="text" name="attr_intnotes" title="@{intnotes}"></td>
@@ -83,16 +83,16 @@
<td>Ability<br>Score</td>
<td>Magical Def<br>Adjustment</td>
<td colspan="2">Bonus<br>Priest Spells</td>
<td>Clerical<br>Spell Failure</td>
<td>Priestly<br>Spell Failure</td>
<td colspan="2">Spell<br>Immunity</td>
<td>Notes</td>
</tr>
<tr>
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="&{template:2Echeck} {{checkvs=Wisdom Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Wisdom}]]}} {{color=blue}}">Wisdom</button></td>
insert_attribute-button.html_(Wisdom)
<td><input type="text" name="attr_Wisdom" title="@{Wisdom}" class="sheet-shortish" placeholder="18"/></td>
<td><input type="text" name="attr_wisdef" title="@{wisdef}" class="sheet-shortish" value="0"/></td>
<td colspan="2"><input type="text" name="attr_wisbonus" title="@{wisbonus}"/></td>
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="&{template:2Einversecheck} {{checkvs=Spell Failure Check}} {{character=@{character_name}}} {{checkroll=[[1d100+(@{misc-mod})]]%}} {{checktarget=[[@{wisfail}]]%}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="&{template:2Einversecheck} {{checkvs=Spell Failure Check}} {{character=@{character_name}}} {{checkroll=[[1d100+(@{misc-mod})]]%}} {{checktarget=[[@{wisfail}]]%}} {{fail=The spell is expended with absolutely no effect whatsoever.}} {{color=blue}}"></button></td>
<td colspan="2"><input type="text" name="attr_wisimm" title="@{wisimm}" class="sheet-spell-immune"/></td>
<td><input type="text" name="attr_wisnotes" title="@{wisnotes}"/></td>
</tr>
@@ -105,7 +105,7 @@
<td>Notes</td>
</tr>
<tr>
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="&{template:2Echeck} {{checkvs=Charisma Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Charisma}]]}} {{color=blue}}">Charisma</button></td>
insert_attribute-button.html_(Charisma)
<td><input type="text" name="attr_Charisma" title="@{Charisma}" class="sheet-shortish" placeholder="18"/></td>
<td colspan="2"><input type="text" name="attr_chamax" title="@{chamax}" class="sheet-shortish" value="0"/></td>
<td colspan="2"><input type="text" name="attr_chaloy" title="@{chaloy}" class="sheet-shortish" value="0"/></td>
@@ -126,9 +126,9 @@
</tr>
</table>
<fieldset name="repeating_customattr" class="repeating_customattr">
<table class="sheet-default-header-first-column sheet-default-header-odd-row" style='width:100%;'>
<table class="sheet-default-header-first-column sheet-default-header-odd-row sheet-table-slim-first-column" style='width:100%;'>
<tr>
<td style="width: 1px;"><button style="visibility: hidden" type="roll">Constitution</button></td>
<td><button style="visibility: hidden" type="roll">Constitution</button></td>
<td>Ability<br>Score</td>
<td><input type="text" name="attr_metric1" title="@{repeating_customattr_$X_metric1}" class="sheet-attr" placeholder="18"/></td>
<td colspan="2"><input type="text" name="attr_metric2" title="@{repeating_customattr_$X_metric2}" class="sheet-attr"/></td>
@@ -138,7 +138,7 @@
</tr>
<tr>
<td><input type="text" name="attr_customname" title="@{repeating_customattr_$X_customname}" placeholder="Attribute" class="sheet-table-dynamic90"></td>
<td><input type="text" name="attr_customscore" title="@{repeating_customattr_$X_customscore}" class="sheet-shortish"/><button type="roll" name="roll_customstat" title="%{repeating_customattr_$X_customstat}" value="&{template:2Echeck} {{checkvs=@{customname} Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{customscore}]]}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_customscore" title="@{repeating_customattr_$X_customscore}" class="sheet-shortish"/><button type="roll" name="roll_customstat" title="%{repeating_customattr_$X_customstat}" value="&{template:2Echeck} {{checkvs=@{customname} Check}} {{character=@{character_name}}} {{success=You made your check by [[ [[@{customscore}]] - [[1d20cs1cf20-(@{misc-mod})]] ]]}} {{checktarget=$[[0]]}} {{checkroll=$[[1]]}} {{color=blue}}"></button></td>
<td><input type="text" name="attr_custommetric1" title="@{repeating_customattr_$X_custommetric1}" class="sheet-attr"/><button type="roll" name="roll_custom-metric1" title="%{repeating_customattr_$X_custom-metric1}" value="@{custommetric1}"></button></td>
<td colspan="2"><input type="text" name="attr_custommetric2" title="@{repeating_customattr_$X_custommetric2}" class="sheet-attr"/><button type="roll" name="roll_custom-metric2" title="%{repeating_customattr_$X_custom-metric2}" value="@{custommetric2}"></button></td>
<td><input type="text" name="attr_custommetric3" title="@{repeating_customattr_$X_custommetric3}" class="sheet-attr"/><button type="roll" name="roll_custom-metric3" title="%{repeating_customattr_$X_custom-metric3}" value="@{custommetric3}"></button></td>
@@ -433,24 +433,40 @@
<br>
<h4>Scrolls</h4>
<fieldset name="repeating_scrolls" title="@{scrolls}" class="repeating_scrolls">
<table class="sheet-default-header-first-row" style="margin-bottom: 5px;">
<table class="sheet-default-header-first-row">
<tr class="sheet-collapse sheet-show-first">
<td>Name</td>
<td>Level</td>
<td>Qty</td>
<td colspan="2">Speed</td>
<td colspan="2">Macro</td>
</tr>
<tr>
<td><input type="text" name="attr_scroll" title="@{repeating_scrolls_$X_scroll}" placeholder="Name of Scroll/Spell."></td>
<td><input type="text" name="attr_scrollqty" title="@{repeating_scrolls_$X_scrollqty}" class="sheet-small" placeholder="#"></td>
<td class="sheet-td-dynamic100">
<input type="text" name="attr_scroll" class="sheet-rogue-min sheet-chrome" title="@{repeating_scrolls_$X_scroll}" placeholder="Name of Scroll/Spell." list="scroll-spells">
<input type="text" name="attr_scroll" class="sheet-rogue-min sheet-firefox" title="@{repeating_scrolls_$X_scroll}" placeholder="Name of Scroll/Spell." list="scroll-spells-ff">
</td>
<td><input type="number" name="attr_scroll-level" title="@{repeating_scrolls_$X_scroll-level}" class="sheet-minish" value="6"></td>
<td><input type="number" name="attr_scrollqty" title="@{repeating_scrolls_$X_scrollqty}" class="sheet-minish" placeholder="#"></td>
<td><input type="text" name="attr_scroll-speed" title="@{repeating_scrolls_$X_scroll-speed}" class="sheet-small" value="3"></td>
<td><button type="roll" name="attr_scroll-initiative" title="%{repeating_scrolls_$X_scroll-initiative}" value="/gmroll [[{([[1d10]]+[[@{scroll-speed}-(@{misc-mod})]]), 1}kh1]] [Initiative (@{scroll})]&{tracker}">Initiative</button></td>
<td><button type="roll" name="attr_scroll-roll" title="%{repeating_scrolls_$X_scroll-roll}" value="@{scroll-macro}">T</button></td>
<td><button type="action" name="act_show" class="btn sheet-hidden sheet-show"></button><button type="action" name="act_hide" class="btn sheet-hidden"></button></td>
</tr>
<tr>
<td colspan="3"><input type="text" name="attr_scroll-macro" title="@{repeating_scrolls_$X_scroll-macro}" class="sheet-table-dynamic" placeholder="Enter Macro text."></td>
<td><button type="roll" name="attr_scroll-roll" title="%{repeating_scrolls_$X_scroll-roll}" value="@{scroll-macro}">Scroll</button></td>
<tr class="sheet-hidden">
<td class="sheet-default-header">Spell failure:</td>
<td><input type="number" name="attr_scroll-failure" title="@{repeating_scrolls_$X_scroll-failure}" class="sheet-minish" value="0"></td>
<td style="font-weight: bold">%</td>
</tr>
<tr class="sheet-hidden">
<td colspan="7"><textarea type="text" name="attr_scroll-macro" title="@{repeating_scrolls_$X_scroll-macro}" class="sheet-table-dynamic" placeholder="Enter Macro text."></textarea></td>
</tr>
</table>
</fieldset>
<details>
<summary>Casting from Scrolls</summary>
insert_casting-from-scrolls.html
</details>
</div>
</div>
</div>
@@ -42,6 +42,7 @@
</table>
<input type="hidden" name="attr_action-check" value="">
<button type="action" name="act_action-check" style="display: none"></button>
<button type="action" name="act_action-check-dm" style="display: none"></button>
<input type="hidden" name="attr_action-macro" value="">
<button type="action" name="act_action-macro" style="display: none"></button>
</fieldset>
@@ -18,7 +18,7 @@
<li>10 minutes of study/prayer per level of the spell. Ie. 1st-level: 10 minutes, 2nd-level: 20 minutes, and so on. (PHB p. 107)</li>
<li>Spells stay memorized until cast or wiped from the mind. A spellcaster cannot choose to forget a memorized spell to replace it. (PHB p. 107)</li>
<li>Reversible spells must be memorized as the desired version (PHB p. 113-114)</li>
<li>Scrolls require no memorization or material components to cast (PHB p. 144 / DMG p. 118)</li>
<li>Scrolls require no memorization (PHB p. 144 / DMG p. 118)</li>
</ul>
<b>Casting</b>
<ul>
@@ -27,23 +27,7 @@
<li>Material spell components are consumed/destroyed/expended when the spell is cast, unless specifically noted otherwise (PHB p. 113-114)</li>
<li>Priest holy symbols are not lost when a spell is cast (PHB p. 114)</li>
<li>Casting from Scrolls
<ul>
<li>Wizards can use (read and cast from) wizard scrolls (PHB p. 42 / DMG p. 196)</li>
<li>Priest can use (read and cast from) priest scrolls (PHB p. 48 / DMG p. 196)
<ul>
<li>Paladins cannot cast spells from clerical or druidical scrolls (PHB p. 39 / DMG p. 196)</li>
<li>Rangers cannot use priest scrolls (PHB p. 39 / DMG p. 196)</li>
<li>Druids cannot use priest scrolls unless specifically allowed for druids (PHB p. 52)</li>
</ul>
</li>
<li>10th level Thieves can cast spells from scrolls with a 25% failure rate (PHB p. 57-58)</li>
<li>10th level Bards can cast spells from scrolls with a 15% failure rate (PHB p. 61)</li>
<li>All classes can read and cast <em>Protection Scrolls</em> (DMG p. 196)</li>
<li>Scrolls have a read time equal to the inscribed spell's cast time (PHB p. 125 / DMG p. 196)</li>
<li>Scrolls are cast at the level at which they were inscribed (DMG p. 196)</li>
<li>Casting scrolls containing spells of a higher level than spell-user can cast incurs a 5% failure rate per level between the character's present level and the level at which the spell could be cast (DMG p. 196)</li>
<li>No adverse effects associated with casting the spell are suffered by the reader. These requirements or penalties have already been fulfilled or suffered by the creator of the scroll (DMG p. 196)</li>
</ul>
insert_casting-from-scrolls.html
</li>
</ul>
</details>
@@ -0,0 +1,18 @@
<ul>
<li>Wizards can use (read and cast from) wizard scrolls (PHB p. 42 / DMG p. 196)</li>
<li>Priest can use (read and cast from) priest scrolls (PHB p. 48 / DMG p. 196)
<ul>
<li>Paladins cannot cast spells from clerical or druidical scrolls (PHB p. 39 / DMG p. 196)</li>
<li>Rangers cannot use priest scrolls (PHB p. 39 / DMG p. 196)</li>
<li>Druids cannot use priest scrolls unless specifically allowed for druids (PHB p. 52)</li>
</ul>
</li>
<li>10th level Thieves can cast spells from scrolls with a 25% failure rate (PHB p. 57-58)</li>
<li>10th level Bards can cast spells from scrolls with a 15% failure rate (PHB p. 61)</li>
<li>All classes can read and cast <em>Protection Scrolls</em> (DMG p. 196)</li>
<li>Scrolls have a read time equal to the inscribed spell's cast time (PHB p. 125 / DMG p. 196)</li>
<li>Scrolls are cast at the level at which they were inscribed (DMG p. 196)</li>
<li>Casting scrolls containing spells of a higher level than spell-user can cast incurs a 5% failure rate per level between the character's present level and the level at which the spell could be cast (DMG p. 196)</li>
<li>Scrolls require no material components to cast (PHB p. 144 / DMG p. 118)</li>
<li>No adverse effects associated with casting the spell are suffered by the reader. These requirements or penalties have already been fulfilled or suffered by the creator of the scroll (DMG p. 196)</li>
</ul>
@@ -114,7 +114,7 @@
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri1)
insert_priest-spell-template.html_(pri1,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
insert_spells-old.html_(28,Wind,wind,-priest)
insert_spells-old.html_(29,Wind,wind,-priest)
@@ -169,7 +169,7 @@
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri2)
insert_priest-spell-template.html_(pri2,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
insert_spells-old.html_(31,Wind,wind,-priest)
insert_spells-old.html_(32,Wind,wind,-priest)
@@ -224,7 +224,7 @@
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri3)
insert_priest-spell-template.html_(pri3,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
insert_spells-old.html_(34,Wind,wind,-priest)
insert_spells-old.html_(35,Wind,wind,-priest)
@@ -279,7 +279,7 @@
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri4)
insert_priest-spell-template.html_(pri4,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
insert_spells-old.html_(37,Wind,wind,-priest)
insert_spells-old.html_(38,Wind,wind,-priest)
@@ -334,7 +334,7 @@
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri5)
insert_priest-spell-template.html_(pri5,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
insert_spells-old.html_(40,Wind,wind,-priest)
insert_spells-old.html_(41,Wind,wind,-priest)
@@ -389,7 +389,7 @@
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri6)
insert_priest-spell-template.html_(pri6,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
insert_spells-old.html_(43,Wind,wind,-priest)
insert_spells-old.html_(44,Wind,wind,-priest)
@@ -444,7 +444,7 @@
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri7)
insert_priest-spell-template.html_(pri7,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
insert_spells-old.html_(46,Wind,wind,-priest)
insert_spells-old.html_(47,Wind,wind,-priest)
@@ -498,7 +498,7 @@
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(priq)
insert_priest-spell-template.html_(priq,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
insert_spells-old.html_(49,Wind,wind,-priest)
insert_spells-old.html_(50,Wind,wind,-priest)
@@ -339,6 +339,6 @@
<h4>Special Abilities and Attacks</h4>
<textarea name="attr_abilitiesnotesranged" title="@{abilitiesnotesranged}" placeholder=""></textarea>
<h4>Weapon Notes</h4>
<textarea name="attr_rangedweaponnotes" title="@{rangedweaponnotes}" placeholder="Specializing in any ranged weapon, except Bows, gives extra attacks. &#10;Specializing in Bows or Crossbows gives an additional range category, Point-blank: +2/+0"></textarea>
<textarea name="attr_rangedweaponnotes" title="@{rangedweaponnotes}" placeholder="* Specializing in any ranged weapon, except Bows, gives extra attacks. (PHB p. 71)&#10;* Specializing in Bows or Crossbows gives an additional range category, Point-blank: +2/+0. (PHB p. 73) &#10;* A nonmagical arrow fired from a magical bow is a nonmagical missile. (DMG p. 242)"></textarea>
</div>
</div>
+1 -1
View File
@@ -139,7 +139,7 @@
<br>
<table>
<tr>
<td class="sheet-padding-right"><button type="roll" name="roll_monthac0" title="%{monthac0}" value="@{wtype} strikes AC [[(@{monsterthac0})-(1d20+(@{misc-mod}))]]">ThAC0</button></td>
<td class="sheet-padding-right"><button type="roll" name="roll_monthac0" title="%{monthac0}" value="@{wtype} strikes AC [[(@{monsterthac0})-(1d20+(@{misc-mod}))]]">THAC0</button></td>
<td class="sheet-padding-right"><button type="roll" name="roll_mondmg" title="%{mondmg}" value="@{wtype} inflicts [[@{monsterdmg}]] damage!">Attack 1</button></td>
<td class="sheet-padding-right"><button type="roll" name="roll_mondmg2" title="%{mondmg2}" value="@{wtype} inflicts [[@{monsterdmg2}]] damage!">Attack 2</button></td>
<td class="sheet-padding-right"><button type="roll" name="roll_mondmg3" title="%{mondmg3}" value="@{wtype} inflicts [[@{monsterdmg3}]] damage!">Attack 3</button></td>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

@@ -571,7 +571,7 @@ NONWEAPON_PROFICIENCIES_TABLE['Begging'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Begging'].push({
'slots': 1,
'abilityScore': '@{Charisma}',
'modifier': '?{Current Locale?|Uninhabited/Wilderness,-99|Countryside,-7|Hamlet/Village,-5|Town,-0,City,0}',
'modifier': '?{Locale modifier?|-99 [Uninhabited/Wilderness]|-7 [Countryside]|-5 [Hamlet/Village]|-2 [Town]|0 [City]}',
'classes': '',
'book': ['The Complete Thief\'s Handbook','The Complete Book of Humanoids']
});
@@ -610,8 +610,8 @@ NONWEAPON_PROFICIENCIES_TABLE['Information Gathering'].push({
NONWEAPON_PROFICIENCIES_TABLE['Intimidation'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Intimidation'].push({
'slots': 1,
'abilityScore': '?{Intimidation with?|@{Strength}|@{Charisma}}',
'modifier': '',
'abilityScore': '?{Intimidation with?|Strength,@{Strength}|Charisma,@{Charisma}}',
'modifier': 0,
'classes': '',
'book': ['The Complete Thief\'s Handbook','The Complete Book of Dwarves','The Complete Book of Humanoids']
});
@@ -977,7 +977,7 @@ NONWEAPON_PROFICIENCIES_TABLE['Lip Reading (Dwarf)'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Lip Reading (Dwarf)'].push({
'slots': 1,
'abilityScore': '@{Intelligence}',
'modifier': 0,
'modifier': -2,
'classes': 'Thief',
'book': ['The Complete Book of Dwarves']
});
@@ -1139,6 +1139,13 @@ NONWEAPON_PROFICIENCIES_TABLE['Cheesemaking'].push({
'classes': '',
'book': ['The Complete Book of Humanoids']
});
NONWEAPON_PROFICIENCIES_TABLE['Crowd Working'].push({
'slots': 1,
'abilityScore': '@{Charisma}',
'modifier': +2,
'classes': '',
'book': ['The Complete Book of Humanoids']
});
NONWEAPON_PROFICIENCIES_TABLE['Danger Sense'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Danger Sense'].push({
'slots': 2,
@@ -1209,8 +1216,8 @@ NONWEAPON_PROFICIENCIES_TABLE['Wild Fighting'].push({
NONWEAPON_PROFICIENCIES_TABLE['Cartography'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Cartography'].push({
'slots': 1,
'abilityScore': '@{Wisdom}',
'modifier': 0,
'abilityScore': '@{Intelligence}',
'modifier': -2,
'classes': '',
'book': ['The Complete Ranger\'s Handbook']
});
@@ -1364,6 +1371,30 @@ NONWEAPON_PROFICIENCIES_TABLE['Clothesmaking, Crude'].push({
'classes': '',
'book': ['The Complete Barbarian\'s Handbook']
});
NONWEAPON_PROFICIENCIES_TABLE['Jumping (Barbarian)'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Jumping (Barbarian)'].push({
'slots': "-",
'abilityScore': '@{Strength}',
'modifier': 0,
'classes': 'Rogue',
'book': ['PHB']
});
NONWEAPON_PROFICIENCIES_TABLE['Tightrope Walking (Barbarian)'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Tightrope Walking (Barbarian)'].push({
'slots': 2,
'abilityScore': '@{Dexterity}',
'modifier': 0,
'classes': '',
'book': ['The Complete Barbarian\'s Handbook']
});
NONWEAPON_PROFICIENCIES_TABLE['Tumbling (Barbarian)'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Tumbling (Barbarian)'].push({
'slots': 2,
'abilityScore': '@{Dexterity}',
'modifier': 0,
'classes': '',
'book': ['The Complete Barbarian\'s Handbook']
});
NONWEAPON_PROFICIENCIES_TABLE['Animal Rending'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Animal Rending'].push({
'slots': 1,
@@ -1400,7 +1431,7 @@ NONWEAPON_PROFICIENCIES_TABLE['Horde Summoning'] = [];
NONWEAPON_PROFICIENCIES_TABLE['Horde Summoning'].push({
'slots': 2,
'abilityScore': '@{Charisma}',
'modifier': 0,
'modifier': -2,
'classes': 'Warrior',
'book': ['The Complete Barbarian\'s Handbook']
});
@@ -1422,7 +1453,7 @@ NONWEAPON_PROFICIENCIES_TABLE['Light Sleeping'].push({
});
NONWEAPON_PROFICIENCIES_TABLE['Sign Language'].push({
'slots': 1,
'abilityScore': '@{Charisma}',
'abilityScore': '@{Dexterity}',
'modifier': 0,
'classes': '',
'book': ['The Complete Barbarian\'s Handbook']
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+198 -67
View File
@@ -29,6 +29,27 @@ const SCHOOL_FIELDS = [SCHOOL_SPELLS_AND_MAGIC];
const SPHERE_SPELLS_AND_MAGIC = 'sphere-spells-and-magic';
const SPHERE_FIELDS = ['sphere-druids', 'sphere-necromancers', SPHERE_SPELLS_AND_MAGIC];
class RollTemplateBuilder {
constructor(template) {
this.template = template;
this.builder = [];
}
push(args) {
if (Array.isArray(args)) {
this.builder = this.builder.concat(args);
} else {
for (let i = 0; i < arguments.length; i++) {
this.builder.push(arguments[i]);
}
}
}
string() {
return `&{template:${this.template}} ${this.builder.map(s => `{{${s}}}`).join(' ')}`;
}
}
//#region Helper function
const isSheetWorkerUpdate = function (eventInfo) {
return eventInfo.sourceType === SHEET_WORKER;
@@ -409,8 +430,7 @@ on('clicked:hide-toast', function(eventInfo) {
//#region Ability Scores logic
// Ability Score Parser function
const squareBracketsRegex = /18\[([0-9]{1,3})]/; // Ie. 18[65]
const parenthesisRegex = /18\(([0-9]{1,3})\)/; // Ie. 18(65)
const EXCEPTIONAL_STRENGHT_REGEX = /18[\[(]([0-9]{1,3})[\])]/; // Ie. 18[65], 18(65)
function getLookupValue(abilityScoreString, defaultValue, isStrength = false) {
if (abilityScoreString === '') {
return defaultValue;
@@ -422,7 +442,7 @@ function getLookupValue(abilityScoreString, defaultValue, isStrength = false) {
}
if (isStrength) {
let exceptionalMatch = abilityScoreString.match(squareBracketsRegex) || abilityScoreString.match(parenthesisRegex);
let exceptionalMatch = abilityScoreString.match(EXCEPTIONAL_STRENGHT_REGEX);
if (exceptionalMatch !== null) {
let exceptionalStrNumber = parseInt(exceptionalMatch[1]);
if (1 <= exceptionalStrNumber && exceptionalStrNumber <= 50) {
@@ -701,7 +721,7 @@ on('change:wisdom change:intuition change:willpower', function() {
let bonusSpells;
if (wisdom === 0) {
bonusSpell = parseWisBonus(0);
bonusSpells = parseWisBonus(0);
assignAttributes(0, 0, 0, bonusSpells, wisdomTable['wisimmune'][0], wisdomTable['wisimmune'][0], wisdomTable['wisnotes'][0], wisdomTable['wisnotes'][0]);
return;
}
@@ -808,16 +828,20 @@ on('change:charisma change:leadership change:appearance', function() {
on('clicked:opendoor-check', function (eventInfo){
getAttrs(['opendoor'], async function (values){
let match = values.opendoor.match(/(\d+)\((\d+)\)/);
let rollTemplate = "&{template:2Echeck} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20]]}} {{color=blue}}"
let rollBuilder = new RollTemplateBuilder('2Echeck');
rollBuilder.push('character=@{character_name}','checkroll=[[1d20cs1cf20]]','color=blue','success=The door swings open!');
if (!match) {
return printRoll(rollTemplate + "{{checkvs=Open Doors Check}} {{checktarget=[[@{opendoor}]]}}");
rollBuilder.push('checkvs=Open Doors Check','checktarget=[[@{opendoor}]]','fail=The door stays shut, but you can try again.');
return printRoll(rollBuilder.string());
}
let target = await extractQueryResult(`?{What kind of door?|Normal door,${match[1]}|Locked / Barred / Magical door,${match[2]}}`);
rollTemplate += ` {{checktarget=[[${target}]]}}`;
rollTemplate += target === match[1]
? ` {{checkvs=Open Normal Doors Check}}`
: ` {{checkvs=Open Locked/Barred/Magically Held Doors Check}}`;
return printRoll(rollTemplate);
rollBuilder.push(`checktarget=[[${target}]]`);
if (target === match[1]) {
rollBuilder.push('checkvs=Open Normal Doors Check','fail=The door stays shut, but you can try again.');
} else {
rollBuilder.push('checkvs=Open Locked/Barred/Magically Held Doors Check','fail=The door stays shut. No further attempts can be made by @{character_name}.');
}
return printRoll(rollBuilder.string());
});
});
//#endregion
@@ -949,6 +973,13 @@ function parseSpheres(spheresStrings, regex) {
return spheres;
}
const getSpellSchools = function (spell, books) {
let schoolRules = getActiveSettings(SCHOOL_FIELDS, books);
return schoolRules.has(SCHOOL_SPELLS_AND_MAGIC)
? spell[SCHOOL_SPELLS_AND_MAGIC] || spell['school']
: spell['school'];
}
const getSpellSpheres = function (spell, sphereRules) {
if (sphereRules.has(SPHERE_SPELLS_AND_MAGIC))
return spell[SPHERE_SPELLS_AND_MAGIC] || spell['sphere'];
@@ -1142,13 +1173,9 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
if (!spell)
return;
let isWizard = section.startsWith('wiz');
let isPriest = section.startsWith('pri');
let levelField;
if (isWizard)
levelField = 'level-wizard';
if (isPriest)
levelField = 'level-priest';
let levelField = isPriest ? 'level-priest' : 'level-wizard';
let className = isPriest ? 'Priest' : 'Wizard';
getAttrs([...BOOK_FIELDS, ...optionalRulesFields, levelField], function(books) {
if (bookInactiveShowToast(books, spell))
@@ -1156,8 +1183,8 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
let spellInfo = {
[`repeating_spells-${section}_spell-cast-time`] : spell['cast-time'],
[`repeating_spells-${section}_spell-level`] : levelFunc(spell['level']),
[`repeating_spells-${section}_spell-school`] : spell['school'],
[`repeating_spells-${section}_spell-level`] : levelFunc(spell['level'], className),
[`repeating_spells-${section}_spell-school`] : getSpellSchools(spell, books),
[`repeating_spells-${section}_spell-components`] : spell['components'],
[`repeating_spells-${section}_spell-range`] : spell['range'],
[`repeating_spells-${section}_spell-aoe`] : spell['aoe'],
@@ -1175,12 +1202,7 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
[`repeating_spells-${section}_spell-crit-size`] : spell['crit-size'] || '',
[`repeating_spells-${section}_spell-effect`] : spell['effect']
};
if (isWizard) {
let schoolRules = getActiveSettings(SCHOOL_FIELDS, books);
spellInfo[`repeating_spells-${section}_spell-school`] = schoolRules.has(SCHOOL_SPELLS_AND_MAGIC)
? spell[SCHOOL_SPELLS_AND_MAGIC] || spell['school']
: spell['school'];
}
if (isPriest) {
let sphereRules = getActiveSettings(SPHERE_FIELDS, books);
spellInfo[`repeating_spells-${section}_spell-sphere`] = getSpellSpheres(spell, sphereRules);
@@ -1226,11 +1248,10 @@ let priestSpellLevelsSections = [
{level: 'q', sections: ['49', '50', '51', 'priq']},
];
function wizardDisplayLevel(s) {
return `Level ${s} Wizard`;
}
function priestDisplayLevel(s) {
return s === 'q' ? 'Quest Spell Priest' : `Level ${s} Priest`;
const displaySpellLevel = function(level, className) {
return level === 'q'
? 'Quest Spell Priest'
: `Level ${level} ${className}`;
}
// --- Start setup Spell Slots --- //
@@ -1245,11 +1266,11 @@ wizardSpellLevelsSections.forEach(spellLevel => {
// Auto set spell info function
let lastSection = spellLevel.sections[spellLevel.sections.length - 1];
if (isNewSpellSection(lastSection)) {
setupAutoFillSpellInfo(lastSection, wizardSpells, wizardDisplayLevel, SCHOOL_FIELDS);
setupAutoFillSpellInfo(lastSection, wizardSpells, displaySpellLevel, SCHOOL_FIELDS);
setupSpellCrit(lastSection);
}
});
setupAutoFillSpellInfo('wizmonster', wizardSpells, wizardDisplayLevel, SCHOOL_FIELDS);
setupAutoFillSpellInfo('wizmonster', wizardSpells, displaySpellLevel, SCHOOL_FIELDS);
setupSpellCrit('wizmonster');
priestSpellLevelsSections.forEach(spellLevel => {
@@ -1263,14 +1284,14 @@ priestSpellLevelsSections.forEach(spellLevel => {
// Auto set spell info function
let lastSection = spellLevel.sections[spellLevel.sections.length - 1];
if (isNewSpellSection(lastSection)) {
setupAutoFillSpellInfo(lastSection, priestSpells, priestDisplayLevel, SPHERE_FIELDS);
setupAutoFillSpellInfo(lastSection, priestSpells, displaySpellLevel, SPHERE_FIELDS);
setupSpellCrit(lastSection);
if (lastSection !== 'priq') {
setupAddPriestSpell(lastSection);
}
}
});
setupAutoFillSpellInfo('primonster', priestSpells, priestDisplayLevel, SPHERE_FIELDS);
setupAutoFillSpellInfo('primonster', priestSpells, displaySpellLevel, SPHERE_FIELDS);
setupSpellCrit('primonster');
// --- End setup Spell Slots --- //
@@ -1463,8 +1484,9 @@ function setWeaponWithBonus(weaponName, setWeaponFunc, comparer, thac0Field, cat
if (!match)
return;
let baseWeaponName = weaponName.replace(match[0], ' ').trim();
baseWeapons = WEAPONS_TABLE[baseWeaponName];
let baseWeaponName1 = weaponName.replace(match[0], '');
let baseWeaponName2 = weaponName.replace(match[0], ' ').trim();
baseWeapons = WEAPONS_TABLE[baseWeaponName1] || WEAPONS_TABLE[baseWeaponName2];
if (!baseWeapons)
return;
@@ -1691,36 +1713,37 @@ on('change:repeating_monsterweapons:weaponname', function(eventInfo) {
on('clicked:grenade-miss', async function (eventInfo) {
getAttrs(['character_name'], async function(values) {
let characterName = values['character_name'];
let finalRollText = '&{template:2Egrenademiss} ';
let rollBuilder = new RollTemplateBuilder('2Egrenademiss');
let grenade = await extractQueryResult('?{What grenade have been thrown?|Acid|Holy water|Oil (lit)|Poison|Other}');
switch (grenade) {
case 'Acid': finalRollText += `{{name=Acid}} {{aoe=[[1]]}} {{aoesplash=[[1+6]]}} {{hitdmg=[Damage](~${characterName}|acid-hit)}} {{splashdmg=[Damage](~${characterName}|acid-splash)}}`; break;
case 'Holy water': finalRollText += `{{name=Holy water}} {{aoe=[[1]]}} {{aoesplash=[[1+6]]}} {{hitdmg=[Damage](~${characterName}|holy-water-hit)}} {{splashdmg=[Damage](~${characterName}|holy-water-splash)}}`; break;
case 'Oil (lit)': finalRollText += `{{name=Oil (lit)}} {{aoe=[[3]]}} {{aoesplash=[[3+6]]}} {{hitdmg=[Round 1](~${characterName}|oil-lit-hit1) [Round 2](~${characterName}|oil-lit-hit2)}} {{splashdmg=[Damage](~${characterName}|oil-lit-splash)}}`; break;
case 'Poison': finalRollText += `{{name=Poison}} {{aoe=[[1]]}} {{aoesplash=[[1+6]]}} {{hitdmg=Special}} {{splashdmg=Special}}`; break;
case 'Acid': rollBuilder.push('name=Acid','aoe=[[1]]','aoesplash=[[1+6]]',`hitdmg=[Damage](~${characterName}|acid-hit)`,`splashdmg=[Damage](~${characterName}|acid-splash)`); break;
case 'Holy water': rollBuilder.push('name=Holy water','aoe=[[1]]','aoesplash=[[1+6]]',`hitdmg=[Damage](~${characterName}|holy-water-hit)`,`splashdmg=[Damage](~${characterName}|holy-water-splash)`); break;
case 'Oil (lit)': rollBuilder.push('name=Oil (lit)','aoe=[[3]]','aoesplash=[[3+6]]',`hitdmg=[Round 1](~${characterName}|oil-lit-hit1) [Round 2](~${characterName}|oil-lit-hit2)`,`splashdmg=[Damage](~${characterName}|oil-lit-splash)`); break;
case 'Poison': rollBuilder.push('name=Poison','aoe=[[1]]','aoesplash=[[1+6]]','hitdmg=Special','splashdmg=Special'); break;
case 'Other': {
let name = await extractQueryResult('?{Grenade name}');
let aoe = await extractQueryResult('?{Area of effect (Diameter in feet)|1}');
let damage = await extractQueryResult('?{Direct damage|1d6}');
let splash = await extractQueryResult('?{Splash damage|1d3}');
var customGrenade = {}
let customGrenade = {}
customGrenade['custom-grenade-name'] = name;
customGrenade['custom-grenade-hit'] = damage;
customGrenade['custom-grenade-splash'] = splash;
setAttrs(customGrenade);
finalRollText += `{{name=${name}}} {{aoe=[[${aoe}]]}} {{aoesplash=[[${aoe}+6]]}} {{hitdmg=[Damage](~${characterName}|custom-grenade-hit)}} {{splashdmg=[Damage](~${characterName}|custom-grenade-splash)}}`;
rollBuilder.push(`name=${name}`,`aoe=[[${aoe}]]`,`aoesplash=[[${aoe}+6]]`,`hitdmg=[Damage](~${characterName}|custom-grenade-hit)`,`splashdmg=[Damage](~${characterName}|custom-grenade-splash)`);
}
}
let distanceName = await extractQueryResult('?{How far was it thrown?|Short|Medium|Long}');
finalRollText += `{{direction=[[1d10]]}} {{distancename=${distanceName}}} `;
rollBuilder.push('direction=[[1d10]]', `distancename=${distanceName}`);
switch (distanceName) {
case 'Short': finalRollText += '{{distance=[[1d6]]}} '; break;
case 'Medium': finalRollText += '{{distance=[[1d10]]}} '; break;
case 'Long': finalRollText += '{{distance=[[2d10]]}} '; break;
case 'Short': rollBuilder.push('distance=[[1d6cs1cf6]]'); break;
case 'Medium': rollBuilder.push('distance=[[1d10cs1cf10]]'); break;
case 'Long': rollBuilder.push('distance=[[2d10cs1cf10]]'); break;
}
finalRollText += '{{hit=[[0]]}} {{splash=[[0]]}} ';
rollBuilder.push('hit=[[0]]','splash=[[0]]');
let finalRollText = rollBuilder.string();
console.log(finalRollText);
startRoll(finalRollText, function (roll) {
console.log(roll);
@@ -1863,8 +1886,8 @@ function setupSpellCrit(section) {
console.log(eventInfo);
let attrFields = fields.map(s => prefix+s);
getAttrs(attrFields, async function (values) {
let rollBuilder = ['character=@{character_name}'];
rollBuilder.push(`name=${values[prefix+'spell-name']}`);
let rollBuilder = new RollTemplateBuilder('2Epocrit');
rollBuilder.push('character=@{character_name}',`name=${values[prefix+'spell-name']}`);
let errors = [];
@@ -2071,9 +2094,8 @@ function setupSpellCrit(section) {
}
}
let displayHits = rollBuilder.map(s => `{{${s}}}`).join(' ');
let displayInjuries = Array.from(set).map(s => `{{${s}}}`).join(' ');
let finalRollText = `&{template:2Epocrit} ${displayHits} ${displayInjuries}`;
rollBuilder.push(Array.from(set));
let finalRollText = rollBuilder.string();
if (section.includes('monster'))
finalRollText = `@{wtype} ${finalRollText}`;
@@ -2145,7 +2167,9 @@ function critEffectExplanations(critEffect, set) {
function weaponPoCritTemplate(prefix, fields, nameFunc, baseDamageFunc, damageAdjFunc) {
getAttrs(fields, async function (values) {
let rollBuilder = ['character=@{character_name}'];
let rollBuilder = new RollTemplateBuilder('2Epocrit');
rollBuilder.push('character=@{character_name}');
let errors = [];
let weaponName = nameFunc(values);
@@ -2267,9 +2291,8 @@ function weaponPoCritTemplate(prefix, fields, nameFunc, baseDamageFunc, damageAd
if (errors.length > 0)
rollBuilder.push(`hits=Cannot show effects due to missing fields: ${errors.join(', ')}`);
let displayHits = rollBuilder.map(s => `{{${s}}}`).join(' ');
let displayInjuries = Array.from(set).map(s => `{{${s}}}`).join(' ');
let finalRollText = `&{template:2Epocrit} ${displayHits} ${displayInjuries}`;
rollBuilder.push(Array.from(set));
let finalRollText = rollBuilder.string();
console.log(finalRollText);
@@ -2506,6 +2529,97 @@ on('change:repeating_gear-stored:gear-stored-weight change:repeating_gear-stored
})
.execute();
})
on('change:repeating_scrolls:scroll', async function (eventInfo) {
if (!eventInfo.newValue)
return;
let spellName = eventInfo.newValue.replace('Scroll of ', '');
let wizardSpell = wizardSpells['wizmonster'][spellName];
let priestSpell = priestSpells['primonster'][spellName];
if (!wizardSpell && !priestSpell)
return
let spell;
let spellClass;
if (wizardSpell && priestSpell) {
spellClass = await extractQueryResult(`?{Is ${eventInfo.newValue} a Wizard or Priest scroll?|Wizard|Priest}`);
spell = spellClass === 'Wizard' ? wizardSpell : priestSpell;
} else if (wizardSpell) {
spell = wizardSpell;
spellClass = 'Wizard';
} else {
spell = priestSpell;
spellClass = 'Priest';
}
getAttrs([...BOOK_FIELDS, ...SCHOOL_FIELDS, ...SPHERE_FIELDS], async function(books) {
if (bookInactiveShowToast(books, spell))
return
let parse = parseSourceAttribute(eventInfo);
let rollBuilder = new RollTemplateBuilder('2Espell');
rollBuilder.push(`title=@{scroll}\n(Casting level @{scroll-level})`);
rollBuilder.push(`splevel=${displaySpellLevel(spell.level, spellClass)}`);
rollBuilder.push(`school=${getSpellSchools(spell, books)}`);
if (spellClass === 'Priest') {
let sphereRules = getActiveSettings(SPHERE_FIELDS, books);
rollBuilder.push(`sphere=${getSpellSpheres(spell, sphereRules)}`);
}
rollBuilder.push(`range=${spell['range']}`);
rollBuilder.push(`components=V`);
rollBuilder.push(`duration=${spell['duration']}`);
rollBuilder.push(`time=@{scroll-speed}`);
rollBuilder.push('scroll=true');
rollBuilder.push(`aoe=${spell['aoe']}`);
rollBuilder.push(`save=${spell['saving-throw']}`);
rollBuilder.push(`subtlety=${spell['subtlety'] || ''}`);
rollBuilder.push(`sensory=${spell['sensory'] || ''}`);
rollBuilder.push(`knockdown=${spell['knockdown'] || ''}`);
rollBuilder.push(`crit=${spell['crit-size'] || ''}`);
rollBuilder.push(`damage=${spell['damage']}`);
rollBuilder.push(`damagetype=${spell['damage-type']}`);
rollBuilder.push(`reference=${spell['reference']}, ${spell['book']}`);
rollBuilder.push(`materials=${spell['materials'] ? 'Included in the scroll.' : ''}`);
rollBuilder.push('checkroll=[[1d100]]%');
rollBuilder.push('checktarget=[[@{scroll-failure}]]%');
rollBuilder.push('fail=DM roll for Magical Spell Failure');
rollBuilder.push(`effects=${spell['effect']}`);
let scrollMacro = rollBuilder.string();
scrollMacro = scrollMacro.replaceAll('[[@{level-wizard}]]','[[@{scroll-level}]]')
.replaceAll('[[@{level-priest}]]', '[[@{scroll-level}]]');
let recommendedMinimumLevel;
let spellLevel = parseInt(spell.level);
if (isNaN(spellLevel)) {
recommendedMinimumLevel = 6;
} else if (spellLevel <= 3) {
recommendedMinimumLevel = 6;
} else if (spellLevel === 4 || spellLevel === 5) {
recommendedMinimumLevel = spellLevel*2;
} else if (spellLevel === 6 && spellClass === 'Priest') {
recommendedMinimumLevel = spellLevel*2;
} else if (spellLevel >= 6) {
recommendedMinimumLevel = spellLevel*2+1
}
let scribeLevel = await extractQueryResult(`?{At what level is ${eventInfo.newValue} scribed? (Recommended minimum is ${recommendedMinimumLevel}th level)|${recommendedMinimumLevel}}`);
let spellFailure = await extractQueryResult(`?{What is the risk of spell failure for ${eventInfo.newValue}? (If you do not use this rule, set the value to 0)|0}`);
let scrollInfo = {
[`repeating_scrolls_${parse.rowId}_scroll-speed`]: spell['cast-time'],
[`repeating_scrolls_${parse.rowId}_scroll-level`]: scribeLevel,
[`repeating_scrolls_${parse.rowId}_scroll-failure`]: spellFailure,
[`repeating_scrolls_${parse.rowId}_scroll-macro`]: scrollMacro,
}
setAttrs(scrollInfo);
});
});
//#endregion
on(`change:repeating_gem:gemvalue change:repeating_gem:gemqty remove:repeating_gem`, function(eventInfo) {
@@ -2603,10 +2717,14 @@ PSIONIC_CORE_SECTIONS.forEach(({section, name, macro, number, cost_number, disci
powerInfo[`repeating_${section}_PSP-cost${cost_number}`] = power['initial-cost'];
powerInfo[`repeating_${section}_PSP-cost-maintenance`] = power['maintenance-cost'];
let macroBuilder = [];
let macroBuilder = new RollTemplateBuilder('2Epsionic');
macroBuilder.push(`title=@{${name}}`);
macroBuilder.push(`discipline=${displayDiscipline}`);
macroBuilder.push(`tier=${tier}`);
let attribute = power['attribute'];
attribute = attribute.startsWith("@") ? attribute.substring(2,attribute.length-1) : 'Affected'
let modifier = power['modifier'] === '0' ? '' : power['modifier'];
macroBuilder.push(`powerscoretext=${attribute} ${modifier}`.trim());
macroBuilder.push(`initial=@{PSP-cost${cost_number}}`);
macroBuilder.push(`maintenance=@{PSP-cost-maintenance}`);
macroBuilder.push(`range=${power['range']}`);
@@ -2614,12 +2732,15 @@ PSIONIC_CORE_SECTIONS.forEach(({section, name, macro, number, cost_number, disci
let prep = power['prep'];
let prepMatch = prep.match(/^[1-9]\d*$/);
if (prepMatch) {
prep += parseInt(prepMatch[0]) > 1 ? ' rounds' : 'round';
prep += parseInt(prepMatch[0]) > 1 ? ' rounds' : ' round';
}
macroBuilder.push(`prep=${prep}`);
macroBuilder.push(`prereq=${power['prerequisites']}`);
macroBuilder.push(`reference=${power['reference']}, ${power['book']}`)
let powerRoll = power['roll-override'] || `[[1d20cf20-(@{psionic-mod${number}})]]`;
let powerRoll = `[[1d20cf20-(@{psionic-mod${number}})]]`;
if (power['roll-override']) {
powerRoll = `[${power['roll-override']}](~${values.character_name}|repeating_${section}_${parse.rowId}_action-check-dm)`;
}
macroBuilder.push(`powerroll=${powerRoll}`);
let powerScore = `@{powerscore-nomod${number}}+(@{powerscore-mod${number}})+(@{psion-armor-penalty})`;
if (power['context-modifier']) {
@@ -2637,16 +2758,17 @@ PSIONIC_CORE_SECTIONS.forEach(({section, name, macro, number, cost_number, disci
if (power['healing']) {
macroBuilder.push(`healing=${power['healing']}`);
}
macroBuilder.push('fail=Half of PSP cost (rounded up) is lost.');
macroBuilder.push(`effects=${power['effect']}`);
let macroValue = macroBuilder.map(s => `{{${s}}}`).join(' ');
powerInfo[`repeating_${section}_${macro}`] = `&{template:2Epsionic} ${macroValue}`;
let macroValue = macroBuilder.string();
powerInfo[`repeating_${section}_${macro}`] = macroValue;
setAttrs(powerInfo,{silent:true});
});
});
on(`clicked:repeating_${section}:action-check`, function (eventInfo) {
on(`clicked:repeating_${section}:action-check clicked:repeating_${section}:action-check-dm`, function (eventInfo) {
let parse = parseSourceAttribute(eventInfo);
getAttrs([`repeating_${section}_${macro}`, 'psion-armor-penalty'], function (values) {
let displayDiscipline = discipline;
@@ -2659,10 +2781,9 @@ PSIONIC_CORE_SECTIONS.forEach(({section, name, macro, number, cost_number, disci
tier = match ? match[1] : '';
}
let macroBuilder = [];
let macroBuilder = new RollTemplateBuilder('2Epsionic');
match = fullMacro.match(/\{\{(title=.*?)}} *\{\{/);
console.log(match);
if (match) macroBuilder.push(match[1]);
else macroBuilder.push(`title=@{${name}}`);
@@ -2696,8 +2817,17 @@ PSIONIC_CORE_SECTIONS.forEach(({section, name, macro, number, cost_number, disci
match = fullMacro.match(/\{\{(1effect=.*?)}} *\{\{/);
if (match) macroBuilder.push(match[1]);
let macroValue = macroBuilder.map(s => `{{${s}}}`).join(' ');
macroValue = `&{template:2Epsionic} ${macroValue}`;
match = fullMacro.match(/\{\{(success=.*?)}} *\{\{/)
if (match) macroBuilder.push(match[1]);
match = fullMacro.match(/\{\{(fail=.*?)}} *\{\{/)
if (match) macroBuilder.push(match[1]);
let macroValue = macroBuilder.string();
if (parse.attribute.endsWith('dm')) {
macroValue = `/w gm ${macroValue}`;
}
rollPsionicTemplate(macroValue, parse.rowId, values);
});
@@ -2753,6 +2883,7 @@ PSIONIC_CORE_SECTIONS.forEach(({section, name, macro, number, cost_number, disci
// Show / Hide buttons for various repeating sections
const REPEATING_SECTIONS = [
...PSIONIC_CORE_SECTIONS.map(e => e.section),
'scrolls',
];
REPEATING_SECTIONS.forEach(section => {
on(`clicked:repeating_${section}:show clicked:repeating_${section}:hide`, function (eventInfo) {
+1 -1
View File
@@ -1,7 +1,7 @@
// --- Version change start --- //
const SHEET_NAME = 'AD&D 2E Revised';
const SHEET_VERSION = '4.13.1';
const SHEET_VERSION = '4.14.2';
on('sheet:opened', function(){
getAttrs(['character_sheet'],function(attrs){
@@ -412,250 +412,250 @@ weaponProficiencies['Special Maneuver: Levitation (7)'] = {
};
//#endregion
//#region Player's Options: Combat & Tactics
//#region Player's Option: Combat & Tactics
weaponProficiencies['Tight Group, Hammers'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Maces'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Daggers & Knives'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Spear-like polearms'] = {
'slots': 2,
'category': 'Polearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Poleaxes'] = {
'slots': 2,
'category': 'Polearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Bills'] = {
'slots': 2,
'category': 'Polearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Glaives'] = {
'slots': 2,
'category': 'Polearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Beaked'] = {
'slots': 2,
'category': 'Polearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Javelins'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Ancient Swords'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Roman Swords'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Middle Eastern Swords'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Oriental Swords'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Short Swords'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Medium Swords'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Large Swords'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Chain & Rope Weapons'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Martial Arts Weapons'] = {
'slots': 2,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Hand match weapons'] = {
'slots': 2,
'category': 'Firearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Matchlocks'] = {
'slots': 2,
'category': 'Firearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Wheellocks'] = {
'slots': 2,
'category': 'Firearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Tight Group, Snaplocks and Flintlocks'] = {
'slots': 2,
'category': 'Firearms',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Broad Group, Axes, Picks, and Hammers'] = {
'slots': 3,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Broad Group, Clubs, Maces, and Flails'] = {
'slots': 3,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Broad Group, Axes, Picks, and Hammers'] = {
'slots': 3,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Broad Group, Polearms'] = {
'slots': 3,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Broad Group, Spears & Javelins'] = {
'slots': 3,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Broad Group, Swords'] = {
'slots': 3,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Broad Group, Firearms'] = {
'slots': 3,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Missile or Thrown Weapon Style Specialization'] = {
'slots': 1,
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Buckler'] = {
'slots': 1,
'category': 'Shield Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Small shield'] = {
'slots': 1,
'category': 'Shield Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Medium shield'] = {
'slots': 1,
'category': 'Shield Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Body shield'] = {
'slots': 1,
'category': 'Shield Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Banded mail'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Brigandine'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Bronze plate'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Chain mail'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Cord armor'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Field plate'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Full plate'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Hide armor'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Improved mail'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Leather armor'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Light scale'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Metal lamellar'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Padded armor'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Plate mail'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Ring mail'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Scale armor'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Splint mail'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Studded leather'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
weaponProficiencies['Wood/bone armor'] = {
'slots': 1,
'category': 'Armor Proficiency',
'book': 'Player\'s Options: Combat & Tactics'
'book': 'Player\'s Option: Combat & Tactics'
};
//#endregion
module.exports = weaponProficiencies;
+75 -90
View File
@@ -157,7 +157,7 @@ WEAPONS_TABLE['club'].push({
'strength': true,
'small-medium': '1d6',
'large': '1d3',
'book': ['PHB', 'Arms and Equipment Guide','The Complete Ninja\'s Handbook'],
'book': ['PHB','Arms and Equipment Guide','The Complete Ninja\'s Handbook'],
'category': ['Melee','Range']
});
@@ -187,7 +187,7 @@ WEAPONS_TABLE['light crossbow, light quarrel'].push({
'range': '60/120/180',
'small-medium': '1d4',
'large': '1d4',
'book': ['PHB','The Complete Ninja\'s Handbook'],
'book': ['PHB'],
'category': ['Range']
});
@@ -247,7 +247,7 @@ WEAPONS_TABLE['dart'].push({
'strength': true,
'small-medium': '1d3',
'large': '1d2',
'book': ['PHB', 'Arms and Equipment Guide','The Complete Ninja\'s Handbook'],
'book': ['PHB','Arms and Equipment Guide','The Complete Ninja\'s Handbook'],
'category': ['Range']
});
@@ -751,7 +751,7 @@ WEAPONS_TABLE['sling, stone'].push({
'strength': true,
'small-medium': '1d4',
'large': '1d4',
'book': ['PHB','Arms and Equipment Guide'],
'book': ['PHB','Arms and Equipment Guide','The Complete Ninja\'s Handbook'],
'category': ['Range']
});
@@ -1020,7 +1020,7 @@ WEAPONS_TABLE['whip'].push({
'speed': 8,
'small-medium': '1d2',
'large': '1',
'book': ['PHB','Arms and Equipment Guide'],
'book': ['PHB','Arms and Equipment Guide','The Complete Ninja\'s Handbook'],
'category': ['Melee']
});
@@ -1172,7 +1172,7 @@ WEAPONS_TABLE['cestus'].push({
'speed': 2,
'small-medium': '1d4',
'large': '1d3',
'book': ['The Complete Fighter\'s Handbook', 'Arms and Equipment Guide'],
'book': ['The Complete Fighter\'s Handbook','Arms and Equipment Guide'],
'category': ['Melee']
});
@@ -1187,7 +1187,7 @@ WEAPONS_TABLE['chain'].push({
'strength': true,
'small-medium': '1d4+1',
'large': '1d4',
'book': ['The Complete Fighter\'s Handbook', 'Arms and Equipment Guide'],
'book': ['The Complete Fighter\'s Handbook','Arms and Equipment Guide'],
'category': ['Melee','Range']
});
@@ -1246,7 +1246,7 @@ WEAPONS_TABLE['gaff/hook'].push({
'speed': 2,
'small-medium': '1d4',
'large': '1d3',
'book': ['The Complete Fighter\'s Handbook', 'Arms and Equipment Guide'],
'book': ['The Complete Fighter\'s Handbook','Arms and Equipment Guide'],
'category': ['Melee']
});
@@ -1280,7 +1280,7 @@ WEAPONS_TABLE['harpoon, two-handed'].push({
WEAPONS_TABLE['javelin, one-handed'] = [];
WEAPONS_TABLE['javelin, one-handed'].push({
'name': 'Javelin, One-handed',
'size': 'L',
'size': 'M',
'type': 'P',
'speed': 4,
'rof': '1',
@@ -1288,19 +1288,19 @@ WEAPONS_TABLE['javelin, one-handed'].push({
'strength': true,
'small-medium': '1d4',
'large': '1d4',
'book': ['The Complete Fighter\'s Handbook','Arms and Equipment Guide'],
'book': ['The Complete Fighter\'s Handbook'],
'category': ['Melee','Range']
});
WEAPONS_TABLE['javelin, two-handed'] = [];
WEAPONS_TABLE['javelin, two-handed'].push({
'name': 'Javelin, Two-handed',
'size': 'L',
'size': 'M',
'type': 'P',
'speed': 4,
'small-medium': '1d6',
'large': '1d6',
'book': ['The Complete Fighter\'s Handbook','Arms and Equipment Guide'],
'book': ['The Complete Fighter\'s Handbook'],
'category': ['Melee']
});
@@ -1308,7 +1308,7 @@ WEAPONS_TABLE['stone javelin, one-handed'] = [];
WEAPONS_TABLE['stone javelin, one-handed'].push({
'name': 'Stone javelin, One-handed',
'noProf': true,
'size': 'L',
'size': 'M',
'type': 'P',
'speed': 4,
'rof': '1',
@@ -1316,7 +1316,7 @@ WEAPONS_TABLE['stone javelin, one-handed'].push({
'strength': true,
'small-medium': '1d4',
'large': '1d4',
'book': ['The Complete Fighter\'s Handbook'],
'book': ['The Complete Fighter\'s Handbook','Arms and Equipment Guide'],
'category': ['Melee','Range']
});
@@ -1324,12 +1324,12 @@ WEAPONS_TABLE['stone javelin, two-handed'] = [];
WEAPONS_TABLE['stone javelin, two-handed'].push({
'name': 'Stone javelin, Two-handed',
'noProf': true,
'size': 'L',
'size': 'M',
'type': 'P',
'speed': 4,
'small-medium': '1d4+1',
'large': '1d6',
'book': ['The Complete Fighter\'s Handbook'],
'book': ['The Complete Fighter\'s Handbook','Arms and Equipment Guide'],
'category': ['Melee']
});
@@ -1376,7 +1376,7 @@ WEAPONS_TABLE['lasso'].push({
'strength': true,
'small-medium': '',
'large': '',
'book': ['The Complete Fighter\'s Handbook', 'The Complete Priest\'s Handbook', 'Arms and Equipment Guide'],
'book': ['The Complete Fighter\'s Handbook','The Complete Priest\'s Handbook','Arms and Equipment Guide'],
'category': ['Range']
});
@@ -1793,7 +1793,7 @@ WEAPONS_TABLE['boku-toh'].push({
WEAPONS_TABLE['jitte'] = [];
WEAPONS_TABLE['jitte'].push({
'name': 'Jitte',
'size': 'M',
'size': 'S',
'type': 'B',
'speed': 2,
'small-medium': '1d4',
@@ -1807,7 +1807,7 @@ WEAPONS_TABLE['shuriken'].push({
'size': 'S',
'type': 'P',
'speed': 2,
'rof': '3/1',
'rof': '2/1',
'range': '5/10/20',
'strength': true,
'small-medium': '1d6',
@@ -1912,10 +1912,35 @@ WEAPONS_TABLE['light crossbow, light quarrel'].push({
'range': '60/120/180',
'small-medium': '1d4',
'large': '1d4',
'book': ['Arms and Equipment Guide'],
'book': ['Arms and Equipment Guide','The Complete Ninja\'s Handbook'],
'category': ['Range']
});
WEAPONS_TABLE['javelin, one-handed'].push({
'name': 'Javelin, One-handed',
'size': 'L',
'type': 'P',
'speed': 4,
'rof': '1',
'range': '20/40/60',
'strength': true,
'small-medium': '1d4',
'large': '1d4',
'book': ['Arms and Equipment Guide'],
'category': ['Melee','Range']
});
WEAPONS_TABLE['javelin, two-handed'].push({
'name': 'Javelin, Two-handed',
'size': 'L',
'type': 'P',
'speed': 4,
'small-medium': '1d6',
'large': '1d6',
'book': ['Arms and Equipment Guide'],
'category': ['Melee']
});
WEAPONS_TABLE['parrying dagger'] = [];
WEAPONS_TABLE['parrying dagger'].push({
'name': 'Parrying dagger',
@@ -1929,33 +1954,6 @@ WEAPONS_TABLE['parrying dagger'].push({
'category': ['Melee']
});
WEAPONS_TABLE['stone javelin, one-handed'].push({
'name': 'Stone javelin, One-handed',
'noProf': true,
'size': 'M',
'type': 'P',
'speed': 4,
'rof': '1',
'range': '20/40/60',
'strength': true,
'small-medium': '1d4',
'large': '1d4',
'book': ['Arms and Equipment Guide'],
'category': ['Melee','Range']
});
WEAPONS_TABLE['stone javelin, two-handed'].push({
'name': 'Stone javelin, Two-handed',
'noProf': true,
'size': 'M',
'type': 'P',
'speed': 4,
'small-medium': '1d4+1',
'large': '1d6',
'book': ['Arms and Equipment Guide'],
'category': ['Melee']
});
WEAPONS_TABLE['sap'] = [];
WEAPONS_TABLE['sap'].push({
'name': 'Sap',
@@ -2333,12 +2331,13 @@ WEAPONS_TABLE['katana'].push({
WEAPONS_TABLE['naginata'].push({
'name': 'Naginata',
'group': 'Polearm',
'size': 'L',
'type': 'S',
'speed': 7,
'small-medium': '1d10',
'large': '1d12',
'book': ['The Complete Book of Humanoids'],
'small-medium': '1d8',
'large': '1d10',
'book': ['The Complete Book of Humanoids','Player\'s Option: Skills & Powers'],
'category': ['Melee']
});
@@ -2445,6 +2444,18 @@ WEAPONS_TABLE['hornhead staff'].push({
'book': ['The Complete Book of Humanoids'],
'category': ['Melee']
});
WEAPONS_TABLE['finhead broadsword'] = [];
WEAPONS_TABLE['finhead broadsword'].push({
'name': 'Finhead broadsword',
'group': 'Saurial Weapon',
'size': 'M',
'type': 'S',
'speed': 6,
'small-medium': '1d8',
'large': '1d10',
'book': ['The Complete Book of Humanoids'],
'category': ['Melee']
});
//#endregion
//#region The Complete Ranger's Handbook
@@ -2959,7 +2970,7 @@ WEAPONS_TABLE['chu-ko-nu (repeater), light quarrel'].push({
'name': 'Chu-ko-nu (repeater), Light quarrel',
'group': 'Crossbow',
'size': 'M',
'ammo-size': 'S',
'ammo-size': 'M',
'type': 'P',
'speed': 10,
'rof': '3/2',
@@ -2985,11 +2996,11 @@ WEAPONS_TABLE['fang'].push({
WEAPONS_TABLE['fukimi-bari (mouth darts)'] = [];
WEAPONS_TABLE['fukimi-bari (mouth darts)'].push({
'name': 'Fukimi-bari (mouth darts)',
'rof': '1',
'range': '3/—/—',
'size': 'S',
'type': 'P',
'speed': 1,
'rof': '1',
'range': '3/—/—',
'small-medium': '1d2',
'large': '1d2',
'book': ['The Complete Ninja\'s Handbook'],
@@ -3061,10 +3072,12 @@ WEAPONS_TABLE['kau sin ke (whipping chain)'].push({
'size': 'L',
'type': 'B',
'speed': 7,
'rof': '',
'range': '',
'small-medium': '1d8',
'large': '1d6',
'book': ['The Complete Ninja\'s Handbook'],
'category': ['Melee']
'category': ['Melee','Range']
});
WEAPONS_TABLE['kawanaga (grapnel)'] = [];
@@ -3129,13 +3142,10 @@ WEAPONS_TABLE['lasso'].push({
'size': 'L',
'type': '—',
'speed': 7,
'rof': '',
'range': '',
'strength': true,
'small-medium': '',
'large': '',
'book': ['The Complete Ninja\'s Handbook'],
'category': ['Range']
'category': ['Melee']
});
WEAPONS_TABLE['manriki-gusari (chain)'] = [];
@@ -3150,7 +3160,7 @@ WEAPONS_TABLE['manriki-gusari (chain)'].push({
'small-medium': '1d4+1',
'large': '1d4',
'book': ['The Complete Ninja\'s Handbook'],
'category': ['Melee', 'Range']
'category': ['Melee','Range']
});
WEAPONS_TABLE['metsubishi (blinding powders)'] = [];
@@ -3159,7 +3169,7 @@ WEAPONS_TABLE['metsubishi (blinding powders)'].push({
'size': 'S',
'type': '—',
'speed': 3,
'rof': '1/2',
'rof': '1/3',
'range': '3/—/—',
'small-medium': '—',
'large': '—',
@@ -3170,7 +3180,7 @@ WEAPONS_TABLE['metsubishi (blinding powders)'].push({
WEAPONS_TABLE['nage teppo (grenades)'] = [];
WEAPONS_TABLE['nage teppo (grenades)'].push({
'name': 'Nage teppo (grenades)',
'size': '',
'size': '',
'type': 'B',
'speed': 9,
'rof': '1',
@@ -3371,20 +3381,6 @@ WEAPONS_TABLE['sling, bullet'].push({
'category': ['Range']
});
WEAPONS_TABLE['sling, stone'].push({
'name': 'Sling, Stone',
'size': 'S',
'type': 'B',
'speed': 6,
'rof': '1',
'range': '40/80/1600',
'strength': true,
'small-medium': '1d4',
'large': '1d4',
'book': ['The Complete Ninja\'s Handbook'],
'category': ['Range']
});
WEAPONS_TABLE['staff sling, bullet'].push({
'name': 'Staff sling, Bullet',
'size': 'M',
@@ -3407,7 +3403,7 @@ WEAPONS_TABLE['staff sling, stone'].push({
'type': 'B',
'speed': 11,
'rof': '1/2',
'range': '—/30-60/200',
'range': '—/30-60/90',
'strength': true,
'small-medium': '1d8',
'large': '2d4',
@@ -3577,8 +3573,8 @@ WEAPONS_TABLE['bokken, two-handed (wooden sword)'].push({
'size': 'M',
'type': 'B',
'speed': 4,
'small-medium': '2d6',
'large': '1d6',
'small-medium': '1d6',
'large': '1d3',
'book': ['The Complete Ninja\'s Handbook'],
'category': ['Melee']
});
@@ -6485,7 +6481,7 @@ WEAPONS_TABLE['torch'].push({
'name': 'Torch',
'noProf': true,
'size': 'M',
'type': 'Bd',
'type': 'B',
'speed': 4,
'reach': '1',
'rof': '1',
@@ -7647,17 +7643,6 @@ WEAPONS_TABLE['nagimaki'].push({
'book': ['Player\'s Option: Skills & Powers'],
'category': ['Melee']
});
WEAPONS_TABLE['naginata'].push({
'name': 'Naginata',
'group': 'Polearm',
'size': 'L',
'type': 'S',
'speed': 7,
'small-medium': '1d8',
'large': '1d10',
'book': ['Player\'s Option: Skills & Powers'],
'category': ['Melee']
});
WEAPONS_TABLE['rock'].push({
'name': 'Rock',
'noProf': true,
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

@@ -0,0 +1,474 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3.0
/* eslint-disable no-var, semi, prefer-arrow-callback, prefer-template */
/**
* Collection of methods for sending analytics events to Archive.org's analytics server.
*
* These events are used for internal stats and sent (in anonymized form) to Google Analytics.
*
* @see analytics.md
*
* @type {Object}
*/
window.archive_analytics = (function defineArchiveAnalytics() {
// keep orignal Date object so as not to be affected by wayback's
// hijacking global Date object
var Date = window.Date;
var ARCHIVE_ANALYTICS_VERSION = 2;
var DEFAULT_SERVICE = 'ao_2';
var NO_SAMPLING_SERVICE = 'ao_no_sampling'; // sends every event instead of a percentage
var startTime = new Date();
/**
* @return {Boolean}
*/
function isPerformanceTimingApiSupported() {
return 'performance' in window && 'timing' in window.performance;
}
/**
* Determines how many milliseconds elapsed between the browser starting to parse the DOM and
* the current time.
*
* Uses the Performance API or a fallback value if it's not available.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number}
*/
function getLoadTime() {
var start;
if (isPerformanceTimingApiSupported())
start = window.performance.timing.domLoading;
else
start = startTime.getTime();
return new Date().getTime() - start;
}
/**
* Determines how many milliseconds elapsed between the user navigating to the page and
* the current time.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number|null} null if the browser doesn't support the Performance API
*/
function getNavToDoneTime() {
if (!isPerformanceTimingApiSupported())
return null;
return new Date().getTime() - window.performance.timing.navigationStart;
}
/**
* Performs an arithmetic calculation on a string with a number and unit, while maintaining
* the unit.
*
* @param {String} original value to modify, with a unit
* @param {Function} doOperation accepts one Number parameter, returns a Number
* @returns {String}
*/
function computeWithUnit(original, doOperation) {
var number = parseFloat(original, 10);
var unit = original.replace(/(\d*\.\d+)|\d+/, '');
return doOperation(number) + unit;
}
/**
* Computes the default font size of the browser.
*
* @returns {String|null} computed font-size with units (typically pixels), null if it cannot be computed
*/
function getDefaultFontSize() {
var fontSizeStr;
if (!('getComputedStyle' in window))
return null;
var style = window.getComputedStyle(document.documentElement);
if (!style)
return null;
fontSizeStr = style.fontSize;
// Don't modify the value if tracking book reader.
if (document.querySelector('#BookReader'))
return fontSizeStr;
return computeWithUnit(fontSizeStr, function reverseBootstrapFontSize(number) {
// Undo the 62.5% size applied in the Bootstrap CSS.
return number * 1.6;
});
}
/**
* Get the URL parameters for a given Location
* @param {Location}
* @return {Object} The URL parameters
*/
function getParams(location) {
if (!location) location = window.location;
var vars;
var i;
var pair;
var params = {};
var query = location.search;
if (!query) return params;
vars = query.substring(1).split('&');
for (i = 0; i < vars.length; i++) {
pair = vars[i].split('=');
params[pair[0]] = decodeURIComponent(pair[1]);
}
return params;
}
function getMetaProp(name) {
var metaTag = document.querySelector('meta[property=' + name + ']');
return metaTag ? metaTag.getAttribute('content') || null : null;
}
var ArchiveAnalytics = {
/**
* @type {String|null}
*/
service: getMetaProp('service'),
mediaType: getMetaProp('mediatype'),
primaryCollection: getMetaProp('primary_collection'),
/**
* Key-value pairs to send in pageviews (you can read this after a pageview to see what was
* sent).
*
* @type {Object}
*/
values: {},
/**
* Sends an analytics ping, preferably using navigator.sendBeacon()
* @param {Object} values
* @param {Function} [onload_callback] (deprecated) callback to invoke once ping to analytics server is done
* @param {Boolean} [augment_for_ao_site] (deprecated) if true, add some archive.org site-specific values
*/
send_ping: function send_ping(values, onload_callback, augment_for_ao_site) {
if (typeof window.navigator !== 'undefined' && typeof window.navigator.sendBeacon !== 'undefined')
this.send_ping_via_beacon(values);
else
this.send_ping_via_image(values);
},
/**
* Sends a ping via Beacon API
* NOTE: Assumes window.navigator.sendBeacon exists
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_beacon: function send_ping_via_beacon(values) {
var url = this.generate_tracking_url(values || {});
window.navigator.sendBeacon(url);
},
/**
* Sends a ping via Image object
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_image: function send_ping_via_image(values) {
var url = this.generate_tracking_url(values || {});
var loadtime_img = new Image(1, 1);
loadtime_img.src = url;
loadtime_img.alt = '';
},
/**
* Construct complete tracking URL containing payload
* @param {Object} params Tracking parameters to pass
* @return {String} URL to use for tracking call
*/
generate_tracking_url: function generate_tracking_url(params) {
var baseUrl = '//analytics.archive.org/0.gif';
var keys;
var outputParams = params;
var outputParamsArray = [];
outputParams.service = outputParams.service || this.service || DEFAULT_SERVICE;
// Build array of querystring parameters
keys = Object.keys(outputParams);
keys.forEach(function keyIteration(key) {
outputParamsArray.push(encodeURIComponent(key) + '=' + encodeURIComponent(outputParams[key]));
});
outputParamsArray.push('version=' + ARCHIVE_ANALYTICS_VERSION);
outputParamsArray.push('count=' + (keys.length + 2)); // Include `version` and `count` in count
return baseUrl + '?' + outputParamsArray.join('&');
},
/**
* @param {int} page Page number
*/
send_scroll_fetch_event: function send_scroll_fetch_event(page) {
var additionalValues = { ev: page };
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch', location.pathname, additionalValues);
},
send_scroll_fetch_base_event: function send_scroll_fetch_base_event() {
var additionalValues = {};
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch_base', location.pathname, additionalValues);
},
/**
* @param {Object} [options]
* @param {String} [options.mediaType]
* @param {String} [options.mediaLanguage]
* @param {String} [options.page] The path portion of the page URL
*/
send_pageview: function send_pageview(options) {
var settings = options || {};
var defaultFontSize;
var loadTime = getLoadTime();
var mediaType = settings.mediaType;
var primaryCollection = settings.primaryCollection;
var page = settings.page;
var navToDoneTime = getNavToDoneTime();
/**
* @return {String}
*/
function get_locale() {
if (navigator) {
if (navigator.language)
return navigator.language;
else if (navigator.browserLanguage)
return navigator.browserLanguage;
else if (navigator.systemLanguage)
return navigator.systemLanguage;
else if (navigator.userLanguage)
return navigator.userLanguage;
}
return '';
}
defaultFontSize = getDefaultFontSize();
// Set field values
this.values.kind = 'pageview';
this.values.timediff = (new Date().getTimezoneOffset()/60)*(-1); // *timezone* diff from UTC
this.values.locale = get_locale();
this.values.referrer = (document.referrer == '' ? '-' : document.referrer);
if (loadTime)
this.values.loadtime = loadTime;
if (navToDoneTime)
this.values.nav_to_done_ms = navToDoneTime;
if (settings.trackingId) {
this.values.ga_tid = settings.trackingId;
}
/* START CUSTOM DIMENSIONS */
if (defaultFontSize)
this.values.ga_cd1 = defaultFontSize;
if ('devicePixelRatio' in window)
this.values.ga_cd2 = window.devicePixelRatio;
if (mediaType)
this.values.ga_cd3 = mediaType;
if (settings.mediaLanguage) {
this.values.ga_cd4 = settings.mediaLanguage;
}
if (primaryCollection) {
this.values.ga_cd5 = primaryCollection;
}
/* END CUSTOM DIMENSIONS */
if (page)
this.values.page = page;
this.send_ping(this.values);
},
/**
* Sends a tracking "Event".
* @param {string} category
* @param {string} action
* @param {string} label
* @param {Object} additionalEventParams
*/
send_event: function send_event(
category,
action,
label,
additionalEventParams
) {
if (!label) label = window.location.pathname;
if (!additionalEventParams) additionalEventParams = {};
if (additionalEventParams.mediaLanguage) {
additionalEventParams.ga_cd4 = additionalEventParams.mediaLanguage;
delete additionalEventParams.mediaLanguage;
}
var eventParams = Object.assign(
{
kind: 'event',
ec: category,
ea: action,
el: label,
cache_bust: Math.random(),
},
additionalEventParams
);
this.send_ping(eventParams);
},
/**
* Sends every event instead of a small percentage.
*
* Use this sparingly as it can generate a lot of events.
*
* @param {string} category
* @param {string} action
* @param {string} label
* @param {Object} additionalEventParams
*/
send_event_no_sampling: function send_event_no_sampling(
category,
action,
label,
additionalEventParams
) {
var extraParams = additionalEventParams || {};
extraParams.service = NO_SAMPLING_SERVICE;
this.send_event(category, action, label, extraParams);
},
/**
* @param {Object} options see this.send_pageview options
*/
send_pageview_on_load: function send_pageview_on_load(options) {
var self = this;
window.addEventListener('load', function send_pageview_with_options() {
self.send_pageview(options);
});
},
/**
* Handles tracking events passed in URL.
* Assumes category and action values are separated by a "|" character.
* NOTE: Uses the unsampled analytics property. Watch out for future high click links!
* @param {Location}
*/
process_url_events: function process_url_events(location) {
var eventValues;
var actionValue;
var eventValue = getParams(location).iax;
if (!eventValue) return;
eventValues = eventValue.split('|');
actionValue = eventValues.length >= 1 ? eventValues[1] : '';
this.send_event_no_sampling(
eventValues[0],
actionValue,
window.location.pathname
);
},
/**
* Attaches handlers for event tracking.
*
* To enable click tracking for a link, add a `data-event-click-tracking`
* attribute containing the Google Analytics Event Category and Action, separated
* by a vertical pipe (|).
* e.g. `<a href="foobar" data-event-click-tracking="TopNav|FooBar">`
*
* To enable form submit tracking, add a `data-event-form-tracking` attribute
* to the `form` tag.
* e.g. `<form data-event-form-tracking="TopNav|SearchForm" method="GET">`
*
* Additional tracking options can be added via a `data-event-tracking-options`
* parameter. This parameter, if included, should be a JSON string of the parameters.
* Valid parameters are:
* - service {string}: Corresponds to the Google Analytics property data values flow into
*/
set_up_event_tracking: function set_up_event_tracking() {
var self = this;
var clickTrackingAttributeName = 'event-click-tracking';
var formTrackingAttributeName = 'event-form-tracking';
var trackingOptionsAttributeName = 'event-tracking-options';
function handleAction(event, attributeName) {
var selector = '[data-' + attributeName + ']';
var eventTarget = event.target;
if (!eventTarget) return;
var target = eventTarget.closest(selector);
if (!target) return;
var categoryAction;
var categoryActionParts;
var options;
categoryAction = target.dataset[toCamelCase(attributeName)];
if (!categoryAction) return;
categoryActionParts = categoryAction.split('|');
options = target.dataset[toCamelCase(trackingOptionsAttributeName)];
options = options ? JSON.parse(options) : {};
self.send_event(
categoryActionParts[0],
categoryActionParts[1],
categoryActionParts[2] || window.location.pathname,
options.service ? { service: options.service } : {}
);
}
function toCamelCase(str) {
return str.replace(/\W+(.)/g, function (match, chr) {
return chr.toUpperCase();
});
};
document.addEventListener('click', function(e) {
handleAction(e, clickTrackingAttributeName);
});
document.addEventListener('submit', function(e) {
handleAction(e, formTrackingAttributeName);
});
},
/**
* @returns {Object[]}
*/
get_data_packets: function get_data_packets() {
return [this.values];
},
/**
* Creates a tracking image for tracking JS compatibility.
*
* @param {string} type The type value for track_js_case in query params for 0.gif
*/
create_tracking_image: function create_tracking_image(type) {
this.send_ping_via_image({
cache_bust: Math.random(),
kind: 'track_js',
track_js_case: type,
});
}
};
return ArchiveAnalytics;
}());
// @license-end
@@ -0,0 +1,507 @@
@import 'record.css'; /* for SPN1 */
#wm-ipp-base {
height:65px;/* initial height just in case js code fails */
padding:0;
margin:0;
border:none;
background:none transparent;
}
#wm-ipp {
z-index: 2147483647;
}
#wm-ipp, #wm-ipp * {
font-family:Lucida Grande, Helvetica, Arial, sans-serif;
font-size:12px;
line-height:1.2;
letter-spacing:0;
width:auto;
height:auto;
max-width:none;
max-height:none;
min-width:0 !important;
min-height:0;
outline:none;
float:none;
text-align:left;
border:none;
color: #000;
text-indent: 0;
position: initial;
background: none;
}
#wm-ipp div, #wm-ipp canvas {
display: block;
}
#wm-ipp div, #wm-ipp tr, #wm-ipp td, #wm-ipp a, #wm-ipp form {
padding:0;
margin:0;
border:none;
border-radius:0;
background-color:transparent;
background-image:none;
/*z-index:2147483640;*/
height:auto;
}
#wm-ipp table {
border:none;
border-collapse:collapse;
margin:0;
padding:0;
width:auto;
font-size:inherit;
}
#wm-ipp form input {
padding:1px !important;
height:auto;
display:inline;
margin:0;
color: #000;
background: none #fff;
border: 1px solid #666;
}
#wm-ipp form input[type=submit] {
padding:0 8px !important;
margin:1px 0 1px 5px !important;
width:auto !important;
border: 1px solid #000 !important;
background: #fff !important;
color: #000 !important;
}
#wm-ipp form input[type=submit]:hover {
background: #eee !important;
cursor: pointer !important;
}
#wm-ipp form input[type=submit]:active {
transform: translateY(1px);
}
#wm-ipp a {
display: inline;
}
#wm-ipp a:hover{
text-decoration:underline;
}
#wm-ipp a.wm-btn:hover {
text-decoration:none;
color:#ff0 !important;
}
#wm-ipp a.wm-btn:hover span {
color:#ff0 !important;
}
#wm-ipp #wm-ipp-inside {
margin: 0 6px;
border:5px solid #000;
border-top:none;
background-color:rgba(255,255,255,0.9);
-moz-box-shadow:1px 1px 4px #333;
-webkit-box-shadow:1px 1px 4px #333;
box-shadow:1px 1px 4px #333;
border-radius:0 0 8px 8px;
}
/* selectors are intentionally verbose to ensure priority */
#wm-ipp #wm-logo {
padding:0 10px;
vertical-align:middle;
min-width:100px;
flex: 0 0 100px;
}
#wm-ipp .c {
padding-left: 4px;
}
#wm-ipp .c .u {
margin-top: 4px !important;
}
#wm-ipp .n {
padding:0 0 0 5px !important;
vertical-align: bottom;
}
#wm-ipp .n a {
text-decoration:none;
color:#33f;
font-weight:bold;
}
#wm-ipp .n .b {
padding:0 6px 0 0 !important;
text-align:right !important;
overflow:visible;
white-space:nowrap;
color:#99a;
vertical-align:middle;
}
#wm-ipp .n .y .b {
padding:0 6px 2px 0 !important;
}
#wm-ipp .n .c {
background:#000;
color:#ff0;
font-weight:bold;
padding:0 !important;
text-align:center;
}
#wm-ipp.hi .n td.c {
color:#ec008c;
}
#wm-ipp .n td.f {
padding:0 0 0 6px !important;
text-align:left !important;
overflow:visible;
white-space:nowrap;
color:#99a;
vertical-align:middle;
}
#wm-ipp .n tr.m td {
text-transform:uppercase;
white-space:nowrap;
padding:2px 0;
}
#wm-ipp .c .s {
padding:0 5px 0 0 !important;
vertical-align:bottom;
}
#wm-ipp #wm-nav-captures {
white-space: nowrap;
}
#wm-ipp .c .s a.t {
color:#33f;
font-weight:bold;
line-height: 1.8;
}
#wm-ipp .c .s div.r {
color: #666;
font-size:9px;
white-space:nowrap;
}
#wm-ipp .c .k {
padding-bottom:1px;
}
#wm-ipp .c .s {
padding:0 5px 2px 0 !important;
}
#wm-ipp td#displayMonthEl {
padding: 2px 0 !important;
}
#wm-ipp td#displayYearEl {
padding: 0 0 2px 0 !important;
}
div#wm-ipp-sparkline {
position:relative;/* for positioning markers */
white-space:nowrap;
background-color:#fff;
cursor:pointer;
line-height:0.9;
}
#sparklineImgId, #wm-sparkline-canvas {
position:relative;
z-index:9012;
max-width:none;
}
#wm-ipp-sparkline div.yt {
position:absolute;
z-index:9010 !important;
background-color:#ff0 !important;
top: 0;
}
#wm-ipp-sparkline div.mt {
position:absolute;
z-index:9013 !important;
background-color:#ec008c !important;
top: 0;
}
#wm-ipp .r {
margin-left: 4px;
}
#wm-ipp .r a {
color:#33f;
border:none;
position:relative;
background-color:transparent;
background-repeat:no-repeat !important;
background-position:100% 100% !important;
text-decoration: none;
}
#wm-ipp #wm-capinfo {
/* prevents notice div background from sticking into round corners of
#wm-ipp-inside */
border-radius: 0 0 4px 4px;
}
#wm-ipp #wm-capinfo .c-logo {
display:block;
float:left;
margin-right:3px;
width:90px;
min-height:90px;
max-height: 290px;
border-radius:45px;
overflow:hidden;
background-position:50%;
background-size:auto 90px;
box-shadow: 0 0 2px 2px rgba(208,208,208,128) inset;
}
#wm-ipp #wm-capinfo .c-logo span {
display:inline-block;
}
#wm-ipp #wm-capinfo .c-logo img {
height:90px;
position:relative;
left:-50%;
}
#wm-ipp #wm-capinfo .wm-title {
font-size:130%;
}
#wm-ipp #wm-capinfo a.wm-selector {
display:inline-block;
color: #aaa;
text-decoration:none !important;
padding: 2px 8px;
}
#wm-ipp #wm-capinfo a.wm-selector.selected {
background-color:#666;
}
#wm-ipp #wm-capinfo a.wm-selector:hover {
color: #fff;
}
#wm-ipp #wm-capinfo.notice-only #wm-capinfo-collected-by,
#wm-ipp #wm-capinfo.notice-only #wm-capinfo-timestamps {
display: none;
}
#wm-ipp #wm-capinfo #wm-capinfo-notice .wm-capinfo-content {
background-color:#ff0;
padding:5px;
font-size:14px;
text-align:center;
}
#wm-ipp #wm-capinfo #wm-capinfo-notice .wm-capinfo-content * {
font-size:14px;
text-align:center;
}
#wm-ipp #wm-expand {
right: 1px;
bottom: -1px;
color: #ffffff;
background-color: #666 !important;
padding:0 5px 0 3px !important;
border-radius: 3px 3px 0 0 !important;
}
#wm-ipp #wm-expand span {
color: #ffffff;
}
#wm-ipp #wm-expand #wm-expand-icon {
display: inline-block;
transition: transform 0.5s;
transform-origin: 50% 45%;
}
#wm-ipp #wm-expand.wm-open #wm-expand-icon {
transform: rotate(180deg);
}
#wm-ipp #wmtb {
text-align:right;
}
#wm-ipp #wmtb #wmtbURL {
width: calc(100% - 45px);
}
#wm-ipp #wm-graph-anchor {
border-right:1px solid #ccc;
}
/* time coherence */
html.wb-highlight {
box-shadow: inset 0 0 0 3px #a50e3a !important;
}
.wb-highlight {
outline: 3px solid #a50e3a !important;
}
#wm-ipp-print {
display:none !important;
}
@media print {
#wm-ipp-base {
display:none !important;
}
#wm-ipp-print {
display:block !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
@media (max-width:414px) {
#wm-ipp .xxs {
display:none !important;
}
}
@media (min-width:1055px) {
#wm-ipp #wm-graph-anchor {
display:block !important;
}
}
@media (max-width:1054px) {
#wm-ipp #wm-graph-anchor {
display:none !important;
}
}
@media (max-width:1163px) {
#wm-logo {
display:none !important;
}
}
#wm-btns {
white-space: nowrap;
margin-top: -2px;
}
#wm-btns #wm-save-snapshot-open {
margin-right: 7px;
top: -6px;
}
#wm-btns #wm-sign-in {
box-sizing: content-box;
display: none;
margin-right: 7px;
top: -8px;
/*
round border around sign in button
*/
border: 2px #000 solid;
border-radius: 14px;
padding-right: 2px;
padding-bottom: 2px;
width: 11px;
height: 11px;
}
#wm-btns #wm-sign-in>.iconochive-person {
font-size: 12.5px;
}
#wm-save-snapshot-open > .iconochive-web {
color:#000;
font-size:160%;
}
#wm-ipp #wm-share {
display: flex;
align-items: flex-end;
justify-content: space-between;
}
#wm-share > #wm-screenshot {
display: inline-block;
margin-right: 3px;
visibility: hidden;
}
#wm-screenshot > .iconochive-image {
color:#000;
font-size:160%;
}
#wm-share > #wm-video {
display: inline-block;
margin-right: 3px;
visibility: hidden;
}
#wm-video > .iconochive-movies {
color: #000;
display: inline-block;
font-size: 150%;
margin-bottom: 2px;
}
#wm-btns #wm-save-snapshot-in-progress {
display: none;
font-size:160%;
opacity: 0.5;
position: relative;
margin-right: 7px;
top: -5px;
}
#wm-btns #wm-save-snapshot-success {
display: none;
color: green;
position: relative;
top: -7px;
}
#wm-btns #wm-save-snapshot-fail {
display: none;
color: red;
position: relative;
top: -7px;
}
.wm-icon-screen-shot {
background: url("../images/web-screenshot.svg") no-repeat !important;
background-size: contain !important;
width: 22px !important;
height: 19px !important;
display: inline-block;
}
#donato {
/* transition effect is disable so as to simplify height adjustment */
/*transition: height 0.5s;*/
height: 0;
margin: 0;
padding: 0;
border-bottom: 1px solid #999 !important;
}
body.wm-modal {
height: auto !important;
overflow: hidden !important;
}
#donato #donato-base {
width: 100%;
height: 100%;
/*bottom: 0;*/
margin: 0;
padding: 0;
position: absolute;
z-index: 2147483639;
}
body.wm-modal #donato #donato-base {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 2147483640;
}
.wb-autocomplete-suggestions {
font-family: Lucida Grande, Helvetica, Arial, sans-serif;
font-size: 12px;
text-align: left;
cursor: default;
border: 1px solid #ccc;
border-top: 0;
background: #fff;
box-shadow: -1px 1px 3px rgba(0,0,0,.1);
position: absolute;
display: none;
z-index: 2147483647;
max-height: 254px;
overflow: hidden;
overflow-y: auto;
box-sizing: border-box;
}
.wb-autocomplete-suggestion {
position: relative;
padding: 0 .6em;
line-height: 23px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 1.02em;
color: #333;
}
.wb-autocomplete-suggestion b {
font-weight: bold;
}
.wb-autocomplete-suggestion.selected {
background: #f0f0f0;
}
@@ -0,0 +1,123 @@
var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
{
let window = _____WB$wombat$assign$function_____("window");
let self = _____WB$wombat$assign$function_____("self");
let document = _____WB$wombat$assign$function_____("document");
let location = _____WB$wombat$assign$function_____("location");
let top = _____WB$wombat$assign$function_____("top");
let parent = _____WB$wombat$assign$function_____("parent");
let frames = _____WB$wombat$assign$function_____("frames");
let opener = _____WB$wombat$assign$function_____("opener");
<!--
// Image Swap Restore
function MM_swapImgRestore() { //v2.0
if (document.MM_swapImgData != null)
for (var i=0; i<(document.MM_swapImgData.length-1); i+=2)
document.MM_swapImgData[i].src = document.MM_swapImgData[i+1];
}
// Image Swap
function MM_swapImage() { //v2.0
var i,j=0,objStr,obj,swapArray=new Array,oldArray=document.MM_swapImgData;
for (i=0; i < (MM_swapImage.arguments.length-2); i+=3) {
objStr = MM_swapImage.arguments[(navigator.appName == 'Netscape')?i:i+1];
if ((objStr.indexOf('document.layers[')==0 && document.layers==null) ||
(objStr.indexOf('document.all[') ==0 && document.all ==null))
objStr = 'document'+objStr.substring(objStr.lastIndexOf('.'),objStr.length);
obj = eval(objStr);
if (obj != null) {
swapArray[j++] = obj;
swapArray[j++] = (oldArray==null || oldArray[j-1]!=obj)?obj.src:oldArray[j];
obj.src = MM_swapImage.arguments[i+2];
} }
document.MM_swapImgData = swapArray; //used for restore
}
function MM_showHideLayers() { //v2.0
var i, visStr, args, theObj;
args = MM_showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) { //with arg triples (objNS,objIE,visStr)
visStr = args[i+2];
if (navigator.appName == 'Netscape' && document.layers != null) {
theObj = eval(args[i]);
if (theObj) theObj.visibility = visStr;
} else if (document.all != null) { //IE
if (visStr == 'show') visStr = 'visible'; //convert vals
if (visStr == 'hide') visStr = 'hidden';
theObj = eval(args[i+1]);
if (theObj) theObj.style.visibility = visStr;
} }
}
function pulldown(formObj)
{
url = formObj.options[formObj.options.selectedIndex].value;
if(url != "empty")
{
window.location = url;
url = "";
}
}
// This checks to see if the window's dimensions have actually changed
// (because Netscape often fires a false onResize event when it forms scrollbars);
// if they have, the document is reloaded.
// Note that document.location is not supposed to be settable, but here's another
// case where the implementation does not match the specs.
function resizeFix(){
if(document.resizeFix.initWidth!=window.innerWidth
||document.resizeFix.initHeight!=window.innerHeight)
document.location=document.location;
}
// This function checks to see if the browser supports the Layer object (i.e., Netscape 4.X);
// if it does, then it creates a new object with properties to hold the current window width & height
// and assigns the resizeFix() function to the window's onResize event
function checkBrowser(){
if(document.layers){
if(typeof document.fix == "undefined"){
document.resizeFix=new Object();
document.resizeFix.initWidth=window.innerWidth;
document.resizeFix.initHeight=window.innerHeight;
}
window.onresize=resizeFix;
}
}
// This calls the browser check function above
checkBrowser();
//-->
}
/*
FILE ARCHIVED ON 00:27:23 Jul 15, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
captures_list: 247.578
exclusion.robots: 0.081
exclusion.robots.policy: 0.073
cdx.remote: 0.069
esindex: 0.011
LoadShardBlock: 149.267 (3)
PetaboxLoader3.datanode: 90.991 (4)
CDXLines.iter: 18.401 (3)
PetaboxLoader3.resolve: 75.892 (2)
load_resource: 51.672
*/
Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1018 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

@@ -0,0 +1,116 @@
@font-face{font-family:'Iconochive-Regular';src:url('https://archive.org/includes/fonts/Iconochive-Regular.eot?-ccsheb');src:url('https://archive.org/includes/fonts/Iconochive-Regular.eot?#iefix-ccsheb') format('embedded-opentype'),url('https://archive.org/includes/fonts/Iconochive-Regular.woff?-ccsheb') format('woff'),url('https://archive.org/includes/fonts/Iconochive-Regular.ttf?-ccsheb') format('truetype'),url('https://archive.org/includes/fonts/Iconochive-Regular.svg?-ccsheb#Iconochive-Regular') format('svg');font-weight:normal;font-style:normal}
[class^="iconochive-"],[class*=" iconochive-"]{font-family:'Iconochive-Regular'!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
.iconochive-Uplevel:before{content:"\21b5"}
.iconochive-exit:before{content:"\1f6a3"}
.iconochive-beta:before{content:"\3b2"}
.iconochive-logo:before{content:"\1f3db"}
.iconochive-audio:before{content:"\1f568"}
.iconochive-movies:before{content:"\1f39e"}
.iconochive-software:before{content:"\1f4be"}
.iconochive-texts:before{content:"\1f56e"}
.iconochive-etree:before{content:"\1f3a4"}
.iconochive-image:before{content:"\1f5bc"}
.iconochive-web:before{content:"\1f5d4"}
.iconochive-collection:before{content:"\2211"}
.iconochive-folder:before{content:"\1f4c2"}
.iconochive-data:before{content:"\1f5c3"}
.iconochive-tv:before{content:"\1f4fa"}
.iconochive-article:before{content:"\1f5cf"}
.iconochive-question:before{content:"\2370"}
.iconochive-question-dark:before{content:"\3f"}
.iconochive-info:before{content:"\69"}
.iconochive-info-small:before{content:"\24d8"}
.iconochive-comment:before{content:"\1f5e9"}
.iconochive-comments:before{content:"\1f5ea"}
.iconochive-person:before{content:"\1f464"}
.iconochive-people:before{content:"\1f465"}
.iconochive-eye:before{content:"\1f441"}
.iconochive-rss:before{content:"\221e"}
.iconochive-time:before{content:"\1f551"}
.iconochive-quote:before{content:"\275d"}
.iconochive-disc:before{content:"\1f4bf"}
.iconochive-tv-commercial:before{content:"\1f4b0"}
.iconochive-search:before{content:"\1f50d"}
.iconochive-search-star:before{content:"\273d"}
.iconochive-tiles:before{content:"\229e"}
.iconochive-list:before{content:"\21f6"}
.iconochive-list-bulleted:before{content:"\2317"}
.iconochive-latest:before{content:"\2208"}
.iconochive-left:before{content:"\2c2"}
.iconochive-right:before{content:"\2c3"}
.iconochive-left-solid:before{content:"\25c2"}
.iconochive-right-solid:before{content:"\25b8"}
.iconochive-up-solid:before{content:"\25b4"}
.iconochive-down-solid:before{content:"\25be"}
.iconochive-dot:before{content:"\23e4"}
.iconochive-dots:before{content:"\25a6"}
.iconochive-columns:before{content:"\25af"}
.iconochive-sort:before{content:"\21d5"}
.iconochive-atoz:before{content:"\1f524"}
.iconochive-ztoa:before{content:"\1f525"}
.iconochive-upload:before{content:"\1f4e4"}
.iconochive-download:before{content:"\1f4e5"}
.iconochive-favorite:before{content:"\2605"}
.iconochive-heart:before{content:"\2665"}
.iconochive-play:before{content:"\25b6"}
.iconochive-play-framed:before{content:"\1f3ac"}
.iconochive-fullscreen:before{content:"\26f6"}
.iconochive-mute:before{content:"\1f507"}
.iconochive-unmute:before{content:"\1f50a"}
.iconochive-share:before{content:"\1f381"}
.iconochive-edit:before{content:"\270e"}
.iconochive-reedit:before{content:"\2710"}
.iconochive-gear:before{content:"\2699"}
.iconochive-remove-circle:before{content:"\274e"}
.iconochive-plus-circle:before{content:"\1f5d6"}
.iconochive-minus-circle:before{content:"\1f5d5"}
.iconochive-x:before{content:"\1f5d9"}
.iconochive-fork:before{content:"\22d4"}
.iconochive-trash:before{content:"\1f5d1"}
.iconochive-warning:before{content:"\26a0"}
.iconochive-flash:before{content:"\1f5f2"}
.iconochive-world:before{content:"\1f5fa"}
.iconochive-lock:before{content:"\1f512"}
.iconochive-unlock:before{content:"\1f513"}
.iconochive-twitter:before{content:"\1f426"}
.iconochive-facebook:before{content:"\66"}
.iconochive-googleplus:before{content:"\67"}
.iconochive-reddit:before{content:"\1f47d"}
.iconochive-tumblr:before{content:"\54"}
.iconochive-pinterest:before{content:"\1d4df"}
.iconochive-popcorn:before{content:"\1f4a5"}
.iconochive-email:before{content:"\1f4e7"}
.iconochive-embed:before{content:"\1f517"}
.iconochive-gamepad:before{content:"\1f579"}
.iconochive-Zoom_In:before{content:"\2b"}
.iconochive-Zoom_Out:before{content:"\2d"}
.iconochive-RSS:before{content:"\1f4e8"}
.iconochive-Light_Bulb:before{content:"\1f4a1"}
.iconochive-Add:before{content:"\2295"}
.iconochive-Tab_Activity:before{content:"\2318"}
.iconochive-Forward:before{content:"\23e9"}
.iconochive-Backward:before{content:"\23ea"}
.iconochive-No_Audio:before{content:"\1f508"}
.iconochive-Pause:before{content:"\23f8"}
.iconochive-No_Favorite:before{content:"\2606"}
.iconochive-Unike:before{content:"\2661"}
.iconochive-Song:before{content:"\266b"}
.iconochive-No_Flag:before{content:"\2690"}
.iconochive-Flag:before{content:"\2691"}
.iconochive-Done:before{content:"\2713"}
.iconochive-Check:before{content:"\2714"}
.iconochive-Refresh:before{content:"\27f3"}
.iconochive-Headphones:before{content:"\1f3a7"}
.iconochive-Chart:before{content:"\1f4c8"}
.iconochive-Bookmark:before{content:"\1f4d1"}
.iconochive-Documents:before{content:"\1f4da"}
.iconochive-Newspaper:before{content:"\1f4f0"}
.iconochive-Podcast:before{content:"\1f4f6"}
.iconochive-Radio:before{content:"\1f4fb"}
.iconochive-Cassette:before{content:"\1f4fc"}
.iconochive-Shuffle:before{content:"\1f500"}
.iconochive-Loop:before{content:"\1f501"}
.iconochive-Low_Audio:before{content:"\1f509"}
.iconochive-First:before{content:"\1f396"}
.iconochive-Invisible:before{content:"\1f576"}
.iconochive-Computer:before{content:"\1f5b3"}
@@ -0,0 +1,357 @@
var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
{
let window = _____WB$wombat$assign$function_____("window");
let self = _____WB$wombat$assign$function_____("self");
let document = _____WB$wombat$assign$function_____("document");
let location = _____WB$wombat$assign$function_____("location");
let top = _____WB$wombat$assign$function_____("top");
let parent = _____WB$wombat$assign$function_____("parent");
let frames = _____WB$wombat$assign$function_____("frames");
let opener = _____WB$wombat$assign$function_____("opener");
var menuDisplayHolder, menuKillHolder;
var flagMenuSwitch,menuTimeout, iloop, jloop,counter,strMatchOnMenu;
flagMenuSwitch="new";
counter = 0;
//----------------------------------------------------------------------------------------------------------
//menuHandler() function, here is the main function, called from the mouseover event.
//we check for which elements are lit and work our two array's appropriately
//first kill the killMenu function call.
//
//it receives three parameters parentLIO, currentMenu, and childMenu.
//----------------------------------------------------------------------------------------------------------
function menuHandler(parentLIO,currentMenu,childMenu)
{
var matchFlag;
matchFlag=false;
//kill menu killing function, we will check list and kill again soon.
if(flagMenuSwitch=="off")
{
clearTimeout(menuTimeout);
}
//if flagMenuSwitch is "new" then assign base level stuff
if(flagMenuSwitch=="new")
{
//assign base here
menuDisplayHolder=currentMenu+","+childMenu;
menuKillHolder=menuDisplayArray;
}//end flagMenuSwitch "new" check
//if flagMenuSwitch is "off" then we got a hit (might be "on") depends on how good the handler is
//here we do build the correct array's
if(flagMenuSwitch == "off"||flagMenuSwitch=="on")
{
//menuDisplayHolder equals
var menuDisplayArray,matchFlag;
matchFlag=false;
menuDisplayArray = menuDisplayHolder.split(",");
//------------------------------------------------------------------------
//fill menuKillHolder
//loop and look for match
for(iloop=0;iloop<menuDisplayArray.length-1;iloop++)
{
//match on current menu
if(menuDisplayArray[iloop]==currentMenu)
{
//clear out menuKillHolder
menuKillHolder="";
//-----------------------------------------------
//match on child menu
if(menuDisplayArray[iloop+1]==childMenu)
{
//back fill menuKillHolder
for(jloop = menuDisplayArray.length-1;jloop>(iloop+1);jloop--)
{
menuKillHolder = menuKillHolder +","+ menuDisplayArray[jloop]
}//end back fill
}//end found child menu match
//--------------------------------------------
//no match on child menu
else
{
//back fill menuKillHolder
for(jloop = menuDisplayArray.length-1;jloop>iloop;jloop--)
{
menuKillHolder = menuKillHolder +","+ menuDisplayArray[jloop];
}//end back fill
}//end no child menu match found
}//end found match on current menu
//if there is no match on the current menu then we don't need to touch the
//menuKillHolder as it means we are killing the whole shabang.
}//end loop
//---------------------------------------------------------------------
//refill menuDisplayHolder
//loop and look for match
for(iloop=0;iloop<menuDisplayArray.length;iloop++)
{
//>>>>>>got match will travel
if(menuDisplayArray[iloop]==currentMenu)
{
menuDisplayHolder="";
matchFlag=true;
//>>>>>match on current and child menu
if(menuDisplayArray[iloop+1]==childMenu)
{
for(jloop = 0;jloop<=iloop+1;jloop++)
{
//add a coma if necessary
if(menuDisplayHolder!="")menuDisplayHolder=menuDisplayHolder+",";
menuDisplayHolder = menuDisplayHolder + menuDisplayArray[jloop];
}//end build menuDisplayHolder with only current menu match
}//end check for child menu match
//>>>>>>match on only current menu
else
{
for(jloop = 0;jloop<=iloop;jloop++)
{
//add a coma if necessary
if(menuDisplayHolder!="")menuDisplayHolder=menuDisplayHolder+",";
menuDisplayHolder = menuDisplayHolder + menuDisplayArray[jloop];
}//end build menuDisplayHolder with only current menu match
//add child menu
if(childMenu!=""||childMenu!="null")
{
//add a coma if necessary
if(menuDisplayHolder!="")menuDisplayHolder=menuDisplayHolder+",";
menuDisplayHolder=menuDisplayHolder+childMenu;
}//end add new child menu
}//end no match on child leg
}//end if check for current menu match
}//loop end menuDisplayHolder building
//>>>>>>check if we found a match
//>>>>>>if not then fill with base and don't touch killMenuHolder
if(matchFlag==false)
{
//assign base here
menuDisplayHolder=currentMenu+","+childMenu;
}
}//end flagMenuSwitch "on/off" check
//------------------------------------------------------------------
//finish out the routines: kill, light, set var's
//kill it if we need to
if(flagMenuSwitch!="new")
{
killMenu("notAll");
}
//send the light order
lightMenu();
//set flag
flagMenuSwitch="on";
menuKillHolder=menuDisplayHolder;
}//end menuHandler() function
//-----------------------------------------------------------------------------
//lightMenu() function fires up the correct menu's depending on
//the two elements passed. Light up the whole array
//-----------------------------------------------------------------------------
function lightMenu()
{
var menuDisplayArray;
menuDisplayArray=menuDisplayHolder.split(",");
//we start at 1 because the zero'th element should be the root
for(iloop = 1;iloop<menuDisplayArray.length;iloop++)
{
//check for null child
if(menuDisplayArray[iloop]!="null")
{
if(eval("document."+menuDisplayArray[iloop])){
eval("document."+menuDisplayArray[iloop]+".visibility='show';");
}
}//end check for "null" child menu
}//end loop
}//end lightMenu() function
//-------------------------------------------------------------------------------------------------------------------------------
//this function initiallizes the kill menu function, if there are no mouseover events then it kills all menus
//-------------------------------------------------------------------------------------------------------------------------------
function hideMenu()
{
//set a timeout and then kill all the menu's
//we will check in menuHandler() to see if some stay lit.
menuTimeout= setTimeout("killMenu('all');",800);
flagMenuSwitch="off";
}//end hideMenu() function
//----------------------------------------------------------------------------------------------
//kill appropriate menu's, if we are getting here via the hideMenu() funciton
//then kill all the menu's this is known from the passed value 'apocolypse'
//----------------------------------------------------------------------------------------------
function killMenu(apocolypse)
{
if(apocolypse=="all")menuKillHolder=menuDisplayHolder;
var menuKillArray = menuKillHolder.split(",");
//loop and kill
//we start at 1 because the zero'th element should be the root
for(iloop=1;iloop<menuKillArray.length;iloop++)
{
if(menuKillArray[iloop]!="null")
{
if(eval("document."+menuKillArray[iloop])){
eval("document."+menuKillArray[iloop]+".visibility='hide';");
}
}
}//end loop
//if we are completely out, clear both array's and set flag to new
if(apocolypse=="all")
{
menuDisplayHolder = "";
menuKillHolder = "";
flagMenuSwitch = "new";
}
}//end kill menu function
//capture the click method and navigate to location
function goBabyGo(goString)
{
window.location.href= goString;
}
}
/*
FILE ARCHIVED ON 00:27:23 Jul 15, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
captures_list: 131.167
exclusion.robots: 0.063
exclusion.robots.policy: 0.056
RedisCDXSource: 2.283
esindex: 0.005
LoadShardBlock: 110.923 (3)
PetaboxLoader3.datanode: 88.298 (4)
CDXLines.iter: 13.202 (3)
load_resource: 134.626
PetaboxLoader3.resolve: 107.478
*/
@@ -0,0 +1,37 @@
<style type="text/css">
.headerRed{color:#CC0000;font-size:22px;font-family:trebuchet ms, arial, verdana}
.headerBlack{color:#000000;font-size:22px;font-family:trebuchet ms, arial, verdana}
.midBlack{color:#000000;font-size:18px;font-family:trebuchet ms, arial, verdana}
.midRed{color:#CC0000;font-size:18px;font-family:trebuchet ms, arial, verdana}
.maintext{color:black;font-size:15px;font-family:trebuchet ms, arial, verdana}
.smalltext{color:black;font-size:11px;font-family : verdana, arial, helvetica, sans serif}
.headTopic{font-size : 12px;font-weight:bold;font-family : verdana, arial, helvetica, sans serif;color : #000066;text-decoration:none}
.topicTitle {font-size : 18px; font-family : verdana, arial, helvetica,sans serif; font-weight : bold; color : #ffffff}
.newsText{color:#000033;font-size:11px;text-decoration:none;font-family : verdana, arial, helvetica, sans serif}
.newsDate{color:black;font-size:11px;font-family : verdana, arial, helvetica, sans serif}
</style><!--
FILE ARCHIVED ON 21:18:28 Aug 21, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
-->
<!--
playback timings (ms):
captures_list: 96.352
exclusion.robots: 0.069
exclusion.robots.policy: 0.061
cdx.remote: 0.062
esindex: 0.009
LoadShardBlock: 49.34 (3)
PetaboxLoader3.datanode: 72.663 (5)
CDXLines.iter: 17.352 (3)
load_resource: 131.138 (2)
PetaboxLoader3.resolve: 62.075 (2)
-->
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

@@ -0,0 +1,304 @@
<style type="text/css">
.headerRed{color:#CC0000;font-size:22px;font-family:trebuchet ms, arial, verdana}
.headerBlack{color:#000000;font-size:22px;font-family:trebuchet ms, arial, verdana}
.midBlack{color:#000000;font-size:18px;font-family:trebuchet ms, arial, verdana}
.midRed{color:#CC0000;font-size:18px;font-family:trebuchet ms, arial, verdana}
.maintext{color:black;font-size:15px;font-family:trebuchet ms, arial, verdana}
.smalltext{color:black;font-size:11px;font-family : verdana, arial, helvetica, sans serif}
.headTopic{font-size : 12px;font-weight:bold;font-family : verdana, arial, helvetica, sans serif;color : #000066;text-decoration:none}
.topicTitle {font-size : 18px; font-family : verdana, arial, helvetica,sans serif; font-weight : bold; color : #ffffff}
.navTopBullet{color: #CC0033;font-size:18px;font-weight:bold;line-height:15px;font-family : arial, helvetica, sans serif}
.menuItem{color: #000000;font-size:11px;text-decoration:none;font-family : verdana, arial, helvetica, sans serif}
A.menuitem:hover {color: #CC0033}
.navTop{color: #000000;font-size:14px;text-decoration:none;font-family : arial, helvetica, sans serif}
a.navTop { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #FFFFFF; text-decoration:none}
a.navTop:link{color:#ffffff}
a.navTop:visited{color:#ffffff}
A.navTop:hover {color: #FF0000}
A.navTop:active {}
.navSide{color: #000000;font-size:14px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide:hover {color: #CC0000}
A.navSide:active {}
.navSideW{color: #F8F8F8;font-size:15px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSideW:hover {color: #FFCC00}
A.navSideW:active {}
.navSide1{color: #4D4D4D;font-size:11px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide1:hover {color: #CC0000}
A.navSide1:active {}
.navSide1a{color: #272727;font-size:11px;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide1a:hover {color: #CC0000}
A.navSide1a:active {}
.navSide2{color: #000000;font-size:13px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide2:hover {color: #CC0000}
A.navSide2:active {}
.navSide4{color: #000000;font-size:13px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide4:hover {color: #CC0000}
A.navSide4:active {}
.navSide5{color: #000000;font-size:12px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide5:hover {color: #CC0000}
A.navSide5:active {}
.navSide6{color: #000000;font-size:11px;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide6:hover {color: #CC0000}
A.navSide6:active {}
.newsText{color:#000033;font-size:11px;text-decoration:none;font-family : verdana, arial, helvetica, sans serif}
.newsDate{color:black;font-size:11px;font-family : verdana, arial, helvetica, sans serif}
.sidelink {font-family: Arial, Helvetica, sans-serif; font-size: 9pt; color: #000000; text-decoration: none}
A.sidelink:hover {color: #FF3333}
.sidelink_brand {font-family: Arial, Helvetica, sans-serif; font-size: 10pt; color: #000000; text-decoration: none}
A.sidelink_brand:hover {color: #FF3333}
.sidelink2 {font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #CC0000; text-decoration: none; font-weight: bold}
A.sidelink2:hover {color: #000000}
.sidelink3 {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #CC0000; text-decoration: none}
A.sidelink3:hover {color: #000000}
.header1 {font-family: Arial, Helvetica, sans-serif; font-size: 18px; color: #000000; text-decoration: none}
.sublink1 {font-family: Arial, Helvetica, sans-serif; font-size: 11pt; color: #000000; text-decoration: none}
A.sublink1:hover {color: #FF3333}
.rightheadline {font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #CC0000; text-decoration: none}
.rightlink {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
A.rightlink:hover {color: #CC0000}
.righttext {font-family: Arial, Helvetica, sans-serif; font-size: 11px;font-weight:normal; color: #000000; text-decoration: none}
.righttext1 {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; text-decoration: none}
.righttext2 {font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #000000; text-decoration: none}
.righttext3 {font-family: Arial, Helvetica, sans-serif; font-size: 15px;font-weight:bold; color: #CC0000; text-decoration: none}
.righttext4 {font-family: Arial, Helvetica, sans-serif; font-size: 12px;font-weight:bold; color: #000000; text-decoration: none}
.printerfriendly {font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; text-decoration: none}
a.printerfriendly:hover {color: #CC0000}
.boxlinks {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
a.boxlinks:hover {color: #CC0000}
.boxlinksgrey {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #666666; text-decoration: none}
.boxlinksred {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #790000; text-decoration: none}
.boxlinks2 {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; text-decoration: none}
a.boxlinks2:hover {color: #CC0000}
.archivelink {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CC0000; text-decoration: none}
a.archivelink:hover {color: #000000}
.chatlink {font-family: Arial, Helvetica, sans-serif; font-size: 11px;font-weight:bold; color: #000000; text-decoration: none}
.chattext {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; text-decoration: none}
a.chatlink:hover {color: #CC0000}
.chatlink2 {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
a.chatlink2:hover {color: #CC0000}
.footerlink {font-family: Arial, Helvetica, sans-serif; font-size: 12px;font-weight:normal; color: #000000; text-decoration: none}
a.footerlink:hover {color: #CC0000}
.templeft{color: #000000;font-size:12px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.templeft:hover {color: #CC0000}
A.templeft:active {}
p {color: #000000;font-size:12px;font-family : arial, helvetica, sans serif}
p, td, ul, ol, body {font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000}
.red { color: #CC0000; }
.featureheading {color: #000000;font-size:17px;font-family : arial, helvetica, sans serif; text-align: center;font-weight:bold}
.headline {color: #CC0000;font-size:30px;font-family : arial, helvetica, sans serif; text-align: center;font-weight:bold}
.subheading {color: #000000;font-size:18px;font-family : arial, helvetica, sans serif; text-align: center;font-weight:bold}
.byline {color: #000000;font-size:11px;font-family : arial, helvetica, sans serif; text-align: center}
.linecolor {color : #f0f0f0}
.redheader {color: #cc0000;font-size:15px;font-family : arial, helvetica, sans serif;font-weight:bold}
.smallredheader {color: #993300;font-size:11px;font-family : arial, helvetica, sans serif}
.h1 {color: #000000;font-size:31px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h2 {color: #000000;font-size:25px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h3 {color: #000000;font-size:21px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h4 {color: #000000;font-size:17px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h5 {color: #000000;font-size:12px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h6 {color: #000000;font-size:9px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h1red {color: #CC0000;font-size:31px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h2red {color: #CC0000;font-size:25px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h3red {color: #CC0000;font-size:21px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h4red {color: #CC0000;font-size:17px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h5red {color: #CC0000;font-size:12px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h6red {color: #CC0000;font-size:9px;font-weight:bold;font-family : arial, helvetica, sans serif}
.size0 {color: #000000;font-size:9px;font-family : arial, helvetica, sans serif}
.size1 {color: #000000;font-size:10px;font-family : arial, helvetica, sans serif}
.size2 {color: #000000;font-size:12px;font-family : arial, helvetica, sans serif}
.size3 {color: #000000;font-size:15px;font-family : arial, helvetica, sans serif}
.size4 {color: #000000;font-size:19px;font-family : arial, helvetica, sans serif}
.size5 {color: #000000;font-size:23px;font-family : arial, helvetica, sans serif}
.size6 {color: #000000;font-size:30px;font-family : arial, helvetica, sans serif}
.size7 {color: #000000;font-size:42px;font-family : arial, helvetica, sans serif}
.size0red {color: #CC0000;font-size:9px;font-family : arial, helvetica, sans serif}
.size1red {color: #CC0000;font-size:10px;font-family : arial, helvetica, sans serif}
.size2red {color: #CC0000;font-size:12px;font-family : arial, helvetica, sans serif}
.size3red {color: #CC0000;font-size:15px;font-family : arial, helvetica, sans serif}
.size4red {color: #CC0000;font-size:19px;font-family : arial, helvetica, sans serif}
.size5red {color: #CC0000;font-size:23px;font-family : arial, helvetica, sans serif}
.size6red {color: #CC0000;font-size:30px;font-family : arial, helvetica, sans serif}
.size7red {color: #CC0000;font-size:42px;font-family : arial, helvetica, sans serif}
.link4 {color: #CC0000;font-size:17px; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
a.link4:hover {color: #000000;font-size:17px; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cboxhead {font-size: 15px; color: #CC0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
a.cboxhead:hover {color: #000000}
.cboxsubhead {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cboxbody {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
.fiftyrecent {font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #CC0000; text-decoration: none}
A.fiftyrecent:hover {color: #000000}
.search {font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #000000; text-decoration: none; font-weight: bold}
A.search:hover {color: #CC0000}
.prodhead {color: #ffffff;font-size:15px;font-family : arial, helvetica, sans serif}
.breadcrumb {font-size: 11px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
a.breadcrumb:hover {color: #CC0000}
.search2 {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #ffffff; text-decoration: none}
A.search2:hover {color: #ffff80}
.nboxhead {font-size: 12px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.nboxdate {font-size: 10px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.nboxarchive {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.nboxarchive:hover {color: #CC0000}
.footerlinknew {font-family: Arial, Helvetica, sans-serif; font-size: 11px;font-weight:normal; color: #ffffff; text-decoration: none}
a.footerlinknew:hover {color: #ffff80}
.prodlisthead {font-size: 11px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.prodlistlink {font-size: 11px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.prodlistlink:hover {color: #CC0000}
.serieslink {font-size: 10px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.serieslink:hover {color: #CC0000}
.seriesmore {font-size: 10px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.seriesmore:hover {color: #CC0000}
.articlehead {font-size: 12px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.articlehead:hover {color: #ffffae}
.cxboxhead {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.cxboxhead:hover {font-size: 12px; color: #8a0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cxboxbody {font-size: 10px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.cxboxbody:hover {color: #8a0000}
.cxboxsub {font-size: 11px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cnboxhead {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.cnboxhead:hover {font-size: 12px; color: #8a0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cnboxbody {font-size: 10px; color: #000000; line-height : 11px ; font-family : arial, helvetica, sans serif; text-decoration: none}
A.cnboxbody:hover {color: #8a0000}
.aaboxheadline {font-size: 11px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.aaboxheadline:hover {font-size: 11px; color: #8a0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.aaboxsubcat {font-size: 11px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
.aaboxdate {font-size: 10px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
.aaboxbyline {font-size: 10px; color: #000000; font-style: italic; font-family : arial, helvetica, sans serif; text-decoration: none}
.bxboxheadline {font-size: 12px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.bxboxheadline:hover {font-size: 12px; color: #ffffae; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.bxboxfrheadline {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.bxboxfrheadline:hover {font-size: 12px; color: #8a0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.bxboxbody {font-size: 11px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.bxboxbody:hover {font-size: 11px; color: #8a0000; font-family : arial, helvetica, sans serif; text-decoration: none}
.pflink {font-size: 10px; color: #4a4a4a; font-family : arial, helvetica, sans serif; text-decoration: none;}
A.pflink:hover {font-size: 10px; color: #CC0000; font-family : arial, helvetica, sans serif; text-decoration: none}
.listlink {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.listlink:hover {font-size: 12px; color: #8a0000; font-family : arial, helvetica, sans serif; text-decoration: none}
.glosslink {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.glosslink:hover {color: #CC0000}
.glossalphalink {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif}
A.glossalphalink:hover {color: #CC0000}
.glossterm {font-size: 16px; color: #CC0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.glosssource {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
DIV.boxscroll {
height: 77px;
overflow: auto;
width: 282px;
}
DIV.boxscroll2 {
height: 400px;
overflow: auto;
width: 300px;
border-width: 1px;
border-color: #b9b9b9;
border-style: solid;
}
BODY {SCROLLBAR-ARROW-COLOR: #f9f1d2; SCROLLBAR-BASE-COLOR: #b7a783}
</style><!--
FILE ARCHIVED ON 06:44:48 Aug 21, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
-->
<!--
playback timings (ms):
captures_list: 92.144
exclusion.robots: 0.064
exclusion.robots.policy: 0.057
RedisCDXSource: 0.576
esindex: 0.008
LoadShardBlock: 74.392 (3)
PetaboxLoader3.datanode: 96.465 (5)
CDXLines.iter: 13.703 (3)
load_resource: 136.157 (2)
PetaboxLoader3.resolve: 80.396 (2)
-->
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

@@ -0,0 +1,474 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3.0
/* eslint-disable no-var, semi, prefer-arrow-callback, prefer-template */
/**
* Collection of methods for sending analytics events to Archive.org's analytics server.
*
* These events are used for internal stats and sent (in anonymized form) to Google Analytics.
*
* @see analytics.md
*
* @type {Object}
*/
window.archive_analytics = (function defineArchiveAnalytics() {
// keep orignal Date object so as not to be affected by wayback's
// hijacking global Date object
var Date = window.Date;
var ARCHIVE_ANALYTICS_VERSION = 2;
var DEFAULT_SERVICE = 'ao_2';
var NO_SAMPLING_SERVICE = 'ao_no_sampling'; // sends every event instead of a percentage
var startTime = new Date();
/**
* @return {Boolean}
*/
function isPerformanceTimingApiSupported() {
return 'performance' in window && 'timing' in window.performance;
}
/**
* Determines how many milliseconds elapsed between the browser starting to parse the DOM and
* the current time.
*
* Uses the Performance API or a fallback value if it's not available.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number}
*/
function getLoadTime() {
var start;
if (isPerformanceTimingApiSupported())
start = window.performance.timing.domLoading;
else
start = startTime.getTime();
return new Date().getTime() - start;
}
/**
* Determines how many milliseconds elapsed between the user navigating to the page and
* the current time.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number|null} null if the browser doesn't support the Performance API
*/
function getNavToDoneTime() {
if (!isPerformanceTimingApiSupported())
return null;
return new Date().getTime() - window.performance.timing.navigationStart;
}
/**
* Performs an arithmetic calculation on a string with a number and unit, while maintaining
* the unit.
*
* @param {String} original value to modify, with a unit
* @param {Function} doOperation accepts one Number parameter, returns a Number
* @returns {String}
*/
function computeWithUnit(original, doOperation) {
var number = parseFloat(original, 10);
var unit = original.replace(/(\d*\.\d+)|\d+/, '');
return doOperation(number) + unit;
}
/**
* Computes the default font size of the browser.
*
* @returns {String|null} computed font-size with units (typically pixels), null if it cannot be computed
*/
function getDefaultFontSize() {
var fontSizeStr;
if (!('getComputedStyle' in window))
return null;
var style = window.getComputedStyle(document.documentElement);
if (!style)
return null;
fontSizeStr = style.fontSize;
// Don't modify the value if tracking book reader.
if (document.querySelector('#BookReader'))
return fontSizeStr;
return computeWithUnit(fontSizeStr, function reverseBootstrapFontSize(number) {
// Undo the 62.5% size applied in the Bootstrap CSS.
return number * 1.6;
});
}
/**
* Get the URL parameters for a given Location
* @param {Location}
* @return {Object} The URL parameters
*/
function getParams(location) {
if (!location) location = window.location;
var vars;
var i;
var pair;
var params = {};
var query = location.search;
if (!query) return params;
vars = query.substring(1).split('&');
for (i = 0; i < vars.length; i++) {
pair = vars[i].split('=');
params[pair[0]] = decodeURIComponent(pair[1]);
}
return params;
}
function getMetaProp(name) {
var metaTag = document.querySelector('meta[property=' + name + ']');
return metaTag ? metaTag.getAttribute('content') || null : null;
}
var ArchiveAnalytics = {
/**
* @type {String|null}
*/
service: getMetaProp('service'),
mediaType: getMetaProp('mediatype'),
primaryCollection: getMetaProp('primary_collection'),
/**
* Key-value pairs to send in pageviews (you can read this after a pageview to see what was
* sent).
*
* @type {Object}
*/
values: {},
/**
* Sends an analytics ping, preferably using navigator.sendBeacon()
* @param {Object} values
* @param {Function} [onload_callback] (deprecated) callback to invoke once ping to analytics server is done
* @param {Boolean} [augment_for_ao_site] (deprecated) if true, add some archive.org site-specific values
*/
send_ping: function send_ping(values, onload_callback, augment_for_ao_site) {
if (typeof window.navigator !== 'undefined' && typeof window.navigator.sendBeacon !== 'undefined')
this.send_ping_via_beacon(values);
else
this.send_ping_via_image(values);
},
/**
* Sends a ping via Beacon API
* NOTE: Assumes window.navigator.sendBeacon exists
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_beacon: function send_ping_via_beacon(values) {
var url = this.generate_tracking_url(values || {});
window.navigator.sendBeacon(url);
},
/**
* Sends a ping via Image object
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_image: function send_ping_via_image(values) {
var url = this.generate_tracking_url(values || {});
var loadtime_img = new Image(1, 1);
loadtime_img.src = url;
loadtime_img.alt = '';
},
/**
* Construct complete tracking URL containing payload
* @param {Object} params Tracking parameters to pass
* @return {String} URL to use for tracking call
*/
generate_tracking_url: function generate_tracking_url(params) {
var baseUrl = '//analytics.archive.org/0.gif';
var keys;
var outputParams = params;
var outputParamsArray = [];
outputParams.service = outputParams.service || this.service || DEFAULT_SERVICE;
// Build array of querystring parameters
keys = Object.keys(outputParams);
keys.forEach(function keyIteration(key) {
outputParamsArray.push(encodeURIComponent(key) + '=' + encodeURIComponent(outputParams[key]));
});
outputParamsArray.push('version=' + ARCHIVE_ANALYTICS_VERSION);
outputParamsArray.push('count=' + (keys.length + 2)); // Include `version` and `count` in count
return baseUrl + '?' + outputParamsArray.join('&');
},
/**
* @param {int} page Page number
*/
send_scroll_fetch_event: function send_scroll_fetch_event(page) {
var additionalValues = { ev: page };
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch', location.pathname, additionalValues);
},
send_scroll_fetch_base_event: function send_scroll_fetch_base_event() {
var additionalValues = {};
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch_base', location.pathname, additionalValues);
},
/**
* @param {Object} [options]
* @param {String} [options.mediaType]
* @param {String} [options.mediaLanguage]
* @param {String} [options.page] The path portion of the page URL
*/
send_pageview: function send_pageview(options) {
var settings = options || {};
var defaultFontSize;
var loadTime = getLoadTime();
var mediaType = settings.mediaType;
var primaryCollection = settings.primaryCollection;
var page = settings.page;
var navToDoneTime = getNavToDoneTime();
/**
* @return {String}
*/
function get_locale() {
if (navigator) {
if (navigator.language)
return navigator.language;
else if (navigator.browserLanguage)
return navigator.browserLanguage;
else if (navigator.systemLanguage)
return navigator.systemLanguage;
else if (navigator.userLanguage)
return navigator.userLanguage;
}
return '';
}
defaultFontSize = getDefaultFontSize();
// Set field values
this.values.kind = 'pageview';
this.values.timediff = (new Date().getTimezoneOffset()/60)*(-1); // *timezone* diff from UTC
this.values.locale = get_locale();
this.values.referrer = (document.referrer == '' ? '-' : document.referrer);
if (loadTime)
this.values.loadtime = loadTime;
if (navToDoneTime)
this.values.nav_to_done_ms = navToDoneTime;
if (settings.trackingId) {
this.values.ga_tid = settings.trackingId;
}
/* START CUSTOM DIMENSIONS */
if (defaultFontSize)
this.values.ga_cd1 = defaultFontSize;
if ('devicePixelRatio' in window)
this.values.ga_cd2 = window.devicePixelRatio;
if (mediaType)
this.values.ga_cd3 = mediaType;
if (settings.mediaLanguage) {
this.values.ga_cd4 = settings.mediaLanguage;
}
if (primaryCollection) {
this.values.ga_cd5 = primaryCollection;
}
/* END CUSTOM DIMENSIONS */
if (page)
this.values.page = page;
this.send_ping(this.values);
},
/**
* Sends a tracking "Event".
* @param {string} category
* @param {string} action
* @param {string} label
* @param {Object} additionalEventParams
*/
send_event: function send_event(
category,
action,
label,
additionalEventParams
) {
if (!label) label = window.location.pathname;
if (!additionalEventParams) additionalEventParams = {};
if (additionalEventParams.mediaLanguage) {
additionalEventParams.ga_cd4 = additionalEventParams.mediaLanguage;
delete additionalEventParams.mediaLanguage;
}
var eventParams = Object.assign(
{
kind: 'event',
ec: category,
ea: action,
el: label,
cache_bust: Math.random(),
},
additionalEventParams
);
this.send_ping(eventParams);
},
/**
* Sends every event instead of a small percentage.
*
* Use this sparingly as it can generate a lot of events.
*
* @param {string} category
* @param {string} action
* @param {string} label
* @param {Object} additionalEventParams
*/
send_event_no_sampling: function send_event_no_sampling(
category,
action,
label,
additionalEventParams
) {
var extraParams = additionalEventParams || {};
extraParams.service = NO_SAMPLING_SERVICE;
this.send_event(category, action, label, extraParams);
},
/**
* @param {Object} options see this.send_pageview options
*/
send_pageview_on_load: function send_pageview_on_load(options) {
var self = this;
window.addEventListener('load', function send_pageview_with_options() {
self.send_pageview(options);
});
},
/**
* Handles tracking events passed in URL.
* Assumes category and action values are separated by a "|" character.
* NOTE: Uses the unsampled analytics property. Watch out for future high click links!
* @param {Location}
*/
process_url_events: function process_url_events(location) {
var eventValues;
var actionValue;
var eventValue = getParams(location).iax;
if (!eventValue) return;
eventValues = eventValue.split('|');
actionValue = eventValues.length >= 1 ? eventValues[1] : '';
this.send_event_no_sampling(
eventValues[0],
actionValue,
window.location.pathname
);
},
/**
* Attaches handlers for event tracking.
*
* To enable click tracking for a link, add a `data-event-click-tracking`
* attribute containing the Google Analytics Event Category and Action, separated
* by a vertical pipe (|).
* e.g. `<a href="foobar" data-event-click-tracking="TopNav|FooBar">`
*
* To enable form submit tracking, add a `data-event-form-tracking` attribute
* to the `form` tag.
* e.g. `<form data-event-form-tracking="TopNav|SearchForm" method="GET">`
*
* Additional tracking options can be added via a `data-event-tracking-options`
* parameter. This parameter, if included, should be a JSON string of the parameters.
* Valid parameters are:
* - service {string}: Corresponds to the Google Analytics property data values flow into
*/
set_up_event_tracking: function set_up_event_tracking() {
var self = this;
var clickTrackingAttributeName = 'event-click-tracking';
var formTrackingAttributeName = 'event-form-tracking';
var trackingOptionsAttributeName = 'event-tracking-options';
function handleAction(event, attributeName) {
var selector = '[data-' + attributeName + ']';
var eventTarget = event.target;
if (!eventTarget) return;
var target = eventTarget.closest(selector);
if (!target) return;
var categoryAction;
var categoryActionParts;
var options;
categoryAction = target.dataset[toCamelCase(attributeName)];
if (!categoryAction) return;
categoryActionParts = categoryAction.split('|');
options = target.dataset[toCamelCase(trackingOptionsAttributeName)];
options = options ? JSON.parse(options) : {};
self.send_event(
categoryActionParts[0],
categoryActionParts[1],
categoryActionParts[2] || window.location.pathname,
options.service ? { service: options.service } : {}
);
}
function toCamelCase(str) {
return str.replace(/\W+(.)/g, function (match, chr) {
return chr.toUpperCase();
});
};
document.addEventListener('click', function(e) {
handleAction(e, clickTrackingAttributeName);
});
document.addEventListener('submit', function(e) {
handleAction(e, formTrackingAttributeName);
});
},
/**
* @returns {Object[]}
*/
get_data_packets: function get_data_packets() {
return [this.values];
},
/**
* Creates a tracking image for tracking JS compatibility.
*
* @param {string} type The type value for track_js_case in query params for 0.gif
*/
create_tracking_image: function create_tracking_image(type) {
this.send_ping_via_image({
cache_bust: Math.random(),
kind: 'track_js',
track_js_case: type,
});
}
};
return ArchiveAnalytics;
}());
// @license-end
@@ -0,0 +1,507 @@
@import 'record.css'; /* for SPN1 */
#wm-ipp-base {
height:65px;/* initial height just in case js code fails */
padding:0;
margin:0;
border:none;
background:none transparent;
}
#wm-ipp {
z-index: 2147483647;
}
#wm-ipp, #wm-ipp * {
font-family:Lucida Grande, Helvetica, Arial, sans-serif;
font-size:12px;
line-height:1.2;
letter-spacing:0;
width:auto;
height:auto;
max-width:none;
max-height:none;
min-width:0 !important;
min-height:0;
outline:none;
float:none;
text-align:left;
border:none;
color: #000;
text-indent: 0;
position: initial;
background: none;
}
#wm-ipp div, #wm-ipp canvas {
display: block;
}
#wm-ipp div, #wm-ipp tr, #wm-ipp td, #wm-ipp a, #wm-ipp form {
padding:0;
margin:0;
border:none;
border-radius:0;
background-color:transparent;
background-image:none;
/*z-index:2147483640;*/
height:auto;
}
#wm-ipp table {
border:none;
border-collapse:collapse;
margin:0;
padding:0;
width:auto;
font-size:inherit;
}
#wm-ipp form input {
padding:1px !important;
height:auto;
display:inline;
margin:0;
color: #000;
background: none #fff;
border: 1px solid #666;
}
#wm-ipp form input[type=submit] {
padding:0 8px !important;
margin:1px 0 1px 5px !important;
width:auto !important;
border: 1px solid #000 !important;
background: #fff !important;
color: #000 !important;
}
#wm-ipp form input[type=submit]:hover {
background: #eee !important;
cursor: pointer !important;
}
#wm-ipp form input[type=submit]:active {
transform: translateY(1px);
}
#wm-ipp a {
display: inline;
}
#wm-ipp a:hover{
text-decoration:underline;
}
#wm-ipp a.wm-btn:hover {
text-decoration:none;
color:#ff0 !important;
}
#wm-ipp a.wm-btn:hover span {
color:#ff0 !important;
}
#wm-ipp #wm-ipp-inside {
margin: 0 6px;
border:5px solid #000;
border-top:none;
background-color:rgba(255,255,255,0.9);
-moz-box-shadow:1px 1px 4px #333;
-webkit-box-shadow:1px 1px 4px #333;
box-shadow:1px 1px 4px #333;
border-radius:0 0 8px 8px;
}
/* selectors are intentionally verbose to ensure priority */
#wm-ipp #wm-logo {
padding:0 10px;
vertical-align:middle;
min-width:100px;
flex: 0 0 100px;
}
#wm-ipp .c {
padding-left: 4px;
}
#wm-ipp .c .u {
margin-top: 4px !important;
}
#wm-ipp .n {
padding:0 0 0 5px !important;
vertical-align: bottom;
}
#wm-ipp .n a {
text-decoration:none;
color:#33f;
font-weight:bold;
}
#wm-ipp .n .b {
padding:0 6px 0 0 !important;
text-align:right !important;
overflow:visible;
white-space:nowrap;
color:#99a;
vertical-align:middle;
}
#wm-ipp .n .y .b {
padding:0 6px 2px 0 !important;
}
#wm-ipp .n .c {
background:#000;
color:#ff0;
font-weight:bold;
padding:0 !important;
text-align:center;
}
#wm-ipp.hi .n td.c {
color:#ec008c;
}
#wm-ipp .n td.f {
padding:0 0 0 6px !important;
text-align:left !important;
overflow:visible;
white-space:nowrap;
color:#99a;
vertical-align:middle;
}
#wm-ipp .n tr.m td {
text-transform:uppercase;
white-space:nowrap;
padding:2px 0;
}
#wm-ipp .c .s {
padding:0 5px 0 0 !important;
vertical-align:bottom;
}
#wm-ipp #wm-nav-captures {
white-space: nowrap;
}
#wm-ipp .c .s a.t {
color:#33f;
font-weight:bold;
line-height: 1.8;
}
#wm-ipp .c .s div.r {
color: #666;
font-size:9px;
white-space:nowrap;
}
#wm-ipp .c .k {
padding-bottom:1px;
}
#wm-ipp .c .s {
padding:0 5px 2px 0 !important;
}
#wm-ipp td#displayMonthEl {
padding: 2px 0 !important;
}
#wm-ipp td#displayYearEl {
padding: 0 0 2px 0 !important;
}
div#wm-ipp-sparkline {
position:relative;/* for positioning markers */
white-space:nowrap;
background-color:#fff;
cursor:pointer;
line-height:0.9;
}
#sparklineImgId, #wm-sparkline-canvas {
position:relative;
z-index:9012;
max-width:none;
}
#wm-ipp-sparkline div.yt {
position:absolute;
z-index:9010 !important;
background-color:#ff0 !important;
top: 0;
}
#wm-ipp-sparkline div.mt {
position:absolute;
z-index:9013 !important;
background-color:#ec008c !important;
top: 0;
}
#wm-ipp .r {
margin-left: 4px;
}
#wm-ipp .r a {
color:#33f;
border:none;
position:relative;
background-color:transparent;
background-repeat:no-repeat !important;
background-position:100% 100% !important;
text-decoration: none;
}
#wm-ipp #wm-capinfo {
/* prevents notice div background from sticking into round corners of
#wm-ipp-inside */
border-radius: 0 0 4px 4px;
}
#wm-ipp #wm-capinfo .c-logo {
display:block;
float:left;
margin-right:3px;
width:90px;
min-height:90px;
max-height: 290px;
border-radius:45px;
overflow:hidden;
background-position:50%;
background-size:auto 90px;
box-shadow: 0 0 2px 2px rgba(208,208,208,128) inset;
}
#wm-ipp #wm-capinfo .c-logo span {
display:inline-block;
}
#wm-ipp #wm-capinfo .c-logo img {
height:90px;
position:relative;
left:-50%;
}
#wm-ipp #wm-capinfo .wm-title {
font-size:130%;
}
#wm-ipp #wm-capinfo a.wm-selector {
display:inline-block;
color: #aaa;
text-decoration:none !important;
padding: 2px 8px;
}
#wm-ipp #wm-capinfo a.wm-selector.selected {
background-color:#666;
}
#wm-ipp #wm-capinfo a.wm-selector:hover {
color: #fff;
}
#wm-ipp #wm-capinfo.notice-only #wm-capinfo-collected-by,
#wm-ipp #wm-capinfo.notice-only #wm-capinfo-timestamps {
display: none;
}
#wm-ipp #wm-capinfo #wm-capinfo-notice .wm-capinfo-content {
background-color:#ff0;
padding:5px;
font-size:14px;
text-align:center;
}
#wm-ipp #wm-capinfo #wm-capinfo-notice .wm-capinfo-content * {
font-size:14px;
text-align:center;
}
#wm-ipp #wm-expand {
right: 1px;
bottom: -1px;
color: #ffffff;
background-color: #666 !important;
padding:0 5px 0 3px !important;
border-radius: 3px 3px 0 0 !important;
}
#wm-ipp #wm-expand span {
color: #ffffff;
}
#wm-ipp #wm-expand #wm-expand-icon {
display: inline-block;
transition: transform 0.5s;
transform-origin: 50% 45%;
}
#wm-ipp #wm-expand.wm-open #wm-expand-icon {
transform: rotate(180deg);
}
#wm-ipp #wmtb {
text-align:right;
}
#wm-ipp #wmtb #wmtbURL {
width: calc(100% - 45px);
}
#wm-ipp #wm-graph-anchor {
border-right:1px solid #ccc;
}
/* time coherence */
html.wb-highlight {
box-shadow: inset 0 0 0 3px #a50e3a !important;
}
.wb-highlight {
outline: 3px solid #a50e3a !important;
}
#wm-ipp-print {
display:none !important;
}
@media print {
#wm-ipp-base {
display:none !important;
}
#wm-ipp-print {
display:block !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
@media (max-width:414px) {
#wm-ipp .xxs {
display:none !important;
}
}
@media (min-width:1055px) {
#wm-ipp #wm-graph-anchor {
display:block !important;
}
}
@media (max-width:1054px) {
#wm-ipp #wm-graph-anchor {
display:none !important;
}
}
@media (max-width:1163px) {
#wm-logo {
display:none !important;
}
}
#wm-btns {
white-space: nowrap;
margin-top: -2px;
}
#wm-btns #wm-save-snapshot-open {
margin-right: 7px;
top: -6px;
}
#wm-btns #wm-sign-in {
box-sizing: content-box;
display: none;
margin-right: 7px;
top: -8px;
/*
round border around sign in button
*/
border: 2px #000 solid;
border-radius: 14px;
padding-right: 2px;
padding-bottom: 2px;
width: 11px;
height: 11px;
}
#wm-btns #wm-sign-in>.iconochive-person {
font-size: 12.5px;
}
#wm-save-snapshot-open > .iconochive-web {
color:#000;
font-size:160%;
}
#wm-ipp #wm-share {
display: flex;
align-items: flex-end;
justify-content: space-between;
}
#wm-share > #wm-screenshot {
display: inline-block;
margin-right: 3px;
visibility: hidden;
}
#wm-screenshot > .iconochive-image {
color:#000;
font-size:160%;
}
#wm-share > #wm-video {
display: inline-block;
margin-right: 3px;
visibility: hidden;
}
#wm-video > .iconochive-movies {
color: #000;
display: inline-block;
font-size: 150%;
margin-bottom: 2px;
}
#wm-btns #wm-save-snapshot-in-progress {
display: none;
font-size:160%;
opacity: 0.5;
position: relative;
margin-right: 7px;
top: -5px;
}
#wm-btns #wm-save-snapshot-success {
display: none;
color: green;
position: relative;
top: -7px;
}
#wm-btns #wm-save-snapshot-fail {
display: none;
color: red;
position: relative;
top: -7px;
}
.wm-icon-screen-shot {
background: url("../images/web-screenshot.svg") no-repeat !important;
background-size: contain !important;
width: 22px !important;
height: 19px !important;
display: inline-block;
}
#donato {
/* transition effect is disable so as to simplify height adjustment */
/*transition: height 0.5s;*/
height: 0;
margin: 0;
padding: 0;
border-bottom: 1px solid #999 !important;
}
body.wm-modal {
height: auto !important;
overflow: hidden !important;
}
#donato #donato-base {
width: 100%;
height: 100%;
/*bottom: 0;*/
margin: 0;
padding: 0;
position: absolute;
z-index: 2147483639;
}
body.wm-modal #donato #donato-base {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 2147483640;
}
.wb-autocomplete-suggestions {
font-family: Lucida Grande, Helvetica, Arial, sans-serif;
font-size: 12px;
text-align: left;
cursor: default;
border: 1px solid #ccc;
border-top: 0;
background: #fff;
box-shadow: -1px 1px 3px rgba(0,0,0,.1);
position: absolute;
display: none;
z-index: 2147483647;
max-height: 254px;
overflow: hidden;
overflow-y: auto;
box-sizing: border-box;
}
.wb-autocomplete-suggestion {
position: relative;
padding: 0 .6em;
line-height: 23px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 1.02em;
color: #333;
}
.wb-autocomplete-suggestion b {
font-weight: bold;
}
.wb-autocomplete-suggestion.selected {
background: #f0f0f0;
}
@@ -0,0 +1,123 @@
var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
{
let window = _____WB$wombat$assign$function_____("window");
let self = _____WB$wombat$assign$function_____("self");
let document = _____WB$wombat$assign$function_____("document");
let location = _____WB$wombat$assign$function_____("location");
let top = _____WB$wombat$assign$function_____("top");
let parent = _____WB$wombat$assign$function_____("parent");
let frames = _____WB$wombat$assign$function_____("frames");
let opener = _____WB$wombat$assign$function_____("opener");
<!--
// Image Swap Restore
function MM_swapImgRestore() { //v2.0
if (document.MM_swapImgData != null)
for (var i=0; i<(document.MM_swapImgData.length-1); i+=2)
document.MM_swapImgData[i].src = document.MM_swapImgData[i+1];
}
// Image Swap
function MM_swapImage() { //v2.0
var i,j=0,objStr,obj,swapArray=new Array,oldArray=document.MM_swapImgData;
for (i=0; i < (MM_swapImage.arguments.length-2); i+=3) {
objStr = MM_swapImage.arguments[(navigator.appName == 'Netscape')?i:i+1];
if ((objStr.indexOf('document.layers[')==0 && document.layers==null) ||
(objStr.indexOf('document.all[') ==0 && document.all ==null))
objStr = 'document'+objStr.substring(objStr.lastIndexOf('.'),objStr.length);
obj = eval(objStr);
if (obj != null) {
swapArray[j++] = obj;
swapArray[j++] = (oldArray==null || oldArray[j-1]!=obj)?obj.src:oldArray[j];
obj.src = MM_swapImage.arguments[i+2];
} }
document.MM_swapImgData = swapArray; //used for restore
}
function MM_showHideLayers() { //v2.0
var i, visStr, args, theObj;
args = MM_showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) { //with arg triples (objNS,objIE,visStr)
visStr = args[i+2];
if (navigator.appName == 'Netscape' && document.layers != null) {
theObj = eval(args[i]);
if (theObj) theObj.visibility = visStr;
} else if (document.all != null) { //IE
if (visStr == 'show') visStr = 'visible'; //convert vals
if (visStr == 'hide') visStr = 'hidden';
theObj = eval(args[i+1]);
if (theObj) theObj.style.visibility = visStr;
} }
}
function pulldown(formObj)
{
url = formObj.options[formObj.options.selectedIndex].value;
if(url != "empty")
{
window.location = url;
url = "";
}
}
// This checks to see if the window's dimensions have actually changed
// (because Netscape often fires a false onResize event when it forms scrollbars);
// if they have, the document is reloaded.
// Note that document.location is not supposed to be settable, but here's another
// case where the implementation does not match the specs.
function resizeFix(){
if(document.resizeFix.initWidth!=window.innerWidth
||document.resizeFix.initHeight!=window.innerHeight)
document.location=document.location;
}
// This function checks to see if the browser supports the Layer object (i.e., Netscape 4.X);
// if it does, then it creates a new object with properties to hold the current window width & height
// and assigns the resizeFix() function to the window's onResize event
function checkBrowser(){
if(document.layers){
if(typeof document.fix == "undefined"){
document.resizeFix=new Object();
document.resizeFix.initWidth=window.innerWidth;
document.resizeFix.initHeight=window.innerHeight;
}
window.onresize=resizeFix;
}
}
// This calls the browser check function above
checkBrowser();
//-->
}
/*
FILE ARCHIVED ON 00:27:23 Jul 15, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
captures_list: 247.578
exclusion.robots: 0.081
exclusion.robots.policy: 0.073
cdx.remote: 0.069
esindex: 0.011
LoadShardBlock: 149.267 (3)
PetaboxLoader3.datanode: 90.991 (4)
CDXLines.iter: 18.401 (3)
PetaboxLoader3.resolve: 75.892 (2)
load_resource: 51.672
*/
Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1018 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

@@ -0,0 +1,116 @@
@font-face{font-family:'Iconochive-Regular';src:url('https://archive.org/includes/fonts/Iconochive-Regular.eot?-ccsheb');src:url('https://archive.org/includes/fonts/Iconochive-Regular.eot?#iefix-ccsheb') format('embedded-opentype'),url('https://archive.org/includes/fonts/Iconochive-Regular.woff?-ccsheb') format('woff'),url('https://archive.org/includes/fonts/Iconochive-Regular.ttf?-ccsheb') format('truetype'),url('https://archive.org/includes/fonts/Iconochive-Regular.svg?-ccsheb#Iconochive-Regular') format('svg');font-weight:normal;font-style:normal}
[class^="iconochive-"],[class*=" iconochive-"]{font-family:'Iconochive-Regular'!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
.iconochive-Uplevel:before{content:"\21b5"}
.iconochive-exit:before{content:"\1f6a3"}
.iconochive-beta:before{content:"\3b2"}
.iconochive-logo:before{content:"\1f3db"}
.iconochive-audio:before{content:"\1f568"}
.iconochive-movies:before{content:"\1f39e"}
.iconochive-software:before{content:"\1f4be"}
.iconochive-texts:before{content:"\1f56e"}
.iconochive-etree:before{content:"\1f3a4"}
.iconochive-image:before{content:"\1f5bc"}
.iconochive-web:before{content:"\1f5d4"}
.iconochive-collection:before{content:"\2211"}
.iconochive-folder:before{content:"\1f4c2"}
.iconochive-data:before{content:"\1f5c3"}
.iconochive-tv:before{content:"\1f4fa"}
.iconochive-article:before{content:"\1f5cf"}
.iconochive-question:before{content:"\2370"}
.iconochive-question-dark:before{content:"\3f"}
.iconochive-info:before{content:"\69"}
.iconochive-info-small:before{content:"\24d8"}
.iconochive-comment:before{content:"\1f5e9"}
.iconochive-comments:before{content:"\1f5ea"}
.iconochive-person:before{content:"\1f464"}
.iconochive-people:before{content:"\1f465"}
.iconochive-eye:before{content:"\1f441"}
.iconochive-rss:before{content:"\221e"}
.iconochive-time:before{content:"\1f551"}
.iconochive-quote:before{content:"\275d"}
.iconochive-disc:before{content:"\1f4bf"}
.iconochive-tv-commercial:before{content:"\1f4b0"}
.iconochive-search:before{content:"\1f50d"}
.iconochive-search-star:before{content:"\273d"}
.iconochive-tiles:before{content:"\229e"}
.iconochive-list:before{content:"\21f6"}
.iconochive-list-bulleted:before{content:"\2317"}
.iconochive-latest:before{content:"\2208"}
.iconochive-left:before{content:"\2c2"}
.iconochive-right:before{content:"\2c3"}
.iconochive-left-solid:before{content:"\25c2"}
.iconochive-right-solid:before{content:"\25b8"}
.iconochive-up-solid:before{content:"\25b4"}
.iconochive-down-solid:before{content:"\25be"}
.iconochive-dot:before{content:"\23e4"}
.iconochive-dots:before{content:"\25a6"}
.iconochive-columns:before{content:"\25af"}
.iconochive-sort:before{content:"\21d5"}
.iconochive-atoz:before{content:"\1f524"}
.iconochive-ztoa:before{content:"\1f525"}
.iconochive-upload:before{content:"\1f4e4"}
.iconochive-download:before{content:"\1f4e5"}
.iconochive-favorite:before{content:"\2605"}
.iconochive-heart:before{content:"\2665"}
.iconochive-play:before{content:"\25b6"}
.iconochive-play-framed:before{content:"\1f3ac"}
.iconochive-fullscreen:before{content:"\26f6"}
.iconochive-mute:before{content:"\1f507"}
.iconochive-unmute:before{content:"\1f50a"}
.iconochive-share:before{content:"\1f381"}
.iconochive-edit:before{content:"\270e"}
.iconochive-reedit:before{content:"\2710"}
.iconochive-gear:before{content:"\2699"}
.iconochive-remove-circle:before{content:"\274e"}
.iconochive-plus-circle:before{content:"\1f5d6"}
.iconochive-minus-circle:before{content:"\1f5d5"}
.iconochive-x:before{content:"\1f5d9"}
.iconochive-fork:before{content:"\22d4"}
.iconochive-trash:before{content:"\1f5d1"}
.iconochive-warning:before{content:"\26a0"}
.iconochive-flash:before{content:"\1f5f2"}
.iconochive-world:before{content:"\1f5fa"}
.iconochive-lock:before{content:"\1f512"}
.iconochive-unlock:before{content:"\1f513"}
.iconochive-twitter:before{content:"\1f426"}
.iconochive-facebook:before{content:"\66"}
.iconochive-googleplus:before{content:"\67"}
.iconochive-reddit:before{content:"\1f47d"}
.iconochive-tumblr:before{content:"\54"}
.iconochive-pinterest:before{content:"\1d4df"}
.iconochive-popcorn:before{content:"\1f4a5"}
.iconochive-email:before{content:"\1f4e7"}
.iconochive-embed:before{content:"\1f517"}
.iconochive-gamepad:before{content:"\1f579"}
.iconochive-Zoom_In:before{content:"\2b"}
.iconochive-Zoom_Out:before{content:"\2d"}
.iconochive-RSS:before{content:"\1f4e8"}
.iconochive-Light_Bulb:before{content:"\1f4a1"}
.iconochive-Add:before{content:"\2295"}
.iconochive-Tab_Activity:before{content:"\2318"}
.iconochive-Forward:before{content:"\23e9"}
.iconochive-Backward:before{content:"\23ea"}
.iconochive-No_Audio:before{content:"\1f508"}
.iconochive-Pause:before{content:"\23f8"}
.iconochive-No_Favorite:before{content:"\2606"}
.iconochive-Unike:before{content:"\2661"}
.iconochive-Song:before{content:"\266b"}
.iconochive-No_Flag:before{content:"\2690"}
.iconochive-Flag:before{content:"\2691"}
.iconochive-Done:before{content:"\2713"}
.iconochive-Check:before{content:"\2714"}
.iconochive-Refresh:before{content:"\27f3"}
.iconochive-Headphones:before{content:"\1f3a7"}
.iconochive-Chart:before{content:"\1f4c8"}
.iconochive-Bookmark:before{content:"\1f4d1"}
.iconochive-Documents:before{content:"\1f4da"}
.iconochive-Newspaper:before{content:"\1f4f0"}
.iconochive-Podcast:before{content:"\1f4f6"}
.iconochive-Radio:before{content:"\1f4fb"}
.iconochive-Cassette:before{content:"\1f4fc"}
.iconochive-Shuffle:before{content:"\1f500"}
.iconochive-Loop:before{content:"\1f501"}
.iconochive-Low_Audio:before{content:"\1f509"}
.iconochive-First:before{content:"\1f396"}
.iconochive-Invisible:before{content:"\1f576"}
.iconochive-Computer:before{content:"\1f5b3"}
@@ -0,0 +1,357 @@
var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
{
let window = _____WB$wombat$assign$function_____("window");
let self = _____WB$wombat$assign$function_____("self");
let document = _____WB$wombat$assign$function_____("document");
let location = _____WB$wombat$assign$function_____("location");
let top = _____WB$wombat$assign$function_____("top");
let parent = _____WB$wombat$assign$function_____("parent");
let frames = _____WB$wombat$assign$function_____("frames");
let opener = _____WB$wombat$assign$function_____("opener");
var menuDisplayHolder, menuKillHolder;
var flagMenuSwitch,menuTimeout, iloop, jloop,counter,strMatchOnMenu;
flagMenuSwitch="new";
counter = 0;
//----------------------------------------------------------------------------------------------------------
//menuHandler() function, here is the main function, called from the mouseover event.
//we check for which elements are lit and work our two array's appropriately
//first kill the killMenu function call.
//
//it receives three parameters parentLIO, currentMenu, and childMenu.
//----------------------------------------------------------------------------------------------------------
function menuHandler(parentLIO,currentMenu,childMenu)
{
var matchFlag;
matchFlag=false;
//kill menu killing function, we will check list and kill again soon.
if(flagMenuSwitch=="off")
{
clearTimeout(menuTimeout);
}
//if flagMenuSwitch is "new" then assign base level stuff
if(flagMenuSwitch=="new")
{
//assign base here
menuDisplayHolder=currentMenu+","+childMenu;
menuKillHolder=menuDisplayArray;
}//end flagMenuSwitch "new" check
//if flagMenuSwitch is "off" then we got a hit (might be "on") depends on how good the handler is
//here we do build the correct array's
if(flagMenuSwitch == "off"||flagMenuSwitch=="on")
{
//menuDisplayHolder equals
var menuDisplayArray,matchFlag;
matchFlag=false;
menuDisplayArray = menuDisplayHolder.split(",");
//------------------------------------------------------------------------
//fill menuKillHolder
//loop and look for match
for(iloop=0;iloop<menuDisplayArray.length-1;iloop++)
{
//match on current menu
if(menuDisplayArray[iloop]==currentMenu)
{
//clear out menuKillHolder
menuKillHolder="";
//-----------------------------------------------
//match on child menu
if(menuDisplayArray[iloop+1]==childMenu)
{
//back fill menuKillHolder
for(jloop = menuDisplayArray.length-1;jloop>(iloop+1);jloop--)
{
menuKillHolder = menuKillHolder +","+ menuDisplayArray[jloop]
}//end back fill
}//end found child menu match
//--------------------------------------------
//no match on child menu
else
{
//back fill menuKillHolder
for(jloop = menuDisplayArray.length-1;jloop>iloop;jloop--)
{
menuKillHolder = menuKillHolder +","+ menuDisplayArray[jloop];
}//end back fill
}//end no child menu match found
}//end found match on current menu
//if there is no match on the current menu then we don't need to touch the
//menuKillHolder as it means we are killing the whole shabang.
}//end loop
//---------------------------------------------------------------------
//refill menuDisplayHolder
//loop and look for match
for(iloop=0;iloop<menuDisplayArray.length;iloop++)
{
//>>>>>>got match will travel
if(menuDisplayArray[iloop]==currentMenu)
{
menuDisplayHolder="";
matchFlag=true;
//>>>>>match on current and child menu
if(menuDisplayArray[iloop+1]==childMenu)
{
for(jloop = 0;jloop<=iloop+1;jloop++)
{
//add a coma if necessary
if(menuDisplayHolder!="")menuDisplayHolder=menuDisplayHolder+",";
menuDisplayHolder = menuDisplayHolder + menuDisplayArray[jloop];
}//end build menuDisplayHolder with only current menu match
}//end check for child menu match
//>>>>>>match on only current menu
else
{
for(jloop = 0;jloop<=iloop;jloop++)
{
//add a coma if necessary
if(menuDisplayHolder!="")menuDisplayHolder=menuDisplayHolder+",";
menuDisplayHolder = menuDisplayHolder + menuDisplayArray[jloop];
}//end build menuDisplayHolder with only current menu match
//add child menu
if(childMenu!=""||childMenu!="null")
{
//add a coma if necessary
if(menuDisplayHolder!="")menuDisplayHolder=menuDisplayHolder+",";
menuDisplayHolder=menuDisplayHolder+childMenu;
}//end add new child menu
}//end no match on child leg
}//end if check for current menu match
}//loop end menuDisplayHolder building
//>>>>>>check if we found a match
//>>>>>>if not then fill with base and don't touch killMenuHolder
if(matchFlag==false)
{
//assign base here
menuDisplayHolder=currentMenu+","+childMenu;
}
}//end flagMenuSwitch "on/off" check
//------------------------------------------------------------------
//finish out the routines: kill, light, set var's
//kill it if we need to
if(flagMenuSwitch!="new")
{
killMenu("notAll");
}
//send the light order
lightMenu();
//set flag
flagMenuSwitch="on";
menuKillHolder=menuDisplayHolder;
}//end menuHandler() function
//-----------------------------------------------------------------------------
//lightMenu() function fires up the correct menu's depending on
//the two elements passed. Light up the whole array
//-----------------------------------------------------------------------------
function lightMenu()
{
var menuDisplayArray;
menuDisplayArray=menuDisplayHolder.split(",");
//we start at 1 because the zero'th element should be the root
for(iloop = 1;iloop<menuDisplayArray.length;iloop++)
{
//check for null child
if(menuDisplayArray[iloop]!="null")
{
if(eval("document."+menuDisplayArray[iloop])){
eval("document."+menuDisplayArray[iloop]+".visibility='show';");
}
}//end check for "null" child menu
}//end loop
}//end lightMenu() function
//-------------------------------------------------------------------------------------------------------------------------------
//this function initiallizes the kill menu function, if there are no mouseover events then it kills all menus
//-------------------------------------------------------------------------------------------------------------------------------
function hideMenu()
{
//set a timeout and then kill all the menu's
//we will check in menuHandler() to see if some stay lit.
menuTimeout= setTimeout("killMenu('all');",800);
flagMenuSwitch="off";
}//end hideMenu() function
//----------------------------------------------------------------------------------------------
//kill appropriate menu's, if we are getting here via the hideMenu() funciton
//then kill all the menu's this is known from the passed value 'apocolypse'
//----------------------------------------------------------------------------------------------
function killMenu(apocolypse)
{
if(apocolypse=="all")menuKillHolder=menuDisplayHolder;
var menuKillArray = menuKillHolder.split(",");
//loop and kill
//we start at 1 because the zero'th element should be the root
for(iloop=1;iloop<menuKillArray.length;iloop++)
{
if(menuKillArray[iloop]!="null")
{
if(eval("document."+menuKillArray[iloop])){
eval("document."+menuKillArray[iloop]+".visibility='hide';");
}
}
}//end loop
//if we are completely out, clear both array's and set flag to new
if(apocolypse=="all")
{
menuDisplayHolder = "";
menuKillHolder = "";
flagMenuSwitch = "new";
}
}//end kill menu function
//capture the click method and navigate to location
function goBabyGo(goString)
{
window.location.href= goString;
}
}
/*
FILE ARCHIVED ON 00:27:23 Jul 15, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
captures_list: 131.167
exclusion.robots: 0.063
exclusion.robots.policy: 0.056
RedisCDXSource: 2.283
esindex: 0.005
LoadShardBlock: 110.923 (3)
PetaboxLoader3.datanode: 88.298 (4)
CDXLines.iter: 13.202 (3)
load_resource: 134.626
PetaboxLoader3.resolve: 107.478
*/
@@ -0,0 +1,37 @@
<style type="text/css">
.headerRed{color:#CC0000;font-size:22px;font-family:trebuchet ms, arial, verdana}
.headerBlack{color:#000000;font-size:22px;font-family:trebuchet ms, arial, verdana}
.midBlack{color:#000000;font-size:18px;font-family:trebuchet ms, arial, verdana}
.midRed{color:#CC0000;font-size:18px;font-family:trebuchet ms, arial, verdana}
.maintext{color:black;font-size:15px;font-family:trebuchet ms, arial, verdana}
.smalltext{color:black;font-size:11px;font-family : verdana, arial, helvetica, sans serif}
.headTopic{font-size : 12px;font-weight:bold;font-family : verdana, arial, helvetica, sans serif;color : #000066;text-decoration:none}
.topicTitle {font-size : 18px; font-family : verdana, arial, helvetica,sans serif; font-weight : bold; color : #ffffff}
.newsText{color:#000033;font-size:11px;text-decoration:none;font-family : verdana, arial, helvetica, sans serif}
.newsDate{color:black;font-size:11px;font-family : verdana, arial, helvetica, sans serif}
</style><!--
FILE ARCHIVED ON 21:18:28 Aug 21, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
-->
<!--
playback timings (ms):
captures_list: 96.352
exclusion.robots: 0.069
exclusion.robots.policy: 0.061
cdx.remote: 0.062
esindex: 0.009
LoadShardBlock: 49.34 (3)
PetaboxLoader3.datanode: 72.663 (5)
CDXLines.iter: 17.352 (3)
load_resource: 131.138 (2)
PetaboxLoader3.resolve: 62.075 (2)
-->
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

@@ -0,0 +1,304 @@
<style type="text/css">
.headerRed{color:#CC0000;font-size:22px;font-family:trebuchet ms, arial, verdana}
.headerBlack{color:#000000;font-size:22px;font-family:trebuchet ms, arial, verdana}
.midBlack{color:#000000;font-size:18px;font-family:trebuchet ms, arial, verdana}
.midRed{color:#CC0000;font-size:18px;font-family:trebuchet ms, arial, verdana}
.maintext{color:black;font-size:15px;font-family:trebuchet ms, arial, verdana}
.smalltext{color:black;font-size:11px;font-family : verdana, arial, helvetica, sans serif}
.headTopic{font-size : 12px;font-weight:bold;font-family : verdana, arial, helvetica, sans serif;color : #000066;text-decoration:none}
.topicTitle {font-size : 18px; font-family : verdana, arial, helvetica,sans serif; font-weight : bold; color : #ffffff}
.navTopBullet{color: #CC0033;font-size:18px;font-weight:bold;line-height:15px;font-family : arial, helvetica, sans serif}
.menuItem{color: #000000;font-size:11px;text-decoration:none;font-family : verdana, arial, helvetica, sans serif}
A.menuitem:hover {color: #CC0033}
.navTop{color: #000000;font-size:14px;text-decoration:none;font-family : arial, helvetica, sans serif}
a.navTop { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #FFFFFF; text-decoration:none}
a.navTop:link{color:#ffffff}
a.navTop:visited{color:#ffffff}
A.navTop:hover {color: #FF0000}
A.navTop:active {}
.navSide{color: #000000;font-size:14px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide:hover {color: #CC0000}
A.navSide:active {}
.navSideW{color: #F8F8F8;font-size:15px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSideW:hover {color: #FFCC00}
A.navSideW:active {}
.navSide1{color: #4D4D4D;font-size:11px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide1:hover {color: #CC0000}
A.navSide1:active {}
.navSide1a{color: #272727;font-size:11px;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide1a:hover {color: #CC0000}
A.navSide1a:active {}
.navSide2{color: #000000;font-size:13px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide2:hover {color: #CC0000}
A.navSide2:active {}
.navSide4{color: #000000;font-size:13px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide4:hover {color: #CC0000}
A.navSide4:active {}
.navSide5{color: #000000;font-size:12px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide5:hover {color: #CC0000}
A.navSide5:active {}
.navSide6{color: #000000;font-size:11px;text-decoration:none;font-family : arial, helvetica, sans serif}
A.navSide6:hover {color: #CC0000}
A.navSide6:active {}
.newsText{color:#000033;font-size:11px;text-decoration:none;font-family : verdana, arial, helvetica, sans serif}
.newsDate{color:black;font-size:11px;font-family : verdana, arial, helvetica, sans serif}
.sidelink {font-family: Arial, Helvetica, sans-serif; font-size: 9pt; color: #000000; text-decoration: none}
A.sidelink:hover {color: #FF3333}
.sidelink_brand {font-family: Arial, Helvetica, sans-serif; font-size: 10pt; color: #000000; text-decoration: none}
A.sidelink_brand:hover {color: #FF3333}
.sidelink2 {font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #CC0000; text-decoration: none; font-weight: bold}
A.sidelink2:hover {color: #000000}
.sidelink3 {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #CC0000; text-decoration: none}
A.sidelink3:hover {color: #000000}
.header1 {font-family: Arial, Helvetica, sans-serif; font-size: 18px; color: #000000; text-decoration: none}
.sublink1 {font-family: Arial, Helvetica, sans-serif; font-size: 11pt; color: #000000; text-decoration: none}
A.sublink1:hover {color: #FF3333}
.rightheadline {font-family: Arial, Helvetica, sans-serif; font-size: 15px; color: #CC0000; text-decoration: none}
.rightlink {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
A.rightlink:hover {color: #CC0000}
.righttext {font-family: Arial, Helvetica, sans-serif; font-size: 11px;font-weight:normal; color: #000000; text-decoration: none}
.righttext1 {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; text-decoration: none}
.righttext2 {font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #000000; text-decoration: none}
.righttext3 {font-family: Arial, Helvetica, sans-serif; font-size: 15px;font-weight:bold; color: #CC0000; text-decoration: none}
.righttext4 {font-family: Arial, Helvetica, sans-serif; font-size: 12px;font-weight:bold; color: #000000; text-decoration: none}
.printerfriendly {font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; text-decoration: none}
a.printerfriendly:hover {color: #CC0000}
.boxlinks {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
a.boxlinks:hover {color: #CC0000}
.boxlinksgrey {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #666666; text-decoration: none}
.boxlinksred {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #790000; text-decoration: none}
.boxlinks2 {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; text-decoration: none}
a.boxlinks2:hover {color: #CC0000}
.archivelink {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #CC0000; text-decoration: none}
a.archivelink:hover {color: #000000}
.chatlink {font-family: Arial, Helvetica, sans-serif; font-size: 11px;font-weight:bold; color: #000000; text-decoration: none}
.chattext {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000000; text-decoration: none}
a.chatlink:hover {color: #CC0000}
.chatlink2 {font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
a.chatlink2:hover {color: #CC0000}
.footerlink {font-family: Arial, Helvetica, sans-serif; font-size: 12px;font-weight:normal; color: #000000; text-decoration: none}
a.footerlink:hover {color: #CC0000}
.templeft{color: #000000;font-size:12px;font-weight:bold;text-decoration:none;font-family : arial, helvetica, sans serif}
A.templeft:hover {color: #CC0000}
A.templeft:active {}
p {color: #000000;font-size:12px;font-family : arial, helvetica, sans serif}
p, td, ul, ol, body {font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000}
.red { color: #CC0000; }
.featureheading {color: #000000;font-size:17px;font-family : arial, helvetica, sans serif; text-align: center;font-weight:bold}
.headline {color: #CC0000;font-size:30px;font-family : arial, helvetica, sans serif; text-align: center;font-weight:bold}
.subheading {color: #000000;font-size:18px;font-family : arial, helvetica, sans serif; text-align: center;font-weight:bold}
.byline {color: #000000;font-size:11px;font-family : arial, helvetica, sans serif; text-align: center}
.linecolor {color : #f0f0f0}
.redheader {color: #cc0000;font-size:15px;font-family : arial, helvetica, sans serif;font-weight:bold}
.smallredheader {color: #993300;font-size:11px;font-family : arial, helvetica, sans serif}
.h1 {color: #000000;font-size:31px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h2 {color: #000000;font-size:25px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h3 {color: #000000;font-size:21px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h4 {color: #000000;font-size:17px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h5 {color: #000000;font-size:12px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h6 {color: #000000;font-size:9px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h1red {color: #CC0000;font-size:31px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h2red {color: #CC0000;font-size:25px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h3red {color: #CC0000;font-size:21px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h4red {color: #CC0000;font-size:17px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h5red {color: #CC0000;font-size:12px;font-weight:bold;font-family : arial, helvetica, sans serif}
.h6red {color: #CC0000;font-size:9px;font-weight:bold;font-family : arial, helvetica, sans serif}
.size0 {color: #000000;font-size:9px;font-family : arial, helvetica, sans serif}
.size1 {color: #000000;font-size:10px;font-family : arial, helvetica, sans serif}
.size2 {color: #000000;font-size:12px;font-family : arial, helvetica, sans serif}
.size3 {color: #000000;font-size:15px;font-family : arial, helvetica, sans serif}
.size4 {color: #000000;font-size:19px;font-family : arial, helvetica, sans serif}
.size5 {color: #000000;font-size:23px;font-family : arial, helvetica, sans serif}
.size6 {color: #000000;font-size:30px;font-family : arial, helvetica, sans serif}
.size7 {color: #000000;font-size:42px;font-family : arial, helvetica, sans serif}
.size0red {color: #CC0000;font-size:9px;font-family : arial, helvetica, sans serif}
.size1red {color: #CC0000;font-size:10px;font-family : arial, helvetica, sans serif}
.size2red {color: #CC0000;font-size:12px;font-family : arial, helvetica, sans serif}
.size3red {color: #CC0000;font-size:15px;font-family : arial, helvetica, sans serif}
.size4red {color: #CC0000;font-size:19px;font-family : arial, helvetica, sans serif}
.size5red {color: #CC0000;font-size:23px;font-family : arial, helvetica, sans serif}
.size6red {color: #CC0000;font-size:30px;font-family : arial, helvetica, sans serif}
.size7red {color: #CC0000;font-size:42px;font-family : arial, helvetica, sans serif}
.link4 {color: #CC0000;font-size:17px; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
a.link4:hover {color: #000000;font-size:17px; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cboxhead {font-size: 15px; color: #CC0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
a.cboxhead:hover {color: #000000}
.cboxsubhead {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cboxbody {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
.fiftyrecent {font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #CC0000; text-decoration: none}
A.fiftyrecent:hover {color: #000000}
.search {font-family: Arial, Helvetica, sans-serif; font-size: 9px; color: #000000; text-decoration: none; font-weight: bold}
A.search:hover {color: #CC0000}
.prodhead {color: #ffffff;font-size:15px;font-family : arial, helvetica, sans serif}
.breadcrumb {font-size: 11px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
a.breadcrumb:hover {color: #CC0000}
.search2 {font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #ffffff; text-decoration: none}
A.search2:hover {color: #ffff80}
.nboxhead {font-size: 12px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.nboxdate {font-size: 10px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.nboxarchive {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.nboxarchive:hover {color: #CC0000}
.footerlinknew {font-family: Arial, Helvetica, sans-serif; font-size: 11px;font-weight:normal; color: #ffffff; text-decoration: none}
a.footerlinknew:hover {color: #ffff80}
.prodlisthead {font-size: 11px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.prodlistlink {font-size: 11px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.prodlistlink:hover {color: #CC0000}
.serieslink {font-size: 10px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.serieslink:hover {color: #CC0000}
.seriesmore {font-size: 10px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.seriesmore:hover {color: #CC0000}
.articlehead {font-size: 12px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.articlehead:hover {color: #ffffae}
.cxboxhead {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.cxboxhead:hover {font-size: 12px; color: #8a0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cxboxbody {font-size: 10px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.cxboxbody:hover {color: #8a0000}
.cxboxsub {font-size: 11px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cnboxhead {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.cnboxhead:hover {font-size: 12px; color: #8a0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.cnboxbody {font-size: 10px; color: #000000; line-height : 11px ; font-family : arial, helvetica, sans serif; text-decoration: none}
A.cnboxbody:hover {color: #8a0000}
.aaboxheadline {font-size: 11px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.aaboxheadline:hover {font-size: 11px; color: #8a0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.aaboxsubcat {font-size: 11px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
.aaboxdate {font-size: 10px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
.aaboxbyline {font-size: 10px; color: #000000; font-style: italic; font-family : arial, helvetica, sans serif; text-decoration: none}
.bxboxheadline {font-size: 12px; color: #ffffff; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.bxboxheadline:hover {font-size: 12px; color: #ffffae; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.bxboxfrheadline {font-size: 12px; color: #000000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
A.bxboxfrheadline:hover {font-size: 12px; color: #8a0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.bxboxbody {font-size: 11px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.bxboxbody:hover {font-size: 11px; color: #8a0000; font-family : arial, helvetica, sans serif; text-decoration: none}
.pflink {font-size: 10px; color: #4a4a4a; font-family : arial, helvetica, sans serif; text-decoration: none;}
A.pflink:hover {font-size: 10px; color: #CC0000; font-family : arial, helvetica, sans serif; text-decoration: none}
.listlink {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.listlink:hover {font-size: 12px; color: #8a0000; font-family : arial, helvetica, sans serif; text-decoration: none}
.glosslink {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
A.glosslink:hover {color: #CC0000}
.glossalphalink {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif}
A.glossalphalink:hover {color: #CC0000}
.glossterm {font-size: 16px; color: #CC0000; font-weight:bold; font-family : arial, helvetica, sans serif; text-decoration: none}
.glosssource {font-size: 12px; color: #000000; font-family : arial, helvetica, sans serif; text-decoration: none}
DIV.boxscroll {
height: 77px;
overflow: auto;
width: 282px;
}
DIV.boxscroll2 {
height: 400px;
overflow: auto;
width: 300px;
border-width: 1px;
border-color: #b9b9b9;
border-style: solid;
}
BODY {SCROLLBAR-ARROW-COLOR: #f9f1d2; SCROLLBAR-BASE-COLOR: #b7a783}
</style><!--
FILE ARCHIVED ON 06:44:48 Aug 21, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
-->
<!--
playback timings (ms):
captures_list: 92.144
exclusion.robots: 0.064
exclusion.robots.policy: 0.057
RedisCDXSource: 0.576
esindex: 0.008
LoadShardBlock: 74.392 (3)
PetaboxLoader3.datanode: 96.465 (5)
CDXLines.iter: 13.703 (3)
load_resource: 136.157 (2)
PetaboxLoader3.resolve: 80.396 (2)
-->
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

@@ -0,0 +1,474 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3.0
/* eslint-disable no-var, semi, prefer-arrow-callback, prefer-template */
/**
* Collection of methods for sending analytics events to Archive.org's analytics server.
*
* These events are used for internal stats and sent (in anonymized form) to Google Analytics.
*
* @see analytics.md
*
* @type {Object}
*/
window.archive_analytics = (function defineArchiveAnalytics() {
// keep orignal Date object so as not to be affected by wayback's
// hijacking global Date object
var Date = window.Date;
var ARCHIVE_ANALYTICS_VERSION = 2;
var DEFAULT_SERVICE = 'ao_2';
var NO_SAMPLING_SERVICE = 'ao_no_sampling'; // sends every event instead of a percentage
var startTime = new Date();
/**
* @return {Boolean}
*/
function isPerformanceTimingApiSupported() {
return 'performance' in window && 'timing' in window.performance;
}
/**
* Determines how many milliseconds elapsed between the browser starting to parse the DOM and
* the current time.
*
* Uses the Performance API or a fallback value if it's not available.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number}
*/
function getLoadTime() {
var start;
if (isPerformanceTimingApiSupported())
start = window.performance.timing.domLoading;
else
start = startTime.getTime();
return new Date().getTime() - start;
}
/**
* Determines how many milliseconds elapsed between the user navigating to the page and
* the current time.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number|null} null if the browser doesn't support the Performance API
*/
function getNavToDoneTime() {
if (!isPerformanceTimingApiSupported())
return null;
return new Date().getTime() - window.performance.timing.navigationStart;
}
/**
* Performs an arithmetic calculation on a string with a number and unit, while maintaining
* the unit.
*
* @param {String} original value to modify, with a unit
* @param {Function} doOperation accepts one Number parameter, returns a Number
* @returns {String}
*/
function computeWithUnit(original, doOperation) {
var number = parseFloat(original, 10);
var unit = original.replace(/(\d*\.\d+)|\d+/, '');
return doOperation(number) + unit;
}
/**
* Computes the default font size of the browser.
*
* @returns {String|null} computed font-size with units (typically pixels), null if it cannot be computed
*/
function getDefaultFontSize() {
var fontSizeStr;
if (!('getComputedStyle' in window))
return null;
var style = window.getComputedStyle(document.documentElement);
if (!style)
return null;
fontSizeStr = style.fontSize;
// Don't modify the value if tracking book reader.
if (document.querySelector('#BookReader'))
return fontSizeStr;
return computeWithUnit(fontSizeStr, function reverseBootstrapFontSize(number) {
// Undo the 62.5% size applied in the Bootstrap CSS.
return number * 1.6;
});
}
/**
* Get the URL parameters for a given Location
* @param {Location}
* @return {Object} The URL parameters
*/
function getParams(location) {
if (!location) location = window.location;
var vars;
var i;
var pair;
var params = {};
var query = location.search;
if (!query) return params;
vars = query.substring(1).split('&');
for (i = 0; i < vars.length; i++) {
pair = vars[i].split('=');
params[pair[0]] = decodeURIComponent(pair[1]);
}
return params;
}
function getMetaProp(name) {
var metaTag = document.querySelector('meta[property=' + name + ']');
return metaTag ? metaTag.getAttribute('content') || null : null;
}
var ArchiveAnalytics = {
/**
* @type {String|null}
*/
service: getMetaProp('service'),
mediaType: getMetaProp('mediatype'),
primaryCollection: getMetaProp('primary_collection'),
/**
* Key-value pairs to send in pageviews (you can read this after a pageview to see what was
* sent).
*
* @type {Object}
*/
values: {},
/**
* Sends an analytics ping, preferably using navigator.sendBeacon()
* @param {Object} values
* @param {Function} [onload_callback] (deprecated) callback to invoke once ping to analytics server is done
* @param {Boolean} [augment_for_ao_site] (deprecated) if true, add some archive.org site-specific values
*/
send_ping: function send_ping(values, onload_callback, augment_for_ao_site) {
if (typeof window.navigator !== 'undefined' && typeof window.navigator.sendBeacon !== 'undefined')
this.send_ping_via_beacon(values);
else
this.send_ping_via_image(values);
},
/**
* Sends a ping via Beacon API
* NOTE: Assumes window.navigator.sendBeacon exists
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_beacon: function send_ping_via_beacon(values) {
var url = this.generate_tracking_url(values || {});
window.navigator.sendBeacon(url);
},
/**
* Sends a ping via Image object
* @param {Object} values Tracking parameters to pass
*/
send_ping_via_image: function send_ping_via_image(values) {
var url = this.generate_tracking_url(values || {});
var loadtime_img = new Image(1, 1);
loadtime_img.src = url;
loadtime_img.alt = '';
},
/**
* Construct complete tracking URL containing payload
* @param {Object} params Tracking parameters to pass
* @return {String} URL to use for tracking call
*/
generate_tracking_url: function generate_tracking_url(params) {
var baseUrl = '//analytics.archive.org/0.gif';
var keys;
var outputParams = params;
var outputParamsArray = [];
outputParams.service = outputParams.service || this.service || DEFAULT_SERVICE;
// Build array of querystring parameters
keys = Object.keys(outputParams);
keys.forEach(function keyIteration(key) {
outputParamsArray.push(encodeURIComponent(key) + '=' + encodeURIComponent(outputParams[key]));
});
outputParamsArray.push('version=' + ARCHIVE_ANALYTICS_VERSION);
outputParamsArray.push('count=' + (keys.length + 2)); // Include `version` and `count` in count
return baseUrl + '?' + outputParamsArray.join('&');
},
/**
* @param {int} page Page number
*/
send_scroll_fetch_event: function send_scroll_fetch_event(page) {
var additionalValues = { ev: page };
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch', location.pathname, additionalValues);
},
send_scroll_fetch_base_event: function send_scroll_fetch_base_event() {
var additionalValues = {};
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime) additionalValues.loadtime = loadTime;
if (navToDoneTime) additionalValues.nav_to_done_ms = navToDoneTime;
this.send_event('page_action', 'scroll_fetch_base', location.pathname, additionalValues);
},
/**
* @param {Object} [options]
* @param {String} [options.mediaType]
* @param {String} [options.mediaLanguage]
* @param {String} [options.page] The path portion of the page URL
*/
send_pageview: function send_pageview(options) {
var settings = options || {};
var defaultFontSize;
var loadTime = getLoadTime();
var mediaType = settings.mediaType;
var primaryCollection = settings.primaryCollection;
var page = settings.page;
var navToDoneTime = getNavToDoneTime();
/**
* @return {String}
*/
function get_locale() {
if (navigator) {
if (navigator.language)
return navigator.language;
else if (navigator.browserLanguage)
return navigator.browserLanguage;
else if (navigator.systemLanguage)
return navigator.systemLanguage;
else if (navigator.userLanguage)
return navigator.userLanguage;
}
return '';
}
defaultFontSize = getDefaultFontSize();
// Set field values
this.values.kind = 'pageview';
this.values.timediff = (new Date().getTimezoneOffset()/60)*(-1); // *timezone* diff from UTC
this.values.locale = get_locale();
this.values.referrer = (document.referrer == '' ? '-' : document.referrer);
if (loadTime)
this.values.loadtime = loadTime;
if (navToDoneTime)
this.values.nav_to_done_ms = navToDoneTime;
if (settings.trackingId) {
this.values.ga_tid = settings.trackingId;
}
/* START CUSTOM DIMENSIONS */
if (defaultFontSize)
this.values.ga_cd1 = defaultFontSize;
if ('devicePixelRatio' in window)
this.values.ga_cd2 = window.devicePixelRatio;
if (mediaType)
this.values.ga_cd3 = mediaType;
if (settings.mediaLanguage) {
this.values.ga_cd4 = settings.mediaLanguage;
}
if (primaryCollection) {
this.values.ga_cd5 = primaryCollection;
}
/* END CUSTOM DIMENSIONS */
if (page)
this.values.page = page;
this.send_ping(this.values);
},
/**
* Sends a tracking "Event".
* @param {string} category
* @param {string} action
* @param {string} label
* @param {Object} additionalEventParams
*/
send_event: function send_event(
category,
action,
label,
additionalEventParams
) {
if (!label) label = window.location.pathname;
if (!additionalEventParams) additionalEventParams = {};
if (additionalEventParams.mediaLanguage) {
additionalEventParams.ga_cd4 = additionalEventParams.mediaLanguage;
delete additionalEventParams.mediaLanguage;
}
var eventParams = Object.assign(
{
kind: 'event',
ec: category,
ea: action,
el: label,
cache_bust: Math.random(),
},
additionalEventParams
);
this.send_ping(eventParams);
},
/**
* Sends every event instead of a small percentage.
*
* Use this sparingly as it can generate a lot of events.
*
* @param {string} category
* @param {string} action
* @param {string} label
* @param {Object} additionalEventParams
*/
send_event_no_sampling: function send_event_no_sampling(
category,
action,
label,
additionalEventParams
) {
var extraParams = additionalEventParams || {};
extraParams.service = NO_SAMPLING_SERVICE;
this.send_event(category, action, label, extraParams);
},
/**
* @param {Object} options see this.send_pageview options
*/
send_pageview_on_load: function send_pageview_on_load(options) {
var self = this;
window.addEventListener('load', function send_pageview_with_options() {
self.send_pageview(options);
});
},
/**
* Handles tracking events passed in URL.
* Assumes category and action values are separated by a "|" character.
* NOTE: Uses the unsampled analytics property. Watch out for future high click links!
* @param {Location}
*/
process_url_events: function process_url_events(location) {
var eventValues;
var actionValue;
var eventValue = getParams(location).iax;
if (!eventValue) return;
eventValues = eventValue.split('|');
actionValue = eventValues.length >= 1 ? eventValues[1] : '';
this.send_event_no_sampling(
eventValues[0],
actionValue,
window.location.pathname
);
},
/**
* Attaches handlers for event tracking.
*
* To enable click tracking for a link, add a `data-event-click-tracking`
* attribute containing the Google Analytics Event Category and Action, separated
* by a vertical pipe (|).
* e.g. `<a href="foobar" data-event-click-tracking="TopNav|FooBar">`
*
* To enable form submit tracking, add a `data-event-form-tracking` attribute
* to the `form` tag.
* e.g. `<form data-event-form-tracking="TopNav|SearchForm" method="GET">`
*
* Additional tracking options can be added via a `data-event-tracking-options`
* parameter. This parameter, if included, should be a JSON string of the parameters.
* Valid parameters are:
* - service {string}: Corresponds to the Google Analytics property data values flow into
*/
set_up_event_tracking: function set_up_event_tracking() {
var self = this;
var clickTrackingAttributeName = 'event-click-tracking';
var formTrackingAttributeName = 'event-form-tracking';
var trackingOptionsAttributeName = 'event-tracking-options';
function handleAction(event, attributeName) {
var selector = '[data-' + attributeName + ']';
var eventTarget = event.target;
if (!eventTarget) return;
var target = eventTarget.closest(selector);
if (!target) return;
var categoryAction;
var categoryActionParts;
var options;
categoryAction = target.dataset[toCamelCase(attributeName)];
if (!categoryAction) return;
categoryActionParts = categoryAction.split('|');
options = target.dataset[toCamelCase(trackingOptionsAttributeName)];
options = options ? JSON.parse(options) : {};
self.send_event(
categoryActionParts[0],
categoryActionParts[1],
categoryActionParts[2] || window.location.pathname,
options.service ? { service: options.service } : {}
);
}
function toCamelCase(str) {
return str.replace(/\W+(.)/g, function (match, chr) {
return chr.toUpperCase();
});
};
document.addEventListener('click', function(e) {
handleAction(e, clickTrackingAttributeName);
});
document.addEventListener('submit', function(e) {
handleAction(e, formTrackingAttributeName);
});
},
/**
* @returns {Object[]}
*/
get_data_packets: function get_data_packets() {
return [this.values];
},
/**
* Creates a tracking image for tracking JS compatibility.
*
* @param {string} type The type value for track_js_case in query params for 0.gif
*/
create_tracking_image: function create_tracking_image(type) {
this.send_ping_via_image({
cache_bust: Math.random(),
kind: 'track_js',
track_js_case: type,
});
}
};
return ArchiveAnalytics;
}());
// @license-end
@@ -0,0 +1,507 @@
@import 'record.css'; /* for SPN1 */
#wm-ipp-base {
height:65px;/* initial height just in case js code fails */
padding:0;
margin:0;
border:none;
background:none transparent;
}
#wm-ipp {
z-index: 2147483647;
}
#wm-ipp, #wm-ipp * {
font-family:Lucida Grande, Helvetica, Arial, sans-serif;
font-size:12px;
line-height:1.2;
letter-spacing:0;
width:auto;
height:auto;
max-width:none;
max-height:none;
min-width:0 !important;
min-height:0;
outline:none;
float:none;
text-align:left;
border:none;
color: #000;
text-indent: 0;
position: initial;
background: none;
}
#wm-ipp div, #wm-ipp canvas {
display: block;
}
#wm-ipp div, #wm-ipp tr, #wm-ipp td, #wm-ipp a, #wm-ipp form {
padding:0;
margin:0;
border:none;
border-radius:0;
background-color:transparent;
background-image:none;
/*z-index:2147483640;*/
height:auto;
}
#wm-ipp table {
border:none;
border-collapse:collapse;
margin:0;
padding:0;
width:auto;
font-size:inherit;
}
#wm-ipp form input {
padding:1px !important;
height:auto;
display:inline;
margin:0;
color: #000;
background: none #fff;
border: 1px solid #666;
}
#wm-ipp form input[type=submit] {
padding:0 8px !important;
margin:1px 0 1px 5px !important;
width:auto !important;
border: 1px solid #000 !important;
background: #fff !important;
color: #000 !important;
}
#wm-ipp form input[type=submit]:hover {
background: #eee !important;
cursor: pointer !important;
}
#wm-ipp form input[type=submit]:active {
transform: translateY(1px);
}
#wm-ipp a {
display: inline;
}
#wm-ipp a:hover{
text-decoration:underline;
}
#wm-ipp a.wm-btn:hover {
text-decoration:none;
color:#ff0 !important;
}
#wm-ipp a.wm-btn:hover span {
color:#ff0 !important;
}
#wm-ipp #wm-ipp-inside {
margin: 0 6px;
border:5px solid #000;
border-top:none;
background-color:rgba(255,255,255,0.9);
-moz-box-shadow:1px 1px 4px #333;
-webkit-box-shadow:1px 1px 4px #333;
box-shadow:1px 1px 4px #333;
border-radius:0 0 8px 8px;
}
/* selectors are intentionally verbose to ensure priority */
#wm-ipp #wm-logo {
padding:0 10px;
vertical-align:middle;
min-width:100px;
flex: 0 0 100px;
}
#wm-ipp .c {
padding-left: 4px;
}
#wm-ipp .c .u {
margin-top: 4px !important;
}
#wm-ipp .n {
padding:0 0 0 5px !important;
vertical-align: bottom;
}
#wm-ipp .n a {
text-decoration:none;
color:#33f;
font-weight:bold;
}
#wm-ipp .n .b {
padding:0 6px 0 0 !important;
text-align:right !important;
overflow:visible;
white-space:nowrap;
color:#99a;
vertical-align:middle;
}
#wm-ipp .n .y .b {
padding:0 6px 2px 0 !important;
}
#wm-ipp .n .c {
background:#000;
color:#ff0;
font-weight:bold;
padding:0 !important;
text-align:center;
}
#wm-ipp.hi .n td.c {
color:#ec008c;
}
#wm-ipp .n td.f {
padding:0 0 0 6px !important;
text-align:left !important;
overflow:visible;
white-space:nowrap;
color:#99a;
vertical-align:middle;
}
#wm-ipp .n tr.m td {
text-transform:uppercase;
white-space:nowrap;
padding:2px 0;
}
#wm-ipp .c .s {
padding:0 5px 0 0 !important;
vertical-align:bottom;
}
#wm-ipp #wm-nav-captures {
white-space: nowrap;
}
#wm-ipp .c .s a.t {
color:#33f;
font-weight:bold;
line-height: 1.8;
}
#wm-ipp .c .s div.r {
color: #666;
font-size:9px;
white-space:nowrap;
}
#wm-ipp .c .k {
padding-bottom:1px;
}
#wm-ipp .c .s {
padding:0 5px 2px 0 !important;
}
#wm-ipp td#displayMonthEl {
padding: 2px 0 !important;
}
#wm-ipp td#displayYearEl {
padding: 0 0 2px 0 !important;
}
div#wm-ipp-sparkline {
position:relative;/* for positioning markers */
white-space:nowrap;
background-color:#fff;
cursor:pointer;
line-height:0.9;
}
#sparklineImgId, #wm-sparkline-canvas {
position:relative;
z-index:9012;
max-width:none;
}
#wm-ipp-sparkline div.yt {
position:absolute;
z-index:9010 !important;
background-color:#ff0 !important;
top: 0;
}
#wm-ipp-sparkline div.mt {
position:absolute;
z-index:9013 !important;
background-color:#ec008c !important;
top: 0;
}
#wm-ipp .r {
margin-left: 4px;
}
#wm-ipp .r a {
color:#33f;
border:none;
position:relative;
background-color:transparent;
background-repeat:no-repeat !important;
background-position:100% 100% !important;
text-decoration: none;
}
#wm-ipp #wm-capinfo {
/* prevents notice div background from sticking into round corners of
#wm-ipp-inside */
border-radius: 0 0 4px 4px;
}
#wm-ipp #wm-capinfo .c-logo {
display:block;
float:left;
margin-right:3px;
width:90px;
min-height:90px;
max-height: 290px;
border-radius:45px;
overflow:hidden;
background-position:50%;
background-size:auto 90px;
box-shadow: 0 0 2px 2px rgba(208,208,208,128) inset;
}
#wm-ipp #wm-capinfo .c-logo span {
display:inline-block;
}
#wm-ipp #wm-capinfo .c-logo img {
height:90px;
position:relative;
left:-50%;
}
#wm-ipp #wm-capinfo .wm-title {
font-size:130%;
}
#wm-ipp #wm-capinfo a.wm-selector {
display:inline-block;
color: #aaa;
text-decoration:none !important;
padding: 2px 8px;
}
#wm-ipp #wm-capinfo a.wm-selector.selected {
background-color:#666;
}
#wm-ipp #wm-capinfo a.wm-selector:hover {
color: #fff;
}
#wm-ipp #wm-capinfo.notice-only #wm-capinfo-collected-by,
#wm-ipp #wm-capinfo.notice-only #wm-capinfo-timestamps {
display: none;
}
#wm-ipp #wm-capinfo #wm-capinfo-notice .wm-capinfo-content {
background-color:#ff0;
padding:5px;
font-size:14px;
text-align:center;
}
#wm-ipp #wm-capinfo #wm-capinfo-notice .wm-capinfo-content * {
font-size:14px;
text-align:center;
}
#wm-ipp #wm-expand {
right: 1px;
bottom: -1px;
color: #ffffff;
background-color: #666 !important;
padding:0 5px 0 3px !important;
border-radius: 3px 3px 0 0 !important;
}
#wm-ipp #wm-expand span {
color: #ffffff;
}
#wm-ipp #wm-expand #wm-expand-icon {
display: inline-block;
transition: transform 0.5s;
transform-origin: 50% 45%;
}
#wm-ipp #wm-expand.wm-open #wm-expand-icon {
transform: rotate(180deg);
}
#wm-ipp #wmtb {
text-align:right;
}
#wm-ipp #wmtb #wmtbURL {
width: calc(100% - 45px);
}
#wm-ipp #wm-graph-anchor {
border-right:1px solid #ccc;
}
/* time coherence */
html.wb-highlight {
box-shadow: inset 0 0 0 3px #a50e3a !important;
}
.wb-highlight {
outline: 3px solid #a50e3a !important;
}
#wm-ipp-print {
display:none !important;
}
@media print {
#wm-ipp-base {
display:none !important;
}
#wm-ipp-print {
display:block !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
@media (max-width:414px) {
#wm-ipp .xxs {
display:none !important;
}
}
@media (min-width:1055px) {
#wm-ipp #wm-graph-anchor {
display:block !important;
}
}
@media (max-width:1054px) {
#wm-ipp #wm-graph-anchor {
display:none !important;
}
}
@media (max-width:1163px) {
#wm-logo {
display:none !important;
}
}
#wm-btns {
white-space: nowrap;
margin-top: -2px;
}
#wm-btns #wm-save-snapshot-open {
margin-right: 7px;
top: -6px;
}
#wm-btns #wm-sign-in {
box-sizing: content-box;
display: none;
margin-right: 7px;
top: -8px;
/*
round border around sign in button
*/
border: 2px #000 solid;
border-radius: 14px;
padding-right: 2px;
padding-bottom: 2px;
width: 11px;
height: 11px;
}
#wm-btns #wm-sign-in>.iconochive-person {
font-size: 12.5px;
}
#wm-save-snapshot-open > .iconochive-web {
color:#000;
font-size:160%;
}
#wm-ipp #wm-share {
display: flex;
align-items: flex-end;
justify-content: space-between;
}
#wm-share > #wm-screenshot {
display: inline-block;
margin-right: 3px;
visibility: hidden;
}
#wm-screenshot > .iconochive-image {
color:#000;
font-size:160%;
}
#wm-share > #wm-video {
display: inline-block;
margin-right: 3px;
visibility: hidden;
}
#wm-video > .iconochive-movies {
color: #000;
display: inline-block;
font-size: 150%;
margin-bottom: 2px;
}
#wm-btns #wm-save-snapshot-in-progress {
display: none;
font-size:160%;
opacity: 0.5;
position: relative;
margin-right: 7px;
top: -5px;
}
#wm-btns #wm-save-snapshot-success {
display: none;
color: green;
position: relative;
top: -7px;
}
#wm-btns #wm-save-snapshot-fail {
display: none;
color: red;
position: relative;
top: -7px;
}
.wm-icon-screen-shot {
background: url("../images/web-screenshot.svg") no-repeat !important;
background-size: contain !important;
width: 22px !important;
height: 19px !important;
display: inline-block;
}
#donato {
/* transition effect is disable so as to simplify height adjustment */
/*transition: height 0.5s;*/
height: 0;
margin: 0;
padding: 0;
border-bottom: 1px solid #999 !important;
}
body.wm-modal {
height: auto !important;
overflow: hidden !important;
}
#donato #donato-base {
width: 100%;
height: 100%;
/*bottom: 0;*/
margin: 0;
padding: 0;
position: absolute;
z-index: 2147483639;
}
body.wm-modal #donato #donato-base {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 2147483640;
}
.wb-autocomplete-suggestions {
font-family: Lucida Grande, Helvetica, Arial, sans-serif;
font-size: 12px;
text-align: left;
cursor: default;
border: 1px solid #ccc;
border-top: 0;
background: #fff;
box-shadow: -1px 1px 3px rgba(0,0,0,.1);
position: absolute;
display: none;
z-index: 2147483647;
max-height: 254px;
overflow: hidden;
overflow-y: auto;
box-sizing: border-box;
}
.wb-autocomplete-suggestion {
position: relative;
padding: 0 .6em;
line-height: 23px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 1.02em;
color: #333;
}
.wb-autocomplete-suggestion b {
font-weight: bold;
}
.wb-autocomplete-suggestion.selected {
background: #f0f0f0;
}
@@ -0,0 +1,123 @@
var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
{
let window = _____WB$wombat$assign$function_____("window");
let self = _____WB$wombat$assign$function_____("self");
let document = _____WB$wombat$assign$function_____("document");
let location = _____WB$wombat$assign$function_____("location");
let top = _____WB$wombat$assign$function_____("top");
let parent = _____WB$wombat$assign$function_____("parent");
let frames = _____WB$wombat$assign$function_____("frames");
let opener = _____WB$wombat$assign$function_____("opener");
<!--
// Image Swap Restore
function MM_swapImgRestore() { //v2.0
if (document.MM_swapImgData != null)
for (var i=0; i<(document.MM_swapImgData.length-1); i+=2)
document.MM_swapImgData[i].src = document.MM_swapImgData[i+1];
}
// Image Swap
function MM_swapImage() { //v2.0
var i,j=0,objStr,obj,swapArray=new Array,oldArray=document.MM_swapImgData;
for (i=0; i < (MM_swapImage.arguments.length-2); i+=3) {
objStr = MM_swapImage.arguments[(navigator.appName == 'Netscape')?i:i+1];
if ((objStr.indexOf('document.layers[')==0 && document.layers==null) ||
(objStr.indexOf('document.all[') ==0 && document.all ==null))
objStr = 'document'+objStr.substring(objStr.lastIndexOf('.'),objStr.length);
obj = eval(objStr);
if (obj != null) {
swapArray[j++] = obj;
swapArray[j++] = (oldArray==null || oldArray[j-1]!=obj)?obj.src:oldArray[j];
obj.src = MM_swapImage.arguments[i+2];
} }
document.MM_swapImgData = swapArray; //used for restore
}
function MM_showHideLayers() { //v2.0
var i, visStr, args, theObj;
args = MM_showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) { //with arg triples (objNS,objIE,visStr)
visStr = args[i+2];
if (navigator.appName == 'Netscape' && document.layers != null) {
theObj = eval(args[i]);
if (theObj) theObj.visibility = visStr;
} else if (document.all != null) { //IE
if (visStr == 'show') visStr = 'visible'; //convert vals
if (visStr == 'hide') visStr = 'hidden';
theObj = eval(args[i+1]);
if (theObj) theObj.style.visibility = visStr;
} }
}
function pulldown(formObj)
{
url = formObj.options[formObj.options.selectedIndex].value;
if(url != "empty")
{
window.location = url;
url = "";
}
}
// This checks to see if the window's dimensions have actually changed
// (because Netscape often fires a false onResize event when it forms scrollbars);
// if they have, the document is reloaded.
// Note that document.location is not supposed to be settable, but here's another
// case where the implementation does not match the specs.
function resizeFix(){
if(document.resizeFix.initWidth!=window.innerWidth
||document.resizeFix.initHeight!=window.innerHeight)
document.location=document.location;
}
// This function checks to see if the browser supports the Layer object (i.e., Netscape 4.X);
// if it does, then it creates a new object with properties to hold the current window width & height
// and assigns the resizeFix() function to the window's onResize event
function checkBrowser(){
if(document.layers){
if(typeof document.fix == "undefined"){
document.resizeFix=new Object();
document.resizeFix.initWidth=window.innerWidth;
document.resizeFix.initHeight=window.innerHeight;
}
window.onresize=resizeFix;
}
}
// This calls the browser check function above
checkBrowser();
//-->
}
/*
FILE ARCHIVED ON 00:27:23 Jul 15, 2019 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 13:34:01 Dec 04, 2022.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
*/
/*
playback timings (ms):
captures_list: 247.578
exclusion.robots: 0.081
exclusion.robots.policy: 0.073
cdx.remote: 0.069
esindex: 0.011
LoadShardBlock: 149.267 (3)
PetaboxLoader3.datanode: 90.991 (4)
CDXLines.iter: 18.401 (3)
PetaboxLoader3.resolve: 75.892 (2)
load_resource: 51.672
*/
Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Some files were not shown because too many files have changed in this diff Show More