יחידה:קצרמר

מתוך ויקיפדיה, האנציקלופדיה החופשית

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

  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}