Module:Iucn

local p = {}

local data = { -- these data entries will ultimately go in data subpage or series of data subpages **NOT USED**
	iucn = {
		['_template'] = "cite journal", -- use cite journal
		['_exclude'] = "amended, url" ,  -- do not pass these to {{cite journal}}
				--_alias-map: associate {{IUCN}}-specific parameter names with cs1|2-standard parameter names
		['_alias-map'] =  "assessors : authors, vassessors : vauthors, assessor# : last#, assessor#-link : author#-link,assessor-link# : author-link#, assessorlink# : authorlink#, assessor#-mask : author#-mask, assessor-mask# : author-mask#, assessormask# : authormask#, display-assessors : display-authors, displayassessors : displayauthors, last-assessor-amp : last-author-amp, lastassessoramp : lastauthoramp, assessment_year : year, taxon : title, downloaded : access-date"
	}
}

local function getArgs (frame, args)
	local parents = mw.getCurrentFrame():getParent()

	for k,v in pairs(parents.args) do
		--check content
		if v and v ~= "" then
			args[k]=v --parents.args[k]
		end
	end
end
--[[ function p.cite() - function wrapping {{cite journal}}
     takes cite journal parameters but updates old style url using electronic page number
     page should be in format e.T13922A45199653
     the url uses                13922/45199653
     so we need to extract the number between T and A and the number after A
     the target url is https://www.iucnredlist.org/species/13922/45199653
     usage: {{#invoke:iucn|cite}}
     template: {{Template:Cite iucn}}
--]]
function p.cite(frame)
	--local parents = mw.getCurrentFrame():getParent()

	local templateArgs = {}
	getArgs (frame, templateArgs)

	--we only want to make changes if there is old-style url, i.e. one containing "/details/"
	local url = templateArgs['url'] or ""
	local old = string.find( url, "details" , 1, true)
	if old then
		local page = templateArgs['page'] or ""
		local speciesID = string.match( page, "T(%d+)A" )
		local speciesAssessment = string.match( page, "A(%d+)" )
		if speciesID  and speciesAssessment then -- set new style url
			templateArgs['url'] = "https://www.iucnredlist.org/species/" .. speciesID .. '/' .. speciesAssessment
		end
	end
	if templateArgs['amended'] then templateArgs['trans-title']=templateArgs['amended'] end -- use translated title parameter to add amended text, e.g. "amended version of 2016 assessment", which will be added in square brackets after title

	return frame:expandTemplate{ title = 'cite journal', args = templateArgs }
	--return frame:expandTemplate{ title = 'cite journal', args = parents.args }
end
-- version using template wrapper for cite journal
function p.cite2(frame)

	-- now use wrapper template

	--[[this doesn't work
    frame.args['_alias-map'] =  "assessors : authors, vassessors : vauthors, assessor# : last#, assessor#-link : author#-link,assessor-link# : author-link#, assessorlink# : authorlink#, assessor#-mask : author#-mask, assessor-mask# : author-mask#, assessormask# : authormask#, display-assessors : display-authors, displayassessors : displayauthors, last-assessor-amp : last-author-amp, lastassessoramp : lastauthoramp, assessment_year : year, taxon : title, downloaded : access-date"
    frame.args['_template'] = "cite journal"
    but the following does ]]

	local wrapperArgs ={}
	wrapperArgs['_template'] = "cite journal"
	--|_exclude=id, version, new, IUCN_Year, iucn_year, criteria-version <!-- do not pass these to {{cite journal}} -->
	wrapperArgs['_exclude'] = "amended, url" -- exclude url (from parent) as we wanted updated version
	--|_alias-map= <!-- associate {{IUCN}}-specific parameter names with cs1|2-standard parameter names -->
	wrapperArgs['_alias-map'] =  "assessors : authors, vassessors : vauthors, assessor# : last#, assessor#-link : author#-link,assessor-link# : author-link#, assessorlink# : authorlink#, assessor#-mask : author#-mask, assessor-mask# : author-mask#, assessormask# : authormask#, display-assessors : display-authors, displayassessors : displayauthors, last-assessor-amp : last-author-amp, lastassessoramp : lastauthoramp, assessment_year : year, taxon : title, downloaded : access-date"


	local templateArgs = {}   -- need a copy to alter and pass to citation template
	getArgs (frame, templateArgs)

	--we only want to make changes if there is old-style url, i.e. one containing "/details/"
	local url = templateArgs['url'] or ""
	local replace = string.find( url, "details" , 1, true)    -- replace url if contains "details"
	if url == "" and templateArgs['page'] then replace = true end -- if no url and page number available,

	if replace  then
		local page = templateArgs['page'] or ""
		local speciesID = string.match( page, "T(%d+)A" )
		local speciesAssessment = string.match( page, "A(%d+)" )
		if speciesID  and speciesAssessment then -- set new style url
			wrapperArgs['url'] = "https://www.iucnredlist.org/species/" .. speciesID .. '/' .. speciesAssessment
		end
	else
		wrapperArgs['url']=templateArgs['url']
	end
	if url == "" and templateArgs['id'] then -- use oldstyle url
		wrapperArgs['url'] = "http://oldredlist.iucnredlist.org/details/" .. templateArgs['id']
		wrapperArgs['journal'] = '[[IUCN Red List of Threatened Species]]'
		wrapperArgs['volume'] = 'Version ' .. templateArgs['version']
	end
	if templateArgs['amended'] then wrapperArgs['trans-title']=templateArgs['amended'] end -- use translated title parameter to add amended text, e.g. "amended version of 2016 assessment", which will be added in square brackets after title
	--wrapperArgs['trans-title'] = templateArgs['trans-title']

	frame.args=wrapperArgs --set the wrapper arguments

	local wrapper = require("Module:Template wrapper/sandbox")

	--local xframe = frame --mw.clone(frame)  --mw.getCurrentFrame()
	--frame.args.metatable['_template'] = "cite journal"
	--local parents = xframe:getParent() --mw.getCurrentFrame():getParent()
	--parents.args['_template'] = "cite journal"

	--mw.logObject(frame)
	--return  mw.dumpObject(wrapperArgs)
	return wrapper.wrap(frame)

end
--[[ function to replace iucn templates
     test template: Template:IUCN/sandbox/lua
     usage: {{#invoke:iucn|main}}
--]]
function p.main(frame)

	local templateArgs = {}   -- need a copy to alter and pass to citation template
	getArgs (frame, templateArgs)

--	local parents = mw.getCurrentFrame():getParent()
	local reference = ""
	local taxon =templateArgs['taxon']

	reference = '{{cite journal |title=' .. taxon
	local maxAssessors = 20
	local assessorNumber =0

	-- if 'assessor' instead of 'assessor1'
	if templateArgs['assessor'] then templateArgs['assessor1'] = templateArgs['assessor'] end
	if templateArgs['assessor-link'] then templateArgs['assessor-link1'] = templateArgs['assessor-link'] end

	while assessorNumber < maxAssessors do -- use the last number determined in the preprocessing

		assessorNumber  = assessorNumber  + 1 -- so we start with 1
		local assessorName = templateArgs['assessor'..tostring(assessorNumber)] or ""
		if assessorName ~= "" then
			reference = reference .. ' |author' .. assessorNumber .. '=' .. assessorName
		end
		local assessorLink = templateArgs['assessor-link'..tostring(assessorNumber)]
				or templateArgs['assessor'..tostring(assessorNumber)..'link']
				or templateArgs['assessorlink'..tostring(assessorNumber)]or ""
		if assessorLink ~= "" then
			reference = reference .. ' |authorlink' .. assessorNumber .. '=' .. assessorLink
		end
	end
	local year = templateArgs['year']
	local id = templateArgs['id']
	local assessment = templateArgs['assessment'] or ""
	local version = templateArgs['version']
	local doi = templateArgs['doi'] or ""
	local accessdate = templateArgs['accessdate'] or ""

	reference = reference ..
		' |year=' .. year
		" |version=''Version "..  version .. "''" ..
		' |journal=[[The IUCN Red List of Threatened Species]]' ..
		' |accessdate='.. accessdate ..
		' |doi='.. doi

	if assessment ~= "" then
		reference = reference .. '|url=https://www.iucnredlist.org/species/'.. id .. '/' .. assessment
	else  -- if there is no assessment number, use oldredlist.iucnredlist.org version
		-- an alternative might be to use archive.org in case this cite is dropped
		reference = reference .. '|url=http://oldredlist.iucnredlist.org/details/'.. id .. '/0'
	end

	reference = reference .. ' |publisher=[[International Union for Conservation of Nature]]}}'

	return frame:preprocess(reference)
	--return reference
end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.