github.com/hzck/speedroute@v0.0.0-20201115191102-403b7d0e443f/old-public/route.html (about) 1 <!DOCTYPE html> 2 <html ng-app="speedrunRouting"> 3 <head> 4 <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" /> 5 <link rel="stylesheet" type="text/css" href="css/vis.min.css" /> 6 <link rel="stylesheet" type="text/css" href="css/speedroute.css" /> 7 <script type="text/javascript" src="js/vis.min.js"></script> 8 <script type="text/javascript" src="js/angular.min.js"></script> 9 <script type="text/javascript" src="js/angular-animate.min.js"></script> 10 <script type="text/javascript" src="js/angular-touch.min.js"></script> 11 <script type="text/javascript" src="js/angular-vis.js"></script> 12 <script type="text/javascript" src="js/ui-bootstrap-tpls-2.0.2.min.js"></script> 13 <script type="text/javascript" src="js/speedroute.js"></script> 14 <script type="text/javascript"> 15 window.onbeforeunload = function() { 16 return true; 17 }; 18 </script> 19 </head> 20 <body> 21 <div ng-include="'header.html'"></div> 22 <div class="container-fluid"> 23 <div class="row main" ng-controller="RouteCtrl as g"> 24 <div class="col-xs-4"> 25 <div class="form-group"> 26 <label class="control-label col-xs-4" for="password">Code</label> 27 <div class="col-xs-8"> 28 <input type="text" class="form-control" id="password" placeholder="Code" ng-model="g.password"> 29 </div> 30 <label class="control-label col-xs-4" for="startnode">Start node</label> 31 <div class="col-xs-8"> 32 <input type="text" class="form-control" id="startnode" ng-model="g.startNode" placeholder="Start node" uib-typeahead="n.id for n in g.nodes | filter:$viewValue | limitTo:5"> 33 </div> 34 <label class="control-label col-xs-4" for="endnode">End node</label> 35 <div class="col-xs-8"> 36 <input type="text" class="form-control" id="endnode" ng-model="g.endNode" placeholder="End node" uib-typeahead="n.id for n in g.nodes | filter:$viewValue | limitTo:5"> 37 </div> 38 </div> 39 <button class="btn btn-default btn-block btn-lg" ng-click="g.saveGraph()">Save & Calculate Path</button> 40 <uib-accordion close-others="true"> 41 <div uib-accordion-group heading="Shortest Path"> 42 <ul> 43 <li ng-repeat="node in g.shortestPath track by $index">{{node}}</li> 44 </ul> 45 </div> 46 <div uib-accordion-group heading="General Info"> 47 General Info 48 </div> 49 <!-- Reward control --> 50 <div uib-accordion-group heading="Reward" is-open="g.reward.edit"> 51 <form class="form-horizontal" autocomplete="off"> 52 <div class="alert alert-info" role="alert" ng-if="g.rewardBeingEdited"> 53 Editing {{g.rewardBeingEdited.id}} 54 </div> 55 <div class="form-group row"> 56 <label class="col-form-label col-xs-2" for="rewardName">Name</label> 57 <div class="col-xs-10"> 58 <input type="text" class="form-control" id="rewardName" ng-model="g.reward.id" placeholder="Reward name"> 59 </div> 60 </div> 61 <div class="form-group row"> 62 <label class="col-xs-2">Unique</label> 63 <div class="col-xs-10"> 64 <div class="form-check"> 65 <label class="form-check-label"> 66 <input type="checkbox" class="form-check-input" ng-model="g.reward.unique">Can only be obtained once in a run. 67 </label> 68 </div> 69 </div> 70 </div> 71 <div class="form-group row"> 72 <label class="col-form-label col-xs-2" for="isAReference">Is A</label> 73 <div class="col-xs-10"> 74 <input type="text" class="form-control" id="isAReference" ng-model="g.reward.isA" placeholder="Reward name" uib-typeahead="r.id for r in g.rewards | filter:$viewValue | limitTo:5"> 75 </div> 76 </div> 77 <div class="form-group row"> 78 <div class="col-xs-offset-2 col-xs-5" ng-if="g.rewardBeingEdited"> 79 <button type="submit" class="btn btn-default" ng-click="g.addReward()">Edit Reward</button> 80 </div> 81 <div class="col-xs-offset-2 col-xs-5" ng-if="g.rewardBeingEdited==undefined"> 82 <button type="submit" class="btn btn-default" ng-click="g.addReward()">Add Reward</button> 83 </div> 84 <div class="col-xs-5"> 85 <button type="submit" class="btn btn-default pull-right" ng-click="g.resetReward()">Reset Reward</button> 86 </div> 87 </div> 88 <div class="alert alert-danger" role="alert" ng-if="g.len(g.reward.errors) > 0"> 89 <p ng-repeat="e in g.reward.errors">{{e}}</p> 90 </div> 91 </form> 92 </div> 93 <!-- Node control --> 94 <div uib-accordion-group heading="Node" is-open="g.node.edit"> 95 <form class="form-horizontal" autocomplete="off"> 96 <div class="alert alert-info" role="alert" ng-if="g.nodeBeingEdited"> 97 Editing {{g.nodeBeingEdited.id}} 98 </div> 99 <div class="form-group row"> 100 <label class="col-form-label col-xs-2" for="nodeNameInput">Name</label> 101 <div class="col-xs-10"> 102 <input type="text" class="form-control" id="nodeNameInput" ng-model="g.node.id" placeholder="Node name"> 103 </div> 104 </div> 105 <div class="form-group row"> 106 <label class="col-xs-2">Revisitable</label> 107 <div class="col-xs-10"> 108 <div class="form-check"> 109 <label class="form-check-label"> 110 <input type="checkbox" class="form-check-input" ng-model="g.node.revisitable">Can be visited more than once in a run. 111 </label> 112 </div> 113 </div> 114 </div> 115 <div class="form-group row"> 116 <label class="col-xs-2">Rewards</label> 117 <div class="col-xs-10"> 118 <div class="input-group" ng-repeat="r in g.node.rewards"> 119 <input type="number" ng-model="r.quantity" class="form-control" placeholder="Amount" > 120 <span class="input-group-addon">*</span> 121 <input type="text" ng-model="r.rewardId" class="form-control" placeholder="Reward name" disabled> 122 <span class="input-group-btn"> 123 <button type="button" class="btn btn-default" ng-click="g.removeNodeReward($index)">Remove</button> 124 </span> 125 </div> 126 <div class="input-group"> 127 <input type="number" ng-model="g.node.rewardRef.quantity" class="form-control" placeholder="Amount" > 128 <span class="input-group-addon">*</span> 129 <input type="text" ng-model="g.node.rewardRef.rewardId" class="form-control" placeholder="Reward name" uib-typeahead="r.id for r in g.rewards | filter:$viewValue | limitTo:5"> 130 <span class="input-group-btn"> 131 <button type="button" class="btn btn-default" ng-click="g.addNodeReward()">Add</button> 132 </span> 133 </div> 134 </div> 135 </div> 136 <div class="form-group row"> 137 <div class="col-xs-offset-2 col-xs-5" ng-if="g.nodeBeingEdited"> 138 <button type="submit" class="btn btn-default" ng-click="g.addNode()">Edit Node</button> 139 </div> 140 <div class="col-xs-offset-2 col-xs-5" ng-if="!g.nodeBeingEdited"> 141 <button type="submit" class="btn btn-default" ng-click="g.addNode()">Add Node</button> 142 </div> 143 <div class="col-xs-5"> 144 <button type="submit" class="btn btn-default pull-right" ng-click="g.resetNode()">Reset Node</button> 145 </div> 146 </div> 147 <div class="alert alert-danger" role="alert" ng-if="g.len(g.node.errors) > 0"> 148 <p ng-repeat="e in g.node.errors">{{e}}</p> 149 </div> 150 </form> 151 </div> 152 <!-- Edge control --> 153 <div uib-accordion-group heading="Edge" is-open="g.edge.edit"> 154 <form class="form-horizontal" autocomplete="off"> 155 <div class="alert alert-info" role="alert" ng-if="g.edgeBeingEdited"> 156 Editing {{g.edgeBeingEdited.from}} to {{g.edgeBeingEdited.to}} 157 </div> 158 <div class="form-group row"> 159 <label class="col-form-label col-xs-2" for="edgeFromInput">From</label> 160 <div class="col-xs-10"> 161 <input type="text" class="form-control" id="edgeFromInput" ng-model="g.edge.from" placeholder="Node name" uib-typeahead="n.id for n in g.nodes | filter:$viewValue | limitTo:5"> 162 </div> 163 </div> 164 <div class="form-group row"> 165 <label class="col-form-label col-xs-2" for="edgeToInput">To</label> 166 <div class="col-xs-10"> 167 <input type="text" class="form-control" id="edgeToInput" ng-model="g.edge.to" placeholder="Node name" uib-typeahead="n.id for n in g.nodes | filter:$viewValue | limitTo:5"> 168 </div> 169 </div> 170 <div class="form-group row"> 171 <label class="col-xs-2">Weights</label> 172 <div class="col-xs-10"> 173 <uib-accordion close-others="true" ng-if="g.len(g.edge.weights) > 0"> 174 <div uib-accordion-group ng-repeat="(wIndex, w) in g.edge.weights"> 175 <uib-accordion-heading> 176 <button type="button" class="btn btn-default" ng-click="g.removeEdgeWeight(wIndex)">Remove</button> 177 # {{w.description}} 178 </uib-accordion-heading> 179 <label>Description</label> 180 <div> 181 <input type="text" ng-model="w.description" class="form-control" placeholder="Description"> 182 </div> 183 <label>Duration</label> 184 <div> 185 <input type="text" ng-model="w.time" class="form-control" placeholder="Time"> 186 </div> 187 <label>Requirements (at least)</label> 188 <div class="input-group" ng-repeat="r in w.requirements"> 189 <input type="number" ng-model="r.quantity" class="form-control" placeholder="Amount" > 190 <span class="input-group-addon">*</span> 191 <input type="text" ng-model="r.rewardId" class="form-control" placeholder="Reward name" disabled> 192 <span class="input-group-btn"> 193 <button type="button" class="btn btn-default" ng-click="g.removeEdgeWeightRequirement(wIndex, $index)">Remove</button> 194 </span> 195 </div> 196 <div class="input-group"> 197 <input type="number" ng-model="g.edge.weight.rewardRef.quantity" class="form-control" placeholder="Amount" > 198 <span class="input-group-addon">*</span> 199 <input type="text" ng-model="g.edge.weight.rewardRef.rewardId" class="form-control" placeholder="Reward name" uib-typeahead="r.id for r in g.rewards | filter:$viewValue | limitTo:5"> 200 <span class="input-group-btn"> 201 <button type="button" class="btn btn-default" ng-click="g.addEdgeWeightRequirement(wIndex)">Add</button> 202 </span> 203 </div> 204 </div> 205 </uib-accordion> 206 <div class="input-group"> 207 <input type="text" ng-model="g.edge.weight.description" class="form-control" placeholder="Description"> 208 <span class="input-group-btn"> 209 <button type="button" class="btn btn-default" ng-click="g.addEdgeWeight()">Add</button> 210 </span> 211 </div> 212 </div> 213 </div> 214 <div class="form-group row"> 215 <div class="col-xs-offset-2 col-xs-5" ng-if="g.edgeBeingEdited"> 216 <button type="submit" class="btn btn-default" ng-click="g.addEdge()">Edit Edge</button> 217 </div> 218 <div class="col-xs-offset-2 col-xs-5" ng-if="!g.edgeBeingEdited"> 219 <button type="submit" class="btn btn-default" ng-click="g.addEdge()">Add Edge</button> 220 </div> 221 <div class="col-xs-5"> 222 <button type="submit" class="btn btn-default pull-right" ng-click="g.resetEdge()">Reset Edge</button> 223 </div> 224 </div> 225 <div class="alert alert-danger" role="alert" ng-if="g.len(g.edge.errors) > 0"> 226 <p ng-repeat="e in g.edge.errors track by $index">{{e}}</p> 227 </div> 228 </form> 229 </div> 230 </uib-accordion> 231 </div> 232 <div class="col-xs-8 tab-area"> 233 <uib-tabset class="tab-area"> 234 <uib-tab heading="Network" active="true"> 235 <div class="network"> 236 <vis-network data="g.network" options="g.options" events="g.events"></vis-network> 237 </div> 238 </uib-tab> 239 <uib-tab heading="Rewards"> 240 <table class="table table-condensed" ng-show="g.rewards.length > 0"> 241 <tr> 242 <th>Id</th> 243 <th>Unique</th> 244 <th>Is A</th> 245 <th>Edit</th> 246 <th>Remove</th> 247 </tr> 248 <tr ng-repeat="r in g.rewards"> 249 <td>{{ r.id }}</td> 250 <td>{{ r.unique }}</td> 251 <td>{{ r.isA }}</td> 252 <td> 253 <button type="submit" class="btn btn-default" ng-click="g.editReward(r)">Edit</button> 254 </td> 255 <td> 256 <button type="submit" class="btn btn-default" ng-click="g.removeReward(r)" ng-show="g.canRewardBeRemoved(r.id)">Remove</button> 257 </td> 258 </tr> 259 </table> 260 </uib-tab> 261 <uib-tab heading="Nodes"> 262 <table class="table table-condensed" ng-show="g.nodes.length > 0"> 263 <thead> 264 <tr> 265 <th rowspan="2">Id</th> 266 <th colspan="2">Rewards</th> 267 <th rowspan="2">Revisitable</th> 268 <th rowspan="2">Edit</th> 269 <th rowspan="2">Remove</th> 270 </tr> 271 <tr> 272 <th>RewardId</th> 273 <th>Quantity</th> 274 </tr> 275 </thead> 276 <tbody ng-repeat="n in g.nodes"> 277 <tr ng-if="!n.rewards || n.rewards.length == 0"> 278 <td>{{ n.id }}</td> 279 <td colspan="2"></td> 280 <td>{{ n.revisitable }}</td> 281 <td> 282 <button type="submit" class="btn btn-default" ng-click="g.editNode(n)">Edit</button> 283 </td> 284 <td> 285 <button type="submit" class="btn btn-default" ng-click="g.removeNode(n)" ng-show="g.canNodeBeRemoved(n.id)">Remove</button> 286 </td> 287 </tr> 288 <tr ng-if="n.rewards.length > 0" > 289 <td rowspan="{{n.rewards.length}}">{{ n.id }}</td> 290 <td>{{n.rewards[0].rewardId}}</td> 291 <td>{{n.rewards[0].quantity}}</td> 292 <td rowspan="{{n.rewards.length}}">{{ n.revisitable }}</td> 293 <td rowspan="{{n.rewards.length}}"> 294 <button type="submit" class="btn btn-default" ng-click="g.editNode(n)">Edit</button> 295 </td> 296 <td rowspan="{{n.rewards.length}}"> 297 <button type="submit" class="btn btn-default" ng-click="g.removeNode(n)" ng-show="g.canNodeBeRemoved(n.id)">Remove</button> 298 </td> 299 </tr> 300 <tr ng-if="$index > 0" ng-repeat="r in n.rewards"> 301 <td>{{r.rewardId}}</td> 302 <td>{{r.quantity}}</td> 303 </tr> 304 </tbody> 305 </table></uib-tab> 306 <uib-tab heading="Edges"> 307 <table class="table table-condensed" ng-show="g.edges.length > 0"> 308 <thead> 309 <tr> 310 <th rowspan="3">From</th> 311 <th rowspan="3">To</th> 312 <th colspan="4">Weights</th> 313 <th rowspan="3">Edit</th> 314 <th rowspan="3">Remove</th> 315 </tr> 316 <tr> 317 <th rowspan="2">Description</th> 318 <th rowspan="2">Time</th> 319 <th colspan="2">Requirements</th> 320 </tr> 321 <tr> 322 <th>RewardId</th> 323 <th>Quantity</th> 324 </tr> 325 </thead> 326 <tbody ng-repeat="e in g.edges"> 327 <tr ng-if="!e.weights || e.weights.length == 0"> 328 <td>{{ e.from }}</td> 329 <td>{{ e.to }}</td> 330 <td colspan="4"></td> 331 <td> 332 <button type="submit" class="btn btn-default" ng-click="g.editEdge(e)">Edit</button> 333 </td> 334 <td> 335 <button type="submit" class="btn btn-default" ng-click="g.removeEdge(e)">Remove</button> 336 </td> 337 </tr> 338 <tr ng-repeat-start="w in e.weights"> 339 <td rowspan="{{g.edgeRowSpan(e.weights)}}" ng-if="$first">{{ e.from }}</td> 340 <td rowspan="{{g.edgeRowSpan(e.weights)}}" ng-if="$first">{{ e.to }}</td> 341 <td rowspan="{{g.len(w.requirements) == 0 ? 1 : g.len(w.requirements)}}">{{ w.description }}</td> 342 <td rowspan="{{g.len(w.requirements) == 0 ? 1 : g.len(w.requirements)}}">{{ w.time }}</td> 343 <td colspan="2" ng-if="g.len(w.requirements) == 0"></td> 344 <td ng-if="g.len(w.requirements) > 0">{{ w.requirements[0].rewardId }}</td> 345 <td ng-if="g.len(w.requirements) > 0">{{ w.requirements[0].quantity }}</td> 346 <td rowspan="{{g.edgeRowSpan(e.weights)}}" ng-if="$first"> 347 <button type="submit" class="btn btn-default" ng-click="g.editEdge(e)">Edit</button> 348 </td> 349 <td rowspan="{{g.edgeRowSpan(e.weights)}}" ng-if="$first"> 350 <button type="submit" class="btn btn-default" ng-click="g.removeEdge(e)">Remove</button> 351 </td> 352 </tr> 353 <tr ng-repeat-end ng-if="!$first" ng-repeat="r in w.requirements"> 354 <td>{{r.rewardId}}</td> 355 <td>{{r.quantity}}</td> 356 </tr> 357 </tbody> 358 </table> 359 </uib-tab> 360 </uib-tabset> 361 </div> 362 </div> 363 </div> 364 </body> 365 </html>