Spaces:
No application file
No application file
//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; | |
}; | |