Modul:Namespace detect: razlika između inačica

Izvor: Hrvatska internetska enciklopedija
Prijeđi na navigaciju Prijeđi na pretraživanje
mNema sažetka uređivanja
mNema sažetka uređivanja
 
Redak 1: Redak 1:
-- Modul:Namespace_detect
-- This module implements namespace detection and handling.
-- Minimalna, stabilna verzija kompatibilna s MediaWiki
-- It is a direct port of the English Wikipedia version.


local p = {}
local p = {}


local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local mArguments = require('Module:Arguments')
local data = require('Module:Namespace detect/data')
local cfg = require('Module:Namespace detect/config')


-- Mapiranje namespace ID → ime
local function getPageObject(page)
local ns = mw.site.namespaces
    if type(page) == 'string' then
        return mw.title.new(page)
    elseif type(page) == 'table' and page.getContent then
        return page
    else
        return mw.title.getCurrentTitle()
    end
end


-- Funkcija: vrati namespace ID
local function getNamespace(page)
function p._namespaceId(title)
     local title = getPageObject(page)
     if not title then return nil end
     return title.namespace
    local t = mw.title.new(title)
     if not t then return nil end
    return t.namespace
end
end


-- Funkcija: vrati namespace ime (lokalizirano)
local function matchNamespace(ns, list)
function p._namespaceName(title)
    if not list then
     local id = p._namespaceId(title)
        return false
    if not id then return nil end
    end
     return ns[id].name
     for _, v in ipairs(list) do
        if ns == v then
            return true
        end
    end
     return false
end
end


-- Funkcija: vrati "glavni", "datoteka", "predložak", itd.
local function detectNamespace(page)
function p._namespaceCanonical(title)
     local ns = getNamespace(page)
     local id = p._namespaceId(title)
     for name, info in pairs(data) do
     if not id then return nil end
        if matchNamespace(ns, info.namespaces) then
     return ns[id].canonicalName
            return name
        end
    end
     return 'other'
end
end


-- Funkcija: provjera je li stranica u glavnom imenskom prostoru
local function getParam(args, key)
function p._isMain(title)
     return args[key] or args[string.lower(key)] or args[string.upper(key)]
     return p._namespaceId(title) == 0
end
end


-- Funkcija: provjera je li stranica u imenskom prostoru predložaka
local function getOutput(args, ns)
function p._isTemplate(title)
    local value = getParam(args, ns)
     return p._namespaceId(title) == 10
     if value ~= nil then
        return value
    end
    return getParam(args, 'other')
end
end


-- Funkcija: provjera je li stranica u imenskom prostoru modula
function p._main(args)
function p._isModule(title)
    local page = getParam(args, 'page')
     return p._namespaceId(title) == 828
    local ns = detectNamespace(page)
     return getOutput(args, ns) or ''
end
end


-- Glavna funkcija za #invoke
function p.main(frame)
function p.namespace(frame)
     local args = mArguments.getArgs(frame)
     local args = getArgs(frame)
     return p._main(args)
    local title = args[1] or mw.title.getCurrentTitle().fullText
     return p._namespaceName(title) or ''
end
end


-- Minimalna funkcija dodata 15/04/2026
-- Subject/talk namespace handling


function p.main(frame)
local function subjectNamespace(page)
     local args = frame:getParent().args
     local title = getPageObject(page)
     local title = args.page or mw.title.getCurrentTitle().fullText
     return title.subjectNsText
end


     if args.file then
local function talkNamespace(page)
        return p._namespaceId(title) == 6 and args.file or ''
     local title = getPageObject(page)
    end
    return title.talkNsText
end


     if args.other then
function p.subjectns(frame)
        return p._namespaceId(title) ~= 6 and args.other or ''
     local args = mArguments.getArgs(frame)
    end
    local page = getParam(args, 'page')
    return subjectNamespace(page) or ''
end


     return ''
function p.talkns(frame)
    local args = mArguments.getArgs(frame)
    local page = getParam(args, 'page')
     return talkNamespace(page) or ''
end
end


-- Minimalna funkcija dodata 15/04/2026
-- Table output for documentation


function p.table(frame)
function p.table(frame)
     local args = frame:getParent().args
     local args = mArguments.getArgs(frame)
     local showTalk = args.talk == 'yes'
     local showTalk = yesno(args.talk, false)


     local out = '{| class="wikitable"\n! ID !! Ime !! Kanonsko ime\n'
     local out = '{| class="wikitable"\n! Name !! Namespaces\n'


     for id, data in pairs(mw.site.namespaces) do
     for name, info in pairs(data) do
         if showTalk or not data.isTalk then
         out = out .. '|-\n| ' .. name .. ' || '
            out = out .. '|-\n| ' .. id .. ' || ' .. (data.name or '') .. ' || ' .. (data.canonicalName or '') .. '\n'
        for i, ns in ipairs(info.namespaces) do
            out = out .. ns
            if i < #info.namespaces then
                out = out .. ', '
            end
         end
         end
        out = out .. '\n'
     end
     end


Redak 88: Redak 116:
end
end


-- Return module table
return p
return p

Posljednja izmjena od 15. travanj 2026. u 10:28

Dokumentacija modula

Modul dopušta ispis teksta ovisno o imenskom prostoru u kojem je modul pozvan.

Modul sadrži Lua implementaciju predloška {{namespace detect}}.

Korištenje

{{#invoke: Namespace detect | main
| main              = <!-- tekst koji se vraća ako je modul pozvan u glavnom imenskom prostoru -->
| talk              = <!-- tekst koji se vraća ako je modul pozvan u bilo kojem
			razgovornom prostoru (Razgovor sa suradnikom, Razgovor  o predlošku, itd) -->

<!-- tekst koji se vraća za pojedine imenske prostore -->
| main		=
| suradnik  	=
| hrvatska_internetska_enciklopedija	=
| datoteka	=
| mediawiki	=
| predložak	=
| pomoć		=
| kategorija	=
| portal	=
| dodatak	=
| nacrt		=
| modul		=
| gadget	=
| gadget definition =

| other             = <!-- tekst koji se vraća za ostale (nenavedene) imenske prostore -->
| demopage          = <!-- stranica za koju pronalazimo imenski postor, ako nije trenutna stranica -->
| demospace         = <!-- imenski prostor za koji pozivamo predložak (zaobilazi stvarni prostor) -->

| subjectns         = <!-- ako je postavljeno na "yes", tretira razgovorne stranice kao dio imenskog prostora sadržaja 
			(Razgovor o predlošku = Predložak) -->
}}

Imenski prostori

Moguće vrijednosti za imenske prostore sadržaja su sljedeće:

Name Namespaces
draft talk 119
education program 446
mediawiki talk 9
wikipedia talk 5
other
help 12
category 14
module talk 829
user talk 3
help talk 13
module 828
file talk 7
book talk 109
template 10
user 2
template talk 11
wikipedia 4
education program talk 447
book 108
talk 1, 3, 5, 7, 9, 11, 13, 15, 101, 109, 119, 447, 829
portal talk 101
main 0
draft 118
portal 100
file 6
mediawiki 8
category talk 15

Funkcija tablice

Koristite sljedeći kod za prikaz tablice imenskih prostora:

{{#invoke:Namespace detect|table|talk=yes}}

Parametar |talk=yes pokazuje i imenski prostor razgovora.

Konfiguracijska datoteka modula nalazi se na Modul:Namespace detect/config.

Tehničke napomene

Modul koristi podatkovni obrazac na Module:Namespace detect/data. Ta se stranica učitava funkcijom mw.loadData, što joj omogućava procesiranje jednom po sadržajnoj stranici umjesto jednom po pozivu modula (#invoke). Time se poboljšavaju preformanse rada modula.


-- This module implements namespace detection and handling.
-- It is a direct port of the English Wikipedia version.

local p = {}

local yesno = require('Module:Yesno')
local mArguments = require('Module:Arguments')
local data = require('Module:Namespace detect/data')
local cfg = require('Module:Namespace detect/config')

local function getPageObject(page)
    if type(page) == 'string' then
        return mw.title.new(page)
    elseif type(page) == 'table' and page.getContent then
        return page
    else
        return mw.title.getCurrentTitle()
    end
end

local function getNamespace(page)
    local title = getPageObject(page)
    return title.namespace
end

local function matchNamespace(ns, list)
    if not list then
        return false
    end
    for _, v in ipairs(list) do
        if ns == v then
            return true
        end
    end
    return false
end

local function detectNamespace(page)
    local ns = getNamespace(page)
    for name, info in pairs(data) do
        if matchNamespace(ns, info.namespaces) then
            return name
        end
    end
    return 'other'
end

local function getParam(args, key)
    return args[key] or args[string.lower(key)] or args[string.upper(key)]
end

local function getOutput(args, ns)
    local value = getParam(args, ns)
    if value ~= nil then
        return value
    end
    return getParam(args, 'other')
end

function p._main(args)
    local page = getParam(args, 'page')
    local ns = detectNamespace(page)
    return getOutput(args, ns) or ''
end

function p.main(frame)
    local args = mArguments.getArgs(frame)
    return p._main(args)
end

-- Subject/talk namespace handling

local function subjectNamespace(page)
    local title = getPageObject(page)
    return title.subjectNsText
end

local function talkNamespace(page)
    local title = getPageObject(page)
    return title.talkNsText
end

function p.subjectns(frame)
    local args = mArguments.getArgs(frame)
    local page = getParam(args, 'page')
    return subjectNamespace(page) or ''
end

function p.talkns(frame)
    local args = mArguments.getArgs(frame)
    local page = getParam(args, 'page')
    return talkNamespace(page) or ''
end

-- Table output for documentation

function p.table(frame)
    local args = mArguments.getArgs(frame)
    local showTalk = yesno(args.talk, false)

    local out = '{| class="wikitable"\n! Name !! Namespaces\n'

    for name, info in pairs(data) do
        out = out .. '|-\n| ' .. name .. ' || '
        for i, ns in ipairs(info.namespaces) do
            out = out .. ns
            if i < #info.namespaces then
                out = out .. ', '
            end
        end
        out = out .. '\n'
    end

    out = out .. '|}'
    return out
end

-- Return module table
return p