//@ sourceURL=/plugins/MauticFocusBundle/Assets/js/focus.js
Mautic.disabledFocusActions = function(opener) {
if (typeof opener == 'undefined') {
opener = window;
}
var email = opener.mQuery('#campaignevent_properties_focus').val();
var disabled = email === '' || email === null;
opener.mQuery('#campaignevent_properties_editFocusButton').prop('disabled', disabled);
opener.mQuery('#campaignevent_properties_previewFocusButton').prop('disabled', disabled);
};
Mautic.focusOnLoad = function () {
if (mQuery('.builder').length) {
// Activate droppers
mQuery('.btn-dropper').each(function () {
mQuery(this).click(function () {
if (mQuery(this).hasClass('active')) {
// Deactivate
mQuery(this).removeClass('active btn-primary').addClass('btn-default');
mQuery('#websiteCanvas').css('cursor', 'inherit');
} else {
// Remove active state from all the droppers
mQuery('.btn-dropper').removeClass('active btn-primary').addClass('btn-default');
// Activate this dropper
mQuery(this).removeClass('btn-default').addClass('active btn-primary');
// Activate the cross hairs for image
mQuery('#websiteCanvas').css('cursor', 'crosshair');
}
});
});
// Update type
var activateType = function (el, thisType) {
mQuery('[data-focus-type]').removeClass('focus-active');
mQuery(el).addClass('focus-active');
mQuery('#focusFormContent').removeClass(function (index, css) {
return (css.match(/(^|\s)focus-type\S+/g) || []).join(' ');
}).addClass('focus-type-' + thisType);
mQuery('.focus-type-header').removeClass('text-danger');
mQuery('#focus_type').val(thisType);
var props = '.focus-' + thisType + '-properties';
mQuery('#focusTypeProperties').appendTo(
mQuery(props)
).removeClass('hide');
mQuery('#focusType .focus-properties').each(function () {
if (!mQuery(this).is(':hidden') && mQuery(this).data('focus-type') != thisType) {
mQuery(this).slideUp('fast', function () {
mQuery(this).hide();
});
}
});
if (mQuery(props).length) {
if (mQuery(props).is(':hidden')) {
mQuery(props).slideDown('fast');
}
}
}
mQuery('[data-focus-type]').on({
click: function () {
var thisType = mQuery(this).data('focus-type');
if (mQuery('#focus_type').val() == thisType) {
return;
}
activateType(this, thisType);
Mautic.focusUpdatePreview();
},
mouseenter: function () {
mQuery(this).addClass('focus-hover');
},
mouseleave: function () {
mQuery(this).removeClass('focus-hover');
}
});
var activateStyle = function (el, thisStyle) {
mQuery('[data-focus-style]').removeClass('focus-active');
mQuery(el).addClass('focus-active');
if (!mQuery('#focusType').hasClass('hidden-focus-style-all')) {
mQuery('#focusType').addClass('hidden-focus-style-all');
}
mQuery('#focusFormContent').removeClass(function (index, css) {
return (css.match(/(^|\s)focus-style\S+/g) || []).join(' ');
}).addClass('focus-style-' + thisStyle);
mQuery('.focus-style-header').removeClass('text-danger');
mQuery('#focus_style').val(thisStyle);
var props = '.focus-' + thisStyle + '-properties';
mQuery('#focusStyleProperties').appendTo(
mQuery(props)
).removeClass('hide');
mQuery('#focusStyle .focus-properties').each(function () {
if (!mQuery(this).is(':hidden')) {
mQuery(this).slideUp('fast', function () {
mQuery(this).hide();
});
}
});
if (mQuery(props).length) {
if (mQuery(props).is(':hidden')) {
mQuery(props).slideDown('fast');
}
}
};
// Update style
mQuery('[data-focus-style]').on({
click: function () {
var thisStyle = mQuery(this).data('focus-style');
if (mQuery('#focus_style').val() == thisStyle) {
return;
}
activateStyle(this, thisStyle);
Mautic.focusUpdatePreview();
},
mouseenter: function () {
mQuery(this).addClass('focus-hover');
},
mouseleave: function () {
mQuery(this).removeClass('focus-hover');
}
});
// Select the current type and style
var currentType = mQuery('#focus_type').val();
if (currentType) {
activateType(mQuery('[data-focus-type="' + currentType + '"]'), currentType);
}
var currentStyle = mQuery('#focus_style').val();
if (currentStyle) {
activateStyle(mQuery('[data-focus-style="' + currentStyle + '"]'), currentStyle);
}
mQuery('#focus_properties_content_font').on('chosen:showing_dropdown', function () {
// Little trickery to add style to the chosen dropdown font list
var arrayIndex = 1;
mQuery('#focus_properties_content_font option').each(function () {
mQuery('#focus_properties_content_font_chosen li[data-option-array-index="' + arrayIndex + '"]').css('fontFamily', mQuery(this).attr('value'));
arrayIndex++;
});
});
mQuery('.btn-fetch').on('click', function () {
var url = mQuery('#websiteUrlPlaceholderInput').val();
if (url) {
mQuery('#focus_website').val(url);
Mautic.launchFocusBuilder();
} else {
return;
}
});
Mautic.focusInitViewportSwitcher();
mQuery('#focus_editor').on('froalaEditor.contentChanged', function (e, editor) {
var content = editor.html.get();
if (content.indexOf('{focus_form}') !== -1) {
Mautic.focusUpdatePreview();
} else {
mQuery('.mf-content').html(content);
}
});
} else {
Mautic.initDateRangePicker();
}
if (mQuery('[data-conversion-rate-table]').length) {
Mautic.focusLoadConversionRateTable();
}
};
Mautic.launchFocusBuilder = function (forceFetch) {
mQuery('.website-placeholder').addClass('hide');
mQuery('body').css('overflow-y', 'hidden');
// Prevent preview updates till the website snapshot is loaded
Mautic.ignoreMauticFocusPreviewUpdate = true;
if (!mQuery('#builder-overlay').length) {
var builderCss = {
margin: "0",
padding: "0",
border: "none",
width: "100%",
height: "100%"
};
var spinnerLeft = (mQuery(document).width() - 300) / 2;
var overlay = mQuery('
').css(builderCss).appendTo('.builder-content');
}
// Disable the close button until everything is loaded
mQuery('.btn-close-builder').prop('disabled', true);
// Activate the builder
mQuery('.builder').addClass('builder-active').removeClass('hide');
var url = mQuery('#focus_website').val();
if (!url) {
if (!mQuery('#focus_unlockId').val()) {
Mautic.setFocusDefaultColors();
}
mQuery('.website-placeholder').removeClass('hide');
mQuery('#builder-overlay').addClass('hide');
mQuery('.btn-close-builder').prop('disabled', false);
mQuery('#websiteUrlPlaceholderInput').prop('disabled', false);
mQuery('#websiteCanvas').html('');
mQuery('.website-placeholder').show();
mQuery('#websiteUrlPlaceholderInput').val('');
Mautic.focusUpdatePreview();
} else {
mQuery('#websiteUrlPlaceholderInput').val(url).prop('disabled', false);
let iframe = mQuery('#websiteCanvas iframe');
if (!forceFetch && iframe.length && url === iframe.attr('src')) {
return;
}
mQuery('#builder-overlay').removeClass('hide');
Mautic.loadedPreviewImage = url;
// Fetch image
var data = {
id: mQuery('#focus_unlockId').val(),
website: url
}
mQuery('.preview-body').html('');
Mautic.ajaxActionRequest('plugin:focus:checkIframeAvailability', data, function (response) {
if (response.errorMessage.length) {
mQuery('.website-placeholder')
.addClass('has-error')
.find('.help-block')
.html(response.errorMessage)
.removeClass('hide');
mQuery('#builder-overlay').hide();
mQuery('.website-placeholder').removeClass('hide').show();
mQuery('#websiteCanvas').html('');
mQuery('.builder-panel-top p button').prop('disabled', false);
return;
}
mQuery('#builder-overlay').addClass('hide');
mQuery('.btn-close-builder').prop('disabled', false);
mQuery('.website-placeholder').removeClass('hide');
mQuery('#websiteUrlPlaceholderInput').prop('disabled', false);
// Disable droppers
mQuery('.btn-dropper').addClass('disabled');
Mautic.focusCreateIframe(url);
Mautic.ignoreMauticFocusPreviewUpdate = false;
}, false, false, "GET");
}
};
// Called when you click on the show builder button
Mautic.focusUpdatePreview = function () {
// Generate a preview
var data = mQuery('form[name=focus]').formToArray();
Mautic.ajaxActionRequest('plugin:focus:generatePreview', data, function (response) {
var container = mQuery('');
var innerContainer = mQuery('').html(response.html);
if (mQuery('.btn-viewport').data('viewport') == 'mobile') {
innerContainer.addClass('mf-responsive');
} else {
innerContainer.removeClass('mf-responsive');
}
container.append(innerContainer);
mQuery('.preview-body').html(container);
if (!mQuery('.mf-bar').length && mQuery('.builder-content').length) {
mQuery('.builder-content').on('click', function () {
Mautic.closeFocusModal(mQuery('#focus_style').val());
});
mQuery('.mautic-focus').on('click', function (e) {
e.stopPropagation();
});
}
});
};
Mautic.setFocusDefaultColors = function () {
mQuery('#focus_properties_colors_primary').minicolors('value', '4e5d9d');
mQuery('#focus_properties_colors_text').minicolors('value', (mQuery('#focus_style').val() == 'bar') ? 'ffffff' : '000000');
mQuery('#focus_properties_colors_button').minicolors('value', 'fdb933');
mQuery('#focus_properties_colors_button_text').minicolors('value', 'ffffff');
};
Mautic.toggleBarCollapse = function () {
var svg = '.mf-bar-collapser-icon svg';
var currentSize = mQuery(svg).data('transform-size');
var currentDirection = mQuery(svg).data('transform-direction');
var currentScale = mQuery(svg).data('transform-scale');
var newDirection = (parseInt(currentDirection) * -1);
setTimeout(function () {
mQuery(svg).find('g').first().attr('transform', 'scale(' + currentScale + ') rotate(' + newDirection + ' ' + currentSize + ' ' + currentSize + ')');
mQuery(svg).data('transform-direction', newDirection);
}, 500);
if (mQuery('.mf-bar-collapser').hasClass('mf-bar-collapsed')) {
// Open
if (mQuery('.mf-bar').hasClass('mf-bar-top')) {
mQuery('.mf-bar').css('margin-top', 0);
} else {
mQuery('.mf-bar').css('margin-bottom', 0);
}
mQuery('.mf-bar-collapser').removeClass('mf-bar-collapsed');
} else {
// Collapse
if (mQuery('.mf-bar').hasClass('mf-bar-top')) {
mQuery('.mf-bar').css('margin-top', -60);
} else {
mQuery('.mf-bar').css('margin-bottom', -60);
}
mQuery('.mf-bar-collapser').addClass('mf-bar-collapsed');
}
}
Mautic.closeFocusModal = function (style) {
mQuery('.mf-' + style).remove();
if (mQuery('.mf-' + style + '-overlay').length) {
mQuery('.mf-' + style + '-overlay').remove();
}
}
Mautic.closeFocusBuilder = function (el) {
// Kill preview updates
if (typeof Mautic.ajaxActionXhr != 'undefined' && typeof Mautic.ajaxActionXhr['plugin:focus:generatePreview'] != 'undefined') {
Mautic.ajaxActionXhr['plugin:focus:generatePreview'].abort();
delete Mautic.ajaxActionXhr['plugin:focus:generatePreview'];
}
// mQuery('#websiteUrlPlaceholderInput').prop('disabled', true);
Mautic.stopIconSpinPostEvent();
// Hide builder
mQuery('.builder').removeClass('builder-active').addClass('hide');
mQuery('body').css('overflow-y', '');
};
Mautic.focusInitViewportSwitcher = function () {
mQuery('.btn-viewport').on('click', function () {
if (mQuery(this).data('viewport') == 'mobile') {
mQuery('.btn-viewport i').removeClass('fa-desktop ri-2x').addClass('fa-mobile-phone ri-3x');
mQuery(this).data('viewport', 'desktop');
Mautic.launchFocusBuilder(true);
} else {
mQuery('.btn-viewport i').removeClass('fa-mobile-phone ri-3x').addClass('fa-desktop ri-2x');
mQuery(this).data('viewport', 'mobile');
Mautic.launchFocusBuilder(true);
}
});
}
/**
* Create IFRAME with proper sizing
*/
Mautic.focusCreateIframe = function (url) {
let builderCss = {
"pointer-events": "none", // Disable clicks in iframe
};
if (mQuery('.btn-viewport').data('viewport') === 'mobile') {
mQuery('#websiteScreenshot').addClass('mobile');
} else {
builderCss.width = "100%";
builderCss.height = mQuery('#websiteScreenshot').height(); // 100% does not work. Needs to be specified
mQuery('#websiteScreenshot').removeClass('mobile');
}
// Not catching empty iframe
try {
mQuery('#websiteCanvas').html('');
mQuery('#websiteCanvas iframe').css(builderCss);
} catch(err) {
alert(err.toString());
} finally {
mQuery('.website-placeholder').hide();
Mautic.focusUpdatePreview();
}
}
Mautic.focusLoadConversionRateTable = function() {
var $conversionRateTable = mQuery('[data-conversion-rate-table]');
var $conversionRateCells = mQuery('[data-conversion-rate-cell]', $conversionRateTable);
var $conversionRateTotalCell = mQuery('[data-conversion-rate-total-cell]', $conversionRateTable);
var $focusTotalViewsCell = mQuery('[data-focus-total-views-cell]');
var $focusTotalUniqueViewsCell = mQuery('[data-focus-total-unique-views-cell]');
var focusId = $conversionRateTable.data('entity-id');
var views = null;
var uniqueViews = null;
var clickThrough = null;
var updateTotalClickThroughRate = function() {
if (uniqueViews === null || clickThrough === null) return;
var totalConversionRate = uniqueViews > 0 ? Math.round(clickThrough / uniqueViews * 10000) / 100 : 0;
$conversionRateTotalCell.children('.spinner').remove();
$conversionRateTotalCell.prepend(totalConversionRate + '%')
};
Mautic.ajaxActionRequest('plugin:focus:getViewsCount', {focusId: focusId}, function(response){
views = response.views;
uniqueViews = response.uniqueViews;
$conversionRateCells.each(function(i, el) {
var $cell = mQuery(el);
var uniqueClicks = $cell.data('unique-hits');
var conversionRate = views > 0 ? Math.round(uniqueClicks / uniqueViews * 10000) / 100 : 0;
$cell.html(conversionRate + '%');
})
$focusTotalViewsCell.html(views);
$focusTotalUniqueViewsCell.html(uniqueViews);
updateTotalClickThroughRate();
}, false, true, "GET");
Mautic.ajaxActionRequest('plugin:focus:getClickThroughCount', {focusId: focusId}, function(response){
clickThrough = response.clickThrough;
updateTotalClickThroughRate();
}, false, true, "GET");
}