Difference between revisions of "Module:HonorChallPart"

From Pathfinder Wiki
(Created page with "local p = {} local honorUtils = require ( "Module:HonorUtils" ) local utilities = require ( "Module:Utilities" ) function p.getChallangingPart( frame ) local reqVariants = h...")
 
Line 3: Line 3:
 
local utilities = require ( "Module:Utilities" )
 
local utilities = require ( "Module:Utilities" )
  
function p.getChallangingPart( frame )
+
function p.getChallengingPart( frame )
 
local reqVariants = honorUtils.getVariantsData( frame, nil, 'requirements', nil )
 
local reqVariants = honorUtils.getVariantsData( frame, nil, 'requirements', nil )
local HTMLTabs = ""
+
local landingPage = frame:expandTemplate{ title='GetHonorLandingPage' }
local HTMLTabsContent = ""
+
local langSuffix = frame:preprocess( '{{PAGELANGUAGE}}' )
 +
local retString = nil
 
 
 +
if ( reqVariants ~= nil and reqVariants['requirements'] ~= nil ) then
 +
if ( #reqVariants['requirements'] > 1 ) then
 +
-- create tab's
 +
for key, variant in pairs(reqVariants['requirements']) do
 +
tabText = ''
 +
for authorityKey, authority in pairs(variant['authorities']) do
 +
if ( #tabText > 0 ) then
 +
tabText = tabText..' & '..authority['translated']
 +
else
 +
tabText = authority['translated']
 +
end
 +
end
 +
local isActive = false
 +
if ( key == 1 ) then
 +
isActive = true
 +
end
 +
authAbbrev = variant['authorities'][1]['orig']
 +
 +
local HTMLTabContainer = mw.html.create( 'ul' )
 +
HTMLTabContainer
 +
:addClass( 'nav nav-tabs' )
 +
:attr( 'id', 'challengeTab' )
 +
:attr( 'role', 'tablist' )
 +
:wikitext( createNavTab( authAbbrev, tabText, isActive) )
 +
 +
local reqPageLink = landingPage..'/Requirements'
 +
if ( key > 1 ) then
 +
reqPageLink = reqPageLink..' '..key
 +
end
 +
reqPageLink = reqPageLink..'/'..langSuffix
 +
 +
local content = frame:callParserFunction( '#lst', reqPageLink, 'challenge' )
 +
local HTMLTabsContent = mw.html.create( 'div' )
 +
HTMLTabsContent
 +
:addClass( 'tab-content' )
 +
:attr( 'challengeTabContent' )
 +
:wikitext( createContentTab( authAbbrev, content, isActive ))
 +
 +
retString = tostring( HTMLTabContainer )..tostring( HTMLTabsContent )
 +
end
 +
else
 +
-- no or only 1 reqVariant's just use the default
 +
local reqPageLink = landingPage..'/Requirements/'..langSuffix
 +
retString = frame:callParserFunction( '#lst', reqPageLink, 'challenge' )
 +
end
 +
end
 +
return retString
 +
end
 +
 +
function createNavTab( authAbbrev, tabText, isActive)
 
-- create a single tab
 
-- create a single tab
local HTMLACode = mw.html.create( 'a' )
+
local HTMLLink = mw.html.create( 'a' )
 
-- if first add css class 'active'
 
-- if first add css class 'active'
HTMLACode
+
HTMLLink
 
:addClass( 'nav-link' )
 
:addClass( 'nav-link' )
 
:attr( 'id', authAbbrev..'-tab' )
 
:attr( 'id', authAbbrev..'-tab' )
Line 18: Line 69:
 
:attr( 'role', 'tab' )
 
:attr( 'role', 'tab' )
 
:attr( 'aria-controls', authAbbrev )
 
:attr( 'aria-controls', authAbbrev )
:attr( 'aria-selected', active )
+
:attr( 'aria-selected', tostring(isActive) )
:wikitext( authTrans )
+
:wikitext( tabText )
local HTMLCode = mw.html.create( 'li' )
+
HTMLCode
+
local HTMLLi = mw.html.create( 'li' )
 +
HTMLLi
 
:addClass( 'nav-item' )
 
:addClass( 'nav-item' )
 
:attr( 'role', 'presentation' )
 
:attr( 'role', 'presentation' )
:wikitext( tostring( HTMLACode ) )  
+
:wikitext( tostring( HTMLLink ) )
+
 +
return tostring( HTMLLi )
 +
end
 +
 
 +
function createContentTab( authAbbrev, content, isActive )
 
--create a content tab
 
--create a content tab
HTMLContentTab = mw.html.create( 'div' )
+
local HTMLContentTab = mw.html.create( 'div' )
 
-- if first add css class 'active & show'
 
-- if first add css class 'active & show'
 +
local isActiveCSSClass = ''
 +
if ( isActive == true ) then
 +
isActiveCSSClass = ' active show'
 +
end
 +
 
HTMLContentTab
 
HTMLContentTab
:addClass( 'tab-pane fade' )
+
:addClass( 'tab-pane fade'..isActiveCSSClass )
 
:attr( 'id', authAbbrev )
 
:attr( 'id', authAbbrev )
 
:attr( 'role', 'tabpanel' )
 
:attr( 'role', 'tabpanel' )
 
:attr( 'aria-labelledby', authAbbrev..'-tab' )
 
:attr( 'aria-labelledby', authAbbrev..'-tab' )
:wikitext( 'lst string with authority' )
+
:wikitext( content )
 
 
-- create the container's and add the tab's
+
return tostring( HTMLContentTab )
-- do all of the check's for the count of variant's and so on
 
 
end
 
end
  
 
return p
 
return p

Revision as of 22:23, 30 July 2021

Documentation for this module may be created at Module:HonorChallPart/doc

local p = {}
local honorUtils = require ( "Module:HonorUtils" )
local utilities = require ( "Module:Utilities" )

function p.getChallengingPart( frame )
	local reqVariants = honorUtils.getVariantsData( frame, nil, 'requirements', nil )
	local landingPage = frame:expandTemplate{ title='GetHonorLandingPage' }
	local langSuffix = frame:preprocess( '{{PAGELANGUAGE}}' )
	local retString = nil
	
	if ( reqVariants ~= nil and reqVariants['requirements'] ~= nil ) then
		if ( #reqVariants['requirements'] > 1 ) then
			-- create tab's
			for key, variant in pairs(reqVariants['requirements']) do
				tabText = ''
				for authorityKey, authority in pairs(variant['authorities']) do
					if ( #tabText > 0 ) then
						tabText = tabText..' & '..authority['translated']
					else
						tabText = authority['translated']
					end
				end
				local isActive = false
				if ( key == 1 ) then
					isActive = true
				end
				authAbbrev = variant['authorities'][1]['orig']
				
				local HTMLTabContainer = mw.html.create( 'ul' )
				HTMLTabContainer
					:addClass( 'nav nav-tabs' )
					:attr( 'id', 'challengeTab' )
					:attr( 'role', 'tablist' )
					:wikitext( createNavTab( authAbbrev, tabText, isActive) )
				
				local reqPageLink = landingPage..'/Requirements'
				if ( key > 1 ) then
					reqPageLink = reqPageLink..' '..key
				end
				reqPageLink = reqPageLink..'/'..langSuffix
				
				local content = frame:callParserFunction( '#lst', reqPageLink, 'challenge' )
				local HTMLTabsContent = mw.html.create( 'div' )
				HTMLTabsContent
					:addClass( 'tab-content' )
					:attr( 'challengeTabContent' )
					:wikitext( createContentTab( authAbbrev, content, isActive ))
				
				retString = tostring( HTMLTabContainer )..tostring( HTMLTabsContent )
			end
		else
			-- no or only 1 reqVariant's just use the default
			local reqPageLink = landingPage..'/Requirements/'..langSuffix
			retString = frame:callParserFunction( '#lst', reqPageLink, 'challenge' )
		end
	end
	return retString
end

function createNavTab( authAbbrev, tabText, isActive)
	-- create a single tab
	local HTMLLink = mw.html.create( 'a' )
	-- if first add css class 'active'
	HTMLLink
		:addClass( 'nav-link' )
		:attr( 'id', authAbbrev..'-tab' )
		:attr( 'data-toggle', 'tab' )
		:attr( 'href', '#'..authAbbrev )
		:attr( 'role', 'tab' )
		:attr( 'aria-controls', authAbbrev )
		:attr( 'aria-selected', tostring(isActive) )
		:wikitext( tabText )
	
	local HTMLLi = mw.html.create( 'li' )
	HTMLLi
		:addClass( 'nav-item' )
		:attr( 'role', 'presentation' )
		:wikitext( tostring( HTMLLink ) )
	
	return tostring( HTMLLi )
end

function createContentTab( authAbbrev, content, isActive )
	--create a content tab
	local HTMLContentTab = mw.html.create( 'div' )
	-- if first add css class 'active & show'
	local isActiveCSSClass = ''
	if ( isActive == true ) then
		isActiveCSSClass = ' active show'
	end
	
	HTMLContentTab
		:addClass( 'tab-pane fade'..isActiveCSSClass )
		:attr( 'id', authAbbrev )
		:attr( 'role', 'tabpanel' )
		:attr( 'aria-labelledby', authAbbrev..'-tab' )
		:wikitext( content )
	
	return tostring( HTMLContentTab )
end

return p