129 lines
5.5 KiB
JavaScript
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);
|