ഘടകം:Core
ഈ ഘടകത്തിന്റെ വിവരണം ഘടകം:Core/വിവരണം എന്ന താളിൽ നിർമ്മിക്കാവുന്നതാണ്
--[[ __ __ _ _ ____ | \/ | ___ __| |_ _| | ___ _ / ___|___ _ __ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) | / _ \| '__/ _ \ | | | | (_) | (_| | |_| | | __/_| |__| (_) | | | __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)\____\___/|_| \___| This module is intended as collection of core functions shared among several Lua modules creating infobox templates on Commons. Authors and maintainers: * User:Jarekt ]] local core = {} ------------------------------------------------------------------------------ -- Based on frame structure create "args" table with all the input parameters. -- All inputs are not not case-sensitive and underscored are treated the same -- way as speces. Input values are trimmed and empty string are converted to -- nils. If "lang" is not provided than we substitute user's prefered language. function core.getArgs(frame) local function normalize_input_args(input_args, output_args) for name, value in pairs( input_args ) do value = string.gsub(value, "^%s*(.-)%s*$", "%1") -- trim whitespaces from the beggining and the end of the string if value ~= '' then -- nuke empty strings if type(name)=='string' then name = string.gsub( string.lower(name), ' ', '_') end output_args[name] = value end end return output_args end local args = {} args = normalize_input_args(frame:getParent().args, args) args = normalize_input_args(frame.args, args) if (args.lang and mw.language.isSupportedLanguage(args.lang)) then args.lang = string.lower(args.lang) else args.lang = frame:callParserFunction("int","lang") -- get user's chosen language end return args end ------------------------------------------------------------------------------ -- code equivalent to https://commons.wikimedia.org/wiki/Template:LangSwitch function core.langSwitch(list,lang) local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) for i,language in ipairs(langList) do if list[language] then return list[language] end end end ------------------------------------------------------------------------------ -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to Module:Yesno function core.yesno(val, default) if type(val) == 'boolean' then return val elseif type(val) == 'number' then if val==1 then return true elseif val==0 then return false end elseif type(val) == 'string' then val = mw.ustring.lower(val) -- put in lower case if val == 'no' or val == 'n' or val == 'false' or val == '0' then return false elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then return true end end return default end ------------------------------------------------------------------------------ -- read Commons Data:SOMENAME.tab dataset and look for message identified by a -- "key" in a language "lang". See editAtWikidata as an example. function core.formatMessage(dataset, key, lang) for _, row in pairs(mw.ext.data.get(dataset, lang).data) do local id, msg = unpack(row) if id == key then return mw.message.newRawMessage(msg):plain() end end error('Invalid message key "' .. key .. '"') end ------------------------------------------------------------------------------- -- Assembles the "Edit at Wikidata" pen icon and returns it as wikitext string. -- Dependencies: Data:I18n/EditAt.tab ------------------------------------------------------------------------------- function core.editAtWikidata(entityID, propertyID, lang) local msg = core.formatMessage('I18n/EditAt.tab', 'EditAtWikidata', lang) local link = 'https://www.wikidata.org/wiki/' .. entityID .. (propertyID == "" and "" or ("#" .. propertyID)) return " [[File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt="..msg.."|link="..link.."|"..msg.."]]" end ------------------------------------------------------------------------------- -- Assembles the "Edit at SDC" pen icon and returns it as wikitext string. -- Dependencies: Data:I18n/EditAt.tab ------------------------------------------------------------------------------- function core.editAtSDC(propertyID, lang) local msg = core.formatMessage('I18n/EditAt.tab', 'EditAtSDC', lang) local link = mw.title.getCurrentTitle():fullUrl() .. (propertyID == "" and "" or ("#" .. propertyID)) return " [[File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt="..msg.."|link="..link.."|"..msg.."]]" end ------------------------------------------------------------------------------- function core.getLabel(id, userLang) -- code equivalent to require("Module:Wikidata label")._getLabel local label, link -- build language fallback list local langList = mw.language.getFallbacksFor(userLang) table.insert(langList, 1, userLang) for _, lang in ipairs(langList) do -- loop over language fallback list looking for label in the specific language label = mw.wikibase.getLabelByLang(id, lang) if label then break end -- label found and we are done end for _, lang in ipairs(langList) do -- loop over language fallback list looking for label in the specific language link = mw.wikibase.getSitelink(id, lang .. 'wiki') if link then link = mw.ustring.format('w:%s:%s', lang, link) break end end link = link or ('d:'..id) label = label or id return '[['..link..'|'..label..']]' end return core