Module:Uses TemplateStyles

local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')

local p = {}

local function format(msg, ...)
	return TNT.format('I18n/Uses TemplateStyles', msg, ...)
end

local function getConfig()
	return mw.loadData('Module:Uses TemplateStyles/config')
end

local function makeEditSup(pageName)
	return string.format('<sup>&lbrack;[[Special:Edit/%s|e]]&rbrack;</sup>', pageName)
end

-- Build just the "(sandbox)" suffix using the i18n message, without duplicating the main link.
local function makeSandboxSuffix(tsSandboxPrefixed)
	-- i18n message is: "$1 ([[$2|sandbox]])"
	-- Passing empty $1 yields " ([[:...|sandbox]])" -> trim leading whitespace to get "(sandbox)" portion.
	local s = format('sandboxlink', '', ':' .. tsSandboxPrefixed)
	return (s:gsub('^%s+', ''))
end

local function renderBox(tStyles)
	local boxArgs = {
		type = 'notice',
		small = true,
		image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
	}

	if #tStyles < 1 then
		boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
	else
		local cfg = getConfig()
		local tStylesLinks = {}

		for i, ts in ipairs(tStyles) do
			local viewLink = string.format('[[:%s]]', ts)
			local editSup = makeEditSup(ts)

			local out = viewLink .. editSup

			-- Optional sandbox link + sandbox edit link
			local tsTitle = mw.title.new(ts)
			if tsTitle and cfg['sandbox_title'] then
				local tsSandboxTitle = mw.title.new(string.format(
					'%s:%s/%s/%s',
					tsTitle.nsText,
					tsTitle.baseText,
					cfg['sandbox_title'],
					tsTitle.subpageText
				))

				if tsSandboxTitle and tsSandboxTitle.exists then
					local sandboxSuffix = makeSandboxSuffix(tsSandboxTitle.prefixedText)
					local sandboxEditSup = makeEditSup(tsSandboxTitle.prefixedText)
					out = out .. ' ' .. sandboxSuffix .. ' ' .. sandboxEditSup
				end
			end

			tStylesLinks[i] = out
		end

		local tStylesList = mList.makeList('bulleted', tStylesLinks)
		boxArgs.text = format(
			mw.title.getCurrentTitle():inNamespaces(828, 829) and 'header-module' or 'header-template'
		) .. '\n' .. tStylesList
	end

	return mMessageBox.main('mbox', boxArgs)
end

local function renderTrackingCategories(args, tStyles, titleObj)
	if yesno(args.nocat) then
		return ''
	end

	local cfg = getConfig()
	local cats = {}

	-- Error category
	if #tStyles < 1 and cfg['error_category'] then
		cats[#cats + 1] = cfg['error_category']
	end

	-- TemplateStyles category
	titleObj = titleObj or mw.title.getCurrentTitle()
	if (titleObj.namespace == 10 or titleObj.namespace == 828)
		and not cfg['subpage_blacklist'][titleObj.subpageText]
	then
		local category = args.category or cfg['default_category']
		if category then
			cats[#cats + 1] = category
		end
		if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
			local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
			local addedLevelCat = false
			local addedPadlockCat = false
			for _, ts in ipairs(tStyles) do
				local tsTitleObj = mw.title.new(ts)
				local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
				if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
					local content = tsTitleObj:getContent()
					if not content:find(cfg['padlock_pattern']) then
						cats[#cats + 1] = cfg['missing_padlock_category']
						addedPadlockCat = true
					end
				end
				if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
					currentProt = cfg['protection_hierarchy'][currentProt] or 0
					tsProt = cfg['protection_hierarchy'][tsProt] or 0
					if tsProt < currentProt then
						addedLevelCat = true
						cats[#cats + 1] = cfg['protection_conflict_category']
					end
				end
			end
		end
	end

	for i, cat in ipairs(cats) do
		cats[i] = string.format('[[Category:%s]]', cat)
	end
	return table.concat(cats)
end

function p._main(args)
	local cfg = getConfig()
	if #args == 0 then
		local prefixed = mw.title.getCurrentTitle().prefixedText
		prefixed = prefixed:gsub("/doc", "")
		args[1] = prefixed .. "/" .. cfg["default_subpage_name"]
	end
	local tStyles = mTableTools.compressSparseArray(args)
	local box = renderBox(tStyles)
	local trackingCategories = renderTrackingCategories(args, tStyles)
	return box .. trackingCategories
end

function p.main(frame)
	local origArgs = frame:getParent().args
	local args = {}
	for k, v in pairs(origArgs) do
		v = v:match('^%s*(.-)%s*$')
		if v ~= '' then
			args[k] = v
		end
	end
	return p._main(args)
end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.