Files
kupshop/admin/static/js/wpj.changelog.js
2025-08-02 16:30:27 +02:00

90 lines
2.9 KiB
JavaScript

class Changelog {
constructor() {
this.el = $('#changelog');
this.page = 1;
this.compile = wpj.template.compile('#changelogTemplate');
const me = this;
let query = this.el.data('deploytime') ? '?time=' + this.el.data('deploytime') : '?';
me.fetchData(query);
this.el.on('click', '[data-nav]', function() {
me.changeSlide($(this).data('nav'));
});
this.el.on('click', '[data-loader]', function() {
me.page++;
me.fetchData(query + '&page=' + me.page);
});
this.el.on('click', 'a[href*="http"]', function() {
window.open($(this).attr('href'));
});
}
changeSlide(dir) {
if (dir === 'next') {
this.page++;
} else if (dir === 'prev') {
this.page--;
} else if (typeof dir === 'number') {
this.page = dir;
}
this.el.find('[data-slide]').removeClass('active');
this.el.find(`[data-slide=${this.page}]`).addClass('active');
this.el.find('[data-nav="prev"]').prop('disabled', this.page === 1);
this.el.find('[data-nav="next"]').prop('disabled', this.page === this.el.find('[data-slide]').length);
}
fetchData(query) {
fetch('https://klient.wpj.cz/changelog/json/' + query)
.then(response => response.json())
.then(data => {
var $wrapper = $('[data-infopanel-wrapper]');
data.filter(item => (item.type === 'Infopanel - chyba' || item.type === 'Infopanel - zpráva')).forEach(item => {
var infopanel = '<div class="alert alert-' + (item.type === "Infopanel - chyba" ? "danger" : "redesign") + '">' +
'<span class="bi bi-info-circle-fill"></span>' +
'<strong class="alert-heading">' + item.title + '.</strong> ' + item.descr +
'</div>';
$wrapper.append(infopanel);
})
var results = data.filter(item => (item.type !== 'Infopanel - chyba' && item.type !== 'Infopanel - zpráva'));
const items = this.compile(results);
const wrapper = this.el.find('[data-template]');
wrapper.append(items);
if (results.length < 10) {
this.el.find('[data-loader]').hide();
}
if (this.el.find('[data-slide].changed').length) {
let count = this.el.find('[data-slide].changed').length;
if (count === 1) {
count += ' nová';
} else if (count < 5) {
count += ' nové';
} else {
count += ' nových';
}
this.el.find('[data-changes-count] [data-count]').text(count);
this.el.find('[data-changes-count]').addClass('active');
}
})
.catch(err => {
console.log(err);
});
}
}
if ($('#changelog').length) {
new Changelog();
}