(function ($) {
var added_click = false;
function getCookie(name) {
var dc = document.cookie;
var prefix = name + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
}
else {
begin += 2;
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
}
// because unescape has been deprecated, replaced with decodeURI
//return unescape(dc.substring(begin + prefix.length, end));
return decodeURI(dc.substring(begin + prefix.length, end));
}
var faq_event_sent = false;
Drupal.behaviors.dab_faq = {
attach: function (context, settings) {
Drupal.behaviors.dab_faq.init_cookies();
if (!added_click) {
added_click = true;
$('.faq-title-wrapper').click(function () {
$(this).closest('.paragraph').find('.faq-content').slideToggle();
$(this).toggleClass('closed');
});
}
is_faq_d_service_page = $('.node--type-d-service-faq.node--view-mode-full').length > 0;
if(!faq_event_sent && is_faq_d_service_page){
if(drupalSettings.dab_faq.is_generic_faq) {
faq_event_sent = true;
} else {
var mdata = "PROD | " + drupalSettings.dab_faq.prodmdata.title + " | " + drupalSettings.dab_faq.prodmdata.id;
}
}
/**
* Bind search on enter keyup
*/
$("input[name='full-text-search-structure']").keyup(function (e) {
if (e.which == 13 && $(this).val().length > 1) {
Drupal.behaviors.dab_faq.generate_results($(this).val());
}
});
/**
* Bind search on icon click
*/
$(".faq-structure-search-form button").click(function () {
if ($("input[name='full-text-search-structure']").val().length > 1) {
Drupal.behaviors.dab_faq.generate_results($("input[name='full-text-search-structure']").val());
}
});
$(".open-all-faqs").click(function (e) {
e.preventDefault();
$('.open-all-faqs').hide();
$('.close-all-faqs').show();
Drupal.behaviors.dab_faq.open_all_faq();
});
$(".close-all-faqs").click(function (e) {
e.preventDefault();
$('.open-all-faqs').show();
$('.close-all-faqs').hide();
Drupal.behaviors.dab_faq.close_all_faq();
});
$(".reset-filters").click(function () {
Drupal.behaviors.dab_faq.reset_filters();
});
$(".feedback-trigger").click(function () {
Drupal.behaviors.dab_faq.provide_feedback($(this), $(this).attr('data-type'));
});
},
init_cookies: function () {
$('.paragraph--type--faq').each(function () {
if (!(getCookie('Drupal.visitor.dabw-flagged-' + $(this).attr('data-paragraph-id')) === null)) {
$(this).find('.faq-feedback').remove();
if (!($(this).find('.faq-feedback-given').length > 0)) {
$(this).find('.field--name-field-faq-body').append("
" + drupalSettings.dab_faq.feedback_positive_message + '
');
}
}
});
},
/**
* Generates results searching full text in title and description
* @param string
*/
generate_results: function (string) {
var matches = [];
string = string.toLowerCase();
$('.field--name-field-faq-title').each(function () {
if ($(this).text().toLowerCase().indexOf(string) > -1) {
var parid = $(this).closest('.paragraph--type--faq').attr('data-paragraph-id');
if (typeof matches[parid] === "undefined") {
matches.push(parid);
}
}
});
$('.field--name-field-faq-body > p').each(function () {
if ($(this).text().toLowerCase().indexOf(string) > -1) {
var parid = $(this).closest('.paragraph--type--faq').attr('data-paragraph-id');
if (typeof matches[parid] === "undefined") {
matches.push(parid);
}
}
});
Drupal.behaviors.dab_faq.display_results(matches);
},
/**
* Display Results closing all FAQ and opening only the matched faq
* @param matches_array
*/
display_results: function (matches_array) {
$('.no-results-faq-search').remove();
if (matches_array.length > 0) {
$('.paragraph--type--faq .faq-content').hide();
$('.paragraph--type--faq .faq-title-wrapper').addClass('closed');
$('.paragraph--type--faq-block').hide();
$('.field--name-field-faq-structure .paragraph--type--faq').hide();
for (var i = 0; i < matches_array.length; i++) {
var curmatch = matches_array[i];
$("div[data-paragraph-id='" + curmatch + "']").find('.faq-title-wrapper').removeClass('closed');
$("div[data-paragraph-id='" + curmatch + "']").find('.faq-content').show();
$("div[data-paragraph-id='" + curmatch + "']").show();
$("div[data-paragraph-id='" + curmatch + "']").closest('.paragraph--type--faq-block').show();
}
} else {
//no results generated
$('.paragraph--type--faq .faq-content').hide();
$('.paragraph--type--faq .faq-title-wrapper').addClass('closed');
$('.paragraph--type--faq-block').hide();
//show message, no faqs
$('.faq-container').after('' + drupalSettings.dab_faq.no_results + '
');
}
},
open_all_faq: function () {
$('.paragraph--type--faq').show();
$('.paragraph--type--faq-block').show();
$('.paragraph--type--faq .faq-content').show();
$('.paragraph--type--faq .faq-title-wrapper').removeClass('closed');
},
close_all_faq: function () {
$('.paragraph--type--faq').show();
$('.paragraph--type--faq-block').show();
$('.paragraph--type--faq .faq-content').hide();
$('.paragraph--type--faq .faq-title-wrapper').addClass('closed');
},
reset_filters: function () {
$('.paragraph--type--faq').show();
$('.paragraph--type--faq-block').show();
$('.paragraph--type--faq .faq-content').hide();
$('.paragraph--type--faq .faq-title-wrapper').addClass('closed');
$('.no-results-faq-search').remove();
$('.faq-structure-search-form input').val('');
},
/**
* provides feedback flagging the needed links
* @param element
* @param type
*/
provide_feedback: function (element, type) {
var update_stato = function (response) {
$(element).closest('.paragraph--type--faq').find('.faq-feedback').removeClass('progress-enabled');
var negativemessage = drupalSettings.dab_faq.feedback_negative_message.replace('[customer_service]', '' + drupalSettings.dab_faq.customer_service_string + '');
if (response.status == 1) {
//ok
if (type === "negative") {
$(element).closest('.paragraph--type--faq').find('.faq-content').append("" + negativemessage + "
");
} else {
$(element).closest('.paragraph--type--faq').find('.faq-content').append("" + drupalSettings.dab_faq.feedback_positive_message + "
");
}
$(element).closest('.paragraph--type--faq').find('.faq-feedback').remove();
}
};
var paragraphid = $(element).closest('.paragraph--type--faq').attr('data-paragraph-id');
var nid = $(element).closest('article').attr('data-history-node-id');
var urlreq = 'dab-feedback/' + type;
$(element).closest('.paragraph--type--faq').find('.faq-feedback').addClass('progress-enabled');
$.ajax({
type: 'POST',
url: Drupal.url('dab-feedback/' + type), // Which url should be handle the ajax request.
success: update_stato, // The js function that will be called upon success request
dataType: 'json', //define the type of data that is going to get back from the server
data: 'paragraph_id=' + paragraphid + '&nid=' + nid
});
}
}
})(jQuery);