(function () { const metaElementsSelector = ".entry-footer .entry-meta"; const dataAttr = "data-poemid"; const dbNameFav = "PtryLndDB_favorites" const storeNameFav = "favorites"; const dbNameAudio = "PtryLndDB_audioRecords"; const storeNameAudio = "audioStore"; const indexNameAudio = "poemId"; function checkRecordExists(storeName, dbName, key, indexName) { return new Promise((resolve, reject) => { const openRequest = indexedDB.open(dbName); openRequest.onupgradeneeded = function (event) { db = event.target.result; if (storeName === storeNameFav) { if (!db.objectStoreNames.contains("favorites")) { var objectStore = db.createObjectStore("favorites", { keyPath: "poemId" }); } } if (storeName === storeNameAudio) { if (!db.objectStoreNames.contains('audioStore')) { var objectStore = db.createObjectStore('audioStore', { keyPath: 'id', autoIncrement: true }); // Создаём индекс для поля 'poemId' objectStore.createIndex('poemId', 'poemId', { unique: false }); } } }; openRequest.onsuccess = function (event) { const db = event.target.result; const transaction = db.transaction([storeName], "readonly"); const store = transaction.objectStore(storeName); let request; if (indexName) { const index = store.index(indexName); request = index.get(key); } else { request = store.get(key) } request.onsuccess = function () { if (request.result === undefined) resolve(false); // не найдена else resolve(true); // запись найдена }; request.onerror = function () { resolve(new Error( "Ошибка при поиске записи: ", event.target.error)); }; }; openRequest.onerror = function (event) { reject(new Error("Ошибка при открытии базы данных: ", event.target.error)); }; }) } async function processMetaEntries() { const metaElements = document.querySelectorAll(metaElementsSelector); for (const element of metaElements) { const poemId = element.getAttribute(dataAttr); const ulElement = element.querySelector('ul'); if (poemId != null && ulElement != null) { // .. esrt Favorite try { const existsFav = await checkRecordExists(storeNameFav, dbNameFav, poemId, null); if (existsFav) { // создаем элемент const liElement = document.createElement('li'); liElement.innerHTML = 'Избранное'; // add to parent element ulElement.appendChild(liElement); } } catch (error) { console.error("Ошибка в " + storeNameFav, error); } // dann Audio .. try { const existsAudio = await checkRecordExists(storeNameAudio, dbNameAudio, poemId, indexNameAudio); if (existsAudio) { // создаем элемент const liElement = document.createElement('li'); liElement.innerHTML = 'Аудиозапись'; // add to parent element ulElement.appendChild(liElement); } } catch (error) { console.error("Ошибка в " + storeNameAudio, error); } } } } processMetaEntries(); })()