Jump to content
Toggle menu
  • 8 articles
  • 75 files
  • 7 users
  • 37.8K edits
Neodyland Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Description: Difference between revisions

From Neodyland Wiki
m Protected "Module:Description": High-risk Lua module ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
m tweak
Line 30: Line 30:
       * inline - Optional, default is false. When set to true, forces the template to be displayed  
       * 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  
             inline, so that it does not break the current paragraph (that makes possible to put several  
        descriptions side by side on a single line)
        descriptions side by side on a single line)  
 
<div
class="description mw-content-{{Dir|{{{4|{{{1}}}}}}}} {{{1}}}"
dir="{{Dir|{{{4|{{{1}}}}}}}}"
lang="{{{4|{{{1}}}}}}"
style="{{#if:{{{inline|}}}|display:inline;}}">
 
<span
class="language {{{1}}}"
title="{{{name|{{{3|}}}}}}">'''{{ucfirst:{{#language:{{{1}}}}}}}{{{5|}}}:'''</span>
{{{2}}}
</div>  
]]
]]
function p.langWrapper(text_lang, text, args)  
function p.langWrapper(text_lang, text, args)  
local dir, space, colon, lang_name, hover
local dir, space, colon, lang_name, hover
local inline    = core.yesno(args.inline, false) and 'inline' or nil  
local inline    = core.yesno(args.inline, false) and 'inline' or nil  
if mw.language.isKnownLanguageTag(text_lang) then
if mw.language.isKnownLanguageTag(text_lang) then -- supported language
local langObj = mw.language.new( text_lang )
local langObj = mw.language.new( text_lang )
dir      = langObj:getDir()          -- text direction
dir      = langObj:getDir()          -- text direction
space    = mw.message.new( "Word-separator" ):inLanguage(text_lang):plain()  
space    = mw.message.new( "Word-separator" ):inLanguage(text_lang):plain()  
colon    = mw.message.new( "Colon" ):inLanguage(text_lang):plain()  
colon    = mw.message.new( "Colon" ):inLanguage(text_lang):plain()  
lang_name = langObj:ucfirst(mw.language.fetchLanguageName(text_lang, text_lang))
hover    = mw.language.fetchLanguageName( text_lang, args.user_lang or 'en')
hover    = mw.language.fetchLanguageName( text_lang, args.user_lang or 'en')
else
lang_name = mw.language.fetchLanguageName( text_lang, text_lang)
lang_name = langObj:ucfirst(lang_name)
else -- unsuported language
dir  = 'ltr'
dir  = 'ltr'
space = ' '
space = ' '
colon = ':'
colon = ':'
text_lang = nil
hover = args.hover
lang_name = args.lang_name or text_lang or 'Unknown'
lang_name = text_lang or 'Unknown'
text_lang = nil -- do not set metadata related to unsuported language
end
end
lang_name = args.lang_name or lang_name-- user provided args.lang_name takes presedent
lang_name = '<b>' .. lang_name .. (args.ext or '') .. colon .. '</b>'
lang_name = '<b>' .. lang_name .. (args.ext or '') .. colon .. '</b>'

Revision as of 04:21, 7 March 2021

Module documentation[ create · purge ]
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_lang - language code for the above text, also used as a name of the CSS formating class
  2) text - description text to display
  3) args -  additional optional arguments. Numbers in perenthesis are parameter numbers in the original template.
	   * hover    - (3) hover aka mouseover aka tooltip text
	   * lang_tag - (4) standard code for lang tag in HTML (optional, default is same as text_lang)
	   * ext      - (5) extension text shown after the language name before colon (optional, default is empty)
       * 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)	   
]]
function p.langWrapper(text_lang, text, args) 
	local dir, space, colon, lang_name, hover
	local inline    = core.yesno(args.inline, false) and 'inline' or nil 
	if 	mw.language.isKnownLanguageTag(text_lang) then -- supported language
		local langObj = mw.language.new( text_lang )
		dir       = langObj:getDir()          -- text direction
		space     = mw.message.new( "Word-separator" ):inLanguage(text_lang):plain() 
		colon     = mw.message.new( "Colon" ):inLanguage(text_lang):plain() 
		hover     = mw.language.fetchLanguageName( text_lang, args.user_lang or 'en')
		lang_name = mw.language.fetchLanguageName( text_lang, text_lang)
		lang_name = langObj:ucfirst(lang_name)
	else -- unsuported language
		dir   = 'ltr'
		space = ' '
		colon = ':'
		hover = args.hover
		lang_name = text_lang or 'Unknown'
		text_lang = nil -- do not set metadata related to unsuported language
	end
	lang_name = args.lang_name or lang_name-- user provided args.lang_name takes presedent
	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', text_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.user_lang or 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
		-- <span class="plainlinks">[{{fullurl:Category:Language templates with no text displayed}} <span class="error">{{Description/i18n}}</span>]</span>
		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(args.text_lang, tostring(msg), 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_lang, args.text, args)
	end
	return desc
end

return p

--[[
Oddballs:
   
]]
Cookies help us deliver our services. By using our services, you agree to our use of cookies.