boot.html 8.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
  5. <meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'self'; script-src 'self'; img-src 'self'">
  6. <title>夭夭</title><link rel="stylesheet" href="boot.css"><link rel="stylesheet" href="inline-update.css">
  7. </head>
  8. <body>
  9. <main id="session-loading" class="session-loading" role="status" aria-live="polite" aria-busy="true">
  10. <img src="icon.png" alt="" width="48" height="48">
  11. <p id="session-loading-message">正在打开夭夭…</p>
  12. </main>
  13. <main id="onboarding" class="page" hidden>
  14. <header class="brand"><div><img src="icon.png" alt="" width="40" height="40"><strong>夭夭</strong></div><button id="theme-toggle" class="theme-button" type="button" aria-label="切换深色主题"><svg><use href="boot-icons.svg#moon"/></svg></button></header>
  15. <div class="wizard"><button id="back" class="back text-button" type="button" hidden><svg><use href="boot-icons.svg#arrow"/></svg>返回</button>
  16. <ol class="steps" aria-label="设置进度">
  17. <li id="step-choice" aria-current="step"><span class="step-dot"><b>1</b><svg><use href="boot-icons.svg#check"/></svg></span>选择服务器</li>
  18. <li id="step-prepare"><span class="step-dot"><b>2</b><svg><use href="boot-icons.svg#check"/></svg></span>准备服务</li>
  19. <li id="step-account"><span class="step-dot"><b>3</b><svg><use href="boot-icons.svg#check"/></svg></span><span id="account-step-title">登录账号</span></li>
  20. </ol>
  21. <p id="step-caption" class="step-caption"></p>
  22. <div class="intro"><h1 id="page-title" tabindex="-1">开始使用夭夭</h1><p id="page-description">选择适合你的使用方式。</p></div>
  23. <section id="choice-section" class="section choice-section" aria-labelledby="choice-title">
  24. <h2 id="choice-title"><span>01</span>选择服务器</h2>
  25. <fieldset id="mode-options" class="mode-options"><legend class="sr-only">服务器运行方式</legend>
  26. <label class="mode-option"><input type="radio" name="mode" value="local"><svg class="mode-icon"><use href="boot-icons.svg#monitor"/></svg><span><strong>本机运行</strong><small>在这台电脑准备并运行服务</small></span></label>
  27. <label class="mode-option"><input type="radio" name="mode" value="remote"><svg class="mode-icon"><use href="boot-icons.svg#link"/></svg><span><strong>连接远程服务器</strong><small>使用已有服务器,本机无需安装</small></span></label>
  28. </fieldset>
  29. <button id="continue" class="primary" type="button" disabled><span>继续</span><svg><use href="boot-icons.svg#arrow"/></svg></button>
  30. </section>
  31. <section id="prepare-section" class="section pending" aria-labelledby="prepare-title">
  32. <h2 id="prepare-title"><span>02</span><span id="prepare-heading">准备服务</span></h2>
  33. <p id="choose-hint" class="muted inset">请先选择本机运行或连接远程服务器。</p>
  34. <div id="local-panel" hidden>
  35. <p class="muted inset">自动准备本机服务,完成后以管理员身份进入。</p>
  36. <div class="installation">
  37. <ol class="install-steps">
  38. <li data-stage="checking"><svg><use href="boot-icons.svg#circle"/></svg><span>检查运行环境</span><small>等待中</small></li>
  39. <li data-stage="installing"><svg><use href="boot-icons.svg#circle"/></svg><span>准备服务组件</span><small>等待中</small></li>
  40. <li data-stage="starting"><svg><use href="boot-icons.svg#circle"/></svg><span>启动并检查服务</span><small>等待中</small></li>
  41. </ol>
  42. <progress id="install-progress" aria-label="正在准备本机服务" hidden></progress>
  43. <details id="install-details"><summary>查看安装详情<svg><use href="boot-icons.svg#chevron"/></svg></summary><pre id="install-log">准备开始</pre><button id="logs" class="text-button" type="button">查看日志</button></details>
  44. </div>
  45. </div>
  46. <form id="connection-form" class="inset" hidden>
  47. <label for="server">服务器地址</label>
  48. <div class="connection-row"><input id="server" name="server" type="text" inputmode="url" autocomplete="url" spellcheck="false" placeholder="https://yaoyao.example.com" required></div><p class="muted field-help">输入管理员提供的服务器地址。</p><button id="detect" class="primary" type="submit">检测并继续</button>
  49. </form>
  50. <p id="status" class="status inset" role="status" aria-live="polite"></p>
  51. <div id="actions" class="actions inset" hidden><button id="retry" class="secondary" type="button">重试</button><button id="force-sync" class="secondary" type="button" hidden>使用当前 App 覆盖同版本 Web</button></div>
  52. <button id="prepare-local" class="primary" type="button" hidden><span>检测并准备本机服务</span><svg><use href="boot-icons.svg#arrow"/></svg></button>
  53. </section>
  54. <section id="account-section" class="section pending" aria-labelledby="account-title">
  55. <h2 id="account-title"><span>03</span><span id="account-heading">登录账号</span></h2>
  56. <p id="account-hint" class="muted inset">服务准备完成后,在此登录账号。</p>
  57. <div id="connected-server" class="connected-server"><svg><use href="boot-icons.svg#check"/></svg><span id="server-summary"></span><button id="change-server" class="text-button" type="button">修改</button></div>
  58. <form id="login-form" hidden>
  59. <div id="credentials" class="inset">
  60. <div class="field"><label for="username">账号</label><input id="username" name="username" autocomplete="username" spellcheck="false" placeholder="输入用户名" required maxlength="320"></div>
  61. <div class="field"><label for="password">密码</label><div class="password-input"><input id="password" name="password" type="password" autocomplete="current-password" placeholder="输入密码" required maxlength="4096"><button id="toggle-password" class="eye-button" type="button" aria-label="显示密码" aria-pressed="false"><svg><use href="boot-icons.svg#eye"/></svg></button></div></div>
  62. <div id="confirmation-field" class="field" hidden><label for="confirmation">确认密码</label><input id="confirmation" name="confirmation" type="password" autocomplete="new-password" placeholder="再次输入密码" maxlength="4096"></div>
  63. </div>
  64. <p id="registration-notice" class="muted inset" role="status" hidden></p>
  65. <p id="login-error" class="error inset" role="alert" hidden></p>
  66. <button id="submit" class="primary" type="submit"><span>登录并进入夭夭</span><svg><use href="boot-icons.svg#arrow"/></svg></button>
  67. </form>
  68. <button id="waiting" class="primary" type="button" disabled hidden>正在准备服务,请稍候</button>
  69. </section>
  70. <footer><label class="remember"><input id="remember" type="checkbox">记住本次选择</label><button id="register-toggle" class="text-button" type="button" hidden>没有账号?注册子账号</button><button id="help-button" class="text-button" type="button" aria-expanded="false" aria-controls="help">帮助</button></footer>
  71. <div id="help" class="help" hidden><p><strong>本机运行:</strong>自动准备服务并以管理员身份进入,无需创建账号或登录。</p><p><strong>远程连接:</strong>填写夭夭服务器地址,检测成功后使用该服务器的账号登录。登录授权保存在此设备,主动退出或密码修改后需要重新登录。</p><p>更换服务器不会迁移原服务器上的数据。遇到安装问题,可展开安装详情查看日志。</p></div>
  72. </div>
  73. </main>
  74. <section id="desktop-update-entry" class="desktop-update-entry" hidden aria-label="App 更新">
  75. <button id="desktop-update-action" type="button"><svg id="desktop-update-ring" viewBox="0 0 24 24" aria-hidden="true"><circle class="update-track" cx="12" cy="12" r="9"/><circle id="desktop-update-value" cx="12" cy="12" r="9" pathLength="100"/></svg><span id="desktop-update-label" aria-live="polite">检测更新</span><span id="desktop-update-dot" hidden aria-hidden="true"></span></button>
  76. <p id="desktop-update-error" role="alert" hidden></p>
  77. </section>
  78. <script src="boot.js"></script><script src="inline-update.js"></script>
  79. </body></html>