var flagStatus = new Map();
flagStatus('request1', 'init');
flagStatus('request2', 'init');
// ....
flagStatus('requestN', 'init');
// тут делаем вызовы в цикле, после каждого вызова меняем статус в flagStatus на finish (любой, чтобы вам было понятно что этот завершен)
// перед вызовом действия проверяем чтобы все в flagStatus было finish
let parentObject = document.querySelector(/* селектор для родительского элемента, можно body*/);
let span = document.querySelectorAll(".yith-wcwl-items-count");
const config = {
attributes: true,
childList: true,
subtree: true
};
// Колбэк-функция при срабатывании мутации
const callback = function(mutationsList, observer) {
for (let i = 0; i < span.length; i++) {
let isEmpty = Number( span[i].textContent ) === 0;
span[i].classList[ isEmpty ? "add" : "remove" ]("hidden");
}
};
// Создаём экземпляр наблюдателя с указанной функцией колбэка
const observer = new MutationObserver(callback);
// Начинаем наблюдение за настроенными изменениями целевого элемента
observer.observe(parentObject , config);
<div id="container">
<div id="cards">
<!-- содержимое, карточки -->
</div>
</div>
const container = document.getElementById('container');
const cards = document.getElementById('cards');
// разница между правым краем cards и container
console.log(container.offsetWidth - (cards.offsetWidth + cards.offsetLeft));
// cards.offsetLeft может быть отрицательным
// Если console.log вернул отрицательное значение, значит карточки шире родительского блока
let currentPage = 0; // начинать лучше с нуля
let booksOnPage = 4;
return data.map((book, index) => ({
fields: {
number: (currentPage * booksOnPage) +index + 1,
if (!isset($_SESSION['is_add_to_db'])) {
// добавление в БД, проверка избавит вас от лишних запросов в БД
}
<button type="button">Активная</button>
<button type="button" disabled>Не активная</button>
<button type="button" id="button1">Будет неактивная после выполнения скрипта</button>
const button = document.getElementById('button1');
button.setAttribute('disabled', 'disabled');
button:disabled {
/* стили */
}
"build:server": "rollup --config server/rollup.config.js",
"rollup-plugin-json": "^4.0.0",
"rollup-plugin-terser": "^5.3.0",
"rollup-plugin-typescript2": "^0.26.0",
import typescript from 'rollup-plugin-typescript2';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import json from 'rollup-plugin-json';
import pkg from "../package.json";
import copy from 'rollup-plugin-copy';
export default [
{
input: 'server/server.ts',
plugins:[
typescript({
typescript: require('typescript'),
"declaration": false,
"module": "esnext",
"noImplicitAny": false,
"target": "es5",
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"lib": ["dom", "es6"],
"typeRoots": ["node_modules/@types"]
}),
resolve({
browser: false,
main:true
}),
json(),
commonjs(),
],
external: [
...Object.keys(pkg.dependencies || {})
],
output: {
file: 'dist/server/server.js',
format: 'cjs'
}
},
]