]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - LinuxGUI/WebUI/index.html
Fix a bug for Linux GUI program when update from old release. (#1590)
[Ventoy.git] / LinuxGUI / WebUI / index.html
1 <html>
2 <head>
3 <meta charset="utf-8">
4 <meta http-equiv="X-UA-Compatible" content="IE=edge">
5 <!-- HTTP 1.1 -->
6 <meta http-equiv="pragma" content="no-cache">
7 <!-- HTTP 1.0 -->
8 <meta http-equiv="cache-control" content="no-cache">
9 <title>Ventoy2Disk</title>
10 <!-- Tell the browser to be responsive to screen width -->
11 <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
12 <!-- Bootstrap 3.3.5 -->
13 <link rel="stylesheet" href="static/bootstrap/css/bootstrap.min.css">
14 <!-- Font Awesome -->
15 <link rel="stylesheet" href="static/css/font-awesome.min.css">
16 <!-- Ionicons -->
17 <link rel="stylesheet" href="static/css/ionicons.min.css">
18 <!-- Theme style -->
19 <link rel="stylesheet" href="static/AdminLTE/css/AdminLTE.min.css">
20 <!-- AdminLTE Skins. Choose a skin from the css/skins
21 folder instead of downloading all of them to reduce the load. -->
22
23 <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
24 <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
25 <!--[if lt IE 9]>
26 <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
27 <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
28 <![endif]-->
29
30 <!-- ./wrapper -->
31 <!-- jQuery 2.1.4 -->
32 <script src="static/js/jQuery-2.1.4.min.js"></script>
33 <!-- jquery validate -->
34 <script src="static/js/jquery.validate.min.js"></script>
35 <!-- Bootstrap 3.3.5 -->
36 <script src="static/bootstrap/js/bootstrap.min.js"></script>
37 <!-- AdminLTE App -->
38 <script src="static/AdminLTE/js/app.min.js"></script>
39 <script src="static/js/jquery.vtoy.alert.js"></script>
40 <script src="static/js/vtoy.js"></script>
41 <script src="static/js/languages.js"></script>
42
43
44 <style type="text/css">
45 * {
46 font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
47 }
48 .modal {
49 padding-top: 80px;
50 }
51 .treeview-menu a {
52 margin-left: 20px;
53 }
54 span.vtoy_ver {
55 display:inline-block;
56 font-size:28px;
57 font-weight:bold;
58 color:red;
59 width:60%;
60 text-align:center;
61 }
62 span.vtoy_part {
63 display:inline-block;
64 font-size:14px;
65 font-weight:bold;
66 width:15%;
67 text-align:right;
68 }
69 span.vtoy_secure {
70 display:inline-block;
71 font-size:20px;
72 font-weight:bold;
73 width:15%;
74 color:#ea991f;
75 text-align:center;
76 visibility: hidden;
77 }
78 .noselect {
79 -webkit-touch-callout: none; /* iOS Safari */
80 -webkit-user-select: none; /* Safari */
81 -khtml-user-select: none; /* Konqueror HTML */
82 -moz-user-select: none; /* Old versions of Firefox */
83 -ms-user-select: none; /* Internet Explorer/Edge */
84 user-select: none; /* Non-prefixed version, currently
85 supported by Chrome, Opera and Firefox */
86 }
87 span.select {
88 visibility:hidden;
89 color:green;
90 }
91
92 .dropdown-submenu {
93 position: relative;
94 }
95
96 .dropdown-submenu>.dropdown-menu {
97 top: 0;
98 left: 100%;
99 margin-top: -6px;
100 margin-left: -1px;
101 -webkit-border-radius: 0 6px 6px 6px;
102 -moz-border-radius: 0 6px 6px;
103 border-radius: 0 6px 6px 6px;
104 }
105
106 .dropdown-submenu:hover>.dropdown-menu {
107 display: block;
108 }
109
110 .dropdown-submenu>a:after {
111 display: block;
112 content: " ";
113 float: right;
114 width: 0;
115 height: 0;
116 border-color: transparent;
117 border-style: solid;
118 border-width: 5px 0 5px 5px;
119 border-left-color: #ccc;
120 margin-top: 5px;
121 margin-right: -10px;
122 }
123
124 .dropdown-submenu:hover>a:after {
125 border-left-color: #fff;
126 }
127
128 .dropdown-submenu.pull-left {
129 float: none;
130 }
131
132 .dropdown-submenu.pull-left>.dropdown-menu {
133 left: -100%;
134 margin-left: 10px;
135 -webkit-border-radius: 6px 0 6px 6px;
136 -moz-border-radius: 6px 0 6px 6px;
137 border-radius: 6px 0 6px 6px;
138 }
139
140 select.vtoyselect {
141 -moz-appearance: none;
142 -webkit-appearance: none;
143 appearance: none;
144 background-image: url("static/img/dropdown.png");
145 background-repeat: no-repeat;
146 background-position: calc(100% - 7px) 50%;
147 background-size: 2% auto;
148 border-radius:3px;
149 padding:0;
150 padding-left:15px;
151 }
152
153 select.vtoyselect2 {
154 -moz-appearance: none;
155 -webkit-appearance: none;
156 appearance: none;
157 background-image: url("static/img/dropdown.png");
158 background-repeat: no-repeat;
159 background-position: calc(100% - 7px) 50%;
160 background-size: 10% auto;
161 border-radius:3px;
162 padding:0;
163 padding-left:15px;
164 }
165
166 select:-moz-focusring {
167 color: transparent;
168 text-shadow: 0 0 0 #555;
169 }
170
171 </style>
172 </head>
173
174 <body style="overflow:hidden;">
175 <div class="wrapper" >
176 <!-- Content Wrapper. Contains page content -->
177 <div id='vtoy_main_div' style='width:540px; position:absolute;'>
178
179 <div class="modal" id="vtoy_set_part_cfg_modal" >
180 <div class="modal-dialog" id="vtoy_set_part_cfg_modal_dlg" style="position:absolute;">
181 <div class="modal-content">
182 <form id="vtoy_set_part_cfg_form" class="form-horizontal">
183 <div class="modal-header">
184 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
185 <span aria-hidden="true">&times;</span>
186 </button>
187 <h4 id='part_config_dlg_title'>Configuration</h4>
188 </div>
189 <div class="modal-body">
190 <div class="form-group">
191 <div class="col-sm-10 checkbox">
192 <label >
193 <input type="checkbox" id="vtoy_preserve_space_checkbox" onclick="on_enable_preserve_space()"/>
194 <span id="vtoy_preserve_space_tip" style="font-size:14px;font-weight:bold;">在磁盘最后保留一段空间</span>
195 </label>
196 </div>
197 </div>
198
199 <div class="form-group" style="width:520px;">
200 <div class="col-sm-6" style="float:left; width:350px;">
201 <input type="text" maxlength="14" class="form-control" id="vtoy_preserve_space" style="font-family: couriew new;font-size: 14px;"/>
202 </div>
203 <div class="col-sm-6" style="float:left; width:150px;">
204 <select id="vtoy_space_unit_dropbox" class="form-control valid vtoyselect2" aria-invalid="false">
205 <option value="0" selected="selected">GB</option>
206 <option value="1">MB</option>
207 </select>
208 </div>
209 </div>
210
211 <hr/>
212
213 <div class="form-group">
214 <div class="col-sm-10 checkbox">
215 <label >
216 <input type="checkbox" id="vtoy_part_align_4kb"/>
217 <span id="vtoy_part_4kb_align_tip" style="font-size:14px;font-weight:bold;">分区按照 4KB 对齐</span>
218 </label>
219 </div>
220 </div>
221
222 </div>
223 <div class="modal-footer">
224 <button type="button" id='vtoy_modal_btn_ok' class="btn btn-primary btn-flat">确定</button>
225 <button type="button" id='vtoy_modal_btn_cancel' class="btn btn-default btn-flat">取消</button>
226 </div>
227 </form>
228 </div>
229 </div>
230 </div>
231
232
233 <!-- Main content -->
234 <section class="content" id="vtoy-content">
235 <div >
236 <div class="row" style="margin-top:-10px; width:535px; font-family:courier new; font-weight:bold;align:center;text-align:center;">
237 <ul class="nav nav-tabs" style="margin-left:5px;">
238 <li class="dropdown">
239 <a class="dropdown-toggle noselect" id='vtoy_option' data-toggle="dropdown" aria-expanded="false" style="cursor: pointer;">配置选项 <span class="caret"></span></a>
240 <ul class="dropdown-menu noselect">
241 <li role="presentation"><a role="menuitem" onclick="on_secure_boot()"><span id='vtoy_check_secure_boot' class="fa fa-check select"></span><span id='vtoy_menu_secure_boot'>安全启动支持</span><span class="fa fa-check select"></span></a></li>
242
243 <li class="dropdown-submenu">
244 <a id='vtoy_menu_secure_boot'><span class="fa fa-check select"></span><span id='vtoy_menu_part_style'>分区类型</span><span class="fa fa-check select"></span></a>
245 <ul class="dropdown-menu">
246 <li><a onclick="on_select_mbr_click()"><span id='vtoy_mbr_check' class="fa fa-check select"></span> MBR</a></li>
247 <li><a onclick="on_select_gpt_click()"><span id='vtoy_gpt_check' class="fa fa-check select"></span> GPT</a></li>
248 </ul>
249 </li>
250 <li role="presentation"><a role="menuitem" onclick="on_config_partition()"><span class="fa fa-check select"></span><span id='vtoy_menu_part_config'>分区设置</span><span class="fa fa-check select"></span></a></li>
251 <li role="presentation"><a role="menuitem" onclick="on_clean_ventoy()"><span class="fa fa-check select"></span><span id='vtoy_menu_clean_ventoy'>清除 Ventoy</span><span class="fa fa-check select"></span></a></li>
252 <li role="presentation"><a role="menuitem" onclick="on_show_all_device()"><span id='vtoy_check_show_all_dev' class="fa fa-check select"></span><span id='vtoy_menu_show_all_device'>显示所有设备</span><span class="fa fa-check select"></span></a></li>
253 </ul>
254 </li>
255 <li class="dropdown">
256 <a class="dropdown-toggle noselect" id='vtoy_language' data-toggle="dropdown" aria-expanded="false" style="cursor: pointer;;">Languages <span class="caret"></span></a>
257 <ul class="dropdown-menu pull-left noselect" style="height:300px;overflow:scroll" id='vtoy_language_dropbox'>
258 </ul>
259 </li>
260 </ul>
261 </div>
262
263 <div class="box-body" style=" font-weight:bold; " >
264 <div class="row" style="width:520px;">
265 <div style="float:left; width:480px;">
266 <span id="vtoy_dev_title" style="font-weight:bold; margin-left:2px;">设备</span>
267 </div>
268
269 <div style="float:left; width:480px; margin-top:2px;" >
270 <select id="vtoy_dev_list" class="form-control valid vtoyselect" aria-invalid="false">
271 </select>
272 </div>
273
274 <div style="float:right;">
275 <img src="static/img/refresh.ico" alt="" id="refresh_dev_img" style="cursor: pointer;"></img>
276 </div>
277 </div>
278
279 <div class="row" style="width:520px;margin-top:20px;">
280 <div class="box box-primary box-solid" style="float:left; width:250px;">
281 <div class="box-header with-border" style="text-align:center;">
282 <h3 class="box-title" id="vtoy_local_ver_title" style="font-size: 14px;font-weight: bold;" >安装包内 Ventoy 版本</h3>
283 </div>
284 <div class="box-body no-padding" style="height:40px;">
285 <span class="vtoy_secure fa fa-lock" id="vtoy_select_secure_icon"></span>
286 <span class="vtoy_ver" id="vtoy_local_ver"></span>
287 <span class="vtoy_part" id="vtoy_local_part_style"></span>
288 </div>
289 </div>
290
291 <div class="box box-primary box-solid" style="float:right; width:250px;">
292 <div class="box-header with-border" style="text-align:center;">
293 <h3 class="box-title" id="vtoy_dev_ver_title" style="font-size: 14px;font-weight: bold;" >设备内部 Ventoy 版本</h3>
294 </div>
295 <div class="box-body no-padding" style="height:40px;">
296 <span class="vtoy_secure fa fa-lock" id="vtoy_dev_secure_icon"></span>
297 <span class="vtoy_ver" id="vtoy_dev_ver"></span>
298 <span class="vtoy_part" id="vtoy_dev_part_style"></span>
299 </div>
300 </div>
301 </div>
302
303 <div class="row" style="width:520px;">
304 <span id="vtoy_status_title" style="font-weight:bold; margin-left:2px;">状态 - 准备就绪</span>
305 <div class="progress">
306 <div id='vtoy_progress_bar' class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
307 </div>
308 </div>
309 </div>
310
311 <div class="row" style="width:520px;margin-top:2px;">
312 <button id="VtoyBtnInstall" onclick="on_vtoy_install()" class="btn btn-default" style="font-weight:bold; width:150px;margin-left:70px;">安装</button>
313 <button id="VtoyBtnUpdate" onclick="on_vtoy_update()" class="btn btn-default" style="font-weight:bold; width:150px;margin-left:70px;">升级</button>
314 </div>
315 </div>
316
317
318
319
320
321
322
323 </div>
324 </section>
325 <!-- /.content -->
326 </div>
327
328 <!-- /.content-wrapper -->
329 </div>
330
331 <script type="text/javascript">
332
333 var vtoy_in_progress = false;
334 var vtoy_app_width = 550;
335 var vtoy_app_height = 400;
336 var vtoy_cur_language;
337 var vtoy_cur_lang_index = -1;
338 var vtoy_client_language;
339 var vtoy_selected_part_style = 0;
340 var vtoy_current_token = 'xx';
341 var vtoy_cur_dev_list;
342 var vtoy_cur_process_disk_name;
343 var vtoy_chrome_app_mode = (window.location.href.indexOf('chrome-app') >= 0) ? 1 : 0;
344
345
346 function sort_language_list() {
347 var tmp;
348 for (var i = 0; i < vtoy_language_data.length; i++) {
349 for (var j = i + 1; j < vtoy_language_data.length; j++) {
350 if (vtoy_language_data[i].name === 'Chinese Simplified (简体中文)') {
351 break;
352 }
353 else if (vtoy_language_data[j].name === 'Chinese Simplified (简体中文)' || vtoy_language_data[i].name > vtoy_language_data[j].name) {
354 tmp = vtoy_language_data[i];
355 vtoy_language_data[i] = vtoy_language_data[j];
356 vtoy_language_data[j] = tmp;
357 }
358 }
359 }
360 }
361
362 function fill_language_list() {
363 var html;
364 var dropbox = $('ul#vtoy_language_dropbox');
365 for (var i = 0; i < vtoy_language_data.length; i++) {
366 html = '<li role="presentation"><a onclick="on_language_click(' + i + ')" role="menuitem" tabindex="' + i + '">' +
367 '<span id="vtoy_check_' + i + '" class="fa fa-check" style="visibility:hidden;color:green;" ></span> ' +
368 vtoy_language_data[i].name + '</a></li>';
369 dropbox.append(html);
370 }
371 }
372
373 function update_language(lastIndex, newIndex) {
374 if (lastIndex >= 0) {
375 $('span#vtoy_check_' + lastIndex).css("visibility","hidden");
376 }
377 $('span#vtoy_check_' + newIndex).css("visibility","visible");
378
379 vtoy_cur_lang_index = newIndex;
380
381 $('a#vtoy_option').html(vtoy_cur_language.STR_MENU_OPTION + ' <span class="caret"></span>');
382 $('h3#vtoy_local_ver_title').text(vtoy_cur_language.STR_LOCAL_VER);
383 $('h3#vtoy_dev_ver_title').text(vtoy_cur_language.STR_DISK_VER);
384 $('span#vtoy_status_title').text(vtoy_cur_language.STR_STATUS);
385
386 if ($('#vtoy_preserve_space_checkbox').is(':checked')) {
387 var valx = $('#vtoy_preserve_space').val();
388 if ($('#vtoy_space_unit_dropbox').val() > 0) {
389 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE + ' [ -' + valx + 'MB ]');
390 } else {
391 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE + ' [ -' + valx + 'GB ]');
392 }
393 } else {
394 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE);
395 }
396
397 $('span#vtoy_menu_secure_boot').text(vtoy_cur_language.STR_MENU_SECURE_BOOT);
398 $('span#vtoy_menu_part_style').text(vtoy_cur_language.STR_MENU_PART_STYLE);
399 $('span#vtoy_menu_part_config').text(vtoy_cur_language.STR_MENU_PART_CFG);
400 $('span#vtoy_menu_clean_ventoy').text(vtoy_cur_language.STR_MENU_CLEAR);
401 $('span#vtoy_menu_show_all_device').text(vtoy_cur_language.STR_SHOW_ALL_DEV);
402
403 $('span#vtoy_preserve_space_tip').text(vtoy_cur_language.STR_PRESERVE_SPACE);
404 $('span#vtoy_part_4kb_align_tip').text(vtoy_cur_language.STR_PART_ALIGN_4KB);
405
406 $('button#VtoyBtnInstall').text(vtoy_cur_language.STR_INSTALL);
407 $('button#VtoyBtnUpdate').text(vtoy_cur_language.STR_UPDATE);
408
409 $('button#vtoy_modal_btn_ok').text(vtoy_cur_language.STR_BTN_OK);
410 $('button#vtoy_modal_btn_cancel').text(vtoy_cur_language.STR_BTN_CANCEL);
411
412 $('h4#part_config_dlg_title').text(vtoy_cur_language.STR_MENU_PART_CFG);
413 }
414
415 function select_language_by_name(name, sendback) {
416 for (var j = 0; j < vtoy_language_data.length; j++) {
417 if (vtoy_language_data[j].name.indexOf(name) == 0) {
418 vtoy_cur_language = vtoy_language_data[j];
419 update_language(vtoy_cur_lang_index, j);
420
421 if (sendback > 0) {
422 var idx = name.indexOf(' (');
423 if (idx >= 0) {
424 callVtoy({method : 'sel_language', token:vtoy_current_token, language:name.substr(0, idx)});
425 } else {
426 callVtoy({method : 'sel_language', token:vtoy_current_token, language:name});
427 }
428 }
429 break;
430 }
431 }
432 }
433
434 function select_language_by_index(index, sendback) {
435 if (index < vtoy_language_data.length) {
436 vtoy_cur_language = vtoy_language_data[index];
437 update_language(vtoy_cur_lang_index, index);
438
439 if (sendback > 0) {
440 var idx = vtoy_cur_language.name.indexOf(' (');
441 if (idx >= 0) {
442 callVtoy({method : 'sel_language', token:vtoy_current_token, language:vtoy_cur_language.name.substr(0, idx)});
443 } else {
444 callVtoy({method : 'sel_language', token:vtoy_current_token, language:vtoy_cur_language.name});
445 }
446 }
447 }
448 }
449
450 function on_language_click(index) {
451 if (index != vtoy_cur_lang_index) {
452 select_language_by_index(index, 1);
453 }
454 }
455
456 function on_select_mbr() {
457 vtoy_selected_part_style = 0;
458 $('span#vtoy_mbr_check').css("visibility","visible");
459 $('span#vtoy_gpt_check').css("visibility","hidden");
460 $('span#vtoy_local_part_style').text('MBR');
461 }
462
463 function on_select_mbr_click() {
464 on_select_mbr();
465 callVtoy({method : 'sel_partstyle', token:vtoy_current_token, partstyle:0});
466 }
467
468 function on_select_gpt() {
469 vtoy_selected_part_style = 1;
470 $('span#vtoy_mbr_check').css("visibility","hidden");
471 $('span#vtoy_gpt_check').css("visibility","visible");
472 $('span#vtoy_local_part_style').text('GPT');
473 }
474
475 function on_select_gpt_click() {
476 on_select_gpt();
477 callVtoy({method : 'sel_partstyle', token:vtoy_current_token, partstyle:1});
478 }
479
480 function secure_boot_check(secure) {
481 if (secure > 0) {
482 $('span#vtoy_check_secure_boot').css("visibility","visible");
483 $('span#vtoy_select_secure_icon').css("visibility","visible");
484 } else {
485 $('span#vtoy_check_secure_boot').css("visibility","hidden");
486 $('span#vtoy_select_secure_icon').css("visibility","hidden");
487 }
488 }
489
490 function on_secure_boot() {
491 var secure;
492 if ($('span#vtoy_check_secure_boot').css("visibility") === 'visible') {
493 secure = 1;
494 } else {
495 secure = 0;
496 }
497 secure_boot_check(1 - secure);
498 }
499
500 function on_show_all_device() {
501 if ($('span#vtoy_check_show_all_dev').css("visibility") === 'visible') {
502 $('span#vtoy_check_show_all_dev').css("visibility", "hidden");
503 } else {
504 $('span#vtoy_check_show_all_dev').css("visibility", "visible");
505 }
506 get_and_fill_dev_list();
507 }
508
509
510 var vtoy_part_align_4kb_tmp;
511 var vtoy_preserve_space_checkbox_tmp;
512 var vtoy_preserve_space_tmp;
513 var vtoy_space_unit_dropbox_tmp;
514
515 function on_config_partition() {
516 if (vtoy_chrome_app_mode) {
517 $("#vtoy_set_part_cfg_modal_dlg").css("width", "520px");
518 $("#vtoy_set_part_cfg_modal_dlg").css("margin-top", "-30px");
519 } else {
520 $("#vtoy_set_part_cfg_modal_dlg").css("width", "540px");
521
522 if (document.body.clientWidth > 550) {
523 $("#vtoy_set_part_cfg_modal_dlg").css("left", (document.body.clientWidth - 550) / 2);
524 }
525
526 if (document.body.clientHeight > 400) {
527 $("#vtoy_set_part_cfg_modal_dlg").css("top", (document.body.clientHeight - 400) / 2);
528 }
529 }
530
531 vtoy_part_align_4kb_tmp = $('#vtoy_part_align_4kb').prop("checked");
532 vtoy_preserve_space_checkbox_tmp = $('#vtoy_preserve_space_checkbox').prop("checked");
533 vtoy_preserve_space_tmp = $('#vtoy_preserve_space').val();
534 vtoy_space_unit_dropbox_tmp = $('#vtoy_space_unit_dropbox').val();
535
536 $('#vtoy_set_part_cfg_modal').modal({backdrop: 'static', keyboard: false});
537 }
538
539 $("#vtoy_modal_btn_ok").click(function(){
540 if ($('#vtoy_preserve_space_checkbox').is(':checked')) {
541 var valx = $('#vtoy_preserve_space').val();
542 if (valx.length > 14) {
543 ventoy_display_alert('error', vtoy_cur_language.STR_SPACE_VAL_INVALID);
544 return;
545 }
546
547 var regPat = /^\d+$/;
548 if (!(regPat.test(valx))) {
549 ventoy_display_alert('error', vtoy_cur_language.STR_SPACE_VAL_INVALID);
550 return;
551 }
552
553 if ($('#vtoy_space_unit_dropbox').val() > 0) {
554 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE + ' [ -' + valx + 'MB ]');
555 } else {
556 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE + ' [ -' + valx + 'GB ]');
557 }
558 } else {
559 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE);
560 }
561 $("#vtoy_set_part_cfg_modal").modal('hide');
562 });
563
564 $("#vtoy_modal_btn_cancel").click(function(){
565 $("#vtoy_set_part_cfg_modal").modal('hide');
566 $('#vtoy_part_align_4kb').prop("checked", vtoy_part_align_4kb_tmp);
567 $('#vtoy_preserve_space_checkbox').prop("checked", vtoy_preserve_space_checkbox_tmp);
568 $('#vtoy_preserve_space').val(vtoy_preserve_space_tmp);
569 $('#vtoy_space_unit_dropbox').val(vtoy_space_unit_dropbox_tmp);
570 });
571
572 function on_enable_preserve_space() {
573 if ($('#vtoy_preserve_space_checkbox').is(':checked')) {
574 $('#vtoy_preserve_space').attr("disabled",false);
575 $('#vtoy_space_unit_dropbox').attr("disabled",false);
576 } else {
577 $('#vtoy_preserve_space').attr("disabled",true);
578 $('#vtoy_space_unit_dropbox').attr("disabled",true);
579 }
580 }
581
582 function ResizeWindow() {
583 //console.log(window.screen.availWidth + ' [x1] ' + window.screen.availHeight);
584 //console.log(vtoy_app_width + ' [x2] ' + vtoy_app_height);
585 //console.log((window.screen.availWidth - vtoy_app_width) / 2 + ' [x3] ' + (window.screen.availHeight - vtoy_app_height) / 2);
586
587 window.onresize = function() { };
588
589 window.resizeTo(vtoy_app_width, vtoy_app_height);
590 window.moveTo((window.screen.availWidth - vtoy_app_width) / 2, (window.screen.availHeight - vtoy_app_height) / 2);
591
592 window.onresize = ResizeWindow;
593 }
594
595 function MoveMainDivToCenter() {
596 $('#vtoy_main_div').css("left", (document.body.clientWidth - 550) / 2);
597 $('#vtoy_main_div').css("top",(document.body.clientHeight - 400) / 2);
598 }
599
600 // disable F5
601 function disableF5(e) {
602 if ((e.which || e.keyCode) == 116) {
603 e.preventDefault();
604 };
605 }
606
607 function on_dev_sel_change() {
608 var index = $("#vtoy_dev_list").val();
609
610 $('span#vtoy_dev_secure_icon').css("visibility","hidden");
611
612 if (vtoy_cur_dev_list.length <= 0 || index < 0 || index >= vtoy_cur_dev_list.length) {
613 return;
614 }
615
616 if (vtoy_cur_dev_list[index].vtoy_valid > 0) {
617 $('span#vtoy_dev_ver').text(vtoy_cur_dev_list[index].vtoy_ver);
618 $('span#vtoy_dev_part_style').text(vtoy_cur_dev_list[index].vtoy_partstyle ? 'GPT' : 'MBR');
619 if (vtoy_cur_dev_list[index].vtoy_secure_boot) {
620 $('span#vtoy_dev_secure_icon').css("visibility","visible");
621 }
622
623 secure_boot_check(vtoy_cur_dev_list[index].vtoy_secure_boot);
624
625 $('button#VtoyBtnUpdate').prop("disabled", false);
626
627 } else {
628 $('span#vtoy_dev_ver').text('');
629 $('span#vtoy_dev_part_style').text('');
630 $('button#VtoyBtnUpdate').prop("disabled", true);
631 }
632 }
633
634 $("#vtoy_dev_list").change(on_dev_sel_change);
635
636 function ventoy_display_alert(type, vmsg) {
637 var titlestr;
638 var msgstr;
639 var message;
640
641 if (type === 'error') {
642 titlestr = '<span class="fa fa-minus-circle" style="color:#dd4b39; font-weight:bold;"> ' + vtoy_cur_language.STR_ERROR + '</span>';
643 } else if (type === 'warning') {
644 titlestr = '<span class="fa fa-warning" style="color:#f39c12; font-weight:bold;"> ' + vtoy_cur_language.STR_WARNING + '</span>';
645 } else {
646 titlestr = '<span class="fa fa-check-circle" style="color:green; font-weight:bold;"> ' + vtoy_cur_language.STR_INFO + '</span>';
647 }
648
649 msgstr = '<span style="font-size:14px; font-weight:bold;"> ' + vmsg + '</span>';
650 message = msgstr.replace("#@", "<br/>");
651
652 Modal.alert({title:titlestr, msg:message, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL });
653 }
654
655 function set_progress_bar(percent) {
656 var per = percent + '%';
657
658 $('#vtoy_progress_bar').css('width', per);
659
660 if (percent === 0) {
661 $('span#vtoy_status_title').text(vtoy_cur_language.STR_STATUS);
662 } else {
663 var status = vtoy_cur_language.STR_STATUS;
664 var idx = status.indexOf('- ');
665
666 if (idx >= 0) {
667 $('span#vtoy_status_title').text(status.substr(0, idx + 2) + per);
668 }
669 }
670 }
671
672
673 function progressDisableItem(in_progress) {
674 $('button#VtoyBtnInstall').prop("disabled", in_progress);
675 $('button#VtoyBtnUpdate').prop("disabled", in_progress);
676 }
677
678 function queryProgress(op) {
679 callVtoySync({
680 method : 'get_percent',
681 token : vtoy_current_token
682 }, function(data) {
683 if (data.result === 'success') {
684 set_progress_bar(data.percent);
685 if (data.percent === 100) {
686 var titlestr = '<span class="fa fa-check-circle" style="color:green; font-weight:bold;"> ' + vtoy_cur_language.STR_INFO + '</span>';
687 var msgstr;
688
689 if (op === 1) {
690 msgstr = '<span style="font-size:14px; font-weight:bold;"> ' + vtoy_cur_language.STR_INSTALL_SUCCESS + '</span>';
691 } else {
692 msgstr = '<span style="font-size:14px; font-weight:bold;"> ' + vtoy_cur_language.STR_UPDATE_SUCCESS + '</span>';
693 }
694 var message = msgstr.replace("#@", "<br/>");
695
696 callVtoySync({
697 method : 'refresh_device',
698 token : vtoy_current_token
699 }, function(data) {
700 get_and_fill_dev_list();
701
702 for (var i = 0; i < vtoy_cur_dev_list.length; i++) {
703 if (vtoy_cur_dev_list[i].name === vtoy_cur_process_disk_name) {
704 $("#vtoy_dev_list").val(i);
705 on_dev_sel_change();
706 break;
707 }
708 }
709 });
710
711 Modal.alert({title:titlestr, msg:message, btnok:vtoy_cur_language.STR_BTN_OK }).on(function(e) {
712 vtoy_in_progress = false;
713 progressDisableItem(vtoy_in_progress);
714 set_progress_bar(0);
715 });
716 } else {
717 setTimeout(function() {
718 queryProgress(op);
719 }, 300);
720 }
721 } else {
722
723 if (data.result === 'mbr2tb') {
724 ventoy_display_alert('error', vtoy_cur_language.STR_DISK_2TB_MBR_ERROR);
725 } else if (data.result === 'reserve_invalid') {
726 ventoy_display_alert('error', vtoy_cur_language.STR_SPACE_VAL_INVALID);
727 } else {
728 ventoy_display_alert('error', (op === 1) ? vtoy_cur_language.STR_INSTALL_FAILED : vtoy_cur_language.STR_UPDATE_FAILED);
729 }
730
731 vtoy_in_progress = false;
732 progressDisableItem(vtoy_in_progress);
733 set_progress_bar(0);
734 }
735 });
736 }
737
738 function install_ventoy(index, reservesize) {
739 var secureboot;
740 var curDev = vtoy_cur_dev_list[index];
741 var align = $('#vtoy_part_align_4kb').prop("checked");
742
743 vtoy_cur_process_disk_name = curDev.name;
744
745 if ($('span#vtoy_check_secure_boot').css("visibility") === 'visible') {
746 secureboot = 1;
747 } else {
748 secureboot = 0;
749 }
750
751 callVtoySync({
752 method : 'install',
753 token : vtoy_current_token,
754 disk : curDev.name,
755 partstyle : vtoy_selected_part_style,
756 secure_boot : secureboot,
757 align_4kb : align ? 1 : 0,
758 reserve_space : reservesize + ''
759 }, function(data) {
760 if (data.result === 'success') {
761 vtoy_in_progress = true;
762 progressDisableItem(vtoy_in_progress);
763 queryProgress(1);
764 } else {
765 ventoy_display_alert('error', vtoy_cur_language.STR_INSTALL_FAILED);
766 }
767 });
768 }
769
770
771 function on_vtoy_install() {
772 var model;
773 var reserve;
774 var titlestr = '<span class="fa fa-warning" style="color:#f39c12; font-weight:bold;"> ' + vtoy_cur_language.STR_WARNING + '</span>';
775 var msgstr1 = vtoy_cur_language.STR_INSTALL_TIP.replace("#@", "<br/>");
776 var msgstr2 = vtoy_cur_language.STR_INSTALL_TIP2.replace("#@", "<br/>");
777 var index = $("#vtoy_dev_list").val();
778
779 if (vtoy_cur_dev_list.length <= 0 || index < 0 || index >= vtoy_cur_dev_list.length) {
780 return;
781 }
782
783 if (vtoy_in_progress) {
784 return;
785 }
786
787 if ($('#vtoy_preserve_space_checkbox').is(':checked')) {
788 var valx = $('#vtoy_preserve_space').val();
789 if (valx.length > 14) {
790 ventoy_display_alert('error', vtoy_cur_language.STR_SPACE_VAL_INVALID);
791 return;
792 }
793
794 if (valx > 0) {
795 if ($('#vtoy_space_unit_dropbox').val() > 0) {
796 reserve = valx * 1024 * 1024;
797 } else {
798 reserve = valx * 1024 * 1024 * 1024;
799 }
800 }
801 } else {
802 reserve = 0;
803 }
804
805 var curDev = vtoy_cur_dev_list[index];
806 model = curDev.name + '&nbsp;&nbsp;[' + curDev.size + ']&nbsp;&nbsp;' + curDev.model + '<br/>';
807 var msgstrex1 = '<span style="font-size:14px; font-weight:bold;"> ' + model + msgstr1 + '</span>';
808 var msgstrex2 = '<span style="font-size:14px; font-weight:bold; color:#f39c12;"> ' + model + msgstr2 + '</span>';
809
810 Modal.confirm({title:titlestr, msg:msgstrex1, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e) {
811 if (e) {
812 Modal.confirm({title:titlestr, msg:msgstrex2, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e1) {
813 if (e1) {
814 install_ventoy(index, reserve);
815 }
816 });
817 }
818 });
819 }
820
821
822 function update_ventoy(index) {
823 var secureboot;
824 var curDev = vtoy_cur_dev_list[index];
825
826 vtoy_cur_process_disk_name = curDev.name;
827
828 if ($('span#vtoy_check_secure_boot').css("visibility") === 'visible') {
829 secureboot = 1;
830 } else {
831 secureboot = 0;
832 }
833
834 callVtoySync({
835 method : 'update',
836 token : vtoy_current_token,
837 disk : curDev.name,
838 secure_boot : secureboot
839 }, function(data) {
840 if (data.result === 'success') {
841 vtoy_in_progress = true;
842 progressDisableItem(vtoy_in_progress);
843 queryProgress(2);
844 } else {
845 ventoy_display_alert('error', vtoy_cur_language.STR_UPDATE_FAILED);
846 }
847 });
848 }
849
850 function on_vtoy_update() {
851 var model;
852 var reserve;
853 var titlestr = '<span class="fa fa-info" style="color:green; font-weight:bold;"> ' + vtoy_cur_language.STR_INFO + '</span>';
854 var msgstr1 = vtoy_cur_language.STR_UPDATE_TIP.replace("#@", "<br/>");
855 var index = $("#vtoy_dev_list").val();
856
857 if (vtoy_cur_dev_list.length <= 0 || index < 0 || index >= vtoy_cur_dev_list.length) {
858 return;
859 }
860
861 if (vtoy_in_progress) {
862 return;
863 }
864
865 var curDev = vtoy_cur_dev_list[index];
866 model = curDev.name + '&nbsp;&nbsp;[' + curDev.size + ']&nbsp;&nbsp;' + curDev.model + '<br/>';
867 var msgstrex1 = '<span style="font-size:14px; font-weight:bold;"> ' + model + msgstr1 + '</span>';
868
869 Modal.confirm({title:titlestr, msg:msgstrex1, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e) {
870 if (e) {
871 update_ventoy(index);
872 }
873 });
874 }
875
876 function on_clean_ventoy() {
877 var model;
878 var reserve;
879 var titlestr = '<span class="fa fa-warning" style="color:#f39c12; font-weight:bold;"> ' + vtoy_cur_language.STR_WARNING + '</span>';
880 var msgstr1 = vtoy_cur_language.STR_INSTALL_TIP.replace("#@", "<br/>");
881 var msgstr2 = vtoy_cur_language.STR_INSTALL_TIP2.replace("#@", "<br/>");
882 var index = $("#vtoy_dev_list").val();
883
884 if (vtoy_cur_dev_list.length <= 0 || index < 0 || index >= vtoy_cur_dev_list.length) {
885 return;
886 }
887
888 if (vtoy_in_progress) {
889 return;
890 }
891
892 var curDev = vtoy_cur_dev_list[index];
893 model = curDev.name + '&nbsp;&nbsp;[' + curDev.size + ']&nbsp;&nbsp;' + curDev.model + '<br/>';
894 var msgstrex1 = '<span style="font-size:14px; font-weight:bold;"> ' + model + msgstr1 + '</span>';
895 var msgstrex2 = '<span style="font-size:14px; font-weight:bold; color:#f39c12;"> ' + model + msgstr2 + '</span>';
896
897 Modal.confirm({title:titlestr, msg:msgstrex1, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e) {
898 if (e) {
899 Modal.confirm({title:titlestr, msg:msgstrex2, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e1) {
900 if (e1) {
901 callVtoySync({
902 method : 'clean',
903 token : vtoy_current_token,
904 disk : curDev.name
905 }, function(data) {
906 if (data.result === 'success') {
907 ventoy_display_alert('success', vtoy_cur_language.STR_CLEAR_SUCCESS);
908
909 callVtoySync({
910 method : 'refresh_device',
911 token : vtoy_current_token
912 }, function(data) {
913 get_and_fill_dev_list();
914
915 for (var i = 0; i < vtoy_cur_dev_list.length; i++) {
916 if (vtoy_cur_dev_list[i].name === curDev.name) {
917 $("#vtoy_dev_list").val(i);
918 on_dev_sel_change();
919 break;
920 }
921 }
922 });
923
924 } else {
925 ventoy_display_alert('error', vtoy_cur_language.STR_CLEAR_FAILED);
926 }
927 });
928 }
929 });
930 }
931 });
932 }
933
934
935
936 function fill_dev_list_dropbox() {
937 var model;
938 $('#vtoy_dev_list').empty();
939 $('span#vtoy_dev_secure_icon').css("visibility","hidden");
940
941 for (var i = 0; i < vtoy_cur_dev_list.length; i++) {
942 model = vtoy_cur_dev_list[i].name + '&nbsp;&nbsp;[' + vtoy_cur_dev_list[i].size + ']&nbsp;&nbsp;' + vtoy_cur_dev_list[i].model;
943 $("#vtoy_dev_list").append("<option value='" + i + "'>" + model + "</option>");
944 }
945
946 $('span#vtoy_dev_ver').text('');
947 $('span#vtoy_dev_part_style').text('');
948
949 if (vtoy_cur_dev_list.length > 0) {
950 if (vtoy_cur_dev_list[0].vtoy_valid > 0) {
951 $('span#vtoy_dev_ver').text(vtoy_cur_dev_list[0].vtoy_ver);
952 $('span#vtoy_dev_part_style').text(vtoy_cur_dev_list[0].vtoy_partstyle ? 'GPT' : 'MBR');
953 if (vtoy_cur_dev_list[0].vtoy_secure_boot) {
954 $('span#vtoy_dev_secure_icon').css("visibility","visible");
955 }
956
957 secure_boot_check(vtoy_cur_dev_list[0].vtoy_secure_boot);
958
959 $('button#VtoyBtnUpdate').prop("disabled", false);
960 } else {
961 $('button#VtoyBtnUpdate').prop("disabled", true);
962 }
963 $('button#VtoyBtnInstall').prop("disabled", false);
964 } else {
965 $('button#VtoyBtnInstall').prop("disabled", true);
966 $('button#VtoyBtnUpdate').prop("disabled", true);
967 }
968 }
969
970 function get_and_fill_dev_list() {
971 var showall = 0;
972 if ($('span#vtoy_check_show_all_dev').css("visibility") === 'visible') {
973 showall = 1;
974 }
975
976 callVtoySync({
977 method : 'get_dev_list',
978 alldev : showall,
979 token : vtoy_current_token
980 }, function(data) {
981 vtoy_cur_dev_list = data.list;
982 fill_dev_list_dropbox();
983 });
984 }
985
986 function on_click_refresh_device() {
987 if (vtoy_in_progress === true) {
988 return;
989 }
990 callVtoySync({
991 method : 'refresh_device',
992 token : vtoy_current_token
993 }, function(data) {
994 get_and_fill_dev_list();
995 });
996 }
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013 //SCRIPT_DEL_THIS $(document).on("keydown", disableF5);
1014 //SCRIPT_DEL_THIS $(document).on("contextmenu",function(e){ return false; });
1015
1016 $('#refresh_dev_img').click(on_click_refresh_device);
1017 $('#vtoy_part_align_4kb').prop("checked", true);
1018
1019 if (vtoy_chrome_app_mode) {
1020 ResizeWindow();
1021 } else {
1022 $('#vtoy_main_div').css("border", '2px solid #f4f4f4');
1023 window.onresize = function() {
1024 MoveMainDivToCenter();
1025 }
1026 MoveMainDivToCenter();
1027 }
1028
1029 sort_language_list();
1030 fill_language_list();
1031
1032 if (navigator.language) {
1033 vtoy_client_language = navigator.language.toLowerCase();
1034 }
1035 else {
1036 vtoy_client_language = navigator.browserLanguage.toLowerCase();
1037 }
1038
1039 if (vtoy_client_language === 'zh-cn') {
1040 select_language_by_index(0, 0);
1041 } else {
1042 select_language_by_name('English (English)', 0);
1043 }
1044
1045 on_select_mbr();
1046 secure_boot_check(0);
1047
1048 on_enable_preserve_space();
1049
1050 callVtoySync({
1051 method : 'sysinfo'
1052 }, function(data) {
1053 vtoy_current_token = data.token;
1054 if (data.language.length > 0) {
1055 select_language_by_name(data.language, 0);
1056 }
1057
1058 if (data.busy === true) {
1059 vtoy_cur_process_disk_name = data.process_disk;
1060 vtoy_in_progress = true;
1061 } else {
1062 vtoy_in_progress = false;
1063 }
1064
1065 if (data.partstyle == 1) {
1066 on_select_gpt();
1067 } else {
1068 on_select_mbr();
1069 }
1070
1071 $('span#vtoy_local_ver').text(data.ventoy_ver);
1072
1073 callVtoySync({
1074 method : 'refresh_device',
1075 token : vtoy_current_token
1076 }, function(data) {
1077 get_and_fill_dev_list();
1078 });
1079
1080 if (vtoy_in_progress) {
1081 for (var i = 0; i < vtoy_cur_dev_list.length; i++) {
1082 if (vtoy_cur_dev_list[i].name === vtoy_cur_process_disk_name) {
1083 $("#vtoy_dev_list").val(i);
1084 on_dev_sel_change();
1085 break;
1086 }
1087 }
1088
1089 progressDisableItem(vtoy_in_progress);
1090 if (data.process_type === 'install') {
1091 queryProgress(1);
1092 } else if (data.process_type === 'update') {
1093 queryProgress(2);
1094 }
1095 }
1096 });
1097
1098 </script>
1099 </body>
1100
1101 </html>