Content deleted Content added
positional url-access parameters |
add empty content |
||
(5 intermediate revisions by 4 users not shown) | |||
Line 5:
|article-name=: Optional alternative text to be displayed for |article-link= link in front of catalog link.
If not specified, |article-link= is used for display as well. If both parameters are not specified, the prefix is omitted completely.
|article-
|link-prefix=: Optional prefix portion of url to external catalog item(s).
|link-
|item-prefix=: Optional text displayed in front of each external link (omitted, if not defined)
|item-
|list-separator=: Optional alternative separator displayed between list items (default: ", ", if not specified). Whitespace must be encoded.
|list-leadout=: Optional alternative leadout text displayed between the last two list items (f.e. "and", "or", "as well as", etc., default is the |list-separator= or ", ".)
|leadout-
This gets added in front of the last list item instead of the default whitespace which is added without this parameter.
This may be necessary if |list-separator= is used not only to define the list separator but also parts of the item prefix
(except for the first one). (At present, this is used only to cope with format oddities of the {{MR}} template.)
new parameters that support access icons:
|allowed_icons= – comma-separated list of keywords: free, limited, registration, subscription, none, all (default; 'all' implied when this parameter empty or omitted)
the icons specified in the following parameters are checked agains the list in |allowed-icons=; not in the list? not displayed
|url-access-all= – applies specified icon to all items in the list; accepted keywords: free, limited, registration, subscription;
|url-accessn= – applies specified icon to item n of the list (the nth positional parameter); accepted keywords: free, limited, registration, subscription;
]]
require('
local getArgs = require ('Module:Arguments').getArgs;
local lock_icons = { --icon classes are defined in Module:Citation/CS1/styles.css
['free'] = {'
['registration'] = {'
['limited'] = {'
['subscription'] = {'
}
local p = {};▼
Line 38 ⟶ 43:
local function is_set( var )
return not (var
end
Line 46 ⟶ 51:
Makes a wikilinked or plain text label from arguments; when both link and display text is provided, makes a
wikilink in the form [[L|D]]; if only link is provided, makes a wikilinked label in the form [[L]]; if only display
is provided, makes a plain-text label; if neither are provided makes a label from
]=]
local function make_label (link, display,
local label = '';
if is_set (link) then
Line 63 ⟶ 68:
if is_set (label) then
return table.concat ({label,
else
return
--[[--------------------------< I C O N _ I N D E X _ G E T >--------------------------------------------------
returns index into lock_icons[] if value assigned to |url-access= or |url-access-all= is a valid icon selector
(free, limited, registration, subscription)
icon selection may be limited to a subset of the icons with:
|allow_icons=<comma-separated list of allowed icons>
<comma-separated list of allowed icons> may be any of the keywords: free, limited, registration, subscription, none, all
keyword 'all' is default condition; 'all' is implied when |allowed=icons= is empty or omitted
keyword 'none' for use with identifiers where icons are inappropriate (isbn, issn, oclc)
Templates using this module should set:
|allow_icons=free for most identifiers;
|allow_icons=none for isbn, issn, oclc, etc
|url-access= is alias of |url-access1=
]]
local function icon_index_get (args, k)
local param_name = (1 == k and is_set (args['url-access']) and 'url-access') or table.concat ({'url-access', k}); -- make an enumerated parameter name
if is_set (args['url-access-all']) and lock_icons[args['url-access-all']] then -- if set and valid
icon = args['url-access-all']; -- tentatively
elseif is_set (args[param_name]) and lock_icons[args[param_name]] then -- if set and valid
icon = args[param_name]; -- tentatively
else
return nil; -- neither |url-access-all= nor |url-accessn= set so return nil
end
if args['allow_icons'] and args['allow_icons']:find ('none') then -- if 'none' keyword is present
return nil; -- icons display not allowed
end
if not is_set (args['allow_icons']) or args['allow_icons']:find ('all') or args['allow_icons']:find (icon) then --if all allowed or specified icon is allowed
return icon; -- return selected icon as index into icon table
end
end
Line 72 ⟶ 122:
--[[--------------------------< M A I N >----------------------------------------------------------------------
Template entrypoint to this module; arguments come primarily from the parent frame though in templates that use
this module, |allowed-icons= is typically set, if needed, in the {{#invoke:}}.
]]
local function
local args = getArgs (frame);
local out_text = '';
Line 83 ⟶ 135:
local label;
local
local link_prefix = args['link-prefix'] or '';
local
local item_prefix = args['item-prefix'] or '';
local
local list_separator = args['list-separator'] or ', ';
local
local access_index;▼
local list_leadout;
if is_set (args['list-leadout']) then
list_leadout = table.concat ({
mw.ustring.
leadout_suffix,
});
else
Line 103 ⟶ 155:
end
label = make_label (args['article-link'], args['article-name'],
for k, item in ipairs (args) do -- for each of the positional parameters
item = mw.text.trim (item); -- remove extraneous whitespace
Line 112 ⟶ 164:
link_prefix, -- url prefix
mw.uri.encode (item), -- item is part of url
' ', -- required space between url and label
item_prefix, -- label prefix
item, -- item as label
']' -- close ext link markup
});
icon_index = icon_index_get (args, k); -- set if icon specified and allowed for this item; nil else
▲ end
▲ end
▲ if access_icon then
item = table.concat ({ -- add access icon markup to this item
'<span class="
lock_icons[icon_index][2], -- for an appropriate tool tip
'">', -- close the opening span tag
item,
'</span
▲ access_icon, -- the appropriate icon
▲ '</span>', -- and close the spans
});
end
Line 142 ⟶ 188:
item_prefix, -- label prefix
item, -- item as label
});
end
Line 149 ⟶ 195:
end
out_text = frame:callParserFunction('#tag', {'templatestyles', '', src=table.concat({
'Module:Citation/CS1',
mw.ustring.match(frame:getTitle(), '/sandbox$') or '',
'/styles.css',
})});
if is_set (args['list-leadout']) then
out_text = table.concat ({out_text, label, mw.text.listToText (result, list_separator, list_leadout)});
else
out_text = table.concat ({out_text, label, table.concat (result, list_separator)});
end
end --is_set (args[1])
return out_text
end
return
|