
/**
 * Description: Cette méthode est déclenchée lorsque la section 'eac-addon-pinterest-rss' est chargée dans la page
 *
 * @param {selector} $scope. Le contenu de la section
 * @since 1.2.0
 */
import { EacReadTheFeed } from '../modules/eac-modules.js';

;(function($, elementor) {

	'use strict';

	var EacAddonsPinterestRss = {

		init: function() {
			elementor.hooks.addAction('frontend/element_ready/eac-addon-pinterest-rss.default', EacAddonsPinterestRss.widgetPinterestRss);
		},

		removeEmojis: function removeEmojis(myString) {
			if (!myString) { return ''; }
			return myString.replace(/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?/g, '');
		},

		widgetPinterestRss: function widgetPinterestRss($scope) {
			var $targetInstance = $scope.find('.eac-pin-galerie'),
				$targetSelect = $scope.find('.select__options-items'),
				$targetButton = $scope.find('#pin__read-button'),
				$targetHeader = $scope.find('.pin-item-header'),
				$targetLoader = $scope.find('#pin__loader-wheel'),
				targetNonce = $scope.find('#pin_nonce').val(),		// @since 1.9.3
				$target = $scope.find('.pin-galerie'),
				settings = $target.data('settings') || {},
				instanceAjax = null;
				
			if(Object.keys(settings).length === 0 || !settings.data_nombre || !settings.data_longueur) {
				return;
			}
			
			// Première valeur de la liste par défaut
			$targetSelect.find('option:first').attr('selected', 'selected');

			if (!elementorFrontend.isEditMode()) {
				// Event change sur la liste des flux
				$targetSelect.on('change', function(e) {
					e.preventDefault();
					$('.pin-galerie__item', $target).remove();
					$targetHeader.html('');
				});
				
				// Event click sur le bouton 'lire le flux'
				$targetButton.on('click touch', function(e) {
					e.preventDefault();
					$('.pin-galerie__item', $target).remove();
					$targetHeader.html('');
					
					/** Initialisation de l'objet Ajax avec l'url du flux, du nonce et de l'ID du composant */
					instanceAjax = new EacReadTheFeed($('.select__options-items option:selected', $targetInstance).val().replace(/\s+/g, ''), targetNonce, settings.data_id);
					$targetLoader.show();
				});
			}

			// L'appel Ajax est asynchrone, ajaxComplete, event global, est déclenché
			$(document).on('ajaxComplete', function(event, xhr, ajaxSettings) {
				if(instanceAjax != null && ajaxSettings.ajaxOptions && ajaxSettings.ajaxOptions === instanceAjax.getOptions()) { // Le même random number généré lors de la création de l'objet Ajax
					event.stopImmediatePropagation();
					$targetLoader.hide();				
					
					// Les items à afficher
					var allItems = instanceAjax.getItems();
					
					// Une erreur Ajax ??
					if(allItems.headError) {
						$targetHeader.html('<span style="text-align:center; word-break:break-word;"><p>' + allItems.headError + '</p></span>');
						return false;
					}
					
					// Pas d'item
					if(! allItems.rss) {
						$targetHeader.html('<span style="text-align: center">Nothing to display</span>');
						return false;
					}
					
					var Items = allItems.rss;
					var Profile = allItems.profile;
					
					if(Profile.headLogo) { $targetHeader.html('<img src="' + Profile.headLogo + '">'); }
					$targetHeader.append('<span><a href="' + Profile.headLink + '"><h2>' + Profile.headTitle + '</h2></a></span>');
					$targetHeader.append('<span>' + Profile.headDescription + '</span>');
							
					// Parcours de tous les items à afficher
					$.each(Items, function(index, item) {
						if(index >= settings.data_nombre) { // Nombre d'items à afficher
							return false;
						}
						
						var $wrapperItem = $('<div/>', { class :'pin-galerie__item ' + settings.data_style});
						var $wrapperContent = $('<div/>', { class : 'pin-galerie__content' });
						
						// Ajout du titre
						item.title = EacAddonsPinterestRss.removeEmojis(item.title);
						item.title = item.title.split(' ', 12).join().replace(/,/g, " ") + '...'; // Afficher 12 mots dans le titre
						var titre = '<div class="pin-galerie__item-link-post"><a href="' + item.lien + '"><h2 class="pin-galerie__item-titre">' + item.title + '</h2></a></div>';
						$wrapperContent.append(titre);
						
						// Ajout de l'image
						if(item.img && settings.data_img) {
							var img = '';
							if(settings.data_lightbox) {
								// Suppression des " par des ' dans le titre
								img = '<div class="pin-galerie__item-image"><a href="' + item.imgLink + 
									'" data-elementor-open-lightbox="no" data-fancybox="pin-gallery" data-caption="' + item.title.replace(/"/g, "'") + '"><img src="' + item.img + '"></a></div>';
							} else {
								img = '<div class="pin-galerie__item-image"><img src="' + item.img + '"></div>';
							}
						$wrapperContent.append(img);
						}
						
						// Ajout du nombre de mots de la description
						item.description = EacAddonsPinterestRss.removeEmojis(item.description);
						item.description = item.description.split(' ', settings.data_longueur).join().replace(/,/g, " ") + '[...]';
						//item.description = item.description.substring(0, settings.data_longueur) + '[...]';
						
						// Ajout de la description
						var description = '<div class="pin-galerie__item-description"><p>' + item.description + '</p></div>';
						$wrapperContent.append(description);
						
						// Ajout de la date de publication/Auteur article
						if(settings.data_date) {
							var dateUpdate =  '<div class="pin-galerie__item-date"><i class="fas fa-calendar" aria-hidden="true"></i>' + new Date(item.update).toLocaleDateString() + '</div>';
							var Auteur =  '<div class="pin-galerie__item-auteur"><i class="fas fa-user" aria-hidden="true"></i>' + item.author + '</div>';
							$wrapperContent.append(dateUpdate);
							if(item.author) {
								$wrapperContent.append(Auteur);
							}
						}
						
						// Ajout dans les wrappers
						$wrapperItem.append($wrapperContent);
						$target.append($wrapperItem);
					});	
					
					if($.fn.fancybox) {
						//console.info("fancyBox already initialized");
						$.fancybox.close();
					}
					
					// Modifie les dimensions des images après leur chargement
					$('[data-fancybox="pin-gallery"]', $target).fancybox({
						afterLoad : function(instance, current) {
							var pixelRatio = window.devicePixelRatio || 1;
							//if(pixelRatio < 1.5) {
								current.width  = current.width	* (pixelRatio * 1.5);
								current.height = current.height * (pixelRatio * 1.5);
							//}
							//console.log('PixelRatio:' + pixelRatio + ":W:" + current.width + "/" + current.$image[0].naturalWidth + ":H:" + current.height + "/" + current.$image[0].naturalHeight);
						}
					});
					setTimeout(function(){ $('.pin-galerie__item', $target).css({transition: 'all 500ms linear', transform: 'scale(1)'}); }, 200);
				}
			});
		},
	};
	
	
	/**
	* Description: Cette méthode est déclenchée lorsque le frontend Elementor est initialisé
	*
	* @return (object) Initialise l'objet EacAddonsPinterestRss
	* @since 0.0.9
	*/
	$(window).on('elementor/frontend/init', EacAddonsPinterestRss.init);
	
}(jQuery, window.elementorFrontend));