Code: Select all
@@spellPage
<!-- get needed spell data -->
[H: spellData = am.sd.glp(arg(0))]
[H: spellData = replace(spellData,";",strformat("&#%s",59))]
[H: varsFromStrProp(json.toStrProp(spellData))]
<!-- get all cached links for menu indexes -->
[H: menuLinks = am.sm.glp("link_menu_index")]
[H: menuLinks = replace(menuLinks,";",strformat("&#%s",59))]
[H: varsFromStrProp(json.toStrProp(menuLinks))]
<!-- update school to link -->
[H: school = eval(strformat("link.menu.school.%s",am.sl.cleanVar(school)))]
<!-- update subschool to list of links with some formatting -->
[H: subschoolList = ""]
[H, foreach(item,subschool): subschoolList = listAppend(subschoolList,eval(strformat("link.menu.subschool.%s",am.sl.cleanVar(item))))]
[H, if(subschool != ""): subschool = strformat("(%s)",subschoolList)]
<!-- update descriptor to list of descriptors with formatting -->
[H: descriptorList = ""]
[H, foreach(item,descriptor): descriptorList = listAppend(descriptorList,eval(strformat("link.menu.descriptor.%s",am.sl.cleanVar(item))))]
[H, if(descriptor != ""): descriptor = strformat("[%s]",descriptorList)]
<!-- create header -->
[H: header2 = strformat("%s%s%s",school,subschool,descriptor)]
<!-- update spellLevel to link list -->
[H: spellLevelList = ""]
[H: casterClassList = lower(am.sl.glp("list.classes"))]
[H: domainClassLevelList = spellLevel]
[H, foreach(domainClass,domainClassLevelList), code: {
[H: level = listGet(domainClass,1," ")]
[H: domainClassName = listGet(domainClass,0," ")]
[H: domainClassNameProp = am.sl.cleanVar(domainClassName)]
[H: domainClassLevelProp = am.sl.cleanVar(domainClass)]
[H, if(json.contains(casterClassList,domainClassNameProp)):
spellLevelList = listAppend(spellLevelList,eval(strformat("link.menu.class.%s.%s",domainClassNameProp,domainClassLevelProp)));
spellLevelList = listAppend(spellLevelList,eval(strformat("link.menu.domain.%s.%s",domainClassNameProp,domainClassLevelProp)))
]
}]
[H: spellLevel = spellLevelList]
<!-- output template. Put in to array because not every line is outputted and row class alternates -->
[H: spellTemplate = json.append("",
"<tr><td class='header' colspan=2>%{spellName}</td></tr>",
"<tr><td class='header2' colspan='2'>%{header2}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Level:</td><td class='%{tRow}'>%{spellLevel}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Components:</td><td class='%{tRow}'>%{spellComponents}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Casting Time:</td><td class='%{tRow}'>%{castTime}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Range:</td><td class='%{tRow}'>%{range}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Target:</td><td class='%{tRow}'>%{target}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Area:</td><td class='%{tRow}'>%{area}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Effect:</td><td class='%{tRow}'>%{effect}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Duration:</td><td class='%{tRow}'>%{duration}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Saving Throw:</td><td class='%{tRow}'>%{savingThrow}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Spell Resistance:</td><td class='%{tRow}'>%{spellResistance}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Material Components:</td><td class='%{tRow}'>%{materialComponents}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Focus:</td><td class='%{tRow}'>%{focus}</td></tr>",
"<tr valign=top><td class='%{tRow}'>XP Cost:</td><td class='%{tRow}'>%{xpCost}</td></tr>",
"<tr valign=top><td class='%{tRow}'>Reference:</td><td class='%{tRow}'>%{reference}</td></tr>",
"<tr><td colspan=2>%{description}</td></tr>"
)]
<!-- list of fields to be printed -->
[H: varList = "spellName,header2,spellLevel,spellComponents,castTime,range,target,area,effect,duration,savingThrow,spellResistance,materialComponents,focus,xpCost,reference,description"]
<!-- build output to variable -->
[H: tRow = "odd"]
[H: output = "[]"]
[H, foreach(line,varList), code: {
[H, if(eval(line) != ""), code: {
[H: item = listFind(varList,line)]
[H: varStr = json.get(spellTemplate,item)]
[H: textLine = strformat(varStr)]
[H: output = json.append(output,textLine)]
[H, if(tRow == "odd"): tRow = "even"; tRow = "odd"]
};{}]
}]
[H: macro.return = json.toList(output,"")]