/**
* @file
* Javascript to open identification form
*/
(function ($) {
Drupal.behaviors.sequra = {
attach: function (context, settings) {
if (settings.sequra.fetched == null) {
settings.sequra.fetched = true;
$(document).ready(function() {
// Variable para almacenar el identificador del temporizador
var timer;
// Función para ejecutar la lógica de mostrar el formulario de Sequra
function showSequraForm() {
// Si el temporizador está configurado, cancelarlo
if (timer) {
clearTimeout(timer);
}
SequraIdentificationPopupLoader.removeForm(settings.sequra.product);
SequraIdentificationPopupLoader.url = settings.sequra.url;
SequraIdentificationPopupLoader.params.product = settings.sequra.product;
SequraIdentificationPopupLoader.showForm();
// Prevenir que el formulario se envíe con la acción predeterminada.
return false;
}
// Ejecutar la función automáticamente después de 1 segundo
timer = setTimeout(showSequraForm, 100);
// Adjuntar el controlador de eventos al botón #commerce_sequrapartpayment-open-popup
$('#commerce_sequrapartpayment-open-popup').on('click', showSequraForm);
});
}
}
};
})(jQuery);
SequraIdentificationPopupLoader = {
url: '',
params: {},
loadForm: function () {
this.params['ajax'] = true;
jQuery.ajax({
context: this,
url: this.url,
data: this.params,
dataType: 'json',
beforeSend: function (xhr) {
jQuery('body').addClass('sequra_loading');
},
success: this.loadFormsuccess,
error: function () {
alert(Drupal.t("This payment method is not available for your order as it is.")+" "+Drupal.t("Please go back and try selecting another shipping or billing address or just select another payment method."));
},
complete: function () {
jQuery('body').removeClass('sequra_loading');
}
});
},
loadFormsuccess: function (response) {
if (response.status == 'success' && response.form) {
jQuery('#sq-identification-' + this.params['product']).remove();
// Append form HTML without executing inline scripts (jQuery skips them
// unreliably after dynamic injection, so we handle scripts manually).
var $parsed = jQuery(jQuery.parseHTML(response.form, document, false));
jQuery('body').append($parsed);
// Set SequraFormElement explicitly — the inline script in the response
// HTML that normally sets this does not execute reliably via jQuery.
var $iframe = $parsed.filter('iframe[id^="sq-identification"]');
if (!$iframe.length) {
$iframe = $parsed.find('iframe[id^="sq-identification"]');
}
if ($iframe.length) {
window.SequraFormElement = $iframe.attr('id');
}
// Force-load sequra_form_auth.js via createElement so it executes fresh
// and picks up window.SequraFormElement.
var allNodes = jQuery.parseHTML(response.form, document, true);
var scriptSrc = null;
jQuery.each(allNodes, function (i, node) {
if (node.tagName === 'SCRIPT' && node.src && node.src.indexOf('sequra_form_auth') > -1) {
scriptSrc = node.src;
}
});
if (scriptSrc) {
var s = document.createElement('script');
s.src = scriptSrc + (scriptSrc.indexOf('?') > -1 ? '&' : '?') + '_t=' + Date.now();
document.body.appendChild(s);
}
this.showFor(this.params['product']);
} else {
var errorMessage = '';
if (response.error) {
errorMessage += Drupal.t("Error #@code.", {'@code': response.error}) + "\n";
}
errorMessage += response.message;
alert(errorMessage);
}
},
showForm: function () {
this.removeForm(this.params['product']);
this.loadForm();
},
showFor: function (product) {
var elementId = "sq-identification-" + product;
var context = this;
// Wait for the element to exist in DOM before calling setElement,
// otherwise sequra_form_auth.js line 67 crashes reading .src from null.
if (!document.getElementById(elementId)) {
var observer = new MutationObserver(function (mutations, obs) {
if (document.getElementById(elementId)) {
obs.disconnect();
context.showFor(product);
}
});
observer.observe(document.body, { childList: true, subtree: true });
setTimeout(function () { observer.disconnect(); }, 10000);
return;
}
if (window.SequraFormInstance) {
window.SequraFormInstance.setElement(elementId);
window.SequraFormInstance.setCloseCallback(function(){
//Hide Popup
jQuery('[id*=sq-identification]').hide();
jQuery('.checkout-processing').hide();
// Hide progress animated gif.
form$ = jQuery("#edit-continue").closest("form");
form$.find('.checkout-continue').removeAttr("disabled").removeClass("auth-processing");
submitButtons$ = form$.find('.checkout-continue');
submitButtons$.removeAttr('disabled').removeClass('auth-processing');
});
window.SequraFormInstance.show();
} else {
window.setTimeout(function () {
context.showFor(product)
}, 100);
}
},
removeForm: function (product) {
jQuery('#sq-identification-' + product).remove();
}
};
Black Project Hydro Flow-X M | Remos Black Project en HoeNalu
Con un diseño completamente renovado, el Hydro Flow-X es un remo diferente a cualquier otro.
A primera vista, resalta la característica de la zona de empalme entre la pértiga y la pala: un nuevo e innovador diseño llamado AFT: Tecnología de Flujo Avanzado. Está diseñado para aumentar significativamente la eficiencia y la suavidad de la pala ya que reduce la turbulencia y los movimientos no deseados.
Otra actualización estructural importante es el Deep Power Scoop (DPS) en la cara de la pala. Con un diseño de pala profunda con bordes diedros, brinda potencia de manera controlada y funciona en armonía con la tecnología de flujo avanzado para crear un diseño de pala tridimensional, el primero en su tipo.