91 lines
2.9 KiB
JavaScript
Executable file
91 lines
2.9 KiB
JavaScript
Executable file
|
|
/**
|
|
* Sets up the behaviour of the meta box
|
|
*
|
|
* @author Andreas Gohr <gohr@cosmocode.de>
|
|
* @author Jana Deutschlaender <deutschlaender@cosmocode.de>
|
|
*/
|
|
(function($) {
|
|
|
|
|
|
/**
|
|
* Register the click handler for the tabs
|
|
*
|
|
* Tabs can be added dynamically later on and this handler will still
|
|
* provide the open/close functionality
|
|
*/
|
|
var registerClickForTabsInMetaBox = function($metaBox) {
|
|
|
|
$metaBox.on('click', '.meta-tabs a', function (e) {
|
|
e.preventDefault();
|
|
var $tab = $(this),
|
|
isopen = $tab.attr('aria-expanded') === 'true';
|
|
|
|
// disable all existing tabs
|
|
disableExistingTabs($metaBox);
|
|
|
|
|
|
if (isopen) return; // tab was open, we closed it. we're done
|
|
|
|
// enable current tab
|
|
$tab
|
|
.attr('aria-expanded', 'true')
|
|
.closest('li')
|
|
.addClass('active');
|
|
$metaBox.find($tab.attr('href'))
|
|
.addClass('active')
|
|
.attr('aria-hidden', 'false');
|
|
|
|
}).find('.meta-content').on('click', 'a[href*="#"]', function (e) {
|
|
disableExistingTabs($metaBox);
|
|
/* uses custome event handler hide see spc.js */
|
|
}).find('#tagging__edit').on('hide', function(e){
|
|
disableExistingTabs($metaBox);
|
|
});
|
|
|
|
/**
|
|
* in admin templates show toc tab, if available
|
|
*/
|
|
if($('body').hasClass('do-admin')) {
|
|
var $tocLink = $metaBox.find('a[href="#spr__tab-toc"]');
|
|
if($tocLink.length === 1) {
|
|
$tocLink.trigger('click');
|
|
}
|
|
}
|
|
},
|
|
disableExistingTabs = function($metaBox) {
|
|
$metaBox.find('.meta-tabs li')
|
|
.removeClass('active')
|
|
.find('a')
|
|
.attr('aria-expanded', 'false');
|
|
$metaBox.find('.meta-content .tab-pane')
|
|
.removeClass('active')
|
|
.attr('aria-hidden', 'false');
|
|
};
|
|
|
|
|
|
var stickyBox = function ($metaBox, topOffset, leftOffset) {
|
|
if (window.pageYOffset >= topOffset) {
|
|
$metaBox.addClass("sticky").attr("style", "left: " + leftOffset + "px");
|
|
} else {
|
|
$metaBox.removeClass("sticky").removeAttr("style");
|
|
}
|
|
};
|
|
|
|
|
|
$(function(){
|
|
var $metaBox = $('#spr__meta-box');
|
|
if (!$metaBox.length) return;
|
|
|
|
registerClickForTabsInMetaBox($metaBox);
|
|
|
|
var topOffset = $metaBox.offset().top;
|
|
window.onscroll = function () {
|
|
// check while scrolling, or window resizing will break horizontal positioning
|
|
var leftOffset = $metaBox.offset().left;
|
|
stickyBox($metaBox, topOffset, leftOffset)
|
|
};
|
|
});
|
|
|
|
|
|
})(jQuery);
|