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:Information

From Neodyland Wiki
Revision as of 03:39, 24 October 2018 by commons>Jarekt (Created page with '--[[ __ __ _ _ ___ __ _ _ | \/ | ___ __| |_ _| | ___ _|_ _|_ __ / _| ___ _...')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Module documentation[ create · purge ]
This documentation is transcluded from Module:Information/doc.
--[[  
  __  __           _       _        ___        __                            _   _             
 |  \/  | ___   __| |_   _| | ___ _|_ _|_ __  / _| ___  _ __ _ __ ___   __ _| |_(_) ___  _ __  
 | |\/| |/ _ \ / _` | | | | |/ _ (_)| || '_ \| |_ / _ \| '__| '_ ` _ \ / _` | __| |/ _ \| '_ \ 
 | |  | | (_) | (_| | |_| | |  __/_ | || | | |  _| (_) | |  | | | | | | (_| | |_| | (_) | | | |
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)___|_| |_|_|  \___/|_|  |_| |_| |_|\__,_|\__|_|\___/|_| |_|
                                                                                               
This module is intended to be the engine behind "Template:Information".

Please do not modify this code without applying the changes first at 
"Module:Information/sandbox" and testing at "Module:Information/testcases".

Authors and maintainers:
* User:Jarekt - original version 
]]
local ISOdate = require('Module:ISOdate')                        

-- ====================================================================
-- This function is responsible for producing HTML of a single row of the template
-- At this stage all the fields are already filed. There is either one or two fields
-- INPUTS:
-- * param - structures containing fields:
--    - tag      - I18n tag used for localization of the field name. Usually name of page in MediaWiki namespace which was imported from translatewiki.org. 
--                 Alternative is to pass already translated field name.
--    - field    - field content
--    - id       - ID tag added to HTML's <td> cell. if IDs of 2 fields ar the same than we ignore the second one
--    - wrapper  - some fields need a <span class=...> wrapper around the field content 
-- ====================================================================
local function Build_html_row(param, args)
	local field = args[param.field]
	if field=='' then field=nul; end
	if not (field or args.demo) then 
		return nil
	end
	if not param.id then -- "other fields" parameter
		return field
	end
	local tag = param.tag or 'bad'
	tag = mw.message.new( tag ):inLanguage(args.lang):plain() -- label message in args.lang language
	cell1 = string.format('<td id="%s" class="fileinfo-paramfield" lang="%s">%s</td>\n', param.id, args.lang, tag)
	local cell2 = string.format('<td>\n'.. param.wrapper ..'</td>', field or '')
	return string.format('<tr valign="top">\n%s%s\n</tr>\n\n', cell1, cell2)
end

-- ====================================================================
-- === This function is just responsible for producing HTML of the  ===
-- === template. At this stage all the fields are already filed     ===
-- ====================================================================
local function Build_html(args)
	
	-- get text direction
	local dir
	if mw.language.new( args.lang ):isRTL() then
		dir = 'rtl'
	else
		dir = 'ltr'
	end 
	
	-- files with no source will be flagged
	if (not args.source and not args.source_) and args.strict and (args.namespace==6) then
		args.nosource = mw.getCurrentFrame():expandTemplate{ title = 'Source missing' }
	end
	
	-- Permissions tag
	local tag1 = mw.message.new( "wm-license-information-permission" ):inLanguage(args.lang):plain()
	local tag2 = mw.message.new( "wm-license-information-permission-reusing-link" ):inLanguage(args.lang):plain()
	local tag3 = mw.message.new( "wm-license-information-permission-reusing-text" ):inLanguage(args.lang):plain()
	local permission_tag = string.format("%s<br /><small>([[%s|%s]])</small>", tag1, tag2, tag3)

	-- add other fields
	local params = {
		{field='author'         , id='fileinfotpl_aut'   , tag='wm-license-information-author',         wrapper='<div class="fn value">\n%s</div>'},
		{field='other_fields_1'},
		{field='date'           , id='fileinfotpl_date'  , tag='wm-license-information-date',           wrapper='%s'},
		{field='source'         , id='fileinfotpl_src'   , tag='wm-license-information-source',         wrapper='%s'}, -- source
		{field='nosource'       , id='fileinfotpl_nosrc' , tag='wm-license-information-source',         wrapper='%s'},
		{field='permission'     , id='fileinfotpl_perm'  , tag=permission_tag,                          wrapper='%s'},
		{field='other_versions' , id='fileinfotpl_ver'   , tag='wm-license-information-other-versions', wrapper='%s'}, 
		{field='other_fields'}
	}
	local results = {}
	for i=1,#params do
		table.insert(results, Build_html_row(params[i], args))
	end

	-- add table and outer layers
	local style = string.format('class="fileinfotpl-type-artwork toccolours vevent mw-content-%s" dir="%s" style="width: 100%%" cellpadding="4"', dir, dir)
	results = string.format('<table %s>\n%s\n</table>\n', style, table.concat(results))
	results = string.format('<div class="hproduct commons-file-information-table">\n%s\n</div>\n', results)
	return results
end

-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}

-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
function p._information(args)
	
	-- ====================================================
	-- === automatic tagging of pages in all namespaces === 
	-- ====================================================
	if args.date then
	    -- add an empty template which can be used as a tag in PetScan
		local d    = os.date('!*t')                   -- current date table
		local current_year  = tonumber(d.year)        -- current year
		local creation_year = tonumber(ISOdate._ISOyear(args.date))
		if creation_year and current_year and (current_year-creation_year)>200 then
			mw.getCurrentFrame():expandTemplate{ title ='Works created more than 200 years ago' }
		end
	end 
	mw.getCurrentFrame():expandTemplate{ title = 'Infobox template tag' } -- add the template tag

	return Build_html(args)
end

-- ===========================================================================
-- === Version of the function to be called from template namespace
-- ===========================================================================
function p.information(frame)
	-- switch to lowercase parameters to make them case independent
	local args = {}
	for name, value in pairs( frame:getParent().args ) do 
		if value ~= '' then -- nuke empty strings
			local name1 = string.gsub( string.lower(name), ' ', '_')
			args[name1] = value
		end
	end
	for name, value in pairs( frame.args ) do 
		if value ~= '' then -- nuke empty strings
			local name1 = string.gsub( string.lower(name), ' ', '_')
			args[name1] = value
		end
	end
	
	if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then 
		args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
	end
	
	-- call the inner "core" function
	local results, cats = p._information(args)	
	return results .. cats
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.