nodebb-theme-lavender
Version:
Lavender Theme for NodeBB
115 lines (95 loc) • 2.94 kB
JavaScript
$('document').ready(function () {
require([
'masonry-layout',
'imagesloaded',
], function (Masonry) {
var fixed = localStorage.getItem('fixed') || 1;
var masonry;
var masonryCalled = false;
function doMasonry() {
masonryCalled = true;
if ($('.masonry').length) {
masonry = new Masonry('.masonry', {
itemSelector: '.category-item',
columnWidth: '.category-item:not(.col-lg-12):not(.category-section)',
transitionDuration: 0,
isInitLayout: false,
isOriginLeft: $('html').attr('data-dir') === 'ltr',
});
$('.row.categories > div p img').imagesLoaded(function () {
masonry.layout();
});
var saved = JSON.parse(localStorage.getItem('masonry:layout'));
if (saved) {
for (const [cid, category] of Object.entries(saved)) {
$('.category-item[data-cid="' + cid + '"]').css({
left: category.left,
top: category.top,
position: 'absolute',
});
}
}
masonry.on('layoutComplete', function () {
var saved = {};
$('.category-item').each(function () {
var $this = $(this);
saved[$this.attr('data-cid')] = {
left: $this.css('left'),
top: $this.css('top'),
};
});
localStorage.setItem('masonry:layout', JSON.stringify(saved));
});
}
}
function resize(fixed) {
fixed = parseInt(fixed, 10);
var container = fixed ? $('.container-fluid') : $('.container');
container.toggleClass('container-fluid', fixed !== 1).toggleClass('container', fixed === 1);
localStorage.setItem('fixed', fixed);
}
resize(fixed);
$(window).on('action:ajaxify.end', function (ev, data) {
if(!/^admin\//.test(data.url) && !/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
doMasonry();
if ($('.categories').length) {
$('.category-header .badge i').tooltip();
}
}
});
if (!$('.admin').length) {
setupResizer();
}
$(window).on('action:posts.loaded', function () {
doMasonry();
});
if ($('.masonry').length && !masonryCalled) {
doMasonry();
}
function setupResizer() {
var div = $('<div class="overlay-container"><div class="card resizer pointer"><div class="card-body"><i class="fa fa-arrows-h fa-2x"></i></div></div></div>');
div.css({
position:'fixed',
bottom: '20px',
right: '20px',
}).hide().appendTo(document.body);
$(window).on('mousemove', function (ev) {
if (ev.clientX > $(window).width() - 150 && ev.clientY > $(window).height() - 150) {
div.fadeIn();
} else {
div.stop(true, true).fadeOut();
}
});
div.find('.resizer').on('click', function () {
fixed = parseInt(fixed, 10) === 1 ? 0 : 1;
resize(fixed);
doMasonry();
});
}
});
$(window).on('action:ajaxify.start', function () {
if ($('.navbar .navbar-collapse').hasClass('in')) {
$('.navbar-header button').trigger('click');
}
});
});