]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - Plugson/www/plugson_auto_install.html
Fix the menu missing issue when there exist an invalid vlnk file. (#2228)
[Ventoy.git] / Plugson / www / plugson_auto_install.html
1 <div class="box box-primary" id="control">
2 <div class="box-header">
3 <div class="col-sm-9" style="padding-top:8px;">
4 <i class="fa fa-desktop">&nbsp;&nbsp;</i>
5 <h1 class="box-title" style="font-weight:bold;" id="id_h1_page_title">x</h1>
6 </div>
7 <div class="col-sm-1" style="padding-top:2px;">
8 <button id="id_btn_reset" class="btn btn-sm btn-danger btn-del"><i class="fa fa-trash"></i><span id="id_btn_span_reset">Reset</span></button>
9 </div>
10 <div class="col-sm-2" style="font-size:16px;padding-top:8px;">
11 <a id="id_a_official_doc" target="_blank" href="https://www.ventoy.net/en/plugin_autoinstall.html"><span class="fa fa-link"></span><span id="id_span_official_doc">官网文档</span></a>
12 </div>
13 </div>
14 <legend></legend>
15
16 <div class="box-body">
17 <div class="nav-tabs-custom">
18 <ul class="nav nav-tabs" id="id_tab_autoins">
19 <li class=""><a href="#tab_0" data-toggle="tab" aria-expanded="false" style="font-weight:bold" >auto_install</a></li>
20 <li class=""><a href="#tab_1" data-toggle="tab" aria-expanded="false" style="font-weight:bold">auto_install_legacy</a></li>
21 <li class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false" style="font-weight:bold">auto_install_uefi</a></li>
22 <li class=""><a href="#tab_3" data-toggle="tab" aria-expanded="false" style="font-weight:bold">auto_install_ia32</a></li>
23 <li class=""><a href="#tab_4" data-toggle="tab" aria-expanded="false" style="font-weight:bold">auto_install_aa64</a></li>
24 <li class=""><a href="#tab_5" data-toggle="tab" aria-expanded="false" style="font-weight:bold">auto_install_mips</a></li>
25 </ul>
26 </div>
27
28 <table id="id_autoins_tbl" class="table table-bordered" >
29 <thead>
30 <tr>
31 <th style="width: 5%;">#</th>
32 <th id="id_th_autoins_set" style="width: 80%;"></th>
33 <th id="id_th_operation" style="width: 10%;"></th>
34 </tr>
35 </thead>
36 <tbody>
37 </tbody>
38 </table>
39 </div>
40 </div>
41 <script type="text/javascript">
42
43 function VtoyPageLanguageChange(newlang) {
44 VtoyCommonChangeLanguage(newlang);
45 $('h1[id=id_h1_page_title]').text(g_vtoy_cur_language.STR_PLUG_AUTO_INSTALL);
46
47 $("span[id=id_span_file_exist]").each(function(){
48 $(this).text(g_vtoy_cur_language.STR_FILE_EXIST);
49 });
50 $("span[id=id_span_file_nonexist]").each(function(){
51 $(this).text(g_vtoy_cur_language.STR_FILE_NONEXIST);
52 });
53 $("span[id=id_span_file_fuzzy]").each(function(){
54 $(this).text(g_vtoy_cur_language.STR_FILE_FUZZY);
55 });
56
57 $("span[id=id_span_dir_exist]").each(function(){
58 $(this).text(g_vtoy_cur_language.STR_DIR_EXIST);
59 });
60
61 $("span[id=id_span_dir_nonexist]").each(function(){
62 $(this).text(g_vtoy_cur_language.STR_DIR_NONEXIST);
63 });
64
65 $("th[id=id_th_template]").each(function(){
66 $(this).text(g_vtoy_cur_language.STR_AUTO_TEMPLATE);
67 });
68
69 if (newlang === 'en') {
70 $('#id_th_autoins_path').text('Absolute Path');
71 $('#id_th_autoins_set').text('Setting');
72 } else {
73 $('#id_th_autoins_path').text('绝对路径');
74 $('#id_th_autoins_set').text('设置');
75
76 }
77 }
78
79 function VtoySaveCurrentPage(index) {
80
81 var timeoutval = 0;
82 var autoselval = 1;
83
84 var timeouten = $('#id_timeout_en_' + index).is(':checked');
85 var autoselen = $('#id_autosel_en_' + index).is(':checked');
86
87 if (timeouten) {
88 timeoutval = parseInt($('#id_text_timeout_' + index).val());
89 }
90
91 if (autoselen) {
92 autoselval = parseInt($('#id_text_autosel_' + index).val());
93 }
94
95 callVtoy({
96 method : 'save_auto_install',
97 index: current_tab_index,
98 id: index,
99 timeout: timeoutval,
100 autosel: autoselval,
101 timeouten: timeouten,
102 autoselen: autoselen
103 }, function(e) {
104 Message.success(g_vtoy_cur_language.STR_SAVE_SUCCESS);
105 });
106 }
107
108 function OnInputTextChange() {
109 var id = $(this).attr('id');
110 var value = $(this).val();
111 var intval;
112
113 if (typeof(id) == 'undefined' || id.length <= 16) {
114 return;
115 }
116
117 var index = parseInt(id.substr(16));
118 var data = m_data_autoins[current_tab_index][index];
119
120 if (/^[0-9][0-9]*$/.test(value)) {
121 intval = parseInt(value);
122
123 if (id.startsWith('id_text_autosel_')) {
124 var list = m_data_autoins[current_tab_index][index].list;
125 if (intval > list.length) {
126 Message.error(g_vtoy_cur_language.STR_INVALID_AUTOSEL);
127 $(this).val(data.autosel);
128 return;
129 }
130 }
131
132 VtoySaveCurrentPage(index);
133 } else {
134 Message.error(g_vtoy_cur_language.STR_INVALID_NUMBER);
135
136 if (id.startsWith('id_text_timeout_')) {
137 $(this).val(data.timeout);
138 } else {
139 $(this).val(data.autosel);
140 }
141 }
142 }
143
144 function OnCheckBoxChange() {
145 var index;
146 var textid;
147 var value;
148 var id = $(this).attr('id');
149 var checked = $(this).is(':checked');
150
151 if (typeof(id) == 'undefined' || id.length <= 14) {
152 return;
153 }
154
155 index = parseInt(id.substr(14));
156 var data = m_data_autoins[current_tab_index][index];
157
158 if (id.startsWith('id_timeout_en_')) {
159 textid = 'input[id=id_text_timeout_' + index + ']';
160 value = data.timeout;
161 data.timeouten = checked;
162 } else {
163 textid = 'input[id=id_text_autosel_' + index + ']';
164 value = data.autosel;
165 data.autoselen = checked;
166 }
167
168 if (checked) {
169 $(textid).attr("disabled", false);
170 $(textid).val(value);
171 } else {
172 $(textid).attr("disabled", true);
173 $(textid).val('');
174 }
175
176 VtoySaveCurrentPage(index);
177 }
178
179
180 function FillAutoInsInnerTable(i, data) {
181 var td1, td2, td3, td4;
182 var inner = data.list;
183 var tabid = '#tbl_inner_' + (i + 1);
184 var $inner_tbl = $(tabid + ' tbody');
185
186 var inaddbtn = ventoy_get_xslg_addbtn('AutoInsInnerAddBtn');
187 var indelbtn = ventoy_get_xslg_delbtn('AutoInsInnerDelBtn');
188
189 $inner_tbl.empty();
190
191 for (var j = 0; j < inner.length; j++) {
192 var $tr;
193 td1 = '<td style="width: 5%;">'+(j+1)+'</td>';
194 td2 = '<td>'+inner[j].path+'</td>';
195 td3 = '<td style="width: 10%;">'+ventoy_get_status_line(0, inner[j].valid)+'</td>';
196 td4 = '<td style="width: 10%;">' + indelbtn + '</td>';
197
198 $tr = $('<tr>' + td1 + td2 + td3 + td4 + '</tr>');
199 $tr.data('path', inner[j].path);
200 $tr.data('index', j);
201 $tr.data('outpath', data.path);
202 $tr.data('outindex', i);
203
204 $inner_tbl.append($tr);
205 }
206
207 $tr = $('<tr><td></td><td></td><td></td><td>'+inaddbtn+'</td></tr>');
208 $tr.data('outpath', data.path);
209 $tr.data('outindex', i);
210
211 $inner_tbl.append($tr);
212 }
213
214 function FillAutoInsTable(data) {
215 var td1, td2, td3, td4, td5;
216 var addbtn = ventoy_get_addbtn('AutoInsAddBtn');
217 var delbtn = ventoy_get_delbtn('AutoInsDelBtn');
218
219 var $tbl = $("#id_autoins_tbl tbody");
220 $tbl.empty();
221
222 for (var i = 0; i < data.length; i++) {
223 var $tr;
224
225 var tdtimeout, timeoutdisable, timeoutval;
226 var tdautosel, autoseldisable, autoselval;
227 if (data[i].timeouten) {
228 tdtimeout = '<th style="width:10%;"><input id="id_timeout_en_'+i+'" checked="checked" type="checkbox"/> timeout</th>';
229 timeoutval = data[i].timeout;
230 timeoutdisable='';
231 } else {
232 tdtimeout = '<th style="width:10%;"><input id="id_timeout_en_'+i+'" type="checkbox"/> timeout</th>';
233 timeoutval='';
234 timeoutdisable='disabled="disabled"';
235 }
236 if (data[i].autoselen) {
237 tdautosel = '<th style="width:10%;"><input id="id_autosel_en_'+i+'" checked="checked" type="checkbox"/> autosel</th>';
238 autoselval = data[i].autosel;
239 autoseldisable='';
240 } else {
241 tdautosel = '<th style="width:10%;"><input id="id_autosel_en_'+i+'" type="checkbox"/> autosel</th>';
242 autoselval='';
243 autoseldisable='disabled="disabled"';
244 }
245
246
247 var tdtype = (data[i].type === 0) ? "image" : "parent";
248 var tdtbl1 ='<table class="table table-condensed">'+
249
250 '<thead><tr>' +
251 '<th>'+tdtype+'</th>'+
252 '<th style="width:10%;">Status</th>'+
253 tdtimeout +
254 tdautosel +
255 '</tr></thread>' +
256
257 '<tbody><tr>'+
258 '<td style="width:70%;vertical-align: middle;">' + data[i].path + '</td>' +
259 '<td style="vertical-align: middle;">' + ventoy_get_status_line(data[i].type, data[i].valid) + '</td>' +
260 '<td><div style="padding-left:0;" class="col-sm-8"><input type="text" '+timeoutdisable+' value="'+timeoutval+'" class="form-control" id="id_text_timeout_'+i+'"/></div></td>'+
261 '<td><div style="padding-left:0;" class="col-sm-8"><input type="text" '+autoseldisable+' value="'+autoselval+'" class="form-control" id="id_text_autosel_'+i+'"/></div></td></tr>'+
262
263 '<tr><td></td><td></td><td></td><td></td></tr>'+
264
265 '</tbody></table>';
266
267 var tdtbl2 = '<table class="table table-bordered" id="tbl_inner_' + (i+1) + '">'+
268 '<thead><tr><th>#</th><th id="id_th_template">'+g_vtoy_cur_language.STR_AUTO_TEMPLATE+'</th><th id="id_th_status">'+g_vtoy_cur_language.STR_STATUS+'</th><th id="id_th_operation">'+g_vtoy_cur_language.STR_OPERATION+'</th></tr></thead><tbody></tbody></table>';
269
270 td1 = '<td style="vertical-align: middle;">' + (i + 1) + '</td>';
271 td2 = '<td>' + tdtbl1 + tdtbl2 + '</td>';
272 td3 = '<td style="vertical-align: middle;text-align: center;">' + delbtn + '</td>';
273 $tr = $('<tr>' + td1 + td2 + td3 + '</tr>');
274
275 $tr.data('path', data[i].path);
276 $tr.data('index', i);
277 $tbl.append($tr);
278 }
279
280 $tbl.append('<tr><td></td><td></td><td style="vertical-align: middle;text-align: center;">' + addbtn + '</td></tr>');
281
282 $('input[type=text]').each(function (){
283 var id = $(this).attr('id');
284 if (typeof(id) == 'undefined') {
285 return;
286 }
287 if (id.startsWith('id_text_timeout_') || id.startsWith('id_text_autosel_')) {
288 $(this).change(OnInputTextChange);
289 }
290 });
291
292 $('input[type=checkbox]').each(function (){
293 var id = $(this).attr('id');
294 if (typeof(id) == 'undefined') {
295 return;
296 }
297 if (id.startsWith('id_timeout_en_') || id.startsWith('id_autosel_en_')) {
298 $(this).click(OnCheckBoxChange);
299 }
300 });
301
302 for (var i = 0; i < data.length; i++) {
303 FillAutoInsInnerTable(i, data[i]);
304 }
305 }
306
307 function VtoyFillCurrentPageItem(data) {
308 FillAutoInsTable(data);
309 }
310
311
312 function OnClickMultiModeTab() {
313 var href = $(this).attr('href');
314 var index = parseInt(href.substr(5, 1));
315
316 if (index < 0 || index >= g_vtoy_data_default_index || current_tab_index === index) {
317 return;
318 }
319
320 current_tab_index = index;
321 VtoyFillCurrentPageItem(m_data_autoins[index]);
322 }
323
324 function AddAutoInstallEntry(type, exist1, path1, path2) {
325 var list = m_data_autoins[current_tab_index];
326 var data_array = [
327 {
328 "path": "",
329 "valid": 1
330 }
331 ];
332 var call_array = [
333 ""
334 ];
335
336 call_array[0] = path2.substr(g_current_dir.length);
337 data_array[0].path = path2.substr(g_current_dir.length);
338
339 var data = {
340 "path": path1.substr(g_current_dir.length),
341 "list": data_array,
342 "type": type,
343 "valid": exist1,
344 "autosel": 1,
345 "timeout": 0
346 };
347
348 for (var i = 0; i < list.length; i++) {
349 if (list[i].path === data.path) {
350 Message.error(g_vtoy_cur_language.STR_DUPLICATE_PATH);
351 return;
352 }
353 }
354
355 callVtoy({
356 method : 'auto_install_add',
357 index: current_tab_index,
358 path: data.path,
359 template: call_array,
360 type: type
361 }, function(e) {
362 if (e.result === 'success') {
363 list.push(data);
364 FillAutoInsTable(list);
365 Message.success(g_vtoy_cur_language.STR_SAVE_SUCCESS);
366 } else if (e.result === 'duplicate') {
367 Message.error(g_vtoy_cur_language.STR_DUPLICATE_PATH);
368 }
369 });
370 }
371
372 function OnAddImageAutoInstall(exist1, path1, path2) {
373 AddAutoInstallEntry(0, exist1, path1, path2);
374 }
375
376 function OnAddDirAutoInstall(path1, path2) {
377 AddAutoInstallEntry(1, 1, path1, path2);
378 }
379
380 function OnAddAutoInsBtnClick(sel) {
381 if (sel === 0) {
382 var tip1 = (g_current_os === 'windows') ? '\\ISO\\Windows11.iso' : "/ISO/CentOS-7-x86_64-DVD-1908.iso";
383 var tip2 = (g_current_os === 'windows') ? '\\ISO\\Windows**.iso' : "/ISO/CentOS-7-x86_64-DVD-****.iso";
384 var tip3 = (g_current_os === 'windows') ? '\\script\\Windows_unattend.xml' : "/script/centos.ks";
385 var para = {
386 "title": g_vtoy_cur_language.STR_SET_AUTO_INS,
387 "label1": g_vtoy_cur_language.STR_FILE_PATH,
388 "label2": g_vtoy_cur_language.STR_SET_AUTO_TEMPLATE,
389 "tip1": g_current_dir + tip1,
390 "tip2": g_current_dir + tip2,
391 "tip3": g_current_dir + tip3
392 };
393
394 VtoySetFileFile(OnAddImageAutoInstall, para);
395 } else {
396 var tip1 = (g_current_os === 'windows') ? '\\ISO\\Windows' : "/ISO/Linux";
397 var tip2 = (g_current_os === 'windows') ? '\\script\\Windows_unattend.xml' : "/script/centos.ks";
398 var para = {
399 "title": g_vtoy_cur_language.STR_SET_AUTO_INS,
400 "label1": g_vtoy_cur_language.STR_DIR_PATH,
401 "label2": g_vtoy_cur_language.STR_SET_AUTO_TEMPLATE,
402 "tip1": g_current_dir + tip1,
403 "tip2": g_current_dir + tip2
404 };
405 VtoySetDirFile(OnAddDirAutoInstall, para);
406 }
407 }
408
409 function OnAutoInstallAddClick() {
410 var para = [
411 {
412 "selected": true,
413 "tip": g_vtoy_cur_language.STR_SET_AUTO_INSTALL_FOR_FILE
414 },
415 {
416 "selected": false,
417 "tip": g_vtoy_cur_language.STR_SET_AUTO_INSTALL_FOR_DIR
418 }
419 ];
420
421 VtoySelectType(OnAddAutoInsBtnClick, para);
422 }
423
424 function AutoInstallDelEntry(path, index) {
425 callVtoySync({
426 method : 'auto_install_del',
427 index: current_tab_index,
428 path: path
429 }, function(data) {
430 m_data_autoins[current_tab_index].splice(index, 1);
431 FillAutoInsTable(m_data_autoins[current_tab_index]);
432 Message.success(g_vtoy_cur_language.STR_SAVE_SUCCESS);
433 });
434 }
435
436 function OnAutoInstallDelClick() {
437 var $tr = $(this).closest('tr');
438 var path = $tr.data('path');
439 var index = $tr.data('index');
440
441 AutoInstallDelEntry(path, index);
442 }
443
444
445 var m_out_index;
446 var m_out_path;
447 function OnAddAutoTemplateScript(root, valid, extra) {
448 var path = root.substr(g_current_dir.length);
449 var data = m_data_autoins[current_tab_index][m_out_index];
450
451 for (var i = 0; i < data.list.length; i++) {
452 if (data.list[i].path === path) {
453 Message.error(g_vtoy_cur_language.STR_DUPLICATE_PATH);
454 return;
455 }
456 }
457
458 callVtoy({
459 method : 'auto_install_add_inner',
460 index: current_tab_index,
461 outpath: m_out_path,
462 path: path
463 }, function(e) {
464
465 var node = {
466 "path": path,
467 "valid": 1
468 };
469
470 data.list.push(node);
471 FillAutoInsInnerTable(m_out_index, data);
472 Message.success(g_vtoy_cur_language.STR_SAVE_SUCCESS);
473 });
474
475 }
476
477 function OnAutoInstallInnerAddClick() {
478 var $tr = $(this).closest('tr');
479 var outpath = $tr.data('outpath');
480 var outindex = $tr.data('outindex');
481
482 var tip = (g_current_os === 'windows') ? '\\script\\Windows_unattend.xml' : "/script/centos.ks";
483 var para = {
484 "title": g_vtoy_cur_language.STR_ADD_AUTO_TEMPLATE,
485 "fuzzy": 0,
486 "tip1": g_current_dir + tip,
487 "tip2": '',
488 "tip3": '',
489 "extra": false,
490 "extra_title": ''
491 };
492
493 m_out_index = outindex;
494 m_out_path = outpath;
495 VtoySelectFilePath(OnAddAutoTemplateScript, para);
496 }
497
498 function AutoInstallDelInnerEntry(outpath, outindex, path, index) {
499 callVtoy({
500 method : 'auto_install_del_inner',
501 index: current_tab_index,
502 outpath: outpath,
503 path: path
504 }, function(e) {
505 var data = m_data_autoins[current_tab_index][outindex];
506
507 data.list.splice(index, 1);
508 FillAutoInsInnerTable(outindex, m_data_autoins[current_tab_index][outindex]);
509 Message.success(g_vtoy_cur_language.STR_SAVE_SUCCESS);
510 });
511 }
512
513 function OnAutoInstallInnerDelClick() {
514 var $tr = $(this).closest('tr');
515
516 var path = $tr.data('path');
517 var index = $tr.data('index');
518 var outpath = $tr.data('outpath');
519 var outindex = $tr.data('outindex');
520
521 var list = m_data_autoins[current_tab_index][outindex].list;
522
523 if (list.length === 1) {
524 ventoy_confirm(g_vtoy_cur_language.STR_DEL_LAST, AutoInstallDelEntry, outpath, outindex);
525 } else {
526 AutoInstallDelInnerEntry(outpath, outindex, path, index);
527 }
528 }
529
530
531
532
533
534 //Main process
535 var m_data_autoins;
536 var current_tab_index = 0;
537 callVtoySync({method : 'get_auto_install'}, function(data) {
538 m_data_autoins = data;
539 });
540
541 $("#id_autoins_tbl").on('click', '.AutoInsAddBtn', OnAutoInstallAddClick);
542 $("#id_autoins_tbl").on('click', '.AutoInsDelBtn', OnAutoInstallDelClick);
543 $("#id_autoins_tbl").on('click', '.AutoInsInnerAddBtn', OnAutoInstallInnerAddClick);
544 $("#id_autoins_tbl").on('click', '.AutoInsInnerDelBtn', OnAutoInstallInnerDelClick);
545
546 $('#id_tab_autoins a[href="#tab_0"]').click(OnClickMultiModeTab);
547 $('#id_tab_autoins a[href="#tab_1"]').click(OnClickMultiModeTab);
548 $('#id_tab_autoins a[href="#tab_2"]').click(OnClickMultiModeTab);
549 $('#id_tab_autoins a[href="#tab_3"]').click(OnClickMultiModeTab);
550 $('#id_tab_autoins a[href="#tab_4"]').click(OnClickMultiModeTab);
551 $('#id_tab_autoins a[href="#tab_5"]').click(OnClickMultiModeTab);
552 function UpdateTabTitleIcon(data) {
553 CommonUpdateTabTitleIcon(data.exist_auto_install, '#id_tab_autoins a[href="#tab_', 'auto_install');
554 }
555 $('#id_btn_reset').click(function() {
556 Modal.confirm({msg:GetResetTabConfigTipMsg(current_tab_index, 'auto_install')}).on(function(e) {
557 if (e) {
558 callVtoySync({
559 method : 'auto_install_del',
560 index: current_tab_index,
561 path: g_del_all_path
562 }, function(data) {
563
564 });
565
566 m_data_autoins[current_tab_index].length = 0;
567 VtoyFillCurrentPageItem(m_data_autoins[g_vtoy_data_default_index]);
568 Message.success(g_vtoy_cur_language.STR_SAVE_SUCCESS);
569 }
570 });
571 });
572
573 $('#id_tab_autoins a[href="#tab_0"]').tab('show');
574 VtoyFillCurrentPageItem(m_data_autoins[0]);
575 VtoyPageLanguageChange(g_current_language);
576
577 </script>