אונטערשייד צווישן ווערסיעס פון "יחידה:ReadTd"

פון המכלול
קפיצה לניווט קפיצה לחיפוש
(ייבוא מוויקיפדיה העברית, ראה רשימת התורמים)
 
אין תקציר עריכה
 
שורה 36: שורה 36:
function readTemplateData( templateName )
function readTemplateData( templateName )
if type( templateName ) == 'string' then  
if type( templateName ) == 'string' then  
templateName = { templateName, templateName .. '/' .. docSubPage }
templateName = { templateName, templateName .. '/' .. docSubPage, templateName .. '/Doc', templateName .. '/דאק' }
end
end
if type( templateName ) == "table" then
if type( templateName ) == "table" then

יעצטיגע רעוויזיע זינט 20:53, 29 אקטאבער 2023

מען קען שאפן דאקומענטאציע פאר דעם מאדול ביי יחידה:ReadTd/דאק

--[[

templatedata services for other modules. 
template-invokable method, testTemplateData() for testing purposes only.


Methods:
	_readTemplateData( templateName )
		internal method. receives a page name, tries to see if it exists, and contains valid templatedata.
		if there is valid templatedata, it extracts the json, and uses mw methods to return a lua table containing the data.
		otherwise, returns nil

	readTemplateData( templateName )
		gets a pagename or an array of names, and cycles through them, trying to get templatedata from this file.
		when it gets a valid structure, it returns it, otherwise keep cycling.
		templateName can be a string or a table. if it's a string, it's assumed to be a template page name, 
		where valid templatedata exists in the page or in a subpage whose name is in the local variable docSubPage

	testTemplateData( templateName ): for testing. invokable from template. dumps templatedata lua object, using mw.dumpObject.
	
	compat( templateName ): backword-compatability for validation module expecting subpage in specific structure. 
]]


local docSubPage = 'תיעוד'

function _readTemplateData( templateName ) 
	local title = mw.title.makeTitle( 0, templateName )  
	local templateContent = title and title.exists and title:getContent() -- template's raw content
	local capture =  templateContent and mw.ustring.match( templateContent, '<templatedata%s*>(.*)</templatedata%s*>' ) -- templatedata as text
--	capture = capture and mw.ustring.gsub( capture, '"(%d+)"', tonumber ) -- convert "1": {} to 1: {}. frame.args uses numerical indexes for order-based params.
	if capture then return pcall( mw.text.jsonDecode, capture ) end
	return false
end

function readTemplateData( templateName )
	if type( templateName ) == 'string' then 
		templateName = { templateName, templateName .. '/' .. docSubPage, templateName .. '/Doc', templateName .. '/דאק' }
	end
	if type( templateName ) == "table" then
		for _, name in ipairs( templateName ) do
			local td, result = _readTemplateData( name ) 
			if td then return result end
		end
	end
	return nil
end

function testTemplateData( frame )
	local tmplateName = frame.args['שם התבנית'] or frame.args[1]
	local td = readTemplateData( tmplateName )

	return td and mw.dumpObject( td ) or ''
end

function compat( template ) 
	local td = readTemplateData( template )
	if not td or not td['params'] then return nil end
	
	local params = td['params']
	local unnamedCount = #params
	local paramnames = {}
	local required = {}
	
	for paramname, paramobject in pairs( params ) do
		table.insert( paramnames, paramname )
		if paramobject.required then 
			table.insert( required, paramname )	
		end
	end
	return { unnamedCount, paramnames, required, {} }
end


return { 
	['ReadTemplateData'] = readTemplateData,
	['compat'] = compat,
	['בדיקה'] = testTemplateData, 
	['testTemplateData'] = testTemplateData,
	}