Update Settings

This commit is contained in:
Bruce
2025-12-07 21:07:17 +08:00
parent bb6b2b7521
commit b01b29a25e
17 changed files with 611 additions and 24 deletions

Binary file not shown.

View File

@@ -94,7 +94,7 @@
<InstallOrder>1000</InstallOrder>
<SCStartRoot>0</SCStartRoot>
<SCStartProgs>0</SCStartProgs>
<SCAppFld>1</SCAppFld>
<SCAppFld>0</SCAppFld>
<SCStartup>0</SCStartup>
<SCDesk>0</SCDesk>
<SCQLaunch>0</SCQLaunch>
@@ -678,7 +678,7 @@
<InstallOrder>1000</InstallOrder>
<SCStartRoot>0</SCStartRoot>
<SCStartProgs>0</SCStartProgs>
<SCAppFld>1</SCAppFld>
<SCAppFld>0</SCAppFld>
<SCStartup>0</SCStartup>
<SCDesk>0</SCDesk>
<SCQLaunch>0</SCQLaunch>
@@ -807,6 +807,79 @@
<CRC>0</CRC>
<StoreOnly>0</StoreOnly>
</FileData>
<FileData>
<FldRef>0</FldRef>
<FullName>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\shortcut.exe</FullName>
<FileName>shortcut.exe</FileName>
<Source>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release</Source>
<Ext>exe</Ext>
<RTSource>档案</RTSource>
<Desc/>
<Recurse>1</Recurse>
<MatchMode>0</MatchMode>
<Dest>%AppFolder%</Dest>
<Overwrite>1</Overwrite>
<Backup>0</Backup>
<Protect>0</Protect>
<InstallOrder>1000</InstallOrder>
<SCStartRoot>0</SCStartRoot>
<SCStartProgs>0</SCStartProgs>
<SCAppFld>0</SCAppFld>
<SCStartup>0</SCStartup>
<SCDesk>0</SCDesk>
<SCQLaunch>0</SCQLaunch>
<SCStartPinOption>0</SCStartPinOption>
<SCCust>0</SCCust>
<CustSCPath/>
<SCDesc>shortcut</SCDesc>
<SCComment/>
<SCArgs/>
<SCWork/>
<UseExtIco>0</UseExtIco>
<IcoFN/>
<IcoIdx>0</IcoIdx>
<IcoShowMd>0</IcoShowMd>
<IcoHK>0</IcoHK>
<RegTTF>0</RegTTF>
<TTFName/>
<RegOCX>0</RegOCX>
<RegTLB>0</RegTLB>
<SupInUse>0</SupInUse>
<Compress>1</Compress>
<UseOrigAttr>1</UseOrigAttr>
<Attr>0</Attr>
<NoCRC>0</NoCRC>
<NoRemove>0</NoRemove>
<Shared>0</Shared>
<OSCond>
<OS>32768</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
</OSCond>
<RTCond/>
<BuildConfigs>
<Cfg>All</Cfg>
</BuildConfigs>
<Package>None</Package>
<Packages/>
<Notes/>
<CompSize>0</CompSize>
<CRC>0</CRC>
<StoreOnly>0</StoreOnly>
</FileData>
</ArchiveFiles>
<ExternalFiles/>
<BeforeInstallingScreens>
@@ -924,21 +997,25 @@
<Args/>
<Script>-- These actions are performed before the screen is shown.
function GetLangID(p, s)
-- s 左移 10 位 = s * 2^10
-- 按位或 = 把 p 加上即可,因为 p &lt; 2^10WinAPI 保证)
return s * 1024 + p
end
-- ============================================
-- 函数DetectSystemLanguage
-- 描述:检测系统语言,返回 'zh' 或 'en'
-- ============================================
function GetCurrentLanguage()
function DetectSystemLanguage()
-- 调用官方API获取语言信息
local langTbl = Application.GetInstallLanguage()
local langTbl = Application.GetInstallLanguage();
local langid = GetLangID (langTbl.Primary, langTbl.Secondary);
-- 检查API是否调用成功
if langTbl and langTbl.Primary then
local primaryLangId = langTbl.Primary
if langTbl and langid then
-- 将语言ID转换为我们的语言标识
-- 0x0409 (1033) = 英语(美国)0x0804 (2052) = 中文(简体)
if primaryLangId == 2052 then -- 中文(简体)
if langid == 2052 then -- 中文(简体)
return "zh"
else -- 默认英语包括1033及其他情况
return "en"
@@ -3640,7 +3717,7 @@ if (mode == 1 or mode == 2) then
-- 4. 执行静默卸载(关键:使用 SW_HIDE 隐藏窗口true 表示等待完成)
-- 使用 File.Run 替代 Shell.Execute 以获得更好的控制
resulttest = File.Run(targetExePath, uninstallArgs, workingDir, SW_HIDE, true)
Application.Sleep (1000);
-- (可选)日志记录,仅用于调试
-- _LogFile.Message("静默卸载已执行,结果码: " .. tostring(resulttest), LOG_INFO)
else
@@ -3990,6 +4067,10 @@ end
-- For example, use:
-- DlgScrollingText.AppendLine(CTRL_SCROLLTEXT_BODY, "Your text here");
-- ...to add a line of progress text.
DlgScrollingText.AppendLine(CTRL_SCROLLTEXT_BODY, "Installing the runtime libraries...");
File.Run(SessionVar.Expand("%TempLaunchFolder%\\runtime.exe"), "", "", SW_SHOWNORMAL, true);
DlgScrollingText.AppendLine(CTRL_SCROLLTEXT_BODY, "Registering the application...");
Registry.CreateKey(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer")
Registry.SetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer", "", "", REG_SZ);
@@ -3997,6 +4078,45 @@ Registry.SetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer",
Registry.SetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer", "AppPath", SessionVar.Expand("%AppFolder%"), REG_SZ);
Registry.SetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer", "Version", SessionVar.Expand("%ProductVer%"), REG_SZ);
Registry.SetValue(HKEY_CLASSES_ROOT, "Microsoft.DesktopAppInstaller", "", "Windows Store Application Package", REG_SZ);
Registry.SetValue(HKEY_CLASSES_ROOT, "Microsoft.DesktopAppInstaller\\Shell\\Open\\Command", "", SessionVar.Expand("\"%AppFolder%\\appinstaller.exe\" \"%1\""), REG_SZ);
Registry.SetValue(HKEY_CLASSES_ROOT, "Microsoft.DesktopAppInstaller\\DefaultIcon", "", SessionVar.Expand("%AppFolder%\\appinstaller.exe,2"), REG_SZ);
Registry.SetValue(HKEY_CLASSES_ROOT, "Applications\\AppInstaller.exe\\DefaultIcon", "", SessionVar.Expand("%AppFolder%\\appinstaller.exe,-136"), REG_SZ);
DlgScrollingText.AppendLine(CTRL_SCROLLTEXT_BODY, "Processing File Associations...");
Registry.SetValue(HKEY_CLASSES_ROOT, ".appx", "", "Microsoft.DesktopAppInstaller", REG_SZ);
Registry.SetValue(HKEY_CLASSES_ROOT, ".appxbundle", "", "Microsoft.DesktopAppInstaller", REG_SZ);
DlgScrollingText.AppendLine(CTRL_SCROLLTEXT_BODY, "Creating Shortcut...");
function CreateShortcut(lnkpath, targetfile, appid)
ret = File.Run(SessionVar.Expand("%AppFolder%\\shortcut.exe"), "\"" .. lnkpath .. "\" \"" .. targetfile .. "\" \"" .. appid .. "\"", "", SW_HIDE, true);
return ret;
end
CreateShortcut (SessionVar.Expand ("%StartProgramsFolderCommon%\\%AppShortcutFolderName%\\App Installer.lnk"), SessionVar.Expand("%AppFolder%\\appinstaller.exe"), "Microsoft.DesktopAppInstaller!App");
Registry.SetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer", "AppInstallerLnk", SessionVar.Expand("%StartProgramsFolderCommon%\\%AppShortcutFolderName%\\App Installer.lnk"), REG_SZ);
CreateShortcut (SessionVar.Expand ("%StartProgramsFolderCommon%\\%AppShortcutFolderName%\\Settings.lnk"), SessionVar.Expand("%AppFolder%\\settings.exe"), "WindowsModern.PracticalToolsProject!Settings");
Registry.SetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer", "SettingsLnk", SessionVar.Expand("%StartProgramsFolderCommon%\\%AppShortcutFolderName%\\Settings.lnk"), REG_SZ);
DlgScrollingText.AppendLine(CTRL_SCROLLTEXT_BODY, "Updating system PATH...");
local appFolder = SessionVar.Expand("%AppFolder%");
local pathKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
local currentPath, pathType = Registry.GetValue(HKEY_LOCAL_MACHINE, pathKey, "Path", true);
currentPath = currentPath or ""
-- 检查路径是否已存在
if not string.find(";"..currentPath..";", ";"..appFolder..";", 1, true) then
local newPath = currentPath
if newPath ~= "" then
newPath = newPath .. ";" .. appFolder
else
newPath = appFolder
end
-- 更新注册表值并保持原有类型
Registry.SetValue(HKEY_LOCAL_MACHINE, pathKey, "Path", newPath, pathType or REG_EXPAND_SZ)
-- 广播环境变量更新消息
DLL.CallFunction("Kernel32.dll", "SendMessageTimeout",
"HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)\"Environment\",SMTO_ABORTIFHUNG,5000,NULL",
DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL)
end
automodestr = SessionVar.Expand("%AutoInstallMode%");
automodestr = String.TrimLeft (String.TrimRight (String.Lower (automodestr)));
automode = automodestr == "true";
@@ -5455,6 +5575,36 @@ Please click Finish to exit.
<Script>hkey = HKEY_CURRENT_USER;
key = "Software\\Windows Modern";
keynext = "App Installer";
appinstallerlnkpath = Registry.GetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer", "AppInstallerLnk", false);
settingslnkpath = Registry.GetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer", "SettingsLnk", false);
File.Delete(appinstallerlnkpath, true, false, false);
File.Delete(settingslnkpath, true, false, false);
Registry.DeleteKey(HKEY_CLASSES_ROOT, ".appx");
Registry.DeleteKey(HKEY_CLASSES_ROOT, ".appxbundle");
Registry.DeleteKey(HKEY_CLASSES_ROOT, ".msix");
Registry.DeleteKey(HKEY_CLASSES_ROOT, ".msixbundle");
Registry.DeleteKey(HKEY_CLASSES_ROOT, "Microsoft.DesktopAppInstaller");
local appFolder = SessionVar.Expand("%AppFolder%");
local pathKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
local currentPath, pathType = Registry.GetValue(HKEY_LOCAL_MACHINE, pathKey, "Path", true);
if currentPath then
local paths = {}
-- 分割PATH并过滤当前应用目录
for path in string.gmatch(currentPath, "[^;]+") do
if path ~= appFolder then
table.insert(paths, path)
end
end
local newPath = table.concat(paths, ";")
-- 仅当路径发生变化时更新
if newPath ~= currentPath then
Registry.SetValue(HKEY_LOCAL_MACHINE, pathKey, "Path", newPath, pathType or REG_EXPAND_SZ)
-- 广播环境变量更新消息
DLL.CallFunction("Kernel32.dll", "SendMessageTimeout",
"HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)\"Environment\",SMTO_ABORTIFHUNG,5000,NULL",
DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL)
end
end
Registry.DeleteKey (hkey, key .. "\\" .. keynext);
Registry.DeleteKey (hkey, key);</Script>
<BookMarks count="0">
@@ -5640,6 +5790,14 @@ g_HandleSystemReboot();
<Cfg>All</Cfg>
</BuildConfigs>
</PrimerFile>
<PrimerFile>
<SourcePath>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\runtime.exe</SourcePath>
<DeleteOnExit>1</DeleteOnExit>
<NeededByUninstall>0</NeededByUninstall>
<BuildConfigs>
<Cfg>All</Cfg>
</BuildConfigs>
</PrimerFile>
</PrimerFiles>
<Events>
<Event>

View File

@@ -827,6 +827,7 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip
private:
MainHtmlWnd ^wndinst = nullptr;
public:
using String = System::String;
[ComVisible (true)]
ref class _I_IEFrame: public _I_IEFrame_Base
{
@@ -948,6 +949,7 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip
property _I_Download ^Download { _I_Download ^get () { return download; }}
property _I_Process ^Process { _I_Process ^get () { return proc; }}
property _I_ResourcePri ^WinJsStringRes { _I_ResourcePri ^get () { return winjs_res; }}
String ^FormatDateTime (String ^fmt, String ^jsDate) { return FormatString (fmt, Convert::ToDateTime (jsDate)); }
void CloseWindow ()
{
if (wndinst && wndinst->IsHandleCreated) wndinst->Close ();
@@ -1094,10 +1096,10 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip
{
auto &ini = g_initfile;
auto setsect = ini ["Settings"];
auto lasts = setsect [L"AppInstaller:LastWndState"];
auto savepos = setsect [L"AppInstaller:SavePosAndSizeBeforeCancel"];
auto lastw = setsect [L"AppInstaller:LastWidth"];
auto lasth = setsect [L"AppInstaller:LastHeight"];
auto lasts = setsect [L"Settings:LastWndState"];
auto savepos = setsect [L"Settings:SavePosAndSizeBeforeCancel"];
auto lastw = setsect [L"Settings:LastWidth"];
auto lasth = setsect [L"Settings:LastHeight"];
switch (this->WindowState)
{
case System::Windows::Forms::FormWindowState::Normal:

Binary file not shown.

View File

@@ -47,7 +47,6 @@
</nav>
</aside>
<iframe class="main right">
</main>
</div>
</div>
</body>

View File

@@ -17,7 +17,7 @@
inode.setAttribute("data-page", item.page);
inode.textContent = item.displayName;
Windows.UI.Event.Util.addEvent(inode, "click", function(e) {
window.location = "settings/" + inode.getAttribute("data-page");
window.location = "settings/" + this.getAttribute("data-page");
});
list.appendChild(inode);
// WinJS.UI.Animation.createAddToListAnimation(list, inode).execute();

View File

@@ -17,7 +17,8 @@
};
}
var settingItems = {
appinstaller: getSettingsItem("appinstaller.html", getLibRes("appinstaller.exe", 300))
appinstaller: getSettingsItem("appinstaller.html", getLibRes("appinstaller.exe", 300)),
settings: getSettingsItem("settings.html", getLibRes("settings.exe", 200))
};
Object.defineProperty(global, "settingPages", {
get: function() { return settingItems; }

View File

@@ -45,7 +45,10 @@ video,
canvas,
form,
fieldset,
legend {
legend,
.win-type-x-large,
.win-type-xx-large,
.font-fixed {
font-family: "Microsoft YaHei", "Segoe UI", "Ebrima", "Nirmala", "Gadugi", "Segoe UI Emoji", "Segoe UI Symbol", "Meiryo", "Leelawadee", "Microsoft JhengHei", "Malgun Gothic", "Estrangelo Edessa", "Microsoft Himalaya", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Tai Le", "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text", "Javanese Text", "Cambria Math";
}
@@ -94,6 +97,10 @@ legend {
align-content: center;
align-items: center;
justify-content: flex-start;
display: -ms-flexbox;
-ms-flex-direction: row;
-ms-flex-align: center;
-ms-flex-pack: start;
}
.pagetitle {
@@ -157,6 +164,10 @@ aside .container ul li {
align-content: center;
justify-content: flex-start;
align-items: center;
display: -ms-flexbox;
-ms-flex-direction: row;
-ms-flex-pack: start;
-ms-flex-align: center;
transition: all 0.3s cubic-bezier(0.1, 0.9, 0.2, 1);
}

View File

@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html>
<head>
<title>App Installer Settings</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="../js/module.js"></script>
<script type="text/javascript" src="../js/polyfill-ie.js"></script>
<link rel="stylesheet" href="../libs/winjs/2.0/css/ui-light.css" id="winjs-style">
<script type="text/javascript" src="../libs/winjs/1.0/js/base.js"></script>
<script type="text/javascript" src="../libs/winjs/1.0/js/ui.js"></script>
<script type="text/javascript" src="../js/color.js"></script>
<script type="text/javascript" src="../js/promise.js"></script>
<script type="text/javascript" src="../js/bridge.js"></script>
<script type="text/javascript" src="../js/dpimodes.js"></script>
<script type="text/javascript" src="../js/resources.js"></script>
<script type="text/javascript" src="../js/animation.js"></script>
<link rel="stylesheet" href="../fonts/fonts.css">
<script type="text/javascript" src="../js/event.js"></script>
<script type="text/javascript" src="../js/tileback.js"></script>
<script type="text/javascript" src="../js/load.js"></script>
<link rel="stylesheet" type="text/css" href="../libs/msgbox/msgbox.css">
<script type="text/javascript" src="../libs/msgbox/msgbox.js"></script>
<script type="text/javascript" src="../js/init.js"></script>
<script type="text/javascript" src="initsame.js"></script>
<link rel="stylesheet" type="text/css" href="page.css">
<script type="text/javascript" src="settings/preinit.js"></script>
<script type="text/javascript" src="settings/items.js"></script>
<script type="text/javascript" src="settings/init.js"></script>
</head>
<body>
<div id="settingpage" class="pagecontainer full">
<div class="page full guide">
<aside class="left win-ui-dark">
<header aria-label="Header content" role="banner" class="titlebanner" id="pagebanner" style="height: 120px;">
<button id="back" class="win-backbutton pagetitlewb-backbutton" onclick="Bridge.Frame.callEvent ('InvokeBackPage')" style="margin-left: 20px; transform: scale(0.72);"></button>
<h2 class="titlearea win-type-ellipsis" id="apptitle" style="">
<span class="pagetitlewb-title" id="apptitlestr" style="margin-left: 10px; margin-right: 20px;" data-res-fromfile="getFileResPair(exepath, 200)"></span>
</h2>
</header>
<nav class="container">
<ul class="list">
</ul>
</nav>
</aside>
<iframe class="main right">
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,144 @@
<!DOCTYPE html>
<html>
<head>
<title>App Installer Settings</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="../../js/module.js"></script>
<script type="text/javascript" src="../../js/polyfill-ie.js"></script>
<link rel="stylesheet" href="../../libs/winjs/2.0/css/ui-light.css" id="winjs-style">
<script type="text/javascript" src="../../libs/winjs/1.0/js/base.js"></script>
<script type="text/javascript" src="../../libs/winjs/1.0/js/ui.js"></script>
<script type="text/javascript" src="../../js/color.js"></script>
<script type="text/javascript" src="../../js/promise.js"></script>
<script type="text/javascript" src="../../js/bridge.js"></script>
<script type="text/javascript" src="../../js/dpimodes.js"></script>
<script type="text/javascript" src="../../js/resources.js"></script>
<script type="text/javascript" src="../../js/animation.js"></script>
<link rel="stylesheet" href="../../fonts/fonts.css">
<script type="text/javascript" src="../../js/event.js"></script>
<script type="text/javascript" src="../../js/tileback.js"></script>
<script type="text/javascript" src="../../js/load.js"></script>
<link rel="stylesheet" type="text/css" href="../../libs/msgbox/msgbox.css">
<script type="text/javascript" src="../../libs/msgbox/msgbox.js"></script>
<link rel="stylesheet" type="text/css" href="../../libs/toggle/toggle.css">
<script type="text/javascript" src="../../libs/toggle/toggle.js"></script>
<script type="text/javascript" src="../../js/init.js"></script>
<link rel="stylesheet" type="text/css" href="../page.css">
<link rel="stylesheet" type="text/css" href="../subpage.css">
<script type="text/javascript" src="preinit.js"></script>
<script type="text/javascript" src="initsame.js"></script>
<script>
try {
window.parent.setItemHighlight("general");
} catch (e) {}
</script>
</head>
<body>
<div class="pagecontainer full pagesection">
<div class="section padding">
<h2 id="page-title" data-res-fromfile="publicRes (101)"></h2>
<div class="win-settings-section">
<br>
<label class="win-label" for="save-wnd-size" id="save-wnd-size-label" data-res-fromfile="publicRes (125)"></label>
<script>
(function() {
"use strict";
var label = document.getElementById("save-wnd-size-label");
var toggle = new Toggle();
toggle.create();
toggle.parent = label.parentNode;
toggle.showlabel = true;
var winjsres = Bridge.External.WinJsStringRes;
toggle.setStatusText(winjsres.getString("ms-resource://Microsoft.WinJS.1.0/ui/on"), winjsres.getString("ms-resource://Microsoft.WinJS.1.0/ui/off"));
toggle.inputId = "save-wnd-size";
var ini = Bridge.External.Config.GetConfig();
toggle.addEventListener("change", function() {
ini.set("Settings", "Settings:SavePosAndSizeBeforeCancel", toggle.checked);
});
toggle.checked = parseBool(ini.getSection("Settings").getKey("Settings:SavePosAndSizeBeforeCancel").value);
})();
</script>
</div>
<div class="win-settings-section">
<br>
<label class="win-label" for="default-wndwidth" data-res-fromfile="publicRes(126)"></label><br>
<input type="number" id="default-wndwidth" inputmode="numeric"><br><br>
<label class="win-label" for="default-wndheight" data-res-fromfile="publicRes(127)"></label><br>
<input type="number" id="default-wndheight" inputmode="numeric">
<script>
(function() {
"use strict";
var ini = Bridge.External.Config.GetConfig();
var defWndWInput = document.getElementById("default-wndwidth");
var defWndHInput = document.getElementById("default-wndheight");
var setsect = ini.getSection("Settings");
var defwk = setsect.getKey("Settings:DefaultWidth");
var defhk = setsect.getKey("Settings:DefaultHeight");
defWndWInput.value = defwk.value;
defWndHInput.value = defhk.value;
var eventutil = Windows.UI.Event.Util;
function inputDefaultWidthChangeEvent(e) {
defwk.value = parseInt(defWndWInput.value);
}
function inputDefaultHeightChangeEvent(e) {
defhk.value = parseInt(defWndHInput.value);
}
var debounced_idwc = debounce(inputDefaultWidthChangeEvent, 500);
var debounced_idhc = debounce(inputDefaultHeightChangeEvent, 500);
eventutil.addEvent(defWndWInput, "input", debounced_idwc);
eventutil.addEvent(defWndWInput, "propertychange", debounced_idwc);
eventutil.addEvent(defWndWInput, "change", debounced_idwc);
eventutil.addEvent(defWndHInput, "input", debounced_idhc);
eventutil.addEvent(defWndHInput, "propertychange", debounced_idhc);
eventutil.addEvent(defWndHInput, "change", debounced_idhc);
})();
</script>
</div>
<div class="win-settings-section">
<br>
<label class="win-label" for="min-wndwidth" data-res-fromfile="publicRes (128)"></label><br>
<input type="number" id="min-wndwidth" inputmode="numeric"><br><br>
<label class="win-label" for="min-wndheight" data-res-fromfile="publicRes (129)"></label><br>
<input type="number" id="min-wndheight" inputmode="numeric">
<script>
(function() {
"use strict";
var ini = Bridge.External.Config.GetConfig();
var minWndWInput = document.getElementById("min-wndwidth");
var minWndHInput = document.getElementById("min-wndheight");
var setsect = ini.getSection("Settings");
var minwk = setsect.getKey("Settings:MinimumWidth");
var minhk = setsect.getKey("Settings:MinimumHeight");
minWndWInput.value = minwk.value;
minWndHInput.value = minhk.value;
var eventutil = Windows.UI.Event.Util;
function inputDefaultWidthChangeEvent(e) {
minwk.value = parseInt(minWndWInput.value);
}
function inputDefaultHeightChangeEvent(e) {
minhk.value = parseInt(minWndHInput.value);
}
var debounced_idwc = debounce(inputDefaultWidthChangeEvent, 500);
var debounced_idhc = debounce(inputDefaultHeightChangeEvent, 500);
eventutil.addEvent(minWndWInput, "input", debounced_idwc);
eventutil.addEvent(minWndWInput, "propertychange", debounced_idwc);
eventutil.addEvent(minWndWInput, "change", debounced_idwc);
eventutil.addEvent(minWndHInput, "input", debounced_idhc);
eventutil.addEvent(minWndHInput, "propertychange", debounced_idhc);
eventutil.addEvent(minWndHInput, "change", debounced_idhc);
})();
</script>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,58 @@
<!DOCTYPE html>
<html>
<head>
<title>App Installer Settings</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="../../js/module.js"></script>
<script type="text/javascript" src="../../js/polyfill-ie.js"></script>
<link rel="stylesheet" href="../../libs/winjs/2.0/css/ui-light.css" id="winjs-style">
<script type="text/javascript" src="../../libs/winjs/1.0/js/base.js"></script>
<script type="text/javascript" src="../../libs/winjs/1.0/js/ui.js"></script>
<script type="text/javascript" src="../../js/color.js"></script>
<script type="text/javascript" src="../../js/promise.js"></script>
<script type="text/javascript" src="../../js/bridge.js"></script>
<script type="text/javascript" src="../../js/dpimodes.js"></script>
<script type="text/javascript" src="../../js/resources.js"></script>
<script type="text/javascript" src="../../js/animation.js"></script>
<link rel="stylesheet" href="../../fonts/fonts.css">
<script type="text/javascript" src="../../js/event.js"></script>
<script type="text/javascript" src="../../js/tileback.js"></script>
<script type="text/javascript" src="../../js/load.js"></script>
<link rel="stylesheet" type="text/css" href="../../libs/msgbox/msgbox.css">
<script type="text/javascript" src="../../libs/msgbox/msgbox.js"></script>
<script type="text/javascript" src="../../js/init.js"></script>
<link rel="stylesheet" type="text/css" href="../page.css">
<link rel="stylesheet" type="text/css" href="../subpage.css">
<script type="text/javascript" src="preinit.js"></script>
<script type="text/javascript" src="initsame.js"></script>
<script>
try {
window.parent.setItemHighlight("guide");
} catch (e) {}
</script>
</head>
<body>
<div class="pagecontainer full pagesection">
<div class="section padding">
<h2 id="guide-title"></h2>
<p id="guide-desc" style="white-space: pre-wrap;"></p>
</div>
<script>
(function() {
"use strict";
var res = Bridge.Resources;
var stru = Bridge.String;
var title = document.getElementById("guide-title");
title.textContent = stru.format(res.byname("IDS_TITLEFORMAT"), res.fromfile(exepath, 200));
var text = document.getElementById("guide-desc");
text.textContent = res.byname("IDS_GUIDETEXT_COMMON");
})();
</script>
</div>
</body>
</html>

View File

@@ -0,0 +1,77 @@
(function(global) {
"use strict";
function ready(e) {
var page = document.querySelector("#settingpage");
var guide = page.querySelector(".page.guide");
var slide = guide.querySelector("aside");
setTimeout(function() {
var barcolor = visual["BackgroundColor"];
slide.style.backgroundColor = barcolor;
slide.style.color = Color.getSuitableForegroundTextColor(Color.parse(barcolor), [Color.Const.white, Color.Const.black]).stringify();
}, 50);
var content = guide.querySelector(".main");
var list = slide.querySelector("ul");
var backbtn = slide.querySelector("#back");
var title = slide.querySelector("#apptitle");
list.innerHTML = "";
var items = pages;
var tags = Object.keys(items);
var eventutil = Windows.UI.Event.Util;
for (var i = 0; i < tags.length; i++) {
var tag = tags[i];
var item = items[tag];
var li = document.createElement("li");
li.setAttribute("data-page", item.page);
li.setAttribute("data-tag", item.tag);
li.innerHTML = item.title;
eventutil.addEvent(li, "click", function() {
if (li.hasAttribute("data-require-disabled")) return;
content.style.display = "none";
for (var j = 0; j < list.children.length; j++) {
var child = list.children[j];
if (child.classList.contains("selected"))
child.classList.remove("selected");
}
content.src = this.getAttribute("data-page");
setTimeout(function() {
content.style.display = "";
Windows.UI.Animation.runAsync(content, [Windows.UI.Animation.Keyframes.Flyout.toLeft, Windows.UI.Animation.Keyframes.Opacity.visible]);
}, 0);
this.classList.add("selected");
});
list.appendChild(li);
}
content.src = items.general.page;
global.setDisabledForOperation = function(disabled) {
var list = document.querySelector("#settingpage .guide aside ul");
for (var i = 0; i < list.children.length; i++) {
var child = list.children[i];
if (disabled) {
child.setAttribute("data-require-disabled", "true");
} else {
child.removeAttribute("data-require-disabled");
}
}
if (disabled) {
backbtn.disabled = true;
title.style.marginLeft = backbtn.style.marginLeft;
} else {
backbtn.disabled = false;
title.style.marginLeft = "";
}
}
global.setItemHighlight = function(tag) {
var list = document.querySelector("#settingpage .guide aside ul");
for (var i = 0; i < list.children.length; i++) {
var child = list.children[i];
if (Bridge.NString.equals(child.getAttribute("data-tag"), tag)) {
if (!child.classList.contains("selected")) child.classList.add("selected");
} else {
if (child.classList.contains("selected")) child.classList.remove("selected");
}
}
}
}
OnLoad.add(ready);
})(this);

View File

@@ -0,0 +1,21 @@
(function(global) {
"use strict";
function ready(e) {
Windows.UI.DPI.mode = 1
var pagesection = document.querySelector(".pagesection");
if (pagesection) {
var backcolor = slideback;
setTimeout(function() {
var h2style = document.getElementById("h2-style");
if (!h2style) {
h2style = document.createElement("style");
h2style.id = "h2-style";
}
h2style.innerHTML = ".main h2 { color: " + Color.getSuitableForegroundTextColor(Color.parse("#F3F3F3"), [Color.parse(backcolor), Color.Const.black]).RGBA.stringify() + " }";
document.head.appendChild(h2style);
}, 0);
}
}
OnLoad.add(ready);
})(this);

View File

@@ -0,0 +1,24 @@
(function(global) {
"use strict";
function getPage(tag, page, display) {
return {
tag: tag,
page: page,
title: display
};
}
var pages = {
general: getPage("general", "settings/general.html", getPublicRes(101)),
};
Object.defineProperty(global, "pages", {
get: function() {
return pages;
}
});
Object.defineProperty(global, "guidePage", {
get: function() {
return getPage("guide", "settings/guide.html", "guide");
}
});
})(this);

View File

@@ -0,0 +1,30 @@
(function(global) {
var storage = Bridge.External.Storage;
var path = storage.path;
var root = path.getDir(path.program);
var exepath = path.combine(root, "settings.exe");
var id = "Settings";
var ve = Bridge.External.VisualElements.get(id);
var slideback = ve["BackgroundColor"];
global.slideback = slideback;
global.exepath = exepath;
global.visual = ve;
var strutil = Bridge.External.String;
var nstrutil = Bridge.NString;
var boolTrue = ["true", "1", "yes", "on", "y", "t", "zhen", "真"];
var boolFalse = ["false", "0", "no", "off", "n", "f", "jia", "假"];
global.parseBool = function(str) {
str = "" + str;
for (var i = 0; i < boolTrue.length; i++) {
if (nstrutil.equals(str, boolTrue[i])) {
return true;
}
}
for (var i = 0; i < boolFalse.length; i++) {
if (nstrutil.equals(str, boolFalse[i])) {
return false;
}
}
return null;
};
})(this);

View File

@@ -244,6 +244,14 @@
window.parent.setItemHighlight("update");
} catch (e) {}
</script>
<script>
if (typeof window.parent.setDisabledForOperation === "undefined") {
window.parent.setDisabledForOperation = function() {};
}
if (typeof window.parent.setItemHighlight === "undefined") {
window.parent.setItemHighlight = function() {};
}
</script>
</head>
<body>
@@ -274,19 +282,18 @@
</div>
<div class="section padding" style="margin: 10px 0;"><button id="check-update" data-action="check" data-res-fromfile="publicRes (115)"></button></div>
<div class="section padding" style="display: none; overflow-y: auto; height: 0px; transition: all 0.5s cubic-bezier(0.1, 0.9, 0.2, 1); margin-top: 20px;">
<h2 data-res-fromfile="publicRes (108)"></h2>
<h2 data-res-fromfile="publicRes (108)"></h2><br>
<div class="block" id="newversion-details">
<h3 id="newversion-title"><span data-res-fromfile="publicRes (109)"></span>: <span id="newversion-version"></span></h3>
<span id="newversion-releasedate"></span><br>
<a id="newversion-url" target="_blank" data-res-fromfile="publicRes (110)"></a><br>
<span data-res-fromfile="publicRes (111)"></span>:
<a id="newversion-desc-showall-hide" data-res-fromfile="publicRes (122)"></a>
<div id="newversion-desc"></div>
<div id="newversion-desc" style="font-weight: normal; font-size: 10pt;"></div>
</div>
</div>
<script>
(function() {
"use strict";
var eutils = Windows.UI.Event.Util;
var monitor = Windows.UI.Event.Monitor;
var section = document.querySelector(".pagesection .section").parentNode;
@@ -357,12 +364,13 @@
}).done(function(resp) {
// console.log("success", resp);
var json = JSON.parse(resp.responseText);
window.fetchedJson = json;
// console.log(json);
self.disabled = false;
newVersionVersion.textContent = json.name;
newVersionVersion.setAttribute("data-version", json.tag_name);
window.newver = json.tag_name;
newVersionReleaseDate.textContent = getPublicRes(112) + ": " + json.published_at;
newVersionReleaseDate.textContent = getPublicRes(112) + ": " + Bridge.External.formatDateTime("{0:yyyy-MM-dd HH:mm:ss}", json.published_at);
newVersionUrl.href = json.html_url;
newVersionDesc.innerHTML = markdown.toHTML(json.body);
checkUpdateText.textContent = getPublicRes(113);
@@ -383,7 +391,7 @@
checkUpdateBtn.setAttribute("data-action", "check");
} else {
checkUpdateText.textContent = Bridge.String.format(getPublicRes(116), window.newver);
checkUpdateBtn.textContent = getPublicRes(118);
checkUpdateBtn.textContent = getPublicRes(117);
checkUpdateBtn.setAttribute("data-action", "download");
}
window.parent.setDisabledForOperation(false);

View File

@@ -1 +1 @@
0.1.0.0
0.2.0.0