×
Créer un nouvel article
Écrivez le titre de votre page ici :
Nous avons actuellement 160 articles sur Wiki L’Atelier des Sorciers. Saisissez votre nom d’article au-dessus de ou cliquez sur un des titres ci-dessous et commencez à écrire !



Wiki L’Atelier des Sorciers

local p = {} local coord = require( "Module:Coordinates" )

local function normalise(args) local lookup_table = { ['largeur'] = 'width', ['hauteur'] = 'height', ['texte'] = 'text', ['legende'] = 'text', ['légende'] = 'text', ['déscription'] = 'description', ['titre'] = 'title', ['sans_cadre'] = 'frameless', ['symbole'] = 'symbol', ['couleur'] = 'color', ['taille'] = 'size', ['epaisseur'] = 'size', ['épaisseur'] = 'size', ['opacite'] = 'opacity', ['opacité'] = 'opacity', ['epaisseur contour'] = 'outline_size', ['épaisseur contour'] = 'outline_size', ['couleur contour'] = 'outline_color', ['opacite contour'] = 'opacity', ['opacité contour'] = 'opacity', ['couleur fond'] = 'fill_color', ['opacite fond'] = 'fill_opacity', ['opacité fond'] = 'fill_opacity', ['geoline'] = 'contour', ['requête'] = 'query', ['requete'] = 'query', ['request'] = 'query', ['langue'] = 'lang', }

for k, v in pairs(lookup_table) do if args[k] ~= nil then args[v] = args[k] end end

return args end

local function decodeJsonList(value) --[[ Plusieurs modèles, dont Modèle:Carte interactive/Marqueur, ajoutent des virgules à la fin des représentations JSON des objets. Cela fonctionne avec le parsing JSON relaxé de HHVM, mais pas PHP7. Ce bug est détaillé ici: https://phabricator.wikimedia.org/T214984 Cette fonction retire donc les virgules finales et initiales, avant d'appeler mw.text.jsonDecode sur la liste. ]] local trimmedValue = mw.text.trim(value, ',') return mw.text.jsonDecode('[' .. trimmedValue .. ']') end

function p.marker(frame) local args = normalise(frame:getParent().args)

if args[1] == nil and args.latlng == nil then --One coordinate is mandatory return end

local properties = { ['marker-color'] = args.color == nil and '#555555' or args.color, ['marker-size'] = args.size == nil and 'medium' or args.size, ['marker-symbol'] = args.symbol == nil and or args.symbol, ['title'] = args.title == nil and or args.title, ['description'] = args.description == nil and or args.description, }

local latlng = mw.text.split( (args[1] == nil and args.latlng or args[1]), ",", true )

if args.randomise ~= nil then latlng[1] = latlng[1] + math.random(-tonumber(args.randomise), tonumber(args.randomise))/100000 latlng[2] = latlng[2] + math.random(-tonumber(args.randomise), tonumber(args.randomise))/100000 end

local geojson = {

           type = "Feature",
           properties = properties,
           geometry = {
               type = "Point",
               coordinates = {
               	tonumber(latlng[2]), 
               	tonumber(latlng[1]),
               }
           }
       }
   return mw.text.jsonEncode(geojson) .. ','

end

function p.line(frame) local args = normalise(frame:getParent().args)

if args[2] == nil then --At least two coordinates are mandatory return end

local properties = { ["stroke"] = args.color == nil and '#555555' or args.color, ["stroke-width"] = args.size == nil and 2 or tonumber(args.size), ["stroke-opacity"] = args.opacity == nil and 1 or tonumber(args.opacity), ['title'] = args.title == nil and or args.title, ['description'] = args.description == nil and or args.description, }

local coordinates = {} local i = 1 while args[i] ~= nil do local latlng = mw.text.split( args[i], ",", true ) coordinates[i] = {

       	tonumber(latlng[2]), 
       	tonumber(latlng[1]),
       }

i = i+1 end

local geojson = {

           type = "Feature",
           properties = properties,
           geometry = {
               type = "LineString",
               coordinates = coordinates
           }
       }
   return mw.text.jsonEncode(geojson) .. ','

end

function p.polygon(frame) local args = normalise(frame:getParent().args)

if args[3] == nil then --At least three coordinates are mandatory return end

local properties = { ["stroke"] = args.color == nil and '#555555' or args.color, ["stroke-width"] = args.size == nil and 2 or tonumber(args.size), ["stroke-opacity"] = args.opacity == nil and 1 or tonumber(args.opacity), ["fill"] = args.fill_color == nil and '#555555' or args.fill_color, ["fill-opacity"] = args.fill_opacity == nil and 0.3 or tonumber(args.fill_opacity), ['title'] = args.title == nil and or args.title, ['description'] = args.description == nil and or args.description, }

local coordinates = {} local i = 1 while args[i] ~= nil do local latlng = mw.text.split( args[i], ",", true ) coordinates[i] = {

       	tonumber(latlng[2]), 
       	tonumber(latlng[1]),
       }

i = i+1 end local latlng = mw.text.split( args[1], ",", true ) coordinates[i] = {

   	tonumber(latlng[2]), 
   	tonumber(latlng[1]),
   }

local geojson = {

           type = "Feature",
           properties = properties,
           geometry = {
               type = "Polygon",
               coordinates = { coordinates }
           }
       }
   return mw.text.jsonEncode(geojson) .. ','

end

function p.query(frame) local args = normalise(frame:getParent().args)

local query if args[1] ~= nil then query = args[1] else return end

local properties = { ["stroke"] = args.color == nil and '#555555' or args.color, ["stroke-width"] = args.size == nil and 2 or tonumber(args.size), ["stroke-opacity"] = args.opacity == nil and 1 or tonumber(args.opacity), ["fill"] = args.fill_color == nil and '#555555' or args.fill_color, ["fill-opacity"] = args.fill_opacity == nil and 0.3 or tonumber(args.fill_opacity), ['title'] = args.title == nil and or args.title, ['description'] = args.description == nil and or args.description, }

local service = "geoshape" if args.contour ~= nil then service = "geoline" end

local geojson = { type = "ExternalData", service = service, query = query, properties = properties, }

   return mw.text.jsonEncode(geojson) .. ','

end

function p.osm(frame) local args = normalise(frame:getParent().args)

local qid if args[1] == nil then qid = mw.wikibase.getEntityIdForCurrentPage() else qid = mw.text.trim(args[1]) end

local properties = { ["stroke"] = args.color == nil and '#555555' or args.color, ["stroke-width"] = args.size == nil and 2 or tonumber(args.size), ["stroke-opacity"] = args.opacity == nil and 1 or tonumber(args.opacity), ["fill"] = args.fill_color == nil and '#555555' or args.fill_color, ["fill-opacity"] = args.fill_opacity == nil and 0.3 or tonumber(args.fill_opacity), ['title'] = args.title == nil and or args.title, ['description'] = args.description == nil and or args.description, }

local service = "geoshape" if args.contour ~= nil then service = "geoline" end

local geojson = { type = "ExternalData", service = service, ids = qid, properties = properties, }

   return mw.text.jsonEncode(geojson) .. ','

end

function p.commons(frame) local args = normalise(frame:getParent().args)

if args[1] == nil then return end

local page_name = args[1] if mw.ustring.find(page_name, "Data:", 1, true) == 1 then page_name = string.sub(page_name, 6) end if mw.ustring.find(page_name, ".map", -4, true) == nil then page_name = page_name .. '.map' end

local geojson = { type = "ExternalData", service = "page", title = page_name }

   return mw.text.jsonEncode(geojson) .. ','

end

function p.wikidata(frame) local args = normalise(frame:getParent().args) local qid

local properties = { ['marker-color'] = args.color == nil and '#555555' or args.color, ['marker-size'] = args.size == nil and 'medium' or args.size, ['marker-symbol'] = args.symbol == nil and or args.symbol, ['title'] = args.title == nil and or args.title, ['description'] = args.description == nil and or args.description, }

if args[1] == nil then qid = mw.wikibase.getEntityIdForCurrentPage() else qid = args[1] end

local entity = mw.wikibase.getEntity( qid ) local value = entity:formatPropertyValues( 'P625', { mw.wikibase.entity.claimRanks.RANK_NORMAL, mw.wikibase.entity.claimRanks.RANK_PREFERRED, mw.wikibase.entity.claimRanks.RANK_TRUTH } ).value if value == nil then error('La propriété P625 "coordonnées géographiques" n\'est pas renseigné sur Wikidata') end latlng = mw.text.split( mw.text.decode(value), ", ", true ) geojson = { type = "Feature", geometry = { type = "Point", coordinates = { coord._dms2dec(coord._parsedmsstring(latlng[2])), coord._dms2dec(coord._parsedmsstring(latlng[1])) } }, properties = properties }

return mw.text.jsonEncode(geojson) .. ',' end

function p.tag(frame)

   local args = ( frame.getParent and normalise(frame:getParent().args) ) or frame

-- Choose the tagname local tagname = 'mapframe' if args.lien ~= nil then tagname = 'maplink' end

-- Manage the basics tag params local tagArgs = { zoom = args.zoom == nil and args.commons == nil and 14 or tonumber(args.zoom), height = args.height == nil and 420 or tonumber(args.height), width = args.width == nil and 420 or tonumber(args.width), align = args.align == nil and 'right' or args.align, text = args.text, }

if args[1] ~= nil and (args.latitude ~= nil or args.longitude ~= nil) then error('La ou les valeurs de longitude et/ou de latitude ont été fournis via deux syntaxe différentes. Consultez la documentation du Modèle:Carte interactive pour obtenir une syntaxe correcte') elseif args.latitude ~= nil and args.latitude ~= and args.longitude ~= nil and args.longitude ~= then tagArgs.latitude = args.latitude tagArgs.longitude = args.longitude elseif args[1] ~= nil and args[2] ~= nil then tagArgs.latitude = args[1] tagArgs.longitude = args[2] elseif args.commons == nil and args.wikidata == nil and args.formes == nil and args.query == nil and args.externes == nil then --The only exceptions allowed to put latitude and longitude away are when using an external map stored on commons, coord from wikidata, formes, query or externes error('Les paramètres de latitude et/ou de longitude sont absent') end

if tagArgs.latitude ~= nil and tagArgs.longitude ~= nil then if tonumber(tagArgs.latitude) then tagArgs.latitude = tonumber(tagArgs.latitude) else tagArgs.latitude = coord._dms2dec(coord._parsedmsstring(tagArgs.latitude)) end if tonumber(tagArgs.longitude) then tagArgs.longitude = tonumber(tagArgs.longitude) else tagArgs.longitude = coord._dms2dec(coord._parsedmsstring(tagArgs.longitude)) end end

if args.frameless then tagArgs.frameless = end

if args.lang ~= nil then tagArgs.lang = args.lang end

-- Manage the basics GeoJSON params local geojson = {}

if args.commons ~= nil then geojson[#geojson+1] = { type = "ExternalData", service = "page", title = args.commons, } end

if args.marqueur ~= nil and args.marqueur ~= then geojson[#geojson+1] = { type = "Feature", geometry = { type = "Point", coordinates = { tagArgs.longitude, tagArgs.latitude } }, properties = { ['marker-color'] = (args.color == nil or args.color == ) and '#555555' or args.color, ['marker-size'] = (args.size == nil or args.size == ) and 'medium' or args.size, ['marker-symbol'] = args.symbol == nil and or args.symbol, ['title'] = args.title == nil and or args.title, ['description'] = args.description == nil and or args.description, } } end

if args.osm ~= nil and args.osm ~= then local qid if args.osm == 'oui' then qid = mw.wikibase.getEntityIdForCurrentPage() if qid == nil then qid = "Q1" end else qid = args.osm end

local service = "geoshape" if args.contour ~= nil then service = "geoline" end

geojson[#geojson+1] = { type = "ExternalData", service = service, ids = qid, properties = { ['title'] = args.title == nil and or args.title, ['description'] = args.description == nil and or args.description, ['stroke'] = args.outline_color == nil and '#555555' or args.outline_color, ['stroke-width'] = args.outline_size == nil and 2 or tonumber(args.outline_size), } } end

local qid = args.wikidata if qid and not mw.wikibase.isValidEntityId( qid ) then qid = mw.wikibase.getEntityIdForCurrentPage() end if qid and mw.wikibase.isValidEntityId( qid ) then local entity = mw.wikibase.getEntity( qid ) local value = entity:formatPropertyValues( 'P625', { mw.wikibase.entity.claimRanks.RANK_NORMAL, mw.wikibase.entity.claimRanks.RANK_PREFERRED, mw.wikibase.entity.claimRanks.RANK_TRUTH } ).value if value == then error('La propriété P625 "coordonnées géographiques" n\'est pas renseigné sur Wikidata') end latlng = mw.text.split( mw.text.decode(value), ", ", true ) geojson[#geojson+1] = { type = "Feature", geometry = { type = "Point", coordinates = { coord._dms2dec(coord._parsedmsstring(latlng[2])), coord._dms2dec(coord._parsedmsstring(latlng[1])) } }, properties = { title = args.title == nil and or args.title, description = args.description == nil and or args.description, } } end

if args.query ~= nil then local service = "geoshape" if args.contour ~= nil then service = "geoline" end

geojson[#geojson+1] = { type = "ExternalData", service = service, query = args.query, properties = { title = args.title == nil and or args.title, description = args.description == nil and or args.description, } } end

--Manage external GeoJSON datas included through models if args.formes ~= nil then geojson[#geojson+1] = { type = "FeatureCollection", features = decodeJsonList(args.formes) } end

if args.externes ~= nil and args.externes ~= then local externes = decodeJsonList(args.externes) for k, externe in pairs(externes) do geojson[#geojson+1] = externe end end

return frame:extensionTag(tagname, mw.text.jsonEncode(geojson), tagArgs) end

return