$(function() { const labels = rcmail.env.aliasmanager_labels || {}; function call(action, data, onSuccess) { data = $.extend({_token: rcmail.env.request_token}, data); $.ajax({ type: 'POST', url: rcmail.url('plugin.aliasmanager-' + action).replace(/&_unlock=[^&]*/, ''), data: data, dataType: 'json', success: function(response) { if (response.success) { onSuccess(response.data || {}); } else { rcmail.display_message(response.message, 'error'); updateAliasesList(); } }, error: function() { rcmail.display_message(labels.list_failed, 'error'); } }); } function renderRow(row, i) { const id = 'toggle-active-' + i; const toggle = $('') .attr('id', id) .attr('data-email', row.email) .prop('checked', row.active); const copy = $('') .attr('data-email', row.email) .text(labels.copy); const del = $('') .attr('data-email', row.email) .text(labels.delete); return $('') .append($('').append($('').text(row.email))) .append($('').text(row.created)) .append($('').append( $('
') .append(toggle) .append($('').attr('for', id)) )) .append($('').append(copy, ' ', del)); } function updateAliasesList() { call('get-alias-list', {}, function(data) { const list = $('.alias-list').empty(); data.alias_list.forEach(function(row, i) { list.append(renderRow(row, i)); }); list.append($('')); applyFilter(); }); } // Hides rows that do not match the search query, shows a placeholder row when nothing is left function applyFilter() { const query = $('#alias-search').val().trim().toLowerCase(); const rows = $('.alias-list tr').not('.alias-empty-row'); let visible = 0; rows.each(function() { const match = !query || $(this).find('.alias-email').text().toLowerCase().indexOf(query) !== -1; $(this).toggle(match); if (match) { visible++; } }); $('.alias-empty-row') .toggle(visible === 0) .find('td') .text(rows.length ? labels.no_matches : labels.empty); } let searchTimer; $(document).on('input', '#alias-search', function() { clearTimeout(searchTimer); searchTimer = setTimeout(applyFilter, 250); }); function addAlias() { const input = $('[name=alias_new_name]'); const name = input.val().trim(); if (!/[a-z0-9]/i.test(name)) { rcmail.display_message(labels.name_required, 'warning'); return; } call('add-alias', {email: name}, function() { input.val(''); updateAliasesList(); }); } $(document).on('submit', '#aliasmanager-form', function(e) { e.preventDefault(); addAlias(); }); $(document).on('change', '.btn-aliasmanager-toggle-alias', function() { call('toggle-alias', { email: $(this).attr('data-email'), state: $(this).is(':checked'), }, function() {}); }); $(document).on('click', '.btn-aliasmanager-delete-alias', function() { if (confirm(labels.confirm_delete + '\n' + $(this).attr('data-email'))) { call('delete-alias', {email: $(this).attr('data-email')}, updateAliasesList); } }); $(document).on('click', '.btn-aliasmanager-copy-alias', function() { const text = $(this).attr('data-email'); if (navigator.clipboard) { navigator.clipboard.writeText(text).then(function() { rcmail.display_message(labels.copied, 'confirmation'); }); } }); updateAliasesList(); });