<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.verzauberte-welten.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AClassgenerator%2Fparameter%2Fclass</id>
	<title>Modul:Classgenerator/parameter/class - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.verzauberte-welten.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AClassgenerator%2Fparameter%2Fclass"/>
	<link rel="alternate" type="text/html" href="https://www.verzauberte-welten.de/index.php?title=Modul:Classgenerator/parameter/class&amp;action=history"/>
	<updated>2026-10-28T17:03:24Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Verzauberte Welten e.V.</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://www.verzauberte-welten.de/index.php?title=Modul:Classgenerator/parameter/class&amp;diff=4406&amp;oldid=prev</id>
		<title>imported&gt;Oetterer am 8. August 2018 um 05:52 Uhr</title>
		<link rel="alternate" type="text/html" href="https://www.verzauberte-welten.de/index.php?title=Modul:Classgenerator/parameter/class&amp;diff=4406&amp;oldid=prev"/>
		<updated>2018-08-08T05:52:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local FoundationClass = require(&amp;#039;Module:Foundationclass&amp;#039;)&lt;br /&gt;
local ClassDebug = require(&amp;#039;Module:Debug/class&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- ****************************************************************&lt;br /&gt;
-- *                         inheritance                          *&lt;br /&gt;
-- ****************************************************************&lt;br /&gt;
local ClassgeneratorParameter = FoundationClass:subclass(&amp;#039;ClassgeneratorParameter&amp;#039;)&lt;br /&gt;
-- setting class&amp;#039;s configuration data&lt;br /&gt;
ClassgeneratorParameter.static.myConfiguration = mw.loadData(&amp;#039;Module:Classgenerator/parameter/config&amp;#039;)&lt;br /&gt;
ClassgeneratorParameter.static.SFfieldConfig = mw.loadData(&amp;#039;Module:SFfield/config&amp;#039;)&lt;br /&gt;
--ClassgeneratorParameter.static.myConfiguration = require(&amp;#039;Module:Classgenerator/parameter/config&amp;#039;)&lt;br /&gt;
--local SFfieldConfig = mw.loadData(&amp;#039;Module:SFfield/config&amp;#039;)&lt;br /&gt;
--ClassgeneratorParameter.static.myConfiguration.parameter.input_type.values = SFfieldConfig.validInputTypes	-- cant load a table from another config in my config. therefor this&lt;br /&gt;
--ClassgeneratorParameter.static.myConfiguration.parameter.base_type.values = SFfieldConfig.validInputTypes	-- cant load a table from another config in my config. therefor this&lt;br /&gt;
--   being in a static method, use self.myConfiguration&lt;br /&gt;
--   being in a private method, that knows self or in a public method, use self.class.myConfiguration&lt;br /&gt;
&lt;br /&gt;
-- ****************************************************************&lt;br /&gt;
-- *                          properties                          *&lt;br /&gt;
-- ****************************************************************&lt;br /&gt;
&lt;br /&gt;
-- **************** initialization of table for private properties&lt;br /&gt;
local _private = setmetatable({}, {__mode = &amp;#039;k&amp;#039;})   -- weak table storing all private attributes&lt;br /&gt;
&lt;br /&gt;
-- **************** declaration of public static properties&lt;br /&gt;
-- ClassgeneratorParameter.static.myPropertyModule = require(&amp;#039;Module:extern&amp;#039;)&lt;br /&gt;
-- ClassgeneratorParameter.static.staticProperty = &amp;#039; &amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- remember the static classes provided by Foundationclass:&lt;br /&gt;
-- ClassgeneratorParameter.globalConfig&lt;br /&gt;
-- ClassgeneratorParameter.myCargoUtil&lt;br /&gt;
-- ClassgeneratorParameter.myTableTools&lt;br /&gt;
&lt;br /&gt;
-- **************** declaration of (global) private properties&lt;br /&gt;
-- for properties you should rather use constructor and _private[self]. this only, if you need a private class property&lt;br /&gt;
-- you should, however predeclare private methods here&lt;br /&gt;
local _debug	-- private method declared later&lt;br /&gt;
local _privateMethodAhead	-- declaration ahead, so this private method can be used in the constructor and in other private methods&lt;br /&gt;
&lt;br /&gt;
-- ***************************************************************&lt;br /&gt;
-- *                           methods                           *&lt;br /&gt;
-- ***************************************************************&lt;br /&gt;
 &lt;br /&gt;
-- **************** declaration of static methods&lt;br /&gt;
function ClassgeneratorParameter:initialize(uid)&lt;br /&gt;
	local _CFG = self.class.myConfiguration&lt;br /&gt;
	FoundationClass.initialize(self, uid)&lt;br /&gt;
	_private[self] = {&lt;br /&gt;
		dbg = ClassDebug:new(tostring(self.class) .. &amp;#039;: id &amp;#039; .. uid),&lt;br /&gt;
	}&lt;br /&gt;
	_debug(self, 1, &amp;#039; ClassgeneratorParameter: done initializing object &amp;amp;quot;&amp;#039; .. uid ..&amp;#039;&amp;amp;quot;, from &amp;#039; .. tostring(self))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- use use self.myConfiguration to access your configuration in a static method&lt;br /&gt;
function ClassgeneratorParameter.static:aStaticMethod(var)&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter.static:aStaticMethod() to do something, from &amp;#039; .. tostring(self))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ClassgeneratorParameter.static:mySfDynamicFieldAttribute(fieldname, attribute, value)&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter.static:mySfDynamicFieldAttribute(fieldname, attribute, value), from &amp;#039; .. tostring(self))&lt;br /&gt;
	_debug(self, 2, &amp;#039; with parameters &amp;amp;quot;&amp;#039; .. fieldname .. &amp;#039;&amp;amp;quot;, &amp;amp;quot;&amp;#039; .. attribute .. &amp;#039;&amp;amp;quot; and a &amp;#039; .. type(value) .. &amp;#039; value&amp;#039;)&lt;br /&gt;
	-- function that can process any attribute/value pair just before rendering the semantic forms field&lt;br /&gt;
	-- usually done, to generate a dynamic &amp;#039;default&amp;#039; value&lt;br /&gt;
	-- keep in mind: you can completely disable a form field, if you return true on attribute &amp;quot;disable&amp;quot;. note however, that this causes the field to not show at all, no data will be transported/saved&lt;br /&gt;
	local val = value&lt;br /&gt;
	if FoundationClass.globalConfig.dataStore ~= &amp;#039;cargo&amp;#039; and FoundationClass.globalConfig.dataStore ~= &amp;#039;both&amp;#039; then&lt;br /&gt;
		-- disable all cargo fields&lt;br /&gt;
		if fieldname == &amp;#039;cargo&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;cargo_hidden&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;cargo_size&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;cargo_type&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;add_cargo_table_and_field&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;mapping_cargo_field&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;mapping_cargo_table&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if FoundationClass.globalConfig.dataStore ~= &amp;#039;smw&amp;#039; and FoundationClass.globalConfig.dataStore ~= &amp;#039;both&amp;#039; then&lt;br /&gt;
		-- disable all smw fields&lt;br /&gt;
		if fieldname == &amp;#039;property&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;property_name&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;property_type&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;unique_for_concept&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;mapping_property&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
		if fieldname == &amp;#039;values_from_concept&amp;#039; and attribute == &amp;#039;disable&amp;#039; then&lt;br /&gt;
			val = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if fieldname == &amp;#039;property_name&amp;#039; and attribute == &amp;#039;values_from_namespace&amp;#039; then&lt;br /&gt;
		local ret, nulProperty = pcall(mw.title.new, &amp;#039;NUL&amp;#039;, &amp;#039;Property&amp;#039;)&lt;br /&gt;
		val = ret and mw.site.namespaces[nulProperty.namespace].name or &amp;#039;NUL&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if fieldname == &amp;#039;property_type&amp;#039; and attribute == &amp;#039;values&amp;#039; then&lt;br /&gt;
		val = FoundationClass.globalConfig.smwPropertyTypesAvailable&lt;br /&gt;
	end&lt;br /&gt;
	if fieldname == &amp;#039;input_type&amp;#039; and attribute == &amp;#039;show_on_select&amp;#039; then&lt;br /&gt;
		-- build input type&amp;#039;s show on select from SFfieldConfig.validAttributesPerType, except remove values and replace all spaces in attribute names by an underscore&lt;br /&gt;
		--val = mw.clone(ClassgeneratorParameter.SFfieldConfig.validAttributesPerType)&lt;br /&gt;
		--val = ClassgeneratorParameter.myTableTools.shallowClone(ClassgeneratorParameter.SFfieldConfig.validAttributesPerType)&lt;br /&gt;
		val = {}&lt;br /&gt;
		for param, attrlist in pairs(ClassgeneratorParameter.SFfieldConfig.validAttributesPerType) do&lt;br /&gt;
			if not val[param] then&lt;br /&gt;
				val[param] = {}&lt;br /&gt;
			end&lt;br /&gt;
			for k, attr in pairs(attrlist) do&lt;br /&gt;
				if attr ~= &amp;#039;values&amp;#039; then&lt;br /&gt;
					val[param][k] = mw.ustring.gsub(attr, &amp;#039; &amp;#039;, &amp;#039;_&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		_debug(self, 2, &amp;#039; calculated this monster: &amp;lt;pre&amp;gt;&amp;#039; .. ClassgeneratorParameter.myTableTools.printTable(val) .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if fieldname == &amp;#039;input_type&amp;#039; and attribute == &amp;#039;values&amp;#039; then&lt;br /&gt;
		return ClassgeneratorParameter.SFfieldConfig.validInputTypes&lt;br /&gt;
	end&lt;br /&gt;
	if fieldname == &amp;#039;base_type&amp;#039; and attribute == &amp;#039;values&amp;#039; then&lt;br /&gt;
		return ClassgeneratorParameter.SFfieldConfig.validInputTypes&lt;br /&gt;
	end&lt;br /&gt;
	if fieldname == &amp;#039;uploadable&amp;#039; and attribute == &amp;#039;show_on_select&amp;#039; then&lt;br /&gt;
		val = {}&lt;br /&gt;
		val[&amp;#039;true&amp;#039;] = {&amp;#039;default_filename&amp;#039;, &amp;#039;image_preview&amp;#039;}&lt;br /&gt;
	end&lt;br /&gt;
	_debug(self, 3, &amp;#039;  returning &amp;#039; .. (type(val) == &amp;#039;boolean&amp;#039; and (val and &amp;#039;true&amp;#039; or &amp;#039;false&amp;#039;) or type(val)))&lt;br /&gt;
	return val	-- this value will be used as new value for field&amp;#039;s attribute&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ClassgeneratorParameter.static:sfGenerateForm(embedIn)&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter.static:sfGenerateForm()&amp;#039;)&lt;br /&gt;
	local _CFG = self.myConfiguration&lt;br /&gt;
	local embedIn = embedIn or &amp;#039;Classgenerator[parameter_parameter]&amp;#039;&lt;br /&gt;
	local tagStart = &amp;#039;{{{&amp;#039;&lt;br /&gt;
	local tagEnd = &amp;#039;}}}&amp;#039;&lt;br /&gt;
	-- create the table&lt;br /&gt;
	-- start the html object&lt;br /&gt;
	html = mw.html.create(&amp;#039;&amp;#039;)&lt;br /&gt;
	html:wikitext(tagStart .. &amp;#039;for template|&amp;#039; .. _CFG.template.name .. &amp;#039;|label=&amp;#039; .. _CFG.global.entityTitle ..&lt;br /&gt;
		&amp;#039;|embed in field=&amp;#039; .. embedIn .. &amp;#039;|multiple|add button text=&amp;#039; .. _CFG.form.labelCreate .. &amp;#039;|minimum instances=1&amp;#039; .. tagEnd)&lt;br /&gt;
		:node(self:sfGenerateFormTable(self.myConfiguration.form.fieldOrderGeneral))&lt;br /&gt;
		:newline()&lt;br /&gt;
		:wikitext(&amp;#039;:&amp;#039;)&lt;br /&gt;
		:node(self:sfGenerateFormTable(self.myConfiguration.form.fieldOrderSFgeneral, &amp;#039;row_parameter&amp;#039;))&lt;br /&gt;
		:newline()&lt;br /&gt;
		:wikitext(&amp;#039;::&amp;#039;)&lt;br /&gt;
		:node(self:sfGenerateFormTable(self.myConfiguration.form.fieldOrderSFtypeDependent))&lt;br /&gt;
		:wikitext(tagStart .. &amp;#039;end template&amp;#039; .. tagEnd)&lt;br /&gt;
		:newline()&lt;br /&gt;
	return tostring(html)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- **************** declaration of private methods&lt;br /&gt;
-- use self.class.myConfiguration to access your configuration in a public or a private method that is called by a public method&lt;br /&gt;
_debug = function (self, level, text)&lt;br /&gt;
	if _private[self] and _private[self].dbg then&lt;br /&gt;
		_private[self].dbg:log(level, text)&lt;br /&gt;
	else&lt;br /&gt;
		ClassDebug:log(level, text, tostring(self) .. &amp;#039;.static&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local _processAttribute = function (self, attr, indent)&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering private _processAttribute() to print a line for attribute &amp;#039; .. attr .. &amp;#039;, from &amp;#039; .. tostring(self))&lt;br /&gt;
	local coreData = self:getCoreData()&lt;br /&gt;
	local ret = &amp;#039;&amp;#039;&lt;br /&gt;
	local omissionList = {&amp;#039;name&amp;#039;}&lt;br /&gt;
	local attr = attr&lt;br /&gt;
	local val = coreData[attr]&lt;br /&gt;
	if type(val) == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
		val = val and &amp;#039;true&amp;#039; or &amp;#039;false&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if val and not ClassgeneratorParameter.myTableTools.inTable(omissionList, attr) then&lt;br /&gt;
		ret = indent .. attr .. &amp;#039; = &amp;#039;&lt;br /&gt;
		if type(val) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			ret = ret .. ClassgeneratorParameter.myTableTools.printTable(val, &amp;#039;inline&amp;#039;)&lt;br /&gt;
		elseif val == &amp;#039;true&amp;#039; or val == &amp;#039;false&amp;#039; or attr == &amp;#039;cargo_table&amp;#039; or (attr == &amp;#039;restricted&amp;#039; and (val == &amp;#039;global.restrictedTo&amp;#039; or val == &amp;#039;superglobal.restrictedTo&amp;#039;)) or mw.ustring.match(val, &amp;#039;^[0-9]+$&amp;#039;) then&lt;br /&gt;
			ret = ret .. val&lt;br /&gt;
		else&lt;br /&gt;
			local valMangled = mw.text.trim(val)&lt;br /&gt;
			valMangled = mw.ustring.gsub(mw.ustring.gsub(valMangled, &amp;quot;\\&amp;#039;&amp;quot;, &amp;quot;&amp;#039;&amp;quot;), &amp;quot;&amp;#039;&amp;quot;, &amp;quot;\\&amp;#039;&amp;quot;)&lt;br /&gt;
			valMangled = mw.ustring.gsub(valMangled, &amp;#039;\n&amp;#039;, &amp;#039;\\n\&amp;#039; ..\n&amp;#039; .. indent .. &amp;#039;\t\&amp;#039;&amp;#039;)&lt;br /&gt;
			ret = ret .. &amp;quot;&amp;#039;&amp;quot; .. valMangled .. &amp;quot;&amp;#039;&amp;quot;	-- the gsub catches multiline input from textareas&lt;br /&gt;
		end&lt;br /&gt;
		ret = ret .. &amp;#039;,&amp;#039;&lt;br /&gt;
		if self.class.myConfiguration.template.addCommentsToConfig then&lt;br /&gt;
			ret = ret .. &amp;#039;\t-- &amp;#039; .. self.class.myConfiguration.parameter[attr].description&lt;br /&gt;
		end&lt;br /&gt;
		ret = ret .. &amp;#039;\n&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local _privateMethod = function (self)&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering private _privateMethod() to do something, from &amp;#039; .. tostring(self))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- **************** declaration of public methods&lt;br /&gt;
-- use self.class.myConfiguration to access your configuration in a public method&lt;br /&gt;
function ClassgeneratorParameter:addInfobox()&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter:addInfobox(), from &amp;#039; .. tostring(self))&lt;br /&gt;
	if self:goodToGo() then&lt;br /&gt;
		local _CFG = self.class.myConfiguration&lt;br /&gt;
		local coreData = self:getPrivate(&amp;#039;coreData&amp;#039;)&lt;br /&gt;
		local ib_args = {&lt;br /&gt;
			bodyclass = &amp;#039;infobox_name&amp;#039;,&lt;br /&gt;
			aboveclass = &amp;#039;objtitle titletext&amp;#039;,&lt;br /&gt;
			headerclass = &amp;#039;headertext&amp;#039;,&lt;br /&gt;
			labelstyle = &amp;#039;width: 30%;&amp;#039;,&lt;br /&gt;
			datastyle = &amp;#039;width: 70%;&amp;#039;,&lt;br /&gt;
			title = self:getPrivate(&amp;#039;uid&amp;#039;),&lt;br /&gt;
			subheader = nil,&lt;br /&gt;
			label1 = _CFG.parameter.name.label,&lt;br /&gt;
			data1 = coreData.name and coreData.name or &amp;#039;&amp;#039;,&lt;br /&gt;
			header1 = nil,&lt;br /&gt;
		}&lt;br /&gt;
		self:addOutput(require(&amp;#039;Module:Infobox&amp;#039;).infobox(ib_args))&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ClassgeneratorParameter:addPageBody()&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter:addPageBody(), from &amp;#039; .. tostring(self))&lt;br /&gt;
	_debug(self, 2, &amp;#039; rendering errors and warnings and adding them to output&amp;#039;)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	self:addOutput(self:renderErrors())&lt;br /&gt;
	self:addOutput(self:renderWarnings())&lt;br /&gt;
	if self:goodToGo() then&lt;br /&gt;
		self:addOutput(&amp;#039;No out put yet&amp;#039;)&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ClassgeneratorParameter:myArgumentProcessing(coreData)&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter:myArgumentProcessing(args) to process coreData, from &amp;#039; .. tostring(self))&lt;br /&gt;
	-- function that performs some individual transformation args --&amp;amp;amp;gt; coreData&lt;br /&gt;
	local coreData = coreData&lt;br /&gt;
	-- if dataStore == &amp;#039;cargo&amp;#039; set sf_cargo_table and sf_cargo_field&lt;br /&gt;
	if (FoundationClass.globalConfig.dataStore == &amp;#039;cargo&amp;#039; or FoundationClass.globalConfig.dataStore == &amp;#039;both&amp;#039;) and FoundationClass.myYesno(coreData.cargo) and FoundationClass.myYesno(coreData.add_cargo_table_and_field) then&lt;br /&gt;
		coreData.cargo_table = &amp;#039;global.cargoTable&amp;#039;&lt;br /&gt;
		coreData.cargo_field = coreData.name&lt;br /&gt;
	end&lt;br /&gt;
	coreData.add_cargo_table_and_field = nil&lt;br /&gt;
	if (FoundationClass.globalConfig.dataStore == &amp;#039;smw&amp;#039; or FoundationClass.globalConfig.dataStore == &amp;#039;both&amp;#039;) and FoundationClass.myYesno(coreData.property) then&lt;br /&gt;
		coreData.property_name = mw.ustring.gsub(mw.ustring.gsub(coreData.property_name, &amp;#039; &amp;#039;, &amp;#039;_&amp;#039;), mw.site.namespaces[mw.title.new(&amp;#039;Nul&amp;#039;, &amp;#039;Property&amp;#039;).namespace].name .. &amp;#039;:&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		coreData.property_name = nil&lt;br /&gt;
		coreData.property_type = nil&lt;br /&gt;
	end&lt;br /&gt;
	if coreData.sf and mw.ustring.lower(coreData.sf) == &amp;#039;holds template&amp;#039; then&lt;br /&gt;
		coreData.sf = &amp;#039;yes&amp;#039;&lt;br /&gt;
		coreData.holds_template = &amp;#039;true&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if coreData.show_on_select and type(coreData.show_on_select) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		local sos = {}&lt;br /&gt;
		for _, selector in pairs(coreData.show_on_select) do&lt;br /&gt;
			local value, field = mw.ustring.match(selector, &amp;#039;^([^=]+)%s*=%s*(.+)$&amp;#039;)&lt;br /&gt;
			if value and field then&lt;br /&gt;
				if mw.ustring.match(value, &amp;#039; &amp;#039;) then&lt;br /&gt;
					value = &amp;#039;[\&amp;#039;&amp;#039; .. value .. &amp;#039;\&amp;#039;]&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
				if not sos[value] then&lt;br /&gt;
					sos[value] = {}&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(sos[value], field)&lt;br /&gt;
			elseif coreData.input_type == &amp;#039;checkbox&amp;#039; or selector == &amp;#039;false&amp;#039; then&lt;br /&gt;
				table.insert(sos, mw.text.trim(selector))&lt;br /&gt;
			else&lt;br /&gt;
				self:addError(&amp;#039;Error processing value for \&amp;#039;\&amp;#039;&amp;#039; .. self.class.myConfiguration.parameter.show_on_select.label .. &amp;#039;\&amp;#039;\&amp;#039;: &amp;#039; .. &lt;br /&gt;
					ClassgeneratorParameter.myTableTools.printTable(coreData.show_on_select) .. &amp;#039; on entry :&amp;#039; .. mw.text.encode(selector))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		coreData.show_on_select = sos&lt;br /&gt;
		--coreData.show_on_select = FoundationClass.myTableTools.printTable(sos)&lt;br /&gt;
		--coreData.show_on_select = FoundationClass.myTableTools.printTable(coreData.show_on_select)&lt;br /&gt;
	end&lt;br /&gt;
	-- kill two cosmetical switches&lt;br /&gt;
	coreData.cargo = nil&lt;br /&gt;
	coreData.property = nil&lt;br /&gt;
	return coreData	-- this is your new coreData.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ClassgeneratorParameter:myPlausibilityTest(args)&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter:myPlausibilityTest(args) to test arguments, from &amp;#039; .. tostring(self))&lt;br /&gt;
	local _CFG = self.class.myConfiguration&lt;br /&gt;
	-- function that performs the individual plausibility tests&lt;br /&gt;
	-- note: before you access a field args.fieldname you should check for existance&lt;br /&gt;
	-- self:addError(text)&lt;br /&gt;
	if args.name and not mw.ustring.match(args.name, &amp;#039;^[a-zA-Z_][0-9a-zA-Z_-]*$&amp;#039;) then&lt;br /&gt;
		self:addError(&amp;#039;Invalid value detected for parameter &amp;lt;i&amp;gt;&amp;#039; .. _CFG.parameter.name.label .. &amp;#039;:&amp;lt;/i&amp;gt; &amp;quot;&amp;#039; .. mw.text.encode(tostring(args.name)) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if args.cargo_size and not mw.ustring.match(args.cargo_size, &amp;#039;^[0-9]*$&amp;#039;) then&lt;br /&gt;
		self:addError(&amp;#039;Invalid value detected for parameter &amp;lt;i&amp;gt;&amp;#039; .. _CFG.parameter.cargo_size.label .. &amp;#039;:&amp;lt;/i&amp;gt; &amp;quot;&amp;#039; .. mw.text.encode(tostring(args.cargo_size)) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if args.cols and not mw.ustring.match(args.cols, &amp;#039;^[0-9]*$&amp;#039;) then&lt;br /&gt;
		self:addError(&amp;#039;Invalid value detected for parameter &amp;lt;i&amp;gt;&amp;#039; .. _CFG.parameter.cols.label .. &amp;#039;:&amp;lt;/i&amp;gt; &amp;quot;&amp;#039; .. mw.text.encode(tostring(args.cols)) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if args.max_values and not mw.ustring.match(args.max_values, &amp;#039;^[0-9]*$&amp;#039;) then&lt;br /&gt;
		self:addError(&amp;#039;Invalid value detected for parameter &amp;lt;i&amp;gt;&amp;#039; .. _CFG.parameter.max_values.label .. &amp;#039;:&amp;lt;/i&amp;gt; &amp;quot;&amp;#039; .. mw.text.encode(tostring(args.max_values)) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if args.maxlength and not mw.ustring.match(args.maxlength, &amp;#039;^[0-9]*$&amp;#039;) then&lt;br /&gt;
		self:addError(&amp;#039;Invalid value detected for parameter &amp;lt;i&amp;gt;&amp;#039; .. _CFG.parameter.maxlength.label .. &amp;#039;:&amp;lt;/i&amp;gt; &amp;quot;&amp;#039; .. mw.text.encode(tostring(args.maxlength)) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if args.rows and not mw.ustring.match(args.rows, &amp;#039;^[0-9]*$&amp;#039;) then&lt;br /&gt;
		self:addError(&amp;#039;Invalid value detected for parameter &amp;lt;i&amp;gt;&amp;#039; .. _CFG.parameter.rows.label .. &amp;#039;:&amp;lt;/i&amp;gt; &amp;quot;&amp;#039; .. mw.text.encode(tostring(args.rows)) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if args.size and not mw.ustring.match(args.size, &amp;#039;^[0-9]*$&amp;#039;) then&lt;br /&gt;
		self:addError(&amp;#039;Invalid value detected for parameter &amp;lt;i&amp;gt;&amp;#039; .. _CFG.parameter.size.label .. &amp;#039;:&amp;lt;/i&amp;gt; &amp;quot;&amp;#039; .. mw.text.encode(tostring(size.cols)) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return false	-- return value will be ignored. but if you add any error, the object&amp;#039;s initialization will fail with the error&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ClassgeneratorParameter:myStashAdjustments(stash)&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter:myStashAdjustments(stash) to do some minor adjustments on data before storing, from &amp;#039; .. tostring(self))&lt;br /&gt;
	-- function that alters the stash before storing the data&lt;br /&gt;
	local stash = stash&lt;br /&gt;
	return stash	-- this is your new stash. this will be stored. it has format (fieldname: value)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ClassgeneratorParameter:render()&lt;br /&gt;
	_debug(self, 1, &amp;#039;entering ClassgeneratorParameter:render() to render the code I pass to template class generator, from &amp;#039; .. tostring(self))&lt;br /&gt;
	local str = &amp;#039;&amp;#039;&lt;br /&gt;
	if self:goodToGo() then&lt;br /&gt;
		local _CFG = self.class.myConfiguration&lt;br /&gt;
		local coreData = self:getCoreData()&lt;br /&gt;
		local indent = &amp;#039;\t&amp;#039;&lt;br /&gt;
		local sfAttributes = {}&lt;br /&gt;
		for _, val in pairs(_CFG.form.fieldOrderSFgeneral) do&lt;br /&gt;
			table.insert(sfAttributes, val)&lt;br /&gt;
		end&lt;br /&gt;
		for _, val in pairs(_CFG.form.fieldOrderSFtypeDependent) do&lt;br /&gt;
			table.insert(sfAttributes, val)&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(sfAttributes)&lt;br /&gt;
		if FoundationClass.myYesno(coreData.sf, true) then&lt;br /&gt;
			str = str .. coreData.name&lt;br /&gt;
		end&lt;br /&gt;
		str = str .. _CFG.template.delimiterFormFieldName&lt;br /&gt;
		str = str .. indent .. coreData.name .. &amp;#039; = {\n&amp;#039;&lt;br /&gt;
		for _, globalAttr in pairs(_CFG.form.fieldOrderGeneral) do&lt;br /&gt;
			if globalAttr ~= &amp;#039;sf&amp;#039; then&lt;br /&gt;
				str = str .. _processAttribute(self, globalAttr, indent .. &amp;#039;\t&amp;#039;)&lt;br /&gt;
			elseif coreData.sf ~= &amp;#039;Information&amp;#039; then&lt;br /&gt;
				local sf = &amp;#039;&amp;#039;&lt;br /&gt;
				sf = sf .. _processAttribute(self, &amp;#039;cargo_table&amp;#039;, indent .. &amp;#039;\t\t&amp;#039;)&lt;br /&gt;
				sf = sf .. _processAttribute(self, &amp;#039;cargo_field&amp;#039;, indent .. &amp;#039;\t\t&amp;#039;)&lt;br /&gt;
				for _, sfAttr in pairs(sfAttributes) do&lt;br /&gt;
					sf = sf .. _processAttribute(self, sfAttr, indent .. &amp;#039;\t\t&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
				if mw.ustring.len(sf) &amp;gt; 0 then&lt;br /&gt;
					str = str .. indent .. &amp;#039;\t&amp;#039; .. &amp;#039;sf = {\n&amp;#039; .. sf .. indent .. &amp;#039;\t&amp;#039; .. &amp;#039;},\n&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		str = str .. indent .. &amp;#039;},\n&amp;#039; .. _CFG.template.delimiterResult&lt;br /&gt;
	else&lt;br /&gt;
		str = tostring(self:renderErrors())&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return ClassgeneratorParameter&lt;/div&gt;</summary>
		<author><name>imported&gt;Oetterer</name></author>
	</entry>
</feed>