היחידה קיימת עבור תבנית {{שטומף}}. היא מאפשרת לנהל את היחידה בלי צורך בהוספת קוד כפול בכל פעם שיש צורך בסוג חדש. היחידה מחזירה שלוש פונקציות:

  1. הפונקציה main מחזירה את התבנית "שטומף" עבור סוג שטומף מסוים.
  2. הפונקציה templatedata מחזירה רשימה ממויינת של כל סוגי השטומףים עבור templatedata.
  3. הפונקציה categories מחזירה רשימה ממויינת של קטגוריות הערכים מכל הסוגים עבור התיעוד.

היחידה משתמשת ברשימת סוגים בדף יחידה:שטומף/list.json. היא כתובה בשפת json. מבנה הרשומה הוא כדלקמן:

  • עבור רוב הסוגים המפתח הוא שם הסוג והתוכן הוא שם קובץ האייקון.
  • עבור הסוגים בהם שם הסוג שונה משם הקטגוריה, התוכן הוא מערך בן שני איברים. הראשון הוא שם קובץ האייקון, והשני הוא שם הקטגוריה.

למשל:

    "תל אביב-יפו": "Tel-aviv city hall.jpg",
    "תל אביב": [
        "Tel-aviv city hall.jpg",
        "תל אביב-יפו"
    ],

הנחיות להוספת סוגים חדשים

  • להוספת שטומף "Tel-Aviv" יש לבצע את הפעולות הבאות
  • להוסיף לקובץ יחידה:שטומף/list.json שורה ,"Tel-Aviv": "Tel-aviv city hall.jpg"
  • במידה ושם הסוג שונה משם הקטגוריה, השורה היא ,"Tel-Aviv": ["Tel-aviv city hall.jpg", "Tel-Aviv-Yafo"]
  • במידה ויש צורך להוסיף מסגרת לתמונה, יש לעדכן את הקוד בצורה הבאה: "יפן": "Flag of Japan.svg{{!}}גבול",
  • שימו לב לפסיק לפני הטקסט. הוא נוסף כי צריך להיות פסיק אחרי כל שורה ברשימה, חוץ מהאחרונה.
  • המנוע דואג אוטומטית לפורמט לאחר השמירה, כך שהפסיק יועבר לסוף השורה הקודמת. כך גם עם פרמוט נאות של סוגריים מרובעים.
  • במידה ובאחד השמות ישנו סימן מרכאות כפולות, יש לכתוב סימן קו נטוי הפוך לפניו, למשל "תנ\"ך"
  • הרשימה הראשונית מויינה, אך אין בכך צורך, כי היחידה ממיינת אותה אוטומטית אחרי הקריאה.
  • ניתן לעדכן את הרשימה ב-templatedata למטה באמצעות העתקה מדף מוסטער:שטומף/ליסטע. במידץ הצורך יש לנקות את המטמון באמצעות הכפתור בדף הזה. במידה בשם הסוג ישנם גרשיים כפולים, יש לשים קו נטוי הפוך לפני, למשל צה\"ל.
  • רשימת הקטגוריות בדף הזה מתעדכנת אוטומטית. במידת הצורך ניתן לנקות את המטמון באמצעות הכפתור המצורף.

local jsonlist = mw.text.jsonDecode(mw.title.new('שטומף/list.json','Module'):getContent())
local defcode = {"{{שטומף/קוד|",
				 "|נושא נוסף=",
				 "|מידע נוסף=",
				 "|NoCategory={{#שווה:{{מרחב השם}}||",
				 "}}}}"}
local errcode = '<div style="border:1px solid #aaa; background:#FFF0F5;">[[טעקע:Nuvola apps important.svg|25px|רעכטס|ווארענונג]]דער ארטיקל איז א ' ..
	'[[המכלול:שטומף|שטומף]], אבער זי איז נישט קלאפיצירט ווי איינע פון די טיפּן אינעם [[:קאטעגאריע:שטומף|שטומפן ליסטע]] אין [[המכלול]].' ..
	' ביטע פארריכטן און קלייבן א נאמען פונעם ליסטע.</div>{{#תנאי:{{NAMESPACE}}||[[קאטעגאריע:נישט קלאסיפיצירטער שטומף]]}}'
local catcode = {"'''<nowiki>{{</nowiki>[[:קאטעגאריע:שטומף ",
                 "|שטומף|",
                 "]]<nowiki>}}</nowiki>'''"}
local catstartcode = "{{כתב מחוק|'''<nowiki>{{</nowiki>[[:קאטעגאריע:שטומף|שטומף]]<nowiki>}}</nowiki>'''}} לא בשימוש:" ..
	" מותר רק שטומף ספציפי: <nowiki>{{שטומף|</nowiki>'''סוג השטומף'''<nowiki>}}</nowiki>{{הערה|שטומף לא ספציפי" ..
	" יוצר [[:קאטעגאריע:שגיאות פרמטריות בתבנית שטומף|שגיאה פרמטרית]]}}"

function main(frame)
	local parentargs = frame:getParent().args
	local entry = parentargs[1] or 'כללי'
	local param2 = parentargs[2] or ''
	local parammidanosaf = parentargs['מידע נוסף'] or ''
	local paramnocategory = parentargs['NoCategory'] or ''
	local paramnocategoryyes = parentargs['NoCategory'] or 'yes'
	local catanswer = mw.ustring.format('%s%s|%s%s', '{{קאטעגאריע בתבנית|:[[קאטעגאריע:שטומף - כל הערכים]]|ללא קאטעגאריע={{#שווה:{{מרחב השם}}||',
		  paramnocategory, paramnocategoryyes, '}}}}')
	local ans = getparams(entry, jsonlist)
	if (not ans)
		then return frame:preprocess(errcode .. catanswer)
	end
	if (entry == 'כללי')
		then param2 = ''
		end
	if (entry == 'שונות')
		then param2 = ''
			 parammidanosaf = ''
		end
	return frame:preprocess(mw.ustring.format('%s%s%s%s%s%s|%s%s%s|%s%s', defcode[1], ans[2], defcode[2], param2, defcode[3],
	       parammidanosaf, ans[1], defcode[4], paramnocategory, paramnocategoryyes, defcode[5]) .. catanswer)
end

function getparams(entry, tab)
	local value = tab[entry]
	if (not value or type(value) == "table")
		then return value
		end
	return {value, entry}
end

function templatedata(frame)
	local ans = {}
	for k, v in pairs( jsonlist )
		do table.insert(ans, k)
		end
	table.sort(ans)
	return table.concat(ans, ', ')
end

function categories(frame)
	local ans = {}
	local param
	for k, v in pairs( jsonlist )
		do if (k ~= 'כללי')
		   then if (type(v) == "table")
				   then param = v[2]
				   else param = k
				   end
			    table.insert(ans, mw.ustring.format("%s%s%s%s%s", catcode[1], param, catcode[2], k, catcode[3]))
		   end
		end
	table.sort(ans)
	return frame:preprocess('<ol><li>' .. catstartcode .. '</li><li>' .. table.concat(ans, '</li><li>') .. '</li></ol>{{מטמון}}')
end

return {main = main, templatedata = templatedata, categories = categories}