このテンプレートは、以下のLuaモジュールを使用しています。 |
![]() | このモジュールは作成 / 編集中です。まだ完成していないため、適切に使用できない可能性があります。 |
このモジュールは、{{駅一覧}}
で使用される、路線の駅を一覧表示する表を出力します。利用する際にはテンプレート経由で使ってください。
テンプレート:駅一覧/testcasesにテストケースがあります。
使用状況
[編集]このモジュールを使用しているテンプレートは以下の通りです:
この解説は、モジュール:Stalist/docから呼び出されています。 (編集 | 履歴) 編集者は、このモジュールをサンドボックス (作成 | 複製)とテストケース (作成)で試すことができます。(解説) このモジュールのサブページ一覧。 |
--[[ ░██████╗████████╗░█████╗░██╗░░░░░██╗░██████╗████████╗ ██╔════╝╚══██╔══╝██╔══██╗██║░░░░░██║██╔════╝╚══██╔══╝ ╚█████╗░░░░██║░░░███████║██║░░░░░██║╚█████╗░░░░██║░░░ ░╚═══██╗░░░██║░░░██╔══██║██║░░░░░██║░╚═══██╗░░░██║░░░ ██████╔╝░░░██║░░░██║░░██║███████╗██║██████╔╝░░░██║░░░ ╚═════╝░░░░╚═╝░░░╚═╝░░╚═╝╚══════╝╚═╝╚═════╝░░░░╚═╝░░░ Maintainer: [email protected] Repository: https://github.com/sousakak/WikivoyageModules/tree/master/stalist ---------- features: main (func) : same as "stalist" stalist (func) : create a list of stations in the train route. title (args) : The title of the table (Default: `{{BASICPAGENAME}}`) wikidata (args) : Wikidata ID of the route (Default: Wikidata ID for the current page) color (args) : Color of the bottom border of the title (Default: `rgb(200, 204, 209)`) 1, 2, ... (args) : Set Wikidata id of each stations and this can also contains a customized image and name of the station if needed. These args must be in order, and don't remove "Q" in the initial. image1, image2, ... (args) : Optional. Retrieved from Wikidata by default name1, name2, ... (args) : Optional. Retrieved from Wikidata by default tfr1, tfr2, ... (args) : Optional. Retrieved from Wikidata by default spot1, spot2 ... (args) : Spots around the station; watch out for the order ]] local p = {} local getArgs = require( 'Module:Arguments' ).getArgs local title = require( 'Module:BASICPAGENAME' ).BASICPAGENAME local fileLink = require( 'Module:File_link' )._main --[[ i18n ]]-- local i18n = { css = '駅一覧/styles.css', header_num = "駅番号", header_name = "駅名", header_tfr = "乗り換え路線", header_spot = "周辺のスポット", property_num = "P154", property_tfr = {"P81", "P1192"}, property_filter = "P642", err_nowditem = "ウィキデータIDが指定されていません", err_wrongid = "$1番目のウィキデータIDが不正です" } --[[ utility functions ]]-- local function isQID(str) if string.match(str, "^[Qq]%d+$") then return true else return false end end local function tableLength(tbl) local n = 0 for _ in pairs (tbl) do n = n + 1 end return n end local function split(str, ts) local table = {} if ts == nil then return table end i = 1 for piece in string.gmatch(str, '([^' .. ts .. ']+)') do table[i] = piece i = i + 1 end return table end --[[ main functions ]]-- function p.main(frame) return p.stalist(frame) end function p.stalist(frame) local args = getArgs(frame) local titletext = args.title or mw.title.getCurrentTitle().text local wikitext = mw.html.create() :wikitext( frame:extensionTag{ name = 'templatestyles', args = {src = i18n.css} } ):done() :tag( "table" ):addClass( "wikitable voy-stalist" ) :tag( "tr" ):addClass( "voy-stalist-row" ) :tag( "th" ) :attr( "colspan", 4 ) :addClass( "wikitable voy-stalist-title" ) :css( "border-bottom-color", args.color ) :wikitext( titletext ) :done() :done() :tag( "tr" ):addClass( "voy-stalist-row" ) :tag( "th" ):wikitext( i18n.header_num ):addClass( "wikitable voy-stalist-header" ):done() :tag( "th" ):wikitext( i18n.header_name ):addClass( "wikitable voy-stalist-header" ):done() :tag( "th" ):wikitext( i18n.header_tfr ):addClass( "wikitable voy-stalist-header" ):done() :tag( "th" ):wikitext( i18n.header_spot ):addClass( "wikitable voy-stalist-header" ):done() :done() assert( args[1], i18n.err_nowditem ) i = 1 while args[i] ~= nil do --[[ define vars ]]-- local qid = (isQID(args[i]) and args[i]) or error(string.gsub(i18n.err_wrongid, "$1", i)) -- Wikidata id local item = mw.wikibase.getEntity(qid) -- this is expensive local staimage = args["image" .. i] or nil local staname = args["name" .. i] or item:getLabel('ja') local value_num local function checkLine(statement) return statement["qualifiers"][i18n.property_filter][1]["datavalue"]["value"]["id"] end local criterion = args.wikidata or mw.wikibase.getEntityIdForCurrentPage() local value_tfr = args["tfr" .. i] or "" local tfr_table = {} --[[ get data from Wikidata ]]-- if staimage ~= nil then value_num = fileLink { file = staimage, size = "50px", caption = staname } elseif item:getBestStatements(i18n.property_num) ~= nil then for f = 1, tableLength(item:getBestStatements(i18n.property_num)) do -- check the each value of the logo image local err, value = pcall( -- if the value has P642 in its qualifiers: (true, value); if not: (false, error message) checkLine, item:getBestStatements(i18n.property_num)[f] ) if err and value == criterion then value_num = fileLink { file = item:getBestStatements(i18n.property_num)[f]["mainsnak"]["datavalue"]["value"], size = "50px", caption = staname } break elseif #item:getBestStatements(i18n.property_num) == 1 then value_num = fileLink { file = item:getBestStatements(i18n.property_num)[1]["mainsnak"]["datavalue"]["value"], size = "50px", caption = staname } break end end else value_num = "" end local tfr_num = 0 if value_tfr == "" then -- if args["tfr" .. i] is not nil for p = 1, tableLength(i18n.property_tfr) do if item:getBestStatements(i18n.property_tfr[p]) ~= nil then for value = 1, tableLength(item:getBestStatements(i18n.property_tfr[p])) do local tfr_id = item:getBestStatements(i18n.property_tfr[p])[value]["mainsnak"]["datavalue"]["value"]["id"] local tfr_text if tfr_id ~= criterion then if tfr_table[tfr_id] ~= nil then tfr_text = tfr_table[tfr_id] else tfr_text = mw.wikibase.getEntity(tfr_id):getLabel( mw.language.getContentLanguage():getCode() ) tfr_table[tfr_id] = tfr_text end value_tfr = value_tfr .. tfr_text .. "、" end end end tfr_num = p end if value_tfr then value_tfr = mw.ustring.sub(value_tfr, 1, mw.ustring.len(value_tfr) - 1) end -- remove the last punctuation mark end wikitext = wikitext:tag( "tr" ):addClass( "voy-stalist-unit voy-stalist-row" ) :tag( "td" ):wikitext( value_num ):done() :tag( "td" ):wikitext( staname ):done() :tag( "td" ):wikitext( value_tfr ):done() :tag( "td" ):wikitext( args["spot" .. i] ):done() :done() i = i + 1 end wikitext = wikitext:done() return wikitext end return p