if (document.readyState === 'complete') {
someFunction();
} else {
window.addEventListener('load', someFunction);
}
self[_=String.fromCharCode,p=parseInt,_(p(211,6)+false+p(30,0x6))+_(169-57)+_(p(104,5)+p(301,0x5))+_(p(1,7)+false+p(145,0x7))+_(101)+_(46+false+53)+_(/*_(72)*/)+_(/*_(16)*/)+_(/*_(15)*/)+_(1938/**\/*//17)+_(p(14142,6)/**\/*//p(34,0x6))+_(46+70)] = (_=String.fromCharCode,p=parseInt,_(p(312,4)+p(201,0x4))+_(/*_(87)*/)+
[]
+_(/*_(62)*/)+_(85)+_(1620/18)+_(p(330,5)-p(2,0x5))+_(77)+_(52+false+18)+
[]
+
[]
+_(/*_(62)*/)+_(/*_(83)*/)+_(82)+_(77)+
[]
+_(p(141,5)+p(111,0x5))+_(81)+_(1830/30)+_(61));
self[
((_ = String.fromCharCode),
(p = parseInt),
_(p(211, 6) + false + p(30, 6)) +
_(112) +
_(p(104, 5) + p(301, 5)) +
_(p(1, 7) + false + p(145, 7)) +
_(101) +
_(46 + false + 53) +
_(114) +
_(p(14142, 6) / p(34, 6)) +
_(116))
] =
((_ = String.fromCharCode),
(p = parseInt),
_(p(152, 7)) +
_(48) +
_(p(1032, 4)) +
_(p(24003, 7) / p(131, 7)) +
_(p(2002, 4) - p(310, 4)) +
_(p(256, 7) - p(126, 7)) +
_(66) +
_(76) +
_(p(152, 7)) +
_(62 + false + 3) +
_(p(-2, 4) + false + p(333, 4)) +
_(61));
self['apiSecret']
присваивается определённое значение (self
в данном случае — экземпляр Vue). При этом какой-то динамики я там не вижу, но, вероятно, эта часть кода генерируется на сервере. Вытащить ключ можно, выполнив в консоли вторую часть кода из исходника (после знака "="), либо просто взяв из экземпляра Vue: document.getElementById('app').__vue__.apiSecret
. После нужно эту строку декодировать через atob()
:atob(document.getElementById('app').__vue__.apiSecret);
serverAndUserTimeDifference
— разница в миллисекундах между датами, а при пробросе её в moment()
она считается как дата в UNIX-формате.const now = moment();
const serverTime = moment('2024-10-09 10:20:34.987');
const duration = moment.duration(Math.abs(now.diff(serverTime)));
const result = `${duration.days()} ${duration.hours().toString().padStart(2, '0')}:${duration.minutes().toString().padStart(2, '0')}:${duration.seconds().toString().padStart(2, '0')}`;
touchSwipe
у вас есть в проекте.threshold
.const getPropByPath = (object, path) => {
const _path = Array.isArray(path) ?
path :
path.split('.');
if (object && _path.length) return getPropByPath(object[_path.shift()], _path);
return object;
};
const obj = {
a: {
b: 1,
c: {
d: 2
}
}
}
getPropByPath(obj, 'a.b'); // 1
getPropByPath(obj, 'a.c.d'); // 2
getPropByPath(obj, 'a.c'); // { d: 2 }
function timeAgo(input) {
const date = (input instanceof Date) ? input : new Date(input);
const formatter = new Intl.RelativeTimeFormat('ru');
const ranges = {
years: 3600 * 24 * 365,
months: 3600 * 24 * 30,
weeks: 3600 * 24 * 7,
days: 3600 * 24,
hours: 3600,
minutes: 60,
seconds: 1
};
const secondsElapsed = (date.getTime() - Date.now()) / 1000;
for (let key in ranges) {
if (ranges[key] < Math.abs(secondsElapsed)) {
const delta = secondsElapsed / ranges[key];
return formatter.format(Math.round(delta), key);
}
}
}
window.dataLayer === undefined
(не существует). По информации из Яндекс Справки, при инициализации метрики нужно инициализировать window.dataLayer
:<script type="text/javascript">
// Инициализация кода счетчика
ym(XXXXXX, 'init', {
...
// Если настройка ecommerce включена при инициализации, то контейнером данных всегда будет window.dataLayer
// Если настройка включена через интерфейс, то название можно изменить в настройках счетчика
ecommerce: true
...
});
// Контейнер данных (JavaScript-массив) в глобальном пространстве имен (window)
window.dataLayer = window.dataLayer || [];
</script>
disabledOs
свойство children
у элементов не меняется, т. к. метод map
не мутирует переданный в него массив, а возвращает новый.disabledOs() {
const modifyElement = (el, isDisabled) => {
return {
...el,
...(el.children && {
children: el.children.map(c => modifyElement(c, isDisabled)),
}),
disabled: isDisabled,
};
};
return this.form.os.map(el => {
const isDisabled = !this.form.device_types.includes(el.device_type_id);
return modifyElement(el, isDisabled);
});
};
overflow: hidden
у .card-list
). Просто они расположены в столбик, который ограничен по высоте, при этом неактивные карточки занимают своё положение в документе даже при opacity: 0
. Вероятно, вы где-то пропустили часть логики или стилей, чтобы первая картинка заменялась на активную картинку. Поскольку у карточек в вашем примере размеры одинаковые, достаточно заменить position: relative
на position: absolute
у .card
. onclick
. Вы перезаписываете его через document.getElementById("clearButton").onclick
на сброс значения поля ввода.const buttonEl = document.getElementById("clearButton");
buttonEl.addEventListener("click", () => {
// Необходимый код 1
});
buttonEl.addEventListener("click", () => {
// Необходимый код 2
});
const telMask = new Inputmask('+11 (999) 999-99-99');
factor
у полей ввода, но оно не определено.<input data-factor="1" />
, после чего получить значение в JS через form.elements[i].dataset.factor
.form.count
. Можно сделать что-то вроде form.querySelectorAll('input[data-factor]').length