Difference between revisions 21306611 and 21306612 on frwiktionarylocal export = {} -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) if mw.title.getCurrentTitle().nsText == "Template" then return "(This template should be used on pages in the Category: namespace.)" elseif mw.title.getCurrentTitle().nsText ~= "Category" then error("This template/module can only be used on pages in the Category: namespace.") end local args = frame.args local template = args["template"] if not template then error("The \"template\" parameter was not specified.") end -- Get all the parameters and the label data local info = {} info.code = args["code"]; if info.code == "" then info.code = nil end info.label = args["label"]; if info.label == "" then info.label = nil end info.sc = args["sc"]; if info.sc == "" then info.sc = nil end info.template = template⏎ -- Check if the category is empty local categories = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(categories, "[[Category:Empty categories]]") end -- Does the category have the correct name? local errormessage = check_name(template, info) if errormessage then return table.concat(categories, "") .. errormessage end -- Generate the displayed information local display = {} table.insert(display, show_breadcrumbs(template, info)) table.insert(display, show_description(template, info)) table.insert(display, show_subcategory_list(template, info)) table.insert(display, show_TOC(template, info)) show_categories(template, info, categories) return table.concat(categories, "") .. table.concat(display, "\n\n") .. "<br clear=\"all\"/>" end local functions = { ["label_exists"] = "exists", ["display_name"] = "getBreadcrumbName", ["edit"] = "getDataModule", ["basic"] = "getBasicName", ["description"] = "getBasicDescription", ["parents"] = "getBasicParentLabels", ["subs"] = "getBasicChildLabels", ["umbrella"] = "getUmbrellaName", ["umbrella_description"] = "getUmbrellaDescription", ["sortparentumbrella"] = "getUmbrellaSortKey", ["umbrella-categorization"] = "getUmbrellaCategorizationType", ["fundamental"] = "getFundamentalName", } -- Retrieves an item of information function export.get_item(template, info, item) local submodule = require("Module:category tree/" .. info.template) require("Module:debug").track("category tree/get item") if functions[item] then local obj = submodule.new(info) if item == "label_exists" then return obj ~= nil else return obj[functions[item]](obj, info) end else error("The requested data item \"" .. item .. "\" is not recognized.") end end -- Check the name of the current page, and return an error if it's not right. function check_name(template, info) local errortext = nil local category = nil if not export.get_item(template, info, "label_exists") then errortext = "The label \"" .. (info.label or "") .. "\" given to the " .. mw.getCurrentFrame():expandTemplate{title = "temp", args = {info.template}} .. " template is not valid. " .. "You may have mistyped it, or it simply has not been created yet. To add a new label, please consult the documentation of the template." category = "[[Category:Categories with invalid label]]" else local expected_name = export.get_item(template, info, (info.code and "basic" or "umbrella")) if expected_name ~= mw.title.getCurrentTitle().text then errortext = "Based on the parameters given to the " .. mw.getCurrentFrame():expandTemplate{title = "temp", args = {info.template}} .. " template, this category should be called '''[[:Category:" .. expected_name .. "]]'''." category = "[[Category:Categories with incorrect name]]" end end if errortext then return (category or "") .. mw.getCurrentFrame():expandTemplate{title = "maintenance box", args = { "red", image = "[[File:Ambox warning pn.svg|50px]]", title = "The automatically-generated contents of this category has errors.", text = errortext, }} else return nil end end -- Show the parent categories that the current category should be placed in. function show_categories(template, info, categories) local lang = require("Module:languages").getByCode(mw.getContentLanguage():getCode()) -- Used to create English sort keys if info.sc then local parent = export.get_item(template, {code = info.code, label = info.label, sc = nil, template = info.template}, (info.code and "basic" or "umbrella")) local sortparent = require("Module:scripts").getByCode(info.sc):getCanonicalName() table.insert(categories, "[[Category:" .. parent .. "|" .. lang:makeSortKey(sortparent) .. "]]") elseif info.code then -- There is a code, so this is a basic category. Put the category in its parents. local parents = export.get_item(template, info, "parents") for _, parent in ipairs(parents) do local sortkey = export.get_item(template, info, "display_name") if type(parent) == "table" then sortkey = parent.sort parent = parent.name end sortkey = lang:makeSortKey(sortkey) if parent:find("^Category:") then table.insert(categories, "[[" .. parent .. "|" .. sortkey .. "]]") else local parent_name = export.get_item(template, {code = info.code, label = parent, sc = info.sc, template = info.template}, "basic") table.insert(categories, "[[Category:" .. parent_name .. "|" .. sortkey .. "]]") end end -- Also put the category in its corresponding "umbrella" or "by language" category. local umbrella = export.get_item(template, info, "umbrella") if umbrella then local current_name = export.get_item(template, info, "basic") table.insert(categories, "[[Category:" .. umbrella .. "|" .. lang:makeSortKey(current_name) .. "]]") end else -- There is no code, this is an umbrella category. Put the category in a "fundamental" category. local umbrella_categorization = export.get_item(template, info, "umbrella-categorization") if umbrella_categorization == "fundamental" then local fundamental = export.get_item(template, info, "fundamental") if fundamental then local sortkey = lang:makeSortKey(export.get_item(template, info, "sortparentumbrella") or export.get_item(template, info, "display_name")) table.insert(categories, "[[Category:" .. fundamental .. "|" .. sortkey .. "]]") end elseif umbrella_categorization == "parallel" then local parents = export.get_item(template, info, "parents") for _, parent in ipairs(parents) do local sortkey = export.get_item(template, info, "display_name") if type(parent) == "table" then sortkey = parent.sort parent = parent.name end sortkey = "*" .. lang:makeSortKey(sortkey) if parent:find("^Category:") then table.insert(categories, "[[" .. parent .. "|" .. sortkey .. "]]") else local parent_name = export.get_item(template, {code = info.code, label = parent, sc = info.sc, template = info.template}, "umbrella") table.insert(categories, "[[Category:" .. parent_name .. "|" .. sortkey .. "]]") end end end end end -- Show navigational "breadcrumbs" at the top of the page. function show_breadcrumbs(template, info) if not info.code and export.get_item(template, info, "umbrella-categorization") ~= "parallel" then return nil end local steps = {} -- Start at the current label and move our way up the "chain" from child to parent, until we can't go further. local current = info.label while current do local parents = export.get_item(template, {code = info.code, label = current, sc = nil, template = info.template}, "parents") local parent = parents and parents[1] or nil if not parent then break elseif type(parent) == "table" then parent = parent.name end local parent_category = nil local parent_display_name = nil if parent:find("^Category:") then parent_category = parent parent_display_name = parent:gsub("^Category:", "") -- The chain ends here. current = nil else parent_category = "Category:" .. export.get_item(template, {code = info.code, label = parent, sc = nil, template = info.template}, (info.code and "basic" or "umbrella")) parent_display_name = export.get_item(template, {code = info.code, label = parent, sc = nil, template = info.template}, "display_name") -- Move up the "chain" by one level. current = parent end parent_display_name = mw.getContentLanguage():ucfirst(parent_display_name) table.insert(steps, 1, "» [[:" .. parent_category .. "|" .. parent_display_name .. "]]") end if info.sc then local category = "Category:" .. export.get_item(template, {code = info.code, label = info.label, sc = nil, template = info.template}, (info.code and "basic" or "umbrella")) local display_name = export.get_item(template, {code = info.code, label = info.label, sc = nil, template = info.template}, "display_name") table.insert(steps, "» [[:" .. category .. "|" .. mw.getContentLanguage():ucfirst(display_name) .. "]]") end local category = "Category:" .. export.get_item(template, info, (info.code and "basic" or "umbrella")) local display_name = export.get_item(template, info, "display_name") table.insert(steps, "» [[:" .. category .. "|" .. mw.getContentLanguage():ucfirst(display_name) .. "]]") return "<small>" .. table.concat(steps, " ") .. "</small>" end -- Show a short description text for the category. function show_description(template, info) if info.code then if info.sc then local basic = export.get_item(template, info, "basic") return "This category contains '''" .. basic .. "'''." else local description = export.get_item(template, info, "description") local edit = export.get_item(template, info, "edit") return (description or "") .. mw.getCurrentFrame():expandTemplate{title = "edit", args = {edit, type = "sup"}} end else local description = export.get_item(template, info, "umbrella_description") local edit = export.get_item(template, info, "edit") return (description or "") .. mw.getCurrentFrame():expandTemplate{title = "edit", args = {edit, type = "sup"}} end end -- Show a list of subcategories. function show_subcategory_list(template, info) if not info.code then return nil end local subcategories = {} local subs = export.get_item(template, info, "subs") if not subs then return nil end for _, sub in ipairs(subs) do local sub_basic = export.get_item(template, {code = info.code, label = sub, sc = info.sc, template = info.template}, "basic") local sub_page = mw.title.new("Category:" .. sub_basic) if sub_page.exists then local sub_description = export.get_item(template, {code = info.code, label = sub, sc = info.sc, template = info.template}, "description") table.insert(subcategories, "* [[:Category:" .. sub_basic .. "]]: " .. sub_description) end end return table.concat(subcategories, "\n") end -- Show a table of contents with links to each letter in the language's script. function show_TOC(template, info) if not info.code then return nil end local num_pages = mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "pages") -- No need for a TOC if all entry names can fit on one page. if num_pages > 200 then -- This category is very large, see if there is an "extended" version of the TOC. if num_pages > 2500 then local TOC_template_extended = mw.title.new("Template:" .. info.code .. "-categoryTOC/full") if TOC_template_extended.exists then return mw.getCurrentFrame():expandTemplate{title = TOC_template_extended.text, args = {}} end end local TOC_template = mw.title.new("Template:" .. info.code .. "-categoryTOC") if TOC_template.exists then return mw.getCurrentFrame():expandTemplate{title = TOC_template.text, args = {}} end end return nil end return export All content in the above text box is licensed under the Creative Commons Attribution-ShareAlike license Version 4 and was originally sourced from https://fr.wiktionary.org/w/index.php?diff=prev&oldid=21306612.
![]() ![]() This site is not affiliated with or endorsed in any way by the Wikimedia Foundation or any of its affiliates. In fact, we fucking despise them.
|