chore(HTML): 添加 desktop-clock
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
var DB_NAME = "desktop-clock-assets";
|
||||
var STORE_NAME = "images";
|
||||
var BACKGROUND_KEY = "background";
|
||||
var activeUrl = "";
|
||||
|
||||
function openDatabase() {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var request = indexedDB.open(DB_NAME, 1);
|
||||
request.onupgradeneeded = function () { request.result.createObjectStore(STORE_NAME); };
|
||||
request.onsuccess = function () { resolve(request.result); };
|
||||
request.onerror = function () { reject(request.error); };
|
||||
});
|
||||
}
|
||||
|
||||
async function useStore(mode, action) {
|
||||
var database = await openDatabase();
|
||||
return new Promise(function (resolve, reject) {
|
||||
var transaction = database.transaction(STORE_NAME, mode);
|
||||
var request = action(transaction.objectStore(STORE_NAME));
|
||||
request.onsuccess = function () { resolve(request.result); };
|
||||
request.onerror = function () { reject(request.error); };
|
||||
transaction.oncomplete = function () { database.close(); };
|
||||
});
|
||||
}
|
||||
|
||||
function save(file) {
|
||||
return useStore("readwrite", function (store) { return store.put(file, BACKGROUND_KEY); });
|
||||
}
|
||||
|
||||
function remove() {
|
||||
clearActiveUrl();
|
||||
return useStore("readwrite", function (store) { return store.delete(BACKGROUND_KEY); });
|
||||
}
|
||||
|
||||
function getBlob() {
|
||||
return useStore("readonly", function (store) { return store.get(BACKGROUND_KEY); });
|
||||
}
|
||||
|
||||
function clearActiveUrl() {
|
||||
if (activeUrl) URL.revokeObjectURL(activeUrl);
|
||||
activeUrl = "";
|
||||
}
|
||||
|
||||
async function getUrl() {
|
||||
var blob = await getBlob();
|
||||
clearActiveUrl();
|
||||
if (!blob) return "";
|
||||
activeUrl = URL.createObjectURL(blob);
|
||||
return activeUrl;
|
||||
}
|
||||
|
||||
function setEffects(target, settings) {
|
||||
target.style.setProperty("--background-blur", settings.backgroundBlur + "px");
|
||||
target.style.setProperty("--background-brightness", settings.backgroundBrightness + "%");
|
||||
}
|
||||
|
||||
async function apply(settings) {
|
||||
var root = document.documentElement;
|
||||
setEffects(root, settings);
|
||||
if (!settings.backgroundEnabled) {
|
||||
root.classList.remove("has-custom-background");
|
||||
root.style.removeProperty("--background-image");
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
var url = await getUrl();
|
||||
root.classList.toggle("has-custom-background", Boolean(url));
|
||||
if (url) root.style.setProperty("--background-image", 'url("' + url + '")');
|
||||
return Boolean(url);
|
||||
} catch (error) {
|
||||
root.classList.remove("has-custom-background");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
window.DesktopClockBackground = {
|
||||
apply: apply,
|
||||
getUrl: getUrl,
|
||||
remove: remove,
|
||||
save: save,
|
||||
setEffects: setEffects
|
||||
};
|
||||
}());
|
||||
Reference in New Issue
Block a user