You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
8.1 KiB
248 lines
8.1 KiB
<html>
|
|
<head>
|
|
<title>Poogie's Weapon Planner</title>
|
|
|
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
|
|
|
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css" />
|
|
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script>
|
|
|
|
<script type="text/javascript" src="js/ejs_production.js"></script>
|
|
|
|
<script type="text/javascript" src="js/common.js"></script>
|
|
|
|
<style>
|
|
label {
|
|
font-weight: bold;
|
|
}
|
|
|
|
body {
|
|
font-family: sans, sans-serif;
|
|
}
|
|
|
|
td.plus {
|
|
background-color: LightCyan;
|
|
}
|
|
|
|
td.minus {
|
|
background-color: LightPink;
|
|
}
|
|
|
|
td.num {
|
|
text-align: right;
|
|
}
|
|
|
|
/*@media (max-width: 600) {*/
|
|
.flexbox {
|
|
display: flex;
|
|
flex-direction: row;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.sharpness-bar {
|
|
border: 1px #d3d3d3 solid;
|
|
min-width: 92px;
|
|
height: 10px;
|
|
background-color: #d3d3d3;
|
|
float: left;
|
|
clear: both;
|
|
}
|
|
|
|
.sharpness-bar span {
|
|
display: inline-block;
|
|
height: 100%;
|
|
float: left;
|
|
}
|
|
|
|
.sharpness-bar .red {
|
|
background-color: #C00C38 !important;
|
|
}
|
|
|
|
.sharpness-bar .orange {
|
|
background-color: #E85018 !important;
|
|
}
|
|
|
|
.sharpness-bar .yellow {
|
|
background-color: #F0C830 !important;
|
|
}
|
|
|
|
.sharpness-bar .green {
|
|
background-color: #58D000 !important;
|
|
}
|
|
|
|
.sharpness-bar .blue {
|
|
background-color: #3068E8 !important;
|
|
}
|
|
|
|
.sharpness-bar .white {
|
|
background-color: #F0F0F0 !important;
|
|
}
|
|
|
|
.sharpness-bar .purple {
|
|
background-color: #c3c !important;
|
|
}
|
|
|
|
</style>
|
|
|
|
<script type="text/javascript">
|
|
var DATA_PATH = get_base_path() + "/jsonapi/";
|
|
|
|
var template_path = new EJS({ url: "templates/weaponpath.ejs" });
|
|
var template_stats = new EJS({ url: "templates/weaponstats.ejs" });
|
|
|
|
$(document).ready(function(){
|
|
setup_weapon_autocomplete("#weapon_type", "#weapon",
|
|
init_page, update_search);
|
|
});
|
|
|
|
function init_page() {
|
|
load_qs();
|
|
$("#search").click(update_search);
|
|
$(window).on("popstate", function(e) {
|
|
var oe = e.originalEvent;
|
|
if (oe.state !== null) {
|
|
console.log("popState:" + JSON.stringify(oe.state));
|
|
$("#weapon_type").val(oe.state["weapon_type"]);
|
|
$("#weapon_type").change();
|
|
show_trees(oe.state["weapon"]);
|
|
}
|
|
});
|
|
}
|
|
|
|
function load_qs() {
|
|
var wtype = $.QueryString["weapon_type"];
|
|
var weapon = $.QueryString["weapon"];
|
|
if (!wtype) {
|
|
wtype = "All";
|
|
}
|
|
$("#weapon_type").val(wtype);
|
|
$("#weapon_type").change();
|
|
if (weapon) {
|
|
show_trees(weapon);
|
|
console.log("replaceState: " + weapon);
|
|
set_state(wtype, weapon, true);
|
|
}
|
|
}
|
|
|
|
function set_state(weapon_type, weapon, replace) {
|
|
var state = { "weapon": weapon, "weapon_type": weapon_type };
|
|
var url = "/weaponplanner.html?" + encode_qs(state);
|
|
if (replace) {
|
|
window.history.replaceState(state, "", url);
|
|
} else {
|
|
window.history.pushState(state, "", url);
|
|
}
|
|
}
|
|
|
|
function update_search() {
|
|
var weapon_name = $("#weapon").val();
|
|
var wtype = $("#weapon_type").val();
|
|
|
|
if (!weapon_name) return;
|
|
|
|
if (window.history.state["weapon"] == weapon_name) {
|
|
console.log("weapon not changed, skipping update");
|
|
return;
|
|
}
|
|
|
|
show_trees(weapon_name);
|
|
console.log("pushState: " + weapon_name);
|
|
set_state(wtype, weapon_name, false);
|
|
}
|
|
|
|
function show_trees(weapon_name) {
|
|
if (!weapon_name) return;
|
|
weapon_id = WEAPON_NAME_IDX[weapon_name][0];
|
|
console.log("show_trees(" + weapon_name + "): " + weapon_id);
|
|
$("#weapon").val(weapon_name);
|
|
$("#results").html("");
|
|
$("#weapon_stats").html("");
|
|
$.getJSON(DATA_PATH + "weapon/" + weapon_id + ".json",
|
|
function(data) {
|
|
data["sharpness_title"] = data["sharpness"].join(",");
|
|
data["sharpness_plus_title"] = data["sharpness_plus"].join(",");
|
|
var html = template_stats.render(data);
|
|
$("#weapon_stats").html(html);
|
|
});
|
|
|
|
$.getJSON(DATA_PATH + "weapon/" + weapon_id + "_tree.json",
|
|
function(data) {
|
|
// first pass: collect all components and sort them
|
|
var all_dict = {};
|
|
for (i=0; i<data.length; i++) {
|
|
var components = Object.keys(data[i]["components"]);
|
|
for (j=0; j<components.length; j++) {
|
|
all_dict[components[j]] = 0;
|
|
}
|
|
}
|
|
var all_components = Object.keys(all_dict);
|
|
all_components.sort();
|
|
// second pass: generate the fieldset for each weapon
|
|
// path. Note that the template uses all components
|
|
// to order the components and make them line up
|
|
for (i=0; i<data.length; i++) {
|
|
delta = {};
|
|
path = data[i];
|
|
components = path["components"]
|
|
path["path_string"] = "";
|
|
for (j=0; j<path["path"].length; j++) {
|
|
if (j != 0) {
|
|
path["path_string"] += " -> ";
|
|
}
|
|
path["path_string"] += path["path"][j]["name"];
|
|
}
|
|
path["all_components"] = all_components;
|
|
path["component_list"] = Object.keys(components);
|
|
if (i > 0) {
|
|
prev_comps = data[i-1]["components"];
|
|
$.each(components, function(name, quantity) {
|
|
if (name in prev_comps) {
|
|
delta[name] = components[name]
|
|
- prev_comps[name];
|
|
}
|
|
});
|
|
}
|
|
path["delta"] = delta;
|
|
path["component_list"].sort();
|
|
var html = template_path.render(path);
|
|
$("#results").append(html);
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div>
|
|
<table>
|
|
<tr>
|
|
<td><label for="type">Type:</label></td>
|
|
<td><select id="weapon_type" name="weapon_type">
|
|
<option value="All">All</option>
|
|
<option value="Great Sword">Great Sword</option>
|
|
<option value="Long Sword">Long Sword</option>
|
|
<option value="Sword and Shield">Sword and Shield</option>
|
|
<option value="Dual Blades">Dual Blades</option>
|
|
<option value="Hammer">Hammer</option>
|
|
<option value="Hunting Horn">Hunting Horn</option>
|
|
<option value="Lance">Lance</option>
|
|
<option value="Gunlance">Gunlance</option>
|
|
<option value="Switch Axe">Switch Axe</option>
|
|
<option value="Charge Blade">Charge Blade</option>
|
|
<option value="Insect Glaive">Insect Glaive</option>
|
|
<option value="Light Bowgun">Light Bowgun</option>
|
|
<option value="Heavy Bowgun">Heavy Bowgun</option>
|
|
<option value="Bow">Bow</option>
|
|
</select></td>
|
|
</tr>
|
|
<tr>
|
|
<td><label for="weapon">Weapon:</label></td>
|
|
<td><input id="weapon" name="weapon" weapon="text" size="20" />
|
|
<button id="search">Ask Poogie</button></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div id="weapon_stats"></div>
|
|
<div id="results" class="flexbox"></div>
|
|
</body>
|
|
</body>
|