4 <meta http-equiv=
"X-UA-Compatible" content=
"IE=edge">
6 <meta http-equiv=
"pragma" content=
"no-cache">
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">
15 <link rel=
"stylesheet" href=
"static/css/font-awesome.min.css">
17 <link rel=
"stylesheet" href=
"static/css/ionicons.min.css">
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. -->
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:// -->
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>
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>
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>
44 <style type=
"text/css">
46 font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
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 */
96 .dropdown-submenu
>.dropdown-menu {
101 -webkit-border-radius:
0 6px
6px
6px;
102 -moz-border-radius:
0 6px
6px;
103 border-radius:
0 6px
6px
6px;
106 .dropdown-submenu:hover
>.dropdown-menu {
110 .dropdown-submenu
>a:after {
116 border-color: transparent;
118 border-width:
5px
0 5px
5px;
119 border-left-color: #ccc;
124 .dropdown-submenu:hover
>a:after {
125 border-left-color: #fff;
128 .dropdown-submenu.pull-left {
132 .dropdown-submenu.pull-left
>.dropdown-menu {
135 -webkit-border-radius:
6px
0 6px
6px;
136 -moz-border-radius:
6px
0 6px
6px;
137 border-radius:
6px
0 6px
6px;
141 -moz-appearance: none;
142 -webkit-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;
154 -moz-appearance: none;
155 -webkit-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;
166 select:-moz-focusring {
168 text-shadow:
0 0 0 #
555;
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;'
>
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">×</span>
187 <h4 id='part_config_dlg_title'
>Configuration
</h4>
189 <div class=
"modal-body">
190 <div class=
"form-group">
191 <div class=
"col-sm-10 checkbox">
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>
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;"/>
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>
213 <div class=
"form-group">
214 <div class=
"col-sm-10 checkbox">
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>
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>
233 <!-- Main content -->
234 <section class=
"content" id=
"vtoy-content">
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>
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>
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>
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'
>
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>
269 <div style=
"float:left; width:480px; margin-top:2px;" >
270 <select id=
"vtoy_dev_list" class=
"form-control valid vtoyselect" aria-invalid=
"false">
274 <div style=
"float:right;">
275 <img src=
"static/img/refresh.ico" alt=
"" id=
"refresh_dev_img" style=
"cursor: pointer;"></img>
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>
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>
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>
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>
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%">
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>
328 <!-- /.content-wrapper -->
331 <script type=
"text/javascript">
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;
346 function sort_language_list() {
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 (简体中文)') {
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;
362 function fill_language_list() {
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);
373 function update_language(lastIndex, newIndex) {
374 if (lastIndex
>=
0) {
375 $('span#vtoy_check_' + lastIndex).css("visibility","hidden");
377 $('span#vtoy_check_' + newIndex).css("visibility","visible");
379 vtoy_cur_lang_index = newIndex;
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);
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 ]');
391 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE + ' [ -' + valx + 'GB ]');
394 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE);
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);
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);
406 $('button#VtoyBtnInstall').text(vtoy_cur_language.STR_INSTALL);
407 $('button#VtoyBtnUpdate').text(vtoy_cur_language.STR_UPDATE);
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);
412 $('h4#part_config_dlg_title').text(vtoy_cur_language.STR_MENU_PART_CFG);
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);
422 var idx = name.indexOf(' (');
424 callVtoy({method : 'sel_language', token:vtoy_current_token, language:name.substr(
0, idx)});
426 callVtoy({method : 'sel_language', token:vtoy_current_token, language:name});
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);
440 var idx = vtoy_cur_language.name.indexOf(' (');
442 callVtoy({method : 'sel_language', token:vtoy_current_token, language:vtoy_cur_language.name.substr(
0, idx)});
444 callVtoy({method : 'sel_language', token:vtoy_current_token, language:vtoy_cur_language.name});
450 function on_language_click(index) {
451 if (index != vtoy_cur_lang_index) {
452 select_language_by_index(index,
1);
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');
463 function on_select_mbr_click() {
465 callVtoy({method : 'sel_partstyle', token:vtoy_current_token, partstyle:
0});
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');
475 function on_select_gpt_click() {
477 callVtoy({method : 'sel_partstyle', token:vtoy_current_token, partstyle:
1});
480 function secure_boot_check(secure) {
482 $('span#vtoy_check_secure_boot').css(
"visibility",
"visible");
483 $('span#vtoy_select_secure_icon').css(
"visibility",
"visible");
485 $('span#vtoy_check_secure_boot').css(
"visibility",
"hidden");
486 $('span#vtoy_select_secure_icon').css(
"visibility",
"hidden");
490 function on_secure_boot() {
492 if ($('span#vtoy_check_secure_boot').css(
"visibility") === 'visible') {
497 secure_boot_check(
1 - secure);
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");
504 $('span#vtoy_check_show_all_dev').css(
"visibility",
"visible");
506 get_and_fill_dev_list();
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;
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");
520 $(
"#vtoy_set_part_cfg_modal_dlg").css(
"width",
"540px");
522 if (document.body.clientWidth
> 550) {
523 $(
"#vtoy_set_part_cfg_modal_dlg").css(
"left", (document.body.clientWidth -
550) /
2);
526 if (document.body.clientHeight
> 400) {
527 $(
"#vtoy_set_part_cfg_modal_dlg").css(
"top", (document.body.clientHeight -
400) /
2);
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();
536 $('#vtoy_set_part_cfg_modal').modal({backdrop: 'static', keyboard: false});
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);
547 var regPat = /^\d+$/;
548 if (!(regPat.test(valx))) {
549 ventoy_display_alert('error', vtoy_cur_language.STR_SPACE_VAL_INVALID);
553 if ($('#vtoy_space_unit_dropbox').val()
> 0) {
554 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE + ' [ -' + valx + 'MB ]');
556 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE + ' [ -' + valx + 'GB ]');
559 $('span#vtoy_dev_title').text(vtoy_cur_language.STR_DEVICE);
561 $(
"#vtoy_set_part_cfg_modal").modal('hide');
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);
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);
577 $('#vtoy_preserve_space').attr(
"disabled",true);
578 $('#vtoy_space_unit_dropbox').attr(
"disabled",true);
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);
587 window.onresize = function() { };
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);
592 window.onresize = ResizeWindow;
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);
601 function disableF5(e) {
602 if ((e.which || e.keyCode) ==
116) {
607 function on_dev_sel_change() {
608 var index = $(
"#vtoy_dev_list").val();
610 $('span#vtoy_dev_secure_icon').css(
"visibility",
"hidden");
612 if (vtoy_cur_dev_list.length <=
0 || index <
0 || index
>= vtoy_cur_dev_list.length) {
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");
623 secure_boot_check(vtoy_cur_dev_list[index].vtoy_secure_boot);
625 $('button#VtoyBtnUpdate').prop(
"disabled", false);
628 $('span#vtoy_dev_ver').text('');
629 $('span#vtoy_dev_part_style').text('');
630 $('button#VtoyBtnUpdate').prop(
"disabled", true);
634 $(
"#vtoy_dev_list").change(on_dev_sel_change);
636 function ventoy_display_alert(type, vmsg) {
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>';
646 titlestr = '
<span class=
"fa fa-check-circle" style=
"color:green; font-weight:bold;"> ' + vtoy_cur_language.STR_INFO + '
</span>';
649 msgstr = '
<span style=
"font-size:14px; font-weight:bold;"> ' + vmsg + '
</span>';
650 message = msgstr.replace("#@", "
<br/>");
652 Modal.alert({title:titlestr, msg:message, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL });
655 function set_progress_bar(percent) {
656 var per = percent + '%';
658 $('#vtoy_progress_bar').css('width', per);
661 $('span#vtoy_status_title').text(vtoy_cur_language.STR_STATUS);
663 var status = vtoy_cur_language.STR_STATUS;
664 var idx = status.indexOf('- ');
667 $('span#vtoy_status_title').text(status.substr(0, idx + 2) + per);
673 function progressDisableItem(in_progress) {
674 $('button#VtoyBtnInstall').prop("disabled
", in_progress);
675 $('button#VtoyBtnUpdate').prop("disabled
", in_progress);
678 function queryProgress(op) {
680 method : 'get_percent',
681 token : vtoy_current_token
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>';
690 msgstr = '<span style="font-size:
14px; font-weight:bold;
"> ' + vtoy_cur_language.STR_INSTALL_SUCCESS + '</span>';
692 msgstr = '<span style="font-size:
14px; font-weight:bold;
"> ' + vtoy_cur_language.STR_UPDATE_SUCCESS + '</span>';
694 var message = msgstr.replace("#@", "
<br/>");
697 method : 'refresh_device',
698 token : vtoy_current_token
700 get_and_fill_dev_list();
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);
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);
717 setTimeout(function() {
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);
728 ventoy_display_alert('error', (op === 1) ? vtoy_cur_language.STR_INSTALL_FAILED : vtoy_cur_language.STR_UPDATE_FAILED);
731 vtoy_in_progress = false;
732 progressDisableItem(vtoy_in_progress);
738 function install_ventoy(index, reservesize) {
740 var curDev = vtoy_cur_dev_list[index];
741 var align = $('#vtoy_part_align_4kb').prop("checked
");
743 vtoy_cur_process_disk_name = curDev.name;
745 if ($('span#vtoy_check_secure_boot').css("visibility
") === 'visible') {
753 token : vtoy_current_token,
755 partstyle : vtoy_selected_part_style,
756 secure_boot : secureboot,
757 align_4kb : align ? 1 : 0,
758 reserve_space : reservesize + ''
760 if (data.result === 'success') {
761 vtoy_in_progress = true;
762 progressDisableItem(vtoy_in_progress);
764 }else if (data.result === '4kn') {
765 ventoy_display_alert('error', vtoy_cur_language.STR_4KN_UNSUPPORTED);
767 ventoy_display_alert('error', vtoy_cur_language.STR_INSTALL_FAILED);
773 function on_vtoy_install() {
776 var titlestr = '<span class="fa fa-warning
" style="color:#f39c12; font-weight:bold;
"> ' + vtoy_cur_language.STR_WARNING + '</span>';
777 var msgstr1 = vtoy_cur_language.STR_INSTALL_TIP.replace("#@", "
<br/>");
778 var msgstr2 = vtoy_cur_language.STR_INSTALL_TIP2.replace("#@
", "<br/>");
779 var index = $("#vtoy_dev_list
").val();
781 if (vtoy_cur_dev_list.length <= 0 || index < 0 || index >= vtoy_cur_dev_list.length) {
785 if (vtoy_in_progress) {
789 if ($('#vtoy_preserve_space_checkbox').is(':checked')) {
790 var valx = $('#vtoy_preserve_space').val();
791 if (valx.length > 14) {
792 ventoy_display_alert('error', vtoy_cur_language.STR_SPACE_VAL_INVALID);
797 if ($('#vtoy_space_unit_dropbox').val() > 0) {
798 reserve = valx * 1024 * 1024;
800 reserve = valx * 1024 * 1024 * 1024;
807 var curDev = vtoy_cur_dev_list[index];
808 model = curDev.name + ' [' + curDev.size + '] ' + curDev.model + '<br/>';
809 var msgstrex1 = '<span style="font-size:
14px; font-weight:bold;
"> ' + model + msgstr1 + '</span>';
810 var msgstrex2 = '<span style="font-size:
14px; font-weight:bold; color:#f39c12;
"> ' + model + msgstr2 + '</span>';
812 Modal.confirm({title:titlestr, msg:msgstrex1, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e) {
814 Modal.confirm({title:titlestr, msg:msgstrex2, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e1) {
816 install_ventoy(index, reserve);
824 function update_ventoy(index) {
826 var curDev = vtoy_cur_dev_list[index];
828 vtoy_cur_process_disk_name = curDev.name;
830 if ($('span#vtoy_check_secure_boot').css("visibility") === 'visible') {
838 token : vtoy_current_token,
840 secure_boot : secureboot
842 if (data.result === 'success') {
843 vtoy_in_progress = true;
844 progressDisableItem(vtoy_in_progress);
847 ventoy_display_alert('error', vtoy_cur_language.STR_UPDATE_FAILED);
852 function on_vtoy_update() {
855 var titlestr = '
<span class=
"fa fa-info" style=
"color:green; font-weight:bold;"> ' + vtoy_cur_language.STR_INFO + '
</span>';
856 var msgstr1 = vtoy_cur_language.STR_UPDATE_TIP.replace("#@", "
<br/>");
857 var index = $("#vtoy_dev_list
").val();
859 if (vtoy_cur_dev_list.length <= 0 || index < 0 || index >= vtoy_cur_dev_list.length) {
863 if (vtoy_in_progress) {
867 var curDev = vtoy_cur_dev_list[index];
868 model = curDev.name + ' [' + curDev.size + '] ' + curDev.model + '<br/>';
869 var msgstrex1 = '<span style="font-size:
14px; font-weight:bold;
"> ' + model + msgstr1 + '</span>';
871 Modal.confirm({title:titlestr, msg:msgstrex1, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e) {
873 update_ventoy(index);
878 function on_clean_ventoy() {
881 var titlestr = '<span class="fa fa-warning
" style="color:#f39c12; font-weight:bold;
"> ' + vtoy_cur_language.STR_WARNING + '</span>';
882 var msgstr1 = vtoy_cur_language.STR_INSTALL_TIP.replace("#@", "
<br/>");
883 var msgstr2 = vtoy_cur_language.STR_INSTALL_TIP2.replace("#@
", "<br/>");
884 var index = $("#vtoy_dev_list
").val();
886 if (vtoy_cur_dev_list.length <= 0 || index < 0 || index >= vtoy_cur_dev_list.length) {
890 if (vtoy_in_progress) {
894 var curDev = vtoy_cur_dev_list[index];
895 model = curDev.name + ' [' + curDev.size + '] ' + curDev.model + '<br/>';
896 var msgstrex1 = '<span style="font-size:
14px; font-weight:bold;
"> ' + model + msgstr1 + '</span>';
897 var msgstrex2 = '<span style="font-size:
14px; font-weight:bold; color:#f39c12;
"> ' + model + msgstr2 + '</span>';
899 Modal.confirm({title:titlestr, msg:msgstrex1, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e) {
901 Modal.confirm({title:titlestr, msg:msgstrex2, btnok:vtoy_cur_language.STR_BTN_OK, btncl:vtoy_cur_language.STR_BTN_CANCEL }).on(function(e1) {
905 token : vtoy_current_token,
908 if (data.result === 'success') {
909 ventoy_display_alert('success', vtoy_cur_language.STR_CLEAR_SUCCESS);
912 method : 'refresh_device',
913 token : vtoy_current_token
915 get_and_fill_dev_list();
917 for (var i = 0; i < vtoy_cur_dev_list.length; i++) {
918 if (vtoy_cur_dev_list[i].name === curDev.name) {
919 $("#vtoy_dev_list").val(i);
927 ventoy_display_alert('error', vtoy_cur_language.STR_CLEAR_FAILED);
938 function fill_dev_list_dropbox() {
940 $('#vtoy_dev_list').empty();
941 $('span#vtoy_dev_secure_icon').css("visibility","hidden");
943 for (var i =
0; i < vtoy_cur_dev_list.length; i++) {
944 model = vtoy_cur_dev_list[i].name + '
[' + vtoy_cur_dev_list[i].size + ']
' + vtoy_cur_dev_list[i].model;
945 $("#vtoy_dev_list").append("
<option value='
" + i + "'
>" + model + "</option>");
948 $('span#vtoy_dev_ver').text('');
949 $('span#vtoy_dev_part_style').text('');
951 if (vtoy_cur_dev_list.length > 0) {
952 if (vtoy_cur_dev_list[0].vtoy_valid > 0) {
953 $('span#vtoy_dev_ver').text(vtoy_cur_dev_list[0].vtoy_ver);
954 $('span#vtoy_dev_part_style').text(vtoy_cur_dev_list[0].vtoy_partstyle ? 'GPT' : 'MBR');
955 if (vtoy_cur_dev_list[0].vtoy_secure_boot) {
956 $('span#vtoy_dev_secure_icon').css("visibility
","visible
");
959 secure_boot_check(vtoy_cur_dev_list[0].vtoy_secure_boot);
961 $('button#VtoyBtnUpdate').prop("disabled
", false);
963 $('button#VtoyBtnUpdate').prop("disabled
", true);
965 $('button#VtoyBtnInstall').prop("disabled
", false);
967 $('button#VtoyBtnInstall').prop("disabled
", true);
968 $('button#VtoyBtnUpdate').prop("disabled
", true);
972 function get_and_fill_dev_list() {
974 if ($('span#vtoy_check_show_all_dev').css("visibility
") === 'visible') {
979 method : 'get_dev_list',
981 token : vtoy_current_token
983 vtoy_cur_dev_list = data.list;
984 fill_dev_list_dropbox();
988 function on_click_refresh_device() {
989 if (vtoy_in_progress === true) {
993 method : 'refresh_device',
994 token : vtoy_current_token
996 get_and_fill_dev_list();
1015 //SCRIPT_DEL_THIS $(document).on("keydown
", disableF5);
1016 //SCRIPT_DEL_THIS $(document).on("contextmenu
",function(e){ return false; });
1018 $('#refresh_dev_img').click(on_click_refresh_device);
1019 $('#vtoy_part_align_4kb').prop("checked
", true);
1021 if (vtoy_chrome_app_mode) {
1024 $('#vtoy_main_div').css("border
", '2px solid #f4f4f4');
1025 window.onresize = function() {
1026 MoveMainDivToCenter();
1028 MoveMainDivToCenter();
1031 sort_language_list();
1032 fill_language_list();
1034 if (navigator.language) {
1035 vtoy_client_language = navigator.language.toLowerCase();
1038 vtoy_client_language = navigator.browserLanguage.toLowerCase();
1041 if (vtoy_client_language === 'zh-cn') {
1042 select_language_by_index(0, 0);
1044 select_language_by_name('English (English)', 0);
1048 secure_boot_check(1);
1050 on_enable_preserve_space();
1055 vtoy_current_token = data.token;
1056 if (data.language.length > 0) {
1057 select_language_by_name(data.language, 0);
1060 if (data.busy === true) {
1061 vtoy_cur_process_disk_name = data.process_disk;
1062 vtoy_in_progress = true;
1064 vtoy_in_progress = false;
1067 if (data.partstyle == 1) {
1073 $('span#vtoy_local_ver').text(data.ventoy_ver);
1076 method : 'refresh_device',
1077 token : vtoy_current_token
1079 get_and_fill_dev_list();
1082 if (vtoy_in_progress) {
1083 for (var i = 0; i < vtoy_cur_dev_list.length; i++) {
1084 if (vtoy_cur_dev_list[i].name === vtoy_cur_process_disk_name) {
1085 $("#vtoy_dev_list
").val(i);
1086 on_dev_sel_change();
1091 progressDisableItem(vtoy_in_progress);
1092 if (data.process_type === 'install') {
1094 } else if (data.process_type === 'update') {