diff --git a/Makefile b/Makefile
index 6890387..e8edb52 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,5 @@
OUT_DIR=output
-MOD_ZIP=$(OUT_DIR)/mapserver-mod.zip
VERSION=git-$(shell git rev-parse HEAD)
all: builder_image $(OUT_DIR) $(MOD_ZIP)
@@ -18,20 +17,9 @@ builder_image:
# build the docker image with all dependencies
$(MAKE) -C docker_builder build
-
$(OUT_DIR):
mkdir $@
-$(MOD_ZIP): builder_image $(OUT_DIR)
- # lint with luacheck
- sudo docker run --rm -it\
- -v $(shell pwd)/mapserver_mod/mapserver:/app\
- -w /app\
- mapserver-builder\
- luacheck .
- # zip mod
- zip -r $(OUT_DIR)/mapserver-mod.zip mapserver_mod
-
clean:
rm -rf $(OUT_DIR)
$(MAKE) -C server clean
diff --git a/doc/changelog.md b/doc/changelog.md
index da91e1f..5f08d42 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -1,6 +1,14 @@
# Changelog
+## 2.1.0
+
+* Added search bar
+* Shop info with stock
+* Colored POI's
+* Icons for POI's
+* Exported mapserver mod to own repository: https://github.com/thomasrudin/mapserver_mod
+
## 2.0.1
* Added *configversion* to `mapserver.json`
* Added *defaultoverlays* to `mapserver.json`
diff --git a/doc/internal/textures.md b/doc/internal/textures.md
new file mode 100644
index 0000000..03ba15f
--- /dev/null
+++ b/doc/internal/textures.md
@@ -0,0 +1,12 @@
+
+# convert
+
+```sh
+sudo apt install imagemagick
+convert markers-soft.png -crop 36x46+0+0 -resize 28% mapserver_poi_red.png
+convert markers-soft.png -crop 36x46+36+0 -resize 28% mapserver_poi_orange.png
+convert markers-soft.png -crop 36x46+72+0 -resize 28% mapserver_poi_green.png
+convert markers-soft.png -crop 36x46+108+0 -resize 28% mapserver_poi_blue.png
+convert markers-soft.png -crop 36x46+144+0 -resize 28% mapserver_poi_violet.png
+convert markers-soft.png -crop 36x46+180+0 -resize 28% mapserver_poi_brown.png
+```
diff --git a/doc/license.md b/doc/license.md
index ecd8ee7..8126d51 100644
--- a/doc/license.md
+++ b/doc/license.md
@@ -54,3 +54,7 @@
* minecart_logo.png
** License: CC0
** Source [minecart](https://github.com/joe7575/minecart)
+
+* mapserver_gold_block.png
+** License: CC BY-SA 3.0
+** Source [minetest_game](https://github.com/minetest/minetest_game)
diff --git a/doc/mapobjects.md b/doc/mapobjects.md
index a288f1d..d6813df 100644
--- a/doc/mapobjects.md
+++ b/doc/mapobjects.md
@@ -17,6 +17,9 @@ See: https://github.com/minetest-mods/digilines
## POI
+
+
+All supported icons: https://fontawesome.com/icons?d=gallery&s=regular,solid&m=free
## Protector
@@ -27,5 +30,9 @@ See: https://github.com/Sokomine/travelnet
+## Trains from advtrains
+
+
+
## More
And various more, see: [setup.go](../server/mapobject/setup.go)
diff --git a/doc/mod.md b/doc/mod.md
index 34bb584..e8e8a38 100644
--- a/doc/mod.md
+++ b/doc/mod.md
@@ -1,6 +1,8 @@
# Mapserver mod
+* Repository: https://github.com/thomasrudin/mapserver_mod
+
If the `mapserver-mod` is installed and configured
you get more realtime-data from within your minetest-world:
diff --git a/doc/search.md b/doc/search.md
new file mode 100644
index 0000000..cc4042b
--- /dev/null
+++ b/doc/search.md
@@ -0,0 +1,12 @@
+
+# Search bar
+
+Searchable objects:
+* Shops (with stock info)
+* POI's
+* Trainstations
+* Travelnets
+
+Example:
+
+
diff --git a/mapserver_mod/mapserver/.luacheckrc b/mapserver_mod/mapserver/.luacheckrc
deleted file mode 100644
index 067d007..0000000
--- a/mapserver_mod/mapserver/.luacheckrc
+++ /dev/null
@@ -1,23 +0,0 @@
-unused_args = false
-allow_defined_top = true
-
-globals = {
- "mapserver"
-}
-
-read_globals = {
- -- Stdlib
- string = {fields = {"split"}},
- table = {fields = {"copy", "getn"}},
-
- -- Minetest
- "minetest",
- "vector", "ItemStack",
- "dump",
-
- -- Deps
- "unified_inventory", "default", "advtrains",
-
- -- optional mods
- "xban"
-}
diff --git a/mapserver_mod/mapserver/border.lua b/mapserver_mod/mapserver/border.lua
deleted file mode 100644
index ab5c60a..0000000
--- a/mapserver_mod/mapserver/border.lua
+++ /dev/null
@@ -1,81 +0,0 @@
-
-local last_index = 0
-local last_name = ""
-
-local update_formspec = function(meta)
- local name = meta:get_string("name")
- local index = meta:get_string("index")
- local color = meta:get_string("color") or "rgb(10,10,200)"
-
- meta:set_string("infotext", "Border: Name=" .. name .. ", Index=" .. index)
-
- meta:set_string("formspec", "size[8,4;]" ..
- -- col 1
- "field[0,1;4,1;name;Name;" .. name .. "]" ..
- "button_exit[4,1;4,1;save;Save]" ..
-
- -- col 2
- "field[4,2.5;4,1;index;Index;" .. index .. "]" ..
-
- -- col 3
- "field[4,3.5;4,1;color;Color;" .. color .. "]" ..
- "")
-
-end
-
-
-minetest.register_node("mapserver:border", {
- description = "Mapserver Border",
- tiles = {
- "mapserver_border.png"
- },
- groups = {cracky=3,oddly_breakable_by_hand=3},
- sounds = default.node_sound_glass_defaults(),
- can_dig = mapserver.can_dig,
- after_place_node = mapserver.after_place_node,
-
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
-
- last_index = last_index + 5
-
- meta:set_string("color", "rgb(10,10,200)")
- meta:set_string("name", last_name)
- meta:set_int("index", last_index)
-
- update_formspec(meta)
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
-
- if not mapserver.can_interact(pos, sender) then
- return
- end
-
- local meta = minetest.get_meta(pos)
-
- if fields.save then
- last_name = fields.name
- meta:set_string("name", fields.name)
- meta:set_string("color", fields.color)
- local index = tonumber(fields.index)
- if index ~= nil then
- last_index = index
- meta:set_int("index", index)
- end
- end
-
- update_formspec(meta)
- end
-})
-
-if mapserver.enable_crafting then
- minetest.register_craft({
- output = 'mapserver:border',
- recipe = {
- {"", "default:steel_ingot", ""},
- {"default:paper", "default:goldblock", "default:paper"},
- {"", "default:glass", ""}
- }
- })
-end
diff --git a/mapserver_mod/mapserver/bridge/advtrains.lua b/mapserver_mod/mapserver/bridge/advtrains.lua
deleted file mode 100644
index 919c826..0000000
--- a/mapserver_mod/mapserver/bridge/advtrains.lua
+++ /dev/null
@@ -1,31 +0,0 @@
-
-mapserver.bridge.add_advtrains = function(data)
- data.trains = {}
- for _, train in pairs(advtrains.trains) do
-
- local t = {
- text_outside = train.text_outside,
- text_inside = train.text_inside,
- line = train.line,
- pos = train.last_pos,
- velocity = train.velocity,
- off_track = train.off_track,
- id = train.id,
- wagons = {}
- }
-
- for _, part in pairs(train.trainparts) do
- local wagon = advtrains.wagons[part]
- if wagon ~= nil then
- table.insert(t.wagons, {
- id = wagon.id,
- type = wagon.type,
- pos_in_train = wagon.pos_in_train,
- })
- end
- end
-
- table.insert(data.trains, t)
- end
-
-end
diff --git a/mapserver_mod/mapserver/bridge/defaults.lua b/mapserver_mod/mapserver/bridge/defaults.lua
deleted file mode 100644
index a7d19fd..0000000
--- a/mapserver_mod/mapserver/bridge/defaults.lua
+++ /dev/null
@@ -1,24 +0,0 @@
-
-local function explode(sep, input)
- local t={}
- local i=0
- for k in string.gmatch(input,"([^"..sep.."]+)") do
- t[i]=k
- i=i+1
- end
- return t
-end
-
-local function get_max_lag()
- local arrayoutput = explode(", ",minetest.get_server_status())
- arrayoutput = explode("=",arrayoutput[4])
- return arrayoutput[1]
-end
-
-
-mapserver.bridge.add_defaults = function(data)
- data.time = minetest.get_timeofday() * 24000
- data.uptime = minetest.get_server_uptime()
- data.max_lag = tonumber(get_max_lag())
-
-end
diff --git a/mapserver_mod/mapserver/bridge/init.lua b/mapserver_mod/mapserver/bridge/init.lua
deleted file mode 100644
index 0fd58b6..0000000
--- a/mapserver_mod/mapserver/bridge/init.lua
+++ /dev/null
@@ -1,69 +0,0 @@
-local MP = minetest.get_modpath("mapserver")
-dofile(MP .. "/bridge/defaults.lua")
-dofile(MP .. "/bridge/players.lua")
-dofile(MP .. "/bridge/advtrains.lua")
-dofile(MP .. "/bridge/minecart.lua")
-
-
--- mapserver http bridge
-local has_advtrains = minetest.get_modpath("advtrains")
-local has_minecart = minetest.get_modpath("minecart")
-
-
-local http, url, key
-
-function send_stats()
- local t0 = minetest.get_us_time()
-
- -- data to send to mapserver
- local data = {}
-
- mapserver.bridge.add_players(data)
- mapserver.bridge.add_defaults(data)
-
- if has_minecart then
- -- send minecarts positions if mod is installed
- mapserver.bridge.add_minecart(data)
- end
-
- if has_advtrains then
- -- send trains if 'advtrains' mod installed
- mapserver.bridge.add_advtrains(data)
- end
-
-
- local json = minetest.write_json(data)
- --print(json)--XXX
-
- local t1 = minetest.get_us_time()
- local process_time = t1 - t0
- if process_time > 10000 then
- minetest.log("warning", "[mapserver-bridge] processing took " .. process_time .. " us")
- end
-
- http.fetch({
- url = url .. "/api/minetest",
- extra_headers = { "Content-Type: application/json", "Authorization: " .. key },
- timeout = 1,
- post_data = json
- }, function(res)
-
- local t2 = minetest.get_us_time()
- local post_time = t2 - t1
- if post_time > 1000000 then -- warn if over a second
- minetest.log("warning", "[mapserver-bridge] post took " .. post_time .. " us")
- end
-
- -- TODO: error-handling
- minetest.after(2, send_stats)
- end)
-
-end
-
-function mapserver.bridge_init(_http, _url, _key)
- http = _http
- url = _url
- key = _key
-
- minetest.after(2, send_stats)
-end
diff --git a/mapserver_mod/mapserver/bridge/minecart.lua b/mapserver_mod/mapserver/bridge/minecart.lua
deleted file mode 100644
index d53c7a8..0000000
--- a/mapserver_mod/mapserver/bridge/minecart.lua
+++ /dev/null
@@ -1,4 +0,0 @@
-
-mapserver.bridge.add_minecart = function(data)
- data.minecarts = minecart.get_cart_list()
-end
diff --git a/mapserver_mod/mapserver/bridge/players.lua b/mapserver_mod/mapserver/bridge/players.lua
deleted file mode 100644
index d36c843..0000000
--- a/mapserver_mod/mapserver/bridge/players.lua
+++ /dev/null
@@ -1,23 +0,0 @@
-
-mapserver.bridge.add_players = function(data)
-
- data.players = {}
-
- for _, player in ipairs(minetest.get_connected_players()) do
-
- local is_hidden = minetest.check_player_privs(player:get_player_name(), {mapserver_hide_player = true})
-
- local info = {
- name = player:get_player_name(),
- pos = player:get_pos(),
- hp = player:get_hp(),
- breath = player:get_breath(),
- velocity = player:get_player_velocity()
- }
-
- if not is_hidden then
- table.insert(data.players, info)
- end
- end
-
-end
diff --git a/mapserver_mod/mapserver/common.lua b/mapserver_mod/mapserver/common.lua
deleted file mode 100644
index ab1193e..0000000
--- a/mapserver_mod/mapserver/common.lua
+++ /dev/null
@@ -1,28 +0,0 @@
-
-mapserver.can_dig = function(pos, player)
- local meta = minetest.get_meta(pos)
- local owner = meta:get_string("owner")
-
- return player and player:get_player_name() == owner
-end
-
-mapserver.after_place_node = function(pos, placer)
- local meta = minetest.get_meta(pos)
- meta:set_string("owner", placer:get_player_name() or "")
-end
-
-mapserver.can_interact = function(pos, player)
- local meta = minetest.get_meta(pos)
- local owner = meta:get_string("owner")
- local playername = player:get_player_name()
-
- if playername == owner then
- return true
- end
-
- if minetest.check_player_privs(playername, {protection_bypass = true}) then
- return true
- end
-
- return false
-end
diff --git a/mapserver_mod/mapserver/depends.txt b/mapserver_mod/mapserver/depends.txt
deleted file mode 100644
index 55e2cc4..0000000
--- a/mapserver_mod/mapserver/depends.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-default
-advtrains?
-minecart?
diff --git a/mapserver_mod/mapserver/label.lua b/mapserver_mod/mapserver/label.lua
deleted file mode 100644
index 04bdfce..0000000
--- a/mapserver_mod/mapserver/label.lua
+++ /dev/null
@@ -1,78 +0,0 @@
-
-local update_formspec = function(meta)
- local text = meta:get_string("text")
- local size = meta:get_string("size")
- local direction = meta:get_string("direction")
- local color = meta:get_string("color") or "rgb(0,0,0)"
-
- meta:set_string("infotext", "Label, Text:" .. text .. ", Size:" .. size .. ", Direction:" .. direction)
-
- meta:set_string("formspec", "size[8,6;]" ..
- -- col 1
- "field[0,1;4,1;text;Text;" .. text .. "]" ..
- "button_exit[4,1;4,1;save;Save]" ..
-
- -- col 2
- "field[0,2.5;4,1;size;Size (1-10);" .. size .. "]" ..
-
- -- col 3
- "field[0,3.5;8,1;direction;Direction (0-360);" .. direction .. "]" ..
-
- -- col 4
- "field[0,4.5;8,1;color;Color;" .. color .. "]" ..
-
- "")
-
-end
-
-
-minetest.register_node("mapserver:label", {
- description = "Mapserver Label",
- tiles = {
- "mapserver_label.png"
- },
- groups = {cracky=3,oddly_breakable_by_hand=3},
- sounds = default.node_sound_glass_defaults(),
- can_dig = mapserver.can_dig,
- after_place_node = mapserver.after_place_node,
-
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
-
- meta:set_string("text", "")
- meta:set_string("direction", "0")
- meta:set_string("size", "20")
- meta:set_string("color", "rgb(0,0,0)")
-
- update_formspec(meta)
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
-
- if not mapserver.can_interact(pos, sender) then
- return
- end
-
- local meta = minetest.get_meta(pos)
-
- if fields.save then
- meta:set_string("color", fields.color)
- meta:set_string("text", fields.text)
- meta:set_string("direction", fields.direction)
- meta:set_string("size", fields.size)
- end
-
- update_formspec(meta)
- end
-})
-
-if mapserver.enable_crafting then
- minetest.register_craft({
- output = 'mapserver:label',
- recipe = {
- {"", "default:paper", ""},
- {"default:paper", "default:goldblock", "default:paper"},
- {"", "default:glass", ""}
- }
- })
-end
diff --git a/mapserver_mod/mapserver/legacy.lua b/mapserver_mod/mapserver/legacy.lua
deleted file mode 100644
index a4c092d..0000000
--- a/mapserver_mod/mapserver/legacy.lua
+++ /dev/null
@@ -1,20 +0,0 @@
-
-minetest.register_lbm({
- label = "Tileserver->Mapserver poi upgrade",
- name = "mapserver:poi",
- nodenames = {"tileserver:poi"},
- run_at_every_load = true,
- action = function(pos, node)
- minetest.swap_node(pos, { name="mapserver:poi" })
- end
-})
-
-minetest.register_lbm({
- label = "Tileserver->Mapserver train upgrade",
- name = "mapserver:train",
- nodenames = {"tileserver:train"},
- run_at_every_load = true,
- action = function(pos, node)
- minetest.swap_node(pos, { name="mapserver:train" })
- end
-})
diff --git a/mapserver_mod/mapserver/poi.lua b/mapserver_mod/mapserver/poi.lua
deleted file mode 100644
index 7a1a5d4..0000000
--- a/mapserver_mod/mapserver/poi.lua
+++ /dev/null
@@ -1,72 +0,0 @@
-
-local update_formspec = function(meta)
- local name = meta:get_string("name")
- local category = meta:get_string("category")
- local url = meta:get_string("url") or ""
-
- meta:set_string("infotext", "POI: " .. name .. ", " .. category)
-
- meta:set_string("formspec", "size[8,5;]" ..
- -- col 1
- "field[0,1;4,1;name;Name;" .. name .. "]" ..
- "button_exit[4,1;4,1;save;Save]" ..
-
- -- col 2
- "field[0,2.5;4,1;category;Category;" .. category .. "]" ..
-
- -- col 3
- "field[0,3.5;8,1;url;URL;" .. url .. "]" ..
- "")
-
-end
-
-
-minetest.register_node("mapserver:poi", {
- description = "Mapserver POI",
- tiles = {
- "mapserver_poi.png"
- },
- groups = {cracky=3,oddly_breakable_by_hand=3},
- sounds = default.node_sound_glass_defaults(),
- can_dig = mapserver.can_dig,
- after_place_node = mapserver.after_place_node,
-
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
-
- meta:set_string("name", "")
- meta:set_string("category", "main")
- meta:set_string("url", "")
-
- update_formspec(meta)
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
-
- if not mapserver.can_interact(pos, sender) then
- return
- end
-
- local meta = minetest.get_meta(pos)
-
- if fields.save then
- meta:set_string("name", fields.name)
- meta:set_string("url", fields.url)
- meta:set_string("category", fields.category)
- end
-
- update_formspec(meta)
- end
-})
-
-
-if mapserver.enable_crafting then
- minetest.register_craft({
- output = 'mapserver:poi',
- recipe = {
- {"", "dye:blue", ""},
- {"default:paper", "default:goldblock", "default:paper"},
- {"", "default:glass", ""}
- }
- })
-end
diff --git a/mapserver_mod/mapserver/privs.lua b/mapserver_mod/mapserver/privs.lua
deleted file mode 100644
index c485b4e..0000000
--- a/mapserver_mod/mapserver/privs.lua
+++ /dev/null
@@ -1,5 +0,0 @@
-
-minetest.register_privilege("mapserver_hide_player", {
- description = "Player is hidden from the map",
- give_to_singleplayer = false
-})
diff --git a/mapserver_mod/mapserver/readme.md b/mapserver_mod/mapserver/readme.md
deleted file mode 100644
index 8af3be4..0000000
--- a/mapserver_mod/mapserver/readme.md
+++ /dev/null
@@ -1,12 +0,0 @@
-
-# mapserver mod
-
-
-## active mode configuration
-
-minetest.conf
-```
-secure.http_mods = mapserver
-mapserver.url = http://127.0.0.1:8080
-mapserver.key = myserverkey
-```
diff --git a/mapserver_mod/mapserver/textures/mapserver_border.png b/mapserver_mod/mapserver/textures/mapserver_border.png
deleted file mode 100644
index 5bc3067..0000000
Binary files a/mapserver_mod/mapserver/textures/mapserver_border.png and /dev/null differ
diff --git a/mapserver_mod/mapserver/textures/mapserver_label.png b/mapserver_mod/mapserver/textures/mapserver_label.png
deleted file mode 100644
index ed03e34..0000000
Binary files a/mapserver_mod/mapserver/textures/mapserver_label.png and /dev/null differ
diff --git a/mapserver_mod/mapserver/textures/mapserver_poi.png b/mapserver_mod/mapserver/textures/mapserver_poi.png
deleted file mode 100644
index f2e92b6..0000000
Binary files a/mapserver_mod/mapserver/textures/mapserver_poi.png and /dev/null differ
diff --git a/mapserver_mod/mapserver/textures/mapserver_train.png b/mapserver_mod/mapserver/textures/mapserver_train.png
deleted file mode 100644
index 5f1a100..0000000
Binary files a/mapserver_mod/mapserver/textures/mapserver_train.png and /dev/null differ
diff --git a/mapserver_mod/mapserver/train.lua b/mapserver_mod/mapserver/train.lua
deleted file mode 100644
index 95b4dba..0000000
--- a/mapserver_mod/mapserver/train.lua
+++ /dev/null
@@ -1,86 +0,0 @@
-
-local last_index = 0
-local last_line = ""
-
-local update_formspec = function(meta)
- local line = meta:get_string("line")
- local station = meta:get_string("station")
- local index = meta:get_string("index")
- local color = meta:get_string("color") or ""
-
- meta:set_string("infotext", "Train: Line=" .. line .. ", Station=" .. station)
-
- meta:set_string("formspec", "size[8,4;]" ..
- -- col 1
- "field[0,1;4,1;line;Line;" .. line .. "]" ..
- "button_exit[4,1;4,1;save;Save]" ..
-
- -- col 2
- "field[0,2.5;4,1;station;Station;" .. station .. "]" ..
- "field[4,2.5;4,1;index;Index;" .. index .. "]" ..
-
- -- col 3
- "field[0,3.5;4,1;color;Color;" .. color .. "]" ..
- ""
- )
-
-end
-
-
-minetest.register_node("mapserver:train", {
- description = "Mapserver Train",
- tiles = {
- "mapserver_train.png"
- },
- groups = {cracky=3,oddly_breakable_by_hand=3},
- sounds = default.node_sound_glass_defaults(),
- can_dig = mapserver.can_dig,
- after_place_node = mapserver.after_place_node,
-
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
-
- last_index = last_index + 5
-
- meta:set_string("station", "")
- meta:set_string("line", last_line)
- meta:set_int("index", last_index)
- meta:set_string("color", "rgb(10,10,200)")
-
- update_formspec(meta)
- end,
-
- on_receive_fields = function(pos, formname, fields, sender)
-
- if not mapserver.can_interact(pos, sender) then
- return
- end
-
- local meta = minetest.get_meta(pos)
-
- if fields.save then
- last_line = fields.line
- meta:set_string("color", fields.color)
- meta:set_string("line", fields.line)
- meta:set_string("station", fields.station)
- local index = tonumber(fields.index)
- if index ~= nil then
- last_index = index
- meta:set_int("index", index)
- end
- end
-
- update_formspec(meta)
- end
-})
-
-if mapserver.enable_crafting then
- minetest.register_craft({
- output = 'mapserver:train',
- recipe = {
- {"", "default:steel_ingot", ""},
- {"default:paper", "default:goldblock", "default:paper"},
- {"", "default:glass", ""}
- }
- })
-end
diff --git a/mapserver_mod/modpack.txt b/mapserver_mod/modpack.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/pics/poi_icons.png b/pics/poi_icons.png
new file mode 100644
index 0000000..9df62c1
Binary files /dev/null and b/pics/poi_icons.png differ
diff --git a/pics/pois_ingame.png b/pics/pois_ingame.png
new file mode 100644
index 0000000..4af57f3
Binary files /dev/null and b/pics/pois_ingame.png differ
diff --git a/pics/search.png b/pics/search.png
new file mode 100644
index 0000000..3e47877
Binary files /dev/null and b/pics/search.png differ
diff --git a/readme.md b/readme.md
index c5c7d35..97be522 100644
--- a/readme.md
+++ b/readme.md
@@ -14,6 +14,7 @@ Realtime mapserver for [Minetest](https://minetest.net)
* [Installation](doc/install.md)
* [Mapserver mod](doc/mod.md)
* [Parameters](doc/params.md)
+* [Search](doc/search.md)
* [Configuration](doc/config.md)
* [Contribution](doc/contrib.md)
* [Development](doc/dev.md)
diff --git a/release.sh b/release.sh
deleted file mode 100755
index 547f687..0000000
--- a/release.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-VERSION=$1
-
-test -z "$VERSION" &&{
- echo "Usage: $0 "
- exit 1
-}
-
-
-make clean all
-
-git tag $VERSION
-
-export GITHUB_TOKEN=`cat .releasetoken`
-
-gothub="go run github.com/itchio/gothub"
-gothub_release="$gothub release --user thomasrudin-mt --repo mapserver"
-gothub_upload="$gothub upload --user thomasrudin-mt --repo mapserver"
-
-$gothub_release --tag $VERSION --name "Version $VERSION"
-
-FILES="mapserver-linux-arm mapserver-linux-x86 mapserver-linux-x86_64 mapserver-mod.zip mapserver-windows-x86-64.exe mapserver-windows-x86.exe"
-
-for file in $FILES
-do
- $gothub_upload --tag $VERSION --name "$file" --file output/$file
-done
-
-git push --tags
-
-
-
diff --git a/server/areasparser/parser.go b/server/areasparser/parser.go
index 8b27112..8f9c1e6 100644
--- a/server/areasparser/parser.go
+++ b/server/areasparser/parser.go
@@ -12,10 +12,11 @@ type GenericPos struct {
}
type Area struct {
- Owner string `json:"owner"`
- Name string `json:"name"`
- Pos1 *GenericPos `json:"pos1"`
- Pos2 *GenericPos `json:"pos2"`
+ Owner string `json:"owner"`
+ Name string `json:"name"`
+ Parent int `json:"parent"`
+ Pos1 *GenericPos `json:"pos1"`
+ Pos2 *GenericPos `json:"pos2"`
}
func ParseFile(filename string) ([]*Area, error) {
@@ -41,6 +42,9 @@ func Parse(data []byte) ([]*Area, error) {
a := Area{}
a.Name = entry["name"].(string)
a.Owner = entry["owner"].(string)
+ if entry["parent"] != nil {
+ a.Parent = entry["parent"].(int)
+ }
p1 := GenericPos{}
pos1 := entry["pos1"].(map[string]interface{})
diff --git a/server/mapobject/poi.go b/server/mapobject/poi.go
index 259bc61..666eb30 100644
--- a/server/mapobject/poi.go
+++ b/server/mapobject/poi.go
@@ -5,7 +5,9 @@ import (
"mapserver/mapobjectdb"
)
-type PoiBlock struct{}
+type PoiBlock struct {
+ Color string
+}
func (this *PoiBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject {
md := block.Metadata.GetMetadata(x, y, z)
@@ -15,6 +17,8 @@ func (this *PoiBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *
o.Attributes["category"] = md["category"]
o.Attributes["url"] = md["url"]
o.Attributes["owner"] = md["owner"]
+ o.Attributes["icon"] = md["icon"]
+ o.Attributes["color"] = this.Color
return o
}
diff --git a/server/mapobject/setup.go b/server/mapobject/setup.go
index ddf016f..ab1da40 100644
--- a/server/mapobject/setup.go
+++ b/server/mapobject/setup.go
@@ -13,7 +13,12 @@ func Setup(ctx *app.App) {
//mapserver stuff
if ctx.Config.MapObjects.MapserverPOI {
- l.AddMapObject("mapserver:poi", &PoiBlock{})
+ l.AddMapObject("mapserver:poi", &PoiBlock{Color: "blue"})
+ l.AddMapObject("mapserver:poi_blue", &PoiBlock{Color: "blue"})
+ l.AddMapObject("mapserver:poi_green", &PoiBlock{Color: "green"})
+ l.AddMapObject("mapserver:poi_orange", &PoiBlock{Color: "orange"})
+ l.AddMapObject("mapserver:poi_red", &PoiBlock{Color: "red"})
+ l.AddMapObject("mapserver:poi_purple", &PoiBlock{Color: "purple"})
}
if ctx.Config.MapObjects.MapserverTrainline {
diff --git a/server/static/css/images/markers-matte.png b/server/static/css/images/markers-matte.png
new file mode 100644
index 0000000..1782586
Binary files /dev/null and b/server/static/css/images/markers-matte.png differ
diff --git a/server/static/css/images/markers-matte@2x.png b/server/static/css/images/markers-matte@2x.png
new file mode 100644
index 0000000..c981244
Binary files /dev/null and b/server/static/css/images/markers-matte@2x.png differ
diff --git a/server/static/css/images/markers-plain.png b/server/static/css/images/markers-plain.png
new file mode 100644
index 0000000..763f358
Binary files /dev/null and b/server/static/css/images/markers-plain.png differ
diff --git a/server/static/css/images/markers-shadow.png b/server/static/css/images/markers-shadow.png
new file mode 100644
index 0000000..33cf955
Binary files /dev/null and b/server/static/css/images/markers-shadow.png differ
diff --git a/server/static/css/images/markers-shadow@2x.png b/server/static/css/images/markers-shadow@2x.png
new file mode 100644
index 0000000..1116503
Binary files /dev/null and b/server/static/css/images/markers-shadow@2x.png differ
diff --git a/server/static/css/images/markers-soft.png b/server/static/css/images/markers-soft.png
new file mode 100644
index 0000000..acc8315
Binary files /dev/null and b/server/static/css/images/markers-soft.png differ
diff --git a/server/static/css/images/markers-soft@2x.png b/server/static/css/images/markers-soft@2x.png
new file mode 100644
index 0000000..b3acfbf
Binary files /dev/null and b/server/static/css/images/markers-soft@2x.png differ
diff --git a/server/static/css/leaflet.awesome-markers.css b/server/static/css/leaflet.awesome-markers.css
new file mode 100644
index 0000000..c2ae6c6
--- /dev/null
+++ b/server/static/css/leaflet.awesome-markers.css
@@ -0,0 +1,128 @@
+/*
+Author: L. Voogdt
+License: MIT
+Version: 1.0
+*/
+
+/* Marker setup */
+.awesome-marker {
+ background: url('images/markers-soft.png') no-repeat 0 0;
+ width: 35px;
+ height: 46px;
+ position:absolute;
+ left:0;
+ top:0;
+ display: block;
+ text-align: center;
+}
+
+.awesome-marker-shadow {
+ background: url('images/markers-shadow.png') no-repeat 0 0;
+ width: 36px;
+ height: 16px;
+}
+
+/* Retina displays */
+@media (min--moz-device-pixel-ratio: 1.5),(-o-min-device-pixel-ratio: 3/2),
+(-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5),(min-resolution: 1.5dppx) {
+ .awesome-marker {
+ background-image: url('images/markers-soft@2x.png');
+ background-size: 720px 92px;
+ }
+ .awesome-marker-shadow {
+ background-image: url('images/markers-shadow@2x.png');
+ background-size: 35px 16px;
+ }
+}
+
+.awesome-marker i {
+ color: #333;
+ margin-top: 10px;
+ display: inline-block;
+ font-size: 14px;
+}
+
+.awesome-marker .icon-white {
+ color: #fff;
+}
+
+/* Colors */
+.awesome-marker-icon-red {
+ background-position: 0 0;
+}
+
+.awesome-marker-icon-darkred {
+ background-position: -180px 0;
+}
+
+.awesome-marker-icon-lightred {
+ background-position: -360px 0;
+}
+
+.awesome-marker-icon-orange {
+ background-position: -36px 0;
+}
+
+.awesome-marker-icon-beige {
+ background-position: -396px 0;
+}
+
+.awesome-marker-icon-green {
+ background-position: -72px 0;
+}
+
+.awesome-marker-icon-darkgreen {
+ background-position: -252px 0;
+}
+
+.awesome-marker-icon-lightgreen {
+ background-position: -432px 0;
+}
+
+.awesome-marker-icon-blue {
+ background-position: -108px 0;
+}
+
+.awesome-marker-icon-darkblue {
+ background-position: -216px 0;
+}
+
+.awesome-marker-icon-lightblue {
+ background-position: -468px 0;
+}
+
+.awesome-marker-icon-purple {
+ background-position: -144px 0;
+}
+
+.awesome-marker-icon-darkpurple {
+ background-position: -288px 0;
+}
+
+.awesome-marker-icon-pink {
+ background-position: -504px 0;
+}
+
+.awesome-marker-icon-cadetblue {
+ background-position: -324px 0;
+}
+
+.awesome-marker-icon-white {
+ background-position: -574px 0;
+}
+
+.awesome-marker-icon-gray {
+ background-position: -648px 0;
+}
+
+.awesome-marker-icon-lightgray {
+ background-position: -612px 0;
+}
+
+.awesome-marker-icon-black {
+ background-position: -682px 0;
+}
+
+.awesome-marker-square {
+ background-position-y: -46px;
+}
diff --git a/server/static/js/lib/leaflet.awesome-markers.js b/server/static/js/lib/leaflet.awesome-markers.js
new file mode 100644
index 0000000..7505b6f
--- /dev/null
+++ b/server/static/js/lib/leaflet.awesome-markers.js
@@ -0,0 +1,125 @@
+/*
+ Leaflet.AwesomeMarkers, a plugin that adds colorful iconic markers for Leaflet, based on the Font Awesome icons
+ (c) 2012-2013, Lennard Voogdt
+
+ http://leafletjs.com
+ https://github.com/lvoogdt
+*/
+
+/*global L*/
+
+(function (window, document, undefined) {
+ "use strict";
+ /*
+ * Leaflet.AwesomeMarkers assumes that you have already included the Leaflet library.
+ */
+
+ L.AwesomeMarkers = {};
+
+ L.AwesomeMarkers.version = '2.0.1';
+
+ L.AwesomeMarkers.Icon = L.Icon.extend({
+ options: {
+ iconSize: [35, 45],
+ iconAnchor: [17, 42],
+ popupAnchor: [1, -32],
+ shadowAnchor: [10, 12],
+ shadowSize: [36, 16],
+ className: 'awesome-marker',
+ prefix: 'glyphicon',
+ spinClass: 'fa-spin',
+ extraClasses: '',
+ icon: 'home',
+ markerColor: 'blue',
+ iconColor: 'white'
+ },
+
+ initialize: function (options) {
+ options = L.Util.setOptions(this, options);
+ },
+
+ createIcon: function () {
+ var div = document.createElement('div'),
+ options = this.options;
+
+ if (options.icon) {
+ div.innerHTML = this._createInner();
+ }
+
+ if (options.bgPos) {
+ div.style.backgroundPosition =
+ (-options.bgPos.x) + 'px ' + (-options.bgPos.y) + 'px';
+ }
+
+ this._setIconStyles(div, 'icon-' + options.markerColor);
+ return div;
+ },
+
+ _createInner: function() {
+ var iconClass, iconSpinClass = "", iconColorClass = "", iconColorStyle = "", options = this.options;
+
+ if(options.icon.slice(0,options.prefix.length+1) === options.prefix + "-") {
+ iconClass = options.icon;
+ } else {
+ iconClass = options.prefix + "-" + options.icon;
+ }
+
+ if(options.spin && typeof options.spinClass === "string") {
+ iconSpinClass = options.spinClass;
+ }
+
+ if(options.iconColor) {
+ if(options.iconColor === 'white' || options.iconColor === 'black') {
+ iconColorClass = "icon-" + options.iconColor;
+ } else {
+ iconColorStyle = "style='color: " + options.iconColor + "' ";
+ }
+ }
+
+ return "";
+ },
+
+ _setIconStyles: function (img, name) {
+ var options = this.options,
+ size = L.point(options[name === 'shadow' ? 'shadowSize' : 'iconSize']),
+ anchor;
+
+ if (name === 'shadow') {
+ anchor = L.point(options.shadowAnchor || options.iconAnchor);
+ } else {
+ anchor = L.point(options.iconAnchor);
+ }
+
+ if (!anchor && size) {
+ anchor = size.divideBy(2, true);
+ }
+
+ img.className = 'awesome-marker-' + name + ' ' + options.className;
+
+ if (anchor) {
+ img.style.marginLeft = (-anchor.x) + 'px';
+ img.style.marginTop = (-anchor.y) + 'px';
+ }
+
+ if (size) {
+ img.style.width = size.x + 'px';
+ img.style.height = size.y + 'px';
+ }
+ },
+
+ createShadow: function () {
+ var div = document.createElement('div');
+
+ this._setIconStyles(div, 'shadow');
+ return div;
+ }
+ });
+
+ L.AwesomeMarkers.icon = function (options) {
+ return new L.AwesomeMarkers.Icon(options);
+ };
+
+}(this, document));
+
+
+
diff --git a/server/static/js/overlays/PoiOverlay.js b/server/static/js/overlays/PoiOverlay.js
index 853733c..6cc57a4 100644
--- a/server/static/js/overlays/PoiOverlay.js
+++ b/server/static/js/overlays/PoiOverlay.js
@@ -1,20 +1,17 @@
/* exported PoiOverlay */
/* globals AbstractIconOverlay: true */
-var PoiIcon = L.icon({
- iconUrl: 'css/images/marker-icon.png',
- shadowUrl: 'css/images/marker-shadow.png',
- iconSize: [25, 41],
- iconAnchor: [12, 41],
- popupAnchor: [1, -34],
- tooltipAnchor: [16, -28],
- shadowSize: [41, 41]
-});
-
-
var PoiOverlay = AbstractIconOverlay.extend({
initialize: function(wsChannel, layerMgr) {
- AbstractIconOverlay.prototype.initialize.call(this, wsChannel, layerMgr, "poi", PoiIcon);
+ AbstractIconOverlay.prototype.initialize.call(this, wsChannel, layerMgr, "poi");
+ },
+
+ getIcon: function(obj){
+ return L.AwesomeMarkers.icon({
+ icon: obj.attributes.icon || "home",
+ prefix: "fa",
+ markerColor: obj.attributes.color || "blue"
+ });
},
getMaxDisplayedZoom: function(){
diff --git a/server/static/js/overlays/ProtectorOverlay.js b/server/static/js/overlays/ProtectorOverlay.js
index 2847c9d..48a5374 100644
--- a/server/static/js/overlays/ProtectorOverlay.js
+++ b/server/static/js/overlays/ProtectorOverlay.js
@@ -6,6 +6,10 @@ var ProtectorOverlay = AbstractGeoJsonOverlay.extend({
AbstractGeoJsonOverlay.prototype.initialize.call(this, wsChannel, layerMgr, "protector");
},
+ getMaxDisplayedZoom: function(){
+ return 11;
+ },
+
createFeature: function(protector){
return {
"type":"Feature",
diff --git a/server/static/js/search/SearchResult.js b/server/static/js/search/SearchResult.js
index d7da451..4c4447e 100644
--- a/server/static/js/search/SearchResult.js
+++ b/server/static/js/search/SearchResult.js
@@ -40,7 +40,13 @@ var SearchResult = {
if (obj.type == "poi"){
description = m("span", obj.attributes.name);
- type = m("img", { src: "css/images/marker-icon.png" });
+
+ var color = obj.attributes.color || "blue";
+ var icon = obj.attributes.icon || "home";
+
+ type = m("div", { style: "position: relative", class: "awesome-marker awesome-marker-icon-" + color }, [
+ m("i", { class: "fa fa-" + icon })
+ ]);
}
if (obj.type == "shop") {
diff --git a/server/static/manifest.js b/server/static/manifest.js
index bc49e0f..2e5e0bc 100644
--- a/server/static/manifest.js
+++ b/server/static/manifest.js
@@ -1,6 +1,7 @@
{
"scripts": [
"/js/lib/leaflet.js",
+ "/js/lib/leaflet.awesome-markers.js",
"/js/lib/mithril.min.js",
"/js/lib/color-hash.js",
"/js/util/debounce.js",
@@ -47,6 +48,7 @@
"/css/fontawesome.min.css",
"/css/bootstrap.min.css",
"/css/leaflet.css",
+ "/css/leaflet.awesome-markers.css",
"/css/custom.css"
]
}