]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - Plugson/www/static/js/vtoy.js
VentoyPlugson: Fix the garbled preview json for unicode characters.
[Ventoy.git] / Plugson / www / static / js / vtoy.js
index aee33796727cb77be02eb1045d7a994857a0b55e..afb108370ace45c29cdcea570ec1582fb1a90248 100644 (file)
@@ -1,7 +1,23 @@
 \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
@@ -281,71 +297,6 @@ String.prototype.endsWith = function(str) {
         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
@@ -369,6 +320,7 @@ var g_vtoy_cur_language_en =
     "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
@@ -429,10 +381,10 @@ var g_vtoy_cur_language_en =
 \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
@@ -446,7 +398,7 @@ var g_vtoy_cur_language_en =
     "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
@@ -479,6 +431,12 @@ var g_vtoy_cur_language_en =
     "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
@@ -505,6 +463,7 @@ var g_vtoy_cur_language_cn =
     "STR_OPT_SETTING": "选项设置",\r
     "STR_OPT_DESC": "选项说明",\r
     "STR_EDIT": "设置",\r
+    "STR_RESET": "重置",\r
     "STR_FILE": "文件",\r
     "STR_DIR": "目录",\r
     "STR_SAVE_TIP": "当前页面数据已经修改,是否保存?",\r
@@ -563,10 +522,10 @@ var g_vtoy_cur_language_cn =
 \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
@@ -580,7 +539,7 @@ var g_vtoy_cur_language_cn =
     "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
@@ -613,8 +572,12 @@ var g_vtoy_cur_language_cn =
     "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
@@ -625,12 +588,45 @@ var g_current_language = 'cn';
 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
@@ -896,6 +892,7 @@ function VtoyCommonChangeLanguage(newlang) {
             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
@@ -909,6 +906,8 @@ function VtoyCommonChangeLanguage(newlang) {
             $(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
@@ -941,6 +940,7 @@ function VtoyCommonChangeLanguage(newlang) {
             utfmaxlen: $.validator.format("超过最大长度"),\r
             start_slash: $.validator.format("必须以反斜杠 / 开头"),\r
             noquotes: $.validator.format("不能包含双引号"),\r
+            filenamepart:$.validator.format("作为文件名的一部分,不能包含特殊的符号"),\r
             printascii: $.validator.format("不能包含中文或其他非 ascii 字符。")\r
         });\r
         \r
@@ -954,6 +954,8 @@ function VtoyCommonChangeLanguage(newlang) {
             $(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
@@ -990,7 +992,10 @@ function VtoyCommonChangeLanguage(newlang) {
     $('#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
@@ -1062,13 +1067,13 @@ var g_type_select_validator = $("#TypeSelectForm").validate({
 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
@@ -1102,7 +1107,8 @@ var g_set_key_validator = $("#SetKeyForm").validate({
         },\r
         SetKeyValue : {\r
             required: true,\r
-            utfmaxlen: true          \r
+            utfmaxlen: true,\r
+            filenamepart: true        \r
         }\r
     },\r
 \r
@@ -1130,11 +1136,11 @@ function VtoySetKey(cb, para) {
     $('#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
@@ -1392,15 +1398,15 @@ function VtoySetDirFile(cb, para) {
     $('#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