Mercurial > hg > batmud > chester
changeset 1:77d78ef45ed2
Lots of work.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 10 Jan 2011 01:44:34 +0200 |
parents | 332b25bb4e36 |
children | 666d475c8f92 |
files | index.php |
diffstat | 1 files changed, 171 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/index.php Mon Jan 10 00:16:36 2011 +0200 +++ b/index.php Mon Jan 10 01:44:34 2011 +0200 @@ -6,7 +6,7 @@ if (isset($_POST["mode"])) { $formMode = intval($_POST["mode"]); } else - $formMode = 0; + $formMode = -1; function getJSArraySegment($arr) @@ -23,14 +23,31 @@ } -function printInputField($id, $label, $len) +function printInputField($id, $label, $len, $default = "") { echo "<label for=\"".$id."\">".htmlentities($label)."</label>\n". - "<input type=\"text\" name=\"".$id."\" size=\"".$len."\" id=\"".$id."\" />\n"; + "<input type=\"text\" name=\"".$id."\" size=\"".$len."\" id=\"".$id."\" value=\"".$default."\" />\n"; +} + + +function printOptionSelect($id, $size, $multi = FALSE) +{ + echo "<select ".($multi ? " multiple=\"multiple\"" : "")." size=\"".$size."\" id=\"".$id."\"><option></option></select>"; } -printPageHeader($pageTitle); +printPageHeader($pageTitle, " + <style type=\"text/css\"> + <!-- + .buttons { width: 100%; } + div.options { display: none; border: 1px solid white; padding: 1em; } + + #command { display: none; } + + #status { position: absolute; bottom: 1em; right: 1em; left: 1em; padding: 1pt; margin: 2pt; border: 1px solid white; } + --> + </style> +"); echo "<h1>".$pageTitle."</h1>\n"; if ($formMode == 0) { @@ -106,6 +123,10 @@ } } + +/* + * Unserialize data from previous step + */ if ($formMode == 2) { if (isset($_POST["data"])) { $formData = base64_decode($_POST["data"]); @@ -118,32 +139,58 @@ } } -if ($data !== FALSE && $formMode == 3) { + +/* + * Interactive editor mode begins here + */ +//if ($data !== FALSE && $formMode == 3) { + +if ($formMode == -1) { + ?> <form id="done" action="<? echo $pageIndex; ?>" method="post"> - <input type="hidden" value="3" name="mode" /> - <p> - When you are ready, hit <input type="submit" value=" Save and continue " /> to go to command creation step. + <p id="create_buttons"> + <input type="button" value=" Create BatMUD Commands " onclick="createCommands('batmud', this.form);" /> +<!-- + <input type="button" value=" Create TinyFugue Macros " onclick="createCommands('tf', this.form);" /> + <input type="button" value=" Create SAVEBLOB " onclick="createCommands('save', this.form);" /> +--> + <input type="hidden" value="3" name="mode" /> </p> + + <div id="options_batmud" class="options"> + <? printInputField("command_sep", "Command separator", 15, ";"); ?><br /> + <input type="checkbox" id="autoclose" value="true" /> + <label for="autoclose">Add commands for automatically opening and closing each chest.</label> + </div> + + <table> <tr> + <td> <h2>Items pool</h2> - <select multiple="multiple" size="10" id="curr_items"></select> - <br /> - <table width="100%"> - <td width="15%"><input type="button" value=" Delete " onclick="deleteItems(this.form);" /></td> - <td width="15%"><input type="button" value=" Add new " onclick="addItems(this.form);" disabled="disabled" /></td> - <td width="60%" style="text-align: right;"><input id="move_button" type="button" value=" Move to chest " onclick="moveItems(this.form);" /></td> + <? printOptionSelect("curr_items", 10, TRUE); ?> + <table class="buttons"> + <tr> + <td><input type="button" value=" Delete " onclick="deleteItems(this.form);" /></td> + <td><input type="button" value=" Add new " onclick="addItems(this.form);" disabled="disabled" /></td> + <td style="width: 60%; text-align: right;"><input id="move_button" type="button" value=" Move to chest " onclick="moveItems(this.form);" /></td> + </tr> </table> </td> + <td id="chest_editor"> <h2>Editing chest "<span id="curr_name"></span>"</h2> - <select multiple="multiple" size="10" id="curr_chest"></select> - <br /> - <input type="button" value=" Remove selected " onclick="chestRemoveItems(this.form);" /> + <? printOptionSelect("curr_chest", 10, TRUE); ?> + <table class="buttons"> + <tr> + <td><input type="button" value=" Remove selected " onclick="chestRemoveItems(this.form);" /></td> + </tr> + </table> </td> </tr> + <tr> <td> <h2>Create / edit a chest</h2> @@ -153,17 +200,31 @@ ?> <input type="button" value=" Create " onclick="chestCreate(this.form);" id="create_button" /> </td> + <td id="chest_list_editor"> - <h2>Chests</h2> - <select size="5" id="chest_list"></select> - <br /> - <input type="button" value=" Edit " onclick="chestEdit(this.form);" /> - <input type="button" value=" Delete " onclick="chestDelete(this.form);" /> + <h2>Defined chests</h2> + <? printOptionSelect("chest_list", 5, FALSE); ?> + <table class="buttons"> + <tr> + <td><input type="button" value=" Switch to " onclick="chestEdit(this.form);" /></td> + <td><input type="button" value=" Delete " onclick="chestDelete(this.form);" /></td> + <td><input type="button" value=" Edit " onclick="chestEditProps(this.form);" disabled="disabled" /></td> + </tr> + </table> </td> + </tr> </table> </form> -<div style="position: absolute; bottom: 1em; right: 1em; left: 1em; padding: 1pt; margin: 2pt; border: 1px solid white;" id="status"> </div> + +<!-- + <div id="commands"> + <textarea id="command_data" cols="80" rows="10">-</textarea> + </div> +--> + +<div id="status"> </div> + <script type="text/javascript"> <!-- var curr_chest = null; @@ -213,7 +274,7 @@ } this.getItemByIndex = function(id) { - if (id < 0 || id > this.items.length) return null; + if (id < 0 || id >= this.items.length) return null; return this.items[id]; } } @@ -235,7 +296,7 @@ echo "var list_chests = [".$str."];\n". -"var list_items = ".getChestObject("items", 10000, $data["items"]).";\n"; +"var list_items = ".(isset($data["items"]) ? getChestObject("items", 10000, $data["items"]) : "null").";\n"; ?> <!-- #kludge --><!-- @@ -260,7 +321,7 @@ function updatePage() { // List of items - if (list_items.changed) + if (list_items != null && list_items.changed) setListData("curr_items", list_items.items); // List of chests @@ -314,8 +375,8 @@ var name = f.elements['chest_name'].value; var slots = parseInt(f.elements['chest_slots'].value, 10); - if (isNaN(slots) || slots < 1 || slots > 50) { - statusMsg("Invalid number of slots."); + if (isNaN(slots) || slots < 1) { + statusMsg("Number of slots not set or is invalid."); return; } @@ -323,10 +384,15 @@ statusMsg("Empty chest name "+name+"."); return; } + + if (name.match(/[^a-z0-9_]/i)) { + statusMsg("Invalid chest name, only alphanumerics and underscore are allowed."); + return; + } for (var i = 0; i < list_chests.length; i++) { if (list_chests[i].name == name) { - statusMsg("Chest with identifier <b>'"+name+"'</b> already exists!"); + statusMsg("Chest with identifier '<b>"+name+"</b>' already exists!"); return; } } @@ -335,14 +401,64 @@ list_chests.push(curr_chest); clearForm(f); - statusMsg("OK, created new chest."); + statusMsg("OK, created new chest '<b>"+name+"</b>' with <b>"+slots+"</b> slots."); updatePage(); } +function chestCheckSelected(f) +{ + var id = f.elements['chest_list'].selectedIndex; + + if (id < 0 || id >= list_chests.length) { + statusMsg("Invalid chest, internal error!"); + return -1; + } + + return {id: id, chest: list_chests[id]}; +} + + +// Delete a chest from chest list function chestDelete(f) { - statusMsg("Deleted chest '"+name+"', items returned to pool."); + var ret = chestCheckSelected(f); + if (ret.id < 0 || ret.chest == null) return; + + var name = ret.chest.name; + var len = ret.chest.items.length; + + var answer = confirm("Really delete selected chest '"+name+"' and move "+len+" items back to pool?"); + if (!answer) { + statusMsg("Delete operation cancelled."); + return; + } + + if (curr_chest == ret.chest) + curr_chest = null; + + for (var i = 0; i < len; i++) + ret.chest.moveItemById(list_items, i); + + list_chests.splice(ret.id, 1); + + if (len > 0) { + statusMsg("Deleted chest '"+name+"', "+len+" items returned to pool."); + } else { + statusMsg("Deleted empty chest '"+name+"'."); + } + updatePage(); +} + + +// Change currently edited chest to another +function chestEdit(f) +{ + var ret = chestCheckSelected(f); + if (ret.id < 0 || ret.chest == null) return; + + curr_chest = ret.chest; + statusMsg("Switched to chest '"+ret.chest.name+"'."); updatePage(); } @@ -432,6 +548,30 @@ } } + +function createCommands(mode, f) +{ + if (list_chests.length == 0) { + statusMsg("No chest configurations created!"); + return; + } + + var str = ""; + for (var i = 0; i < list_chests.length; i++) { + var chest = list_chests[i]; + for (var n = 0; n < chest.items.length; n++) { + if (mode == "batmud") { + str += "" + chest.items[n] +""; + } + } + } + + var o = document.getElementById("commands"); + o.style.display = "block"; + o.innerHTML = str; +} + + updatePage(); --> </script>