Module:Work link

--[=[ Module description ]=]

local p = {} --p stands for package local getArgs = require( 'Module:Arguments' ).getArgs

-- bibliographic data from WD local Work = require( 'Module:Work' ) -- formatting of local BookLink = require( 'Module:Book link' )

local function valueIn( t, v ) for _, tv in pairs( t ) do		if tv == v then return true end end return false end

local function constructLink( l, v ) if not l then return '[' .. '[' .. v .. ']]'	end return '[' .. '[' .. l .. '|' .. v .. ']]' end

local function getPersonList( l, thisPage ) local ps = {} if l == nil or #l == 0 then return nil end for _, v in pairs( l ) do		local a_link = getWsSiteLink( v ) local a_text = v:getLabel if a_link ~= thisPage then table.insert(ps, {				link = a_link,				text = a_text			}) end end return ps end

local function formatPersonList( ps ) local spans = {} for _, v in pairs( ps ) do		local aspan = mw.html.create( 'span' ) :addClass( 'wst-worklink-author' ) :wikitext( constructLink( v.link, v.text ) ) table.insert( spans, tostring( aspan ) ) end return table.concat( spans, ', ' ) end

--[=[ Function docs ]=] function p.link(frame) local args = getArgs(frame) local qidOrTitle = args[1] local workObject = Work.newWork( qidOrTitle ) if workObject == nil then local cat = "[" .. "[Category:Work links with missing Wikidata items]]" return " Unable to load Wikidata item '" .. qidOrTitle .. "'. " .. cat end -- use the given param, or fallback to the current page local thisPage = args['on page'] if not thisPage then thisPage = mw.title.getCurrentTitle.prefixedText end if workObject.type == Work.TYPES.EDITION then -- edition -> FRBR edition -- Translate "pure" Work data into the arguments to a BookLink args = { -- if the page doesn't exist, assume it'll be the title title = workObject.wsPage or workObject.title, display = workObject.title, year = workObject.pubYear, authors = workObject.author, editors = workObject.editor, translators = workObject.translator, illustrators = workObject.illustrator, classes = { 'wst-worklink-frbr-edition' } }		local res = BookLink.renderLink(args) :attr( 'data-wikidata-id', workObject.item.id ) return tostring(res) elseif workObject.type == Work.TYPES.ARTICLE then return 'article' -- 	-- some kind of paper or article -- 	local link = getWsSiteLink( item ) -- 	local title = getLocalStringProp( item, PROPS.title ) -- 	local periodicalQid = getPropIds( item, PROPS.publishedIn )[ 1 ] -- 	local periodical = mw.wikibase.getEntity( periodicalQid ) -- 	local p_link = getWsSiteLink( periodical ) -- 	local p_disp = periodical:getLabel -- 	if not p_link then -- 		p_link = p_disp -- 	end -- 	local authors = getPropEntities( item, PROPS.author ) -- 	local al_args = { -- 		periodical = p_link, -- 		display_periodical = p_disp, -- 		author = formatPersonList( getPersonList( authors, thisPage ) ) -- 	}	-- 	local volume = getStringProp( item, PROPS.volume ) -- 	if volume then -- 		al_args.volume = volume -- 	end -- 	local issue = getStringProp( item, PROPS.issue ) -- 	if issue then -- 		al_args.issue = issue -- 	end -- 	local pages = getStringProp( item, PROPS.pages ) -- 	if pages then -- 		local parts = mw.text.split( pages, '-' ) -- 		if #parts == 1 then -- 			al_args.p = pages -- 		else -- 			al_args.p = parts[1] -- 			al_args.pp = parts[2] -- 		end -- 	end -- 	if link then -- 		-- don't bother with all the guessing -- 		al_args.direct_link = link -- 	else -- 		al_args.article = title -- 	end -- 	-- mw.logObject( al_args ) -- 	return frame:expandTemplate{ title = 'article link', args = al_args } else -- we just assume this is some kind of generic work -- edition -> FRBR work -- Translate "pure" Work data into the arguments to a BookLink args = { -- if the page doesn't exist, assume it'll be the title title = workObject.wsPage or workObject.title, display = workObject.title, year = workObject.pubYear, authors = workObject.author, editors = workObject.editor, translators = workObject.translator, illustrators = workObject.illustrator, classes = { 'wst-worklink-frbr-work' } }		local res = BookLink.renderLink(args) :attr( 'data-wikidata-id', workObject.item.id ) local cat = "[" .. "[Category:Work links with Wikidata items that look like FRBR works]]" return tostring(res) .. cat end

return '' end

return p