Modul:Routemap: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
RaFaDa20631 (bicara | kontrib)
Indonesian version used
RaFaDa20631 (bicara | kontrib)
Membalikkan revisi 26340061 oleh RaFaDa20631 (bicara)
Tag: Pembatalan
 
(9 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 1:
local i18n = {
errors = {
["parameter-missing"] = "MissingKehilangan parameter!",
["collapsible-block-not-closed"] = "CollapsibleBagian sectionyang notdapat closeddiciutkan properlytidak ditutup dengan benar!",
["collapsible-block-not-open"] = "MissingTidak ada markah start-Collapsible markup!",
["collapsible-block-empty"] = "CollapsibleBagian sectionyang mustdapat notdiciutkan betidak emptyboleh kosong!",
["collapsible-block-no-first-row"] = "InvalidBaris firstpertama rowbagian ofyang collapsibledapat section!diciutkan tidak valid",
["collapsible-block-no-replacement"] = "InvalidBaris collapsiblepengganti replacementyang rowdapat diciutkan tidak valid!",
["colspan-less-rows-than-set"] = "InvalidSet colspan settidak valid!",
},
["error-categories"] = {
default = '[[Category:PagesHalaman withyang errorsmenggunakan ofRoutemap Moduledengan Routemapgalat]]',
["text-images"] = '[[Category:PagesHalaman usingyang menggunakan Routemap withdengan textgambar imagesteks]]',
["separate-navbar"] = '[[Category:PagesHalaman usingyang Routemapmenggunakan withRoutemap adengan separatetemplat navbar templateterpisah]]',
["missing-text-values"] = '[[CategoryKategori:PagesHalaman usingyang menggunakan BSto oratau BSsrws with missingtanpa textnilai valuesteks]]',
["br-tags"] = '[[Category:PagesHalaman usingyang menggunakan BSto, BSsplit, BSsrws, oratau BScvt withdengan brtag tagsbr]]',
["srws"] = '[[Category:PagesHalaman usingyang BSsplitmenggunakan insteadBSsplit ofalih-alih BSsrws]]',
["rmr-error"] = '[[Category:PagesHalaman withdengan badnilai valueburuk foruntuk RoutemapRoutetemplat templateRoutemapRoute]]'
},
text = {
navbar_mini = false, -- for navbar pos 2 only
navbar_text = 'Diagram ini:', -- for navbar pos 2 only
legend_text = 'Legenda',
legend = {
default = '[[Template:Legenda jalur rel',
track = '[[Template:Legenda jalurtata relletak stasiun',
bus = '[[Template:Legenda rute bus',
canal = '[[Template:Legenda transportasi air',
Baris 35:
},
html = {
["cell-icon-fmt"] = '\<div style="%s">[[File:BSicon_%s.svg|x20px|link=%s|alt=|%s]]%s</div>',
| ["cell-overlapicon-fmt"] = '<div class="RMic" style="padding:0%s"|>[[File:BSicon_%s.svg|x20px|link=%s|alt=|%s]]%s</div>',
["cell-overlapiconicon-fmt-with-overlap"] = '<div style="position:absolute;left:0px;top:0px;padding:0%s"><div class="RMov">%s</div><div%s>[[File:BSicon_%s.svg|x20px|link=%s|alt=|%s]]%s</div></div>',
["cell-text-fmt"] = '<div class="RMtx RM%s" style="%s"><div%s style="%s" title="%s">%s%s%s%s%s%s</div></div>',
["cell-icon-fmt-with-overlap"] = '\
| ["cell-overlaptext-fmt"] = '<div class="RMtx RM%s" style="padding:0%s"|><div%s style="position:relative%s" title=">%s</div"><div%s>[[File:BSicon_%s.svg|x20px|link=|alt=|%s]]%s%s</div></div>',
["cell-text-fmt-with-overlap"] = '<div class="RM%s" style="%s"><div class="RMov">%s</div><div class="RMtx RM%s" style="%s"><div%s style="%s" title="%s">%s%s%s%s%s%s</div></div></div>',
["cell-text-fmt"] = '\
["cell-empty-fmt"] = '<div class="RM%s" style="%s">%s</div>',
|style="padding:0;width:%s;min-width:%s;line-height:20px%s" title="%s"|<%s style="transform:scaleX(.9);line-height:.975;display:inline-block%s">%s%s%s%s</%s>',
["cell-overlaptextempty-fmt-with-overlap"] = '<div style="position:absolute;width:%s;min-width:%s;line-height:20px%s"><div titleclass="RMov">%s"</div><div class="RMsp RM%s" style="transform:scaleX(.9);line-height:.975;display:inline-block%s">%s%s%s</%sdiv></div>',
["cell-text-fmt-with-overlap"] = '\
|style="padding:0%s"|<div style="position:relative">%s</div><div style="width:%s;min-width:%s;line-height:20px%s" title="%s"><%s style="transform:scaleX(.9);line-height:.975;display:inline-block%s">%s%s%s%s</%s></div>',
["cell-empty-fmt"] = '\n|style="padding:0;width:%s;min-width:%s;height:20px;min-height:20px%s"|%s',
["cell-empty-fmt-with-overlap"] = '\n|style="padding:0%s"|<div style="position:relative">%s</div><div style="width:%s;min-width:%s;height:20px;min-height:20px%s">%s</div>',
 
["cell-filler-fmt"] = '\n|style<div class="padding:0; width:8pxRMf_"| ||style="padding:0; width:4px; background-color:%s"|><div class="RMfm" ||style="paddingbackground:0; width:8px%s"|></div></div>',
["cell-filler-empty-fmt"] = '\n|style<div class="padding:0;RMf_ width:20pxRM%s" style="%s"|></div>',
 
["row-linfo4-fmt"] = '\
|class="RMl4" style="width:auto;vertical-align:middle;padding:0 3px 0 0;text-align:left;%s"|<div styleclass="display:inline;font-size:90%%;RMsi">%s</div>',-- parameters:linfo4-width, linfo4
["row-linfo3-fmt"] = '<div styleclass="display:inline;font-size:90%%;RMsi">%s</div> ',
["row-rinfo3-fmt"] = ' <div styleclass="display:inline;font-size:90%%;RMsi">%s</div>',
["row-rinfo4-fmt"] = '\
|class="RMr4" style="width:auto;vertical-align:middle;padding:0 0 0 3px;text-align:right;%s"|<div styleclass="display:inline;font-size:90%%;RMsi">%s</div>',-- parameters:rinfo4-width, rinfo4
 
["row-general-fmt"] = '\
|- style="line-height:1" %s\
|class="RMl" colspan="%s" style="width:auto;vertical-align:middle;padding:0;text-align:right;%s"|%s\
|%s style="width:auto;vertical-align:middle;text-align:left;padding:0 %s;%s"|<div styleclass="display:inline;font-size:90%%;RMsi">%s</div>\
|class="RMir" style="width:auto;padding:0%s"|%s\
|%s style="%s"|<div class="RMsi">%s</div>\
{|cellspacing="0" cellpadding="0" style="display: table; width: unset; line-height: 0; padding:0 !important; margin: 0 auto !important"\
|class="RMr" colspan="%s" style="width:auto;vertical-align:middle;padding:0;text-align:left;%s"|%s%s',-- parameters: linfo4-fmt, colspan-left, linfo3+2-width, linfo3+2, linfo1-pad, linfo1-width, linfo1, bg, cells, rinfo1-pad, rinfo1-width, rinfo1, colspan-right, rinfo2+3-width, rinfo2+3, rinfo4-fmt
|- style="display:inline-table;%s"%s\
|}\
|style="width:auto;vertical-align:middle;text-align:right;padding:0 %s;%s"|<div style="display:inline;font-size:90%%;">%s</div>\
|colspan="%s" style="width:auto;vertical-align:middle;padding:0;text-align:left;%s"|%s%s',-- parameters: linfo4-fmt, colspan-left, linfo3+2-width, linfo3+2, linfo1-pad, linfo1-width, linfo1, bg, cells, rinfo1-pad, rinfo1-width, rinfo1, colspan-right, rinfo2+3-width, rinfo2+3, rinfo4-fmt
 
["row-collapsible-begin-fmt"] = '\
|- style="line-height:1"\
|colspan="7" style="padding:0 !important;background-color:%s"|\
{|class="RMcollapse %s%s" cellpadding="0" cellspacing="0" style="%s padding:0 !important;vertical-align:middle;margin:0 !important;white-space:nowrap"',-- parameters: bg, "collapsible "/"mw-collapsible mw-", collapse-state, "float:right" / ""
 
["row-collapsible-end-fmt"] = '\n|}',
Baris 80 ⟶ 73:
["row-collapsible-left-linfo4+3+2-fmt"] = '\
{|cellspacing="0" cellpadding="0" style="line-height:1;width:100%%;padding:0 !important;margin:0 !important"\
|style="width:auto;vertical-align:middle;padding:0 3px 0 1px;text-align:left"| <div styleclass="display:inline;font-size:90%%;RMsi">%s</div>\
|style="width:auto;vertical-align:middle;text-align:right"| %s\
|}',-- parameters: linfo4, linfo3+2
["row-collapsible-right-button-width"] = '45px',-- 72px is the minimal width for [развернуть] / [свернуть] button at 90%. Use 58px for [expand] / [collapse]
["row-collapsible-right-rinfo2+3+4-fmt"] = '\
{|cellspacing="0" cellpadding="0" style="line-height:1;width:100%%;padding:0 !important;margin:0 !important"\
|style="width:auto;vertical-align:middle;text-align:left"| %s\
|style="width:auto;vertical-align:middle;padding:0 1px 0 3px;text-align:right"| <div styleclass="display:inline;font-size:90%%;RMsi">%s</div>\
|}',-- parameters: rinfo2+3, linfo4
["row-collapsible-right-button-fmt"] = '\n| style="width:auto;vertical-align:middle;padding-left:3px;font-size:90%%;min-width:%s;%s" |',--parameters: right-button-width, rinfo4-width
 
["row-collapsible-replace-begin-fmt"] = '\
|- style="line-height:1"\
|colspan="7" style="padding:0 %s"|<div style="position:relative">\
{| cellspacingclass="0" cellpadding="0RMreplace" style="position:absolute;margin:0;bottom:0px;%svertical-align:middle;white-space:nowrap;background-colorsbackground:%s"',-- parameters: "right-button-width 0 0" / "0 0 left-button-width", "right:0px" / "", bg
["row-collapsible-replace-end-fmt"] = '\n|}</div>',
 
["colspan-fmt"] = '%s\n|-\n| colspan="7" style="background-color:%s;text-align:%s;%s"|\n%s',
["empty-row-fmt"] = '\n|-\n| style="width:auto;padding:0 3px 0 0;%s" |\n| style="width:auto;padding: 0;%s" |\n|%s style="width:auto;padding:0 %s;%s" |\n| style="width:auto;padding:0" |\n|%s style="width:auto;padding:0 %s;%s" |\n| style="width:auto;padding:0;%s" |\n| style="width:auto;padding:0 0 0 3px;%s" |'
}
}
Baris 131 ⟶ 124:
blue = '0078BE', ex_blue = '64ACD6',
brown = '8D5B2D', ex_brown = 'B89A7F',
carrot = 'ED9121', ex_carrot = 'F1BA76', excarrot = 'F1BA76', ex_excarrot = 'F3D2A9',
cerulean = '1A8BB9', ex_cerulean = '73B7D3',
cyan = '40E0D0', ex_cyan = '8AEAE1',
deepsky = '00BFFF', ex_deepsky = '7FDFFF',
denim = '00619F', ex_denim = '649EC3',
fuchsia = 'B5198D', ex_fuchsia = 'D173B8',
Baris 148 ⟶ 143:
purple = '8171AC', ex_purple = 'B1A8CB',
red = 'EF161E', ex_red = 'F37176',
ruby = 'CC0066', ex_ruby = 'DE64A1', exruby = 'DE64A1', ex_exruby = 'E89FC4',
saffron = 'FFAB2E', ex_saffron = 'FFC969',
sky = '069DD3', ex_sky = '67C2E3',
steel = 'A1B3D4', ex_steel = 'C4CFE3',
teal = '339999', ex_teal = '82C0C0', exteal = '82C0C0', ex_exteal = 'B1D6D6',
violet = '800080', ex_violet = 'B164B1',
yellow = 'FFD702', ex_yellow = 'FFEB81',
Baris 229 ⟶ 224:
end
return {y, z}
end
 
local function widths(p)
local values = {
['w'] = 160, ['+bs'] = 140, ['bs'] = 120, ['+s'] = 100,
['s'] = 80, ['+db'] = 70, ['+b'] = 60, ['db'] = 50,
['b'] = 40, ['+cd'] = 35, ['+d'] = 30, ['+c'] = 25,
[''] = 20, ['ocd'] = 17.5, ['cd'] = 15, ['od'] = 12.5,
['d'] = 10, ['oc'] = 7.5, ['c'] = 5, ['o'] = 2.5
} -- in px
return values[p]
end
 
Baris 253 ⟶ 237:
 
]]
local tmp, tmp2, cellProps, iconProps, overlapProps, tmp_sep, link, tracking, icontext, iconpre, width = {}, {}, {}, {}, {}, '', '', ''
if #overlapIcons > 0 then
tmp = mw.text.split(overlapIcons[#overlapIcons], '!_')
Baris 259 ⟶ 243:
tmp = mw.text.split(overlapIcons[#overlapIcons], '!@')
overlapIcons[#overlapIcons] = tmp[1]
if #tmp > 1 then link = tmp[2] end
tmp = mw.text.split(icon, '__')
icon = tmp[1]
Baris 269 ⟶ 253:
end
else
tmp = mw.text.split(icon, '[!_]_')
if #tmp > 1 then icon, cellProps = tmp[1], properties(tmp[2]) end
tmp = mw.text.split(icon, '!@')
Baris 282 ⟶ 266:
if textspl ~= 1 then iconpre = mw.text.trim(mw.ustring.sub(icon, 1, textspl - 1)) end
end
cellProps.class = ''
if cellProps.style then cellProps.style = ';'..cellProps.style else cellProps.style = '' end
cellProps.bg = cellProps.bg or cellProps.background or cellProps.bgcolor
Baris 293 ⟶ 278:
if not cellProps.fontsize or rowProps.fontsize or cellProps.fontsize == 'info' then
elseif cellProps.fontsize == 'cmt' or cellProps.fontsize == 'comment' then
cellProps._before, cellProps._after = '<div styleclass="display:inline;font-size:90%;RMsi">', '</div>'
else
cellProps.style = cellProps.style..';font-size:'..cellProps.fontsize
Baris 300 ⟶ 285:
rowProps.align = rowProps.align or {'middle', 'center'}
cellProps.align = alignment(cellProps.align, rowProps.align[1], rowProps.align[2]) or rowProps.align
cellProps.style, cellProps.textfmt = cellProps.style..';vertical-align:'..cellProps.align[1]..';text-align:'..cellProps.align[2], ';vertical-align:'..cellProps.align[1]
else
cellProps.textfmt = ''
cellProps.style, cellProps.textfmt = cellProps.style..';vertical-align:middle;text-align:center', ';vertical-align:middle;text-align:center'
end
end
Baris 308 ⟶ 293:
tmp = {}
for i, v in ipairs(overlapIcons) do
iflocal ithislink ~= #overlapIcons then link = '' end
if link and linki ~= ''#overlapIcons then icontipthislink = link'' end
if thislink and thislink ~= '' then icontip = thislink end
if overlapProps[i].style then overlapProps.style = ';'..overlapProps[i].style else overlapProps.style = '' end
overlapProps[i].bg = overlapProps[i].bg or overlapProps[i].background or overlapProps[i].bgcolor
Baris 315 ⟶ 301:
local tmp_textspl = string.find(v, '%*')
if tmp_textspl then
overlapProps.class = ''
local tmp_icontext, tmp_iconpre = mw.text.trim(mw.ustring.sub(v, tmp_textspl + 1)), ''
if tmp_textspl ~= 1 then tmp_iconpre = mw.text.trim(mw.ustring.sub(v, 1, tmp_textspl - 1)) end
Baris 324 ⟶ 311:
if rowProps.fontsize or cellProps.fontsize or overlapProps[i].fontsize == 'info' then
elseif not overlapProps[i].fontsize then
overlapProps.styleclass = overlapProps.style..';font-size:10px class="RMts"'
elseif overlapProps[i].fontsize == 'cmt' or overlapProps[i].fontsize == 'comment' then
overlapProps._before, overlapProps._after = '<div styleclass="display:inline;font-size:90%;RMsi">', '</div>'
else
overlapProps.style = overlapProps.style..';font-size:'..overlapProps[i].fontsize
Baris 333 ⟶ 320:
cellProps.align = cellProps.align or {'middle', 'center'}
overlapProps.align = alignment(overlapProps[i].align, cellProps.align[1], cellProps.align[2]) or cellProps.align
overlapProps.style, overlapProps.textfmt = overlapProps.style..';vertical-align:'..overlapProps.align[1]..';text-align:'..overlapProps.align[2], ';vertical-align:'..overlapProps.align[1]
else
overlapProps.style, overlapProps.textfmt = overlapProps.style..';vertical-align:middle;text-align:center', ';vertical-align:middle;text-align:center'
end
if overlapProps[i].abbr then
overlapProps.tag = {'<abbr title="'..string.gsub(overlapProps[i].abbr, '"', '&quot;')..'">', '</abbr>'}
else
overlapProps.tag = {'div', 'div'}
end
table.insert(tmp, string.format(i18n.html['cell-overlaptext-fmt'], width,(tmp_iconpre and tmp_iconpre ~= '' and tmp_iconpre or width'_'), overlapProps.style, overlapProps.class, overlapProps.textfmt, icontip, overlapProps.tag[1], overlapProps.textfmt, overlapProps._before, tmp_icontext, overlapProps._after, overlapProps.tag[2]))
width = (widths(tmp_iconpre) or 20)..'px'
table.insert(tmp, string.format(i18n.html['cell-overlaptext-fmt'], width, width, overlapProps.style, icontip, overlapProps.tag[1], overlapProps.textfmt, overlapProps._before, tmp_icontext, overlapProps._after, overlapProps.tag[2]))
else
v = mw.text.trim(v)
Baris 349 ⟶ 335:
if not string.find(v, 'numN%d+') then tracking = tracking..(i18n['error-categories']['text-images'] or i18n['error-categories'].default) end
end
table.insert(tmp, string.format(i18n.html['cell-overlapicon-fmt'], overlapProps.style, v, linkthislink, icontip))
end
end
Baris 355 ⟶ 341:
iconProps.bg = iconProps.bg or iconProps.background or iconProps.bgcolor
if iconProps.bg then iconProps.style = iconProps.style..';background:'..iconProps.bg end
if string.match(icon, '^[%+_]?o?c?d?b?s?w?$') then
width = widths(icon)
if width then
if tmp2[1] then iconProps.style = ';'..iconProps.style end
return string.format(i18n.html['cell-empty-fmt-with-overlap'], cellProps.style, mw.text.trim(table.concat(tmp)), width(string..'px'match(icon, width.'^.+$') or 'px_'), iconProps.style, tracking)
elseif icontext then
iconProps.class = ''
iconProps._before, iconProps._after = cellProps._before, cellProps._after
iconProps.color = iconProps.color or iconProps.colour ; iconProps.bold = iconProps.bold or iconProps.b ; iconProps.italic = iconProps.italic or iconProps.i or iconProps.it
Baris 367 ⟶ 353:
if rowProps.fontsize or cellProps.fontsize or iconProps.fontsize == 'info' then
elseif not iconProps.fontsize then
iconProps.styleclass = iconProps.style..';font-size:10px class="RMts"'
elseif iconProps.fontsize == 'cmt' or iconProps.fontsize == 'comment' then
iconProps._before, iconProps._after = '<div styleclass="display:inline;font-size:90%;RMsi">', '</div>'
else
iconProps.style = iconProps.style..';font-size:'..iconProps.fontsize
Baris 376 ⟶ 362:
cellProps.align = cellProps.align or {'middle', 'center'}
iconProps.align = alignment(iconProps.align, cellProps.align[1], cellProps.align[2]) or cellProps.align
iconProps.style, iconProps.textfmt = iconProps.style..';vertical-align:'..iconProps.align[1]..';text-align:'..iconProps.align[2], ';vertical-align:'..iconProps.align[1]
else
iconProps.style, iconProps.textfmt = iconProps.style..';vertical-align:middle;text-align:center', ';vertical-align:middle;text-align:center'
end
if iconProps.abbr then
iconProps.tag = {'<abbr title="'..string.gsub(iconProps.abbr, '"', '&quot;')..'">', '</abbr>'}
else
iconProps.tag = {'div', 'div'}
end
if tmp2[1] then iconProps.style = ';'..iconProps.style end
return string.format(i18n.html['cell-text-fmt-with-overlap'], (iconpre and iconpre ~= '' and iconpre or '_'), cellProps.style, mw.text.trim(table.concat(tmp)), width,(iconpre widthand iconpre ~= '' and iconpre or '_'), iconProps.style, iconProps.class, iconProps.textfmt, icontip, iconProps.tag[1], iconProps.textfmt, iconProps._before, icontext, iconProps._after, tracking, iconProps.tag[2])
width = (widths(iconpre) or 20)..'px'
return string.format(i18n.html['cell-text-fmt-with-overlap'], cellProps.style, mw.text.trim(table.concat(tmp)), width, width, iconProps.style, icontip, iconProps.tag[1], iconProps.textfmt, iconProps._before, icontext, iconProps._after, tracking, iconProps.tag[2])
else
if iconProps.style ~= '' then iconProps.style = string.gsub(' style="'..iconProps.style..'"', '";', '"', 1) end
Baris 396 ⟶ 381:
end
end
if string.match(icon, '^[%+_]?o?c?d?b?s?w?$') then
width = widths(icon)
return string.format(i18n.html['cell-empty-fmt'], width(string..'px'match(icon, width.'^.+$') or 'px_'), cellProps.style, tracking)
if width then
return string.format(i18n.html['cell-empty-fmt'], width..'px', width..'px', cellProps.style, tracking)
else
if link and link ~= '' then icontip = link end
if icontext then
if not cellProps.fontsize and not rowProps.fontsize then cellProps.styleclass = cellProps.style..';font-size:10px class="RMts"' end
if cellProps.abbr then
cellProps.tag = {'<abbr title="'..string.gsub(cellProps.abbr, '"', '&quot;>')..'">', '</abbr>'}
else
cellProps.tag = {'div', 'div'}
end
return string.format(i18n.html['cell-text-fmt'], width,(iconpre and iconpre ~= '' and iconpre or width'_'), cellProps.style, cellProps.class, cellProps.textfmt, icontip, cellProps.tag[1], cellProps.textfmt, cellProps._before, icontext, cellProps._after, tracking, cellProps.tag[2])
width = (widths(iconpre) or 20)..'px'
return string.format(i18n.html['cell-text-fmt'], width, width, cellProps.style, icontip, cellProps.tag[1], cellProps.textfmt, cellProps._before, icontext, cellProps._after, tracking, cellProps.tag[2])
else
if string.find(icon, 'num') then
Baris 419 ⟶ 402:
end
 
local function fillercell(code, height)
--Creates a 5px-high row.
--Values in icon pattern can only be [blank], d, [BSicon color] or #[hex triplet].
height = mw.text.trim(height)
if code == '' then
if widthheight ~= '' then
return string.format(i18n.html['cell-filler-empty-fmt'], '20px', '20px')
if tonumber(height) then height = height..'px' end
elseif code == 'd' then
height = 'height:'..height..';min-height:'..height
return string.format(i18n.html['cell-filler-empty-fmt'], '10px', '10px')
end
if string.match(code, '^[%+_]?o?c?d?b?s?w?$') then
return string.format(i18n.html['cell-filler-empty-fmt'], (string.match(code, '20px^.+$',) or '20px_'), height)
elseif mw.ustring.sub(code,1,1) == '#' then
return string.format(i18n.html['cell-filler-fmt'], height, code)
else
return string.format(i18n.html['cell-filler-fmt'], height, '#'..RGBbyCode(code))
end
end
Baris 494 ⟶ 480:
-- The below parameter functions are passed through to the cells.
if result.rowProp.fontsize == 'cmt' or result.rowProp.fontsize == 'comment' then
result.rowProp._before, result.rowProp._after = '<spandiv styleclass="font-size:90%;RMsi">', '</spandiv>'
end
if result.rowProp.align then
Baris 503 ⟶ 489:
if type(filler) == 'string' then
result.style = ';font-size:0px'
for i, v in ipairs(icons) do table.insert(result['cells'], fillercell(v, filler)) end--no !@ or !~ for filler row
result.rowstyle = 'height:' .. filler .. ';min-height:' .. filler --row parameter before any cells
for i, v in ipairs(icons) do table.insert(result['cells'], fillercell(v)) end--no !@ or !~ for filler row
else
result.style = ''
Baris 522 ⟶ 507:
if positive(result.rowProp.italic) then result.style = result.style..';font-style:italic' end
if positive(result.rowProp.bold) then result.style = result.style..';font-weight:bold' end
if result.rowProp.align then
result.style = result.style..';vertical-align:'..result.rowProp.align[1]..';text-align:'..result.rowProp.align[2]
else
result.style = result.style..';vertical-align:middle;text-align:center'
end
if result.rowProp.fontsize and result.rowProp._after == '' and result.rowProp.fontsize ~= 'info' then
result.style = result.style..';font-size:'..result.rowProp.fontsize
Baris 533 ⟶ 513:
return result
else
return string.format(i18n.html['row-general-fmt'], linfo4_fmt, lcolspan, '', result['linfo3+2'], q.linfo1_pad, '', result['linfo1'], result.style, result.rowstyle,
result['cells'], q.rinfo1_pad, '', result['rinfo1'], rcolspan, '', result['rinfo2+3'], rinfo4_fmt)
end
Baris 539 ⟶ 519:
 
--↓ This table handles diagram rows beginning with a hyphen ("-").
q = {collapsibles = -1, text_width = {'', '', '', '', '', ''}, linfo1_pad = '3pxclass="RMl1"', rinfo1_pad = '3pxclass="RMr1"', bg = '#F9F9F9'}
q.isKeyword = function(pattern, i, rows, justTest)
if mw.ustring.sub(pattern, 1, 1) ~= '-' then if justTest then return false else return nil end end--not a valid keyword
Baris 554 ⟶ 534:
if tmp then
if tmp == 'endCollapsible' then return formaterror('collapsible-block-empty')
else return formaterror('collapsible-block-no-first-row') .. q.isKeyword(rows[i], i, rows) --no valid keywords that can follow "startCollapsible"
end
end
Baris 571 ⟶ 551:
if tmp['linfo4'] ~= '' or tmp['linfo3+2'] ~= '' then linfo4_3_2_fmt = string.format(i18n.html['row-collapsible-left-linfo4+3+2-fmt'], tmp['linfo4'], tmp['linfo3+2']) end
result = result .. string.format(i18n.html['row-general-fmt'], string.format(i18n.html['row-collapsible-left-button-fmt'], i18n.html['row-collapsible-left-button-width'], q.text_width[1]),
'1', q.text_width[2], linfo4_3_2_fmt, q.linfo1_pad, q.text_width[3], tmp['linfo1'], tmp.style, '', tmp['cells'], '', '', '', '1', '', '', string.format(i18n.html['row-rinfo4-fmt'], '', ''))
else
if tmp['rinfo4'] ~= '' or tmp['rinfo2+3'] ~= '' then rinfo2_3_4_fmt = string.format(i18n.html['row-collapsible-right-rinfo2+3+4-fmt'], tmp['rinfo2+3'], tmp['rinfo4']) end
result = result .. string.format(i18n.html['row-general-fmt'], string.format(i18n.html['row-linfo4-fmt'], q.text_width[1], tmp['linfo4']),
'1', q.text_width[2], tmp['linfo3+2'], q.linfo1_pad, q.text_width[3], tmp['linfo1'], tmp.style, '', tmp['cells'], q.rinfo1_pad, q.text_width[4], tmp['rinfo1'],
'1', q.text_width[5], rinfo2_3_4_fmt, string.format(i18n.html['row-collapsible-right-button-fmt'], i18n.html['row-collapsible-right-button-width'], q.text_width[6]))
end
Baris 589 ⟶ 569:
if tmp['linfo4'] ~= '' or tmp['linfo3+2'] ~= '' then linfo4_3_2_fmt = string.format(i18n.html['row-collapsible-left-linfo4+3+2-fmt'], tmp['linfo4'], tmp['linfo3+2']) end
result = result .. string.format(i18n.html['row-general-fmt'], string.format(i18n.html['row-linfo4-fmt'], '', ''), '1', q.text_width[2], linfo4_3_2_fmt,
q.linfo1_pad, q.text_width[3], tmp['linfo1'], tmp.style, '', tmp['cells'], '', '', '', '1', '', '', string.format(i18n.html['row-rinfo4-fmt'], '', ''))
else
if tmp['rinfo4'] ~= '' or tmp['rinfo2+3'] ~= '' then rinfo2_3_4_fmt = string.format(i18n.html['row-collapsible-right-rinfo2+3+4-fmt'], tmp['rinfo2+3'], tmp['rinfo4']) end
result = result .. string.format(i18n.html['row-general-fmt'], string.format(i18n.html['row-linfo4-fmt'], q.text_width[1], tmp['linfo4']), '1', q.text_width[2],
tmp['linfo3+2'], q.linfo1_pad, q.text_width[3], tmp['linfo1'], tmp.style, '', tmp['cells'], q.rinfo1_pad, q.text_width[4], tmp['rinfo1'], '1', q.text_width[5],
rinfo2_3_4_fmt, string.format(i18n.html['row-rinfo4-fmt'], '', ''))
end
Baris 626 ⟶ 606:
end
q['filler'] = function(params, i, rows)
local tmp, height = table.concat(params, '-', 3), (params[2] or '5px')
if #params < 3 or tmp == '' then return formaterror('parameter-missing') end--TODO: specify the name of the parameter
if params[2] ~= '' then height = params[2] end
Baris 682 ⟶ 662:
end
tmp = {}
 
local index = 0
local rows = {}
Baris 710 ⟶ 690:
q.text_width[1] = q.text_width[1] .. 'min-width:' .. i18n.html['row-collapsible-left-button-width'] .. ';'
else
q.text_width[6] = q.text_width[6] .. 'min-width:' .. i18n.html['row-collapsible-right-button-width'] .. ';'
end
end
-- ↓ empty row to set column widths; ↑ if q.collapsibles ≠ -1 and there are collapsible sections, leftmost or rightmost column should be wide enough to accomodate the button
table.insert(tmp, string.format(i18n.html['empty-row-fmt'], q.text_width[1], q.text_width[2], q.linfo1_pad, q.text_width[3], q.rinfo1_pad, q.text_width[4], q.text_width[5], q.text_width[6]))
return mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(table.concat(tmp), 'style=";* *', 'style="'), '\n| *style="" *|', '\n|'), ' ?style=""', ''), ' ?colspan="1"', ''), '<div class="RMsi"></div>', ''), 'class="RM%+', 'class="RM_'), '(class="[^"]* RM)%+', '%1_')
return table.concat(tmp)
end
 
local function getArgNums(prefix, args)
-- Copied from Module:Infobox on enwiki.
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix were 'data', and
-- 'data1', 'data2', and 'data5' existed, this would return {1, 2, 5}.
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
 
Baris 751 ⟶ 731:
table.sort(mapnums)
end
local valuesclasses = {}
args['title bg color'] = args['title bg color'] or args['title bg'] or args['title-bg'] or '#27404E'
args['title color'] = args['title color'] or args['title-color'] or greatercontrast{args['title bg color'], '#FFF', rgb_black}
args.legend = args.legend or ''
local navbar = require('Module:Navbar').navbar
local navtable = {}
args.navbar = args.navbar or args.tnavbar
if args.navbar then
navtable = {args.navbar, mini = i18n.text.navbar_mini, text = i18n.text.navbar_text}
Baris 770 ⟶ 750:
args.collapsible = '0'
else
result = result .table.insert(classes, 'class="collapsible ')
if args.collapse then result = result .table.insert(classes, 'collapsed') end
result = result .. '" '
end
args.float = args.float or 'right'
Baris 784 ⟶ 763:
args.fontsize2 = 10000/88
if args.inline then
table.insert(classes, 'RMinline')
args.inline2 = 'float:none;width:100%;margin:0;border:none;'
args.fontsize = 100
else
table.insert(classes, 'RMbox')
args.inline2 = 'box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);'
args.fontsize = 88 -- as above: CSS rule for .infobox in %
end
args.bg = args.bg or '#F9F9F9'
args.style = args.style or ''
result = result .. 'class="' .. table.concat(classes, ' ') .. '" cellspacing="0" cellpadding="0" style="float:' .. args.float .. ';clear:' .. args.float .. ';margin-top:0;margin-bottom:1em;' .. args.margin .. 'empty-cells:show;border-collapse:collapse;font-size:' .. args.fontsize .. '%;background:' .. args.bg .. ';' .. args.inline2 .. args.style .. '"'
args.title = args.title or ''
if args.inline or args.title == 'no' or args.title == '0' then
Baris 819 ⟶ 798:
end
end
result = result .. 'font-size:'..args.fontsize2..'%;">' .. args.title .. '</div></div>'
end
args.top = args.top or args['on top']
Baris 834 ⟶ 813:
args.legend = i18n.text.legend[args.legend2] or ((args.legend2 ~= '') and ('[['..args.legend) or i18n.text.legend.default)
args.legend = args.legend .. '|' .. (args['legend alt'] or i18n.text.legend_text) .. ']]'
result = result .. '<div class="selfreference noprint" style="text-align:right;font-size:9097%;">' .. args.legend .. '</div>'
end
if args.inline then args.padding2 = '0px' else args.padding2 = '0px 6px' end
Baris 844 ⟶ 823:
if args['map'..v..'-title'] then
args.header_margin = '0'
if k == 1 then args.border_header = 'border-bottom: 5px solid '..args.bg..';' else args.border_header = 'border-top: 5px solid '..args.bg..'; border-bottom: 5px solid '..args.bg..';' end
if positive(args['map'..v..'-collapsible']) then
args.header_margin = '0 55px'
args.ending = '\n|}'
if positive(args['map'..v..'-collapse']) or positive(args['map'..v..'-collapsed']) then args.map_collapsed = ' mw-collapsed autocollapse' else args.map_collapsed = '' end
result = result..'\n|-\n|\n{|class="mw-collapsible'..args.map_collapsed..'" cellpadding="0" cellspacing="0" style="display: table; min-width:100%; margin:0 auto;"'
end
if args.inline then args.header_style2 = ' style="line-height:normal;"' else args.header_style2 = '' end
result = result..'\n|-'..args.header_style2..'\n!style="'..args.border_header..'padding:3px 5px; text-align:center; vertical-align:middle; color:'..rgb_black..'; background-color: #EEEEEE" | <div style="margin:'..args.header_margin..';font-size:'..10000/args.fontsize..'%;">'..args['map'..v..'-title']..'</div>'
args.border_top = ''
else
if k == 1 then args.border_top = '' else args.border_top = 'border-top: 5px solid '..args.bg..';' end
end
result = result .. '\n|-\n|style="'..args.border_top..'padding:' .. args.padding2 .. '"|\n{|cellpadding="0" cellspacing="0" class="nogrid routemap" style="padding:0px;border:0px;background:transparent;white-space:nowrap;line-height:1.2;font-size:'..(args.fontsize2 * 0.95)..'%;margin:auto"\n'..localroute(args[prefix(v)], (args['tw'..v] or args['text-width'..v] or args['text width'..v] or args.tw or ''), args.bg, args.process)..'\n|}'..args.ending
end
args.bottom = args.bottom or args.footnote
Baris 884 ⟶ 863:
end
style = style or ''
local result = '&#32;<table cellspacing="0" cellpadding="0" class="RMsplit" style="font-size:80%; font-weight:inherit; color:inherit; background-color:transparent; margin-top:-2px; margin-bottom:-2px; display:inline-table; vertical-align:middle; text-align:'..align
if italic or it == 'all' then result = result..';font-style:italic' end
if bold then result = result..';font-weight:bold' end
Baris 890 ⟶ 869:
result = result..';'..style..'">'..rowstart..lh
if line then result = result..';border-bottom:1px solid gray' end
local bgpad = ';padding-left:0.5em;padding-right:0.5em'
local function bgtext(v)
return ';color:'..greatercontrast{v, '#FFF', rgb_black}
end
if bg1 then
result = result..bgpad..bgtext(bg1)..';background-color:'..bg1
elseif bg2 then
result = result..bgpad
Baris 911 ⟶ 890:
if bs == 'srws' then
if stn then
link = t1stn..' '..t2t1..' '..stnt2
else
link = t1..'Stasiun '..t2t1..' railway station'..t2
end
elseif bs == 'cvt' then
Baris 924 ⟶ 903:
['ch'] = 20.1168,
['mi;ch'] = 80,
['m'] = 1 / 0.9144,
['yd'] = 0.9144,
['ft'] = 0.3048,
}
local sf = { -- 10 ^ floor(log10(cvt[inp]) + 0.5); or 10 ^ floor(log10(cvt[inps[1]] * cvt[inp]) + 0.5) for dual-unit inputs. this corrects the accuracy of result so that it usually has same significant figures
['mi'] = 1,
['ch'] = 10,
['mi;ch'] = 1/100.01,
['m'] = 1,
['yd'] = 1,
['ft'] = .1/10,
}
if not inp then inp = 'mi' end
Baris 958 ⟶ 937:
t1 = v1..'&nbsp;'..outp
v1 = tonumber(v1)
t2 = floor(v1 / cvt[inps[1]])..'&nbsp;'..inps[1]..'&nbsp;'..floor(v1 % cvt[inps[1]] / cvt[inps[1]] * cvt[inp] * mult * sf[inp] + 0.5) / mult / sf[inp]..'&nbsp;'..inps[2]
else
v1 = split(trim(v1), ';')
t1 = v1[1]..'&nbsp;'..inps[1]..'&nbsp;'..v1[2]..'&nbsp;'..inps[2]
t2 = floor((tonumber(v1[1]) * cvt[inps[1]] + tonumber(v1[2]) * cvt[inps[1]] / cvt[inp]) * mult / sf[inp] + 0.5) / mult * sf[inp]..'&nbsp;'..outp
end
else
if swap then
v2 = floor(tonumber(v1) / cvt[inp] * mult * sf[inp] + 0.5) / mult / sf[inp]
inp, outp = outp, inp
else
v2 = floor(tonumber(v1) * cvt[inp] * mult / sf[inp] + 0.5) / mult * sf[inp]
end
t1 = v1..'&nbsp;'..inp
Baris 985 ⟶ 964:
result = result..rowend..rowstart..lh
if bg2 then
result = result..bgpad..bgtext(bg2)..';background-color:'..bg2
elseif bg1 then
result = result..bgpad
Baris 1.022 ⟶ 1.001:
args[4] = args[4] or args.it or args.i
args[5] = args[5] or args.b
return base(args[1],args[2],args[3],nil,nil,args[4],nil,args[5],args.align,args.style,args.bg1,args.bg2,args.line,'105%','92%inherit','0.9',nil,nil,nil,'to')
end
 
Baris 1.031 ⟶ 1.010:
args[4] = args[4] or args.it or args.i
args[5] = args[5] or args.b
return base(args[1],args[2],args[3],nil,args[4],nil,nil,args[5],args.align,args.style,args.bg1,args.bg2,args.line,'inherit','inherit','0.9',nil,nil,nil,'split')
end
 
Baris 1.040 ⟶ 1.019:
args[4] = args[4] or args.it or args.i
args[5] = args[5] or args.b
return base(args[1],args[2],nil,args[3],args[4],nil,nil,args[5],args.align,args.style,args.bg1,args.bg2,args.line,'inherit','inherit','0.9',nil,nil,nil,'srws')
end
 
Baris 1.046 ⟶ 1.025:
 
function p._BScvt(args)
return base(nil,nil,nil,nil,nil,nil,args.alt,nil,args.align,args.style,args.bg1,args.bg2,args.line,'inherit','inherit','0.9',args[1],args[2],args['in'],'cvt')
end
 
Baris 1.222 ⟶ 1.201:
 
Creates Routemap syntax for a diagram row based on parameters.
Simplified version; an in-app upgrade to the full version costs US$0.99.
Intended to be used to substitute legacy templates.
Note that for compatibility the link and sidebar parameter names are different.
Baris 1.305 ⟶ 1.283:
 
]]
local org = mw.text.unstripNoWiki(frame.args[1]) or 'Paste legacy RDT markupsmarkup between the nowiki tags')
local res = org
res = string.gsub(res, '{{[Bb][Ss]%-?map', '{{Routemap') -- "%-" is an escape for hyphen which is used as "between" in pattern.
res = string.gsub(res, '{|%s?{{[Rr]ailway line header}}', '{{Routemap')
res = string.gsub(res, '{{[Bb][Ss]%-header%d?|', '{{safesubst:BS-header/safesubst|') -- "%d?" means optional digit in case use of variant template like BS-header3.
res = string.gsub(res, '{{[Bb][Ss]%-table%d?}}', '|map =')
res = string.gsub(res, '{{[Bb][Ss](%d?)(%d?)|', '{{safesubst:BS%1%2/safesubst|')
res = string.gsub(res, '{{[Bb][Ss](%d?)(%d?)%-replace|', '!replace{{safesubst:BS%1%2/safesubst|')
res = string.gsub(res, '{{[Bb][Ss](%d?)(%d?)%-startCollapsible|', '-startCollapsible-collapsed\n{{safesubst:BS%1%2/safesubst|')
res = string.gsub(res, '{{[Bb][Ss](%d?)(%d?)%-sc|', '-startCollapsible-collapsed\n{{safesubst:BS%1%2/safesubst|')
res = string.gsub(res, '{{[Bb][Ss](%d?)(%d?)%text|', '{{safesubst:BS%1%2text/safesubst|')
res = string.gsub(res, '{{[Bb][Ss](%d?)(%d?)%-2|', '{{safesubst:BS%1%2-2/safesubst|')
res = string.gsub(res, '{{[Bb][Ss](%d?)(%d?)%-2replace|', '!replace{{safesubst:BS%1%2-2|')
res = string.gsub(res, '{{[Bb][Ss](%d?)(%d?)%-2sc|', '-startCollapsible-collapsed\n{{safesubst:BS%1%2-2|')
res = string.gsub(res, '{{!}}}', '-endCollapsible-')
res = string.gsub(res, '{{[Ee]nd}}', '-endCollapsible-')
res = string.gsub(res, '|}\n?|}', '}}') -- Replace ending of Railway line header map setup.
res = string.gsub(res, '{{[Bb][Ss]%-colspan}}\n{{safesubst', '{{safesubst') -- BS-colspan is unnecessary and would cause error in Routemap.
res = string.gsub(res, '{{[Bb][Ss]%-colspan}}\n%-%-%-%-', '-colspan-2\n----')