মডিউল:নামস্থান শনাক্তকরণ

এই মডিউলের জন্য মডিউল:নামস্থান শনাক্তকরণ/নথি-এ নথিপত্র তৈরি করা হয়ে থাকতে পারে

--[[----------------------------------------------------------------------------------                                                                            ----                            NAMESPACE DETECT                                ----                                                                            ---- This module implements the {{namespace detect}} 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. The     ---- module can also use the corresponding subject namespace value if it is     ---- used on a talk page. Parameter names can be configured for different wikis ---- by altering the values in the "cfg" table in                               ---- Module:Namespace detect/config.                                            ----                                                                            ------------------------------------------------------------------------------------]]local data = mw.loadData('মডিউল:নামস্থান শনাক্তকরণ/উপাত্ত')local argKeys = data.argKeyslocal cfg = data.cfglocal mappings = data.mappingslocal yesno = require('Module:Yesno')local mArguments -- Lazily initialise Module:Argumentslocal mTableTools -- Lazily initilalise Module:TableToolslocal ustringLower = mw.ustring.lowerlocal p = {}local function fetchValue(t1, t2)-- Fetches a value from the table t1 for the first key in array t2 where-- a non-nil value of t1 exists.for i, key in ipairs(t2) dolocal value = t1[key]if value ~= nil thenreturn valueendendreturn nilendlocal function equalsArrayValue(t, value)-- Returns true if value equals a value in the array t. Otherwise-- returns false.for i, arrayValue in ipairs(t) doif value == arrayValue thenreturn trueendendreturn falseendfunction p.getPageObject(page)-- Get the page object, passing the function through pcall in case of-- errors, e.g. being over the expensive function count limit.if page thenlocal success, pageObject = pcall(mw.title.new, page)if success thenreturn pageObjectelsereturn nilendelsereturn mw.title.getCurrentTitle()endend-- Provided for backward compatibility with other modulesfunction p.getParamMappings()return mappingsendlocal function getNamespace(args)-- This function gets the namespace name from the page object.local page = fetchValue(args, argKeys.demopage)if page == '' thenpage = nilendlocal demospace = fetchValue(args, argKeys.demospace)if demospace == '' thendemospace = nilendlocal subjectns = fetchValue(args, argKeys.subjectns)local retif demospace then-- Handle "demospace = main" properly.if equalsArrayValue(argKeys.main, ustringLower(demospace)) thenret = mw.site.namespaces[0].nameelseret = demospaceendelselocal pageObject = p.getPageObject(page)if pageObject thenif pageObject.isTalkPage then-- Get the subject namespace if the option is set,-- otherwise use "talk".if yesno(subjectns) thenret = mw.site.namespaces[pageObject.namespace].subject.nameelseret = 'talk'endelseret = pageObject.nsTextendelsereturn nil -- return nil if the page object doesn't exist.endendret = ret:gsub('_', ' ')return ustringLower(ret)endfunction p._main(args)-- Check the parameters stored in the mappings table for any matches.local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keyslocal params = mappings[namespace] or {}local ret = fetchValue(args, params)--[[-- If there were no matches, return parameters for other namespaces.-- This happens if there was no text specified for the namespace that-- was detected or if the demospace parameter is not a valid-- namespace. Note that the parameter for the detected namespace must be-- completely absent for this to happen, not merely blank.--]]if ret == nil thenret = fetchValue(args, argKeys.other)endreturn retendfunction p.main(frame)mArguments = require('Module:Arguments')local args = mArguments.getArgs(frame, {removeBlanks = false})local ret = p._main(args)return ret or ''endfunction p.table(frame)--[[-- Create a wikitable of all subject namespace parameters, for-- documentation purposes. The talk parameter is optional, in case it-- needs to be excluded in the documentation.--]]-- Load modules and initialise variables.mTableTools = require('Module:TableTools')local namespaces = mw.site.namespaceslocal cfg = data.cfglocal useTalk = type(frame) == 'table' and type(frame.args) == 'table' and yesno(frame.args.talk) -- Whether to use the talk parameter.-- Get the header names.local function checkValue(value, default)if type(value) == 'string' thenreturn valueelsereturn defaultendendlocal nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace')local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases')-- Put the namespaces in order.local mappingsOrdered = {}for nsname, params in pairs(mappings) doif useTalk or nsname ~= 'talk' thenlocal nsid = namespaces[nsname].id-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.nsid = nsid + 1 mappingsOrdered[nsid] = paramsendendmappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)-- Build the table.local ret = '{| class="wikitable"'.. '\n|-'.. '\n! ' .. nsHeader.. '\n! ' .. aliasesHeaderfor i, params in ipairs(mappingsOrdered) dofor j, param in ipairs(params) doif j == 1 thenret = ret .. '\n|-'.. '\n| <code>' .. param .. '</code>'.. '\n| 'elseif j == 2 thenret = ret .. '<code>' .. param .. '</code>'elseret = ret .. ', <code>' .. param .. '</code>'endendendret = ret .. '\n|-'.. '\n|}'return retendreturn p
🔥 Popular: