Module:Favilink: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(Add additional condition to displayimage addition to prevent string.len error with nil)
mNo edit summary
 
Line 93: Line 93:
if string.len(displayimg) > 4 then
if string.len(displayimg) > 4 then
if string.sub(displayimg, -4) == '.png' then
if string.sub(displayimg, -4) == '.png' then
     img = '[[File:' .. displayimg.. '|16px|link='..pagelink..']]'
     img = '[[File:' .. displayimg.. '|16px|link='..pagelink..'|alt=]]'
end
end
end
end

Latest revision as of 00:22, 25 July 2023

Template-info.png Documentation

!!Currently only for use for objects in the tables: ItemsTable, Food, Corpses, Characters, Locations. All possible items can be found here: Special:CargoTables/GeneralData.

Usage

Used similar to regular wikipage linking syntax. First argument takes name of the object and will pull the image from that item. This must be called using Template:Favilink.

{{favilink|Stopsvalinn}}

Stopsvalinn

Optional Parameters

You can use the following values as the second argument:

plural pluralizes the item name while preserving the color formatting.
{{favilink |antimatter cell|plural}}

antimatter cells

possessive makes the item name possessive while preserving the color formatting.
{{favilink | Q Girl | possessive}}

Q Girl's

displayname-tooltip-override makes the hover tooltip equal to the display name for items whose display name doesn't match their page name, such as cybernetics credit wedge 1¢. This is probably only needed in special locations where part of the favilink can get truncated, such as in the Character infobox's Inventory list.
{{favilink | cybernetics credit wedge 1¢ | displayname-tooltip-override}}

Compare to tooltip when this parameter is not specified:

prefix:<prefix> Prepends a prefix to the name, which can include qud text color styles.
{{favilink | mental aggregator | prefix:&ylant&Ye&Wr&Yn&yed}}

lanterned mental aggregator

suffix:<suffix> Postpends a suffix to the name, which can include qud text color styles.
{{favilink | plasma grenade | suffix:mk II}}

plasma grenade mk II

<any other value> completely overrides the name shown in the favilink to whatever argument specified.
{{favilink|torch|A &Rreally&y spicy meatball}}

A really spicy meatball


local p = {}
local h = {}
local htmlparse = require'Module:HTMLParse'
local colorparse = require'Module:ColorParse'
local util = require'Module:Favilink Utility'
local util_args = require('Module:Args Utility')

function p.favilink(frame, searchtype)

--[Getting query results...]

local name
local modifier

frame=mw.getCurrentFrame()

searchtype = searchtype or 'PlainName'
 
if frame.args ~= nil and frame.args ~= '' then
	if frame.args[1] ~= nil and frame.args[1] ~= '' then
		name = mw.text.trim(frame:preprocess(frame.args[1]))
		modifier = mw.text.trim(frame:preprocess(frame.args[2]))
	else
    	error "There is no argument specified! [[Category:pages with favilink errors]]"
	end
end

return h.main(name, searchtype, modifier)

end

function p.modulefavilink(name, searchtype, modifier)
	searchtype = searchtype or 'PlainName'
	modifier = modifier or ''
	if name ~= nil and name ~= '' then
    	return h.main(name, searchtype, modifier)
	else  
    	error "There is no argument specified! [[Category:pages with favilink errors]]"
	end
end

function h.main(name, searchtype, modifier)
	if searchtype == '_pageName' then
		name = name:gsub("'", "&#39;")
	end
	local result = util.favilink(name, searchtype)

	if result ~= nil then
		name = result['PlainName']
	else
		return '[[' .. name.. ']](favilink error!)[[Category:pages with favilink errors]]'
	end

	local pagelink = result['Page'] or name
	local displayname = result['DisplayName'] or name
	local displayimg = result['Display']

	return p.format(pagelink,
					displayname,
					displayimg,
					modifier,
					name)
end

function p.format(pagelink, displayname, displayimg, modifier, name)
	local displayname_tooltip_override = false
	local display
	local modifier = modifier or ""
	
    if modifier == '' then
		display = displayname
	elseif modifier == 'plural' then
		local displayresult = htmlparse.pluralize( {args= {html = displayname} })
		display=displayresult
	elseif modifier == 'possessive' then
		local displayresult = htmlparse.make_possessive({ args = {html = displayname} })
		display=displayresult
	elseif modifier == 'displayname-tooltip-override' then
		display = displayname
		displayname_tooltip_override = true
    elseif string.sub(modifier,1,7) == 'prefix:' then
        modifier = string.sub(modifier,8)
        display = colorparse.parse('&y'..modifier..' ')..displayname
    elseif string.sub(modifier,1,7) == 'suffix:' then
        modifier = string.sub(modifier,8)
        display = displayname..colorparse.parse(' &y'..modifier)
	else
		display = colorparse.parse('&y'..modifier)
	end

	local img = displayimg
	if displayimg ~= nil then
		if string.len(displayimg) > 4 then
			if string.sub(displayimg, -4) == '.png' then
    			img = '[[File:' .. displayimg.. '|16px|link='..pagelink..'|alt=]]'
			end
		end
	end

	local spandisplay = displayname_tooltip_override == true and '<span title="'..name..'">'..display..'</span>' or display

	local qudimage = mw.html.create('span')
		qudimage
        	:addClass('qud-image')
        	:node(mw.html.create('span') 
            	:addClass('qud-image-link-image-container')
            	:wikitext(img))
        	:node(mw.html.create('span')
            	:addClass('qud-image-link')
            	:css('color','#b1c9c3')
            	:wikitext('[['..pagelink..'|' .. spandisplay .. ']]'))
	return tostring(qudimage)
end

function p.idfavilink(frame)
	return p.favilink(frame,'ObjectID')
end

function p.pagenamefavilink(frame)
	return p.favilink(frame,'_pageName')
end

function p.favilinkformat(frame)
	return p.format(frame.args['pagelink'],
					frame.args['displayname'],
					frame.args['displayimg'], 
					frame.args['modifier'],
					frame.args['name'])
end

function p.favilinkformatinline(frame)
	local util_text = require('Module:Text Utility')
	frame=mw.getCurrentFrame()
	local argsstr = table.concat(frame.args, '')
	local args = util_text.split(argsstr, '%s*;;;%s*')
	return p.format(args[1],
					args[2],
					args[3], 
					'',
					args[4])
end
return p