\r
+function VtoyUTF16HexToAscii(hex) {\r
+ var str = ""; \r
+ for (var i = 0; i < hex.length; i += 4) {\r
+ str += String.fromCharCode(parseInt(hex.substring(i, i + 4), 16));\r
+ }\r
+ \r
+ return str;\r
+}\r
+\r
function ventoy_replace_slash(str) {\r
var str1 = str.replace(/\\/g, '/');\r
var str2 = str1.replace(/\/\//g, '/');\r
+ \r
+ if (str2 && str2.length > 0) {\r
+ if (str2.substr(-1) === "/") {\r
+ return str2.substr(0, str2.length - 1);\r
+ }\r
+ }\r
+ \r
return str2;\r
}\r
\r
return false;\r
}\r
\r
-window.Message = function() {\r
- var _showMsg = function(type, msg, time) {\r
- var o = {type : type, msg : msg };\r
- if(time) {\r
- o.time = time;\r
- }\r
- _show(o);\r
- }\r
- \r
- var _show = function(options) {\r
- var ops = {\r
- msg : "提示内容",\r
- type: 'S',\r
- time: 3000\r
- };\r
- $.extend(ops, options);\r
-\r
- var msg_class = 'alert-success';\r
- if('S' === ops.type || 's' === ops.type) {\r
- msg_class = 'alert-success';\r
- } else if ('E' === ops.type || 'e' === ops.type) {\r
- msg_class = 'alert-danger';\r
- } else if ('W' === ops.type || 'w' === ops.type) {\r
- msg_class = 'alert-warning';\r
- } else if ('I' === ops.type || 'i' === ops.type) {\r
- msg_class = 'alert-info';\r
- } else {\r
- alert("未知的类型,请使用: w-警告;s-成功;e-失败;i-提示");\r
- return;\r
- }\r
- var $messageContainer = $("#fcss_message");\r
- if($messageContainer.length === 0) {\r
- $messageContainer = $('<div id="fcss_message" style="position:fixed; left: 20%; right: 20%; top:0px; z-index:99999999"></div>');\r
- $messageContainer.appendTo($('body'));\r
- }\r
- var $div = $('<div class="alert ' + msg_class + ' alert-dismissible fade in" role="alert" style="margin-bottom: 0; padding-top:10px; padding-bottom: 10px;"></div>');\r
- var $btn = $('<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>');\r
- $div.append($btn).append(ops.msg).appendTo($messageContainer);\r
- setTimeout(function() {\r
- $div.remove();\r
- }, ops.time);\r
- }\r
- \r
- var _success = function(msg, time) {\r
- _showMsg('s', msg, time);\r
- }\r
- var _error = function(msg, time) { \r
- _showMsg('e', msg, time || 5000);\r
- }\r
- var _warn = function(msg, time) {\r
- _showMsg('w', msg, time);\r
- }\r
- var _info = function(msg, time) {\r
- _showMsg('i', msg, time);\r
- }\r
- \r
- return {\r
- success : _success,\r
- error : _error,\r
- warn : _warn,\r
- info : _info,\r
- show : _show\r
- }\r
-}();\r
-\r
\r
var g_vtoy_cur_language_en = \r
{\r
"STR_OPT_SETTING": "Option Setting",\r
"STR_OPT_DESC": "Option Description",\r
"STR_EDIT": "Edit",\r
+ "STR_RESET": "Reset",\r
"STR_FILE": "File",\r
"STR_DIR": "Dir",\r
"STR_SAVE_TIP": "Data in current page has been modified. Do you want to save it?",\r
\r
"STR_PATH_TOO_LONG": "The path exceeds the maximum supported length, please check!",\r
"STR_INPUT_TOO_LONG": "The string exceeds the maximum supported length, please check!",\r
- "STR_INVALID_FILE_PATH": "Invalid full file path, please check!",\r
- "STR_INVALID_FILE_PATH1": "The 1st file path is invalid!", \r
- "STR_INVALID_FILE_PATH2": "The 2nd file path is invalid!", \r
- "STR_INVALID_NEW_FILE_PATH": "The full file path of new is invalid, please check!",\r
+ "STR_INVALID_FILE_PATH": "Invalid or nonexist full file path, please check!",\r
+ "STR_INVALID_FILE_PATH1": "The 1st file path is invalid or nonexist!", \r
+ "STR_INVALID_FILE_PATH2": "The 2nd file path is invalid or nonexist!", \r
+ "STR_INVALID_NEW_FILE_PATH": "The full file path of new is invalid or nonexist, please check!",\r
"STR_INVALID_DIR_PATH": "Invalid directory path, please check!",\r
"STR_INVALID_NUMBER": "Please input valid non-negative integer!",\r
"STR_INVALID_AUTOSEL": "autosel exceeds the length of the list!",\r
"STR_SET_TIP_FOR_DIR": "Set Menu Tip For Directory",\r
"STR_SET_INJECTION_FOR_FILE": "[image] Set injection for a file",\r
"STR_SET_INJECTION_FOR_DIR": "[parent] Set the same injection for all the files under a directory.",\r
- "STR_INVALID_ARCHIVE_PATH": "Invalid archive file path, please check!",\r
+ "STR_INVALID_ARCHIVE_PATH": "Invalid or nonexist archive file path, please check!",\r
"STR_SET_PWD_FOR_FILE": "[file] Set password for a file.",\r
"STR_SET_PWD_FOR_DIR": "[parent] Set the same password for all the files under a directory.",\r
"STR_SET_AUTO_INSTALL_FOR_FILE": "[image] Set auto install template for a file",\r
"STR_SECURE_BOOT_ENABLE": "Enable",\r
"STR_SECURE_BOOT_DISABLE": "Disable",\r
"STR_SYNTAX_ERROR_TIP": "Syntax error detected in ventoy.json, so the configuration is not loaded!",\r
+ "STR_INVALID_CONFIG_TIP": "Invalid configuration detected in ventoy.json, so the configuration is not loaded!",\r
+ "STR_CONFIG_SAVE_ERROR_TIP": "Failed to write ventoy.json file. Check VentoyPlugson.log for more details!",\r
+\r
+ "STR_JSON_PREVIEW": "JSON Preview",\r
+ "STR_JSON_COPY_SUCCESS": "JSON Copy Success",\r
+ "STR_JSON_COPY_FAILED": "JSON Copy Failed",\r
\r
"STR_XXX": "xxx"\r
};\r
"STR_OPT_SETTING": "选项设置",\r
"STR_OPT_DESC": "选项说明",\r
"STR_EDIT": "设置",\r
+ "STR_RESET": "重置",\r
"STR_FILE": "文件",\r
"STR_DIR": "目录",\r
"STR_SAVE_TIP": "当前页面数据已经修改,是否保存?",\r
\r
"STR_PATH_TOO_LONG": "路径超过最大支持长度,请检查!",\r
"STR_INPUT_TOO_LONG": "字符串超过最大支持长度,请检查!",\r
- "STR_INVALID_FILE_PATH": "文件路径不合法,请检查!", \r
- "STR_INVALID_FILE_PATH1": "第1个文件路径不合法,请检查!", \r
- "STR_INVALID_FILE_PATH2": "第2个文件路径不合法,请检查!", \r
- "STR_INVALID_NEW_FILE_PATH": "new 文件路径不合法,请检查!", \r
+ "STR_INVALID_FILE_PATH": "文件路径不合法或不存在,请检查!", \r
+ "STR_INVALID_FILE_PATH1": "第1个文件路径不合法或不存在,请检查!", \r
+ "STR_INVALID_FILE_PATH2": "第2个文件路径不合法或不存在,请检查!", \r
+ "STR_INVALID_NEW_FILE_PATH": "new 文件路径不合法或不存在,请检查!", \r
"STR_INVALID_DIR_PATH": "文件夹路径不合法,请检查!",\r
"STR_INVALID_NUMBER": "请输入合法的非负整数!",\r
"STR_INVALID_AUTOSEL": "autosel 的值超过了列表实际长度!",\r
"STR_SET_TIP_FOR_DIR": "为目录设置菜单提示信息",\r
"STR_SET_INJECTION_FOR_FILE": "[image] 为某一个文件设置注入",\r
"STR_SET_INJECTION_FOR_DIR": "[parent] 为某个目录下的所有文件设置相同的注入",\r
- "STR_INVALID_ARCHIVE_PATH": "Archive 文件路径非法,请检查!",\r
+ "STR_INVALID_ARCHIVE_PATH": "Archive 文件路径非法或不存在,请检查!",\r
"STR_SET_PWD_FOR_FILE": "[file] 为指定文件设置密码",\r
"STR_SET_PWD_FOR_DIR": "[parent] 为某个目录下的所有文件设置相同的密码",\r
"STR_SET_AUTO_INSTALL_FOR_FILE": "[image] 为某个镜像文件设置自动安装脚本",\r
"STR_SECURE_BOOT_ENABLE": "开启",\r
"STR_SECURE_BOOT_DISABLE": "未开启",\r
"STR_SYNTAX_ERROR_TIP": "ventoy.json 文件中存在语法错误,配置未加载!",\r
+ "STR_INVALID_CONFIG_TIP": "ventoy.json 文件中存在错误配置,配置未加载!",\r
+ "STR_CONFIG_SAVE_ERROR_TIP": "ventoy.json 文件写入失败,详细信息请参考 VentoyPlugson.log 文件!",\r
\r
-\r
+ "STR_JSON_PREVIEW": "JSON 预览",\r
+ "STR_JSON_COPY_SUCCESS": "JSON 内容复制成功",\r
+ "STR_JSON_COPY_FAILED": "JSON 内容复制失败",\r
\r
"STR_XXX": "xxx"\r
};\r
var g_vtoy_cur_language = g_vtoy_cur_language_cn;\r
var g_vtoy_data_default_index = 6;\r
\r
+var g_bios_postfix = [ "", "_legacy", "_uefi", "_ia32", "_aa64", "_mips" ];\r
+var g_del_all_path = '4119ae33-98ea-448e-b9c0-569aafcf1fb4';\r
var g_file_with_extra = false;\r
var g_dir_with_extra = false;\r
var g_file_fuzzy_match = 0;\r
var g_file_modal_callback;\r
var g_dir_modal_callback;\r
\r
+function GetResetTabConfigTipMsg(index, name) {\r
+ var msgstr;\r
+ \r
+ if (g_current_language === 'en') {\r
+ msgstr = 'Are you sure to reset all the configurations on the <code>' + name + g_bios_postfix[index] + '</code> tab ?';\r
+ } else {\r
+ msgstr = '确认要重置 <code>' + name + g_bios_postfix[index] + '</code> 标签页下的所有配置?';\r
+ }\r
+ \r
+ return msgstr;\r
+}\r
+\r
+function CommonUpdateTabTitleIcon(exists, id, name) {\r
+ var exspan = " <span id='tab_0_icon' class='fa fa-circle' style='color:red;'></span>";\r
+ for (var i = 0; i < g_vtoy_data_default_index; i++) {\r
+ var fid = id + i + '"]';\r
+ var oldhtml = $(fid).html();\r
+ var newhtml;\r
+\r
+ if (exists[i]) {\r
+ newhtml = name + g_bios_postfix[i] + exspan;\r
+ } else {\r
+ newhtml = name + g_bios_postfix[i];\r
+ }\r
+ \r
+ if (newhtml != oldhtml) {\r
+ $(fid).html(newhtml);\r
+ }\r
+ }\r
+}\r
+\r
function ventoy_file_submit(form, extra) {\r
var filepath = $("#FilePath").val();\r
var fileextra = $("#FileExtra").val();\r
utfmaxlen: $.validator.format("The string exceeds the maximum supported length"),\r
start_slash: $.validator.format("Must start with /"),\r
noquotes: $.validator.format("Can not include double quotes"),\r
+ filenamepart:$.validator.format("As part of file name, can not include invalid characters"),\r
printascii: $.validator.format("Can not include non-ascii characters.")\r
});\r
\r
$(this).text(" Plugin Official Document");\r
});\r
\r
+ $('#id_span_copy').text("Copy");\r
+ $('#id_span_preview').text("Preview");\r
$('#id_span_language').text("中文");\r
\r
$("tr[id=tr_title_desc_cn]").each(function(){\r
utfmaxlen: $.validator.format("超过最大长度"),\r
start_slash: $.validator.format("必须以反斜杠 / 开头"),\r
noquotes: $.validator.format("不能包含双引号"),\r
+ filenamepart:$.validator.format("作为文件名的一部分,不能包含特殊的符号"),\r
printascii: $.validator.format("不能包含中文或其他非 ascii 字符。")\r
});\r
\r
$(this).text(" 插件官网文档");\r
});\r
\r
+ $('#id_span_copy').text("复制");\r
+ $('#id_span_preview').text("预览");\r
$('#id_span_language').text("English");\r
\r
$("tr[id=tr_title_desc_cn]").each(function(){\r
$('#id_span_save').text(g_vtoy_cur_language.STR_SAVE);\r
$('#id_span_reset').text(g_vtoy_cur_language.STR_RESET);\r
$('#id_span_donation').text(g_vtoy_cur_language.STR_PLUG_DONATION);\r
-\r
+ \r
+ $('span[id=id_btn_span_reset]').each(function(){\r
+ $(this).text(' ' + g_vtoy_cur_language.STR_RESET);\r
+ });\r
$("span[id=id_span_btn_add]").each(function(){\r
$(this).text(g_vtoy_cur_language.STR_ADD);\r
});\r
function VtoySelectType(cb, para) {\r
\r
$('#TypeSelectForm #TypeSelForm_lang_1').text(g_vtoy_cur_language.STR_SELECT);\r
-\r
+ \r
if (g_current_language === 'en') {\r
- $('#SetDirForm #SetDirForm_lang_2').text(" OK");\r
- $('#SetDirForm #SetDirForm_lang_3').text("Cancel");\r
+ $('#TypeSelectForm #TypeSelForm_lang_2').text(" OK");\r
+ $('#TypeSelectForm #TypeSelForm_lang_3').text("Cancel");\r
} else {\r
- $('#SetDirForm #SetDirForm_lang_2').text("确定");\r
- $('#SetDirForm #SetDirForm_lang_3').text("取消");\r
+ $('#TypeSelectForm #TypeSelForm_lang_2').text("确定");\r
+ $('#TypeSelectForm #TypeSelForm_lang_3').text("取消");\r
}\r
\r
var $tbl = $("#id_type_select_table tbody");\r
},\r
SetKeyValue : {\r
required: true,\r
- utfmaxlen: true \r
+ utfmaxlen: true,\r
+ filenamepart: true \r
}\r
},\r
\r
$('#SetKeyForm #SetKeyForm_lang_3').text(para.title2);\r
\r
if (g_current_language === 'en') {\r
- $('#SetDirForm #SetDirForm_lang_4').text(" OK");\r
- $('#SetDirForm #SetDirForm_lang_5').text("Cancel");\r
+ $('#SetKeyForm #SetKeyForm_lang_4').text(" OK");\r
+ $('#SetKeyForm #SetKeyForm_lang_5').text("Cancel");\r
} else {\r
- $('#SetDirForm #SetDirForm_lang_4').text("确定");\r
- $('#SetDirForm #SetDirForm_lang_5').text("取消");\r
+ $('#SetKeyForm #SetKeyForm_lang_4').text("确定");\r
+ $('#SetKeyForm #SetKeyForm_lang_5').text("取消");\r
}\r
\r
g_set_key_callback = cb;\r
$('#SetDirFileModal #SetDirFileForm_label2').text(para.label2);\r
\r
if (g_current_language === 'en') {\r
- $('#SetDirFileModal #SetDirFileModal_ok').text(" OK");\r
- $('#SetDirFileModal #SetDirFileModal_cancel').text("Cancel");\r
+ $('#SetDirFileModal #SetDirFileForm_ok').text(" OK");\r
+ $('#SetDirFileModal #SetDirFileForm_cancel').text("Cancel");\r
\r
$('#SetDirFileModal #id_note_dirfile_cn').hide();\r
$('#SetDirFileModal #id_note_dirfile_en').show();\r
\r
} else {\r
- $('#SetDirFileModal #SetDirFileModal_ok').text("确定");\r
- $('#SetDirFileModal #SetDirFileModal_cancel').text("取消");\r
+ $('#SetDirFileModal #SetDirFileForm_ok').text("确定");\r
+ $('#SetDirFileModal #SetDirFileForm_cancel').text("取消");\r
\r
$('#SetDirFileModal #id_note_dirfile_en').hide();\r
$('#SetDirFileModal #id_note_dirfile_cn').show();\r