| Line 13: |
Line 13: |
| | ]] | | ]] |
| | | | |
| − | local cfg; -- table of tables imported from slected Module:Citation/CS1/Configuration | + | local cfg; -- table of tables imported from selected Module:Citation/CS1/Configuration |
| | | | |
| | | | |
| Line 19: |
Line 19: |
| | | | |
| | Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. | | Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. |
| − | This function is global because it is called from both this module and from Date validation
| |
| | | | |
| | ]] | | ]] |
| | + | |
| | local function is_set( var ) | | local function is_set( var ) |
| | return not (var == nil or var == ''); | | return not (var == nil or var == ''); |
| Line 62: |
Line 62: |
| | | | |
| | ]] | | ]] |
| | + | |
| | local function error_comment( content, hidden ) | | local function error_comment( content, hidden ) |
| | return substitute( hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content ); | | return substitute( hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content ); |
| | + | end |
| | + | |
| | + | |
| | + | --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- |
| | + | |
| | + | Makes a wikilink; when bot link and display text is provided, returns a wikilink in the form [[L|D]]; if only |
| | + | link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an |
| | + | empty string. |
| | + | |
| | + | ]=] |
| | + | |
| | + | local function make_wikilink (link, display) |
| | + | if is_set (link) then |
| | + | if is_set (display) then |
| | + | return table.concat ({'[[', link, '|', display, ']]'}); |
| | + | else |
| | + | return table.concat ({'[[', link, ']]'}); |
| | + | end |
| | + | else |
| | + | return ''; |
| | + | end |
| | end | | end |
| | | | |
| Line 73: |
Line 95: |
| | | | |
| | ]] | | ]] |
| | + | |
| | local function set_error( error_id, arguments, raw, prefix, suffix ) | | local function set_error( error_id, arguments, raw, prefix, suffix ) |
| | local error_state = cfg.error_conditions[ error_id ]; | | local error_state = cfg.error_conditions[ error_id ]; |
| Line 80: |
Line 103: |
| | | | |
| | if error_state == nil then | | if error_state == nil then |
| − | error( cfg.messages['undefined_error'] ); | + | error( cfg.messages['undefined_error'] ); -- because missing error handler in Module:Citation/CS1/Configuration |
| | elseif is_set( error_state.category ) then | | elseif is_set( error_state.category ) then |
| | table.insert( z.error_categories, error_state.category ); | | table.insert( z.error_categories, error_state.category ); |
| Line 86: |
Line 109: |
| | | | |
| | local message = substitute( error_state.message, arguments ); | | local message = substitute( error_state.message, arguments ); |
| − | | + | |
| − | message = message .. " ([[" .. cfg.messages['help page link'] .. | + | message = table.concat ( |
| − | "#" .. error_state.anchor .. "|" ..
| + | { |
| − | cfg.messages['help page label'] .. "]])";
| + | message, |
| | + | ' (', |
| | + | make_wikilink ( |
| | + | table.concat ( |
| | + | { |
| | + | cfg.messages['help page link'], |
| | + | '#', |
| | + | error_state.anchor |
| | + | }), |
| | + | cfg.messages['help page label']), |
| | + | ')' |
| | + | }); |
| | + | |
| | + | -- message = table.concat ({message, ' (', substitute (cfg.presentation['wikilink'], |
| | + | -- {cfg.messages['help page link'] .. '#' .. error_state.anchor, cfg.messages['help page label']}), ')'}); |
| | + | -- message = message .. " ([[" .. cfg.messages['help page link'] .. |
| | + | -- "#" .. error_state.anchor .. "|" .. |
| | + | -- cfg.messages['help page label'] .. "]])"; |
| | | | |
| | z.error_ids[ error_id ] = true; | | z.error_ids[ error_id ] = true; |
| Line 266: |
Line 306: |
| | | | |
| | Gets the display text from a wikilink like [[A|B]] or [[B]] gives B | | Gets the display text from a wikilink like [[A|B]] or [[B]] gives B |
| | + | |
| | + | The str:gsub() returns either A|B froma [[A|B]] or B from [[B]] or B from B (no wikilink markup). |
| | + | |
| | + | In l(), l:gsub() removes the link and pipe (if they exist); the second :gsub() trims white space from the label |
| | + | if str was wrapped in wikilink markup. Presumably, this is because without wikimarkup in str, there is no match |
| | + | in the initial gsub, the replacement function l() doesn't get called. |
| | | | |
| | ]=] | | ]=] |
| Line 273: |
Line 319: |
| | return l:gsub( "^[^|]*|(.*)$", "%1" ):gsub("^%s*(.-)%s*$", "%1"); | | return l:gsub( "^[^|]*|(.*)$", "%1" ):gsub("^%s*(.-)%s*$", "%1"); |
| | end)); | | end)); |
| | + | end |
| | + | |
| | + | |
| | + | --[=[-------------------------< I S _ W I K I L I N K >-------------------------------------------------------- |
| | + | |
| | + | Determines if str is a wikilink, extracts, and returns the the wikilink type, link text, and display text parts. |
| | + | If str is a complex wikilink ([[L|D]]): |
| | + | returns wl_type 2 and D and L from [[L|D]]; |
| | + | if str is a simple wikilink ([[D]]) |
| | + | returns wl_type 1 and D from [[D]] and L as empty string; |
| | + | if not a wikilink: |
| | + | returns wl_type 0, str as D, and L as empty string. |
| | + | |
| | + | trims leading and trailing white space and pipes from L and D ([[L|]] and [[|D]] are accepted by MediaWiki and |
| | + | treated like [[D]]; while [[|D|]] is not accepted by MediaWiki, here, we accept it and return D without the pipes). |
| | + | |
| | + | ]=] |
| | + | |
| | + | local function is_wikilink (str) |
| | + | local D, L |
| | + | local wl_type = 2; -- assume that str is a complex wikilink [[L|D]] |
| | + | |
| | + | L, D = str:match ('%[%[([^|]+)|([^%]]+)%]%]'); -- get L and D from [[L|D]] |
| | + | |
| | + | if not is_set (D) then -- if no separate link |
| | + | D = str:match ('%[%[([^%]]*)|*%]%]'); -- get D from [[D]] |
| | + | wl_type = 1; |
| | + | end |
| | + | |
| | + | if not is_set (D) then -- no wikilink markup |
| | + | D = str; -- return the string as D |
| | + | wl_type = 0; -- but say that it is not a wikilink |
| | + | end |
| | + | |
| | + | D = mw.text.trim (D, '%s|'); -- trim white space and pipe characters |
| | + | L = L and mw.text.trim (L, '%s|'); |
| | + | |
| | + | return wl_type, D, L or ''; |
| | end | | end |
| | | | |
| Line 284: |
Line 368: |
| | local function set_selected_modules (cfg_table_ptr) | | local function set_selected_modules (cfg_table_ptr) |
| | cfg = cfg_table_ptr; | | cfg = cfg_table_ptr; |
| | + | |
| | end | | end |
| | | | |
| Line 296: |
Line 381: |
| | select_one = select_one, | | select_one = select_one, |
| | add_maint_cat = add_maint_cat, | | add_maint_cat = add_maint_cat, |
| − | wrap_style = wrap_style; | + | wrap_style = wrap_style, |
| − | safe_for_italics = safe_for_italics; | + | safe_for_italics = safe_for_italics, |
| − | remove_wiki_link = remove_wiki_link; | + | remove_wiki_link = remove_wiki_link, |
| − | set_selected_modules = set_selected_modules; | + | is_wikilink = is_wikilink, |
| | + | make_wikilink = make_wikilink, |
| | + | set_selected_modules = set_selected_modules, |
| | z = z, | | z = z, |
| | } | | } |