Module:Description: Difference between revisions
From Neodyland Wiki
More actions
No edit summary |
No edit summary |
||
| Line 20: | Line 20: | ||
--[[ | --[[ | ||
display a language followed by a message. Like "English: Hello" with extensive HTML marking | display a language followed by a message. Like "English: Hello" with extensive HTML marking | ||
Code equivalent to https://commons.wikimedia.org/wiki/Template:Description | Code equivalent to https://commons.wikimedia.org/wiki/Template:Description | ||
Inputs: | Inputs: | ||
1) text - text to display | 1) text - description text to display | ||
2) text_lang - language code for the above text | 2) text_lang - language code for the above text, also used as a name of the CSS formating class | ||
3) inline - Optional, default is false. When set to true, forces the template to be displayed | 3) args - additional optional arguments | ||
* inline - Optional, default is false. When set to true, forces the template to be displayed | |||
inline, so that it does not break the current paragraph (that makes possible to put several | |||
descriptions side by side on a single line) | |||
* ext - extension text shown after the language name before colon (optional, default is empty) | |||
* haver - hover aka mouseover aka tooltip text | |||
* disp_lang - | |||
* user_lang - language code of the users language (used for the hover aka mouseover aka tooltip text) | |||
if args.hover is not provided (defaults to | |||
]] | ]] | ||
function p.langWrapper(text, text_lang, args) | function p.langWrapper(text, text_lang, args) | ||
local inline = core.yesno(args.inline, false) and 'inline' or nil | local inline = core.yesno(args.inline, false) and 'inline' or nil | ||
local disp_lang = args.disp_lang and args.disp_lang or text_lang -- disp_lang same as text_lang by default | local disp_lang = args.disp_lang and args.disp_lang or text_lang -- disp_lang same as text_lang by default | ||
local user_lang = args.user_lang and args.user_lang or disp_lang | local user_lang = args.user_lang and args.user_lang or disp_lang -- user_lang is used for the hover text | ||
local langObj = mw.language.new( disp_lang ) | local langObj = mw.language.new( disp_lang ) | ||
local dir = langObj:getDir() -- text direction | local dir = langObj:getDir() -- text direction | ||
local | local space = mw.message.new( "Word-separator" ):inLanguage(disp_lang):plain() | ||
local colon = mw.message.new( "Colon" ):inLanguage(disp_lang):plain() | |||
local lang_name = langObj:ucfirst(mw.language.fetchLanguageName(text_lang, disp_lang)) | local lang_name = langObj:ucfirst(mw.language.fetchLanguageName(text_lang, disp_lang)) | ||
local hover = args.hover and args.hover or mw.language.fetchLanguageName( text_lang, user_lang) | local hover = args.hover and args.hover or mw.language.fetchLanguageName( text_lang, user_lang) | ||
lang_name = '<b>' .. lang_name .. (args.ext or '') .. colon .. '</b>' | |||
-- create HTML | -- create HTML | ||
| Line 43: | Line 51: | ||
:addClass(text_lang) -- class: "en", "de" etc. | :addClass(text_lang) -- class: "en", "de" etc. | ||
:attr('title', hover) -- add hover aka mouseover aka tooltip text | :attr('title', hover) -- add hover aka mouseover aka tooltip text | ||
:wikitext( | :wikitext(lang_name) | ||
local dtag = mw.html.create('div') | local dtag = mw.html.create('div') | ||
:addClass('description') -- div.description is tracked by mw:Extension:CommonsMetadata | :addClass('description') -- div.description is tracked by mw:Extension:CommonsMetadata | ||
| Line 51: | Line 59: | ||
:attr('lang', disp_lang) | :attr('lang', disp_lang) | ||
:css('display', inline) | :css('display', inline) | ||
:wikitext(tostring(ltag) .. | :wikitext(tostring(ltag) .. space .. text) | ||
return tostring(dtag) | return tostring(dtag) | ||
end | end | ||
Revision as of 03:30, 2 March 2021
This documentation is transcluded from Module:Description/doc.
--[[
__ __ _ _ ____ _ _ _
| \/ | ___ __| |_ _| | ___ _| _ \ ___ ___ ___ _ __(_)_ __ | |_(_) ___ _ __
| |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _ \/ __|/ __| '__| | '_ \| __| |/ _ \| '_ \
| | | | (_) | (_| | |_| | | __/_| |_| | __/\__ \ (__| | | | |_) | |_| | (_) | | | |
|_| |_|\___/ \__,_|\__,_|_|\___(_)____/ \___||___/\___|_| |_| .__/ \__|_|\___/|_| |_|
|_|
Description is a module implementing functionality of {{Description}}
template, which is used by {{en}}, {{de}} and other language templates.
Authors and maintainers:
* User:Jarekt
]]
local core = require('Module:Core')
local p = {}
------------------------------------------------------------------------------
--[[
display a language followed by a message. Like "English: Hello" with extensive HTML marking
Code equivalent to https://commons.wikimedia.org/wiki/Template:Description
Inputs:
1) text - description text to display
2) text_lang - language code for the above text, also used as a name of the CSS formating class
3) args - additional optional arguments
* inline - Optional, default is false. When set to true, forces the template to be displayed
inline, so that it does not break the current paragraph (that makes possible to put several
descriptions side by side on a single line)
* ext - extension text shown after the language name before colon (optional, default is empty)
* haver - hover aka mouseover aka tooltip text
* disp_lang -
* user_lang - language code of the users language (used for the hover aka mouseover aka tooltip text)
if args.hover is not provided (defaults to
]]
function p.langWrapper(text, text_lang, args)
local inline = core.yesno(args.inline, false) and 'inline' or nil
local disp_lang = args.disp_lang and args.disp_lang or text_lang -- disp_lang same as text_lang by default
local user_lang = args.user_lang and args.user_lang or disp_lang -- user_lang is used for the hover text
local langObj = mw.language.new( disp_lang )
local dir = langObj:getDir() -- text direction
local space = mw.message.new( "Word-separator" ):inLanguage(disp_lang):plain()
local colon = mw.message.new( "Colon" ):inLanguage(disp_lang):plain()
local lang_name = langObj:ucfirst(mw.language.fetchLanguageName(text_lang, disp_lang))
local hover = args.hover and args.hover or mw.language.fetchLanguageName( text_lang, user_lang)
lang_name = '<b>' .. lang_name .. (args.ext or '') .. colon .. '</b>'
-- create HTML
local ltag = mw.html.create('span') -- bold language name string
:addClass('language') -- class: "language"
:addClass(text_lang) -- class: "en", "de" etc.
:attr('title', hover) -- add hover aka mouseover aka tooltip text
:wikitext(lang_name)
local dtag = mw.html.create('div')
:addClass('description') -- div.description is tracked by mw:Extension:CommonsMetadata
:addClass('mw-content-'..dir) -- mw-content-rtl and mw-content-ltr are defined in mediawiki-code (https://gerrit.wikimedia.org/r/c/mediawiki/core/+/208332)
:addClass(text_lang) -- not sure where "en", "de" etc. are defined
:attr('dir', dir)
:attr('lang', disp_lang)
:css('display', inline)
:wikitext(tostring(ltag) .. space .. text)
return tostring(dtag)
end
function p.description(frame)
local args = core.getArgs(frame)
local desc
args.user_lang = args.lang
args.inline = (args.inline ~= nil) -- convert to boolean
if args.text == nil then -- if no string than add error message and a category
local cat = 'Category:Language templates with no text displayed'
local msg = core.formatMessage('I18n/DescriptionError.tab', 'missing text', lang)
msg = mw.html.create('span'):addClass("error"):wikitext(msg)
msg = '[' .. frame:callParserFunction{ name = 'fullurl', args={cat} } .. tostring(msg) .. ']'
msg = mw.html.create('span'):addClass("plainlinks"):wikitext(msg)
desc = p.langWrapper(tostring(msg), args.lang, args)
local namespace = mw.title.getCurrentTitle().namespace
local LUT = {[0]=1, [6]=1, [10]=1, [14]=1, [100]=1, [106]=1}
if LUT[namespace]==1 then
desc = desc .. '[[' .. cat .. ']]'
end
else
desc = p.langWrapper(args.text, args.lang, args)
end
return desc
end
return p