Module:About-distinguish
From KYNNpedia
Documentation for this module may be created at Module:About-distinguish/doc
local mHatnote = require('Module:Hatnote') local mHatlist = require('Module:Hatnote list') local mArguments --initialize lazily local mTableTools = require('Module:TableTools') local checkType = require('libraryUtil').checkType local p = {} function p.aboutDistinguish (frame) mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame) return p._aboutDistinguish(args) end function p.aboutDistinguishText (frame) mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame) return p._aboutDistinguish(args, {formatted = false}) end function p._aboutDistinguish(args, options) -- Type checks and defaults checkType('_aboutDistinguish', 1, args, 'table') if not args[1] then return mHatnote.makeWikitextError( 'no about topic supplied', 'Template:About-distinguish', args.category ) end if not args[2] then return mHatnote.makeWikitextError( 'no page to be distinguished supplied', 'Template:About-distinguish', args.category ) end checkType('_aboutDistinguish', 2, options, 'table', true) options = options or {} local defaultOptions = { defaultPageType = 'page', namespace = mw.title.getCurrentTitle().namespace, pageTypesByNamespace = { [0] = 'article', [14] = 'category' }, sectionString = 'section', formatted = true } for k, v in pairs(defaultOptions) do if options[k] == nil then options[k] = v end end -- Set pieces of initial "about" string local pageType = (args.section and options.sectionString) or options.pageTypesByNamespace[options.namespace] or options.defaultPageType args = mTableTools.compressSparseArray(args) local about = table.remove(args, 1) --Get pronoun from Wikidata. Really basic, but it should work. local pronouns = { ['female'] = 'She is', ['transgender female'] = "She is", ['male'] = 'He is', ['transgender male'] = 'He is', ['default'] = 'They are' } local wde = mw.wikibase.getEntity() local p31 = (wde and wde:formatPropertyValues('P31').value) == 'human' local p21 = wde and wde:formatPropertyValues('P21').value local pronoun = p31 and (pronouns[p21] or pronouns['default']) or 'It is' --Assemble everything together and return local text = string.format( 'This %s is about %s. %s not to be confused with %s.', pageType, about, pronoun, mHatlist.orList(args, options.formatted) ) return mHatnote._hatnote(text) end return p