Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Usage from wikitext  





2 Usage from Lua modules  














Module:Clickable button 2






Afrikaans

Аԥсшәа
العربية
Արեւմտահայերէն

Asturianu
Авар
Azərbaycanca
تۆرکجه
Basa Bali

 / Bân-lâm-gú
Башҡортса
Беларуская
Беларуская (тарашкевіца)

Bikol Central
Български
Bosanski
Dansk
الدارجة
Español
فارسی
Føroyskt
Français
Galego
  / Gõychi Konknni

Հայերեն
ि
Hrvatski
Bahasa Hulontalo
Ilokano
Bahasa Indonesia
Italiano
עברית
Jawa

Қазақша
Kurdî
Ladin

Latviešu
Lietuvių
ि
Македонски


مصرى

Bahasa Melayu
 / Mìng-dĕ̤ng-nḡ

Nederlands


Nordfriisk
Norsk bokmål
Occitan
Oʻzbekcha / ўзбекча


Papiamentu
پښتو

Polski
Português
Qaraqalpaqsha
Română
Русский

Scots

Simple English
سنڌي
Slovenščina
کوردی
Српски / srpski
Srpskohrvatski / српскохрватски
Suomi
Svenska
ி
 

Тоҷикӣ
Türkçe
Українська
اردو
Tiếng Vit
Volapük

Winaray



 

Edit links
 









Module
Talk
 

















Read
View source
View history
 








Tools
   


Actions  



Read
View source
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




In other projects  



Wikimedia Commons
MediaWiki
Meta-Wiki
Wikispecies
Wikibooks
Wikidata
Wikimania
Wikinews
Wikiquote
Wikisource
Wikiversity
Wikivoyage
Wiktionary
 
















Appearance
   

 





Permanently protected module

From Wikipedia, the free encyclopedia
 


This module implements the {{Clickable button}} template.

Usage from wikitext

To use this module from wikitext, you should normally use the {{Clickable button}} template. However, it can also be used with the syntax {{#invoke:Clickable button 2|main|args}}. Please see the template page for a list of available parameters.

Usage from Lua modules

To use this module from other Lua modules, first load the module.

local mClickableButton = require('Module:Clickable button')

You can then generate a button using the main function.

mClickableButton.main(args)

The args variable should be a table containing the arguments to pass to the module. To see the different arguments that can be specified and how they affect the module output, please refer to the {{Clickable button}} template documentation.

-- This module implements {{clickable button 2}}.

local yesno = require('Module:Yesno')
local delink = require('Module:Delink')._delink

local p = {}

function p.main(frame)
 local getArgs = require('Module:Arguments').getArgs
 local args = getArgs(frame)
 return p._main(args)
end

function p._main(args)
 -- If first arg or a url is not provided,
 -- but we have a second arg, make a button.
 -- Otherwise, return nothing.
 args.originalInput = args[1]
 args[1] = delink({args[1]})
 if args[1] == "" then
  args[1] = nil
 end

 if not args[1] and not args.url then
  if args[2] then
   p.nolink = true
  else
   return ''
  end
 end

 local data = p.makeLinkData(args)
 local link = p.renderLink(args.originalInput, data)
 local trackingCategories = p.renderTrackingCategories(args)
 return link .. trackingCategories
end

function p.makeLinkData(args)
 local data = {}

 -- Get the link and display values,
 -- and find whether we are outputting
 -- a wikilink or a URL.
 if args.url then
  data.isUrl = true
  data.link = args.url
  if args[1] then
   data.display = args[1]
  elseif args[2] then
   data.display = args[2]
  else
   data.display = args.url
   p.urlisdisplay = true
  end
 else
  data.isUrl = false
  p.urlisdisplay = false
  data.link = args[1]
  if args[2] then
   data.display = args[2]
  else
   data.display = args[1]
  end
  if args[1] and args[1]:find('http') then
   data.isUrl = true
  end
 end
 
 if yesno(args.link) == false then
  p.nolink = true
 end

 -- Colours
 -- For the merge with {{clickable button}}
 local colour = args.color and args.color:lower()

 -- Classes
 local class = args.class and args.class:lower()
 data.classes = {}
 if class == 'ui-button-green'
  or class == 'ui-button-blue'
  or class == 'ui-button-red'
 then
  table.insert(
   data.classes,
   'submit ui-button ui-widget ui-state-default ui-corner-all'
    .. ' ui-button-text-only ui-button-text'
  )
 else
  table.insert(data.classes, 'mw-ui-button')
 end
 
 --If class is unset,
 --then let color determine class
 if not class then
  if colour == 'blue' then
   class = 'mw-ui-progressive'
  elseif colour == 'red' then
   class = 'mw-ui-destructive'
  elseif colour == 'green' then
   class = 'mw-ui-constructive'
  end
 end
 
 if class then
  table.insert(data.classes, class)
 end

 -- Styles
 do
  --[[
  -- Check whether we are on the same page as we have specified in
  -- args[1], but not if we are using a URL link, as then args[1] is only
  -- a display value. If we are currently on the page specified in
  -- args[1] make the button colour darker so that it stands out from
  -- other buttons on the page.
  --]]
  local success, linkTitle, currentTitle
  if not data.isUrl then
   currentTitle = mw.title.getCurrentTitle()
   success, linkTitle = pcall(mw.title.new, args[1])
  elseif p.urlisdisplay then
   currentTitle = mw.title.getCurrentTitle()
  end
  if success
   and linkTitle
   and mw.title.equals(currentTitle, linkTitle)
   and not p.urlisdisplay
  then
   if class == 'ui-button-blue'
    or class == 'mw-ui-progressive'
    or class == 'mw-ui-constructive'
   then
    data.backgroundColor = '#2962CB'
    data.color = '#fff'
   elseif class == 'ui-button-green' then
    data.backgroundColor = '#008B6D'
   elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then
    data.backgroundColor = '#A6170F'
   else
    data.backgroundColor = '#CCC'
    data.color = '#666'
   end
  elseif p.urlisdisplay then
   data.dummyLink = tostring(currentTitle)
  end
  -- Add user-specified styles.
  data.style = args.style
 end
 return data
end

function p.renderLink(originalInput, data)
 -- Render the display span tag.
 local display
 do
  local displaySpan = mw.html.create('span')
  for i, class in ipairs(data.classes or {}) do
   displaySpan:addClass(class)
  end

  displaySpan
   :css{
    ['background-color'] = data.backgroundColor,
    color = data.color
   }
  if data.style then
   displaySpan:cssText(data.style)
  end
  displaySpan:wikitext(data.display)
  display = tostring(displaySpan)
 end

 -- Render the link
 local link
 if originalInput and originalInput:find('|') then
  link = string.format('[[%s|%s]]', delink({originalInput, wikilinks = 'target'}), display)
 elseif p.nolink then
  if p.urlisdisplay then
   link = string.format('[[%s|%s]]', data.dummyLink, display)
  else
   link = string.format('%s', display)
  end
 else
  if data.isUrl then
   link = string.format('[%s %s]', data.link, display)
  else
   link = string.format('[[%s |%s]]', data.link, display)
  end
 end

 return string.format('<span class="plainlinks clickbutton">%s</span>', link)
end

function p.renderTrackingCategories(args)
 if yesno(args.category) == false then
  return ''
 end
 local class = args.class and args.class:lower()
 if class == 'ui-button-green'
  or class == 'ui-button-blue'
  or class == 'ui-button-red'
 then
  return '[[Category:Pages using old style ui-button-color]]'
 else
  return ''
 end
end

return p

Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:Clickable_button_2&oldid=1209820386"

Category: 
Modules subject to page protection
Hidden category: 
Wikipedia fully protected modules
 



This page was last edited on 23 February 2024, at 18:36 (UTC).

Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



Privacy policy

About Wikipedia

Disclaimers

Contact Wikipedia

Code of Conduct

Developers

Statistics

Cookie statement

Mobile view



Wikimedia Foundation
Powered by MediaWiki