summaryrefslogtreecommitdiff
path: root/web/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'web/index.html')
-rw-r--r--web/index.html392
1 files changed, 392 insertions, 0 deletions
diff --git a/web/index.html b/web/index.html
new file mode 100644
index 0000000..f36654f
--- /dev/null
+++ b/web/index.html
@@ -0,0 +1,392 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/js/main" type="module"></script>
+ <style>
+ @keyframes fade-blink {
+ 0% { opacity: 100%; }
+ 100% { opacity: 0%; }
+ }
+
+ #message-modal.error {
+ border: 2px solid red;
+ background: #fff0f0;
+ }
+
+ #message-modal-content {
+ text-align: center;
+ }
+
+ #message-modal-content p {
+ font-size: 150%;
+ }
+
+ #message-modal.animate #message-modal-content {
+ animation: fade-blink 1s ease-in-out infinite alternate;
+ }
+
+ #settings-avatar-img {
+ max-width: 200px;
+ max-height: 200px;
+ }
+
+ [hidden] {
+ display: none !important;
+ }
+
+ input[type=email]:invalid {
+ background: #ff8080;
+ }
+
+ .container.dialog {
+ display: flex;
+ width: 30em;
+ max-width: 100vw;
+ justify-content: center;
+ align-content: center;
+ text-align: center;
+ flex-direction: column;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+
+ .container > ol {
+ margin-left: 1em;
+ }
+
+ hr {
+ width: 100%;
+ }
+
+ form {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ flex-direction: column;
+ }
+
+ table {
+ display: block;
+ padding: 1em;
+ border-collapse: collapse;
+ }
+
+ td {
+ padding: 0.5ex 1ch;
+ }
+ td:not(:last-child) {
+ border-right: 1px dashed black;
+ }
+ tr:not(:last-child) {
+ border-bottom: 1px dashed black;
+ }
+ thead > tr {
+ border-bottom: 1px solid black;
+ }
+
+ .cwts-container {
+ display: flex;
+ text-align: left;
+ flex-flow: row wrap;
+ }
+
+ .cwts-container div {
+ min-width: 33%;
+ }
+
+ .settings-container {
+ margin: 2em;
+ }
+
+ .settings-container form {
+ display: block;
+ }
+
+ .disabled {
+ color: grey;
+ font-style: italic;
+ }
+ </style>
+ <template id="tpl-fenix-style">
+ <style>
+ body { font-size: 300%; }
+ input { font-size: 100%; }
+ </style>
+ </template>
+ </head>
+ <body>
+ <noscript>this thing requires javascript!</noscript>
+
+ <dialog id="message-modal">
+ <div id="message-modal-content">
+ <p id="message"></p>
+ <a href="#" id="message-modal-close" hidden>close</a>
+ </div>
+ </dialog>
+
+ <div id="desktop-signedin" class="container dialog" hidden>
+ successfully signed in!
+ </div>
+
+ <div id="desktop-deleted" class="container dialog" hidden>
+ account has been deleted.
+ </div>
+
+ <div id="desktop-signup" class="container dialog" hidden>
+ <form id="frm-signup">
+ <label for="frm-signup-email">email</label>
+ <input id="frm-signup-email" type="email" name="email" maxlength="256" value="">
+ <label for="frm-signup-password">password</label>
+ <input id="frm-signup-password" type="password" name="password">
+ <input type="submit" name="submit" value="sign up">
+ </form>
+ </div>
+
+ <div id="desktop-signup-unverified" class="container dialog" hidden>
+ <p>signup completed! please verify your account by clicking the
+ link in the email you've just received.</p>
+ <p>if you haven't received anything, go to Settings/Sync and resend
+ the verification code.</p>
+ </div>
+
+ <div id="desktop-signin" class="container dialog" hidden>
+ <form id="frm-signin">
+ <label for="frm-signin-email">email</label>
+ <input id="frm-signin-email" type="email" name="email" maxlength="256" value="">
+ <label for="frm-signin-password">password</label>
+ <input id="frm-signin-password" type="password" name="password">
+ <input type="submit" name="submit" value="sign in">
+ <hr>
+ <div>
+ <a href="#" class="_signup">sign up</a> |
+ <a href="#" class="_reset">reset password</a>
+ </div>
+ </form>
+ </div>
+
+ <div id="desktop-signin-confirm" class="container dialog" hidden>
+ <p>signin completed! please verify your session by copying the code
+ you've just received as an email into this box.</p>
+ <form id="frm-signin-confirm">
+ <label for="frm-signin-confirm-code">code</label>
+ <input id="frm-signin-confirm-code" type="text" name="code" maxlength="6">
+ <input type="submit" name="submit" value="confirm signin">
+ <hr>
+ <a href="#" class="_resend">no email appeared? resend code</a>
+ </form>
+ </div>
+
+ <div id="desktop-resetpw" class="container dialog" hidden>
+ <form id="frm-resetpw">
+ <label for="frm-resetpw-email">email</label>
+ <input id="frm-resetpw-email" type="email" name="email" maxlength="256" value="">
+ <input type="submit" name="submit" value="send reset code">
+ </form>
+ </div>
+
+ <div id="desktop-resetpw-newpw" class="container dialog" hidden>
+ <form id="frm-resetpw-newpw">
+ <table>
+ <tr>
+ <td><label for="frm-resetpw-newpw-old">old password</label></td>
+ <td><input id="frm-resetpw-newpw-old" type="password" name="old"></td>
+ </tr>
+ <tr>
+ <td><label for="frm-resetpw-newpw-new">new password</label></td>
+ <td><input id="frm-resetpw-newpw-new" type="password" name="new"></td>
+ </tr>
+ <tr>
+ <td><label for="frm-resetpw-newpw-new-confirm">new password (confirm)</label></td>
+ <td>
+ <input id="frm-resetpw-newpw-new-confirm" type="password" name="new-confirm">
+ </td>
+ </tr>
+ </table>
+ <div>
+ <input type="submit" name="submit" value="change password">
+ </div>
+ </form>
+ </div>
+
+ <div id="desktop-cwts" class="container dialog" hidden>
+ <form id="frm-cwts">
+ <p>choose what to sync:</p>
+ <div class="cwts-container">
+ <div>
+ <input type="checkbox" id="frm-cwts-addons" name="addons">
+ <label for="frm-cwts-addons">add-ons</label>
+ </div>
+ <div>
+ <input type="checkbox" id="frm-cwts-addresses" name="addresses">
+ <label for="frm-cwts-addresses">addresses</label>
+ </div>
+ <div>
+ <input type="checkbox" id="frm-cwts-bookmarks" name="bookmarks">
+ <label for="frm-cwts-bookmarks">bookmarks</label>
+ </div>
+ <div>
+ <input type="checkbox" id="frm-cwts-creditcards" name="creditcards">
+ <label for="frm-cwts-creditcards">credit cards</label>
+ </div>
+ <div>
+ <input type="checkbox" id="frm-cwts-history" name="history">
+ <label for="frm-cwts-history">history</label>
+ </div>
+ <div>
+ <input type="checkbox" id="frm-cwts-passwords" name="passwords">
+ <label for="frm-cwts-passwords">passwords</label>
+ </div>
+ <!-- NOTE the spec says this key is named `preferences` -->
+ <div>
+ <input type="checkbox" id="frm-cwts-prefs" name="prefs">
+ <label for="frm-cwts-prefs">preferences</label>
+ </div>
+ <div>
+ <input type="checkbox" id="frm-cwts-tabs" name="tabs">
+ <label for="frm-cwts-tabs">open tabs</label>
+ </div>
+ </div>
+ <input type="submit" name="submit" value="start syncing">
+ </form>
+ </div>
+
+ <div id="desktop-settings" class="container" hidden>
+ <nav>
+ <a href="#/settings">settings</a> |
+ <a href="#/settings/change-password">change password</a> |
+ <a href="#/settings/destroy">delete account</a>
+ </nav>
+ <div class="settings-container tab" id="desktop-settings-main" hidden>
+ <form id="frm-settings-avatar">
+ <img id="settings-avatar-img">
+ <input type="file" accept="image/*" id="settings-avatar">
+ <input type="submit" id="settings-avatar-save" value="save">
+ </form>
+ <form id="frm-settings-name">
+ <label for="settings-name">user name:</label>
+ <input type="text" id="settings-name" maxlength="256">
+ <input type="submit" id="settings-name-save" value="save">
+ </form>
+ <table id="settings-clients">
+ <thead>
+ <tr>
+ <td>name</td>
+ <td>deviceType</td>
+ <td>createdTime</td>
+ <td>lastAccessTime</td>
+ <td>oauth?</td>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ <div class="settings-container tab" id="desktop-settings-destroy" hidden>
+ <p>deleting your account requires confirmation.</p>
+ <form id="frm-settings-destroy">
+ <label for="frm-settings-destroy-email">email</label>
+ <input id="frm-settings-destroy-email" type="email"
+ name="email" maxlength="256" value="">
+ <label for="frm-settings-destroy-password">password</label>
+ <input id="frm-settings-destroy-password" type="password" name="password">
+ <input type="submit" name="submit" value="really delete account">
+ </form>
+ </div>
+ <div class="settings-container tab" id="desktop-settings-chpw" hidden>
+ <form id="frm-settings-chpw">
+ <table>
+ <tr>
+ <td><label for="frm-settings-chpw-old">old password</label></td>
+ <td><input id="frm-settings-chpw-old" type="password" name="old"></td>
+ </tr>
+ <tr>
+ <td><label for="frm-settings-chpw-new">new password</label></td>
+ <td><input id="frm-settings-chpw-new" type="password" name="new"></td>
+ </tr>
+ <tr>
+ <td><label for="frm-settings-chpw-new-confirm">new password (confirm)</label></td>
+ <td>
+ <input id="frm-settings-chpw-new-confirm" type="password" name="new-confirm">
+ </td>
+ </tr>
+ </table>
+ <div>
+ <input type="submit" name="submit" value="change password">
+ </div>
+ </form>
+ </div>
+ </div>
+
+ <div id="desktop-generate-invite" class="container dialog" hidden>
+ <form id="frm-generate-invite">
+ <label for="frm-generate-invite-email">invite valid for</label>
+ <select id="frm-generate-invite-email" name="ttl" maxlength="256">
+ <option value="1">one hour</option>
+ <option value="24">one day</option>
+ <option value="168">one week</option>
+ </select>
+ <input type="submit" name="submit" value="generate invite">
+ </form>
+ <div id="desktop-generate-invite-result" hidden>
+ invite link is <a id="desktop-generate-invite-result-link"></a>
+ </div>
+ </div>
+
+ <div id="fenix-signin-warning" class="container" hidden>
+ <p>it looks like you're trying to sign in to sync from an android firefox instance.
+ we're very sorry, but this is going to hurt a bit.</p>
+ <p>to sign in you'll need to follow these steps:</p>
+ <ol>
+ <li>
+ enable USB debugging in the android:
+ <ol>
+ <li>go to setting → about phone</li>
+ <li>scroll to the build number</li>
+ <li>tap it until a "your are new a developer" message appears</li>
+ <li>go to settings → system → developer options</li>
+ <li>scroll down to "USB debugging", enable it</li>
+ </ol>
+ </li>
+ <li>enable USB debugging in the android firefox settings</li>
+ <li>connect your android device to a PC for USB debugging</li>
+ <li>on this PC, open firefox and go to <pre>about:debugging</pre></li>
+ <li>enable USB devices</li>
+ <li>connect to your android device</li>
+ <li>open this page in a normal tab, not through the sign-in interface.
+ this is very important, if there's no normal tab with this URL open
+ <em>signin will not work</em></li>
+ <li>open the login page through the sign-in interface as well</li>
+ <li>in the PC debugger, inspect the new tab that has just appeared</li>
+ <li><a href="#" id="fenix-signin-dialog-show">actually sign in</a>.
+ clicking this link will lead away from this page, finishing sign-in
+ will bring you back.</li>
+ <li>go to the javascript debug console of the tab we inspected previously,
+ copy the long block of code</li>
+ <li>locate the <pre>Firefox Accounts WebChannel</pre> extension in the
+ debugger and inspect it. this may fail, if it does go to the setup
+ tab of the debugger and disable USB devices, enable then, reconnect
+ to your devices, and repeat this step
+ <p><b>WARNING:</b> this is known to not work on firefox 102. if you get
+ a blank tab instead of a tab with debug tools as seen earlier you
+ may have to downgrade your android firefox to 101 to log in.
+ unfortunately this seems to require uninstalling and reinstalling
+ firefox, which wipes your data!</p>
+ </li>
+ <li>go to the javascript debug console, paste the block of code, and run it</li>
+ <li>enjoy sync!</li>
+ </ol>
+ </div>
+
+ <div id="fenix-signin" class="container dialog" hidden>
+ <form id="frm-fenix-signin">
+ <label for="email">email</label>
+ <input type="text" name="email" value="">
+ <label for="password">password</label>
+ <input type="password" name="password">
+ <input type="submit" name="submit" value="do the fenix dance">
+ </form>
+ </div>
+ </body>
+</html>