Module:Maki icon overview

From TwentyOneWiki
Jump to navigation Jump to search


Usage

Grid layout

This mode shows all icons embedded in a Kartographer map. Hovering or clicking an icon shows the corresponding name to use in a map's marker-symbol.

{{#invoke:Maki icon overview | grid}}
icons
If you want to show the numbers or letters instead of icons, provide one of these keywords to the icons parameter.
{{#invoke:Maki icon overview | grid
 | icons = letters
}}

Table layout

Renders the icons in a list, which is more suitable for searching.

{{#invoke:Maki icon overview | list}}

If you want to provide translations or descriptions of some icons, this can be accomplished by giving the icon name as a template parameter, and the text as a value:

{{#invoke:Maki icon overview | list
 | animal-shelter = Domestic animal medical and adoption center.
 | toll-booth = Roadside nuisance for collecting money.
}}



local p = {} --p stands for package

p.numbers = {}
for i = 1, 99 do
  table.insert( p.numbers, "-number" )
end

p.letters = {}
for i = 1, 26 do
  table.insert( p.letters, "-letter" )
end

p.icons = {
    "aerialway",
    "airfield",
    "airport",
    "alcohol-shop",
    "american-football",
    "amusement-park",
    "animal-shelter",
    "aquarium",
    "arrow",
    "art-gallery",
    "attraction",
    "bakery",
    "bank-JP",
    "bank",
    "bar",
    "barrier",
    "baseball",
    "basketball",
    "bbq",
    "beach",
    "beer",
    "bicycle-share",
    "bicycle",
    "blood-bank",
    "bowling-alley",
    "bridge",
    "building-alt1",
    "building",
    "bus",
    "cafe",
    "campsite",
    "car-rental",
    "car-repair",
    "car",
    "casino",
    "castle-JP",
    "castle",
    "caution",
    "cemetery-JP",
    "cemetery",
    "charging-station",
    "cinema",
    "circle-stroked",
    "circle",
    "city",
    "clothing-store",
    "college-JP",
    "college",
    "commercial",
    "communications-tower",
    "confectionery",
    "construction",
    "convenience",
    "cricket",
    "cross",
    "dam",
    "danger",
    "defibrillator",
    "dentist",
    "diamond",
    "doctor",
    "dog-park",
    "drinking-water",
    "elevator",
    "embassy",
    "emergency-phone",
    "entrance-alt1",
    "entrance",
    "farm",
    "fast-food",
    "fence",
    "ferry-JP",
    "ferry",
    "fire-station-JP",
    "fire-station",
    "fitness-centre",
    "florist",
    "fuel",
    "furniture",
    "gaming",
    "garden-centre",
    "garden",
    "gate",
    "gift",
    "globe",
    "golf",
    "grocery",
    "hairdresser",
    "harbor",
    "hardware",
    "heart",
    "heliport",
    "highway-rest-area",
    "historic",
    "home",
    "horse-riding",
    "hospital-JP",
    "hospital",
    "hot-spring",
    "ice-cream",
    "industry",
    "information",
    "jewelry-store",
    "karaoke",
    "landmark-JP",
    "landmark",
    "landuse",
    "laundry",
    "library",
    "lift-gate",
    "lighthouse-JP",
    "lighthouse",
    "lodging",
    "logging",
    "marker-stroked",
    "marker",
    "mobile-phone",
    "monument-JP",
    "monument",
    "mountain",
    "museum",
    "music",
    "natural",
    "observation-tower",
    "optician",
    "paint",
    "park-alt1",
    "park",
    "parking-garage",
    "parking-paid",
    "parking",
    "pharmacy",
    "picnic-site",
    "pitch",
    "place-of-worship",
    "playground",
    "police-JP",
    "police",
    "post-JP",
    "post",
    "prison",
    "racetrack-boat",
    "racetrack-cycling",
    "racetrack-horse",
    "racetrack",
    "rail-light",
    "rail-metro",
    "rail",
    "ranger-station",
    "recycling",
    "religious-buddhist",
    "religious-christian",
    "religious-jewish",
    "religious-muslim",
    "religious-shinto",
    "residential-community",
    "restaurant-bbq",
    "restaurant-noodle",
    "restaurant-pizza",
    "restaurant-seafood",
    "restaurant-sushi",
    "restaurant",
    "road-accident",
    "roadblock",
    "rocket",
    "school-JP",
    "school",
    "scooter",
    "shelter",
    "shoe",
    "shop",
    "skateboard",
    "skiing",
    "slaughterhouse",
    "slipway",
    "snowmobile",
    "soccer",
    "square-stroked",
    "square",
    "stadium",
    "star-stroked",
    "star",
    "suitcase",
    "swimming",
    "table-tennis",
    "teahouse",
    "telephone",
    "tennis",
    "theatre",
    "toilet",
    "toll-booth",
    "town-hall",
    "town",
    "triangle-stroked",
    "triangle",
    "tunnel",
    "veterinary",
    "viewpoint",
    "village",
    "volcano",
    "volleyball",
    "warehouse",
    "waste-basket",
    "watch",
    "water",
    "waterfall",
    "watermill",
    "wetland",
    "wheelchair",
    "windmill",
    "zoo"
}

p.step = 0.08
p.columnCount = 15

function p.grid( frame )
	local iconKey = frame.args.icons or "icons"
	local iconList = p[iconKey]
	local height = math.floor( math.ceil( #iconList / p.columnCount ) * p.step * 729 + 80 )

	return frame:preprocess(
		'<mapframe text="Maki Icons" width="1000" height="'
		.. height
		.. [[" align="right" zoom="10">
{
	"type": "FeatureCollection",
	"features": [
		]]
		.. table.concat( p.coordGrid( iconList ), ",\n		" )
		.. [[
	]
}
</mapframe>]]
	)
end

function p.coordGrid( iconList )
	local outputTable = {}
	local iconIndex = 1
	-- Stop iterating rows when we run out of icons.
	for y = 0, 999, p.step do
		for x = 0, ( p.columnCount - 1 ) * p.step, p.step do
			local icon = iconList[iconIndex]
			if not icon then
				return outputTable
			end
			-- Positive Y is up, so negate to read top-to-bottom.
			table.insert( outputTable, '{ "type": "Feature", '
				.. '"geometry": { "type": "Point", "coordinates": [ '
				.. x
				.. ', -'
				.. y
				.. ' ] }, '
				.. '"properties": { "title": "\\"marker-symbol\\": \\"'
				.. icon
				.. '\\"", "marker-symbol": "'
				.. icon
				.. '", "marker-color": "54595d", "marker-size": "large" } }'
			)
			iconIndex = iconIndex + 1
		end
	end
end

function p.list ( frame )
	local outputTable = {}
	local hasDescriptions = false

	for key, icon in pairs( p.icons ) do
		table.insert( outputTable, '|-\n| [[File:Maki7-' .. icon .. '.svg|18px]] || ' .. icon )

		local helpText = frame.args[icon] or frame:getParent().args[icon]
		if helpText then
			table.insert( outputTable, ' || ' .. helpText )
			hasDescriptions = true
		end

		table.insert( outputTable, '\n' )
	end

	local tableHeader = [[
		{|class="wikitable"
		 |+ {{int:kartographer-icon-docs-table}}
		 ! {{int:kartographer-icon-docs-icon}} !! {{int:kartographer-icon-docs-key}}
	]]
	if hasDescriptions then
		tableHeader = tableHeader .. '!! {{int:kartographer-icon-docs-help}}'
	end
	table.insert( outputTable, 1, tableHeader .. '\n' )

	table.insert( outputTable, '|}' )

	return frame:preprocess( table.concat( outputTable ) )
end

return p