Spaces:
No application file
No application file
/** | |
* Email & page preview URL builder | |
*/ | |
Mautic.contentPreviewUrlGenerator = { | |
urlBase : 'email/preview', | |
lastUsedObjectId : false, | |
contactId: false, | |
init() { | |
this.lastUsedObjectId = mQuery('#content_preview_settings_object_id').val(); | |
}, | |
/** | |
* @param element mQuery representation | |
* @returns {boolean|string} | |
*/ | |
getElementValue(element) { | |
const value = element.val() | |
if (value === undefined || value.length === 0) { | |
return false; | |
} | |
return value; | |
}, | |
/** | |
* @param {string} elementId | |
* @param {string} value | |
* @returns {boolean|string} | |
*/ | |
setElementValue(elementId, value) { | |
const element = mQuery(elementId); | |
const hasOption = mQuery(elementId + ' option[value="' + value + '"]'); | |
if (hasOption.length > 0) { | |
// This value exists in other chosen element | |
element.val(value); | |
} else { | |
// Value does not exists | |
element.val(""); | |
} | |
// Update chosen UI | |
mQuery(element).trigger('chosen:updated'); | |
}, | |
regenerateUrl : function(newValue, changedElement) { | |
this.urlBase = mQuery("#content_preview_url").attr('data-route'); | |
changedElement = mQuery(changedElement); | |
const elementId = changedElement.attr('id'); | |
const value = this.getElementValue(changedElement); | |
if (elementId === 'content_preview_settings_variant') { | |
this.setElementValue('#content_preview_settings_translation', value); | |
} | |
if (elementId === 'content_preview_settings_translation') { | |
this.setElementValue('#content_preview_settings_variant', value); | |
} | |
if (elementId === 'content_preview_settings_contact_id') { | |
if (newValue === '') { | |
this.contactId = false; | |
} else { | |
this.contactId = value; | |
} | |
newValue = this.lastUsedObjectId; | |
} else if (value !== false) { | |
this.lastUsedObjectId = newValue = value; | |
} | |
let previewUrl = mauticBaseUrl + this.urlBase + '/' + newValue; | |
if (this.contactId !== false) { | |
previewUrl = previewUrl + '?contactId=' + this.contactId; | |
} | |
// Update url in preview input | |
mQuery('#content_preview_url').val(previewUrl); | |
// Update URL in preview button | |
mQuery('#content_preview_url_button').attr('onClick', "window.open('" + previewUrl + "', '_blank');"); | |
} | |
} | |
/** | |
* Used in data-lookup-callback attr of form field in ContentPreviewSettingsType | |
*/ | |
Mautic.updateContactLookupListFilter = function(field, item) { | |
if (item && item.id) { | |
mQuery('#content_preview_settings_contact_id').val(item.id); | |
mQuery(field).val(item.value); | |
Mautic.contentPreviewUrlGenerator.regenerateUrl( | |
item.id, | |
mQuery('#content_preview_settings_contact_id') | |
); | |
} | |
}; | |
/** | |
* Used in data-lookup-callback attr of form field in ContentPreviewSettingsType | |
* Take a look at https://github.com/twitter/typeahead.js/ | |
*/ | |
Mautic.activateContactLookupField = function(fieldOptions, filterId) { | |
const lookupElementId = 'content_preview_settings_contact'; | |
const action = mQuery('#'+ lookupElementId).attr('data-chosen-lookup'); | |
const options = { | |
limit: 20, | |
'searchKey': 'lead.lead', | |
}; | |
Mautic.activateFieldTypeahead(lookupElementId, filterId, options, action); | |
Mautic.contentPreviewUrlGenerator.init(); | |
mQuery('#content_preview_settings_contact').on("change",function(event) { | |
if (event.target.value === '') { | |
// Delete selected contact ID from URL and hidden input | |
Mautic.contentPreviewUrlGenerator.regenerateUrl('', mQuery('#content_preview_settings_contact_id')); | |
} | |
}); | |
}; | |