Jump to content
Wikipedia The Free Encyclopedia

Module:Catalog lookup link

From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
Warning This Lua module is used on approximately 56,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them.
This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing.
Page template-protected This module is currently protected from editing.
See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected.
This module depends on the following other modules:

Provides the backend for {{Catalog lookup link }}.

Usage

{{#invoke:Catalog lookup link|main}}

The above documentation is transcluded from Module:Catalog lookup link/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Subpages of this module.

 --[[
 |1=, |2=, |3=, |4=, |5=, |6=, |7=, |8=, |9=: Optional unnamed parameters for 0 to 9 items to be listed.
 	Whitespace is trimmed off both ends and the strings are urlencoded as if they were query strings.
 |article-link=: Optional Wikipedia article name to link to.
 |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-suffix=: Optional symbol to be displayed after article name or link (f.e. ":"; omitted, if not defined).
 |link-prefix=: Optional prefix portion of url to external catalog item(s).
 |link-suffix=: Optional suffix portion of url to external catalog item(s).
 |item-prefix=: Optional text displayed in front of each external link (omitted, if not defined)
 |item-suffix=: Optional text displayed immediately after each external link (omitted, if not defined)
 |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-suffix=: Optional alternative suffix text of the leadout (see |list-leadout=) displayed between the last two list items.
 	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('strict');
 localgetArgs=require('Module:Arguments').getArgs;
 locallock_icons={--icon classes are defined in Module:Citation/CS1/styles.css
 ['free']={'id-lock-free','Freely accessible'},
 ['registration']={'id-lock-registration','Free registration required'},
 ['limited']={'id-lock-limited','Free access subject to limited trial, subscription normally required'},
 ['subscription']={'id-lock-subscription','Paid subscription required'},
 }


 --[[--------------------------< I S _ S E T >------------------------------------------------------------------

 Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.

 ]]

 localfunctionis_set(var)
 returnnot(var==nilorvar=='');
 end


 --[=[-------------------------< M A K E _ L A B E L >----------------------------------------------------------

 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 suffix, returns an empty string else.

 ]=]

 localfunctionmake_label(link,display,suffix)
 locallabel='';
 ifis_set(link)then
 ifis_set(display)then
 label=table.concat({'[[',link,'|',display,']]'});-- make [[L|D]] wikilinked label
 else
 label=table.concat({'[[',link,']]'});-- make [[L]] wikilinked label
 end
 elseifis_set(display)then
 label=display;-- plain-text label
 end

 ifis_set(label)then
 returntable.concat({label,suffix,'&nbsp;'});-- assemble the complete label
 else
 returnsuffix;-- no space after suffix if no label
 end
 end


 --[[--------------------------< 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=

 ]]

 localfunctionicon_index_get(args,k)
 localicon;
 localparam_name=(1==kandis_set(args['url-access'])and'url-access')ortable.concat({'url-access',k});-- make an enumerated parameter name

 ifis_set(args['url-access-all'])andlock_icons[args['url-access-all']]then-- if set and valid
 icon=args['url-access-all'];-- tentatively 

 elseifis_set(args[param_name])andlock_icons[args[param_name]]then-- if set and valid
 icon=args[param_name];-- tentatively

 else
 returnnil;-- neither |url-access-all= nor |url-accessn= set so return nil
 end

 ifargs['allow_icons']andargs['allow_icons']:find('none')then-- if 'none' keyword is present
 returnnil;-- icons display not allowed
 end

 ifnotis_set(args['allow_icons'])orargs['allow_icons']:find('all')orargs['allow_icons']:find(icon)then--if all allowed or specified icon is allowed
 returnicon;-- return selected icon as index into icon table
 end
 end


 --[[--------------------------< 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:}}.

 ]]

 localfunction_main(args,frame)
 ifnotframethen
 frame=mw.getCurrentFrame();
 end

 localout_text='';

 ifis_set(args[1])then
 localresult={};
 locallabel;

 localarticle_suffix=args['article-suffix']orargs['article-postfix']or'';
 locallink_prefix=args['link-prefix']or'';
 locallink_suffix=args['link-suffix']orargs['link-postfix']or'';
 localitem_prefix=args['item-prefix']or'';
 localitem_suffix=args['item-suffix']orargs['item-postfix']or'';
 locallist_separator=args['list-separator']or', ';
 localleadout_suffix=args['leadout-suffix']orargs['leadout-postfix']or' ';
 locallist_leadout;

 localicon_index;

 ifis_set(args['list-leadout'])then
 list_leadout=table.concat({
 mw.ustring.gsub(args['list-leadout'],'^(%a)',' %1'),-- insert leading space if first character is a letter
 leadout_suffix,
 });
 else
 list_leadout='';
 end

 label=make_label(args['article-link'],args['article-name'],article_suffix);

 fork,iteminipairs(args)do-- for each of the positional parameters
 item=mw.text.trim(item);-- remove extraneous whitespace
 ifis_set(link_prefix)then-- if there is link prefix...
 item=table.concat({-- create an external link item
 '[',-- open ext link markup
 link_prefix,-- url prefix
 mw.uri.encode(item),-- item is part of url
 link_suffix,-- url suffix
 ' ',-- required space between url and label
 item_prefix,-- label prefix
 item,-- item as label
 item_suffix,-- item suffix
 ']'-- close ext link markup
 });

 icon_index=icon_index_get(args,k);-- set if icon specified and allowed for this item; nil else
 ificon_indexthen
 item=table.concat({-- add access icon markup to this item
 '<span class="',-- open the opening span tag; icon classes are defined in Module:Citation/CS1/styles.css
 lock_icons[icon_index][1],-- add the appropriate lock icon class
 '" title="',-- and the title attribute
 lock_icons[icon_index][2],-- for an appropriate tool tip
 '">',-- close the opening span tag
 item,
 '</span>',-- and close the span
 });
 end
 else
 item=table.concat({-- create an unlinked item
 item_prefix,-- label prefix
 item,-- item as label
 item_suffix,-- item suffix
 });
 end

 table.insert(result,item);-- add the item to the result list
 end

 out_text=frame:callParserFunction('#tag',{'templatestyles','',src=table.concat({
 'Module:Citation/CS1',
 mw.ustring.match(frame:getTitle(),'/sandbox$')or'',
 '/styles.css',
 })});
 ifis_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])

 returnout_text
 end

 localfunctionmain(frame)
 localargs=getArgs(frame);
 return_main(args,frame)
 end

 return{main=main,_main=_main};

AltStyle によって変換されたページ (->オリジナル) /