Carousel
в options
не нужен:const container = document.getElementById('myProject');
const options = {
Navigation: {
prevTpl: '',
nextTpl: '',
},
};
new Carousel(container, options);
button
, то она добавляется внутрь button
плагина (получаются две вложенных кнопки, что не рекомендуется делать), поэтому я бы оставил просто svg
. Кроме того, обратите внимание на viewBox="0 0 4 4"
у левой кнопки и на лишний </ button>
в обоих случаях.$(document).ready(function() {
const container = document.getElementById("myProject");
const options = {
Navigation: {
prevTpl: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M15 3l-9 9 9 9"></path></svg>'
nextTpl: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M9 3l9 9-9 9"></path></svg>',
},
};
new Carousel(container, options);
});
RootStore
внутрь необходимого стора:export class RootStore {
constructor() {
this.authStore = new AuthStore(this);
}
}
export class AuthStore {
private rootStore: RootStore;
constructor(rootStore: RootStore) {
this.rootStore = rootStore;
}
signIn = (email: string, password: string) => {
// ...
this.rootStore.profileStore.getObservables();
// ...
};
}
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')}`;
Если вы не можете войти в систему или получить доступ к своей учётной записи, вы можете отправить заявку с помощью e-mail с адреса электронной почты вашей учетной записи Heroku по адресу support@heroku.com
.
const getFolderData = async () => {
if (!('showDirectoryPicker' in window)) {
console.error('File System Access API не поддерживается');
return;
}
try {
const dirHandle = await window.showDirectoryPicker();
const contents = [];
for await (const entry of dirHandle.values()) {
if (entry.kind === 'file') {
contents.push(`Файл: ${entry.name}`);
} else if (entry.kind === 'directory') {
contents.push(`Папка: ${entry.name}`);
}
}
contents.forEach(item => console.log(item));
return dirHandle;
} catch (err) {
console.error('Непредвиденная ошибка:', err);
}
}
const writeSomeDocument = async (dirHandle) => {
try {
const newFileHandle = await dirHandle.getFileHandle("test.txt", {
create: true
});
const writable = await newFileHandle.createWritable();
await writable.write("Hello, world!");
await writable.close();
console.log('Файл создан');
} catch (err) {
console.error('Непредвиденная ошибка:', err);
}
}
const dirHandle = await getFolderData(); // Получаем сущность для работы с директорией и выводим её содержимое
writeSomeDocument(dirHandle); // Записываем тестовый файл в эту директорию
<SignInButton />
нет свойств afterSignInUrl
и afterSignUpUrl
, что подтверждает и документация компонента.afterSignXUrl
можно использовать signXFallbackRedirectUrl
, но предпочтительнее использовать переменные среды. muted
у видео. Многие браузеры не позволяют автоматически воспроизводить видео со звуком.