Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/resources/views/admin/mounts/view.blade.php
7461 views
1
2
@extends('layouts.admin')
3
4
@section('title')
5
Mounts → View → {{ $mount->id }}
6
@endsection
7
8
@section('content-header')
9
<h1>{{ $mount->name }}<small>{{ str_limit($mount->description, 75) }}</small></h1>
10
<ol class="breadcrumb">
11
<li><a href="{{ route('admin.index') }}">Admin</a></li>
12
<li><a href="{{ route('admin.mounts') }}">Mounts</a></li>
13
<li class="active">{{ $mount->name }}</li>
14
</ol>
15
@endsection
16
17
@section('content')
18
<div class="row">
19
<div class="col-sm-6">
20
<div class="box box-primary">
21
<div class="box-header with-border">
22
<h3 class="box-title">Mount Details</h3>
23
</div>
24
25
<form action="{{ route('admin.mounts.view', $mount->id) }}" method="POST">
26
<div class="box-body">
27
<div class="form-group">
28
<label for="PUniqueID" class="form-label">Unique ID</label>
29
<input type="text" id="PUniqueID" class="form-control" value="{{ $mount->uuid }}" disabled />
30
</div>
31
32
<div class="form-group">
33
<label for="pName" class="form-label">Name</label>
34
<input type="text" id="pName" name="name" class="form-control" value="{{ $mount->name }}" />
35
</div>
36
37
<div class="form-group">
38
<label for="pDescription" class="form-label">Description</label>
39
<textarea id="pDescription" name="description" class="form-control" rows="4">{{ $mount->description }}</textarea>
40
</div>
41
42
<div class="row">
43
<div class="form-group col-md-6">
44
<label for="pSource" class="form-label">Source</label>
45
<input type="text" id="pSource" name="source" class="form-control" value="{{ $mount->source }}" />
46
</div>
47
48
<div class="form-group col-md-6">
49
<label for="pTarget" class="form-label">Target</label>
50
<input type="text" id="pTarget" name="target" class="form-control" value="{{ $mount->target }}" />
51
</div>
52
</div>
53
54
<div class="row">
55
<div class="form-group col-md-6">
56
<label class="form-label">Read Only</label>
57
58
<div>
59
<div class="radio radio-success radio-inline">
60
<input type="radio" id="pReadOnlyFalse" name="read_only" value="0" @if(!$mount->read_only) checked @endif>
61
<label for="pReadOnlyFalse">False</label>
62
</div>
63
64
<div class="radio radio-warning radio-inline">
65
<input type="radio" id="pReadOnly" name="read_only" value="1" @if($mount->read_only) checked @endif>
66
<label for="pReadOnly">True</label>
67
</div>
68
</div>
69
</div>
70
71
<div class="form-group col-md-6">
72
<label class="form-label">User Mountable</label>
73
74
<div>
75
<div class="radio radio-success radio-inline">
76
<input type="radio" id="pUserMountableFalse" name="user_mountable" value="0" @if(!$mount->user_mountable) checked @endif>
77
<label for="pUserMountableFalse">False</label>
78
</div>
79
80
<div class="radio radio-warning radio-inline">
81
<input type="radio" id="pUserMountable" name="user_mountable" value="1" @if($mount->user_mountable) checked @endif>
82
<label for="pUserMountable">True</label>
83
</div>
84
</div>
85
</div>
86
</div>
87
</div>
88
89
<div class="box-footer">
90
{!! csrf_field() !!}
91
{!! method_field('PATCH') !!}
92
93
<button name="action" value="edit" class="btn btn-sm btn-primary pull-right">Save</button>
94
<button name="action" value="delete" class="btn btn-sm btn-danger pull-left muted muted-hover"><i class="fa fa-trash-o"></i></button>
95
</div>
96
</form>
97
</div>
98
</div>
99
100
<div class="col-sm-6">
101
<div class="box">
102
<div class="box-header with-border">
103
<h3 class="box-title">Eggs</h3>
104
105
<div class="box-tools">
106
<button class="btn btn-sm btn-primary" data-toggle="modal" data-target="#addEggsModal">Add Eggs</button>
107
</div>
108
</div>
109
110
<div class="box-body table-responsive no-padding">
111
<table class="table table-hover">
112
<tr>
113
<th>ID</th>
114
<th>Name</th>
115
<th></th>
116
</tr>
117
118
@foreach ($mount->eggs as $egg)
119
<tr>
120
<td class="col-sm-2 middle"><code>{{ $egg->id }}</code></td>
121
<td class="middle"><a href="{{ route('admin.nests.egg.view', $egg->id) }}">{{ $egg->name }}</a></td>
122
<td class="col-sm-1 middle">
123
<button data-action="detach-egg" data-id="{{ $egg->id }}" class="btn btn-sm btn-danger"><i class="fa fa-trash-o"></i></button>
124
</td>
125
</tr>
126
@endforeach
127
</table>
128
</div>
129
</div>
130
131
<div class="box">
132
<div class="box-header with-border">
133
<h3 class="box-title">Nodes</h3>
134
135
<div class="box-tools">
136
<button class="btn btn-sm btn-primary" data-toggle="modal" data-target="#addNodesModal">Add Nodes</button>
137
</div>
138
</div>
139
140
<div class="box-body table-responsive no-padding">
141
<table class="table table-hover">
142
<tr>
143
<th>ID</th>
144
<th>Name</th>
145
<th>FQDN</th>
146
<th></th>
147
</tr>
148
149
@foreach ($mount->nodes as $node)
150
<tr>
151
<td class="col-sm-2 middle"><code>{{ $node->id }}</code></td>
152
<td class="middle"><a href="{{ route('admin.nodes.view', $node->id) }}">{{ $node->name }}</a></td>
153
<td class="middle"><code>{{ $node->fqdn }}</code></td>
154
<td class="col-sm-1 middle">
155
<button data-action="detach-node" data-id="{{ $node->id }}" class="btn btn-sm btn-danger"><i class="fa fa-trash-o"></i></button>
156
</td>
157
</tr>
158
@endforeach
159
</table>
160
</div>
161
</div>
162
</div>
163
</div>
164
165
<div class="modal fade" id="addEggsModal" tabindex="-1" role="dialog">
166
<div class="modal-dialog" role="document">
167
<div class="modal-content">
168
<form action="{{ route('admin.mounts.eggs', $mount->id) }}" method="POST">
169
<div class="modal-header">
170
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
171
<span aria-hidden="true" style="color: #FFFFFF">&times;</span>
172
</button>
173
174
<h4 class="modal-title">Add Eggs</h4>
175
</div>
176
177
<div class="modal-body">
178
<div class="row">
179
<div class="form-group col-md-12">
180
<label for="pEggs">Eggs</label>
181
<select id="pEggs" name="eggs[]" class="form-control" multiple>
182
@foreach ($nests as $nest)
183
<optgroup label="{{ $nest->name }}">
184
@foreach ($nest->eggs as $egg)
185
186
@if (! in_array($egg->id, $mount->eggs->pluck('id')->toArray()))
187
<option value="{{ $egg->id }}">{{ $egg->name }}</option>
188
@endif
189
190
@endforeach
191
</optgroup>
192
@endforeach
193
</select>
194
</div>
195
</div>
196
</div>
197
198
<div class="modal-footer">
199
{!! csrf_field() !!}
200
201
<button type="button" class="btn btn-default btn-sm pull-left" data-dismiss="modal">Cancel</button>
202
<button type="submit" class="btn btn-primary btn-sm">Add</button>
203
</div>
204
</form>
205
</div>
206
</div>
207
</div>
208
209
<div class="modal fade" id="addNodesModal" tabindex="-1" role="dialog">
210
<div class="modal-dialog" role="document">
211
<div class="modal-content">
212
<form action="{{ route('admin.mounts.nodes', $mount->id) }}" method="POST">
213
<div class="modal-header">
214
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
215
<span aria-hidden="true" style="color: #FFFFFF">&times;</span>
216
</button>
217
218
<h4 class="modal-title">Add Nodes</h4>
219
</div>
220
221
<div class="modal-body">
222
<div class="row">
223
<div class="form-group col-md-12">
224
<label for="pNodes">Nodes</label>
225
<select id="pNodes" name="nodes[]" class="form-control" multiple>
226
@foreach ($locations as $location)
227
<optgroup label="{{ $location->long }} ({{ $location->short }})">
228
@foreach ($location->nodes as $node)
229
230
@if (! in_array($node->id, $mount->nodes->pluck('id')->toArray()))
231
<option value="{{ $node->id }}">{{ $node->name }}</option>
232
@endif
233
234
@endforeach
235
</optgroup>
236
@endforeach
237
</select>
238
</div>
239
</div>
240
</div>
241
242
<div class="modal-footer">
243
{!! csrf_field() !!}
244
245
<button type="button" class="btn btn-default btn-sm pull-left" data-dismiss="modal">Cancel</button>
246
<button type="submit" class="btn btn-primary btn-sm">Add</button>
247
</div>
248
</form>
249
</div>
250
</div>
251
</div>
252
@endsection
253
254
@section('footer-scripts')
255
@parent
256
257
<script>
258
$(document).ready(function() {
259
$('#pEggs').select2({
260
placeholder: 'Select eggs..',
261
});
262
263
$('#pNodes').select2({
264
placeholder: 'Select nodes..',
265
});
266
267
$('button[data-action="detach-egg"]').click(function (event) {
268
event.preventDefault();
269
270
const element = $(this);
271
const eggId = $(this).data('id');
272
273
$.ajax({
274
method: 'DELETE',
275
url: '/admin/mounts/' + {{ $mount->id }} + '/eggs/' + eggId,
276
headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') },
277
}).done(function () {
278
element.parent().parent().addClass('warning').delay(100).fadeOut();
279
swal({ type: 'success', title: 'Egg detached.' });
280
}).fail(function (jqXHR) {
281
console.error(jqXHR);
282
swal({
283
title: 'Whoops!',
284
text: jqXHR.responseJSON.error,
285
type: 'error'
286
});
287
});
288
});
289
290
$('button[data-action="detach-node"]').click(function (event) {
291
event.preventDefault();
292
293
const element = $(this);
294
const nodeId = $(this).data('id');
295
296
$.ajax({
297
method: 'DELETE',
298
url: '/admin/mounts/' + {{ $mount->id }} + '/nodes/' + nodeId,
299
headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') },
300
}).done(function () {
301
element.parent().parent().addClass('warning').delay(100).fadeOut();
302
swal({ type: 'success', title: 'Node detached.' });
303
}).fail(function (jqXHR) {
304
console.error(jqXHR);
305
swal({
306
title: 'Whoops!',
307
text: jqXHR.responseJSON.error,
308
type: 'error'
309
});
310
});
311
});
312
});
313
</script>
314
@endsection
315
316