/**
- * Provides the javascript for the mailbox.php script
+ * Provides the javascript for the mailbox.php script (standard view).
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*/
-var keyId,
- startrange = null;
-
-function anySelected()
-{
- return $H(messagelist).keys().detect(function(e) {
- return $('check' + e).checked;
- });
-}
-
-function selectRow(id, select)
-{
- var rid = $(id.replace(/check/, 'row'));
- if (select) {
- rid.addClassName('selectedRow');
- } else {
- // Make sure to remove both regular and -over versions.
- rid.removeClassName('selectedRow');
- rid.removeClassName('selectedRow-over');
- }
- $(id).checked = select;
-}
-
-function imp_confirm(url, msg)
-{
- RedBox.overlay = true;
- RedBox.showHtml('<div id="RB_confirm"><p>' + msg + '</p><input type="button" class="button" onclick="window.location=\'' + url + '\';" value="' + IMP.text.yes + '" />' +
- '<input type="button" class="button" onclick="RedBox.close();" value="' + IMP.text.no + '" /></div>');
-}
-
-function messages_submit(actID)
-{
- if (!anySelected()) {
- alert(IMP.text.mailbox_submit);
- return;
- }
+var ImpMessage = {
+ // The following variables are defined in mailbox.php:
+ // messagelist, sortlimit
+ keyId: null,
+ startrange: null,
- if (actID == 'delete_messages') {
- if (IMP.conf.pop3 && !confirm(IMP.text.mailbox_delete)) {
- return;
+ anySelected: function()
+ {
+ return $H(this.messagelist).keys().detect(function(e) {
+ return $('check' + e).checked;
+ });
+ },
+
+ selectRow: function(id, select)
+ {
+ var rid = $(id.replace(/check/, 'row'));
+
+ if (select) {
+ rid.addClassName('selectedRow');
+ } else {
+ // Make sure to remove both regular and -over versions.
+ rid.removeClassName('selectedRow').removeClassName('selectedRow-over');
}
- } else if (actID == 'spam_report') {
- if (!confirm(IMP.text.spam_report)) {
+
+ $(id).checked = select;
+ },
+
+ confirmDialog: function(url, msg)
+ {
+ RedBox.overlay = true;
+ RedBox.showHtml('<div id="RB_confirm"><p>' + msg + '</p><input type="button" class="button" onclick="window.location=\'' + url + '\';" value="' + IMP.text.yes + '" />' +
+ '<input type="button" class="button" onclick="RedBox.close();" value="' + IMP.text.no + '" /></div>');
+ },
+
+ submit: function(actID)
+ {
+ if (!this.anySelected()) {
+ alert(IMP.text.mailbox_submit);
return;
}
- } else if (actID == 'notspam_report') {
- if (!confirm(IMP.text.notspam_report)) {
+
+ switch (actID) {
+ case 'delete_messages':
+ if (IMP.conf.pop3 && !confirm(IMP.text.mailbox_delete)) {
+ return;
+ }
+ break;
+
+ case 'spam_report':
+ if (!confirm(IMP.text.spam_report)) {
+ return;
+ }
+ break;
+
+ case 'nostpam_report':
+ if (!confirm(IMP.text.notspam_report)) {
+ return;
+ }
+ break;
+ }
+
+ $('actionID').setValue(actID);
+ $('messages').submit();
+ },
+
+ makeSelection: function(form)
+ {
+ var flag = '';
+
+ switch (parseInt(form)) {
+ case -1:
+ if ($('checkAll').checked) {
+ flag = '!';
+ }
+ flag += IMP.conf.IMP_ALL;
+ break;
+
+ case 1:
+ flag = $F('filter1');
+ break;
+
+ default:
+ flag = $F('filter2');
+ }
+
+ // Fixes Bug #6893
+ if (flag.empty()) {
return;
+ } else if (flag.startsWith('!')) {
+ this.selectFlagged(parseInt(flag.substring(1)), false);
+ } else if (flag.startsWith('+')) {
+ this.selectFlagged(flag.substring(0, 1), null);
+ } else {
+ this.selectFlagged(parseInt(flag), true);
}
- }
- $('actionID').setValue(actID);
- $('messages').submit();
-}
-
-function makeSelection(form)
-{
- var flag = '';
-
- switch (parseInt(form)) {
- case -1:
- if ($('checkAll').checked) {
- flag = '!';
+
+ // Reset the form.
+ switch (parseInt(form)) {
+ case 1:
+ $('select1').reset();
+ break;
+
+ default:
+ $('select2').reset();
}
- flag += IMP.conf.IMP_ALL;
- break;
+ },
- case 1:
- flag = $F('filter1');
- break;
+ selectRange: function(e)
+ {
+ var id = e.element().readAttribute('id'),
+ checkbox = $(id),
+ count = 0,
+ checked, elts;
- default:
- flag = $F('filter2');
- }
+ if (!checkbox) {
+ return;
+ }
- // Fixes Bug #6893
- if (flag.empty()) {
- return;
- } else if (flag.startsWith('!')) {
- selectFlagged(parseInt(flag.substring(1)), false);
- } else if (flag.startsWith('+')) {
- selectFlagged(flag.substring(0, 1), null);
- } else {
- selectFlagged(parseInt(flag), true);
- }
+ checked = checkbox.checked;
+
+ if (this.startrange !== null && e.shiftKey) {
+ elts = [ $(this.startrange).readAttribute('id'), checkbox.readAttribute('id') ];
+ $H(this.messagelist).keys().detect(function(r) {
+ r = 'check' + r;
+ if (elts.indexOf(r) != -1) {
+ ++count;
+ }
+ if (count) {
+ this.selectRow(r, checked);
+ if (count == 2) {
+ return true;
+ }
+ }
+ }, this);
+ } else {
+ this.selectRow(id, checked);
+ }
- // Reset the form.
- switch (parseInt(form)) {
- case -1:
- break;
+ this.startrange = id;
+ },
- case 1:
- $('select1').reset();
- break;
+ updateFolders: function(form)
+ {
+ var tm1 = $('targetMailbox1'),
+ tm2 = $('targetMailbox2');
- default:
- $('select2').reset();
- }
-}
-
-function selectRange(event)
-{
- Event.extend(event);
- var id = event.element().id, checkbox = $(id);
- if (!checkbox) {
- return;
- }
- var checked = checkbox.checked;
-
- if (startrange !== null && event.shiftKey) {
- var elts = [ $(startrange).id, checkbox.id ];
- var count = 0;
- $H(messagelist).keys().detect(function(r) {
- r = 'check' + r;
- if (elts.indexOf(r) != -1) {
- ++count;
+ if (tm2) {
+ if ((form == 1 && $F(tm1) != "") ||
+ (form == 2 && $F(tm2) != "")) {
+ tm1.selectedIndex = tm2.selectedIndex = (form == 1)
+ ? tm1.selectedIndex
+ : tm2.selectedIndex;
}
- if (count) {
- selectRow(r, checked);
- if (count == 2) {
- return true;
+ }
+ },
+
+ transfer: function(actID, form)
+ {
+ var newFolder, tmbox;
+
+ if (this.anySelected()) {
+ tmbox = $('targetMbox');
+ tmbox.setValue((form == 1) ? $F('targetMailbox1') : $F('targetMailbox2'));
+
+ // Check for a mailbox actually being selected.
+ if ($F(tmbox) == '*new*') {
+ newFolder = prompt(IMP.text.newfolder, '');
+ if (newFolder != null && newFolder != '') {
+ $('newMbox').setValue(1);
+ tmbox.setValue(newFolder);
+ this.submit(actID);
+ }
+ } else {
+ if ($F(tmbox) == '') {
+ alert(IMP.text.target_mbox);
+ } else {
+ this.submit(actID);
}
}
- });
- } else {
- selectRow(id, checked);
- }
- startrange = id;
-}
-
-function updateFolders(form)
-{
- var tm2 = $('targetMailbox2');
- if (tm2) {
- var tm1 = $('targetMailbox1');
- if ((form == 1 && $F(tm1) != "") ||
- (form == 2 && $F(tm2) != "")) {
- var index = (form == 1) ? tm1.selectedIndex : tm2.selectedIndex;
- tm1.selectedIndex = tm2.selectedIndex = index;
+ } else {
+ alert(IMP.text.mailbox_selectone);
}
- }
-}
-
-function transfer(actID, form)
-{
- if (anySelected()) {
- var tmbox = $('targetMbox');
- tmbox.setValue((form == 1) ? $F('targetMailbox1') : $F('targetMailbox2'));
-
- // Check for a mailbox actually being selected.
- if ($F(tmbox) == '*new*') {
- var newFolder = prompt(IMP.text.newfolder, '');
- if (newFolder != null && newFolder != '') {
- $('newMbox').setValue(1);
- tmbox.setValue(newFolder);
- messages_submit(actID);
+ },
+
+ // Put everything reliant on IMAP flags in this section.
+ selectFlagged: function(flag, val)
+ {
+ $H(this.messagelist).keys().each(function(e) {
+ var check, elt = $('check' + e);
+ if (flag == '+') {
+ check = !elt.checked;
+ } else if (flag & this.messagelist[e]) {
+ check = val;
+ } else {
+ check = !val;
}
- } else {
- if ($F(tmbox) == '') {
- alert(IMP.text.target_mbox);
+ this.selectRow(elt.id, check);
+ }, this);
+ },
+
+ flagMessages: function(form)
+ {
+ var f1 = $('flag1'), f2 = $('flag2');
+
+ if ((form == 1 && $F(f1) != "") ||
+ (form == 2 && $F(f2) != "")) {
+ if (this.anySelected()) {
+ // Can't use $() here. See Bug #4736.
+ document.messages.flag.value = (form == 1) ? $F(f1) : $F(f2);
+ this.submit('flag_messages');
} else {
- messages_submit(actID);
+ if (form == 1) {
+ f1.selectedIndex = 0;
+ } else {
+ f2.selectedIndex = 0;
+ }
+ alert(IMP.text.mailbox_selectone);
}
}
- } else {
- alert(IMP.text.mailbox_selectone);
- }
-}
-
-// Put everything reliant on IMAP flags in this section.
-function selectFlagged(flag, val)
-{
- $H(messagelist).keys().each(function(e) {
- var check, elt = $('check' + e);
- if (flag == '+') {
- check = !elt.checked;
- } else if (flag & messagelist[e]) {
- check = val;
- } else {
- check = !val;
+ },
+
+ getMessage: function(id, offset)
+ {
+ if (!offset) {
+ return id;
}
- selectRow(elt.id, check);
- });
-}
-
-function flagMessages(form)
-{
- var f1 = $('flag1'), f2 = $('flag2');
- if ((form == 1 && $F(f1) != "") ||
- (form == 2 && $F(f2) != "")) {
- if (anySelected()) {
- // Can't use $() here. See Bug #4736.
- document.messages.flag.value = (form == 1) ? $F(f1) : $F(f2);
- messages_submit('flag_messages');
- } else {
- if (form == 1) {
- f1.selectedIndex = 0;
- } else {
- f2.selectedIndex = 0;
+
+ var mlist = $H(this.messagelist).keys(),
+ i = mlist.indexOf(id),
+ j = i + offset;
+
+ if (i != -1) {
+ if (j >= 0 && j < mlist.length) {
+ return mlist[j];
}
- alert(IMP.text.mailbox_selectone);
}
- }
-}
-function getMessage(id, offset)
-{
- if (!offset) {
- return id;
- }
+ return '';
+ },
+
+ changeHandler: function(e)
+ {
+ var id = e.element().readAttribute('id');
- var mlist = $H(messagelist).keys();
- var i = mlist.indexOf(id);
- if (i != -1) {
- var j = i + offset;
- if (j >= 0 && j < mlist.length) {
- return mlist[j];
+ if (id.startsWith('filter')) {
+ this.makeSelection(id.substring(6));
+ } else if (id.startsWith('flag')) {
+ this.makeSelection(id.substring(4));
+ } else if (id.startsWith('targetMailbox')) {
+ this.updateFolders(id.substring(13));
}
- }
- return '';
-}
-
-function onKeyDownHandler(e)
-{
- var o = e.element();
- var key = e.keyCode;
- var next, old;
-
- if (e.altKey || e.ctrlKey) {
- var checkinc, subjinc;
-
- switch (key) {
- case Event.KEY_UP:
- checkinc = -1;
- subjinc = -1;
- break;
+ },
- case Event.KEY_DOWN:
- checkinc = 1;
- subjinc = 1;
- break;
+ clickHandler: function(e)
+ {
+ var elt = e.element(),
+ id = elt.readAttribute('id');
- default:
+ if (elt.match('.msgactions A.widget')) {
+ if (elt.hasClassName('permdeleteAction')) {
+ if (confirm(IMP.text.mailbox_delete)) {
+ this.submit('delete_messages');
+ }
+ } else if (elt.hasClassName('deleteAction')) {
+ this.submit('delete_messages');
+ } else if (elt.hasClassName('undeleteAction')) {
+ this.submit('undelete_messages');
+ } else if (elt.hasClassName('blacklistAction')) {
+ this.submit('blacklist');
+ } else if (elt.hasClassName('whitelistAction')) {
+ this.submit('whitelist');
+ } else if (elt.hasClassName('whitelistAction')) {
+ this.submit('fwd_digest');
+ } else if (elt.hasClassName('spamAction')) {
+ this.submit('spam_report');
+ } else if (elt.hasClassName('notspamAction')) {
+ this.submit('notspam_report');
+ } else if (elt.hasClassName('viewAction')) {
+ this.submit('view_messages');
+ }
+
+ e.stop();
return;
}
- if (typeof messagelist == 'undefined') {
+ if (!id) {
return;
}
- if (o.id.indexOf('check') == 0 && o.tagName == 'INPUT') {
- old = o.id.substring(5);
- keyId = getMessage(old, checkinc);
- next = $('subject' + keyId);
- } else if (o.id.indexOf('subject') == 0 && o.tagName == 'A') {
- old = o.id.substring(7);
- keyId = getMessage(old, subjinc);
- next = $('subject' + keyId);
- } else {
- keyId = ((checkinc + subjinc) > 0) ? $H(messagelist).keys().first() : $H(messagelist).keys().last();
- if (Event.KEY_UP || Event.KEY_DOWN) {
- next = $('subject' + keyId);
+ switch (id) {
+ case 'checkheader':
+ case 'checkAll':
+ if (id == 'checkheader') {
+ $('checkAll').checked = !$('checkAll').checked;
}
+ this.makeSelection(-1);
+ return;
}
- } else if (key == 32 &&
+
+ if (id.startsWith('check') && elt.hasClassName('checkbox')) {
+ this.selectRange(e);
+ } else if (!this.sortlimit &&
+ elt.match('TH') &&
+ elt.up('TABLE.messageList')) {
+ document.location.href = elt.down('A').href;
+ }
+ },
+
+ keyDownHandler: function(e)
+ {
+ var o = e.element(),
+ key = e.keyCode,
+ checkinc, loc, next, nextId, old, row, subjinc;
+
+ if (e.altKey || e.ctrlKey) {
+ switch (key) {
+ case Event.KEY_UP:
+ checkinc = -1;
+ subjinc = -1;
+ break;
+
+ case Event.KEY_DOWN:
+ checkinc = 1;
+ subjinc = 1;
+ break;
+
+ default:
+ return;
+ }
+
+ if (typeof this.messagelist == 'undefined') {
+ return;
+ }
+
+ if (o.id.indexOf('check') == 0 && o.tagName == 'INPUT') {
+ old = o.id.substring(5);
+ this.keyId = this.getMessage(old, checkinc);
+ next = $('subject' + this.keyId);
+ } else if (o.id.indexOf('subject') == 0 && o.tagName == 'A') {
+ old = o.id.substring(7);
+ this.keyId = this.getMessage(old, subjinc);
+ next = $('subject' + this.keyId);
+ } else {
+ this.keyId = ((checkinc + subjinc) > 0) ? $H(this.messagelist).keys().first() : $H(this.messagelist).keys().last();
+ if (Event.KEY_UP || Event.KEY_DOWN) {
+ next = $('subject' + this.keyId);
+ }
+ }
+ } else if (key == 32 &&
o.id.indexOf('subject') == 0 &&
o.tagName == 'A') {
- // Space key - toggle selection of the current message.
- startrange = 'check' + keyId;
- selectRow(startrange, !$(startrange).checked);
- } else if (!e.shiftKey) {
- var loc;
- if (key == Event.KEY_LEFT && $('prev')) {
- loc = $('prev').href;
- } else if (key == Event.KEY_RIGHT && $('next')) {
- loc = $('next').href;
- }
+ // Space key - toggle selection of the current message.
+ this.startrange = 'check' + this.keyId;
+ this.selectRow(this.startrange, !$(this.startrange).checked);
+ } else if (!e.shiftKey) {
+ if (key == Event.KEY_LEFT && $('prev')) {
+ loc = $('prev').href;
+ } else if (key == Event.KEY_RIGHT && $('next')) {
+ loc = $('next').href;
+ }
- if (loc) {
- document.location.href = loc;
+ if (loc) {
+ document.location.href = loc;
+ }
+ return;
+ } else {
+ return;
}
- return;
- } else {
- return;
- }
- if (next) {
- next.focus();
- var row = $('row' + keyId);
- if (e.altKey) {
- var nextId = next.id.replace(/subject/, 'check');
- selectRow(nextId, !$(nextId).checked);
- } else if (old != next.id && row.className.indexOf('-over') == -1) {
- row.className += '-over';
- }
- if (old) {
- row = $('row' + old);
- if (old != next.id) {
- row.className = row.className.replace(/-over/, '');
+ if (next) {
+ next.focus();
+ row = $('row' + this.keyId);
+ if (e.altKey) {
+ nextId = next.id.replace(/subject/, 'check');
+ this.selectRow(nextId, !$(nextId).checked);
+ } else if (old != next.id && row.className.indexOf('-over') == -1) {
+ row.className += '-over';
+ }
+ if (old) {
+ row = $('row' + old);
+ if (old != next.id) {
+ row.className = row.className.replace(/-over/, '');
+ }
}
}
+
+ e.stop();
+ },
+
+ submitHandler: function(e)
+ {
+ if (e.element().readAttribute('id').startsWith('select')) {
+ e.stop();
+ }
}
- e.stop();
-}
+};
-if (IMP.conf.hasDOM) {
- document.observe('dom:loaded', function() {
- document.observe('keydown', onKeyDownHandler);
- });
-}
+document.observe('change', ImpMessage.changeHandler.bindAsEventListener(ImpMessage));
+document.observe('click', ImpMessage.clickHandler.bindAsEventListener(ImpMessage));
+document.observe('keydown', ImpMessage.keyDownHandler.bindAsEventListener(ImpMessage));
+document.observe('submit', ImpMessage.submitHandler.bindAsEventListener(ImpMessage));
if (!$search_mbox) {
$hdr_template->set('search', Horde::link(Util::addParameter(Horde::applicationUrl('search.php'), 'search_mailbox', $imp_mbox['mailbox']), sprintf(_("Search %s"), $rawtitle)) . Horde::img('search.png', _("Search"), '', $graphicsdir) . '</a>');
if (!$readonly) {
- $hdr_template->set('empty', Horde::link(Util::addParameter($mailbox_imp_url, array('actionID' => 'empty_mailbox', 'mailbox' => $imp_mbox['mailbox'], 'mailbox_token' => $mailbox_token)), _("Empty folder"), '', '', "imp_confirm(this.href, '" . addslashes(_("Are you sure you wish to delete all mail in this folder?")) . "'); return false;") . Horde::img('empty_spam.png', _("Empty folder")) . '</a>');
+ $hdr_template->set('empty', Horde::link(Util::addParameter($mailbox_imp_url, array('actionID' => 'empty_mailbox', 'mailbox' => $imp_mbox['mailbox'], 'mailbox_token' => $mailbox_token)), _("Empty folder"), '', '', "ImpMessage.confirmDialog(this.href, '" . addslashes(_("Are you sure you wish to delete all mail in this folder?")) . "'); return false;") . Horde::img('empty_spam.png', _("Empty folder")) . '</a>');
}
} else {
if ($imp_search->isEditableVFolder()) {
$a_template = new IMP_Template();
if ($use_trash &&
(($imp_mbox['mailbox'] == (IMP::folderPref($prefs->getValue('trash_folder'), true))) || ($vtrash !== null))) {
- $a_template->set('delete', Horde::widget('#', _("Delete"), 'widget', '', "if (confirm('" . addslashes(_("Are you sure you wish to permanently delete these messages?")) . "')) { messages_submit('delete_messages'); } return false;", _("_Delete")));
+ $a_template->set('delete', Horde::widget('#', _("Delete"), 'widget permdeleteAction', '', '', _("_Delete")));
} else {
- $a_template->set('delete', Horde::widget('#', _("Delete"), 'widget', '', "messages_submit('delete_messages'); return false;", _("_Delete")));
+ $a_template->set('delete', Horde::widget('#', _("Delete"), 'widget deleteAction', '', '', _("_Delete")));
}
if ($showdelete['purge'] || ($vtrash !== null)) {
- $a_template->set('undelete', Horde::widget('#', _("Undelete"), 'widget', '', "messages_submit('undelete_messages'); return false;", _("_Undelete")));
+ $a_template->set('undelete', Horde::widget('#', _("Undelete"), 'widget undeleteAction', '', '', _("_Undelete")));
}
if ($showdelete['purge']) {
}
if (!$readonly && $registry->hasMethod('mail/blacklistFrom')) {
- $a_template->set('blacklist', Horde::widget('#', _("Blacklist"), 'widget', '', "messages_submit('blacklist'); return false;", _("_Blacklist")));
+ $a_template->set('blacklist', Horde::widget('#', _("Blacklist"), 'widget blacklistAction', '', '', _("_Blacklist")));
}
if (!$readonly && $registry->hasMethod('mail/whitelistFrom')) {
- $a_template->set('whitelist', Horde::widget('#', _("Whitelist"), 'widget', '', "messages_submit('whitelist'); return false;", _("_Whitelist")));
+ $a_template->set('whitelist', Horde::widget('#', _("Whitelist"), 'widget whitelistAction', '', '', _("_Whitelist")));
}
if (empty($conf['hooks']['disable_compose']) || !Horde::callHook('_imp_hook_disable_compose', array(false), 'imp')) {
- $a_template->set('forward', Horde::widget('#', _("Forward"), 'widget', '', "messages_submit('fwd_digest'); return false;", _("Fo_rward")));
+ $a_template->set('forward', Horde::widget('#', _("Forward"), 'widget forwardAction', '', '', _("Fo_rward")));
}
if (!$readonly &&
$conf['spam']['reporting'] &&
($conf['spam']['spamfolder'] ||
($imp_mbox['mailbox'] != IMP::folderPref($prefs->getValue('spam_folder'), true)))) {
- $a_template->set('spam', Horde::widget('#', _("Report as Spam"), 'widget', '', "messages_submit('spam_report'); return false;", _("Report as Spam")));
+ $a_template->set('spam', Horde::widget('#', _("Report as Spam"), 'widget spamAction', '', '', _("Report as Spam")));
}
if (!$readonly &&
$conf['notspam']['reporting'] &&
(!$conf['notspam']['spamfolder'] ||
($imp_mbox['mailbox'] == IMP::folderPref($prefs->getValue('spam_folder'), true)))) {
- $a_template->set('notspam', Horde::widget('#', _("Report as Innocent"), 'widget', '', "messages_submit('notspam_report'); return false;", _("Report as Innocent")));
+ $a_template->set('notspam', Horde::widget('#', _("Report as Innocent"), 'widget notspamAction', '', '', _("Report as Innocent")));
}
- $a_template->set('view_messages', Horde::widget('#', _("View Messages"), 'widget', '', "messages_submit('view_messages'); return false;", _("View Messages")));
+ $a_template->set('view_messages', Horde::widget('#', _("View Messages"), 'widget viewAction', '', '', _("View Messages")));
echo $a_template->fetch(IMP_TEMPLATES . '/mailbox/actions.html');
}
echo $n_template->fetch(IMP_TEMPLATES . '/mailbox/navbar.html');
}
-IMP::addInlineScript('var messagelist = ' . Horde_Serialize::serialize($ids, SERIALIZE_JSON, NLS::getCharset()) . ';');
+IMP::addInlineScript(array(
+ 'ImpMessage.messagelist = ' . Horde_Serialize::serialize($ids, SERIALIZE_JSON, NLS::getCharset()),
+ 'ImpMessage.sortlimit = ' . intval($sortpref['limit'])
+));
+
require $registry->get('templates', 'horde') . '/common-footer.inc';