mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-21 00:52:33 -04:00
152 lines
4.8 KiB
JavaScript
152 lines
4.8 KiB
JavaScript
/**
|
|
* redbasic theme specific JavaScript
|
|
*/
|
|
|
|
$(document).ready(function() {
|
|
|
|
// CSS3 calc() fallback (for unsupported browsers)
|
|
$('body').append('<div id="css3-calc" style="width: 10px; width: calc(10px + 10px); display: none;"></div>');
|
|
if( $('#css3-calc').width() == 10) {
|
|
$(window).resize(function() {
|
|
if($(window).width() < 992) {
|
|
$('main').css('width', $(window).width() + $('aside').outerWidth() );
|
|
} else {
|
|
$('main').css('width', '100%' );
|
|
}
|
|
});
|
|
}
|
|
$('#css3-calc').remove(); // Remove the test element
|
|
|
|
stickyScroll('.aside_spacer_left', '.aside_spacer_top_left', '.content', parseFloat(window.getComputedStyle(document.querySelector('#region_1')).getPropertyValue('padding-top')), 0);
|
|
stickyScroll('.aside_spacer_right', '.aside_spacer_top_right', '.content', parseFloat(window.getComputedStyle(document.querySelector('#region_3')).getPropertyValue('padding-top')), 20);
|
|
|
|
$('#expand-aside').on('click', toggleAside);
|
|
|
|
$('section').on('click', function() {
|
|
if($('main').hasClass('region_1-on')){
|
|
toggleAside();
|
|
}
|
|
});
|
|
|
|
|
|
$('.usermenu').click(function() {
|
|
if($('#navbar-collapse-1, #navbar-collapse-2').hasClass('show')){
|
|
$('#navbar-collapse-1, #navbar-collapse-2').removeClass('show');
|
|
}
|
|
});
|
|
|
|
$('#menu-btn').click(function() {
|
|
if($('#navbar-collapse-1').hasClass('show')){
|
|
$('#navbar-collapse-1').removeClass('show');
|
|
}
|
|
});
|
|
|
|
$('.notifications-btn').click(function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
if($('#navbar-collapse-2').hasClass('show')){
|
|
$('#navbar-collapse-2').removeClass('show');
|
|
}
|
|
});
|
|
|
|
$("input[data-role=cat-tagsinput]").tagsinput({
|
|
tagClass: 'badge badge-pill badge-warning text-dark'
|
|
});
|
|
|
|
$('a.disabled').click(function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
});
|
|
|
|
var doctitle = document.title;
|
|
function checkNotify() {
|
|
var notifyUpdateElem = document.getElementById('notify-update');
|
|
if(notifyUpdateElem !== null) {
|
|
if(notifyUpdateElem.innerHTML !== "")
|
|
document.title = "(" + notifyUpdateElem.innerHTML + ") " + doctitle;
|
|
else
|
|
document.title = doctitle;
|
|
}
|
|
}
|
|
setInterval(function () {checkNotify();}, 10 * 1000);
|
|
});
|
|
|
|
function setStyle(element, cssProperty) {
|
|
for (var property in cssProperty){
|
|
element.style[property] = cssProperty[property];
|
|
}
|
|
}
|
|
|
|
function stickyScroll(sticky, stickyTop, container, topOffset, bottomOffset) {
|
|
var lastScrollTop = 0;
|
|
var sticky = document.querySelector(sticky);
|
|
var stickyHeight = sticky.getBoundingClientRect().height;
|
|
var stickyTop = document.querySelector(stickyTop);
|
|
var content = document.querySelector(container);
|
|
var diff = window.innerHeight - stickyHeight;
|
|
var h = 0;
|
|
var lasth = 0;
|
|
var st = window.pageYOffset || document.documentElement.scrollTop;
|
|
|
|
var resizeObserver = new ResizeObserver(function(entries) {
|
|
stickyHeight = sticky.getBoundingClientRect().height;
|
|
st = window.pageYOffset || document.documentElement.scrollTop;
|
|
diff = window.innerHeight - stickyHeight;
|
|
});
|
|
|
|
resizeObserver.observe(sticky);
|
|
resizeObserver.observe(content);
|
|
|
|
window.addEventListener('scroll', function() {
|
|
if(window.innerHeight > stickyHeight + topOffset) {
|
|
setStyle(stickyTop, { height: 0 + 'px' });
|
|
setStyle(sticky, { position: 'sticky', top: topOffset + 'px'});
|
|
}
|
|
else {
|
|
st = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426"
|
|
if (st > lastScrollTop){
|
|
// downscroll code
|
|
setStyle(stickyTop, { height: lasth + 'px' });
|
|
setStyle(sticky, { position: 'sticky', top: Math.round(diff) - bottomOffset + 'px', bottom: '' });
|
|
} else {
|
|
// upscroll code
|
|
h = sticky.getBoundingClientRect().top - content.getBoundingClientRect().top - topOffset;
|
|
if(Math.round(stickyTop.getBoundingClientRect().height) === lasth) {
|
|
setStyle(stickyTop, { height: Math.round(h) + 'px' });
|
|
}
|
|
lasth = Math.round(h);
|
|
setStyle(sticky, { position: 'sticky', top: '', bottom: Math.round(diff - topOffset) + 'px' });
|
|
}
|
|
lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling
|
|
}
|
|
}, false);
|
|
|
|
}
|
|
|
|
function makeFullScreen(full) {
|
|
if(typeof full=='undefined' || full == true) {
|
|
$('main').addClass('fullscreen');
|
|
$('header, nav, aside, #fullscreen-btn').attr('style','display:none !important');
|
|
$('#inline-btn').show();
|
|
}
|
|
else {
|
|
$('main').removeClass('fullscreen');
|
|
$('header, nav, aside, #fullscreen-btn').show();
|
|
$('#inline-btn').hide();
|
|
}
|
|
}
|
|
|
|
function toggleAside() {
|
|
$('#expand-aside-icon').toggleClass('fa-arrow-circle-right').toggleClass('fa-arrow-circle-left');
|
|
if($('main').hasClass('region_1-on')){
|
|
$('html, body').css('overflow-x', '');
|
|
$('main').removeClass('region_1-on')
|
|
$('#overlay').remove();
|
|
}
|
|
else {
|
|
$('html, body').css('overflow-x', 'hidden');
|
|
$('main').addClass('region_1-on')
|
|
$('<div id="overlay"></div>').appendTo('section');
|
|
}
|
|
}
|