Selasa, 29 September 2026
23:32 WIB
TERKINI
Nasional Saksi Ungkap Penolakan Uang 1 Juta Dolar AS untuk Pansus Haji oleh Dua Tokoh Megapolitan Demo Buruh di DPR Lumpuhkan Gatot Subroto: Simak Jalur Alternatifnya Megapolitan Komunikasi Terputus Jadi Akar Tabrakan KA Argo Bromo Anggrek di Bekasi Regional KPU Batam Musnahkan Ribuan Surat Suara Rusak, Jaga Integritas Pemilu Regional Gagal Menulis Ulang: Konten Berita Tidak Memadai Way Kanan Kepala Toko Alfamart Way Kanan Diduga Gelapkan Rp141 Juta, Dua Pelaku Ditangkap Hiburan Lisa BLACKPINK Ukir Sejarah: Solois Asia Pertama Sabet Best Pop MTV VMAs 2026 Ekonomi Dan Bisnis Harga Emas Antam Turun Drastis Rp17 Ribu, Cek Daftar Lengkap 29 September 2026 Hiburan TXT Gegerkan Penggemar dengan Mini Album 'PERFECT STORM' dan Tur Dunia Termasuk Jakarta Berita Fenomena Unik 'Hujan Salju' di Lapangan Sempur Bogor, Warga Sambut Riang Nasional Saksi Ungkap Penolakan Uang 1 Juta Dolar AS untuk Pansus Haji oleh Dua Tokoh Megapolitan Demo Buruh di DPR Lumpuhkan Gatot Subroto: Simak Jalur Alternatifnya Megapolitan Komunikasi Terputus Jadi Akar Tabrakan KA Argo Bromo Anggrek di Bekasi Regional KPU Batam Musnahkan Ribuan Surat Suara Rusak, Jaga Integritas Pemilu Regional Gagal Menulis Ulang: Konten Berita Tidak Memadai Way Kanan Kepala Toko Alfamart Way Kanan Diduga Gelapkan Rp141 Juta, Dua Pelaku Ditangkap Hiburan Lisa BLACKPINK Ukir Sejarah: Solois Asia Pertama Sabet Best Pop MTV VMAs 2026 Ekonomi Dan Bisnis Harga Emas Antam Turun Drastis Rp17 Ribu, Cek Daftar Lengkap 29 September 2026 Hiburan TXT Gegerkan Penggemar dengan Mini Album 'PERFECT STORM' dan Tur Dunia Termasuk Jakarta Berita Fenomena Unik 'Hujan Salju' di Lapangan Sempur Bogor, Warga Sambut Riang

Modul:Attached KML

Wikimedia module

Bagikan:
Dokumentasi modulbuatsegarkan
Anda dapat membuat halaman dokumentasi untuk buat pada modul Scribunto ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
-- Note: Originally written on English Wikipedia as [[w:en:Module:Attached_KML]]
-- ##### Localisation (L10n) settings #####
localL10n={
-- Template parameter names
-- (replace values in quotes with local parameter names)
para={
display="display",
from="from",
header="header",
title="title",
wikidata="wikidata",
demo="demo",
},
-- Other configuration settings
config={
-- controls the format used for inline display, can be set to "box" (default) or "line"
-- "box" example: https://en.wikipedia.org/wiki/Templat:Attached_KML
-- "line" example: https://sv.wikipedia.org/wiki/Mall:KML
inline_format="box",
},
-- Other strings
str={
inline="inline",-- used with display parameter: (|display=inline) or (|display=title) or (|display=inline,title) or (|display=title,inline)
title="title",-- (as above)
dsep=",",-- separator between inline and title (comma in the example above)
kml_prefix="Templat:Attached KML/",-- local KML files are stored as subpages of this location
default_title="Peta rute",-- default title for links at top of page, when title parameter not used in transclusion
default_header="",-- default header for links in inline box, when header parameter not used in transclusion
kml_file="Berkas KML",-- text to display for link to raw KML file
edit="sunting",-- text to display for link to edit KML file
help="bantuan",-- text to display for help page link
help_location="Bantuan:KML",-- page to link to for help page link
err_prepend="Attached KML",-- text to prepend to the error messages, when shown at top of page (display=title)
cat={-- tracking categories: full wikimarkup required, or set to the empty string ("") to not to track the condition
wikidata_kml="[[Kategori:Artikel yang menggunakan KML dari Wikidata]]",-- tracks mainspace articles using KML from Wikidata
local_kml="[[Kategori:Artikel yang menggunakan KML tidak dari Wikidata]]",-- tracks mainspace articles not using KML from Wikidata
error_mqid="[[Kategori:Galat KML|M]]",-- tracks malformed_qid error
error_badqid="[[Kategori:Galat KML|W]]",-- tracks bad_qid error
error_noitem="[[Kategori:Galat KML|N]]",-- tracks no_item error
error_from="[[Kategori:Galat KML|F]]",-- tracks bad_from error
error_nokml="[[Kategori:Galat KML|K]]",-- tracks no_kml error
},
line={-- these strings are only needed if using 'inline_format = "line"' configuration
start="",-- wikitext to display at start of line, may include image markup, should start with a space
separator="",-- text to display between links to external mapping providers, should include spaces
},
}
}
L10n.str.err={-- error messages
malformed_qid="Error: malformed  item id in <code><nowiki>|"..L10n.para.wikidata.."=</nowiki></code>",-- item id doesn't match pattern (number with Q prefix)
bad_qid="Error: item specified on Wikidata, or in <code><nowiki>|"..L10n.para.wikidata.."=</nowiki></code>, is not a KML file <small>(P31→Q26267864 not found)</small>",-- item doesn't have a P31→Q26267864 statement
no_item="Error: item specified in <code><nowiki>|"..L10n.para.wikidata.."=</nowiki></code> not found on Wikidata",-- item not found on wikidata
bad_from="Error: KML file not found, check <code><nowiki>|"..L10n.para.from.."=</nowiki></code>",-- KML specified by from parameter doesn't exist
no_kml="Error: KML file not found",-- no KML file found
}
-- Masks for external mapping providers, in the form:
--   externalLinkMasks[index-number] = { short = "short-label", long = "long-label", link = "url" }'
-- The short label is used for the title links; the long label is used for the inline links
-- Links in the output will be ordered by index-number
-- Instead of kml file's raw url or encoded raw url, use  __KML_URL__  or  __KML_URL_E__
localexternalLinks={}
--externalLinks[1] = { 
--	short = "Bing",
--	long  = "Display on Bing Maps",
--	link  = "http://www.bing.com/maps/?mapurl=__KML_URL__"
--}
-- #### End of L10n settings ####
-- Table of available wikis, in the order that they are to be searched for kml files
-- (once a kml file is found, further sites are not checked)
localsites={
{
mw.ustring.match(mw.site.server,"%w+")..mw.ustring.gsub(mw.ustring.lower(mw.site.siteName),"[mp]edia",""),
mw.ustring.sub(mw.site.server,3),
""
},-- local wiki (listed first so local files can override files on other wikis)
{"commonswiki","commons.wikimedia.org","c:"},-- Commons would be a logical central repository for KML files (but has no files as of August 2016)
{"enwiki","en.wikipedia.org","w:en:"},-- largest source of KML files (as of August 2016)
{"bnwiki","bn.wikipedia.org","w:bn:"},-- other sites with a KML template, listed in alphabetical order
{"cswiki","cs.wikipedia.org","w:cs:"},
{"fawiki","fa.wikipedia.org","w:fa:"},
{"frwiki","fr.wikipedia.org","w:fr:"},
{"jawiki","ja.wikipedia.org","w:ja:"},
{"mlwiki","ml.wikipedia.org","w:ml:"},
{"svwiki","sv.wikipedia.org","w:sv:"},
{"zhwiki","zh.wikipedia.org","w:zh:"},
}
localp={}
localfunctionsetCleanArgs(argsTable)
localcleanArgs={}
forkey,valinpairs(argsTable)do
iftype(val)=='string'then
val=val:match('^%s*(.-)%s*$')
ifval~=''then
cleanArgs[key]=val
end
else
cleanArgs[key]=val
end
end
returncleanArgs
end
localfunctionsafeReplace(string,pattern,replacement)
-- avoids "Lua error: invalid capture index" that occurs with string.gsub when the replacement contains one or more literal % character
localnonpattern_parts=mw.text.split(string,pattern)
returntable.concat(nonpattern_parts,replacement)
end
localfunctionmakeTitleWikitext(titletext,err)
iferrandL10n.str.err_prependthen
err=mw.ustring.gsub(err,">",">"..L10n.str.err_prepend.." ",1)
end
localtitleLinks={}
fori,vinipairs(externalLinks)do
titleLinks[i]=mw.ustring.format("[%s %s]",v.link,v.short)
end
returnmw.getCurrentFrame():extensionTag{
name='indicator',
args={name='attached-kml'},
content=mw.ustring.format(
"<span id=\"coordinates\">\'\'\'%s\'\'\': %s</span>",
titletext,
errortable.concat(titleLinks," / ")
)
}
end
localfunctionmakeInlineWikitext(headertext,url,err)
localinlineLinks={}
fori,vinipairs(externalLinks)do
inlineLinks[i]=mw.ustring.format("[%s %s]",v.link,v.long)
end
localeditUrl=mw.ustring.gsub(url,"action=raw","action=edit")
localwiki_link_class
ifmw.ustring.find(editUrl,mw.site.server,1,true)then
wiki_link_class="plainlinks"
else
wiki_link_class=""
end
ifL10n.config.inline_format=="line"then
returnmw.ustring.format(
"<li>%s%s%s (<span class=\"%s\">[%s %s] <span style=\"font-size:85%%;\">([%s %s] · [[%s|%s]])</span></span>)</li>",
headertext,L10n.str.line.start,
errortable.concat(inlineLinks,L10n.str.line.separator),
wiki_link_class,url,L10n.str.kml_file,editUrl,L10n.str.edit,
L10n.str.help_location,L10n.str.help
)
end
localtext=mw.ustring.format(
'%s<span class="%s">\'\'\'[%s %s]\'\'\' ([%s %s] · [[%s|%s]])</span>',
headertext,wiki_link_class,url,L10n.str.kml_file,editUrl,
L10n.str.edit,L10n.str.help_location,L10n.str.help
)
iferror#inlineLinks>0then
text=mw.ustring.format(
"%s<ul><li>%s</li></ul>",
text,
errortable.concat(inlineLinks,"</li><li>")
)
end
returnrequire('Modul:Side box')._main({
class='attached-kml',
text=text
})
end
localfunctionmakeKmldataDiv(link,s_index)
returnmw.ustring.format(
'<div class="kmldata" data-server="%s" title="%s">[[%s%s]][[Kategori:Pages using gadget WikiMiniAtlas]]</div>',
sites[s_index][2],link,sites[s_index][3],link
)
end
localfunctionmakeError(msg,cat)
returnmw.ustring.format(
'<strong class="attached-kml-error">%s</strong>%s',
msg,
mw.title.getCurrentTitle():inNamespaces(0)andcator''
)
end
localfunctiongetUrlFromQid(kml_qid)
localpcall_result,kml_entity=pcall(mw.wikibase.getEntity,kml_qid)
ifnot(pcall_resultandkml_entity)thenreturnnil,nil,nil,makeError(L10n.str.err.no_item,L10n.str.cat.error_noitem)end-- Error if entity doesn't exist
localp31_claim=kml_entity:getBestStatements("P31")-- P31 is property "instance of"
localhas_good_p31
fork,vinpairs(p31_claim)do
if(p31_claim[k]andp31_claim[k].mainsnak.snaktype=="value"and
p31_claim[k].mainsnak.datavalue.type=="wikibase-entityid"and
p31_claim[k].mainsnak.datavalue.value["numeric-id"]==26267864)then
has_good_p31=true
end
end
ifnot(has_good_p31)then-- Error if item isn't a kml file
returnnil,nil,nil,makeError(L10n.str.err.bad_qid,L10n.str.cat.error_badqid)
end
localkml_sitelink
localkml_siteindex
localkml_url
fori,vinipairs(sites)do
kml_sitelink=kml_entity:getSitelink(v[1])
ifkml_sitelinkthen
kml_url="https://"..v[2].."/w/index.php?title="..mw.uri.encode(kml_sitelink,"WIKI").."&action=raw"
kml_siteindex=i
end
ifkml_urlthenbreakend
end
returnkml_urlornil,kml_sitelinkornil,kml_siteindexornil,nil
end
-- Attempts to get url from linked wikidata items, will return nil if it can't
localfunctiongetUrlFromWikidata()
localentity=mw.wikibase.getEntityObject()
ifnotentitythenreturnnilend
localkml_claim=entity:getBestStatements("P3096")-- P3096 is property "KML file"
ifkml_claimthen
-- get the QID of the first value of the property
if(kml_claim[1]andkml_claim[1].mainsnak.snaktype=="value"andkml_claim[1].mainsnak.datavalue.type=="wikibase-entityid")then
localkml_qid="Q"..kml_claim[1].mainsnak.datavalue.value["numeric-id"]
returngetUrlFromQid(kml_qid)
else
returnnil-- TODO: error message
end
else
returnnil-- TODO: error message
end
end
functionp.main(frame)
localparent=frame.getParent(frame)
localArgs=setCleanArgs(parent.args)
localqid=Args[L10n.para.wikidata]ornil
-- get KML file url
localwikiUrl,wikiTitle,wikiLink,trackingWikitext,kmlError
ifnot(Args[L10n.para.from])then
ifnotqidthen
wikiUrl,wikiLink,siteindex,kmlError=getUrlFromWikidata()
elseifmw.ustring.find(qid,"^Q%d+")then
wikiUrl,wikiLink,siteindex,kmlError=getUrlFromQid(qid)
else
kmlError=makeError(L10n.str.err.malformed_qid,L10n.str.cat.error_mqid)
end
end
ifnot(wikiUrl)then
-- FIXME? this smells bad. shouldn't need to make a new title of a to_string
-- from the current title and then turn it into text form
wikiLink=Args[L10n.para.from]ormw.title.new(tostring(mw.title.getCurrentTitle())).text
wikiLink=L10n.str.kml_prefix..wikiLink
wikiTitle=mw.title.new(wikiLink)
ifnot(wikiTitle.exists)andnot(kmlError)then
ifArgs[L10n.para.from]then
kmlError=makeError(L10n.str.err.bad_from,L10n.str.cat.error_from)
else
kmlError=makeError(L10n.str.err.no_kml,L10n.str.cat.error_nokml)
end
end
wikiUrl=wikiTitle:fullUrl("action=raw","https")
siteindex=1
trackingWikitext=mw.ustring.format(
'<div title="KML & Wikidata" class="attached-kml-wikidata">KML is not from Wikidata</div>%s',
mw.title.getCurrentTitle():inNamespace(0)andL10n.str.cat.local_kmlor''
)
else
trackingWikitext=mw.ustring.format(
'<div title="KML & Wikidata" class="attached-kml-wikidata">KML is from Wikidata</div>%s',
mw.title.getCurrentTitle():inNamespace(0)andL10n.str.cat.wikidata_kmlor''
)
end
wikiTitle=mw.title.new(wikiLink)
ifwikiTitle.existsthen
localtransclusion=wikiTitle:getContent()-- hack to register the template as transcluded.
end
-- replace __KML_URL__ or __KML_URL_E__ with actual values
localencodedWikiUrl=mw.uri.encode(wikiUrl,"PATH")
fori,vinipairs(externalLinks)do
localel1=safeReplace(v.link,"__KML_URL__",wikiUrl)
localel2=safeReplace(el1,"__KML_URL_E__",encodedWikiUrl)
externalLinks[i]["link"]=el2
end
-- suppress errors and categories if demo parameter is set
ifArgs[L10n.para.demo]then
kmlError=nil
trackingWikitext=""
end
localwikitext=""
ifArgs[L10n.para.display]then
localdisplay=mw.text.split(Args[L10n.para.display],'%s*'..L10n.str.dsep..'%s*')
ifdisplay[1]==L10n.str.titleordisplay[2]==L10n.str.titlethen
wikitext=makeTitleWikitext(Args[L10n.para.title]orL10n.str.default_title,kmlError)
end
ifdisplay[1]==L10n.str.inlineordisplay[2]==L10n.str.inlineor(display[1]~=L10n.str.titleanddisplay[2]~=L10n.str.title)then
localinlineWikitext=makeInlineWikitext(Args[L10n.para.header]orL10n.str.default_header,wikiUrl,kmlError)
wikitext=wikitext..inlineWikitext
end
else
wikitext=makeInlineWikitext(Args[L10n.para.header]orL10n.str.default_header,wikiUrl,kmlError)
end
wikitext=wikitext..makeKmldataDiv(wikiLink,siteindex)..trackingWikitext
returnframe:extensionTag{
name='templatestyles',args={src='Modul:Attached KML/styles.css'}
}..frame:preprocess(wikitext)
end
returnp
Konten disalin dari Wikipedia Bahasa Indonesia (lisensi CC BY-SA) Lihat versi asli di Wikipedia

Rekomendasi Pilihan