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')); | |
| } | |
| }); | |
| }; | |