Module:Χρήστης:Xoristzatziki:εργαλεία

Από Βικιλεξικό
Μετάβαση στην πλοήγηση Πήδηση στην αναζήτηση

Documentation for this module may be created at Module:Χρήστης:Xoristzatziki:εργαλεία/τεκμηρίωση

--Module:Χρήστης:Xoristzatziki:εργαλεία
local export = {}

--αντιγραφή από το w:Module:Redirect 
-- Gets a mw.title object, using pcall to avoid generating script errors if we
-- are over the expensive function count limit (among other possible causes).
local function _getTitle(...)
	local success, titleObj = pcall(mw.title.new, ...)
	if success then
		return titleObj
	else
		return nil
	end
end

function export.getTargetFromText(text)
	return string.match(
		text,
		"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]]-)%]%]"
	) or mw.ustring.match(
		text,
		"#[Αα][Νν][Αα][Κκ][Αα][Ττ][Εε][Υυ][Θθ][Υυ][Νν][Σσ][Ηη]%s*:?%s*%[%[%s*:?%s*(.-)[#%]]"
	)  
end

--Χρειάζεται ή υπάρχει το title.redirectiontextkati;
--Μπορούμε να ελέγχουμε αν η ανακατεύθυνση οδηγεί σε άλλη καλώντας ξανά τη συνάρτηση μέχρι να επιστρέψει nil
--Δεν δέχεται για όρισμα αντικείμενο mw.title
--Ο καλών ας μετατρέπει το αντικείμενο σε τίτλο.
function export.getTargetofPage(page)
	local titleObj
	if type(page) == 'string' or type(page) == 'number' then
		titleObj = _getTitle(page)
	else
		error(string.format(
			"σφάλμα παραμέτρου #1 στο 'getTargetofPage'"
				.. " (περιμένει αλφαριθμητικό, αλλά πήρε %s)",
			type(page)
		), 2)
	end
	if not titleObj or not titleObj.isRedirect then
		return nil
	end
	--η σελίδα περιέχει ανακατεύθυνση
    local pagecontent = titleObj:getContent()
	local target = export.getTargetFromText(pagecontent)
	if target then
		local targetTitle = _getTitle(target)
		if targetTitle then
			return targetTitle.prefixedText
			--return targetTitle:getContent()
		else
			return nil
		end
	else
		-- The page is a redirect, but matching failed. This indicates a bug in
		-- the redirect matching pattern, so throw an error.
		error(string.format(
			'δεν μπόρεσα να αντιστοιχήσω την ανακατεύθυνση "%s"',
			titleObj.prefixedText
		))
	end	
end

--βρες το όνομα του Προτύπου που κάλεσε το Module
--αλλά μόνο αν κληθηκε από σελλίδα που κάλεσε το πρότυπο
function export.getTemplateName(frame)
	if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
	    local templateobj = mw.title.new(frame:getParent():getTitle())
	    if templateobj.namespace == 10 then -- NS_TEMPLATE
		    return templateobj.text:match( "^%s*(.-)%s*$" )
	    else
	        return nil
	    end
	else
	    return nil
    end
end

function export.consoletest(frame)
    local args = frame.args
    local parentargs = frame:getParent().args
    local templateobj = mw.title.new(frame:getTitle())
    local templateNS = templateobj.namespace
    output = 'πρώτη παράμετρος από το πρότυπο:'
    output = output .. '\n' .. args[1]
    output = output .. '\n' .. 'πρώτη παράμετρος από τη σελίδα:'
    output = output .. '\n' .. parentargs[1]
    output = output .. '\n' .. 'αριθμός ονοματοχώρου:' --στην κοσόλα φυσικά θα δείξει το τρέχον ns, του module δηλαδή
    output = output .. '\n' .. templateNS
    
    return output
end

--απευθείας χρήση συνάρτησης
function export.test(text)
	return require("Module:Kleida-el")['κλείδα'](text)
end

--[=[Πως δοκιμάζουμε το Module στην κονσόλα:
1. Γράφουμε στην κονσόλα:
=p.toonomathssynarthshs(parametros)
για το συγκεκριμένο αν θέλω να δώ τι επιστρέφει η συνάρτηση
export.getTargetofPage για τη σελίδα Βικιπαίδεια:Αγορά
γράφω:
=p.getTargetofPage('Βικιπαίδεια:Αγορά')
και "πατάω" "έντερ"...

Αν θέλουμε να το χρησιμοποιήσουμε σε πρότυπο και χρειαζόμαστε και το frame
και τις παραμέτρους που θα δόσει ο χρήστης στη σελίδα
και τις παραμέτρους που θα υπάρχουν στο πρότυπο γράφω μία-μία τις γραμμές στην κονσόλα
πατώντας στο τέλος κάθε γραμμής "έντερ"
parentFrame = mw.getCurrentFrame():newChild{ args = { 'παράμετρος1στησελίδα','παράμετρος2στησελίδα' } }
frame = parentFrame:newChild{ args = { 'παράμετρος1στοπρότυπο','παράμετρος2στοπρότυπο' } }
=p.consoletest(frame)

Επιστρέφει κείμενο και όχι την τελική μορφή που θα πάρουμε (π.χ. πίνακα με χρωματάκια)
Προσοχή και στις αλλαγές γραμμής.
Μπορεί αυτό που θά πάρουμε εδώ να έχει αλλαγές γραμμής αλλά να μην φαίνονται στο τελικό (στη σελίδα δηλαδή)

]=]

return export