diff --git a/resources/css/style.css b/resources/css/style.css index 7ab3404..3e54da8 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -75,6 +75,23 @@ svg text{ background: yellow; } +#tile-properties{ + position: fixed; + top: 10px; + bottom: 10px; + left: 10px; + right: 10px; + background: yellow; +} + +.closebtn{ + position: absolute; + right: 10px; + font-size: 30px; + background: gray; + color: white; +} + #Eraser polygon{ stroke: red; } \ No newline at end of file diff --git a/resources/js/plan.js b/resources/js/plan.js index 03b074d..2a2fed5 100644 --- a/resources/js/plan.js +++ b/resources/js/plan.js @@ -31,16 +31,34 @@ function addTile(x,y){ } function bodyClick(ev){ - console.log('bodyClick:',ev); + //console.log('bodyClick:',ev); switch (mode){ - case undefined: - case null: return; + case undefined: + case null: + return clickTile(ev.clientX,ev.clientY); case ADD: return addTile(ev.clientX,ev.clientY); } console.log(ev.clientX,ev.clientY); } +function clickTile(x,y){ + console.log("clickTile:",x,y); + x = Math.floor(x/SQUARE); + y = Math.floor(y/SQUARE); + if ($('#tile-'+x+'-'+y).length > 0){ + $.ajax({ + url : PLAN, + method : POST, + data : {action:'openProps',x:x,y:y}, + success: function(resp){ + $('body').append($(resp)); + } + }); + } + return false; +} + function closeMenu(ev){ console.log('closeMenu:',ev); if (selected != null) $(selected).css('border',''); diff --git a/src/main/java/de/srsoftware/web4rail/Application.java b/src/main/java/de/srsoftware/web4rail/Application.java index 4781a4f..609ac82 100644 --- a/src/main/java/de/srsoftware/web4rail/Application.java +++ b/src/main/java/de/srsoftware/web4rail/Application.java @@ -22,16 +22,6 @@ import com.sun.net.httpserver.HttpServer; import de.keawe.localconfig.Configuration; import de.keawe.tools.translations.Translation; -import de.srsoftware.web4rail.tiles.DiagNE; -import de.srsoftware.web4rail.tiles.DiagSW; -import de.srsoftware.web4rail.tiles.DiagWN; -import de.srsoftware.web4rail.tiles.EndE; -import de.srsoftware.web4rail.tiles.EndW; -import de.srsoftware.web4rail.tiles.StraightH; -import de.srsoftware.web4rail.tiles.StraightV; -import de.srsoftware.web4rail.tiles.TurnoutSE; -import de.srsoftware.web4rail.tiles.TurnoutSW; -import de.srsoftware.web4rail.tiles.TurnoutWS; public class Application { private static Plan plan; @@ -42,18 +32,6 @@ public class Application { public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { Configuration config = new Configuration(Configuration.dir("Web4Rail")+"/app.config"); LOG.debug("Config: {}",config); - plan = Plan.load("default.plan"); - /*plan = new Plan(); - plan.set(0, 0, new StraightH()); - plan.set(1, 0, new DiagSW()); - plan.set(1, 1, new StraightV()); - plan.set(1, 2, new DiagNE()); - plan.set(2, 2, new TurnoutWS()); - plan.set(3, 2, new DiagWN()); - plan.set(3, 1, new TurnoutSE()); - plan.set(3, 0, new TurnoutSW()); - plan.set(2, 0, new EndE()); - plan.set(4, 1, new EndW());*/ InetSocketAddress addr = new InetSocketAddress(config.getOrAdd(PORT, 8080)); HttpServer server = HttpServer.create(addr, 0); server.createContext("/plan", client -> sendPlan(client)); @@ -61,6 +39,7 @@ public class Application { server.createContext("/js" , client -> sendFile(client)); server.setExecutor(java.util.concurrent.Executors.newCachedThreadPool()); server.start(); + plan = Plan.load("default.plan"); Desktop.getDesktop().browse(URI.create("http://localhost:"+config.getInt(PORT)+"/plan")); } @@ -107,18 +86,16 @@ public class Application { return params; } - private static void send(HttpExchange client, Page response) throws IOException { - byte[] html = response.html().toString().getBytes(UTF8); - client.getResponseHeaders().add("content-type", "text/html"); - client.sendResponseHeaders(200, html.length); - OutputStream os = client.getResponseBody(); - os.write(html); - os.close(); - } - - private static void send(HttpExchange client, String response) throws IOException { - byte[] html = response.getBytes(UTF8); - client.getResponseHeaders().add("content-type", "text/plain"); + private static void send(HttpExchange client, Object response) throws IOException { + byte[] html; + if (response instanceof Page) { + html = ((Page)response).html().toString().getBytes(UTF8); + client.getResponseHeaders().add("content-type", "text/html"); + } else { + html = response.toString().getBytes(UTF8); + client.getResponseHeaders().add("content-type", "text/plain"); + } + client.sendResponseHeaders(200, html.length); OutputStream os = client.getResponseBody(); os.write(html); diff --git a/src/main/java/de/srsoftware/web4rail/Plan.java b/src/main/java/de/srsoftware/web4rail/Plan.java index bb84a2c..3b0b91e 100644 --- a/src/main/java/de/srsoftware/web4rail/Plan.java +++ b/src/main/java/de/srsoftware/web4rail/Plan.java @@ -38,6 +38,7 @@ public class Plan { private static final String X = "x"; private static final String Y = "y"; private static final String NAME = "name"; + private static final String ACTION_PROPS = "openProps"; private HashMap> tiles = new HashMap>(); @@ -105,7 +106,7 @@ public class Plan { return menu; } - public String process(HashMap params) { + public Object process(HashMap params) { try { String action = params.get(ACTION); @@ -116,6 +117,8 @@ public class Plan { return t("Added {}",tile.getClass().getSimpleName()); case ACTION_SAVE: return saveTo(params.get(NAME)); + case ACTION_PROPS: + return Tile.propMenu(); default: LOG.warn("Unknown action: {}",action); } @@ -175,6 +178,4 @@ public class Plan { tiles.append(new Eraser().html()); return new Tag("div").clazz("list").content(tiles.toString()).addTo(tileMenu); } - - } diff --git a/src/main/java/de/srsoftware/web4rail/Window.java b/src/main/java/de/srsoftware/web4rail/Window.java new file mode 100644 index 0000000..1688f77 --- /dev/null +++ b/src/main/java/de/srsoftware/web4rail/Window.java @@ -0,0 +1,14 @@ +package de.srsoftware.web4rail; + +import de.srsoftware.tools.Tag; + +public class Window extends Tag{ + + private static final long serialVersionUID = 9035075889261889575L; + + public Window(String id) { + super("div"); + id(id); + new Tag("div").clazz("closebtn").attr("onclick", "$('#"+id+"').remove(); return false").content("×").addTo(this); + } +} diff --git a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java index fb0577d..b486378 100644 --- a/src/main/java/de/srsoftware/web4rail/tiles/Tile.java +++ b/src/main/java/de/srsoftware/web4rail/tiles/Tile.java @@ -9,6 +9,7 @@ import java.util.Scanner; import de.keawe.tools.translations.Translation; import de.srsoftware.tools.Tag; import de.srsoftware.web4rail.Application; +import de.srsoftware.web4rail.Window; public abstract class Tile { @@ -60,5 +61,9 @@ public abstract class Tile { private String t(String txt, Object...fills) { return Translation.get(Application.class, txt, fills); } + + public static Tag propMenu() { + return new Window("tile-properties").content("Eigenschaften..."); + } }