2015-04-20 16:32:07 +02:00

129 lines
5.5 KiB
JavaScript

(function ($) {
Drupal.behaviors.initFaqModule = {
attach: function (context) {
// Hide/show answer for a question.
var faq_hide_qa_accordion = Drupal.settings.faq.faq_hide_qa_accordion;
$('div.faq-dd-hide-answer', context).addClass("collapsible collapsed");
if (!faq_hide_qa_accordion) {
$('div.faq-dd-hide-answer:not(.faq-processed)', context).addClass('faq-processed').hide();
}
$('div.faq-dt-hide-answer:not(.faq-processed)', context).addClass('faq-processed').click(function() {
if (faq_hide_qa_accordion) {
$('div.faq-dt-hide-answer').not($(this)).removeClass('faq-qa-visible');
}
$(this).toggleClass('faq-qa-visible');
$(this).parent().addClass('faq-viewed');
$('div.faq-dd-hide-answer').not($(this).next('div.faq-dd-hide-answer')).addClass("collapsed");
if (!faq_hide_qa_accordion) {
$(this).next('div.faq-dd-hide-answer').slideToggle('fast', function() {
$(this).parent().toggleClass('expanded');
});
}
$(this).next('div.faq-dd-hide-answer').toggleClass("collapsed");
// Change the fragment, too, for permalink/bookmark.
// To keep the current page from scrolling, refs
// http://stackoverflow.com/questions/1489624/modifying-document-location-hash-without-page-scrolling/1489802#1489802
var hash = $(this).find('a').attr('id');
var fx, node = $('#' + hash);
if (node.length) {
fx = $('<div></div>')
.css({position: 'absolute', visibility: 'hidden', top: $(window).scrollTop() + 'px'})
.attr('id', hash)
.appendTo(document.body);
node.attr('id', '');
}
document.location.hash = hash;
if (node.length) {
fx.remove();
node.attr('id', hash);
}
// Scroll the page if the collapsed FAQ is not visible.
// If we have the toolbar so the title may be hidden by the bar.
var mainScrollTop = Math.max($('html', context).scrollTop(), $('body', context).scrollTop());
// We compute mainScrollTop because the behaviour is different on FF, IE and CR
if (mainScrollTop > $(this).offset().top) {
$('html, body', context).animate({
scrollTop: $(this).offset().top
}, 1);
}
return false;
});
// Show any question identified by a fragment
if (/^#\w+$/.test(document.location.hash)) {
$('div.faq-dt-hide-answer ' + document.location.hash).parents('.faq-dt-hide-answer').triggerHandler('click');
}
// Hide/show q/a for a category.
var faq_category_hide_qa_accordion = Drupal.settings.faq.faq_category_hide_qa_accordion;
$('div.faq-qa-hide', context).addClass("collapsible collapsed");
if (!faq_category_hide_qa_accordion) {
$('div.faq-qa-hide', context).hide();
}
$('div.faq-qa-header .faq-header:not(.faq-processed)', context).addClass('faq-processed').click(function() {
var $this = $(this);
if (faq_category_hide_qa_accordion) {
$('.faq-category-qa-visible').not($('.faq-category-qa-visible').closest('.faq-category-group').has($this).children('div.faq-qa-hide')).removeClass('faq-category-qa-visible');
}
$(this).toggleClass('faq-category-qa-visible');
$('div.faq-qa-hide').not($this.parent().siblings('div.faq-qa-hide')).not($('div.faq-qa-hide').closest('.faq-category-group').has($this).children('div.faq-qa-hide')).addClass("collapsed");
if (!faq_category_hide_qa_accordion) {
$this.parent().siblings('div.faq-qa-hide').slideToggle('fast', function() {
$(this).parent().toggleClass('expanded');
});
}
$this.parent().siblings('div.faq-qa-hide').toggleClass("collapsed");
// Scroll the page if the collapsed FAQ is not visible.
// If we have the toolbar so the title may be hidden by the bar.
var mainScrollTop = Math.max($('html', context).scrollTop(), $('body', context).scrollTop());
// We compute mainScrollTop because the behaviour is different on FF, IE and CR
if (mainScrollTop > $this.offset().top) {
$('html, body', context).animate({
scrollTop: $this.offset().top
}, 1);
}
return false;
});
// Show expand all link.
if (!faq_hide_qa_accordion && !faq_category_hide_qa_accordion) {
$('#faq-expand-all', context).show();
$('#faq-expand-all a.faq-expand-all-link', context).show();
// Add collapse link click event.
$('#faq-expand-all a.faq-collapse-all-link:not(.faq-processed)', context).addClass('faq-processed').click(function () {
$(this).hide();
$('#faq-expand-all a.faq-expand-all-link').show();
$('div.faq-qa-hide').slideUp('slow', function() {
$(this).removeClass('expanded');
});
$('div.faq-dd-hide-answer').slideUp('slow', function() {
$(this).removeClass('expanded');
});
});
// Add expand link click event.
$('#faq-expand-all a.faq-expand-all-link:not(.faq-processed)', context).addClass('faq-processed').click(function () {
$(this).hide();
$('#faq-expand-all a.faq-collapse-all-link').show();
$('div.faq-qa-hide').slideDown('slow', function() {
$(this).addClass('expanded');
});
$('div.faq-dd-hide-answer').slideDown('slow', function() {
$(this).addClass('expanded');
});
});
}
}
};
})(jQuery);