--[[This module was created by User:CodeHydro (Alexander Zhikun He).User:Jackmcbarn and User:Mr._Stradivarius provided a great deal of assistance in writting p.main()p.main() draw heavily from the following version of Template:Asbox of the English Wikipedia, authored primarily by User:Rich_Farmbroughhttps://en.wikipedia.org/w/index.php?title=Template:Asbox&oldid=619510287p.templatepage() is derived from the following revision of Template:Asbox/templatepage, authored primarily by User:MSGJhttps://en.wikipedia.org/w/index.php?title=Template:Asbox/templatepage&oldid=632914791Both templates had significant contributions from numerous others listed in the revision history tab of their respective pages.--]]localWRAPPER_TEMPLATE,args='Template:Asbox'localtemplatestyles='Asbox/styles.css'localp,Buffer,stubCats={--Prevents dupli-cats... get it? Maybe not?cats=setmetatable({},{__newindex=function(t,i,v)ifnotrawget(t,i)thenrawset(t,i,v)table.insert(t,i)endend}),--initializes variables required by both p.main and p.templatepageinit=function(self,frame,page)args,page=argsorrequire('Module:Arguments').getArgs(frame,{wrappers=WRAPPER_TEMPLATE}),pageormw.title.getCurrentTitle()--Ensures demo parameter will never affect category() output for articlesself.demo=self.demoorpage.namespace~=0andargs.demoreturnargs,pageend},require('Module:Buffer')--[[Formats category links. Stores them until called with cat.done=trueTakes multiple or single categories in the form of 'cat'or a table of strings and/or tables containing parts. (See below)]]localattention,catTag,catKey=Buffer'注意を要するスタブテンプレート','[[Category:%s]]','%s|%s%s'localfunctioncategory(cat)for_,vinipairs((tostring(cat)==catorcat.t)and{cat}orcat)do--[[If v is a table:[1] = full category name; defaults to local attention if blankk = Category sort key. Prefix before v.tt = page.text or args.tempsort#; appended after k (or in its place if omitted). Required if v is not a stringBasically the same as v = (v[1] or attention) .. ' | ' .. (v.k or '') .. v.t]]ifvandv~=truethen--reject v = nil, false, or truep.cats[catTag:format(tostring(v)==vandvor(v[1]andBuffer(v[1])orattention):_in(v.k):_(v.t):_str(2,nil,nil,'|'))]=trueendendreturncat.doneandtable.concat(p.cats,p.demoand' | 'ornil)or''end--[[Makes an ombox warning;Takes table {ifNot = Boolean, text, {cat. sort key, cat. sort name}}Will return an empty string instead when ifNot evaluates to true]]localfunctionombox(v)ifv.ifNotthenreturnendp.ombox=p.omboxorrequire('Module:Message box').omboxcategory{v[2]}returnp.ombox{type='content',text=v[1]}end--[[Unlike original template, module now takes unlimited cats! This function also performsmost stub category error checks except for the ombox for when main |category= is omitted (See p.template())]]localfunctioncatStub(page,pageDoc)stubCats={missing={},v={}}-- zwj and zwnj have semantical use in other other wikis, don't remove themlocalzwj='\226\128\141'-- U+200D, E2 80 8Dlocalzwnj='\226\128\140'-- U+200C, E2 80 8ClocaldisallowedUnicodeChars='[^%w%p%s'..zwj..zwnj..']'-- for i18n we make this a separate stringlocalcodefork,_inpairs(args)do--Find category parameters and store the number (main cat = '')table.insert(stubCats,string.match(k,'^category(%d*)$'))endtable.sort(stubCats)fork,vinipairs(stubCats)do--Get category names and, if called by p.templatepage, the optional sort keylocaltsort,cat=args['tempsort'..v],mw.ustring.gsub(args['category'..v],disallowedUnicodeChars,'')--remove all hidden unicode chars--Do not place template in main category if |tempsort = 'no'. However, DO place articles of that template in the main category.table.insert(stubCats.v,pageand(--p.templatepage passes page; p.main does not, i.e. articles are categorized without sort keys.v==''andtsort=='no'--if true, inserts 'true' in table, which category() will rejectortsortand{cat,k='',t=tsort}or{cat,k='*',t=page.text}--note space in front of sort key)orcat)--Check category existance only if on the template page (i.e. stub documentation)ifpagethenifnotmw.title.new('Category:'..cat).existsthencode=codeormw.html.create'code':wikitext'|category'table.insert(stubCats.missing,tostring(mw.clone(code):wikitext(v)))end--[[Checks non-demo stub template for documentation and flags if doc is present.All stub cats names are checked and flagged if it does not match 'Category: [] stub'.The main stub cat is exempt from the name check if the stub template has its own doc(presumably, this doc would have an explanation as to why the main stub cat is non-conforming).]]table.insert(stubCats.v,v==''andnotp.demoandpageDoc.existsand'docサブページが存在するスタブテンプレート'ornotcat:match'スタブ$'andnotcat:match'スタブ項目$'andnotcat:match'スタブ記事$'and{k='S',t=page.text})endend--Add category names after loop is completedcategory(stubCats.v)return#stubCats.missing>0andombox{--Changed, original msg:--One or more of the stub categories defined in this template do not seem to exist!--Please double-check the parameters {{para|category}}, {{para|category1}} and {{para|category2}}.'引数'..mw.text.listToText(stubCats.missing)..'で指定したスタブカテゴリは存在しません。',{k='N',t=page.text}}end--Shows population of categories found by catStub(). Outputs demo values if nonelocalfunctionpopulation()localwikitext,base={},'* [[:Category:%s]](項目数: %s)\n'ifnotargs.categoryandstubCats[1]~=falsethentable.insert(stubCats,1,false)endfor_,vinipairs(stubCats)dotable.insert(wikitext,base:format(vandargs['category'..v]or'{{{category}}}',vandmw.site.stats.pagesInCategory(args['category'..v],'all')or0))endreturntable.concat(wikitext)end--Includes standard stub documention and flags stub templates with bad parameter values.functionp.templatepage(frame,page)args,page=p:init(frame,page)localtStubDoc=mw.title.new'Template:Stub documentation'localpageDoc=page:subPageTitle('doc')--Reorganization note: Original Asbox alternates between outputting categories and checking on params |category#=.--Rather than checking multiple times and switching tasks, all stub category param operations have been rolled into catStub()returnBuffer(ombox{--Show ombox warnings for missing args.ifNot=args.category,'<code>|category</code>引数に値が指定されていません。適切なスタブカテゴリを指定してください。',{k='C',t=page.text}}):_(ombox{ifNot=args.subjectorargs.articleorargs.qualifier,'スタブの分野に関する指定がありません。<code>|subject</code>・<code>|article</code>・<code>|qualifier</code>のうち少なくとも1つを指定してください。',{k='D',t=page.text}}):_(catStub(page,pageDoc))--catStub() may also return an ombox if there are non-existing categories:_(category{done=p.demo~='doc',--Outputs categories if not doc demo(args.type=='substub')and'サブスタブテンプレート'or'スタブテンプレート',args.iconand'icon引数を使用しているスタブテンプレート'orargs.imageand(mw.title.new('Media:'..mw.text.split(args.image,'|')[1]).exists--do nothing if exists. category() will reject trueor{k='B',t=page.text})or'画像のないスタブテンプレート',args.imagealtand{k='I',t=page.text},}):_(notargs.nodocand(notp.demoorp.demo=='doc')and--Add standard stub template documentationrequire('Module:Documentation').main{content=Buffer(page.text~='Stub'andpage.text~='Substub'and--日本語版独自の変更あり This comparison performed in {{Asbox/stubtree}} before it invokes Module:Asbox stubtreerequire('Module:Asbox stubtree')._subtree(page.text,(args.type=='substub'))-- 日本語版独自の変更あり):_in'\n== このテンプレートについて ==\nこのテンプレートは':_(args.qualifierandargs.qualifier..'の'):_(args.subjectandargs.subject..'に関連した'):_out():_'スタブ項目に使用します。テンプレートの内部で{{[[Template:Asbox|asbox]]}}を使用しています。\n=== 使い方 ===\n':_(mw.html.create'code':wikitext(mw.text.nowiki('{{'),page.text=='Stub'and'stub'orpage.text,'}}')):_'と入力すればメッセージを表示し、以下のカテゴリを付与します:\n':_(population()):_(pageDoc.existsand--transclusion of /doc if it existsframe:expandTemplate{title=pageDoc.text}):_'\n== 一般的な情報 ==\n':_(frame:expandTemplate{title=tStubDoc.text}):_'\n\n'(),['link box']=Buffer'この[[Help:テンプレートの説明文|解説]]は[[モジュール:Asbox]]によって生成されています。<br/>':_in'一般的な情報の節の内容は[[Template:Stub documentation]]から[[Help:テンプレート#テンプレートとは|呼び出されて]]います。':_(mw.html.create'span':cssText'font-size:smaller;font-style:normal;line-height:130%':node(('([%s 編集] | [%s 履歴])'):format(tStubDoc:fullUrl('action=edit','relative'),tStubDoc:fullUrl('action=history','relative')))):_out()--:_(page.protectionLevels.edit and page.protectionLevels.edit[1] == 'sysop' and--"This template is [[WP:PROTECT|fully protected]] and any [[WP:CAT|categories]] should be added to the template's ["--.. pageDoc:fullUrl('action=edit&preload=Template:Category_interwiki/preload', 'relative')--.. '| /doc] subpage, which is not protected.'--)' <br/>'})()endfunctionp.main(frame,page)args,page=p:init(frame,page)localoutput=mw.html.create'div':attr{role='note'}-- 日本語版独自: サブスタブテンプレートにはsubstubクラスを適用する:addClass'metadata plainlinks asbox':addClass((args.type=='substub')and'substub'or'stub'):tag'table':attr{role='presentation'}:tag'tr':addClass'noresize':node((args.iconorargs.image)andmw.html.create'td':wikitext(args.iconor('[[File:%s|%spx|alt=%s]]'):format(args.imageor'',args.pixor'40x30',args.imagealtor'スタブアイコン'))):node((args.type=='substub')andmw.html.create'td':wikitext(args.iconor('[[File:%s|%spx|alt=%s]]'):format('Qsicon inArbeit.svg',(args.iconorargs.image)and'25x25'or'30x30','サブスタブ'))):tag'td':tag'p':addClass'asbox-body':wikitext('この',args.articleor'項目','は、',(args.type=='substub')and'まだ閲覧者の調べものの参照としては役立たない、'or'',args.qualifierandargs.qualifier..'の'or'',args.subjectandargs.subject..'に関連した'or'',"'''[[Wikipedia:スタブ|書きかけの項目]]'''です。[",page:fullUrl('action=edit','relative'),' この項目を加筆・訂正]などしてくださる',args.categoryand'[[:Category:'..args.category..'|協力者を求めています]]'or'協力者を求めています',args.relatedand'('..args.related..')。'or'。'):done():node(args.noteandmw.html.create():tag'p':addClass'asbox-note':wikitext(args.note):done()):allDone():node(args.nameandrequire'Module:Navbar'._navbar{template=args.name,plain='yes','e',})--[[Stub categories for templates include a sort key; this ensures that all stub tags appear at the beginning of their respective categories.Articles using the template do not need a sort key since they have unique names.When p.demo equals 'doc', the demo stub categories will appear as those for a stub template.Otherwise, any non-nil p.demo will emulate article space categories (plus any error cats unless set to 'art')]]ifpage.namespace==0then-- Main namespacecategory'すべてのスタブ記事'catStub()elseifp.demothenifp.demo~='doc'thencatStub()end--Unless p.demo is set to 'art', it will also include error categories normally only shown on--the template but not in the article. The elseif after namespace == 0 means demo cats will never show in article space.p.demodoc=p.demo~='art'andp.templatepage(frame,page)output=mw.html.create():node(output):tag'small':wikitext('カテゴリのデモ表示: ',(category{done=true}:gsub('(%[%[)(Category:)([^|%]]-)(%|)','%1%2%3|%2%3%4'):gsub('(%[%[)(Category:)','%1:%2'))):done():wikitext(p.demo=='doc'andp.demodocornil)else--Checks for valid name; emulates original template's check using {{FULLPAGENAME:{{{name|}}}}}localnormalizedName=mw.title.new(args.nameor'','Template')-- 日本語版独自: mw.title.new()の呼び出しにおける第2引数の指定ifnormalizedNameandnormalizedName.fullText==page.fullTextthenoutput=mw.html.create():node(output):wikitext(p.templatepage(frame,page))elseifnotpage.isSubpageandpage.namespace==10then-- Template namespace and not a subpagecategory{{k=args.nameand'E'or'W',t=page.text}}endendreturnframe:extensionTag{name='templatestyles',args={src=templatestyles}}..tostring(output:wikitext(notp.demoandcategory{done=true}ornil))endreturnp