Module:Favilink: Difference between revisions

1,015 bytes added ,  00:22, 25 July 2023
m
no edit summary
(split main favilink to its own main function that cannot be individually called, added modulefavilink that allows direct calling that does not require frame usage)
mNo edit summary
 
(40 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'
Line 18: 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


return main(name, searchtype, modifier)
return h.main(name, searchtype, modifier)


end
end


function p.modulefavilink(name, searchtype, modifier)
function p.modulefavilink(name, searchtype, modifier)
  searchtype = searchtype or 'PlainName'
searchtype = searchtype or 'PlainName'
  modifier = modifier or ''
modifier = modifier or ''
  if name ~= nil and name ~= '' then
if name ~= nil and name ~= '' then
    return main(name, searchtype, modifier)
    return h.main(name, searchtype, modifier)
  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


function main(name, searchtype, modifier)
function h.main(name, searchtype, modifier)
local displayname_tooltip_override = false
if searchtype == '_pageName' then
  local result = util.favilink(name, searchtype)
name = name:gsub("'", "'")
end
local result = util.favilink(name, searchtype)


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


local pagelink = result[1]['Page'] or name
local pagelink = result['Page'] or name
local displayname = result[1]['DisplayName'] or name
local displayname = result['DisplayName'] or name
local image = (result[1]['Image'] ~= '' and result[1]['Image']~=nil) and result[1]['Image'] or 'None'
local displayimg = result['Display']
local displaychar = result[1]['DisplayChar'] or '•'


--[Setting display name modifiers...]
return p.format(pagelink,
local display
displayname,
displayimg,
modifier,
name)
end


if modifier == 'plural' then
function p.format(pagelink, displayname, displayimg, modifier, name)
  local displayresult = htmlparse.pluralize( {args= {html = displayname} })
local displayname_tooltip_override = false
  display=displayresult
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


elseif modifier == 'possessive' then
local img = displayimg
  local displayresult = htmlparse.make_possessive({ args = {html = displayname} })
if displayimg ~= nil then
  display=displayresult
if string.len(displayimg) > 4 then
if string.sub(displayimg, -4) == '.png' then
    img = '[[File:' .. displayimg.. '|16px|link='..pagelink..'|alt=]]'
end
end
end


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


elseif modifier == 'displayname-tooltip-override' then
local qudimage = mw.html.create('span')
  display = displayname
qudimage
  displayname_tooltip_override = true
        :addClass('qud-image')
else
        :node(mw.html.create('span')
  display= colorparse.parse('&y'..modifier)
            :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


local img
function p.idfavilink(frame)
if (mw.title.new('File:' .. image).exists == true) then
return p.favilink(frame,'ObjectID')
  img = '[[File:' .. image .. '|16px|link='..pagelink..']]'
else
  img = displaychar
end
end


 
function p.pagenamefavilink(frame)
local spandisplay = displayname_tooltip_override == true and '<span title="'..name..'">'..display..'</span>' or display
return p.favilink(frame,'_pageName')
 
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.favilinkformat(frame)
  return p.favilink(frame,'ObjectID')
return p.format(frame.args['pagelink'],
frame.args['displayname'],
frame.args['displayimg'],
frame.args['modifier'],
frame.args['name'])
end
end


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