chrisbryan17's picture
Upload folder using huggingface_hub
d2897cd verified
raw
history blame contribute delete
65 kB
const ckEditors = new Map();
/**
* Takes a given route, retrieves the HTML, and then updates the content
*
* @param route
* @param link
* @param method
* @param target
* @param showPageLoading
* @param callback
* @param data
*/
Mautic.loadContent = function (route, link, method, target, showPageLoading, callback, data) {
if (typeof Mautic.loadContentXhr == 'undefined') {
Mautic.loadContentXhr = {};
} else if (typeof Mautic.loadContentXhr[target] != 'undefined') {
Mautic.loadContentXhr[target].abort();
}
showPageLoading = (typeof showPageLoading == 'undefined' || showPageLoading) ? true : false;
Mautic.loadContentXhr[target] = mQuery.ajax({
showLoadingBar: showPageLoading,
url: route,
type: method,
dataType: "json",
data: data,
success: function (response) {
if (response) {
response.stopPageLoading = showPageLoading;
if (response.callback) {
window["Mautic"][response.callback].apply('window', [response]);
return;
}
if (response.redirect) {
Mautic.redirectWithBackdrop(response.redirect);
} else if (target || response.target) {
if (target) response.target = target;
Mautic.processPageContent(response);
} else {
//clear the live cache
MauticVars.liveCache = new Array();
MauticVars.lastSearchStr = '';
//set route and activeLink if the response didn't override
if (typeof response.route === 'undefined') {
response.route = route;
}
if (typeof response.activeLink === 'undefined' && link) {
response.activeLink = link;
}
Mautic.processPageContent(response);
}
//restore button class if applicable
Mautic.stopIconSpinPostEvent();
}
MauticVars.routeInProgress = '';
},
error: function (request, textStatus, errorThrown) {
Mautic.processAjaxError(request, textStatus, errorThrown, true);
//clear routeInProgress
MauticVars.routeInProgress = '';
//restore button class if applicable
Mautic.stopIconSpinPostEvent();
//stop loading bar
Mautic.stopPageLoadingBar();
},
complete: function () {
if (typeof callback !== 'undefined') {
if (typeof callback == 'function') {
callback();
} else {
window["Mautic"][callback].apply('window', []);
}
}
Mautic.generatePageTitle( route );
delete Mautic.loadContentXhr[target];
}
});
//prevent firing of href link
//mQuery(link).attr("href", "javascript: void(0)");
return false;
};
/**
* Load results with ajax in batch mode
*
* @param elementName
* @param route
* @param callback
*/
Mautic.loadAjaxColumn = function(elementName, route, callback){
var className = '.'+elementName;
if (mQuery(className).length) {
var ids = [];
mQuery(className).each(function () {
if(!mQuery(this).text()) {
var id = mQuery(this).attr('data-value');
ids.push(id);
}
});
var batchIds;
// If not gonna load any data, then just callback
if(ids.length == 0) {
Mautic.getCallback(callback);
}
// Get all stats numbers in batches of 10
while (ids.length > 0) {
batchIds = ids.splice(0, 10);
Mautic.ajaxActionRequest(
route,
{ids: batchIds, entityId: Mautic.getEntityId()},
function (response) {
if (response.success && response.stats) {
for (var i = 0; i < response.stats.length; i++) {
var stat = response.stats[i];
if (mQuery('#' + elementName + '-' + stat.id).length) {
mQuery('#' + elementName + '-' + stat.id).html(stat.data);
}
}
if(batchIds.length < 10) {
Mautic.getCallback(callback);
}
}
},
false,
true,
"GET"
);
}
}
}
/**
* Sort table by column
*
* @param tableId
* @param sortElement
*/
Mautic.sortTableByColumn = function(tableId, sortElement, removeZero){
var tbody = mQuery(tableId).find('tbody');
tbody.find('tr').each(function () {
if(parseInt(mQuery(this).find(sortElement).text()) == 0) {
mQuery(this).remove();
}
})
tbody.find('tr').sort(function(a, b) {
var tda = parseFloat(mQuery(a).find(sortElement).text()); // target order attribute
var tdb = parseFloat(mQuery(b).find(sortElement).text()); // target order attribute
// if a < b return 1
return tda < tdb ? 1
// else if a > b return -1
: tda > tdb ? -1
// else they are equal - return 0
: 0;
}).appendTo(tbody);
}
/**
* @param callback
*/
Mautic.getCallback = function (callback) {
if (callback && typeof callback !== 'undefined') {
if (typeof callback == 'function') {
callback();
} else {
window["Mautic"][callback].apply('window', []);
}
}
}
/**
* Generates the title of the current page
*
* @param route
*/
Mautic.generatePageTitle = function(route){
if (-1 !== route.indexOf('timeline')) {
return
} else if (-1 !== route.indexOf('/view')) {
//loading view of module title
var currentModule = route.split('/')[3];
//check if we find spans
var titleWithHTML = mQuery('.page-header h3').find('span.span-block');
var currentModuleItem = '';
if( 1 < titleWithHTML.length ){
currentModuleItem = titleWithHTML.eq(0).text() + ' - ' + titleWithHTML.eq(1).text();
} else {
currentModuleItem = mQuery('.page-header h3').text();
}
// Encoded entites are decoded by this process and can cause a XSS
currentModuleItem = mQuery('<div>'+currentModuleItem+'</div>').text();
mQuery('title').html( currentModule[0].toUpperCase() + currentModule.slice(1) + ' | ' + currentModuleItem + ' | Mautic' );
} else {
//loading basic title
mQuery('title').html( mQuery('.page-header h3').text() + ' | Mautic' );
}
};
/**
* Updates new content
* @param response
*/
Mautic.processPageContent = function (response) {
if (response) {
Mautic.deactivateBackgroup();
if (response.errors && 'dev' == mauticEnv) {
alert(response.errors[0].message);
console.log(response.errors);
}
if (!response.target) {
response.target = '#app-content';
}
//inactive tooltips, etc
Mautic.onPageUnload(response.target, response);
//set content
if (response.newContent) {
if (response.replaceContent && response.replaceContent == 'true') {
mQuery(response.target).replaceWith(response.newContent);
} else {
mQuery(response.target).html(response.newContent);
}
}
if (response.notifications) {
Mautic.setNotifications(response.notifications);
}
if (response.route) {
//update URL in address bar
history.pushState(null, "Mautic", response.route);
//update Title
Mautic.generatePageTitle( response.route );
}
if (response.target == '#app-content') {
//update type of content displayed
if (response.mauticContent) {
mauticContent = response.mauticContent;
}
if (response.activeLink) {
var link = response.activeLink;
if (link !== undefined && link.charAt(0) != '#') {
link = "#" + link;
}
var parent = mQuery(link).parent();
//remove current classes from menu items
mQuery(".nav-sidebar").find(".active").removeClass("active");
//add current to parent <li>
parent.addClass("active");
//get parent
var openParent = parent.closest('li.open');
//remove ancestor classes
mQuery(".nav-sidebar").find(".open").each(function () {
if (!openParent.hasClass('open') || (openParent.hasClass('open') && openParent[0] !== mQuery(this)[0])) {
mQuery(this).removeClass('open');
}
});
//add current_ancestor classes
//mQuery(parent).parentsUntil(".nav-sidebar", "li").addClass("current_ancestor");
}
mQuery('body').animate({
scrollTop: 0
}, 0);
} else {
var overflow = mQuery(response.target).css('overflow');
var overflowY = mQuery(response.target).css('overflowY');
if (overflow == 'auto' || overflow == 'scroll' || overflowY == 'auto' || overflowY == 'scroll') {
mQuery(response.target).animate({
scrollTop: 0
}, 0);
}
}
if (response.overlayEnabled) {
mQuery(response.overlayTarget + ' .content-overlay').remove();
}
//activate content specific stuff
Mautic.onPageLoad(response.target, response);
}
};
/**
* Initiate various functions on page load, manual or ajax
*/
Mautic.onPageLoad = function (container, response, inModal) {
Mautic.initDateRangePicker(container + ' #daterange_date_from', container + ' #daterange_date_to');
//initiate links
Mautic.makeLinksAlive(mQuery(container + " a[data-toggle='ajax']"));
//initialize forms
mQuery(container + " form[data-toggle='ajax']").each(function (index) {
Mautic.ajaxifyForm(mQuery(this).attr('name'));
});
//initialize ajax'd modals
Mautic.makeModalsAlive(mQuery(container + " *[data-toggle='ajaxmodal']"))
//initialize embedded modal forms
Mautic.activateModalEmbeddedForms(container);
//initalize live search boxes
mQuery(container + " *[data-toggle='livesearch']").each(function (index) {
Mautic.activateLiveSearch(mQuery(this), "lastSearchStr", "liveCache");
});
//initialize list filters
mQuery(container + " *[data-toggle='listfilter']").each(function (index) {
Mautic.activateListFilterSelect(mQuery(this));
});
//initialize tooltips
var pageTooltips = mQuery(container + " *[data-toggle='tooltip']");
pageTooltips.tooltip({html: true, container: 'body'});
// Enable tooltips on checkbox & radio input's to
// show when hovering their parent LABEL element
pageTooltips.each(function(i) {
var thisTooltip = mQuery(pageTooltips.get(i));
var elementParent = thisTooltip.parent();
if (elementParent.get(0).tagName === 'LABEL') {
elementParent.append('<i class="ri-question-line"></i>');
elementParent.hover(function () {
thisTooltip.tooltip('show')
}, function () {
thisTooltip.tooltip('hide');
});
}
});
//initialize sortable lists
mQuery(container + " *[data-toggle='sortablelist']").each(function (index) {
Mautic.activateSortable(this);
});
//downloads
mQuery(container + " a[data-toggle='download']").off('click.download');
mQuery(container + " a[data-toggle='download']").on('click.download', function (event) {
event.preventDefault();
Mautic.initiateFileDownload(mQuery(this).attr('href'));
});
Mautic.makeConfirmationsAlive(mQuery(container + " a[data-toggle='confirmation']"));
//initialize date/time
mQuery(container + " *[data-toggle='datetime']").each(function() {
Mautic.activateDateTimeInputs(this, 'datetime');
});
mQuery(container + " *[data-toggle='date']").each(function() {
Mautic.activateDateTimeInputs(this, 'date');
});
mQuery(container + " *[data-toggle='time']").each(function() {
Mautic.activateDateTimeInputs(this, 'time');
});
// Initialize callback options
mQuery(container + " *[data-onload-callback]").each(function() {
var callback = function(el) {
if (typeof window["Mautic"][mQuery(el).attr('data-onload-callback')] == 'function') {
window["Mautic"][mQuery(el).attr('data-onload-callback')].apply('window', [el]);
}
}
mQuery(document).ready(callback(this));
});
mQuery(container + " input[data-toggle='color']").each(function() {
Mautic.activateColorPicker(this);
});
mQuery(container + " select").not('.multiselect, .not-chosen').each(function() {
Mautic.activateChosenSelect(this);
});
mQuery(container + " select.multiselect").each(function() {
Mautic.activateMultiSelect(this);
});
Mautic.activateLookupTypeahead(mQuery(container));
// Fix dropdowns in responsive tables - https://github.com/twbs/bootstrap/issues/11037#issuecomment-163746965
mQuery(container + " .table-responsive").on('shown.bs.dropdown', function (e) {
var table = mQuery(this),
menu = mQuery(e.target).find(".dropdown-menu"),
tableOffsetHeight = table.offset().top + table.height(),
menuOffsetHeight = menu.offset().top + menu.outerHeight(true);
if (menuOffsetHeight > tableOffsetHeight)
table.css("padding-bottom", menuOffsetHeight - tableOffsetHeight + 16)
});
mQuery(container + " .table-responsive").on("hide.bs.dropdown", function () {
mQuery(this).css("padding-bottom", 0);
})
//initialize tab/hash activation
mQuery(container + " .nav-tabs[data-toggle='tab-hash']").each(function() {
// Show tab based on hash
var hash = document.location.hash;
var prefix = 'tab-';
if (hash) {
var hashPieces = hash.split('?');
hash = hashPieces[0].replace("#", "#" + prefix);
var activeTab = mQuery(this).find('a[href=' + hash + ']').first();
if (mQuery(activeTab).length) {
mQuery('.nav-tabs li').removeClass('active');
mQuery('.tab-pane').removeClass('in active');
mQuery(activeTab).parent().addClass('active');
mQuery(hash).addClass('in active');
}
}
mQuery(this).find('a').on('shown.bs.tab', function (e) {
window.location.hash = e.target.hash.replace("#" + prefix, "#");
});
});
// Initialize tab overflow
mQuery(container + " .nav-overflow-tabs ul").each(function() {
Mautic.activateOverflowTabs(this);
});
mQuery(container + " .nav.sortable").each(function() {
Mautic.activateSortableTabs(this);
});
// Initialize tab delete buttons
Mautic.activateTabDeleteButtons(container);
//spin icons on button click
mQuery(container + ' .btn:not(.btn-nospin)').on('click.spinningicons', function (event) {
Mautic.startIconSpinOnEvent(event);
});
mQuery(container + ' input[class=list-checkbox]').on('change', function () {
var disabled = Mautic.batchActionPrecheck(container) ? false : true;
var color = (disabled) ? 'btn-default' : 'btn-info';
var button = container + ' th.col-actions .input-group-btn button';
mQuery(button).prop('disabled', disabled);
mQuery(button).removeClass('btn-default btn-info').addClass(color);
});
//Copy form buttons to the toolbar
mQuery(container + " .bottom-form-buttons").each(function() {
if (inModal || mQuery(this).closest('.modal').length) {
var modal = (inModal) ? container : mQuery(this).closest('.modal');
if (mQuery(modal).find('.modal-form-buttons').length) {
//hide the bottom buttons
mQuery(modal).find('.bottom-form-buttons').addClass('hide');
var buttons = mQuery(modal).find('.bottom-form-buttons').html();
//make sure working with a clean slate
mQuery(modal).find('.modal-form-buttons').html('');
mQuery(buttons).filter("button").each(function (i, v) {
//get the ID
var id = mQuery(this).attr('id');
var button = mQuery("<button type='button' />")
.addClass(mQuery(this).attr('class'))
.addClass('btn-copy')
.html(mQuery(this).html())
.appendTo(mQuery(modal).find('.modal-form-buttons'))
.on('click.ajaxform', function (event) {
if (mQuery(this).hasClass('disabled')) {
return false;
}
// Disable the form buttons until this action is complete
if (!mQuery(this).hasClass('btn-dnd')) {
mQuery(this).parent().find('button').prop('disabled', true);
}
event.preventDefault();
if (!mQuery(this).hasClass('btn-nospin')) {
Mautic.startIconSpinOnEvent(event);
}
mQuery('#' + id).click();
});
});
}
} else {
//hide the toolbar actions if applicable
mQuery('.toolbar-action-buttons').addClass('hide');
if (mQuery('.toolbar-form-buttons').hasClass('hide')) {
//hide the bottom buttons
mQuery(container + ' .bottom-form-buttons').addClass('hide');
var buttons = mQuery(container + " .bottom-form-buttons").html();
//make sure working with a clean slate
mQuery(container + ' .toolbar-form-buttons .toolbar-standard').html('');
mQuery(container + ' .toolbar-form-buttons .toolbar-dropdown .drop-menu').html('');
var lastIndex = mQuery(buttons).filter("button").length - 1;
mQuery(buttons).filter("button").each(function (i, v) {
//get the ID
var id = mQuery(this).attr('id');
var buttonClick = function (event) {
event.preventDefault();
// Disable the form buttons until this action is complete
if (!mQuery(this).hasClass('btn-dnd')) {
mQuery(this).parent().find('button').prop('disabled', true);
}
Mautic.startIconSpinOnEvent(event);
mQuery('#' + id).click();
};
mQuery("<button type='button' />")
.addClass(mQuery(this).attr('class'))
.addClass('btn-copy')
.attr('id', mQuery(this).attr('id') + '_toolbar')
.html(mQuery(this).html())
.on('click.ajaxform', buttonClick)
.appendTo('.toolbar-form-buttons .toolbar-standard');
if (i === lastIndex) {
mQuery(".toolbar-form-buttons .toolbar-dropdown .btn-main")
.off('.ajaxform')
.attr('id', mQuery(this).attr('id') + '_toolbar_mobile')
.html(mQuery(this).html())
.on('click.ajaxform', buttonClick);
} else {
mQuery("<a />")
.attr('id', mQuery(this).attr('id') + '_toolbar_mobile')
.html(mQuery(this).html())
.on('click.ajaxform', buttonClick)
.appendTo(mQuery('<li />').prependTo('.toolbar-form-buttons .toolbar-dropdown .dropdown-menu'))
}
});
mQuery('.toolbar-form-buttons').removeClass('hide');
}
}
});
Mautic.activateGlobalFroalaOptions();
Mautic.getBuilderContainer = function() {
return container;
}
// This turns all textarea elements with class "editor" into CKEditor ones, except for Dynamic Content elements, which can be initialized with Mautic.setDynamicContentEditors().
if (mauticFroalaEnabled && mQuery(container + ' textarea.editor:not(".editor-dynamic-content")').length && Mautic.getActiveBuilderName() === 'legacy') {
mQuery(container + ' textarea.editor:not(".editor-dynamic-content")').each(function () {
mQuery(this).froalaEditor();
});
} else if (mQuery(container + ' textarea.editor:not(".editor-dynamic-content")').length) {
mQuery(container + ' textarea.editor:not(".editor-dynamic-content")').each(function () {
const textarea = mQuery(this);
const maxButtons = ['undo', 'redo', '|', 'bold', 'italic', 'underline', 'heading', 'fontfamily', 'fontsize', 'fontColor', 'fontBackgroundColor', 'alignment', 'numberedList', 'bulletedList', 'blockQuote', 'TokenPlugin', 'removeFormat', 'link', 'ckfinder', 'mediaEmbed', 'insertTable', 'sourceEditing'];
let minButtons = ['undo', 'redo', '|', 'bold', 'italic', 'underline'];
if (textarea.hasClass('editor-dynamic-content') || textarea.hasClass('editor-basic')) {
minButtons = ['undo', 'redo', '|', 'bold', 'italic', 'underline', 'heading', 'fontfamily', 'fontsize', 'fontColor', 'fontBackgroundColor', 'alignment', 'numberedList', 'bulletedList', 'blockQuote', 'removeFormat', 'link', 'ckfinder', 'mediaEmbed', 'insertTable', 'sourceEditing'];
}
let ckEditorToolbar = minButtons;
if (textarea.hasClass('editor-advanced') || textarea.hasClass('editor-basic-fullpage')) {
ckEditorToolbar = maxButtons;
}
Mautic.ConvertFieldToCkeditor(textarea, ckEditorToolbar);
});
}
//prevent auto closing dropdowns for dropdown forms
if (mQuery(container + ' .dropdown-menu-form').length) {
mQuery(container + ' .dropdown-menu-form').on('click', function (e) {
e.stopPropagation();
});
}
if (response && response.updateSelect && typeof response.id !== 'undefined') {
// An new item is to be injected
Mautic.updateEntitySelect(response);
}
//run specific on loads
var contentSpecific = false;
if (response && response.mauticContent) {
contentSpecific = response.mauticContent;
} else if (container == 'body') {
contentSpecific = mauticContent;
}
if (response && response.sidebar) {
var sidebarContent = mQuery('.app-sidebar.sidebar-left');
var newSidebar = mQuery(response.sidebar);
var nav = sidebarContent.find('li');
if (nav.length) {
var openNavIndex;
nav.each(function(i, el) {
var $el = mQuery(el);
if ($el.hasClass('open')) {
openNavIndex = i;
}
});
var openNav = mQuery(newSidebar.find('li')[openNavIndex]);
openNav.addClass('open');
openNav.find('ul').removeClass('collapse');
}
sidebarContent.html(newSidebar);
}
if (container == '#app-content' || container == 'body') {
//register global keyboard shortcuts
Mautic.bindGlobalKeyboardShortcuts();
mQuery(".sidebar-left a[data-toggle='ajax']").on('click.ajax', function (event) {
mQuery("html").removeClass('sidebar-open-ltr');
});
mQuery('.sidebar-right a[data-toggle="ajax"]').on('click.ajax', function (event) {
mQuery("html").removeClass('sidebar-open-rtl');
});
}
if (contentSpecific && typeof Mautic[contentSpecific + "OnLoad"] == 'function') {
if (inModal || typeof Mautic.loadedContent[contentSpecific] == 'undefined') {
Mautic.loadedContent[contentSpecific] = true;
Mautic[contentSpecific + "OnLoad"](container, response);
}
}
if (!inModal && container == 'body') {
//prevent notification dropdown from closing if clicking an action
mQuery('#notificationsDropdown').on('click', function (e) {
if (mQuery(e.target).hasClass('do-not-close')) {
e.stopPropagation();
}
});
if (mQuery('#globalSearchContainer').length) {
mQuery('#globalSearchContainer .search-button').click(function () {
mQuery('#globalSearchContainer').addClass('active');
if (mQuery('#globalSearchInput').val()) {
mQuery('#globalSearchDropdown').addClass('open');
}
setTimeout(function () {
mQuery('#globalSearchInput').focus();
}, 100);
mQuery('body').on('click.globalsearch', function (event) {
var target = event.target;
if (!mQuery(target).parents('#globalSearchContainer').length && !mQuery(target).parents('#globalSearchDropdown').length) {
Mautic.closeGlobalSearchResults();
}
});
});
mQuery("#globalSearchInput").on('change keyup paste', function () {
if (mQuery(this).val()) {
mQuery('#globalSearchDropdown').addClass('open');
} else {
mQuery('#globalSearchDropdown').removeClass('open');
}
});
Mautic.activateLiveSearch("#globalSearchInput", "lastGlobalSearchStr", "globalLivecache");
}
}
Mautic.renderCharts(container);
Mautic.stopIconSpinPostEvent();
//stop loading bar
if ((response && typeof response.stopPageLoading != 'undefined' && response.stopPageLoading) || container == '#app-content' || container == '.page-list') {
Mautic.stopPageLoadingBar();
}
const maps= mQuery(container).find('[data-load="map"]');
if(maps.length) {
maps.each((index,map) => map.addEventListener('click', () => {
const scopeId = event.target.getAttribute('href');
const scope = mQuery(scopeId);
if (scope.length) {
// Check if map is not already rendered
if (scope.children('.map-rendered').length) {
return;
}
// Loaded via AJAX not to block loading a whole page
const mapUrl = scope.attr('data-map-url');
scope.load(mapUrl, '', () => {
const map = Mautic.initMap(scope, 'regions');
});
}
}, false));
}
};
Mautic.setDynamicContentEditors = function(container) {
// The editor for dynamic content should only be initialized when the modal is opened due to conflicts and not being able to edit content otherwise
if (mauticFroalaEnabled && mQuery(container + ' textarea.editor-dynamic-content').length && Mautic.getActiveBuilderName() === 'legacy') {
console.log('[Builder] Using Froala for the Dynamic Content editor (legacy)');
mQuery(container + ' textarea.editor-dynamic-content').each(function () {
mQuery(this).froalaEditor();
});
} else if (mQuery(container + ' textarea.editor-dynamic-content').length) {
console.log('[Builder] Using CKEditor for the Dynamic Content editor');
mQuery(container + ' textarea.editor-dynamic-content').each(function () {
const textarea = mQuery(this);
const maxButtons = [ 'Undo', 'Redo', '-', 'Bold', 'Italic', 'Underline', 'Format', 'Font', 'FontSize', 'TextColor', 'BGColor', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', 'NumberedList', 'BulletedList', 'Blockquote', 'RemoveFormat', 'Link', 'Image', 'Table', 'InsertToken', 'Sourcedialog', 'Maximize']
let minButtons = ['Undo', 'Redo', '|', 'Bold', 'Italic', 'Underline'];
if (textarea.hasClass('editor-dynamic-content') || textarea.hasClass('editor-basic')) {
minButtons = ['Undo', 'Redo', '-', 'Bold', 'Italic', 'Underline', 'Format', 'Font', 'FontSize', 'TextColor', 'BGColor', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', 'NumberedList', 'BulletedList', 'Blockquote', 'RemoveFormat', 'Link', 'Image', 'Table', 'Sourcedialog', 'Maximize'];
}
let ckEditorToolbar = minButtons;
if (textarea.hasClass('editor-advanced') || textarea.hasClass('editor-basic-fullpage')) {
ckEditorToolbar = maxButtons;
}
Mautic.ConvertFieldToCkeditor(textarea, ckEditorToolbar);
});
}
}
/**
* @param jQueryObject
*/
Mautic.activateLookupTypeahead = function(containerEl) {
containerEl.find("*[data-toggle='field-lookup']").each(function () {
var lookup = mQuery(this),
callback = lookup.attr('data-callback') ? lookup.attr('data-callback') : 'activateFieldTypeahead';
Mautic[callback](
lookup.attr('id'),
lookup.attr('data-target'),
lookup.attr('data-options'),
lookup.attr('data-action')
);
});
};
/**
* @param jQueryObject
*/
Mautic.makeConfirmationsAlive = function(jQueryObject) {
jQueryObject.off('click.confirmation');
jQueryObject.on('click.confirmation', function (event) {
event.preventDefault();
MauticVars.ignoreIconSpin = true;
return Mautic.showConfirmation(this);
});
};
/**
*
* @param jQueryObject
*/
Mautic.makeModalsAlive = function(jQueryObject) {
jQueryObject.off('click.ajaxmodal');
jQueryObject.on('click.ajaxmodal', function (event) {
event.preventDefault();
Mautic.ajaxifyModal(this, event);
});
};
/**
*
* @param jQueryObject
*/
Mautic.makeLinksAlive = function(jQueryObject) {
jQueryObject.off('click.ajax');
jQueryObject.on('click.ajax', function (event) {
event.preventDefault();
return Mautic.ajaxifyLink(this, event);
});
};
/**
* Functions to be ran on ajax page unload
*/
Mautic.onPageUnload = function (container, response) {
//unload tooltips so they don't double show
if (typeof container != 'undefined') {
mQuery(container + " *[data-toggle='tooltip']").tooltip('destroy');
//unload lingering modals from body so that there will not be multiple modals generated from new ajaxed content
if (typeof MauticVars.modalsReset == 'undefined') {
MauticVars.modalsReset = {};
}
if (mauticFroalaEnabled && Mautic.getActiveBuilderName() === 'legacy') {
mQuery('textarea').froalaEditor('destroy');
} else {
if (ckEditors.size > 0) {
ckEditors.forEach(function(value, key, map){
map.get(key).destroy()
})
ckEditors.clear();
}
}
//turn off shuffle events
mQuery('html')
.off('fa.sidebar.minimize')
.off('fa.sidebar.maximize');
mQuery(container + " input[data-toggle='color']").each(function() {
mQuery(this).minicolors('destroy');
});
}
//run specific unloads
var contentSpecific = false;
if (container == '#app-content') {
//full page gets precedence
Mousetrap.reset();
contentSpecific = mauticContent;
// trash created chart objects to save some memory
if (typeof Mautic.chartObjects !== 'undefined') {
mQuery.each(Mautic.chartObjects, function (i, chart) {
chart.destroy();
});
Mautic.chartObjects = [];
}
// trash created map objects to save some memory
if (typeof Mautic.mapObjects !== 'undefined') {
mQuery.each(Mautic.mapObjects, (i, map) => {
map.destroyMap();
});
Mautic.mapObjects = [];
}
// trash tokens to save some memory
if (typeof Mautic.builderTokens !== 'undefined') {
Mautic.builderTokens = {};
}
} else if (response && response.mauticContent) {
contentSpecific = response.mauticContent;
}
if (contentSpecific) {
if (typeof Mautic[contentSpecific + "OnUnload"] == 'function') {
Mautic[contentSpecific + "OnUnload"](container, response);
}
if (typeof Mautic.loadedContent[contentSpecific] !== 'undefined') {
delete Mautic.loadedContent[contentSpecific];
}
}
};
/**
* Retrieves content of href via ajax
* @param el
* @param event
* @returns {boolean}
*/
Mautic.ajaxifyLink = function (el, event) {
if (mQuery(el).hasClass('disabled')) {
return false;
}
var route = mQuery(el).attr('href');
if (route.indexOf('javascript') >= 0 || MauticVars.routeInProgress === route) {
return false;
}
if (route.indexOf('batchExport') >= 0) {
Mautic.initiateFileDownload(route);
return true;
}
if (event.ctrlKey || event.metaKey) {
//open the link in a new window
route = route.split("?")[0];
window.open(route, '_blank');
return;
}
//prevent leaving if currently in a form
if (mQuery(".form-exit-unlock-id").length) {
if (mQuery(el).attr('data-ignore-formexit') != 'true') {
var unlockParameter = (mQuery('.form-exit-unlock-parameter').length) ? mQuery('.form-exit-unlock-parameter').val() : '';
Mautic.unlockEntity(mQuery('.form-exit-unlock-model').val(), mQuery('.form-exit-unlock-id').val(), unlockParameter);
}
}
var link = mQuery(el).attr('data-menu-link');
if (link !== undefined && link.charAt(0) != '#') {
link = "#" + link;
}
var method = mQuery(el).attr('data-method');
if (!method) {
method = 'GET'
}
MauticVars.routeInProgress = route;
var target = mQuery(el).attr('data-target');
if (!target) {
target = null;
}
//give an ajaxified link the option of not displaying the global loading bar
var showLoadingBar = (mQuery(el).attr('data-hide-loadingbar')) ? false : true;
//close the global search results if opened
if (mQuery('#globalSearchContainer').length && mQuery('#globalSearchContainer').hasClass('active')) {
Mautic.closeGlobalSearchResults();
}
Mautic.loadContent(route, link, method, target, showLoadingBar);
};
/**
* Convert to chosen select
*
* @param el
*/
Mautic.activateChosenSelect = function(el, ignoreGlobal, jQueryVariant) {
var mQuery = (typeof jQueryVariant != 'undefined') ? jQueryVariant : window.mQuery;
if (mQuery(el).parents('.no-chosen').length && !ignoreGlobal) {
// Globally ignored chosens because they are handled manually due to hidden elements, etc
return;
}
var noResultsText = mQuery(el).data('no-results-text');
if (!noResultsText) {
noResultsText = mauticLang['chosenNoResults'];
}
var isLookup = mQuery(el).attr('data-chosen-lookup');
if (isLookup) {
if (mQuery(el).attr('data-new-route')) {
// Register method to initiate new
mQuery(el).on('change', function () {
var url = mQuery(el).attr('data-new-route');
// If the element is already in a modal then use a popup
if (mQuery(el).val() == 'new' && (mQuery(el).attr('data-popup') == "true" || mQuery(el).closest('.modal').length > 0)) {
var queryGlue = url.indexOf('?') >= 0 ? '&' : '?';
// De-select the new select option
mQuery(el).find('option[value="new"]').prop('selected', false);
mQuery(el).trigger('chosen:updated');
Mautic.loadNewWindow({
"windowUrl": url + queryGlue + "contentOnly=1&updateSelect=" + mQuery(el).attr('id')
});
} else {
Mautic.loadAjaxModalBySelectValue(this, 'new', url, mQuery(el).attr('data-header'));
}
});
}
var multiPlaceholder = mauticLang['mautic.core.lookup.search_options'],
singlePlaceholder = mauticLang['mautic.core.lookup.search_options'];
} else {
var multiPlaceholder = mauticLang['chosenChooseMore'],
singlePlaceholder = mauticLang['chosenChooseOne'];
}
if (typeof mQuery(el).data('chosen-placeholder') !== 'undefined') {
multiPlaceholder = singlePlaceholder = mQuery(el).data('chosen-placeholder');
}
mQuery(el).chosen({
placeholder_text_multiple: multiPlaceholder,
placeholder_text_single: singlePlaceholder,
no_results_text: noResultsText,
width: "100%",
allow_single_deselect: true,
include_group_label_in_selected: true,
search_contains: true
});
if (isLookup) {
var searchTerm = mQuery(el).attr('data-model');
if (searchTerm) {
mQuery(el).ajaxChosen({
type: 'GET',
url: mauticAjaxUrl + '?action=' + mQuery(el).attr('data-chosen-lookup'),
dataType: 'json',
afterTypeDelay: 2,
minTermLength: 2,
jsonTermKey: searchTerm,
keepTypingMsg: "Keep typing...",
lookingForMsg: "Looking for"
});
}
}
};
/**
* Check and destroy chosen select
*
* @param el
*/
Mautic.destroyChosen = function(el) {
if(el.get(0)) {
var eventObject = mQuery._data(el.get(0), 'events');
}
// Check if object has chosen event
if (eventObject !== undefined && eventObject['chosen:activate'] !== undefined) {
el.chosen('destroy');
el.off('chosen:activate chosen:close chosen:open chosen:updated'); //Clear chosen events because chosen('destroy') doesn't
}
};
/**
* Activate a typeahead lookup
*/
Mautic.activateFieldTypeahead = function (field, target, options, action) {
var fieldId = '#' + field;
var fieldEl = mQuery('#' + field);
if (fieldEl.length && fieldEl.parent('.twitter-typeahead').length) {
return; // If the parent exist then the typeahead was already initialized. Abort.
}
if (options && typeof options === 'String') {
var keys = values = [];
options = options.split('||');
if (options.length == 2) {
keys = options[1].split('|');
values = options[0].split('|');
} else {
values = options[0].split('|');
}
var fieldTypeahead = Mautic.activateTypeahead(fieldId, {
dataOptions: values,
dataOptionKeys: keys,
minLength: 0
});
} else {
var typeAheadOptions = {
prefetch: true,
remote: true,
action: action + "&field=" + target
};
if (('undefined' !== typeof options) && ('undefined' !== typeof options.limit)) {
typeAheadOptions.limit = options.limit;
}
if (('undefined' !== typeof options) && ('undefined' !== typeof options.noRrecordMessage)) {
typeAheadOptions.noRrecordMessage = options.noRrecordMessage;
}
var fieldTypeahead = Mautic.activateTypeahead(fieldId, typeAheadOptions);
}
var callback = function (event, datum) {
if (fieldEl.length && datum["value"]) {
fieldEl.val(datum["value"]);
var lookupCallback = mQuery(fieldId).data('lookup-callback');
if (lookupCallback && typeof Mautic[lookupCallback] == 'function') {
Mautic[lookupCallback](field, datum);
}
}
};
mQuery(fieldTypeahead).on('typeahead:selected', callback).on('typeahead:autocompleted', callback);
};
/**
* Convert to multiselect
*
* @param el
*/
Mautic.activateMultiSelect = function(el) {
var moveOption = function(v, prev) {
var theOption = mQuery(el).find('option[value="' + v + '"]').first();
var lastSelected = mQuery(el).find('option:not(:disabled)').filter(function () {
return mQuery(this).prop('selected');
}).last();
if (typeof prev !== 'undefined') {
if (prev) {
var prevOption = mQuery(el).find('option[value="' + prev + '"]').first();
theOption.insertAfter(prevOption);
return;
}
} else if (lastSelected.length) {
theOption.insertAfter(lastSelected);
return;
}
theOption.prependTo(el);
};
mQuery(el).multiSelect({
afterInit: function(container) {
var funcName = mQuery(el).data('afterInit');
if (funcName) {
Mautic[funcName]('init', container);
}
var selectThat = this,
$selectableSearch = this.$selectableUl.prev(),
$selectionSearch = this.$selectionUl.prev(),
selectableSearchString = '#' + this.$container.attr('id') + ' .ms-elem-selectable:not(.ms-selected)',
selectionSearchString = '#' + this.$container.attr('id') + ' .ms-elem-selection.ms-selected';
this.qs1 = $selectableSearch.quicksearch(selectableSearchString)
.on('keydown', function (e) {
if (e.which === 40) {
selectThat.$selectableUl.focus();
return false;
}
});
this.qs2 = $selectionSearch.quicksearch(selectionSearchString)
.on('keydown', function (e) {
if (e.which == 40) {
selectThat.$selectionUl.focus();
return false;
}
});
var selectOrder = mQuery(el).data('order');
if (selectOrder && selectOrder.length > 1) {
this.deselect_all();
mQuery.each(selectOrder, function(k, v) {
selectThat.select(v);
});
}
var isSortable = mQuery(el).data('sortable');
if (isSortable) {
mQuery(el).parent('.choice-wrapper').find('.ms-selection').first().sortable({
items: '.ms-elem-selection',
helper: function (e, ui) {
ui.width(mQuery(el).width());
return ui;
},
axis: 'y',
scroll: false,
update: function(event, ui) {
var prev = ui.item.prev();
var prevValue = (prev.length) ? prev.data('ms-value') : '';
moveOption(ui.item.data('ms-value'), prevValue);
}
});
}
},
afterSelect: function(value) {
var funcName = mQuery(el).data('afterSelect');
if (funcName) {
Mautic[funcName]('select', value);
}
this.qs1.cache();
this.qs2.cache();
moveOption(value);
},
afterDeselect: function(value) {
var funcName = mQuery(el).data('afterDeselect');
if (funcName) {
Mautic[funcName]('deselect', value);
}
this.qs1.cache();
this.qs2.cache();
},
selectableHeader: "<input type='text' class='ms-search form-control' autocomplete='off'>",
selectionHeader: "<input type='text' class='ms-search form-control' autocomplete='off'>",
keepOrder: true
});
};
/**
* Activate modal buttons for embedded forms
*
* @param container
*/
Mautic.activateModalEmbeddedForms = function(container) {
mQuery(container + " *[data-embedded-form='cancel']").off('click.embeddedform');
mQuery(container + " *[data-embedded-form='cancel']").on('click.embeddedform', function (event) {
event.preventDefault();
var modal = mQuery(this).closest('.modal');
mQuery(modal).modal('hide');
if (mQuery(this).attr('data-embedded-form-clear') === 'true') {
Mautic.resetForm(modal);
}
if (typeof mQuery(this).attr('data-embedded-form-callback') != 'undefined') {
if (typeof window["Mautic"][mQuery(this).attr('data-embedded-form-callback')] == 'function') {
window["Mautic"][mQuery(this).attr('data-embedded-form-callback')].apply('window', [this, modal]);
}
}
});
// Configure the modal
mQuery(container + " *[data-embedded-form='add']").each(function() {
var submitButton = this;
var modal = mQuery(this).closest('.modal');
if (typeof mQuery(modal).data('bs.modal') !== 'undefined' && typeof mQuery(modal).data('bs.modal').options !== 'undefined') {
mQuery(modal).data('bs.modal').options.keyboard = false;
mQuery(modal).data('bs.modal').options.backdrop = 'static';
} else {
mQuery(modal).attr('data-keyboard', false);
mQuery(modal).attr('data-backdrop', 'static');
}
mQuery(modal).on('show.bs.modal', function () {
// Don't allow submitting with enter key
mQuery(this).on("keydown.embeddedForm", ":input:not(textarea)", function(event) {
if (event.keyCode == 13) {
event.preventDefault();
if (event.metaKey || event.ctrlKey) {
// Submit the modal
mQuery(submitButton).click();
}
}
});
});
//clean slate upon close
mQuery(modal).on('hidden.bs.modal', function () {
mQuery(this).off("keydown.embeddedForm", ":input:not(textarea)");
});
});
mQuery(container + " *[data-embedded-form='add']").off('click.embeddedform');
mQuery(container + " *[data-embedded-form='add']").on('click.embeddedform', function (event) {
event.preventDefault();
var modal = mQuery(this).closest('.modal');
mQuery(modal).modal('hide');
if (typeof mQuery(this).attr('data-embedded-form-callback') != 'undefined') {
if (typeof window["Mautic"][mQuery(this).attr('data-embedded-form-callback')] == 'function') {
window["Mautic"][mQuery(this).attr('data-embedded-form-callback')].apply('window', [this, modal]);
}
}
});
};
/**
* Activate containers datetime inputs
* @param container
*/
Mautic.activateDateTimeInputs = function(el, type) {
if (typeof type == 'undefined') {
type = 'datetime';
}
var format = mQuery(el).data('format');
if (type == 'datetime') {
mQuery(el).datetimepicker({
format: (format) ? format : 'Y-m-d H:i',
lazyInit: true,
validateOnBlur: false,
allowBlank: true,
scrollMonth: false,
scrollInput: false
});
} else if(type == 'date') {
mQuery(el).datetimepicker({
timepicker: false,
format: (format) ? format : 'Y-m-d',
lazyInit: true,
validateOnBlur: false,
allowBlank: true,
scrollMonth: false,
scrollInput: false,
closeOnDateSelect: true
});
} else if (type == 'time') {
mQuery(el).datetimepicker({
datepicker: false,
format: (format) ? format : 'H:i',
lazyInit: true,
validateOnBlur: false,
allowBlank: true,
scrollMonth: false,
scrollInput: false
});
}
mQuery(el).addClass('calendar-activated');
};
/**
* Activates Typeahead.js command lists for search boxes
* @param elId
* @param modelName
*/
Mautic.activateSearchAutocomplete = function (elId, modelName) {
if (mQuery('#' + elId).length) {
var livesearch = (mQuery('#' + elId).attr("data-toggle=['livesearch']")) ? true : false;
var typeaheadObject = Mautic.activateTypeahead('#' + elId, {
prefetch: true,
remote: false,
limit: 0,
action: 'commandList&model=' + modelName,
multiple: true
});
mQuery(typeaheadObject).on('typeahead:selected', function (event, datum) {
if (livesearch) {
//force live search update,
MauticVars.lastSearchStr = '';
mQuery('#' + elId).keyup();
}
}).on('typeahead:autocompleted', function (event, datum) {
if (livesearch) {
//force live search update
MauticVars.lastSearchStr = '';
mQuery('#' + elId).keyup();
}
});
}
};
/**
* Activate live search feature
*
* @param el
* @param searchStrVar
* @param liveCacheVar
*/
Mautic.activateLiveSearch = function (el, searchStrVar, liveCacheVar) {
if (!mQuery(el).length) {
return;
}
//find associated button
var btn = "button[data-livesearch-parent='" + mQuery(el).attr('id') + "']";
mQuery(el).on('focus', function () {
Mautic.currentSearchString = mQuery(this).val().trim();
});
mQuery(el).on('change keyup paste', {}, function (event) {
var searchStr = mQuery(el).val().trim();
var spaceKeyPressed = (event.which == 32 || event.keyCode == 32);
var enterKeyPressed = (event.which == 13 || event.keyCode == 13);
var deleteKeyPressed = (event.which == 8 || event.keyCode == 8);
if (!enterKeyPressed && Mautic.currentSearchString && Mautic.currentSearchString == searchStr) {
return;
}
var target = mQuery(el).attr('data-target');
var diff = searchStr.length - MauticVars[searchStrVar].length;
if (diff < 0) {
diff = parseInt(diff) * -1;
}
var overlayEnabled = mQuery(el).attr('data-overlay');
if (!overlayEnabled || overlayEnabled == 'false') {
overlayEnabled = false;
} else {
overlayEnabled = true;
}
var overlayTarget = mQuery(el).attr('data-overlay-target');
if (!overlayTarget) overlayTarget = target;
if (overlayEnabled) {
mQuery(el).off('blur.livesearchOverlay');
mQuery(el).on('blur.livesearchOverlay', function() {
mQuery(overlayTarget + ' .content-overlay').remove();
});
}
if (!deleteKeyPressed && overlayEnabled) {
var overlay = mQuery('<div />', {"class": "content-overlay"}).html(mQuery(el).attr('data-overlay-text'));
if (mQuery(el).attr('data-overlay-background')) {
overlay.css('background', mQuery(el).attr('data-overlay-background'));
}
if (mQuery(el).attr('data-overlay-color')) {
overlay.css('color', mQuery(el).attr('data-overlay-color'));
}
}
//searchStr in MauticVars[liveCacheVar] ||
if ((!searchStr && MauticVars[searchStrVar].length) || diff >= 3 || spaceKeyPressed || enterKeyPressed) {
MauticVars[searchStrVar] = searchStr;
event.data.livesearch = true;
Mautic.filterList(event,
mQuery(el).attr('id'),
mQuery(el).attr('data-action'),
target,
liveCacheVar,
overlayEnabled,
overlayTarget
);
} else if (overlayEnabled) {
if (!mQuery(overlayTarget + ' .content-overlay').length) {
mQuery(overlayTarget).prepend(overlay);
}
}
});
if (mQuery(btn).length) {
mQuery(btn).on('click', {'parent': mQuery(el).attr('id')}, function (event) {
var searchStr = mQuery(el).val().trim();
MauticVars[searchStrVar] = searchStr;
Mautic.filterButtonClicked = true;
Mautic.filterList(event,
event.data.parent,
mQuery('#' + event.data.parent).attr('data-action'),
mQuery('#' + event.data.parent).attr('data-target'),
'liveCache',
mQuery(this).attr('data-livesearch-action')
);
});
if (mQuery(el).val()) {
mQuery(btn).attr('data-livesearch-action', 'clear');
mQuery(btn + ' i').removeClass('ri-search-line').addClass('ri-eraser-line');
} else {
mQuery(btn).attr('data-livesearch-action', 'search');
mQuery(btn + ' i').removeClass('ri-eraser-line').addClass('ri-search-line');
}
}
};
/**
* Filters a list based on select value
*
* @param el
*/
Mautic.activateListFilterSelect = function(el) {
var filterName = mQuery(el).attr('name');
var isMultiple = mQuery(el).attr('multiple') ? true : false;
var prefixExceptions = mQuery(el).data('prefix-exceptions');
if (isMultiple && prefixExceptions) {
if (typeof Mautic.listFilterValues == 'undefined') {
Mautic.listFilterValues = {};
}
// Store values for comparison on change
Mautic.listFilterValues[filterName] = mQuery(el).val();
}
mQuery(el).on('change', function() {
var filterVal = mQuery(this).val();
if (filterVal == null) {
filterVal = [];
}
if (prefixExceptions) {
var limited = prefixExceptions.split(',');
if (filterVal.length > 1) {
for (var i=0; i<filterVal.length; i++) {
if (mQuery.inArray(filterVal[i], Mautic.listFilterValues[filterName]) == -1) {
var newOption = mQuery(this).find('option[value="' + filterVal[i] + '"]');
var prefix = mQuery(newOption).parent().data('prefix');
if (mQuery.inArray(prefix, limited) != -1) {
mQuery(newOption).siblings().prop('selected', false);
filterVal = mQuery(this).val();
mQuery(this).trigger('chosen:updated');
}
}
}
}
Mautic.listFilterValues[filterName] = filterVal;
}
var tmpl = mQuery(this).data('tmpl');
if (!tmpl) {
tmpl = 'list';
}
var filters = (isMultiple) ? JSON.stringify(filterVal) : filterVal;
var request = window.location.pathname + '?tmpl=' + tmpl + '&' + filterName + '=' + filters;
Mautic.loadContent(request, '', 'POST', mQuery(this).data('target'));
});
};
/**
* Converts an input to a color picker
* @param el
*/
Mautic.activateColorPicker = function(el, options) {
let input = mQuery(el);
var pickerOptions = input.data('color-options');
if (!pickerOptions) {
pickerOptions = {
theme: 'bootstrap',
change: function (hex) {
input.trigger('change.minicolors', hex);
}
};
}
if (typeof options == 'object') {
pickerOptions = mQuery.extend(pickerOptions, options);
}
input.minicolors(pickerOptions);
// The previous version of the Minicolors library did not use the # in the value. This is for backwards compatibility.
input.val(input.val().replace('#', ''));
input.on('blur', function() {
input.val(input.val().replace('#', ''));
});
};
/**
* Activates typeahead
* @param el
* @param options
* @returns {*}
*/
Mautic.activateTypeahead = function (el, options) {
if (typeof options == 'undefined' || !mQuery(el).length) {
return;
}
if (typeof options.remote == 'undefined') {
options.remote = (options.action) ? true : false;
}
if (typeof options.prefetch == 'undefined') {
options.prefetch = false;
}
if (typeof options.limit == 'undefined') {
options.limit = 5;
}
if (!options.displayKey) {
options.displayKey = 'value';
}
if (typeof options.multiple == 'undefined') {
options.multiple = false;
}
if (typeof options.minLength == 'undefined') {
options.minLength = 2;
}
if (options.prefetch || options.remote) {
if (typeof options.action == 'undefined') {
return;
}
var sourceOptions = {
datumTokenizer: Bloodhound.tokenizers.obj.whitespace(options.displayKey),
queryTokenizer: Bloodhound.tokenizers.whitespace,
dupDetector: function (remoteMatch, localMatch) {
return (remoteMatch[options.displayKey] == localMatch[options.displayKey]);
},
ttl: 15000,
limit: options.limit
};
var filterClosure = function (list) {
if (typeof list.ignore_wdt != 'undefined') {
delete list.ignore_wdt;
}
if (typeof list.success != 'undefined') {
delete list.success;
}
if (typeof list == 'object') {
if (typeof list[0] != 'undefined') {
//meant to be an array and not an object
list = mQuery.map(list, function (el) {
return el;
});
} else {
//empty object so return empty array
list = [];
}
}
return list;
};
if (options.remote) {
sourceOptions.remote = {
url: mauticAjaxUrl + "?action=" + options.action + "&filter=%QUERY",
filter: filterClosure,
wildcard: '%QUERY',
};
}
if (options.prefetch) {
sourceOptions.prefetch = {
url: mauticAjaxUrl + "?action=" + options.action,
filter: filterClosure
};
}
var theBloodhound = new Bloodhound(sourceOptions);
theBloodhound.initialize();
} else {
var substringMatcher = function (strs, strKeys) {
return function findMatches(q, cb) {
var matches, substrRegex;
// an array that will be populated with substring matches
matches = [];
// regex used to determine if a string contains the substring `q`
substrRegex = new RegExp(q, 'i');
// iterate through the pool of strings and for any string that
// contains the substring `q`, add it to the `matches` array
mQuery.each(strs, function (i, str) {
if (typeof str == 'object') {
str = str[options.displayKey];
}
if (substrRegex.test(str)) {
// the typeahead jQuery plugin expects suggestions to a
// JavaScript object, refer to typeahead docs for more info
var match = {};
match[options.displayKey] = str;
if (strKeys.length && typeof strKeys[i] != 'undefined') {
match['id'] = strKeys[i];
}
matches.push(match);
}
});
cb(matches);
};
};
var lookupOptions = (options.dataOptions) ? options.dataOptions : mQuery(el).data('options');
var lookupKeys = (options.dataOptionKeys) ? options.dataOptionKeys : [];
if (!lookupOptions) {
return;
}
}
var noRrecordMessage = (options.noRrecordMessage) ? options.noRrecordMessage : mQuery(el).data('no-record-message');
var theName = el.replace(/[^a-z0-9\s]/gi, '').replace(/[-\s]/g, '_');
var dataset = {
name: theName,
displayKey: options.displayKey,
source: (typeof theBloodhound != 'undefined') ? theBloodhound.ttAdapter() : substringMatcher(lookupOptions, lookupKeys)
};
if (noRrecordMessage) {
dataset.templates = {
empty: "<p>" + noRrecordMessage + "<p>"
}
}
var theTypeahead = mQuery(el).typeahead(
{
hint: true,
highlight: true,
minLength: options.minLength,
multiple: options.multiple
},
dataset
).on('keypress', function (event) {
if ((event.keyCode || event.which) == 13) {
mQuery(el).typeahead('close');
}
}).on('focus', function() {
if(mQuery(el).typeahead('val') === '' && !options.minLength) {
mQuery(el).data('ttTypeahead').input.trigger('queryChanged', '');
}
});
return theTypeahead;
};
/**
* Activate sortable
*
* @param el
*/
Mautic.activateSortable = function(el) {
var prefix = mQuery(el).attr('data-prefix');
if (mQuery('#' + prefix + '_additem').length) {
mQuery('#' + prefix + '_additem').click(function () {
var count = mQuery('#' + prefix + '_itemcount').val();
var prototype = mQuery('#' + prefix + '_additem').attr('data-prototype');
prototype = prototype.replace(/__name__/g, count);
mQuery(prototype).appendTo(mQuery('#' + prefix + '_list div.list-sortable'));
mQuery('#' + prefix + '_list_' + count).focus();
count++;
mQuery('#' + prefix + '_itemcount').val(count);
return false;
});
}
mQuery('#' + prefix + '_list div.list-sortable').sortable({
items: 'div.sortable',
handle: 'span.postaddon',
axis: 'y',
containment: '#' + prefix + '_list',
stop: function (i) {
var order = 0;
mQuery('#' + prefix + '_list div.list-sortable div.input-group input').each(function () {
var name = mQuery(this).attr('name');
if (mQuery(this).hasClass('sortable-label')) {
name = name.replace(/(\[list\]\[[0-9]+\]\[label\])$/g, '') + '[list][' + order + '][label]';
} else if (mQuery(this).hasClass('sortable-value')) {
name = name.replace(/(\[list\]\[[0-9]+\]\[value\])$/g, '') + '[list][' + order + '][value]';
order++;
} else {
name = name.replace(/(\[list\]\[[0-9]+\])$/g, '') + '[list][' + order + ']';
order++;
}
mQuery(this).attr('name', name);
});
}
});
};
/**
* Close global search results
*/
Mautic.closeGlobalSearchResults = function () {
mQuery('#globalSearchContainer').removeClass('active');
mQuery('#globalSearchDropdown').removeClass('open');
mQuery('body').off('click.globalsearch');
};
/**
* Download a link via iframe
*
* @param link
*/
Mautic.initiateFileDownload = function (link) {
if (mauticContactExportInBackground === 1 && link.indexOf('filetype=csv') >= 0) {
Mautic.processCsvContactExport(link);
return;
}
//initialize download links
mQuery("<iframe/>").attr({
src: link,
style: "visibility:hidden;display:none"
}).appendTo(mQuery('body'));
};
Mautic.processCsvContactExport = function (route) {
mQuery.ajax({
showLoadingBar: true,
url: route,
type: "POST",
dataType: "json",
success: function (response) {
Mautic.processPageContent(response);
if (typeof callback == 'function') {
callback(response);
}
},
error: function (request, textStatus, errorThrown) {
Mautic.processAjaxError(request, textStatus, errorThrown);
}
});
};