Jump to content
החלפת מצב תפריט
שינוי מצב תפריט ההעדפות
החלפת מצב תפריט אישי
לא בחשבון
כתובת ה־IP שלך תהיה גלויה לציבור אם תעשה עריכות כלשהן.

יחידה:קצרמר

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

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

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

היחידה משתמשת ברשימת סוגים בדף יחידה:קצרמר/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 למטה באמצעות העתקה מדף תבנית:קצרמר/רשימה. במידץ הצורך יש לנקות את המטמון באמצעות הכפתור בדף הזה. במידה בשם הסוג ישנם גרשיים כפולים, יש לשים קו נטוי הפוך לפני, למשל צה\"ל.
  • רשימת הקטגוריות בדף הזה מתעדכנת אוטומטית. במידת הצורך ניתן לנקות את המטמון באמצעות הכפתור המצורף.

גודל דף עריכה

הפונקציה מחזירה את גודל קוד המקור של הדף (כשם שמוצג ב"גרסאות קודמות" ליד כל גרסה). הפונקציה "יקרה" בדומה ל{{#קיים:}} ומעלה את "מונה הפונקציות היקרות" של הדף ב-1. יש להימנע משימוש בפונקציה פעמים רבות באותו דף (דוגמת דף ובו רשימה ארוכה של דפים כשליד כל אחד רשום אורכו)

הפונקציה מקבלת ארבעה פרמטרים, כולם אופציונליים:

  • דף: שם הדף. ברירת מחדל: הדף הנוכחי
  • מרחב שם: אם לא מועבר שם הדף אין התייחסות לפרמטר. כשמועבר שם הדף, ברירת המחדל היא מרחב הערכים. ניתן להעביר את שם המרחב המקובל, מקוצר או "קנוני" (למשל "תבנית", "תב" או "template")
  • עיצוב: ערך לא ריק לפרמטר יביא לעיצוב המספר: הפונקציה תחזיר 12,345 עבור דף שגודלו 12345 בתים
  • template: ערך לא ריק יביא להחזרת גודל הדף בתווים ("אותיות") במקום בתים. ויקיפדיה משתמשת בקידוד UTF-16, בו "משקלו" של תו נע בין 1 ל-4 בתים (תאורטית אף יותר). אותיות עבריות, סימני ניקוד, ותווים ייחודיים לעברית (למשל מקף ( ־ ) שוקלים שני בתים כל אחד. אותיות לטיניות, רווחים, סימני פיסוק סטנדרטיים, וספרות (0-9) שוקלים בית אחד. ערך אפייני בוויקיפדיה בעברית שוקל בבתים קצת פחות מכפליים אורכו בתווים.

דוגמאות:

  • בלי פרמטר "דף": הדף הנוכחי: קוד: {{#invoke:קצרמר|גודל דף}}: 4298
  • פרמטר שם דף: {{#invoke:קצרמר|גודל דף|דף=ירושלים}}: 247188
  • שם דף ומרחב שם: {{#invoke:קצרמר|גודל דף|דף=קו|מרחב שם=תבנית}}: שגיאת לואה: bad argument #2 to 'title.new' (unrecognized namespace name 'תב').
  • מרחב שם מקוצר: {{#invoke:קצרמר|גודל דף|דף=קו|מרחב שם=תב}}: שגיאת לואה: bad argument #2 to 'title.new' (unrecognized namespace name 'תב').
  • מרחב שם קנוני: {{#invoke:קצרמר|גודל דף|דף=קו|מרחב שם=template}}: 1003
  • פרמטר "עיצוב": {{#invoke:קצרמר|גודל דף|דף=ירושלים|עיצוב=1}}: 247,188
  • תווים במקום בתים: {{#invoke:קצרמר|גודל דף|דף=ירושלים|עיצוב=1|בתווים=1}}: 152,449

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

local 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

local function pageSize(frame)
	local pageKey, nsKey, formatKey, inCharsKey  = 'דף',  'מרחב שם', 'עיצוב', 'בתווים'
	local parent = frame:getParent()
	local args, pargs = frame.args, parent.args
    local pageName = args[pageKey] or pargs[pageKey] 
	local nsName = args[nsKey] or pargs[nsKey] or '' --namespace defaults to 0 (ראשי): nsName '' 
	local format = args[formatKey] or pargs[formatKey]
	local inChars = args[inCharsKey] or pargs[inCharsKey]
	
	if not pageName then -- no pagename param passed: ignore nsName param./default, use currentPage ns.
		local current = mw.title.getCurrentTitle()
		pageName, nsName = current['text'], current['nsText']
	end
	local content = mw.title.new(pageName, mw.text.trim(nsName)):getContent() or '';
	local len = inChars and mw.ustring.len(content) or #content -- length or page in chars (when inCharsKey param passed) or bytes otherwise 
	return format and mw.getContentLanguage():formatNum(len) or len
end

return {
	main = main, 
	templatedata = templatedata, 
	categories = categories,
	['גודל דף'] = pageSize
}