/** * Sets up the behaviour of the meta box * * @author Andreas Gohr * @author Jana Deutschlaender */ (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);