f9db43a2e9
* Add key * Add: a second index uuid, push changes to sync controller * Add: sync.js * Add: tokenManager * Change: log entire body for http error * Add: token flow * Fix: minor * Fix: move cleanup to stop function * Add: syncNow * Update dependencies * Fix: handle 401 error * Add: handle 401 error * Fix: then -> catch * Add: sync options to options page * Update db-to-cloud * Change: make prefs.set return a promise * Add: disble selector if connected * Add: update selector state * Fix: return promise in prefs.set * Fix: manage complex state * Fix: handle prefs change * Change: manage sync status in background * Add: show current status in the UI * Add: schedule a faster sync when db changed * Update dependencies * Add: include progress in sync status * Add: more detail status * Show status text only * Bump dependencies * Change: show loaded and total * Fix: syncTarget is undefined * Add: google and onedrive * Fix: token is not reused * Bump dependencies * Don't use minified version since it is hard to debug * Fix: expire time is incorrect * Change: switch google to code flow * Bump dependencies * Change: only modify pref if the initialization success? * Don't stop the sync if the first sync is not triggered by the user * Add: implement refresh token * Change: switch microsoft to code flow * Add: subtract expire with a latency * Add: microsoft client secret * Add: display error message * Fix: fromPref is not used * Change: try to revoke the token when log out * Add: revoke dropbox token * Fix: Google only generates one refresh token for one user by default * Bump dependencies, fix onedrive list issue * Fix: arguments sent to sync.put is wrong * Fix: don't schedule a sync on db changed if not connected * Bump dependencies. Fix issue of switching drives * Bump db-to-cloud, fix switching drive issue * Fix: only auth user on 401 error, don't display login window without user interaction * Fix: don't call revoke() if token is undefined * Add: login button to generate the access token interactively * Fix: make addMissingProperties a local * Fix: store missing props in an object * Fix: sync.getStatus should be sync * LATENCY -> NETWORK_LATENCY * Fix: cache the token forever if there is no expire time e.g. dropbox * Add some comments * Fix: i18n * Fix: i18n sync status * fixup! Fix: i18n sync status * Fix: 'sync to cloud' is displayed twice
224 lines
8.4 KiB
HTML
224 lines
8.4 KiB
HTML
<!DOCTYPE html>
|
|
<html id="stylus">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title i18n-text-append="optionsHeading">Stylus </title>
|
|
<link rel="stylesheet" href="global.css">
|
|
<link rel="stylesheet" href="options/options.css">
|
|
<link rel="stylesheet" href="options/onoffswitch.css">
|
|
<link rel="stylesheet" href="msgbox/msgbox.css">
|
|
|
|
<style id="firefox-transitions-bug-suppressor">
|
|
/* restrict to FF */
|
|
@supports (-moz-appearance:none) {
|
|
/* increased specificity to override sane selectors in user styles */
|
|
html#stylus.firefox #options *, #stylus #notes * {
|
|
transition: none !important;
|
|
}
|
|
}
|
|
</style>
|
|
|
|
<script src="js/polyfill.js"></script>
|
|
<script src="js/dom.js"></script>
|
|
<script src="js/messaging.js"></script>
|
|
<script src="js/promisify.js"></script>
|
|
<script src="js/msg.js"></script>
|
|
<script src="js/localization.js"></script>
|
|
<script src="js/prefs.js"></script>
|
|
<script src="js/storage-util.js" async></script>
|
|
<script src="msgbox/msgbox.js" async></script>
|
|
<script src="content/style-injector.js"></script>
|
|
<script src="content/apply.js"></script>
|
|
</head>
|
|
|
|
<body id="stylus-options">
|
|
<div id="options">
|
|
|
|
<div class="block">
|
|
<h1 i18n-text="optionsCustomizeIcon"></h1>
|
|
<div class="items">
|
|
<label>
|
|
<span i18n-text="optionsIconDark"></span>
|
|
<div class="iconset">
|
|
<input type="radio" name="iconset">
|
|
<img src="/images/icon/16.png">
|
|
<img src="/images/icon/16w.png">
|
|
<img src="/images/icon/16x.png">
|
|
</div>
|
|
</label>
|
|
<label>
|
|
<span i18n-text="optionsIconLight"></span>
|
|
<div class="iconset">
|
|
<input type="radio" name="iconset">
|
|
<img src="/images/icon/light/16.png">
|
|
<img src="/images/icon/light/16w.png">
|
|
<img src="/images/icon/light/16x.png">
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="block">
|
|
<h1 i18n-text="optionsCustomizeBadge"></h1>
|
|
<div class="items">
|
|
<label>
|
|
<span i18n-text="prefShowBadge"></span>
|
|
<span class="onoffswitch">
|
|
<input type="checkbox" id="show-badge" class="slider">
|
|
<span></span>
|
|
</span>
|
|
</label>
|
|
<label>
|
|
<span i18n-text="optionsBadgeNormal"></span>
|
|
<input type="color" id="badgeNormal">
|
|
</label>
|
|
<label>
|
|
<span i18n-text="optionsBadgeDisabled"></span>
|
|
<input type="color" id="badgeDisabled">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="block">
|
|
<h1 i18n-text="optionsCustomizePopup"></h1>
|
|
<div class="items">
|
|
<label>
|
|
<span i18n-text="optionsPopupWidth"></span>
|
|
<input type="number" id="popupWidth" min="200" max="800">
|
|
</label>
|
|
<label>
|
|
<span i18n-text="popupOpenEditInWindow"
|
|
i18n-title="popupOpenEditInWindowTooltip"></span>
|
|
<span class="onoffswitch">
|
|
<input type="checkbox" id="openEditInWindow" class="slider">
|
|
<span></span>
|
|
</span>
|
|
</label>
|
|
<label>
|
|
<span i18n-text="popupStylesFirst"></span>
|
|
<span class="onoffswitch">
|
|
<input type="checkbox" id="popup.stylesFirst" class="slider">
|
|
<span></span>
|
|
</span>
|
|
</label>
|
|
<label>
|
|
<span i18n-text="popupAutoResort"></span>
|
|
<span class="onoffswitch">
|
|
<input type="checkbox" id="popup.autoResort" class="slider">
|
|
<span></span>
|
|
</span>
|
|
</label>
|
|
<label class="chromium-only chrome-no-popup-border">
|
|
<span i18n-text="popupBorders" i18n-title="popupBordersTooltip"></span>
|
|
<span class="onoffswitch">
|
|
<input type="checkbox" id="popup.borders" class="slider">
|
|
<span></span>
|
|
</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="block" id="updates">
|
|
<h1 i18n-text="optionsCustomizeUpdate"></h1>
|
|
<div class="items">
|
|
<label>
|
|
<span i18n-text="optionsUpdateInterval">
|
|
<a data-cmd="note"
|
|
i18n-title="optionsUpdateImportNote"
|
|
href="#"
|
|
class="svg-inline-wrapper"
|
|
tabindex="0">
|
|
<svg class="svg-icon info"><use xlink:href="#svg-icon-help"/></svg>
|
|
</a>
|
|
</span>
|
|
<input type="number" min="0" id="updateInterval">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="block sync-options">
|
|
<h1 i18n-text="optionsCustomizeSync"></h1>
|
|
<div class="items">
|
|
<label>
|
|
<span class="sync-status"></span>
|
|
<select class="cloud-name">
|
|
<option value="none" i18n-text="optionsSyncNone"></option>
|
|
<option value="dropbox">Dropbox</option>
|
|
<option value="google">Google Drive</option>
|
|
<option value="onedrive">OneDrive</option>
|
|
</select>
|
|
</label>
|
|
<div class="actions">
|
|
<button type="button" class="connect" i18n-text="optionsSyncConnect"></button>
|
|
<button type="button" class="disconnect" i18n-text="optionsSyncDisconnect"></button>
|
|
<button type="button" class="sync-now" i18n-text="optionsSyncSyncNow"></button>
|
|
<button type="button" class="sync-login" i18n-text="optionsSyncLogin"></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="block" id="advanced">
|
|
<div class="collapsible-resizer">
|
|
<h1 i18n-text="optionsAdvanced">
|
|
<a href="#" class="svg-inline-wrapper is-collapsed" tabindex="0">
|
|
<svg class="svg-icon" viewBox="0 0 1792 1792">
|
|
<path fill-rule="evenodd" d="M1408 704q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z"/>
|
|
</svg>
|
|
</a>
|
|
<a href="#" class="svg-inline-wrapper is-expanded" tabindex="0">
|
|
<svg class="svg-icon" viewBox="0 0 1792 1792">
|
|
<path fill-rule="evenodd" d="M1408 1216q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/>
|
|
</svg>
|
|
</a>
|
|
</h1>
|
|
</div>
|
|
<div class="items">
|
|
<label>
|
|
<span i18n-text="optionsAdvancedExposeIframes">
|
|
<a data-cmd="note"
|
|
i18n-title="optionsAdvancedExposeIframesNote"
|
|
href="#"
|
|
class="svg-inline-wrapper"
|
|
tabindex="0">
|
|
<svg class="svg-icon info"><use xlink:href="#svg-icon-help"/></svg>
|
|
</a>
|
|
</span>
|
|
<span class="onoffswitch">
|
|
<input type="checkbox" id="exposeIframes" class="slider">
|
|
<span></span>
|
|
</span>
|
|
</label>
|
|
<label class="chromium-only">
|
|
<span i18n-text="optionsAdvancedContextDelete"></span>
|
|
<span class="onoffswitch">
|
|
<input type="checkbox" id="editor.contextDelete" class="slider">
|
|
<span></span>
|
|
</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="block" id="actions">
|
|
<button data-cmd="reset" i18n-text="optionsResetButton" i18n-title="optionsReset"></button>
|
|
<button data-cmd="open-manage" i18n-text="optionsOpenManager"></button>
|
|
<div data-cmd="check-updates">
|
|
<button i18n-text="optionsCheck" i18n-title="optionsCheckUpdate">
|
|
<span id="update-progress"></span>
|
|
</button>
|
|
<div id="updates-installed" i18n-text="updatesCurrentlyInstalled"></div>
|
|
</div>
|
|
<button data-cmd="open-keyboard" class="chromium-only" i18n-text="shortcuts" i18n-title="shortcutsNote"></button>
|
|
</div>
|
|
</div>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none !important;">
|
|
<symbol id="svg-icon-help" viewBox="0 0 14 16">
|
|
<path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path>
|
|
</symbol>
|
|
</svg>
|
|
|
|
<script src="options/options.js"></script>
|
|
</body>
|
|
</html>
|