Modul:Category handler
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/50px-Test_Template_Info-Icon_-_Version_%282%29.svg.png)
Modul sadrži implementaciju predloška {{Category handler}}.
Ova će dokumentacija pojasniti kako koristiti modul u drugim modulima. Za korištenje u predlošcima, molim pogledajte dokumentaciju istoimenog predloška.
Korištenje iz drugih Lua modula
Kad ne koristiti ovaj modul
Ako modul treba kategorizirati samo jednu vrstu sadržaja (npr. samo datoteke, ili samo predloške), nije poželjno koristiti ovaj modul. Takvu kategorizaciju moguće je napraviti sljedećim kodom:
local title = mw.title.getCurrentTitle() -- dohvati naslov straniceif title.nsText == 'Datoteka' then -- ako je imenski prostor naslova jednak -- uradi neštoend
Ako trebate zasebno kategorizirati različite vrste sadržaja, poželjno je koristiti ovaj modul.
Imenski prostori
Modul radi s imenima imenskih prostora na ovoj Wikipediji.
- glavni - glavni imenski prostor
- razgovor - sve razgovorne stranice (razgovor sa suradnikom, razgovor o predlošku, ...)
- datoteka, wikipedija, suradnik - imena ostalih imenskih prostora. Pogledajte tablicu niže za puni popis
- other - svi ostali imenski prostori koji nisu poimence navedeni
Popis imenskih prostora
- (bez prostora razgovor i other)
Imenski prostor | Aliasi |
---|---|
main | glavni , glavno |
suradnik | user , sur , u , suradnica |
wikipedija | project , wikipedia , wp |
datoteka | file , dt , slika , image |
mediawiki | me |
predložak | template |
pomoć | help , pm , h |
kategorija | category , kt , ct |
portal | |
dodatak | |
nacrt | draft |
timedtext | |
modul | module , md , mod |
Primjeri korištenja
Modul prima dva ili više parametara.
Općeniti primjer
Niže je primjer korištenja:
p = {}local categoryHandler = require('Module:Category handler').main function p.main( frame ) local rezultat = 'Ovaj je modul namijenjen za GIP i razgovore.' local kategorija = categoryHandler{ glavni = '[[Kategorija:Neka kategorija1]]', -- Kategorizacija u GIP-u razgovor = '[[Kategorija:Neka kategorija2]]', -- Kategorizacija u razgovorima other = '[[Kategorija:Neka kategorija3]]', -- Kategorizacija u ostalim imenskim prostorima nocat = frame.args.nocat -- kako bi "nocat=true/false" radilo } kategorija = kategorija or '' -- izbjegava grešku ako kategorija nije zadana return rezultat .. kategorijaend return p
Pojašnjenje koda:
- Uzmimo da je primjer iznad dio modula Foo. Modul Foo možemo dodati u predložak ili pojedinačne stranice pisanjem
{{#invoke:foo|main}}
.
Zbog gornjeg koda predložak ili stranice s tim modulom svrstavat će se u kategoriju Kategorija:Neka kategorija1 ako su u GIP-u, u kategoriju Kategorija:Neka kategorija2 ako su na kakvoj razgovornoj stranici ili u kategoriju Kategorija:Neka kategorija3 ako se nalaze negdje drugdje.
- U pojedinačni poziv predloška ili modula možemo staviti
|nocat=true
da se gornji vid kategorizacije ne provodi zasebno za svaki predložak ili modul.
Ista kategorija za više imenskih prostora
Ako trebamo više različitih imenskih prostora svrstati u istu kategoriju, činimo to ovako:
p = {}local categoryHandler = require('Module:Category handler').main function p.main( frame ) local rezultat = 'Ovaj je modul namijenjen za GIP i razgovore.' local kategorija = categoryHandler{ glavni = '[[Kategorija:Neka kategorija1]]', -- Kategorizacija u GIP-u [1] = '[[Kategorija:Neka kategorija2]]', -- prvi neimenovani parametar dodjeljujemo kategoriji pomoć = 1, -- imenski prostor pomoći... suradnik = 1, -- i imenski prostor suradnika smještaju se u kategoriju navedenu pod [1] razgovor = '', -- bez kategorije na razgovornim stranicama nocat = frame.args.nocat -- kako bi "nocat=true/false" radilo } kategorija = kategorija or '' -- izbjegava grešku ako kategorija nije zadana return rezultat .. kategorijaend return p
---------------------------------------------------------------------------------- ---- CATEGORY HANDLER ---- ---- This module implements the {{category handler}} template in Lua, ---- with a few improvements: all namespaces and all namespace aliases ---- are supported, and namespace names are detected automatically for ---- the local wiki. This module requires [[Module:Namespace detect]] ---- and [[Module:Yesno]] to be available on the local wiki. It can be ---- configured for different wikis by altering the values in ---- [[Module:Category handler/config]], and pages can be blacklisted ---- from categorisation by using [[Module:Category handler/blacklist]]. ---- ------------------------------------------------------------------------------------ Load required moduleslocal yesno = require('Module:Yesno')-- Lazily load things we don't always needlocal mShared, mappingslocal p = {}---------------------------------------------------------------------------------- Helper functions--------------------------------------------------------------------------------local function trimWhitespace(s, removeBlanks)if type(s) ~= 'string' thenreturn sends = s:match('^%s*(.-)%s*$')if removeBlanks thenif s ~= '' thenreturn selsereturn nilendelsereturn sendend---------------------------------------------------------------------------------- CategoryHandler class--------------------------------------------------------------------------------local CategoryHandler = {}CategoryHandler.__index = CategoryHandlerfunction CategoryHandler.new(data, args)local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)-- Set the title objectdolocal pagename = obj:parameter('demopage')local success, titleObjif pagename thensuccess, titleObj = pcall(mw.title.new, pagename)endif success and titleObj thenobj.title = titleObjif titleObj == mw.title.getCurrentTitle() thenobj._usesCurrentTitle = trueendelseobj.title = mw.title.getCurrentTitle()obj._usesCurrentTitle = trueendend-- Set suppression parameter valuesfor _, key in ipairs{'nocat', 'categories'} dolocal value = obj:parameter(key)value = trimWhitespace(value, true)obj['_' .. key] = yesno(value)enddolocal subpage = obj:parameter('subpage')local category2 = obj:parameter('category2')if type(subpage) == 'string' thensubpage = mw.ustring.lower(subpage)endif type(category2) == 'string' thensubpage = mw.ustring.lower(category2)endobj._subpage = trimWhitespace(subpage, true)obj._category2 = trimWhitespace(category2) -- don't remove blank valuesendreturn objendfunction CategoryHandler:parameter(key)local parameterNames = self._data.parameters[key]local pntype = type(parameterNames)if pntype == 'string' or pntype == 'number' thenreturn self._args[parameterNames]elseif pntype == 'table' thenfor _, name in ipairs(parameterNames) dolocal value = self._args[name]if value ~= nil thenreturn valueendendreturn nilelseerror(string.format('invalid config key "%s"',tostring(key)), 2)endendfunction CategoryHandler:isSuppressedByArguments()return-- See if a category suppression argument has been set.self._nocat == trueor self._categories == falseor (self._category2and self._category2 ~= self._data.category2Yesand self._category2 ~= self._data.category2Negative)-- Check whether we are on a subpage, and see if categories are-- suppressed based on our subpage status.or self._subpage == self._data.subpageNo and self.title.isSubpageor self._subpage == self._data.subpageOnly and not self.title.isSubpageendfunction CategoryHandler:shouldSkipBlacklistCheck()-- Check whether the category suppression arguments indicate we-- should skip the blacklist check.return self._nocat == falseor self._categories == trueor self._category2 == self._data.category2Yesendfunction CategoryHandler:matchesBlacklist()if self._usesCurrentTitle thenreturn self._data.currentTitleMatchesBlacklistelsemShared = mShared or require('Module:Category handler/shared')return mShared.matchesBlacklist(self.title.prefixedText,mw.loadData('Module:Category handler/blacklist'))endendfunction CategoryHandler:isSuppressed()-- Find if categories are suppressed by either the arguments or by-- matching the blacklist.return self:isSuppressedByArguments()or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()endfunction CategoryHandler:getNamespaceParameters()if self._usesCurrentTitle thenreturn self._data.currentTitleNamespaceParameterselseif not mappings thenmShared = mShared or require('Module:Category handler/shared')mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadDataendreturn mShared.getNamespaceParameters(self.title,mappings)endendfunction CategoryHandler:namespaceParametersExist()-- Find whether any namespace parameters have been specified.-- We use the order "all" --> namespace params --> "other" as this is what-- the old template did.if self:parameter('all') thenreturn trueendif not mappings thenmShared = mShared or require('Module:Category handler/shared')mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadDataendfor ns, params in pairs(mappings) dofor i, param in ipairs(params) doif self._args[param] thenreturn trueendendendif self:parameter('other') thenreturn trueendreturn falseendfunction CategoryHandler:getCategories()local params = self:getNamespaceParameters()local nsCategoryfor i, param in ipairs(params) dolocal value = self._args[param]if value ~= nil thennsCategory = valuebreakendendif nsCategory ~= nil or self:namespaceParametersExist() then-- Namespace parameters exist - advanced usage.if nsCategory == nil thennsCategory = self:parameter('other')endlocal ret = {self:parameter('all')}local numParam = tonumber(nsCategory)if numParam and numParam >= 1 and math.floor(numParam) == numParam then-- nsCategory is an integerret[#ret + 1] = self._args[numParam]elseret[#ret + 1] = nsCategoryendif #ret < 1 thenreturn nilelsereturn table.concat(ret)endelseif self._data.defaultNamespaces[self.title.namespace] then-- Namespace parameters don't exist, simple usage.return self._args[1]endreturn nilend---------------------------------------------------------------------------------- Exports--------------------------------------------------------------------------------local p = {}function p._exportClasses()-- Used for testing purposes.return {CategoryHandler = CategoryHandler}endfunction p._main(args, data)data = data or mw.loadData('Module:Category handler/data')local handler = CategoryHandler.new(data, args)if handler:isSuppressed() thenreturn nilendreturn handler:getCategories()endfunction p.main(frame, data)data = data or mw.loadData('Module:Category handler/data')local args = require('Module:Arguments').getArgs(frame, {wrappers = data.wrappers,valueFunc = function (k, v)v = trimWhitespace(v)if type(k) == 'number' thenif v ~= '' thenreturn velsereturn nilendelsereturn vendend})return p._main(args, data)endreturn p
🔥 Top keywords: Europsko prvenstvo u nogometu – Njemačka 2024.Glavna stranicaOčev danIvan KlasnićPosebno:TražiKurban-bajramEuropsko prvenstvo u nogometu – Europa 2020.Wikipedija:Wiki voli ZemljuEuropsko prvenstvo u nogometuElizabeta AustrijskaKylian MbappéHrvatska nogometna reprezentacijaSvjetsko prvenstvo u nogometu – Katar 2022.Matija ŠarkićSvjetsko prvenstvo u nogometuHrvatskaSlovačkaViola boje mora (televizijska serija)RumunjskaRomelu LukakuVedran JešeFrancuska nogometna reprezentacijaFranjo Josip I.Dušan TadićPoljička RepublikaAntoine GriezmannMario CarevićDragan StojkovićHamburgGennaro GattusoBelgijaEuropska unijaSvjetsko prvenstvo u nogometu – Kanada, Meksiko i SAD 2026.N'Golo KantéJoško JeličićPosebno:Nedavne promjeneZagrebDivlje srce (televizijska serija)Islamski blagdani