Difference between revisions of "Module:Infobox mapframe"
Jump to navigation
Jump to search
test>Evad37 m (Evad37 moved page Module:Sandbox/Evad37/Infobox mapframe to Module:Infobox mapframe without leaving a redirect: ready) |
test>Evad37 (fix frame-align) |
||
| Line 43: | Line 43: | ||
args["frame-width"] = config["frame-width"] or "270" | args["frame-width"] = config["frame-width"] or "270" | ||
args["frame-height"] = config["frame-height"] or "200" | args["frame-height"] = config["frame-height"] or "200" | ||
| − | args["frame-align"] = center | + | args["frame-align"] = "center" |
-- Calculate zoom from length or area (converted to km or km2) | -- Calculate zoom from length or area (converted to km or km2) | ||
if config.length_km then | if config.length_km then | ||
Revision as of 06:45, 11 May 2018
| 40x40px | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
| Related pages |
|---|
Usage
Module that automatically makes a mapframe suitable for an infobox automatically, with minimal user input.
Generic usage
Just use the template {{Infobox mapframe}}, following the documentation there. This module may also be imported to another Lua module.
Automatic maps in infoboxes
- Example edits: Template:Infobox prison, Template:Infobox prison/doc
Edit the infobox template (or its sandbox). Add lines like the following examples to the infobox. Replace numbers (4, or 97 to 99), with the appropriate number based on how many other image or data parameters are already present.
| If placing near the top of infobox | If placing at/near the bottom of the infobox |
|---|---|
| image4 = {{#invoke:Infobox mapframe|auto}}
| caption4 = {{#invoke:Infobox mapframe|autocaption}}
|
| header97 = {{#if:{{{mapframe|}}}|Location}}
| data98 = {{#invoke:Infobox mapframe|auto}}
| data99 = {{#invoke:Infobox mapframe|autocaption}}
|
If the template has a {{#invoke:Check for unknown parameters}}, add the following parameters:
| mapframe | mapframe-caption | mapframe-custom | mapframe-id | mapframe-coord | mapframe-wikidata | mapframe-point | mapframe-shape | mapframe-frame-width | mapframe-frame-height | mapframe-shape-fill | mapframe-shape-fill-opacity | mapframe-stroke-color | mapframe-stroke-colour | mapframe-stroke-width | mapframe-marker | mapframe-marker-color | mapframe-marker-colour | mapframe-geomask | mapframe-geomask-stroke-color | mapframe-geomask-stroke-colour | mapframe-geomask-stroke-width | mapframe-geomask-fill | mapframe-geomask-fill-opacity | mapframe-zoom | mapframe-length_km | mapframe-length_mi | mapframe-area_km2 | mapframe-area_mi2 | mapframe-frame-coordinates | mapframe-frame-coord | mapframe-switcher
Once this is done, the above parameters will be available to users of the template.
- Defaults values for these parameters can also be specified in the #invoke calls above, e.g.
{{#invoke:Infobox mapframe|auto|mapframe-marker=library}}means that the library marker will be used, unless a different value is passed in to the template. - The maps are off by default, which means maps will not be displayed unless
|mapframe=yesis present in the template call. To turn maps on by default, in the #invoke calls above add|onByDefault=yes– which means maps will be displayed unless|mapframe=nois present in the template call. onByDefault can also be set to a conditional, such as if another parameters is present, e.g.|onByDefault={{#if:{{{pushpin_map|}}}|no|yes}} - Add the new parameters to the document. You can use
{{Infobox mapframe/doc/parameters}}. Specify default values (if any are used in the #invoke calls) using by adding parameters in the form Template:Ttparameter-nameTemplate:Ttvalue. The default output is shown here collapsed:
Extended content
|
|---|
|
See also
local mf = require('Module:Mapframe/sandbox')
function hasWikidataCoords(item_id)
if not(mw.wikibase.isValidEntityId(item_id)) or not(mw.wikibase.entityExists(item_id)) then
return false
end
local coordStatements = mw.wikibase.getBestStatements(item_id, 'P625')
if not coordStatements or #coordStatements == 0 then
return false
end
return true
end
function getZoom(length_km)
-- max for zoom 2 is 6400km, for zoom 3 is 3200km, for zoom 4 is 1600km, etc
local zoom = math.floor(8 - (math.log10(length_km) - 2)/(math.log10(2)))
-- limit to values between 1 and 17
return math.max(1, math.min(17, zoom))
end
local p = {}
p.main = function(frame)
local parent = frame.getParent(frame)
local parentArgs = parent.args
local mapframe = p._main(parentArgs)
return frame:preprocess(mapframe)
end
p._main = function(config)
-- Require wikidata item with coords, so something will definetly be displayed
if not hasWikidataCoords(config.id or mw.wikibase.getEntityIdForCurrentPage()) then
return ''
end
-- arguments for mapframe module
local args = {}
-- Some defaults/overrides for infobox presentation
args.display = "inline"
args.frame = "yes"
args.plain = "yes"
args["frame-width"] = config["frame-width"] or "270"
args["frame-height"] = config["frame-height"] or "200"
args["frame-align"] = "center"
-- Calculate zoom from length or area (converted to km or km2)
if config.length_km then
args.zoom = getZoom(tonumber(config.length_km))
elseif config.length_mi then
args.zoom = getZoom(tonumber(config.length_mi)*1.609344)
elseif config.area_km2 then
args.zoom = getZoom(math.sqrt(tonumber(config.area_km2)))
elseif config.area_mi2 then
args.zoom = getZoom(math.sqrt(tonumber(config.area_mi2))*1.609344)
else
args.zoom = config.zoom or 10
end
-- Shape
args.type = "shape"
if config.id then args.id = config.id end
args["stroke-width"] = config["shape-stroke-width"] or config["stroke-width"] or "3"
args["stroke-color"] = config["shape-stroke-color"] or config["shape-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or "#FF0000"
-- Line
args.type2 = "line"
if config.id then args.id2 = config.id end
args["stroke-width2"] = config["line-stroke-width"] or config["stroke-width"] or "5"
args["stroke-color2"] = config["line-stroke-color"] or config["line-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or "#FF0000"
-- Point
args.type3 = "point"
if config.id then args.id3 = config.id end
if config.marker then args.marker3 = config.marker end
args["marker-color"] = config["marker-color"] or config["marker-colour"] or "#5E74F3"
local mapframe = mf._main(args)
return mapframe
end
return p