モジュール:Location map/sandbox 2016-07-24T15:59:36 UTC (←継承元: en:Module:Location map 2016年7月4日 (月) 16:32(UTC)より) の版より。 WP:AN/PE (差分) に基づく。
template>Rxy 細 (「モジュール:Location map」を保護しました: 影響が特に大きいテンプレート: 現時点で 22654 ページからの読み込み ([編集=管理者のみに許可] (無期限) [移動=管理者のみに許可] (無...) |
template>Rxy (モジュール:Location map/sandbox 2016-07-24T15:59:36 UTC (←継承元: en:Module:Location map 2016年7月4日 (月) 16:32(UTC)より) の版より。 WP:AN/PE (差分) に基づく。) |
||
12行目: | 12行目: | ||
function p.getMapParams(map, frame) | function p.getMapParams(map, frame) | ||
if not map then | if not map then | ||
error(' | error('Location mapの名前は必ず指定しなければなりません。', 2) | ||
end | end | ||
local moduletitle = mw.title.new('Module:Location map/data/' .. map) | local moduletitle = mw.title.new('Module:Location map/data/' .. map) | ||
if not moduletitle then | if not moduletitle then | ||
error(' | error(string.format('%qはLocation mapの名前として無効です。', map), 2) | ||
elseif moduletitle.exists then | elseif moduletitle.exists then | ||
local mapData = mw.loadData('Module:Location map/data/' .. map) | local mapData = mw.loadData('Module:Location map/data/' .. map) | ||
33行目: | 33行目: | ||
local cache = {} | local cache = {} | ||
if type(frame) ~= 'table' or type(frame.expandTemplate) ~= 'function' then | if type(frame) ~= 'table' or type(frame.expandTemplate) ~= 'function' then | ||
error(' | error('古いLocation mapを使うときにフレームが存在しなければなりません。') | ||
end | end | ||
return function(name, params) | return function(name, params) | ||
48行目: | 48行目: | ||
end | end | ||
else | else | ||
error(' | error('Location mapのモジュール「"Module:Location map/data/' .. map .. '"」もしくはテンプレート「"Template:Location map ' .. map .. '"」が作成されていません。', 2) | ||
end | end | ||
end | end | ||
76行目: | 76行目: | ||
if decimal then | if decimal then | ||
if degrees then | if degrees then | ||
error(' | error(direction .. 'において10進数形式と度分秒は両方指定できません。', 2) | ||
elseif minutes then | elseif minutes then | ||
error(' | error(direction .. 'において分は度分秒方式でのみ指定してください。', 2) | ||
elseif seconds then | elseif seconds then | ||
error(' | error(direction .. 'において秒は度分秒方式でのみ指定してください。', 2) | ||
elseif hemisphere then | elseif hemisphere then | ||
error(' | error(direction .. 'において半球は度分秒方式でのみ指定してください。', 2) | ||
end | end | ||
local retval = tonumber(decimal) | local retval = tonumber(decimal) | ||
88行目: | 88行目: | ||
return retval | return retval | ||
end | end | ||
error(' | error(direction .. 'の値"' .. decimal .. '"は無効です。', 2) | ||
elseif seconds and not minutes then | elseif seconds and not minutes then | ||
error( | error(direction .. 'の秒を指定する時は分も指定してください。', 2) | ||
elseif not degrees then | elseif not degrees then | ||
if minutes then | if minutes then | ||
error( | error(direction .. 'の分を指定する時は度も指定してください。', 2) | ||
elseif hemisphere then | elseif hemisphere then | ||
error( | error(direction .. 'の半球を指定する時は度も指定してください。', 2) | ||
end | end | ||
return nil | return nil | ||
101行目: | 101行目: | ||
decimal = tonumber(degrees) | decimal = tonumber(degrees) | ||
if not decimal then | if not decimal then | ||
error(' | error(direction .. 'の度の値"' .. degrees .. '"は無効です。', 2) | ||
elseif minutes and not tonumber(minutes) then | elseif minutes and not tonumber(minutes) then | ||
error(' | error(direction .. 'の分の値"' .. minutes .. '"は無効です。', 2) | ||
elseif seconds and not tonumber(seconds) then | elseif seconds and not tonumber(seconds) then | ||
error(' | error(direction .. 'の秒の値"' .. seconds .. '"は無効です。', 2) | ||
end | end | ||
decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 | decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 | ||
111行目: | 111行目: | ||
local multiplier = hemisphereMultipliers[direction][hemisphere] | local multiplier = hemisphereMultipliers[direction][hemisphere] | ||
if not multiplier then | if not multiplier then | ||
error(' | error(direction .. 'の半球である"' .. hemisphere .. '"は無効です。', 2) | ||
end | end | ||
decimal = decimal * multiplier | decimal = decimal * multiplier | ||
234行目: | 234行目: | ||
retval = retval .. '</div></div>' | retval = retval .. '</div></div>' | ||
if args.caption_undefined then | if args.caption_undefined then | ||
mw.log(' | mw.log('caption_undefinedは廃止されたパラメータです。') | ||
local parent = frame:getParent() | local parent = frame:getParent() | ||
if parent then | if parent then | ||
243行目: | 243行目: | ||
end | end | ||
if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then | if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then | ||
mw.log( | mw.log(map() .. 'において廃止されたパラメータです。') | ||
retval = retval .. '' | retval = retval .. '' | ||
end | end | ||
if string.find(map('name'), '|', 1, true) then | if string.find(map('name'), '|', 1, true) then | ||
mw.log( | mw.log(map() .. 'のLocation map名でパイプを使用しています。') | ||
retval = retval .. '' | retval = retval .. '' | ||
end | end | ||
346行目: | 346行目: | ||
end | end | ||
if not longitude then | if not longitude then | ||
error(' | error('緯度の値が指定されていません。') | ||
end | end | ||
if not latitude then | if not latitude then | ||
error(' | error('経度の値が指定されていません。') | ||
end | end | ||
local builder = mw.html.create() | local builder = mw.html.create() | ||
364行目: | 364行目: | ||
end | end | ||
if args.skew or args.lon_shift or args.markhigh then | if args.skew or args.lon_shift or args.markhigh then | ||
mw.log(' | mw.log('呼び出しにおいて廃止されたパラメータです。') | ||
local parent = frame:getParent() | local parent = frame:getParent() | ||
if parent then | if parent then | ||
mw.log( | mw.log(parent:getTitle() .. 'の親です。') | ||
end | end | ||
mw.logObject(args, 'args') | mw.logObject(args, 'args') | ||
383行目: | 383行目: | ||
end | end | ||
if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then | if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then | ||
mw.log(' | mw.log('外部フラグ設定無しに地図外にマークが置かれました。 x = ' .. x .. ', y = ' .. y) | ||
local parent = frame:getParent() | local parent = frame:getParent() | ||
if parent then | if parent then | ||
mw.log( | mw.log(parent:getTitle() .. 'の親です。') | ||
end | end | ||
mw.logObject(args, 'args') | mw.logObject(args, 'args') | ||
402行目: | 402行目: | ||
end | end | ||
return builder:node(markOuterDiv(x, y, imageDiv, labelDiv)) | return builder:node(markOuterDiv(x, y, imageDiv, labelDiv)) | ||
end | |||
local function switcherSeparate(s) | |||
if s == nil then return {} end | |||
local retval = {} | |||
for i in string.gmatch(s .. '#', '([^#]*)#') do | |||
i = mw.text.trim(i) | |||
retval[#retval + 1] = (i ~= '' and i) | |||
end | |||
return retval | |||
end | end | ||
423行目: | 433行目: | ||
end | end | ||
if type(map) == 'table' then | if type(map) == 'table' then | ||
local altmaps = switcherSeparate(args.AlternativeMap) | |||
if #altmaps > #map then | |||
error(string.format('%dのAlternativeMapsが提供されていますが、%dの地図のみの提供になります。', #altmaps, #map)) | |||
end | |||
local overlays = switcherSeparate(args.overlay_image) | |||
if #overlays > #map then | |||
error(string.format('%dのoverlay_imagesが提供されていますが、%dの地図のみの提供になります。', #overlays, #map)) | |||
end | |||
local outputs = {} | local outputs = {} | ||
args.autoSwitcherLabel = true | args.autoSwitcherLabel = true | ||
for k,v in ipairs(map) do | for k,v in ipairs(map) do | ||
args.AlternativeMap = altmaps[k] | |||
args.overlay_image = overlays[k] | |||
outputs[k] = p.main(frame, args, v) | outputs[k] = p.main(frame, args, v) | ||
end | end |