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
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 with only 3 inputs
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, so that it does not break the current paragraph (that makes possible to put several  
      * inline - Optional, default is false. When set to true, forces the template to be displayed  
descriptions side by side on a single line)
            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 wordsep  = mw.message.new( "Word-separator" ):inLanguage(disp_lang):plain() -- space
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('<b>' .. lang_name ..':</b>')
: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) .. wordsep .. text)
:wikitext(tostring(ltag) .. space .. text)
return tostring(dtag)
return tostring(dtag)
end
end

Revision as of 03:30, 2 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 - 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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.