Modul:Footnotes
Robâ
TemplateStyles' src
attribute must not be empty.
![]() | Modul panèka kaèngkobhi. Modul nèka mèlaghis kantara sè èyangghuy kelabân andhân kaca, otabâ segghut èsubstitusi'aghi. Lakaran vandalisme otabâ kaklèrowan abhâdhi pangaro dâ' andhân kaca, tor beccè'an kèni' kèngèng maparèng tompoan rajâ dâ' server, modul nèka èsabhi, èlinḍhungè otabâ è'èngkobhi sabâgiyân ḍâri sabhârâng pameccè'an. |
TemplateStyles' src
attribute must not be empty.
![]() | This Lua module is used on approximately 142.000 pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
TemplateStyles' src
attribute must not be empty.
![]() | This module depends on the following other modules: |
Implements {{sfn}}, {{harvard citation}}, and variants of those templates.
For an explanation of generated error messages and how to alter their appearance, see here.
f = {
args_default = {
bracket_left = "",
bracket_right = "",
bracket_year_left = "",
bracket_year_right = "",
postscript = "",
page = "",
pages = "",
location = "",
page_sep = ", hlm. ",
pages_sep = ", hlm. ",
ref = "",
P1 = "",
P2 = "",
P3 = "",
P4 = "",
P5 = ""
}
};
function trim( str )
if str == nil then
return nil;
end
return str:match( "^%s*(.-)%s*$");
end
function core( args )
local result;
--TODO: evaluate to make sure that the following if correctly handles the parameter set when there is no year
if args.P5 ~= "" then
result = args.P1 .. ' <i>et al</i>. ' .. args.bracket_year_left .. args.P5 ..
args.bracket_year_right;
elseif args.P4 ~= "" then
result = args.P1 .. ', ' .. args.P2 .. ' & ' .. args.P3 .. ' ' ..
args.bracket_year_left .. args.P4 .. args.bracket_year_right;
elseif args.P3 ~= "" then
result = args.P1 .. ' & ' .. args.P2 .. ' ' .. args.bracket_year_left ..
args.P3 .. args.bracket_year_right;
elseif args.P2 ~= "" then
if not args.P2:match ('%d%d%d%d') and not args.P2:match ('n%.d%.') and not args.P2:match ('nd') then
result = args.P1 .. ' & ' .. args.P2; -- for the case where the last numbered parameter is a name and not a year and not no-date
else
result = args.P1 .. ' ' .. args.bracket_year_left .. args.P2 .. args.bracket_year_right;
end
else
result = trim( args.P1 .. ' ' .. args.bracket_year_left .. args.P2 ..
args.bracket_year_right )
end
if ('.' == result:sub(-1)) and ('' == args.page) and ('' == args.pages) and ('' == args.location) then
args.postscript = ''; -- prevent double periods when date is 'n.d.'
end
if args.ref ~= 'none' then
if args.ref ~= "" then
result = "[[#" .. mw.uri.anchorEncode(args.ref) .. "|" .. result .. "]]";
else
result = "[[#CITEREF" .. mw.uri.anchorEncode(args.P1 .. args.P2 .. args.P3 .. args.P4 .. args.P5) .. "|" .. result .. "]]";
end
end
if args.page ~= "" then
result = result .. args.page_sep .. args.page;
elseif args.pages ~= "" then
result = result .. args.pages_sep .. args.pages;
end
if args.location ~= "" then
result = result .. ", " .. args.location;
end
result = args.bracket_left .. result .. args.bracket_right .. args.postscript;
return result;
end
function f.harvard_core( frame )
local args = {};
local pframe = frame:getParent();
args.bracket_left = pframe.args.BracketLeft or "";
args.bracket_right = pframe.args.BracketRight or "";
args.bracket_year_left = pframe.args.BracketYearLeft or "";
args.bracket_year_right = pframe.args.BracketYearRight or "";
args.postscript = pframe.args.Postscript or "";
if 'none' == args.postscript then
args.postscript = '';
end
args.page = pframe.args.Page or "";
args.pages = pframe.args.Pages or "";
args.location = pframe.args.Location or "";
args.page_sep = pframe.args.PageSep or "";
args.pages_sep = pframe.args.PagesSep or "";
args.ref = pframe.args.REF or "{{{REF}}}";
args.P1 = trim( pframe.args.P1 ) or "";
args.P2 = trim( pframe.args.P2 ) or "";
args.P3 = trim( pframe.args.P3 ) or "";
args.P4 = trim( pframe.args.P4 ) or "";
args.P5 = trim( pframe.args.P5 ) or "";
return core( args );
end
function f.harvard_citation( frame )
local args = f.args_default;
pframe = frame:getParent();
args.bracket_left = "(";
args.bracket_right = ")";
args.page = pframe.args.p or pframe.args.page or "";
args.pages = pframe.args.pp or pframe.args.pages or "";
args.location = pframe.args.loc or "";
args.ref = pframe.args.ref or pframe.args.Ref or "";
args.P1 = trim( pframe.args[1] ) or "";
args.P2 = trim( pframe.args[2] ) or "";
args.P3 = trim( pframe.args[3] ) or "";
args.P4 = trim( pframe.args[4] ) or "";
args.P5 = trim( pframe.args[5] ) or "";
return core( args );
end
function f.harvard_citation_no_bracket( frame )
local args = f.args_default;
pframe = frame:getParent();
args.page = pframe.args.p or pframe.args.page or "";
args.pages = pframe.args.pp or pframe.args.pages or "";
args.location = pframe.args.loc or "";
args.ref = pframe.args.ref or pframe.args.Ref or "";
args.P1 = trim( pframe.args[1] ) or "";
args.P2 = trim( pframe.args[2] ) or "";
args.P3 = trim( pframe.args[3] ) or "";
args.P4 = trim( pframe.args[4] ) or "";
args.P5 = trim( pframe.args[5] ) or "";
return core( args );
end
function f.sfn( frame )
local args = f.args_default;
for k, v in pairs( frame.args ) do -- for {{sfnp}}, override default with values provided in the #invoke:
args[k] = v;
end
pframe = frame:getParent();
args.postscript = pframe.args.postscript or pframe.args.ps or ".";
if 'none' == args.postscript then
args.postscript = '';
end
args.page = pframe.args.p or pframe.args.page or "";
args.pages = pframe.args.pp or pframe.args.pages or "";
args.location = pframe.args.loc or "";
args.ref = pframe.args.ref or pframe.args.Ref or "";
args.P1 = trim( pframe.args[1] ) or "";
args.P2 = trim( pframe.args[2] ) or "";
args.P3 = trim( pframe.args[3] ) or "";
args.P4 = trim( pframe.args[4] ) or "";
args.P5 = trim( pframe.args[5] ) or "";
local result = core( args );
local name = "FOOTNOTE" .. args.P1 .. args.P2 ..
args.P3 .. args.P4 .. args.P5 .. args.page .. args.pages .. args.location;
result = frame:extensionTag{ name = "ref", args = {name=name}, content=result };
return result;
end
return f;