Module:Quote

-- This module implements Template:Quote. local p = {} function p._main(args) -- Create the surrounding div. local root = mw.html.create('div') root :addClass('quote') -- Start a new line and add the span containing the quote. root :newline :wikitext(':') local quoteSpan = root:tag('span') if args[3] then quoteSpan:attr('title', 'Source: ' .. args[3]) end quoteSpan :wikitext(string.format( "%s%s%s", args.noquote and  or '"',			args[1] or ,			args.trans and '' or '"' ))	-- Add the attribution. root :newline :wikitext(':&#8213;') :wikitext(args[2] or '') -- Add everything that needs to go inside a noprint span. if args.audio or args.url or args[3] then local noprintSpan = root:tag('span'):addClass('noprint') -- Audio link if args.audio then noprintSpan :wikitext(' &mdash; ') :wikitext(string.format( '[[Media:%s|Listen]] (file info) ', args.audio, args.audio ))		end -- Source link if args.url or args[3] then local sourceSup = noprintSpan:tag('sup') local display = mw.text.nowiki('[src]') if args.url then sourceSup :addClass('plainlinks') :wikitext(string.format('[%s %s]', args.url, display)) else -- We have already checked that args[3] is present. sourceSup:wikitext(string.format('%s', args[3], display)) end end end -- Add the tracking category. The function passed to	-- Module:SpecialCategorizer is called if the page being processed is -- not blacklisted. if not args.url and not args[3] then require('Module:SpecialCategorizer')._main(function 			-- The category link is split up so that this page isn't categorised.			root:wikitext('' .. 'Category:Unsourced quotes')		end) end return tostring(root) end function p.main(frame) local args = {} for k, v in pairs(frame:getParent.args) do		v = v:match('^%s*(.-)%s*$') -- trim whitespace if v ~= '' then args[k] = v		end end return p._main(args) end return p