Module:Favilink: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(made plainname and pagename not case sensitive anymore. hopefully this won't break stuff)
mNo edit summary
 
(46 intermediate revisions by 3 users not shown)
Line 1: Line 1:
local p = {}
local p = {}
local cargo= mw.ext.cargo
local h = {}
local htmlparse = require'Module:HTMLParse'
local htmlparse = require'Module:HTMLParse'
local colorparse = require'Module:ColorParse'
local colorparse = require'Module:ColorParse'
local util = require'Module:Favilink Utility'
local util_args = require('Module:Args Utility')


function p.favilink(frame, searchtype)
function p.favilink(frame, searchtype)
local displayname_tooltip_override = false


--[Getting query results...]
--[Getting query results...]
Line 17: Line 18:
   
   
if frame.args ~= nil and frame.args ~= '' then
if frame.args ~= nil and frame.args ~= '' then
  if frame.args[1] ~= nil and frame.args[1] ~= '' then
if frame.args[1] ~= nil and frame.args[1] ~= '' then
  name = mw.text.trim(frame:preprocess(frame.args[1]))
name = mw.text.trim(frame:preprocess(frame.args[1]))
  modifier = mw.text.trim(frame:preprocess(frame.args[2]))
modifier = mw.text.trim(frame:preprocess(frame.args[2]))
  else
else
    error "There is no argument specified! [[Category:pages with favilink errors]]"
    error "There is no argument specified! [[Category:pages with favilink errors]]"
  end
end
end
end


local wherestr = ''
return h.main(name, searchtype, modifier)


if (searchtype == 'PlainName') then
  wherestr = ' AND PlainName="' .. name:gsub("'", "\'") .. '"'
elseif (searchtype == 'ID') then
  wherestr = ' AND BINARY ObjectID="' .. name:gsub("'", "\'") .. '"'
elseif (searchtype == '_pageName') then
  wherestr = ' AND _pageName="' .. name:gsub("'", "\'") .. '"'
end
end


local result = cargo.query('GeneralData','_pageName=Page, DisplayName, Image, DisplayChar, PlainName',{where='_pageNamespace="0"' .. wherestr, default=name, limit='1'} )
function p.modulefavilink(name, searchtype, modifier)
 
searchtype = searchtype or 'PlainName'
if not next(result) then
modifier = modifier or ''
  return '[[' .. name.. ']][[Category:pages with favilink errors]]'
if name ~= nil and name ~= '' then
else
    return h.main(name, searchtype, modifier)
  name = result[1]['PlainName']
else 
    error "There is no argument specified! [[Category:pages with favilink errors]]"
end
end
end


local pagelink = result[1]['Page'] or name
function h.main(name, searchtype, modifier)
local displayname = result[1]['DisplayName'] or name
if searchtype == '_pageName' then
local image = (result[1]['Image'] ~= '' and result[1]['Image']~=nil) and result[1]['Image'] or 'None'
name = name:gsub("'", "'")
local displaychar = result[1]['DisplayChar'] or '•'
end
local result = util.favilink(name, searchtype)


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


if modifier == 'plural' then
local pagelink = result['Page'] or name
  local displayresult = htmlparse.pluralize( {args= {html = displayname} })
local displayname = result['DisplayName'] or name
  display=displayresult
local displayimg = result['Display']


elseif modifier == 'possessive' then
return p.format(pagelink,
  local displayresult = htmlparse.make_possessive({ args = {html = displayname} })
displayname,
  display=displayresult
displayimg,
 
modifier,
elseif modifier == '' then
name)
  display = displayname
 
elseif modifier == 'displayname-tooltip-override' then
  display = displayname
  displayname_tooltip_override = true
else
  display= colorparse.modulenonxmlparse('&y'..modifier)
end
end


local img
function p.format(pagelink, displayname, displayimg, modifier, name)
if (mw.title.new('File:' .. image).exists == true) then
local displayname_tooltip_override = false
  img = '[[File:' .. image .. '|16px|link='..pagelink..']]'
local display
else  
local modifier = modifier or ""
  img = displaychar
end
    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 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)


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
end


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


function p.pagenamefavilink(frame)
function p.pagenamefavilink(frame)
  return p.favilink(frame,'_pageName')
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
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
return p

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