p =
local cfg = mw.loadData('Module:Archives/config')
local function is_filled(var) return var and var ~= end
-- simple helper for simple caseslocal function var_or_default(var, default) if is_filled(var) then return var else return default endend
local function wikilink(link, display) if display then return '' .. display .. '' else return '' .. link .. '' endend
local function talk_other(demospace, talk) if is_filled(demospace) then return demospace end if mw.title.getCurrentTitle.isTalkPage then return talk end return nil -- just return nil rather than 'other' since we have no needend
local function add_image(image) if image.image and (image.image
) then return nil end
return mw.html.create('div'):addClass('archives-image'):wikitext(require('Module:InfoboxImage/sandbox')._InfoboxImage )end
local function auto_list(list_root, is_banner, list_auto, list_prefix) local list_args = if list_root then list_args.root = list_root else list_args.DISABLE1 = list_root end if is_banner then list_args.nobr = 'yes' list_args.DISABLE2 = list_auto or 'long' else list_args.nobr = 'no' list_args.auto = list_auto or 'long' end if list_prefix then list_args.prefix = list_prefix else list_args.DISABLE3 = list_prefix end return require('Module:Archive list').main(list_args)end
local function make_title(is_banner, title)
end
local function search_box(frame, is_banner, root, search)
if search.search and search.search
'yes' or search.sbreak
return mw.html.create('div'):addClass('archives-search'):wikitext(frame:extensionTag)end
local function note_auto(frame, auto) if not is_filled(auto.age) and not is_filled(auto.target) then return nil end local age = var_or_default(auto.age, nil) local target = var_or_default(auto.target, nil) local target_text = if target then target_text = mw.ustring.format(cfg.has_archives, frame:callParserFunction('#rel2abs', target), age and ' ' or ) end local age_text = if age then local units = var_or_default(auto.units, cfg.units) -- there's probably a friendlier l10n way to do this check on units... -- TODO make it friendlier. maybe split it to a separate function? -- (borrowed from Module:String.endswith in the meantime) if age ~= '1' and mw.ustring.sub(units, -1, -1) ~= 's' then units = units .. 's' end -- TODO localize local age_with_units = age .. ' ' .. units local has_bot = is_filled(auto.bot) local has_minthreads = is_filled(auto.minthreads) if has_bot and has_minthreads then age_text = mw.ustring.format(cfg.age_bot_threads, age_with_units, wikilink('User:' .. auto.bot, auto.bot), var_or_default(auto.minthreads, cfg.min_threads) ) elseif has_bot then age_text = mw.ustring.format(cfg.age_bot, age_with_units, wikilink('User:' .. auto.bot, auto.bot) ) elseif has_minthreads then age_text = mw.ustring.format(cfg.age_threads, age_with_units, var_or_default(auto.minthreads, cfg.min_threads) ) else age_text = mw.ustring.format(cfg.age, age_with_units ) end end return mw.html.create('div'):addClass('archives-auto'):wikitext(target_text .. age_text)end
local function edit_list(frame, auto, list1, archive_list, archive_list_exists, editbox) local has_editbox = not editbox or (editbox and (editbox
'yes')) if not (archive_list_exists and has_editbox and not auto and list1) then return nil end return mw.html.create('div'):addClass('archives-edit'):wikitext(mw.ustring.format(cfg.edit_this_box, archive_list.fullUrl('action=edit' .. cfg.pre_load) ))end
local function render_list(root, auto, list1, archive_list_title, archive_list_exists, list, index, prefix) -- this logic is seriously fucking screwy -- only hope is for the test cases to catch the insanity local auto_default = true if list1 then auto_default = false end
local is_foreign = true if (auto and auto
local prefix = var_or_default(content.prefix, nil) if archive_list_exists then foreign_archive_list = frame:expandTemplate else foreign_archive_list = auto_list(root, is_banner, auto, prefix) end foreign_archive_list = index_link .. foreign_archive_list end local local_archive_list = if list or list1 then local_archive_list = '\n' .. (list or list1) end return foreign_archive_list .. local_archive_list
end
local function add_main_content(frame, is_banner, content) local is_collapsible = false local is_collapsed = false if content.collapsible and content.collapsible
'yes' then is_collapsed = true is_collapsible = true end local root = var_or_default(content.root, nil) local auto = var_or_default(content.auto, nil) local list1 = var_or_default(content.list1, nil) local archive_list_name = frame:callParserFunction('#rel2abs', var_or_default(content.archive_list, cfg.archive_list) ) local archive_list_title = mw.title.new(archive_list_name) local archive_list_exists = archive_list_title.exists local all_lists = render_list(root, auto, list1, archive_list_title, archive_list_exists, content.list, content.index, content.prefix ) local main_content = mw.html.create main_content :tag('div') :addClass('archives-flex-child') :wikitext(all_lists) :node(search_box(frame, is_banner, root, content.search)) :node(note_auto(frame, content.auto_explanation)) :node(edit_list(frame, auto, list1, archive_list_title, archive_list_exists, content.editbox ))
return main_contentend
--pass the frame down for a minute because we do a lot of work with a framefunction p._main(args, frame)
local is_banner = false if (args[cfg.arg.banner] and args[cfg.arg.banner]
cfg.banner_yes) then is_banner = true end local archives = mw.html.create archives :tag('div') :addClass('archives plainlinks') -- banner is roughly mbox, small is roughly mbox-small :addClass(is_banner and 'archives-banner' or 'archives-small') -- archives-talk has same-ish styles as tmbox tmbox-notice -- base styles are same-ish as ombox ombox-notice :addClass(talk_other(var_or_default(args[cfg.arg.demospace], nil), 'archives-talk' )) :css('width', var_or_default(args[cfg.arg.box_width], nil)) :cssText(var_or_default(args[cfg.arg.style], nil)) :node(add_image) :node(add_main_content(frame, is_banner,))
return frame:extensionTag .. tostring(archives)end
function p.main(frame) return p._main(require('Module:Arguments').getArgs(frame), frame)end
return p