Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/Matroc/Listing
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} -- This is a LEARNING test of the listing template found in Wikivoyage -- Converted this from ParserFunction/template coding to a LUA MODULE - A HEADACHE INDEED! -- Template listing can stand alone or be called from other (see, do, buy, eat, drink, sleep) templates -- The other calling templates do not seem to need to be changed -- The field order is apparently the same for all - Parameters are named parameters with exception of {{{1|}} -- Built this using functions to give a little more flexibility to be able to handle changes in design, order etc. function p.listing ( frame ) local text = "" local type = frame.args[1] or "listing" -- listing will be the DEFAULT local name = frame.args[2] or "" local alt = frame.args[3] or "" local url = frame.args[4] or "" local email = frame.args[5] or "" local address = frame.args[6] or "" local lat = frame.args[7] or "" local long = frame.args[8] or "" local directions = frame.args[9] or "" local phone = frame.args[10] or "" local tollfree = frame.args[11] or "" local fax = frame.args[12] or "" local hours = frame.args[13] or "" local price = frame.args[14] or "" local checkin = frame.args[15] or "" local checkout = frame.args[16] or "" local content = frame.args[17] or "" local one = frame.args[18] or "" local islatin = "" local latcheck = "" local longcheck = "" -- *** MINOR GENERAL ERROR CHECKING AND FIXES *** -- NAME - check to see if REQUIRED name if name == "" then error("'NAME is a required field!'") end -- END IF -- URL .. if does not begin with "http" or "https" then add "http://" to url ... NOT KNOWN if others are to be used such as image, file etc. if url ~= "" then if mw.ustring.find(url,"^http://") == nil and mw.ustring.find(url,"^https://") == nil then url = "http://" .. url -- add default of "http:// end end -- END IF -- LAT and LONG FIX attempt at some format check - (lat and long should have the same number of decimal places) -- lat and long are not required - one can exist without the other; the following is a pad for the lat and long -- based upon the notion that the numbers are nnn.nnnn this may be an incorrect assumption and limited - comment out if incorrect if lat ~= "" and long ~= "" then if mw.ustring.find(lat,"%.") ~= nil and mw.ustring.find(long,"%.") ~= nil then latcheck = mw.ustring.gsub(lat,"^(.*)%.","") longcheck = mw.ustring.gsub(long,"^(.*)%.","") if #latcheck > #longcheck then long = long .. mw.ustring.rep("0", #latcheck - #longcheck) elseif #longcheck > #latcheck then lat = lat .. mw.ustring.rep("0", #longcheck - #latcheck) end end end -- END IF -- NOTE - THIS IS A FIX -- Odd issue with way the last numbered parameter coded in certain templates if one ~= "" then one = mw.ustring.gsub(one,"\n","") end -- END IF -- END MINOR ERROR Checks -- *** PROCESS THE GIVEN DATA INFORMATION BASED ON TYPE AT MOMENT (listing,see,do,buy,eat,drink and sleep) *** -- *** HERE YOU CAN ADD OR CHANGE THINGS AROUND BASED UPON "TYPE" *** if type == "listing" or type == "see" or type == "do" or type == "buy" or type == "eat" or type == "drink" or type == "sleep" then text = proc_urlname(url,name,text) text = proc_alt(alt,islatincheck,text) text = proc_address(address,name,url,text) text = proc_directions(directions,text) text = proc_phone(phone,name,url,address,directions,text) text = proc_tollfree(tollfree,name,url,address,directions,phone,text) text = proc_fax(fax,name,url,address,directions,phone,tollfree,text) text = proc_email(email,name,url,address,directions,phone,tollfree,fax,text) text = proc_latlong(lat,long,text) text = proc_hours(hours,text) text = proc_checkinout(checkin,checkout,text) text = proc_content(content,one,text) text = proc_price(price,text) elseif type == "SAMPLE" then -- This ELSEIF IS JUST A SIMPLE EXAMPLE OF DIFFERENT OUTPUT text = proc_urlname(url,name,text) text = proc_alt(alt,islatincheck,text) text = proc_content(content,one,text) else error("types allowed are listing,see,do,buy,eat,drink or sleep... !") end -- **************************ENDING THE LISTING FUNCTION******************************* text = "<span class=\"vcard\">" .. text .. "</span>" return text end -- **************************END OF THE LISTING FUNCTION ******************************* -- ****************************FUNCTIONS FOR PROCESSING********************************* -- *** Here you can edit or add new functions based upon design / order *** -- Name & URL function proc_urlname(url,name,text) if url ~= "" and name ~= "" then text = text .. "'''[" .. url .. "<span class=\"fn org listing-name\">" .. name .. "</span>]'''" elseif name ~= "" then text = text .. "'''<span class=\"fn org listing-name\">" .. name .. "</span>'''" elseif url ~= "" then text = text .. "'''[" .. url .. "]'''" end -- END IF return text end -- Alt function proc_alt(alt,islatincheck,text) if alt ~= "" then islatincheck = isLatin(alt) if islatincheck == "yes" then text = text .. " (''<span class=\"nickname listing-alt\">" .. alt .. "</span>'')" else text = text .. " (<span class=\"nickname listing-alt\">" .. alt .. "</span>)" end end -- END IF return text end -- Address function proc_address(address,name,url,text) if address ~= "" then if url ~= "" or name ~= "" then text = text .. ", " .. "<span class=\"label listing-address\">" .. address .. "</span>" else text = text .. "<span class=\"label listing-address\">" .. address .. "</span>" end end -- END IF return text end -- Directions function proc_directions(directions,text) if directions ~= "" then text = text .. " (''<span class=\"listing-directions\">" .. directions .. "</span>'')" end -- END IF return text end -- Phone function proc_phone(phone,name,url,address,directions,text) if phone ~= "" then if name ~= "" or url ~= "" or address ~= "" or directions ~= "" then text = text .. ", <abbr title=\"phone\">β</abbr> <span class=\"tel listing-phone\">" .. phone .. "</span>" else text = text .. "<abbr title=\"phone\">β</abbr> <span class=\"tel listing-phone\">" .. phone .. "</span>" end -- END IF end -- END IF return text end -- Tollfree function proc_tollfree(tollfree,name,url,address,directions,phone,text) if tollfree ~= "" then if name ~= "" or url ~= "" or address ~= "" or directions ~= "" or phone ~= "" then text = text .. ", toll-free: <span class=\"tel listing-tollfree\">" .. tollfree .. "</span>" else text = text .. "toll-free: <span class=\"tel listing-tollfree\">" .. tollfree .. "</span>" end -- END IF end -- END IF return text end -- Fax function proc_fax(fax,name,url,address,directions,phone,tollfree,text) if fax ~= "" then if name ~= "" or url ~= "" or address ~= "" or directions ~= "" or phone ~= "" or tollfree ~= "" then text = text .. ", <span class=\"tel\"><span class=\"type\">fax</span>: <span class=\"value listing-fax\">" .. fax .. "</span></span>" else text = text .. "<span class=\"tel\"><span class=\"type\"></span>: <span class=\"value listing-fax\">" .. fax .. "</span></span>" end -- END IF end -- END IF return text end -- E-mail function proc_email(email,name,url,address,directions,phone,tollfree,fax,text) if email ~= "" then if name ~= "" or url ~= "" or address ~= "" or directions ~= "" or phone ~= "" or tollfree ~= "" or fax ~= "" then text = text .. ", e-mail: <span class=\"email listing-email\">[mailto:" .. email .. " " .. email .. "]</span>" else text = text .. "e-mail: <span class=\"email listing-email\">[mailto:" .. email .. " " .. email .. "]</span>" end -- END IF end -- END IF return text end -- Lat/Long co-ordinates function proc_latlong(lat,long,text) if lat ~= "" or long ~= "" then text = text .. "<span class=\"noprint listing-coordinates\"> <abbr class=\"geo\" title=\"" .. lat .. ";" .. long .. "\">[[File:Map mag16.png|14px|link=special:mapsources/\"" .. lat .. "," .. long .. "]]</abbr></span>" end -- END IF return text end -- Hours function proc_hours(hours,text) if hours ~= "" then text = text .. " <span class=\"note listing-hours\">" .. hours .. "</span>." end -- END IF return text end -- Checkin and checkout function proc_checkinout(checkin,checkout,text) if checkin ~= "" and checkout ~= "" then text = text .. " <span class=\"note\">Check-in: <span class=\"listing-checkin\">" .. checkin .. "</span>, check-out: <span class=\"listing-checkout\">" .. checkout .. "</span></span>." elseif checkin ~= "" then text = text .. " <span class=\"note\">Check-in: <span class=\"listing-checkin\">" .. checkin .. "</span></span>." elseif checkout ~= "" then text = text .. " <span class=\"note\">Check-out: <span class=\"listing-checkout\">" .. checkout .. "</span></span>." end -- END IF return text end -- General listing content - alternative is {{{1|}}} function proc_content(content,one,text) if content ~= "" then text = text .. "<span class=\"note listing-content\">" .. content .. "</span>" elseif one ~= "" then text = text .. " <span class=\"note listing-content\">" .. one .. "</span>" end -- END IF return text end -- Price function proc_price(price,text) if price ~= "" then text = text .. " <span class=\"note listing-price\">" .. price .. "</span>" end -- END IF return text end -- Function to check for non-Latin/Latin characters function isLatin ( xyz ) -- from WOSlinker - Module:IsLatin - http://en.wikipedia.org/wiki/User:WOSlinker if xyz == '' then return ''; end len = mw.ustring.len(xyz); pos = 1; charval = "" while ( pos <= len ) do charval = mw.ustring.codepoint(mw.ustring.sub(xyz, pos)) -- note 8364 is the β¬ symbol if charval>687 and charval~=8364 then return "no"; end pos = pos + 1; end return "yes"; end -- **************************END OF MODULE RETURN RESULT******************************* return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Sandbox/Matroc/Listing/doc
(
edit
)