Module:User script table row
MyWikiBiz, Author Your Legacy — Friday November 15, 2024
Jump to navigationJump to searchImplements {{user script table row}} used in Wikipedia:User scripts/List. /data interprets Wikipedia:User scripts/Most imported scripts and formats the data in a table.
local data = mw.loadData('Module:User script table row/data') local p = {} function p._main(args) local code = args.code local doc = args.doc local name = args.name local desc = args.desc if not code and not doc then return mw.html.create('tr'):tag('td'):attr('colspan', 4) :tag('span') :addClass('error') :wikitext('Error: <code>|code=</code> or <code>|doc=</code> must be specified') :allDone() end if not code and not args.instruction then code = doc .. '.js' end if not doc then local title = code:match('^(.+)%.[CJcj][Ss][Ss]?$') if title then title = mw.title.new(title) if not title.isExternal and title.exists then doc = title.fullText end end end if not name then name = doc and mw.ustring.match(doc, '[^/]+$') or mw.ustring.match(code, '([^/]+)%.[CJcj][Ss][Ss]?$') end local row = mw.html.create('tr') local instruction if args.instruction ~= 'no' then instruction = args.instruction if not instruction then local isGlobal = args.skin == 'global' local temp = code:find('%.[Cc][Ss][Ss]$') and 'luss' or 'lusc' if isGlobal then local interwiki = mw.title.new(code).interwiki local path = interwiki == 'meta' and code:sub(6) or interwiki == '' and 'w:' .. code or code temp = mw.getCurrentFrame():expandTemplate{ title = temp, args = { path, '' } }:gsub('{{subst:localurl', '{{subst:fullurl'):gsub('%s*//.-$', '') else temp = string.format('{{subst:%s|1=%s%s}}', temp, code, args.backlink and '|2=' .. args.backlink or '' ) end instruction = string.format( '\'\'\'[[%sSpecial:EditPage/Special:MyPage/%s.js|Click here]]\'\'\' and paste:<div><code>%s</code></div>', isGlobal and 'meta:' or '', args.skin or 'common', temp ) end instruction = mw.html.create('') :newline() :tag('div') :addClass('mw-collapsible mw-collapsed userscripttable-instruction') :tag('div') :addClass('userscripttable-instruction-head') :wikitext('How to install') :done() :tag('div') :addClass('mw-collapsible-content') :wikitext(instruction) :done() :done() end do local cell = mw.html.create('td') :wikitext(doc and string.format('[[:%s|%s]]', doc, name) or name) if args.indent and args.indent:find('^%d+$') then cell:css('padding-left', args.indent .. 'em') end if code then cell :wikitext(' ') :tag('span') :addClass('userscripttable-sourcelink') :wikitext(string.format('([[:%s|source]])', code)) :done() end if instruction and code then cell:tag('span') :addClass('scriptInstallerLink') :attr('id', code) :done() end row:node(cell) end row:tag('td') :wikitext(desc) :node(instruction) :done() local stats = code and data[code] or { total = 'N/A', active = 'N/A' } row :tag('td'):wikitext(stats.total):done() :tag('td'):wikitext(stats.active) return row end function p.main(frame) local args = {} for k, v in pairs(frame:getParent().args) do if v and v ~= '' then args[k] = v end end return p._main(args) end return p