モジュール:Asbox
使用法
このモジュールは{{ Asbox }}テンプレートを実装します。使用方法についてはテンプレート ページを参照してください。
謝辞
Template:AsboxおよびModule:Asboxの貢献履歴に記載されている貢献者に加えて、このモジュールは削除された Template:Asbox/templatepageのアイデアも実装しています。このテンプレートの主な作成者はUser:MSGJで、 User:WOSlinkerおよびUser:Od_Mishehuからのコード貢献が含まれています。
追跡カテゴリ
--[[
このモジュールは User:CodeHydro (Alexander Zhikun He) によって作成されました。User
:Jackmcbarn と User:Mr._Stradivarius は p.main() の作成に多大な協力を提供しました
。p.main() は、User:Rich_Farmbrough が主に作成した英語版 Wikipedia の Template:Asbox の次のバージョンから大きく影響を受けています。https://en.wikipedia.org/w/index.php?title=Template: Asbox &oldid=619510287 p.templatepage() は、User:MSGJ が主に作成した Template:Asbox/templatepage の次のリビジョンから派生しています。https: //en.wikipedia.org/w/index.php ?title=Template:Asbox/templatepage&oldid=632914791両方のテンプレートは、それぞれのページのリビジョン履歴タブにリストされている多数の他のユーザーからの重要な貢献を受けています。--]] local WRAPPER_TEMPLATE 、args = 'Template:Asbox' local templatestyles = 'Asbox/styles.css' local p 、Buffer 、stubCats = { -- 重複した cat を防止します... わかりますか? わかりませんか? cats = setmetatable ({}, { __newindex = function ( t 、i 、v ) if not rawget ( t 、i ) then rawset ( t 、i 、v ) table.insert ( t 、i ) end end }), -- p.main と p.templatepage の両方に必要な変数を初期化しますinit = function ( self 、frame 、page ) args 、page = argsまたはrequire ( 'Module:Arguments' ) . getArgs ( frame 、{ wrappers = WRAPPER_TEMPLATE } ), pageまたはmw.title . getCurrentTitle () --demoパラメータが記事のcategory()出力に影響を与えないようにします。self.demo = self.demoまたはpage.namespace ~ = 0でargs.demoはargs 、pageを返します。
end
}, require ( 'Module:Buffer' )
--[[カテゴリリンクをフォーマットします。 cat.done=true で呼び出されるまで保存します。'cat' の形式、または文字列のテーブルやパーツを含むテーブルで、複数または単一のカテゴリを受け取ります。(下記参照) ]] local attention 、catTag 、catKey = Buffer '注意が必要なスタブメッセージテンプレート' 、'[[Category:%s]]' 、'%s|%s%s' local function category ( cat ) for _ 、v in ipairs (( tostring ( cat ) == catまたはcat . t ) and { cat }またはcat ) do --[[ v がテーブルの場合: [1] = 完全なカテゴリ名。空白の場合はデフォルトでローカルアテンションになります 。 k = カテゴリソートキー。vt の前のプレフィックス t = page.text または args.tempsort#。k の後に追加されます(省略した場合は代わりに追加されます)。 v が文字列でない場合は必須です。 基本的に、 v = (v[1] or attention) .. ' | ' .. (vk or '') .. vt ]]と同じです。 vかつv ~= trueの場合、--reject v = nil、false、または true p . cats [ catTag : format ( tostring ( v ) == vかつvまたは( v [ 1 ]かつBuffer ( v [ 1 ])またはattention ): _in ( v . k ): _ ( v . t ): _str ( 2 、nil 、nil 、'|' ) )] = true end end return cat . done and table.concat ( p . cats 、p . demoかつ' | 'またはnil )または'' end --[[ ombox 警告を作成します。
テーブル {ifNot = Boolean、text、{cat.sort key、cat.sort name}} を受け取ります。ifNot
が true と評価された場合は、代わりに空の文字列を返します
。 ]]
local function ombox ( v )
if v . ifNot then return end p . ombox = p . omboxまたはrequire ( 'Module:Message box' ). ombox category { v [ 2 ]} return p . ombox { type = 'content' 、text = v [ 1 ] } end --[[元のテンプレートとは異なり、モジュールは無制限の cats を受け取るようになりました。この関数は、メインの |category= が省略されている場合の ombox を除く、ほとんどのスタブ カテゴリ エラー チェックも実行します (p.template() を参照) ]] local function catStub ( page 、pageDoc ) stubCats = { missing = {}, v = {}} -- zwj と zwnj は他の wiki でも意味的に使用されているため、削除しないでくださいlocal zwj = ' \226\128\141 ' -- U+200D、E2 80 8D local zwnj = ' \226\128\140 ' -- U+200C、E2 80 8C local disallowedUnicodeChars = '[^%w%p%s' .. zwj .. zwnj .. ']' -- i18n 用に、これを別の文字列にしますlocal code for k 、_ in pairs ( args ) do -- カテゴリ パラメータを検索そして番号を保存します (main cat = '') table.insert ( stubCats , string.match ( k , '^category(%d*)$' )) end table.sort ( stubCats ) for k , v in ipairs ( stubCats ) do --カテゴリ名を取得し、p.templatepage によって呼び出された場合はオプションのソートキーを取得しますlocal tsort , cat = args [
'tempsort' .. v ], mw . ustring . gsub ( args [ 'category' .. v ], disallowedUnicodeChars , '' ) -- すべての非表示の Unicode 文字を削除します
-- |tempsort = 'no' の場合は、テンプレートをメイン カテゴリに配置しません。ただし、そのテンプレートの記事はメイン カテゴリに配置します。table.insert ( stubCats . v 、pageおよび( --p.templatepage は page を渡しますが、 p.main は渡しません。つまり、記事はソート キーなしで分類されます。v == ''かつtsort == 'no' --true の場合、table に 'true' を挿入します。これは category() によって拒否されます。またはtsortおよび{ cat 、k = ' ' 、t = tsort }または{ cat 、k = ' *' 、t = page . text } --ソート キーの前のスペースに注意)またはcat ) --テンプレート ページ (つまり、スタブ ドキュメント) にある場合にのみカテゴリの存在を確認します。page の場合、そうでない場合、mw . title . new ( 'Category:' .. cat )。存在する場合、code = codeまたはmw . htmlです。create 'code' : wikitext '|category' table.insert ( stubCats . missing , tostring ( mw . clone ( code ): wikitext ( v ))) end --[[ 非デモ スタブ テンプレートのドキュメントをチェックし、ドキュメントが存在する場合はフラグを立てます。 すべてのスタブ キャットの名前がチェックされ、'Category: [] stub' と一致しない場合はフラグが立てられます。 スタブ テンプレートに独自のドキュメントがある場合、メインのスタブ キャットは名前のチェックが免除されます (おそらく、このドキュメントにはメインのスタブ キャットが非準拠である理由の説明があります)。 ]] table.insert ( stubCats . v , v == ''
and not p . demo and pageDoc . exists and
'ドキュメント サブページを含むスタブ メッセージ テンプレート'かどうかcat : match ' stubs$' and { k = 'S' , t = page . text } ) end end --ループが完了したらカテゴリ名を追加しますcategory ( stubCats . v ) return # stubCats . missing > 0 and ombox { --変更済み、元のメッセージ: --このテンプレートで定義されているスタブ カテゴリの 1 つ以上が存在しないようです。--パラメータ {{para|category}}, {{para|category1}} および {{para|category2}} を再確認してください。'次のパラメータ' .. ( # stubCats . missing == 1 and ' は、'または' が、' を実行するスタブ カテゴリを定義します) .. ' 存在しません: ' .. mw . text . listToText ( stubCats . missing ), { k = 'N' , t = page . text } } end --catStub() で見つかったカテゴリの population を表示します。ない場合はデモ値を出力します。local function population () local wikitext , base = {}, '* [[:Category:%s]] (population: %s) \n ' if not args . category and stubCats [ 1 ] ~= false then table.insert ( stubCats , 1 , false ) end for _ , v in ipairs ( stubCats ) do table.insert ( wikitext , base : format ( v and args [ 'category' .. v ] or
'{{{ category }}}' 、v 、およびmw.site.stats.pagesInCategory ( args [ 'category' .. v ]、' all' )または0 )) end return table.concat ( wikitext ) end --標準のスタブドキュメントをインクルードし、不正なパラメータ値を持つスタブテンプレートにフラグを立てます。 function p.templatepage ( frame 、page ) args 、page = p : init ( frame 、page ) localtStubDoc = mw.title.new'Template : Stubdocumentation'local pageDoc = page : subPageTitle ( ' doc ' ) --再編成の注意: オリジナルのAsboxは、カテゴリの出力とパラメータのチェックを交互に行っています| category #=。-- 複数回チェックしてタスクを切り替えるのではなく、すべてのスタブ カテゴリ パラメータ操作が catStub() にまとめられましたreturn Buffer ( ombox { -- 引数が見つからない場合に ombox 警告を表示します。ifNot = args . category , '<code>|category</code> パラメータが設定されていません。適切なスタブ カテゴリを追加してください。' , { k = 'C' , t = page . text } }) : _ ( ombox { ifNot = args . subjectまたはargs . articleまたはargs . qualifier , 'このスタブ テンプレートには説明が含まれていません。<code>|subject</code>、<code>|article</code>、または <code>|qualifier</code> の少なくとも 1 つのパラメータを定義する必要があります。' , { k = 'D' , t = page . text } } ) : _ ( catStub ( page 、pageDoc )) --catStub()存在しないカテゴリがある場合は、ombox を返すこともあります。_
( category {
done = p . demo ~= 'doc' 、 -- docでない場合はカテゴリを出力します demo 'スタブメッセージテンプレート' 、args . iconおよび'アイコンパラメータを使用したスタブメッセージテンプレート'またはargs . imageおよび( mw . title . new ( 'メディア:' .. mw . text . split ( args . image , '|' )[ 1 ]). exists -- 存在する場合は何もしません。 category() は true を拒否しますまたは{ k = 'B' 、t = page . text } )または'画像のないスタブメッセージテンプレート' 、args . imagealtおよび{ k = 'I' 、t = page . text }, }) : _ (( p . demoまたはp . demo == 'doc'ではない)および-- 標準のスタブテンプレートドキュメントを追加しますrequire ( 'Module:Documentation' ). main { content = Buffer ( page . text ~= 'スタブ'と--この比較は、Module:Asbox stubtree を呼び出す前に {{Asbox/stubtree}} で実行されますrequire ( 'Module:Asbox stubtree' ). subtree { args = { pagename = page . text }} ) : _in ' \n == このテンプレートについて == \nこのテンプレートは、' : _ ( args . subject ): _ 'スタブ' : _ ( args . qualifier ): _out ' ' --space : _
'. {{[[Template:Asbox|asbox]]}} を使用します。これは、スタブ テンプレートの作成と管理のプロセスを容易にするために設計されたメタ テンプレートです。\n === 使用方法 === \n '
: _ ( mw . html . create 'code' : wikitext ( '{{' , page . text == 'Stub'かつ'stub'またはpage . text , '}}' ) ) : _ ' と入力すると、冒頭に表示されているメッセージが生成され、記事が次のカテゴリに追加されます。' : _ ( # stubCats > 1かつ'ies'または'y' ) : _ ': \n ' : _ ( population ()) : _ ( pageDoc . existsかつ /doc が存在する場合は --transclusionフレーム: expandTemplate { title = pageDoc . text } ) : _ ' \ n == 一般情報 == \n ' : _ ( frame : expandTemplate { title = tStubDoc . text }) : _ ' \n\n ' (), [ 'link box' ] = Buffer 'このドキュメントは [[Module:Asbox]] によって自動的に生成されます。' : _in '一般的な情報は [[Template:Stub ドキュメント]] から転載されています。' : _ ( mw . html . create 'span' : cssText 'font-size:smaller;font-style:normal;line-height:130%' : node (( '([%s edit] | [%s history])' ): format ( tStubDoc : fullUrl ( 'action=edit' , 'relative' ), tStubDoc : fullUrl ( 'action=history' , 'relative' ) )) ) :_外():_
( page . protectionLevels . edit および page . protectionLevels . edit [ 1 ] == 'sysop' および
"このテンプレートは [[WP:PROTECT|完全に保護されています]] ので、[[WP:CAT|カテゴリ]] はテンプレートの [" に追加する必要があります.. pageDoc : fullUrl ( 'action=edit&preload=Template:Category_interwiki/preload' , 'relative' ) .. '| /doc] サブページは保護されていません。' ) ' <br/>' } )() end function p . main ( frame , page ) args , page = p : init ( frame , page ) local output = mw . html . 'div'を作成: attr { role = 'note' } : addClass 'metadata plainlinks asbox stub' : tag 'table' : attr { role = ' presentation' } : tag 'tr' : addClass 'noresize' : node (( args . iconまたはargs . image )およびmw . html.create 'td' : wikitext ( args . iconまたは( '[[File:% s |%spx|alt=%s]]' ): format ( args . imageまたは'' 、args . pixまたは'40x30' 、args . imagealtまたは'Stub icon' )) ) : tag 'td' : tag 'p' : addClass 'asbox-body' : wikitext ( Buffer 'This' : _ ( args 。主題):_ ( args . articleまたは'article'
): _ ( args . qualifier ) ' ' , --space
' は [[Wikipedia:stub|スタブ]] です。[' , page : fullUrl ( 'action=edit' , 'relative' ), ' 拡張] することで、Wikipedia に貢献できます。' ) : done () : node ( args . noteおよびmw . html . create () : tag 'p' : addClass 'asbox-note' : wikitext ( args . note ) : done () ) : allDone () : node ( args . nameおよびrequire 'Module:Navbar' . _navbar { args . name , mini = 'yes' , } ) --[[ テンプレートのスタブ カテゴリにはソート キーが含まれています。これにより、すべてのスタブ タグがそれぞれのカテゴリの先頭に表示されるようになります。 テンプレートを使用する記事は、名前が一意であるため、ソート キーは必要ありません。 p.demo が 'doc' に等しい場合、デモ スタブ カテゴリはスタブ テンプレートのカテゴリとして表示されます。 それ以外の場合、nil 以外の p.demo は、記事スペース カテゴリ (および 'art' に設定されていない限りエラー カテゴリ) をエミュレートします。 ]] if page . namespace == 0 then -- メイン名前空間カテゴリ'すべてのスタブ記事' catStub () elseif p . demo then if p . demo ~= 'doc' then catStub () end --p.demo が 'art' に設定されていない限り、通常はテンプレートにのみ表示され、記事には表示されないエラー カテゴリも含まれます。 namespace == 0 の後の elseif は、デモ カテゴリが記事スペースに表示されないことを意味します。p . demodoc = p . demo ~= 'art'かつp . templatepage ( frame , page ) output = mw . html .作成する()
: 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'かつp . demodocまたはnil ) else --名前が有効かどうかをチェックします。{{FULLPAGENAME:{{{name|}}}}} を使用して、元のテンプレートのチェックをエミュレートします。local normalizedName = mw . title . new ( args . nameまたは'' ) if normalizedName and normalizedName . fullText == page . fullText then output = mw . html . create (): node ( output ): wikitext ( p . templatepage ( frame , page )) elseif not page . isSubpageかつpage . namespace == 10 then -- テンプレート名前空間であり、サブページカテゴリではない{{ k = args . nameかつ'E'または'W' , t = page . text }} end end return frame : extensionTag { name = 'templatestyles' , args = { src = templatestyles } } .. tostring ( output : wikitext ( not p . demo and category { done = true }またはnil ))
終了
リターンp