Difference between revisions of "Module:HonorUtils"
From Pathfinder Wiki
DesignerThan (talk | contribs) |
DesignerThan (talk | contribs) (- adding support for crosslink honors) |
||
(80 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
+ | local utilities = require ( "Module:Utilities" ) | ||
+ | local C_notUseLUAPattern = true | ||
+ | local C_srcIsNotHonor = false | ||
− | function p. | + | -- returns a table with the type and the number of the variant of the act. page |
+ | function p.getActVariantInfo( frame ) | ||
+ | local pageTitle = frame:expandTemplate{ title = 'PAGENAMEwithoutLang' } | ||
+ | mw.log('HonorUtils.getActVariantInfo (pageTitle): '..pageTitle) | ||
+ | local tPageTitle = mw.text.split(pageTitle, '/', C_notUseLUAPattern) | ||
+ | |||
+ | local subPageString = tPageTitle[3] | ||
+ | if (subPageString == nil) then | ||
+ | mw.log('HonorUtils.getActVariantInfo: It is not a valid Subpage (nil)!') | ||
+ | return nil | ||
+ | end | ||
+ | |||
+ | local variantNumber = utilities.getNumber(subPageString) | ||
+ | if (variantNumber == nil) then | ||
+ | -- if the page has no number then it is mostlikely number one | ||
+ | -- and if it is an invalid subpage then the number won't be used anyway's | ||
+ | variantNumber = 1 | ||
+ | end | ||
+ | local tReturn = { | ||
+ | variantNumber = variantNumber | ||
+ | } | ||
+ | -- check for valid subpages | ||
+ | if ( mw.ustring.find(subPageString, 'Requirements', 0, C_notUseLUAPattern) ~= nil ) then | ||
+ | mw.log('HonorUtils.getActVariantInfo: It is the Requirements Variant '..variantNumber) | ||
+ | tReturn['variantType'] = 'requirements' | ||
+ | tReturn['subPage'] = 'Requirements' | ||
+ | elseif (mw.ustring.find(subPageString, 'Answer Key', 0, C_notUseLUAPattern) ~= nil ) then | ||
+ | mw.log('HonorUtils.getActVariantInfo: It is the Answer Key Variant '..variantNumber) | ||
+ | tReturn['variantType'] = 'answerKey' | ||
+ | tReturn['subPage'] = 'Answer Key' | ||
+ | elseif (mw.ustring.find(subPageString, 'Lesson Plans', 0, C_notUseLUAPattern) ~= nil ) then | ||
+ | mw.log('HonorUtils.getActVariantInfo: It is the Lesson Plans page, no variant possible.') | ||
+ | tReturn['subPage'] = 'Lesson Plans' | ||
+ | elseif (mw.ustring.find(subPageString, 'Answer Key', 0, C_notUseLUAPattern) ~= nil ) then | ||
+ | mw.log('HonorUtils.getActVariantInfo: It is the Worksheet page, no variant possible.') | ||
+ | tReturn['subPage'] = 'Worksheet' | ||
+ | else | ||
+ | mw.log('HonorUtils.getActVariantInfo: It is a invalid Subpage!') | ||
+ | return nil | ||
+ | end | ||
+ | return tReturn | ||
+ | end | ||
+ | |||
+ | function p.getVariantsData( frame, landingPage, variantType, variantNumber ) | ||
+ | if ( frame == nil ) then | ||
+ | frame = mw.getCurrentFrame() | ||
+ | mw.log( 'HonorUtils.getVariantsData (frame): '..frame:getTitle() ) | ||
+ | end | ||
if ( landingPage == nil or landingPage == "" ) then | if ( landingPage == nil or landingPage == "" ) then | ||
landingPage = frame:expandTemplate{ title='GetHonorLandingPage' } | landingPage = frame:expandTemplate{ title='GetHonorLandingPage' } | ||
end | end | ||
− | local | + | local getAnswerVariants = true |
− | + | local tAnswerVariants = nil | |
− | + | local getRequirementVariants = true | |
− | + | local tRequirementVariants = nil | |
− | + | ||
− | + | -- check if only one variant is needed | |
− | + | if ( variantType ~= nil and variantType ~= '' ) then | |
+ | if (variantType == 'requirements') then | ||
+ | getAnswerVariants = false | ||
+ | elseif (variantType == 'answerKey') then | ||
+ | getRequirementVariants = false | ||
+ | else | ||
+ | mw.log( 'HonorUtils.getVariantsData: Invalid variantType!' ) | ||
+ | return nil; | ||
+ | end | ||
+ | end | ||
+ | |||
+ | if ( getAnswerVariants == true ) then | ||
+ | tAnswerVariants = getHonorVariants( 'answerKey', landingPage, C_srcIsNotHonor, variantNumber ) | ||
+ | if ( tAnswerVariants == nil ) then | ||
+ | mw.log("HonorUtils.getVariantsData: It isn't possible to get any answer variant's data!") | ||
+ | end | ||
+ | end | ||
+ | |||
+ | if ( getRequirementVariants == true ) then | ||
+ | tRequirementVariants = getHonorVariants( 'requirements', landingPage, C_srcIsNotHonor, variantNumber ) | ||
+ | if ( tRequirementVariants == nil ) then | ||
+ | mw.log("HonorUtils.getVariantsData: It isn't possible to get any requirement variant's data!") | ||
+ | end | ||
+ | end | ||
+ | |||
+ | local tVariants = { | ||
+ | answers = tAnswerVariants, | ||
+ | requirements = tRequirementVariants | ||
+ | } | ||
− | tVariants = | + | tVariants = expandHonorVariants( frame, tVariants ) |
+ | tVariants = translateHonorVariants( frame, tVariants ) | ||
return tVariants | return tVariants | ||
end | end | ||
− | function p. | + | function p.getCrosslinkhonorsData( frame, landingPage ) |
+ | local tCrosslinkhonor = {} | ||
+ | if ( frame == nil ) then | ||
+ | frame = mw.getCurrentFrame() | ||
+ | mw.log( 'HonorUtils.getCrosslinkhonorsData (frame): '..frame:getTitle() ) | ||
+ | end | ||
+ | mw.log( 'HonorUtils.getCrosslinkhonorsData (landingPage - function Argument): '..tostring(landingPage) ) | ||
+ | if ( landingPage == nil or landingPage == "" ) then | ||
+ | landingPage = frame:expandTemplate{ title='GetHonorLandingPage' } | ||
+ | mw.log( 'HonorUtils.getCrosslinkhonorsData (landingPage - from Template): '..landingPage ) | ||
+ | end | ||
+ | |||
+ | local tCrosslinkhonors = getCrosslinkhonors( landingPage, C_srcIsNotHonor ) | ||
+ | |||
+ | if ( tCrosslinkhonors ~= nil and #tCrosslinkhonors ~= 0 ) then | ||
+ | for key, crosslinkhonor in pairs(tCrosslinkhonors) do | ||
+ | --clh = crosslinkhonor | ||
+ | local strClhLandingPage = frame:expandTemplate{ | ||
+ | title='GetHonorLandingPage', | ||
+ | args = { honor = crosslinkhonor } | ||
+ | } | ||
+ | tCrosslinkhonors[key] = { | ||
+ | name = crosslinkhonor, | ||
+ | landingPage = strClhLandingPage, | ||
+ | tVariants = p.getVariantsData( frame, strClhLandingPage ) | ||
+ | } | ||
+ | end | ||
+ | else | ||
+ | tCrosslinkhonors = {} | ||
+ | end | ||
+ | |||
+ | return tCrosslinkhonors | ||
+ | end | ||
+ | |||
+ | function expandHonorVariants( frame, tVariants ) | ||
+ | local tRetVariants = tVariants | ||
if ( tVariants == nil ) then | if ( tVariants == nil ) then | ||
− | mw.log('HonorUtils. | + | mw.log('HonorUtils.expandHonorVariants: No Variants to Expand (nil)!') |
return {} | return {} | ||
end | end | ||
− | if ( tVariants['answers'] == nil | + | if ( tVariants['answers'] == nil ) then |
− | mw.log('HonorUtils. | + | mw.log('HonorUtils.expandHonorVariants: No Answer Variants to Expand!') |
else | else | ||
-- expand the answer Variants | -- expand the answer Variants | ||
+ | local tAnswers = tVariants['answers'] | ||
+ | mw.log('HonorUtils.expandHonorVariants: There are '..#tAnswers..' Answer Variants to Expand!') | ||
+ | for key, variant in pairs(tAnswers) do | ||
+ | mw.log('HonorUtils.expandHonorVariants (key, variant): '..key..', '..variant) | ||
+ | local tActVariant = { | ||
+ | orig = variant, | ||
+ | countries = {} | ||
+ | } | ||
+ | |||
+ | -- seperate the source language suffix | ||
+ | local tSplitAnsVariant = mw.text.split(variant, '/', C_notUseLUAPattern) | ||
+ | if (tSplitAnsVariant[2] ~= nil and tSplitAnsVariant[2] ~= '') then | ||
+ | tActVariant['srcLangSuffix'] = '/'..tSplitAnsVariant[2] | ||
+ | mw.log('HonorUtils.expandHonorVariants (srcLangSuffix): '..tActVariant['srcLangSuffix']) | ||
+ | else | ||
+ | mw.log('HonorUtils.expandHonorVariants: There is no source language set, default to english, which is an empty string ;)') | ||
+ | tActVariant['srcLangSuffix'] = '' | ||
+ | end | ||
+ | |||
+ | -- seperate Countries and Authority | ||
+ | tSplitAnsVariant = mw.text.split(tSplitAnsVariant[1], ';;', C_notUseLUAPattern) | ||
+ | if ( tSplitAnsVariant[1] ~= '') then | ||
+ | tActVariant['countries']['orig'] = tSplitAnsVariant[1] | ||
+ | -- seperate the Countries | ||
+ | tActVariant['countries']['split'] = mw.text.split(tActVariant['countries']['orig'], ';', C_notUseLUAPattern) | ||
+ | mw.log('HonorUtils.expandHonorVariants (Countries - Orig): '..tActVariant['countries']['orig']) | ||
+ | else | ||
+ | mw.log('HonorUtils.expandHonorVariants: There are no countries for that variant!') | ||
+ | end | ||
+ | -- set the authority | ||
+ | if ( tSplitAnsVariant[2] == nil ) then | ||
+ | tActVariant['authority'] = nil | ||
+ | mw.log('HonorUtils.expandHonorVariants (Authority): nil') | ||
+ | else | ||
+ | tActVariant['authority'] = tSplitAnsVariant[2] | ||
+ | mw.log('HonorUtils.expandHonorVariants (Authority): '..tActVariant['authority']) | ||
+ | end | ||
+ | -- save act. Variant into the table | ||
+ | tAnswers[key] = tActVariant | ||
+ | end | ||
+ | tVariants['answers'] = tAnswers | ||
+ | mw.log('HonorUtils.expandHonorVariants: '..#tVariants['answers']..' Answer Variants expanded!') | ||
end | end | ||
− | if ( tVariants['requirements'] == nil | + | if ( tVariants['requirements'] == nil ) then |
− | mw.log('HonorUtils. | + | mw.log('HonorUtils.expandHonorVariants: No Requirement Variants to Expand!') |
else | else | ||
-- expand the requirement Variants | -- expand the requirement Variants | ||
+ | local tRequirements = tVariants['requirements'] | ||
+ | mw.log('HonorUtils.expandHonorVariants: There are '..#tRequirements..' Requirement Variants to Expand!') | ||
+ | for key, variant in pairs(tRequirements) do | ||
+ | mw.log('HonorUtils.expandHonorVariants (key, variant): '..key..', '..variant) | ||
+ | -- seperate Authorities | ||
+ | local tSplitReqVariant = mw.text.split(variant, ';', C_notUseLUAPattern) | ||
+ | local tActReqVariant = { | ||
+ | orig = variant, | ||
+ | authorities = tSplitReqVariant | ||
+ | } | ||
+ | tRequirements[key] = tActReqVariant | ||
+ | end | ||
+ | tVariants['requirements'] = tRequirements | ||
+ | mw.log('HonorUtils.expandHonorVariants: '..#tVariants['requirements']..' Requirement Variants expanded!') | ||
end | end | ||
− | + | return tRetVariants | |
end | end | ||
− | function | + | function translateHonorVariants( frame, tVariants ) |
− | + | local tRetVariants = tVariants | |
− | if ( | + | if ( tRetVariants == nil ) then |
− | + | mw.log('HonorUtils.translateHonorVariants: There are no Variants (nil)!') | |
end | end | ||
− | if ( | + | if ( tRetVariants['answers'] == nil ) then |
− | + | mw.log('HonorUtils.translateHonorVariants: There are no Answer Variants!') | |
− | + | else | |
− | + | mw.log('HonorUtils.translateHonorVariants: There are '..#tRetVariants['answers']..' Answer Variants to translate!') | |
− | + | for varKey, variant in pairs(tRetVariants['answers']) do | |
− | + | if ( variant == nil or variant['countries'] == nil or variant['countries']['split'] == nil ) then | |
− | + | mw.log('HonorUtils.translateHonorVariants: Answer Variant is invalid!') | |
+ | else | ||
+ | mw.log('HonorUtils.translateHonorVariants: There are '..#variant['countries']['split']..' Answer Variant Countries to translate!') | ||
+ | for countryKey, country in pairs(variant['countries']['split']) do | ||
+ | local trans = utilities.localize( country, 'Countries' ) | ||
+ | -- check if Localization returned something, if not set the original string | ||
+ | mw.log('HonorUtils.translateHonorVariants (country, trans): '..country..', '..trans) | ||
+ | if ( trans == '' ) then | ||
+ | trans = country | ||
+ | end | ||
+ | tRetVariants['answers'][varKey]['countries']['split'][countryKey] = { | ||
+ | orig = country, | ||
+ | translated = trans | ||
+ | } | ||
+ | end | ||
+ | mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['answers'][varKey]['countries']['split']..' Answer Variant Countries were translated!') | ||
+ | end | ||
+ | end | ||
+ | mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['answers']..' Answer Variants were translated!') | ||
+ | end | ||
+ | if ( tRetVariants['requirements'] == nil ) then | ||
+ | mw.log('HonorUtils.translateHonorVariants: There are no Requirement Variants!') | ||
+ | else | ||
+ | mw.log('HonorUtils.translateHonorVariants: There are '..#tRetVariants['requirements']..' Requriement Variants to translate!') | ||
+ | for varKey, variant in pairs(tRetVariants['requirements']) do | ||
+ | if ( variant == nil or variant['authorities'] == nil ) then | ||
+ | mw.log('HonorUtils.translateHonorVariants: Requriement Variant is invalid!') | ||
+ | else | ||
+ | mw.log('HonorUtils.translateHonorVariants: There are '..#variant['authorities']..' Requriement Variant Authorities to translate!') | ||
+ | for authorityKey, authority in pairs(variant['authorities']) do | ||
+ | local trans = utilities.localize( authority, 'Authorities' ) | ||
+ | -- check if Localization returned something, if not set the original string | ||
+ | if ( trans == '' ) then | ||
+ | trans = authority | ||
+ | end | ||
+ | tRetVariants['requirements'][varKey]['authorities'][authorityKey] = { | ||
+ | orig = authority, | ||
+ | translated = trans | ||
+ | } | ||
+ | end | ||
+ | mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['requirements'][varKey]['authorities']..' Requriement Variant Authorities were translated!') | ||
+ | end | ||
+ | end | ||
+ | mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['requirements']..' Requriement Variants were translated!') | ||
end | end | ||
− | + | return tRetVariants | |
− | |||
− | |||
− | |||
− | return | ||
end | end | ||
− | function | + | function getCrosslinkhonors( src, srcIsHonor ) |
− | if ( | + | local frame = mw.getCurrentFrame() |
− | + | mw.log('HonorUtils.getCrosslinkhonors (frame): '..frame:getTitle()) | |
− | + | local parentFrame = frame:getParent() | |
− | + | local strActPageTitle = mw.title.getCurrentTitle().text | |
− | + | mw.log('HonorUtils.getCrosslinkhonors (strActPageTitle): '..strActPageTitle) | |
− | + | local srcMode = 'dpl' -- it can be 'vardefine', 'parentFrame' or 'dpl' (default) | |
− | + | local cntCrosslinkhonors = 0 | |
− | + | -- check if we are on the landing page of the wanted honor | |
− | + | -- if yes we are able to use DPL | |
+ | -- if not we check if we are inside of the Template:HonorLanding | ||
+ | -- if yes we can use the parentFrame method | ||
+ | -- if not then we use the vardefine method | ||
+ | local bIsLandingPage = false | ||
+ | if ( srcIsHonor == true and strActPageTitle == 'AY Honors/'..src or | ||
+ | strActPageTitle == src ) then | ||
+ | bIsLandingPage = true | ||
+ | end | ||
+ | mw.log('HonorUtils.getCrosslinkhonors: Is it the honors landing page? '..tostring(bIsLandingPage)) | ||
+ | if ( bIsLandingPage ~= true ) then | ||
+ | mw.log('HonorUtils.getCrosslinkhonors: Get variants data with DPL!') | ||
+ | cntCrosslinkhonors = tonumber(p.getHonorMetadata(src, 'cnt_crosslinkhonors', srcIsHonor)) | ||
+ | srcMode = 'dpl' | ||
+ | -- check if we are inside of Template:HonorLanding | ||
+ | elseif ( parentFrame ~= nil and | ||
+ | parentFrame:getTitle() == 'Template:HonorLanding' and | ||
+ | parentFrame.args['cnt_crosslinkhonors'] ~= nil and | ||
+ | parentFrame.args['cnt_crosslinkhonors'] ~= '' | ||
+ | ) then | ||
+ | mw.log('HonorUtils.getCrosslinkhonors: Get Crosslinkhonors from parent Frame!') | ||
+ | srcMode = 'parentFrame' | ||
+ | cntCrosslinkhonors = parentFrame.args['cnt_crosslinkhonors'] | ||
+ | else | ||
+ | mw.log('HonorUtils.getCrosslinkhonors: Get Crosslinkhonors from vardefine!') | ||
+ | srcMode = 'vardefine' | ||
+ | cntCrosslinkhonors = utilities.getVar('cnt_crosslinkhonors') | ||
+ | end | ||
+ | if (cntCrosslinkhonors == nil or cntCrosslinkhonors == '' or tonumber(cntCrosslinkhonors) == 0) then | ||
+ | mw.log('HonorUtils.getCrosslinkhonors: There are no Crosslinkhonors!') | ||
+ | return nil | ||
+ | end | ||
+ | mw.log('HonorUtils.getCrosslinkhonors (cntCrosslinkhonors): '..cntCrosslinkhonors) | ||
+ | local actLink = 0 | ||
+ | local tCrosslinkhonorArguments = {} | ||
+ | -- get all Crosshonor Links | ||
+ | for actLink = 1, cntCrosslinkhonors, 1 do | ||
+ | mw.log('HonorUtils.getCrosslinkhonors (actLink): '..actLink) | ||
+ | tCrosslinkhonorArguments[actLink] = 'crosslinkhonor_'..actLink | ||
end | end | ||
− | + | local tCrosslinkhonors = {} | |
− | + | if ( srcMode == 'vardefine' ) then | |
− | + | for key, crosslinkhonorArg in pairs(tCrosslinkhonorArguments) do | |
− | + | tCrosslinkhonors[key] = utilities.getVar(crosslinkhonorArg) | |
− | local | ||
− | |||
− | for | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | elseif ( srcMode == 'parentFrame' ) then | |
− | + | for key, crosslinkhonorArg in pairs(tCrosslinkhonorArguments) do | |
− | + | tCrosslinkhonors[key] = parentFrame.args[crosslinkhonorArg] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | for | ||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | else | |
+ | local strCrosslinkhonorArguments = mw.text.listToText(tCrosslinkhonorArguments, ':', ':') | ||
+ | mw.log('HonorUtils.getCrosslinkhonors (strCrosslinkhonorArguments): '..strCrosslinkhonorArguments) | ||
+ | local strCrosslinkhonors = p.getHonorMetadata(src, strCrosslinkhonorArguments, srcIsHonor) | ||
+ | strCrosslinkhonors = mw.ustring.gsub(strCrosslinkhonors,"[\n\r]", "") | ||
+ | mw.log('HonorUtils.getCrosslinkhonors (strCrosslinkhonors): '..strCrosslinkhonors) | ||
+ | tCrosslinkhonors = mw.text.split(strCrosslinkhonors, '|', C_notUseLUAPattern) | ||
end | end | ||
− | return | + | mw.log('HonorUtils.getCrosslinkhonors (#tCrosslinkhonors): '..#tCrosslinkhonors) |
+ | return tCrosslinkhonors | ||
end | end | ||
− | function getHonorVariants(variantType, src, srcIsHonor) | + | function getHonorVariants( variantType, src, srcIsHonor, variantNumber ) |
+ | local frame = mw.getCurrentFrame() | ||
+ | mw.log('HonorUtils.getHonorVariants (frame): '..frame:getTitle()) | ||
+ | local parentFrame = frame:getParent() | ||
+ | local strActPageTitle = mw.title.getCurrentTitle().text | ||
+ | mw.log('HonorUtils.getHonorVariants (strActPageTitle): '..strActPageTitle) | ||
+ | local variantSrcMode = 'dpl' -- it can be 'vardefine', 'parentFrame' or 'dpl' (default) | ||
if (variantType == nil or variantType == '') then | if (variantType == nil or variantType == '') then | ||
variantType = 'requirement' | variantType = 'requirement' | ||
+ | mw.log('HonorUtils.getHonorVariants: No variant Type set, default to requirements!') | ||
end | end | ||
− | local cntOfVariants = tonumber(p.getHonorMetadata(src, ' | + | local cntOfVariantsArgString = 'cnt_'..variantType..'_variants' |
− | if (cntOfVariants == nil or cntOfVariants == 0) then | + | local cntOfVariants = 0 |
+ | -- check if we are on the landing page of the wanted honor | ||
+ | -- if yes we are able to use DPL | ||
+ | -- if not we check if we are inside of the Template:HonorLanding | ||
+ | -- if yes we can use the parentFrame method | ||
+ | -- if not then we use the vardefine method | ||
+ | local bIsLandingPage = false | ||
+ | if ( srcIsHonor == true and strActPageTitle == 'AY Honors/'..src or | ||
+ | strActPageTitle == src ) then | ||
+ | bIsLandingPage = true | ||
+ | end | ||
+ | mw.log('HonorUtils.getHonorVariants: Is it the honors landing page? '..tostring(bIsLandingPage)) | ||
+ | if ( bIsLandingPage ~= true ) then | ||
+ | mw.log('HonorUtils.getHonorVariants: Get variants data with DPL!') | ||
+ | cntOfVariants = tonumber(p.getHonorMetadata(src, cntOfVariantsArgString, srcIsHonor)) | ||
+ | variantSrcMode = 'dpl' | ||
+ | -- check if we are inside of Template:HonorLanding | ||
+ | elseif ( parentFrame ~= nil and | ||
+ | parentFrame:getTitle() == 'Template:HonorLanding' and | ||
+ | parentFrame.args[cntOfVariantsArgString] ~= nil and | ||
+ | parentFrame.args[cntOfVariantsArgString] ~= '' | ||
+ | ) then | ||
+ | mw.log('HonorUtils.getHonorVariants: Get variants data from parent Frame!') | ||
+ | variantSrcMode = 'parentFrame' | ||
+ | cntOfVariants = parentFrame.args[cntOfVariantsArgString] | ||
+ | else | ||
+ | mw.log('HonorUtils.getHonorVariants: Get variants data from vardefine!') | ||
+ | variantSrcMode = 'vardefine' | ||
+ | cntOfVariants = utilities.getVar(cntOfVariantsArgString) | ||
+ | end | ||
+ | if (cntOfVariants == nil or cntOfVariants == '' or tonumber(cntOfVariants) == 0) then | ||
mw.log('HonorUtils.getHonorVariants: There are no '..variantType..' variants!') | mw.log('HonorUtils.getHonorVariants: There are no '..variantType..' variants!') | ||
− | return | + | return nil |
end | end | ||
mw.log('HonorUtils.getHonorVariants (cntOfVariants): '..cntOfVariants) | mw.log('HonorUtils.getHonorVariants (cntOfVariants): '..cntOfVariants) | ||
local actVariant = 0 | local actVariant = 0 | ||
local tVariantArguments = {} | local tVariantArguments = {} | ||
− | for actVariant = 1, cntOfVariants, 1 do | + | variantNumber = tonumber(variantNumber) |
− | + | if ( variantNumber ~= nil ) then | |
− | + | -- only get the defined Variant | |
+ | if ( variantNumber <= cntOfVariants ) then | ||
+ | tVariantArguments[1] = variantType..'_'..variantNumber | ||
+ | else | ||
+ | mw.log('HonorUtils.getHonorVariants: invalid variantNumber ('..variantNumber..')!') | ||
+ | return nil | ||
+ | end | ||
+ | else | ||
+ | -- get all variants | ||
+ | for actVariant = 1, cntOfVariants, 1 do | ||
+ | mw.log('HonorUtils.getHonorVariants (actVariant): '..actVariant) | ||
+ | tVariantArguments[actVariant] = variantType .. '_' .. actVariant | ||
+ | end | ||
+ | end | ||
+ | |||
+ | local tVariants = {} | ||
+ | if ( variantSrcMode == 'vardefine' ) then | ||
+ | for key, variantArg in pairs(tVariantArguments) do | ||
+ | tVariants[key] = utilities.getVar(variantArg) | ||
+ | end | ||
+ | elseif ( variantSrcMode == 'parentFrame' ) then | ||
+ | for key, variantArg in pairs(tVariantArguments) do | ||
+ | tVariants[key] = parentFrame.args[variantArg] | ||
+ | end | ||
+ | else | ||
+ | local strVariantArguments = mw.text.listToText(tVariantArguments, ':', ':') | ||
+ | mw.log('HonorUtils.getHonorVariants (strVariantArguments): '..strVariantArguments) | ||
+ | local strVariant = p.getHonorMetadata(src, strVariantArguments, srcIsHonor) | ||
+ | strVariant = mw.ustring.gsub(strVariant,"[\n\r]", "") | ||
+ | mw.log('HonorUtils.getHonorVariants (strVariant): '..strVariant) | ||
+ | tVariants = mw.text.split(strVariant, '|', C_notUseLUAPattern) | ||
end | end | ||
− | + | mw.log('HonorUtils.getHonorVariants (#tVariants): '..#tVariants) | |
− | + | return tVariants | |
− | |||
− | mw.log('HonorUtils.getHonorVariants ( | ||
− | return | ||
end | end | ||
Latest revision as of 18:55, 5 September 2021
Documentation for this module may be created at Module:HonorUtils/doc
local p = {}
local utilities = require ( "Module:Utilities" )
local C_notUseLUAPattern = true
local C_srcIsNotHonor = false
-- returns a table with the type and the number of the variant of the act. page
function p.getActVariantInfo( frame )
local pageTitle = frame:expandTemplate{ title = 'PAGENAMEwithoutLang' }
mw.log('HonorUtils.getActVariantInfo (pageTitle): '..pageTitle)
local tPageTitle = mw.text.split(pageTitle, '/', C_notUseLUAPattern)
local subPageString = tPageTitle[3]
if (subPageString == nil) then
mw.log('HonorUtils.getActVariantInfo: It is not a valid Subpage (nil)!')
return nil
end
local variantNumber = utilities.getNumber(subPageString)
if (variantNumber == nil) then
-- if the page has no number then it is mostlikely number one
-- and if it is an invalid subpage then the number won't be used anyway's
variantNumber = 1
end
local tReturn = {
variantNumber = variantNumber
}
-- check for valid subpages
if ( mw.ustring.find(subPageString, 'Requirements', 0, C_notUseLUAPattern) ~= nil ) then
mw.log('HonorUtils.getActVariantInfo: It is the Requirements Variant '..variantNumber)
tReturn['variantType'] = 'requirements'
tReturn['subPage'] = 'Requirements'
elseif (mw.ustring.find(subPageString, 'Answer Key', 0, C_notUseLUAPattern) ~= nil ) then
mw.log('HonorUtils.getActVariantInfo: It is the Answer Key Variant '..variantNumber)
tReturn['variantType'] = 'answerKey'
tReturn['subPage'] = 'Answer Key'
elseif (mw.ustring.find(subPageString, 'Lesson Plans', 0, C_notUseLUAPattern) ~= nil ) then
mw.log('HonorUtils.getActVariantInfo: It is the Lesson Plans page, no variant possible.')
tReturn['subPage'] = 'Lesson Plans'
elseif (mw.ustring.find(subPageString, 'Answer Key', 0, C_notUseLUAPattern) ~= nil ) then
mw.log('HonorUtils.getActVariantInfo: It is the Worksheet page, no variant possible.')
tReturn['subPage'] = 'Worksheet'
else
mw.log('HonorUtils.getActVariantInfo: It is a invalid Subpage!')
return nil
end
return tReturn
end
function p.getVariantsData( frame, landingPage, variantType, variantNumber )
if ( frame == nil ) then
frame = mw.getCurrentFrame()
mw.log( 'HonorUtils.getVariantsData (frame): '..frame:getTitle() )
end
if ( landingPage == nil or landingPage == "" ) then
landingPage = frame:expandTemplate{ title='GetHonorLandingPage' }
end
local getAnswerVariants = true
local tAnswerVariants = nil
local getRequirementVariants = true
local tRequirementVariants = nil
-- check if only one variant is needed
if ( variantType ~= nil and variantType ~= '' ) then
if (variantType == 'requirements') then
getAnswerVariants = false
elseif (variantType == 'answerKey') then
getRequirementVariants = false
else
mw.log( 'HonorUtils.getVariantsData: Invalid variantType!' )
return nil;
end
end
if ( getAnswerVariants == true ) then
tAnswerVariants = getHonorVariants( 'answerKey', landingPage, C_srcIsNotHonor, variantNumber )
if ( tAnswerVariants == nil ) then
mw.log("HonorUtils.getVariantsData: It isn't possible to get any answer variant's data!")
end
end
if ( getRequirementVariants == true ) then
tRequirementVariants = getHonorVariants( 'requirements', landingPage, C_srcIsNotHonor, variantNumber )
if ( tRequirementVariants == nil ) then
mw.log("HonorUtils.getVariantsData: It isn't possible to get any requirement variant's data!")
end
end
local tVariants = {
answers = tAnswerVariants,
requirements = tRequirementVariants
}
tVariants = expandHonorVariants( frame, tVariants )
tVariants = translateHonorVariants( frame, tVariants )
return tVariants
end
function p.getCrosslinkhonorsData( frame, landingPage )
local tCrosslinkhonor = {}
if ( frame == nil ) then
frame = mw.getCurrentFrame()
mw.log( 'HonorUtils.getCrosslinkhonorsData (frame): '..frame:getTitle() )
end
mw.log( 'HonorUtils.getCrosslinkhonorsData (landingPage - function Argument): '..tostring(landingPage) )
if ( landingPage == nil or landingPage == "" ) then
landingPage = frame:expandTemplate{ title='GetHonorLandingPage' }
mw.log( 'HonorUtils.getCrosslinkhonorsData (landingPage - from Template): '..landingPage )
end
local tCrosslinkhonors = getCrosslinkhonors( landingPage, C_srcIsNotHonor )
if ( tCrosslinkhonors ~= nil and #tCrosslinkhonors ~= 0 ) then
for key, crosslinkhonor in pairs(tCrosslinkhonors) do
--clh = crosslinkhonor
local strClhLandingPage = frame:expandTemplate{
title='GetHonorLandingPage',
args = { honor = crosslinkhonor }
}
tCrosslinkhonors[key] = {
name = crosslinkhonor,
landingPage = strClhLandingPage,
tVariants = p.getVariantsData( frame, strClhLandingPage )
}
end
else
tCrosslinkhonors = {}
end
return tCrosslinkhonors
end
function expandHonorVariants( frame, tVariants )
local tRetVariants = tVariants
if ( tVariants == nil ) then
mw.log('HonorUtils.expandHonorVariants: No Variants to Expand (nil)!')
return {}
end
if ( tVariants['answers'] == nil ) then
mw.log('HonorUtils.expandHonorVariants: No Answer Variants to Expand!')
else
-- expand the answer Variants
local tAnswers = tVariants['answers']
mw.log('HonorUtils.expandHonorVariants: There are '..#tAnswers..' Answer Variants to Expand!')
for key, variant in pairs(tAnswers) do
mw.log('HonorUtils.expandHonorVariants (key, variant): '..key..', '..variant)
local tActVariant = {
orig = variant,
countries = {}
}
-- seperate the source language suffix
local tSplitAnsVariant = mw.text.split(variant, '/', C_notUseLUAPattern)
if (tSplitAnsVariant[2] ~= nil and tSplitAnsVariant[2] ~= '') then
tActVariant['srcLangSuffix'] = '/'..tSplitAnsVariant[2]
mw.log('HonorUtils.expandHonorVariants (srcLangSuffix): '..tActVariant['srcLangSuffix'])
else
mw.log('HonorUtils.expandHonorVariants: There is no source language set, default to english, which is an empty string ;)')
tActVariant['srcLangSuffix'] = ''
end
-- seperate Countries and Authority
tSplitAnsVariant = mw.text.split(tSplitAnsVariant[1], ';;', C_notUseLUAPattern)
if ( tSplitAnsVariant[1] ~= '') then
tActVariant['countries']['orig'] = tSplitAnsVariant[1]
-- seperate the Countries
tActVariant['countries']['split'] = mw.text.split(tActVariant['countries']['orig'], ';', C_notUseLUAPattern)
mw.log('HonorUtils.expandHonorVariants (Countries - Orig): '..tActVariant['countries']['orig'])
else
mw.log('HonorUtils.expandHonorVariants: There are no countries for that variant!')
end
-- set the authority
if ( tSplitAnsVariant[2] == nil ) then
tActVariant['authority'] = nil
mw.log('HonorUtils.expandHonorVariants (Authority): nil')
else
tActVariant['authority'] = tSplitAnsVariant[2]
mw.log('HonorUtils.expandHonorVariants (Authority): '..tActVariant['authority'])
end
-- save act. Variant into the table
tAnswers[key] = tActVariant
end
tVariants['answers'] = tAnswers
mw.log('HonorUtils.expandHonorVariants: '..#tVariants['answers']..' Answer Variants expanded!')
end
if ( tVariants['requirements'] == nil ) then
mw.log('HonorUtils.expandHonorVariants: No Requirement Variants to Expand!')
else
-- expand the requirement Variants
local tRequirements = tVariants['requirements']
mw.log('HonorUtils.expandHonorVariants: There are '..#tRequirements..' Requirement Variants to Expand!')
for key, variant in pairs(tRequirements) do
mw.log('HonorUtils.expandHonorVariants (key, variant): '..key..', '..variant)
-- seperate Authorities
local tSplitReqVariant = mw.text.split(variant, ';', C_notUseLUAPattern)
local tActReqVariant = {
orig = variant,
authorities = tSplitReqVariant
}
tRequirements[key] = tActReqVariant
end
tVariants['requirements'] = tRequirements
mw.log('HonorUtils.expandHonorVariants: '..#tVariants['requirements']..' Requirement Variants expanded!')
end
return tRetVariants
end
function translateHonorVariants( frame, tVariants )
local tRetVariants = tVariants
if ( tRetVariants == nil ) then
mw.log('HonorUtils.translateHonorVariants: There are no Variants (nil)!')
end
if ( tRetVariants['answers'] == nil ) then
mw.log('HonorUtils.translateHonorVariants: There are no Answer Variants!')
else
mw.log('HonorUtils.translateHonorVariants: There are '..#tRetVariants['answers']..' Answer Variants to translate!')
for varKey, variant in pairs(tRetVariants['answers']) do
if ( variant == nil or variant['countries'] == nil or variant['countries']['split'] == nil ) then
mw.log('HonorUtils.translateHonorVariants: Answer Variant is invalid!')
else
mw.log('HonorUtils.translateHonorVariants: There are '..#variant['countries']['split']..' Answer Variant Countries to translate!')
for countryKey, country in pairs(variant['countries']['split']) do
local trans = utilities.localize( country, 'Countries' )
-- check if Localization returned something, if not set the original string
mw.log('HonorUtils.translateHonorVariants (country, trans): '..country..', '..trans)
if ( trans == '' ) then
trans = country
end
tRetVariants['answers'][varKey]['countries']['split'][countryKey] = {
orig = country,
translated = trans
}
end
mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['answers'][varKey]['countries']['split']..' Answer Variant Countries were translated!')
end
end
mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['answers']..' Answer Variants were translated!')
end
if ( tRetVariants['requirements'] == nil ) then
mw.log('HonorUtils.translateHonorVariants: There are no Requirement Variants!')
else
mw.log('HonorUtils.translateHonorVariants: There are '..#tRetVariants['requirements']..' Requriement Variants to translate!')
for varKey, variant in pairs(tRetVariants['requirements']) do
if ( variant == nil or variant['authorities'] == nil ) then
mw.log('HonorUtils.translateHonorVariants: Requriement Variant is invalid!')
else
mw.log('HonorUtils.translateHonorVariants: There are '..#variant['authorities']..' Requriement Variant Authorities to translate!')
for authorityKey, authority in pairs(variant['authorities']) do
local trans = utilities.localize( authority, 'Authorities' )
-- check if Localization returned something, if not set the original string
if ( trans == '' ) then
trans = authority
end
tRetVariants['requirements'][varKey]['authorities'][authorityKey] = {
orig = authority,
translated = trans
}
end
mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['requirements'][varKey]['authorities']..' Requriement Variant Authorities were translated!')
end
end
mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['requirements']..' Requriement Variants were translated!')
end
return tRetVariants
end
function getCrosslinkhonors( src, srcIsHonor )
local frame = mw.getCurrentFrame()
mw.log('HonorUtils.getCrosslinkhonors (frame): '..frame:getTitle())
local parentFrame = frame:getParent()
local strActPageTitle = mw.title.getCurrentTitle().text
mw.log('HonorUtils.getCrosslinkhonors (strActPageTitle): '..strActPageTitle)
local srcMode = 'dpl' -- it can be 'vardefine', 'parentFrame' or 'dpl' (default)
local cntCrosslinkhonors = 0
-- check if we are on the landing page of the wanted honor
-- if yes we are able to use DPL
-- if not we check if we are inside of the Template:HonorLanding
-- if yes we can use the parentFrame method
-- if not then we use the vardefine method
local bIsLandingPage = false
if ( srcIsHonor == true and strActPageTitle == 'AY Honors/'..src or
strActPageTitle == src ) then
bIsLandingPage = true
end
mw.log('HonorUtils.getCrosslinkhonors: Is it the honors landing page? '..tostring(bIsLandingPage))
if ( bIsLandingPage ~= true ) then
mw.log('HonorUtils.getCrosslinkhonors: Get variants data with DPL!')
cntCrosslinkhonors = tonumber(p.getHonorMetadata(src, 'cnt_crosslinkhonors', srcIsHonor))
srcMode = 'dpl'
-- check if we are inside of Template:HonorLanding
elseif ( parentFrame ~= nil and
parentFrame:getTitle() == 'Template:HonorLanding' and
parentFrame.args['cnt_crosslinkhonors'] ~= nil and
parentFrame.args['cnt_crosslinkhonors'] ~= ''
) then
mw.log('HonorUtils.getCrosslinkhonors: Get Crosslinkhonors from parent Frame!')
srcMode = 'parentFrame'
cntCrosslinkhonors = parentFrame.args['cnt_crosslinkhonors']
else
mw.log('HonorUtils.getCrosslinkhonors: Get Crosslinkhonors from vardefine!')
srcMode = 'vardefine'
cntCrosslinkhonors = utilities.getVar('cnt_crosslinkhonors')
end
if (cntCrosslinkhonors == nil or cntCrosslinkhonors == '' or tonumber(cntCrosslinkhonors) == 0) then
mw.log('HonorUtils.getCrosslinkhonors: There are no Crosslinkhonors!')
return nil
end
mw.log('HonorUtils.getCrosslinkhonors (cntCrosslinkhonors): '..cntCrosslinkhonors)
local actLink = 0
local tCrosslinkhonorArguments = {}
-- get all Crosshonor Links
for actLink = 1, cntCrosslinkhonors, 1 do
mw.log('HonorUtils.getCrosslinkhonors (actLink): '..actLink)
tCrosslinkhonorArguments[actLink] = 'crosslinkhonor_'..actLink
end
local tCrosslinkhonors = {}
if ( srcMode == 'vardefine' ) then
for key, crosslinkhonorArg in pairs(tCrosslinkhonorArguments) do
tCrosslinkhonors[key] = utilities.getVar(crosslinkhonorArg)
end
elseif ( srcMode == 'parentFrame' ) then
for key, crosslinkhonorArg in pairs(tCrosslinkhonorArguments) do
tCrosslinkhonors[key] = parentFrame.args[crosslinkhonorArg]
end
else
local strCrosslinkhonorArguments = mw.text.listToText(tCrosslinkhonorArguments, ':', ':')
mw.log('HonorUtils.getCrosslinkhonors (strCrosslinkhonorArguments): '..strCrosslinkhonorArguments)
local strCrosslinkhonors = p.getHonorMetadata(src, strCrosslinkhonorArguments, srcIsHonor)
strCrosslinkhonors = mw.ustring.gsub(strCrosslinkhonors,"[\n\r]", "")
mw.log('HonorUtils.getCrosslinkhonors (strCrosslinkhonors): '..strCrosslinkhonors)
tCrosslinkhonors = mw.text.split(strCrosslinkhonors, '|', C_notUseLUAPattern)
end
mw.log('HonorUtils.getCrosslinkhonors (#tCrosslinkhonors): '..#tCrosslinkhonors)
return tCrosslinkhonors
end
function getHonorVariants( variantType, src, srcIsHonor, variantNumber )
local frame = mw.getCurrentFrame()
mw.log('HonorUtils.getHonorVariants (frame): '..frame:getTitle())
local parentFrame = frame:getParent()
local strActPageTitle = mw.title.getCurrentTitle().text
mw.log('HonorUtils.getHonorVariants (strActPageTitle): '..strActPageTitle)
local variantSrcMode = 'dpl' -- it can be 'vardefine', 'parentFrame' or 'dpl' (default)
if (variantType == nil or variantType == '') then
variantType = 'requirement'
mw.log('HonorUtils.getHonorVariants: No variant Type set, default to requirements!')
end
local cntOfVariantsArgString = 'cnt_'..variantType..'_variants'
local cntOfVariants = 0
-- check if we are on the landing page of the wanted honor
-- if yes we are able to use DPL
-- if not we check if we are inside of the Template:HonorLanding
-- if yes we can use the parentFrame method
-- if not then we use the vardefine method
local bIsLandingPage = false
if ( srcIsHonor == true and strActPageTitle == 'AY Honors/'..src or
strActPageTitle == src ) then
bIsLandingPage = true
end
mw.log('HonorUtils.getHonorVariants: Is it the honors landing page? '..tostring(bIsLandingPage))
if ( bIsLandingPage ~= true ) then
mw.log('HonorUtils.getHonorVariants: Get variants data with DPL!')
cntOfVariants = tonumber(p.getHonorMetadata(src, cntOfVariantsArgString, srcIsHonor))
variantSrcMode = 'dpl'
-- check if we are inside of Template:HonorLanding
elseif ( parentFrame ~= nil and
parentFrame:getTitle() == 'Template:HonorLanding' and
parentFrame.args[cntOfVariantsArgString] ~= nil and
parentFrame.args[cntOfVariantsArgString] ~= ''
) then
mw.log('HonorUtils.getHonorVariants: Get variants data from parent Frame!')
variantSrcMode = 'parentFrame'
cntOfVariants = parentFrame.args[cntOfVariantsArgString]
else
mw.log('HonorUtils.getHonorVariants: Get variants data from vardefine!')
variantSrcMode = 'vardefine'
cntOfVariants = utilities.getVar(cntOfVariantsArgString)
end
if (cntOfVariants == nil or cntOfVariants == '' or tonumber(cntOfVariants) == 0) then
mw.log('HonorUtils.getHonorVariants: There are no '..variantType..' variants!')
return nil
end
mw.log('HonorUtils.getHonorVariants (cntOfVariants): '..cntOfVariants)
local actVariant = 0
local tVariantArguments = {}
variantNumber = tonumber(variantNumber)
if ( variantNumber ~= nil ) then
-- only get the defined Variant
if ( variantNumber <= cntOfVariants ) then
tVariantArguments[1] = variantType..'_'..variantNumber
else
mw.log('HonorUtils.getHonorVariants: invalid variantNumber ('..variantNumber..')!')
return nil
end
else
-- get all variants
for actVariant = 1, cntOfVariants, 1 do
mw.log('HonorUtils.getHonorVariants (actVariant): '..actVariant)
tVariantArguments[actVariant] = variantType .. '_' .. actVariant
end
end
local tVariants = {}
if ( variantSrcMode == 'vardefine' ) then
for key, variantArg in pairs(tVariantArguments) do
tVariants[key] = utilities.getVar(variantArg)
end
elseif ( variantSrcMode == 'parentFrame' ) then
for key, variantArg in pairs(tVariantArguments) do
tVariants[key] = parentFrame.args[variantArg]
end
else
local strVariantArguments = mw.text.listToText(tVariantArguments, ':', ':')
mw.log('HonorUtils.getHonorVariants (strVariantArguments): '..strVariantArguments)
local strVariant = p.getHonorMetadata(src, strVariantArguments, srcIsHonor)
strVariant = mw.ustring.gsub(strVariant,"[\n\r]", "")
mw.log('HonorUtils.getHonorVariants (strVariant): '..strVariant)
tVariants = mw.text.split(strVariant, '|', C_notUseLUAPattern)
end
mw.log('HonorUtils.getHonorVariants (#tVariants): '..#tVariants)
return tVariants
end
function p.getHonorMetadata(src, metadata, srcIsHonor)
local frame = mw.getCurrentFrame()
local lPage = ''
if (src ~= '' and src ~= nil) then
if (srcIsHonor == true) then
lPage = 'AY Honors/' .. src
else
lPage = src
end
end
lPage = frame:expandTemplate{ title = 'GetHonorLandingPage', args = {page = lPage}}
return frame:preprocess( '{{#dpl:|debug=0|title=' .. lPage .. '|include={HonorLanding}:' .. metadata ..'}}' )
end
return p