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 &amp; 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>