//live search vars MauticVars.liveCache = new Array(); MauticVars.lastSearchStr = ""; MauticVars.globalLivecache = new Array(); MauticVars.lastGlobalSearchStr = ""; /** * Check if the the entity ID is temporary (for new entities) * * @param string idInputSelector */ Mautic.isNewEntity = function(idInputSelector) { id = mQuery(idInputSelector); if (id.length) { return id.val().match("^new_"); } return null; }; /** * Get entity ID of pages that have an input with id of entityId * * @returns {*} */ Mautic.getEntityId = function() { return (mQuery('input#entityId').length) ? mQuery('input#entityId').val() : 0; }; /** * Reorder table data * @param name * @param orderby * @param tmpl * @param target */ Mautic.reorderTableData = function (name, orderby, tmpl, target, baseUrl) { if (typeof baseUrl == 'undefined') { baseUrl = window.location.pathname; } if (baseUrl.indexOf('tmpl') == -1) { baseUrl = baseUrl + "?tmpl=" + tmpl } var route = baseUrl + "&name=" + name + "&orderby=" + encodeURIComponent(orderby); Mautic.loadContent(route, '', 'POST', target); }; /** * * @param name * @param filterby * @param filterValue * @param tmpl * @param target */ Mautic.filterTableData = function (name, filterby, filterValue, tmpl, target, baseUrl) { if (typeof baseUrl == 'undefined') { baseUrl = window.location.pathname; } if (baseUrl.indexOf('tmpl') == -1) { baseUrl = baseUrl + "?tmpl=" + tmpl } var value = ''; if (mQuery.isArray(filterValue)) { for (var i = 0; i < filterValue.length; i++) { value += '&value[]=' + encodeURIComponent(filterValue[i]); } } else { value = "&value=" + encodeURIComponent(filterValue) } var route = baseUrl + "&name=" + name + "&filterby=" + encodeURIComponent(filterby) + value Mautic.loadContent(route, '', 'POST', target); }; /** * * @param name * @param limit * @param tmpl * @param target */ Mautic.limitTableData = function (name, limit, tmpl, target, baseUrl) { if (typeof baseUrl == 'undefined') { baseUrl = window.location.pathname; } if (baseUrl.indexOf('tmpl') == -1) { baseUrl = baseUrl + "?tmpl=" + tmpl } var route = baseUrl + "&name=" + name + "&limit=" + limit; Mautic.loadContent(route, '', 'POST', target); }; /** * Filters list based on search contents */ Mautic.filterList = function (e, elId, route, target, liveCacheVar, action, overlayEnabled, overlayTarget) { if (typeof liveCacheVar == 'undefined') { liveCacheVar = "liveCache"; } var el = mQuery('#' + elId); //only submit if the element exists, its a livesearch, or on button click if (el.length && (e.data.livesearch || mQuery(e.target).prop('tagName') == 'BUTTON' || mQuery(e.target).parent().prop('tagName') == 'BUTTON')) { var value = el.val().trim(); //should the content be cleared? if (!value) { //force action since we have no content action = 'clear'; } else if (action == 'clear') { el.val(''); el.typeahead('val', ''); value = ''; } //make the request //@TODO reevaluate search caching as it seems to cause issues if (false && value && value in MauticVars[liveCacheVar]) { var response = {"newContent": MauticVars[liveCacheVar][value]}; response.target = target; response.overlayEnabled = overlayEnabled; response.overlayTarget = overlayTarget; Mautic.processPageContent(response); } else { var searchName = el.attr('name'); if (searchName == 'undefined') { searchName = 'search'; } if (typeof Mautic.liveSearchXhr !== 'undefined') { // ensure current search request is aborted // with different statusText. Mautic['liveSearchXhr'].abort('searchCompleted'); } var btn = "button[data-livesearch-parent='" + elId + "']"; if (mQuery(btn).length && !mQuery(btn).hasClass('btn-nospin') && !Mautic.filterButtonClicked) { Mautic.startIconSpinOnEvent(btn); } var tmpl = mQuery('#' + elId).data('tmpl'); if (!tmpl) { tmpl = 'list'; } var tmplParam = (route.indexOf('tmpl') == -1) ? '&tmpl=' + tmpl : ''; // In a modal? var checkInModalTarget = (overlayTarget) ? overlayTarget : target; var modalParent = mQuery(checkInModalTarget).closest('.modal'); var inModal = mQuery(modalParent).length > 0; if (inModal) { var modalTarget = '#' + mQuery(modalParent).attr('id'); Mautic.startModalLoadingBar(modalTarget); } var showLoading = (inModal) ? false : true; Mautic.liveSearchXhr = mQuery.ajax({ showLoadingBar: showLoading, url: route, type: "GET", data: searchName + "=" + encodeURIComponent(value) + tmplParam, dataType: "json", success: function (response) { //cache the response if (response.newContent) { MauticVars[liveCacheVar][value] = response.newContent; } //note the target to be updated response.target = target; response.overlayEnabled = overlayEnabled; response.overlayTarget = overlayTarget; //update the buttons class and action if (mQuery(btn).length) { if (action == 'clear') { mQuery(btn).attr('data-livesearch-action', 'search'); mQuery(btn).children('i').first().removeClass('ri-eraser-line').addClass('ri-search-line'); } else { mQuery(btn).attr('data-livesearch-action', 'clear'); mQuery(btn).children('i').first().removeClass('ri-search-line').addClass('ri-eraser-line'); } } if (inModal) { Mautic.processModalContent(response); Mautic.stopModalLoadingBar(modalTarget); } else { Mautic.processPageContent(response); Mautic.stopPageLoadingBar(); } }, error: function (request, textStatus, errorThrown) { Mautic.processAjaxError(request, textStatus, errorThrown); //update the buttons class and action if (mQuery(btn).length) { if (action == 'clear') { mQuery(btn).attr('data-livesearch-action', 'search'); mQuery(btn).children('i').first().removeClass('ri-eraser-line').addClass('ri-search-line'); } else { mQuery(btn).attr('data-livesearch-action', 'clear'); mQuery(btn).children('i').first().removeClass('ri-search-line').addClass('ri-eraser-line'); } } }, complete: function() { delete Mautic.liveSearchXhr; delete Mautic.filterButtonClicked; } }); } } }; /** * Apply filter * @param list */ Mautic.setSearchFilter = function (el, searchId, string) { if (typeof searchId == 'undefined') searchId = '#list-search'; else searchId = '#' + searchId; if (string || string === '') { var current = string; } else { var filter = mQuery(el).val(); var current = mQuery('#list-search').typeahead('val') + " " + filter; } //append the filter mQuery(searchId).typeahead('val', current); //submit search var e = mQuery.Event("keypress", {which: 13}); e.data = {}; e.data.livesearch = true; Mautic.filterList( e, 'list-search', mQuery(searchId).attr('data-action'), mQuery(searchId).attr('data-target'), 'liveCache' ); }; /** * Unlock an entity * * @param model * @param id */ Mautic.unlockEntity = function (model, id, parameter) { mQuery.ajax({ url: mauticAjaxUrl, type: "POST", data: "action=unlockEntity&model=" + model + "&id=" + id + "¶meter=" + parameter, dataType: "json" }); }; /** * Toggles published status of an entity * * @param el * @param model * @param id */ Mautic.togglePublishStatus = function (event, el, model, id, extra, backdrop) { event.preventDefault(); var wasPublished = mQuery(el).hasClass('ri-toggle-fill'); var element = mQuery(el); element.removeClass('fa-toggle-on fa-toggle-off').addClass('fa-spin fa-spinner'); //destroy tooltips so it can be regenerated element.tooltip('destroy'); //clear the lookup cache MauticVars.liveCache = new Array(); if (backdrop) { Mautic.activateBackdrop(); } if (extra) { extra = '&' + extra; } element.tooltip('destroy'); mQuery.ajax({ url: mauticAjaxUrl, type: "POST", data: "action=togglePublishStatus&model=" + model + '&id=' + id + extra, dataType: "json", success: function (response) { if (response.reload) { Mautic.redirectWithBackdrop(window.location); } else if (response.statusHtml) { element.replaceWith(response.statusHtml); element.tooltip({html: true, container: 'body'}); } }, error: function (request, textStatus, errorThrown) { var addClass = (wasPublished) ? 'ri-toggle-fill' : 'ri-toggle-line'; element.removeClass('fa-spin fa-spinner').addClass(addClass); Mautic.processAjaxError(request, textStatus, errorThrown); } }); }; /** * Executes a batch action * * @param action */ Mautic.executeBatchAction = function (action, el) { if (typeof Mautic.activeActions == 'undefined') { Mautic.activeActions = {}; } else if (typeof Mautic.activeActions[action] != 'undefined') { // Action is currently being executed return; } var items = Mautic.getCheckedListIds(el, true); var queryGlue = action.indexOf('?') >= 0 ? '&' : '?'; // Append the items to the action to send with the POST var action = action + queryGlue + 'ids=' + items; // Hand over processing to the executeAction method Mautic.executeAction(action); }; /** * Checks that items are checked before showing confirmation * * @param container * @returns int */ Mautic.batchActionPrecheck = function(container) { if (typeof container == 'undefined') { container = ''; } return mQuery(container + ' input[class=list-checkbox]:checked').length; }; /** * Retrieves the IDs of the items checked in a list * * @param el * @param stringify * @returns {*} */ Mautic.getCheckedListIds = function(el, stringify) { var checkboxes = 'input[class=list-checkbox]:checked'; // Check for a target if (typeof el != 'undefined' && el) { var target = mQuery(el).data('target'); if (target) { checkboxes = target + ' ' + checkboxes; } } // Retrieve all of the selected items var items = mQuery(checkboxes).map(function () { return mQuery(this).val(); }).get(); if (stringify) { items = JSON.stringify(items); } return items; };