Update mailbox javascript.
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 10 Feb 2009 01:43:20 +0000 (18:43 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 10 Feb 2009 02:07:32 +0000 (19:07 -0700)
imp/js/mailbox.js
imp/js/src/mailbox.js
imp/mailbox.php
imp/templates/javascript_defs.php
imp/templates/mailbox/mailbox.html
imp/templates/mailbox/message_headers.html
imp/templates/mailbox/navbar.html

index c7fecec..5345695 100644 (file)
@@ -1 +1 @@
-var keyId,startrange=null;function anySelected(){return $H(messagelist).keys().detect(function(a){return $("check"+a).checked})}function selectRow(c,a){var b=$(c.replace(/check/,"row"));if(a){b.addClassName("selectedRow")}else{b.removeClassName("selectedRow");b.removeClassName("selectedRow-over")}$(c).checked=a}function imp_confirm(a,b){RedBox.overlay=true;RedBox.showHtml('<div id="RB_confirm"><p>'+b+'</p><input type="button" class="button" onclick="window.location=\''+a+'\';" value="'+IMP.text.yes+'" /><input type="button" class="button" onclick="RedBox.close();" value="'+IMP.text.no+'" /></div>')}function messages_submit(a){if(!anySelected()){alert(IMP.text.mailbox_submit);return}if(a=="delete_messages"){if(IMP.conf.pop3&&!confirm(IMP.text.mailbox_delete)){return}}else{if(a=="spam_report"){if(!confirm(IMP.text.spam_report)){return}}else{if(a=="notspam_report"){if(!confirm(IMP.text.notspam_report)){return}}}}$("actionID").setValue(a);$("messages").submit()}function makeSelection(b){var a="";switch(parseInt(b)){case-1:if($("checkAll").checked){a="!"}a+=IMP.conf.IMP_ALL;break;case 1:a=$F("filter1");break;default:a=$F("filter2")}if(a.empty()){return}else{if(a.startsWith("!")){selectFlagged(parseInt(a.substring(1)),false)}else{if(a.startsWith("+")){selectFlagged(a.substring(0,1),null)}else{selectFlagged(parseInt(a),true)}}}switch(parseInt(b)){case-1:break;case 1:$("select1").reset();break;default:$("select2").reset()}}function selectRange(c){Event.extend(c);var f=c.element().id,d=$(f);if(!d){return}var b=d.checked;if(startrange!==null&&c.shiftKey){var e=[$(startrange).id,d.id];var a=0;$H(messagelist).keys().detect(function(g){g="check"+g;if(e.indexOf(g)!=-1){++a}if(a){selectRow(g,b);if(a==2){return true}}})}else{selectRow(f,b)}startrange=f}function updateFolders(d){var a=$("targetMailbox2");if(a){var b=$("targetMailbox1");if((d==1&&$F(b)!="")||(d==2&&$F(a)!="")){var c=(d==1)?b.selectedIndex:a.selectedIndex;b.selectedIndex=a.selectedIndex=c}}}function transfer(d,b){if(anySelected()){var a=$("targetMbox");a.setValue((b==1)?$F("targetMailbox1"):$F("targetMailbox2"));if($F(a)=="*new*"){var c=prompt(IMP.text.newfolder,"");if(c!=null&&c!=""){$("newMbox").setValue(1);a.setValue(c);messages_submit(d)}}else{if($F(a)==""){alert(IMP.text.target_mbox)}else{messages_submit(d)}}}else{alert(IMP.text.mailbox_selectone)}}function selectFlagged(a,b){$H(messagelist).keys().each(function(f){var c,d=$("check"+f);if(a=="+"){c=!d.checked}else{if(a&messagelist[f]){c=b}else{c=!b}}selectRow(d.id,c)})}function flagMessages(b){var a=$("flag1"),c=$("flag2");if((b==1&&$F(a)!="")||(b==2&&$F(c)!="")){if(anySelected()){document.messages.flag.value=(b==1)?$F(a):$F(c);messages_submit("flag_messages")}else{if(b==1){a.selectedIndex=0}else{c.selectedIndex=0}alert(IMP.text.mailbox_selectone)}}}function getMessage(e,d){if(!d){return e}var a=$H(messagelist).keys();var c=a.indexOf(e);if(c!=-1){var b=c+d;if(b>=0&&b<a.length){return a[b]}}return""}function onKeyDownHandler(i){var b=i.element();var j=i.keyCode;var f,c;if(i.altKey||i.ctrlKey){var d,g;switch(j){case Event.KEY_UP:d=-1;g=-1;break;case Event.KEY_DOWN:d=1;g=1;break;default:return}if(typeof messagelist=="undefined"){return}if(b.id.indexOf("check")==0&&b.tagName=="INPUT"){c=b.id.substring(5);keyId=getMessage(c,d);f=$("subject"+keyId)}else{if(b.id.indexOf("subject")==0&&b.tagName=="A"){c=b.id.substring(7);keyId=getMessage(c,g);f=$("subject"+keyId)}else{keyId=((d+g)>0)?$H(messagelist).keys().first():$H(messagelist).keys().last();if(Event.KEY_UP||Event.KEY_DOWN){f=$("subject"+keyId)}}}}else{if(j==32&&b.id.indexOf("subject")==0&&b.tagName=="A"){startrange="check"+keyId;selectRow(startrange,!$(startrange).checked)}else{if(!i.shiftKey){var h;if(j==Event.KEY_LEFT&&$("prev")){h=$("prev").href}else{if(j==Event.KEY_RIGHT&&$("next")){h=$("next").href}}if(h){document.location.href=h}return}else{return}}}if(f){f.focus();var k=$("row"+keyId);if(i.altKey){var a=f.id.replace(/subject/,"check");selectRow(a,!$(a).checked)}else{if(c!=f.id&&k.className.indexOf("-over")==-1){k.className+="-over"}}if(c){k=$("row"+c);if(c!=f.id){k.className=k.className.replace(/-over/,"")}}}i.stop()}if(IMP.conf.hasDOM){document.observe("dom:loaded",function(){document.observe("keydown",onKeyDownHandler)})};
\ No newline at end of file
+var ImpMessage={keyId:null,startrange:null,anySelected:function(){return $H(this.messagelist).keys().detect(function(a){return $("check"+a).checked})},selectRow:function(c,a){var b=$(c.replace(/check/,"row"));if(a){b.addClassName("selectedRow")}else{b.removeClassName("selectedRow").removeClassName("selectedRow-over")}$(c).checked=a},confirmDialog:function(a,b){RedBox.overlay=true;RedBox.showHtml('<div id="RB_confirm"><p>'+b+'</p><input type="button" class="button" onclick="window.location=\''+a+'\';" value="'+IMP.text.yes+'" /><input type="button" class="button" onclick="RedBox.close();" value="'+IMP.text.no+'" /></div>')},submit:function(a){if(!this.anySelected()){alert(IMP.text.mailbox_submit);return}switch(a){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(a);$("messages").submit()},makeSelection:function(b){var a="";switch(parseInt(b)){case-1:if($("checkAll").checked){a="!"}a+=IMP.conf.IMP_ALL;break;case 1:a=$F("filter1");break;default:a=$F("filter2")}if(a.empty()){return}else{if(a.startsWith("!")){this.selectFlagged(parseInt(a.substring(1)),false)}else{if(a.startsWith("+")){this.selectFlagged(a.substring(0,1),null)}else{this.selectFlagged(parseInt(a),true)}}}switch(parseInt(b)){case 1:$("select1").reset();break;default:$("select2").reset()}},selectRange:function(f){var g=f.element().readAttribute("id"),c=$(g),b=0,a,d;if(!c){return}a=c.checked;if(this.startrange!==null&&f.shiftKey){d=[$(this.startrange).readAttribute("id"),c.readAttribute("id")];$H(this.messagelist).keys().detect(function(e){e="check"+e;if(d.indexOf(e)!=-1){++b}if(b){this.selectRow(e,a);if(b==2){return true}}},this)}else{this.selectRow(g,a)}this.startrange=g},updateFolders:function(c){var b=$("targetMailbox1"),a=$("targetMailbox2");if(a){if((c==1&&$F(b)!="")||(c==2&&$F(a)!="")){b.selectedIndex=a.selectedIndex=(c==1)?b.selectedIndex:a.selectedIndex}}},transfer:function(d,b){var c,a;if(this.anySelected()){a=$("targetMbox");a.setValue((b==1)?$F("targetMailbox1"):$F("targetMailbox2"));if($F(a)=="*new*"){c=prompt(IMP.text.newfolder,"");if(c!=null&&c!=""){$("newMbox").setValue(1);a.setValue(c);this.submit(d)}}else{if($F(a)==""){alert(IMP.text.target_mbox)}else{this.submit(d)}}}else{alert(IMP.text.mailbox_selectone)}},selectFlagged:function(a,b){$H(this.messagelist).keys().each(function(f){var c,d=$("check"+f);if(a=="+"){c=!d.checked}else{if(a&this.messagelist[f]){c=b}else{c=!b}}this.selectRow(d.id,c)},this)},flagMessages:function(b){var a=$("flag1"),c=$("flag2");if((b==1&&$F(a)!="")||(b==2&&$F(c)!="")){if(this.anySelected()){document.messages.flag.value=(b==1)?$F(a):$F(c);this.submit("flag_messages")}else{if(b==1){a.selectedIndex=0}else{c.selectedIndex=0}alert(IMP.text.mailbox_selectone)}}},getMessage:function(e,d){if(!d){return e}var a=$H(this.messagelist).keys(),c=a.indexOf(e),b=c+d;if(c!=-1){if(b>=0&&b<a.length){return a[b]}}return""},changeHandler:function(a){var b=a.element().readAttribute("id");if(b.startsWith("filter")){this.makeSelection(b.substring(6))}else{if(b.startsWith("flag")){this.makeSelection(b.substring(4))}else{if(b.startsWith("targetMailbox")){this.updateFolders(b.substring(13))}}}},clickHandler:function(b){var a=b.element(),c=a.readAttribute("id");if(a.match(".msgactions A.widget")){if(a.hasClassName("permdeleteAction")){if(confirm(IMP.text.mailbox_delete)){this.submit("delete_messages")}}else{if(a.hasClassName("deleteAction")){this.submit("delete_messages")}else{if(a.hasClassName("undeleteAction")){this.submit("undelete_messages")}else{if(a.hasClassName("blacklistAction")){this.submit("blacklist")}else{if(a.hasClassName("whitelistAction")){this.submit("whitelist")}else{if(a.hasClassName("whitelistAction")){this.submit("fwd_digest")}else{if(a.hasClassName("spamAction")){this.submit("spam_report")}else{if(a.hasClassName("notspamAction")){this.submit("notspam_report")}else{if(a.hasClassName("viewAction")){this.submit("view_messages")}}}}}}}}}b.stop();return}if(!c){return}switch(c){case"checkheader":case"checkAll":if(c=="checkheader"){$("checkAll").checked=!$("checkAll").checked}this.makeSelection(-1);return}if(c.startsWith("check")&&a.hasClassName("checkbox")){this.selectRange(b)}else{if(!this.sortlimit&&a.match("TH")&&a.up("TABLE.messageList")){document.location.href=a.down("A").href}}},keyDownHandler:function(i){var b=i.element(),j=i.keyCode,d,h,g,a,c,k,f;if(i.altKey||i.ctrlKey){switch(j){case Event.KEY_UP:d=-1;f=-1;break;case Event.KEY_DOWN:d=1;f=1;break;default:return}if(typeof this.messagelist=="undefined"){return}if(b.id.indexOf("check")==0&&b.tagName=="INPUT"){c=b.id.substring(5);this.keyId=this.getMessage(c,d);g=$("subject"+this.keyId)}else{if(b.id.indexOf("subject")==0&&b.tagName=="A"){c=b.id.substring(7);this.keyId=this.getMessage(c,f);g=$("subject"+this.keyId)}else{this.keyId=((d+f)>0)?$H(this.messagelist).keys().first():$H(this.messagelist).keys().last();if(Event.KEY_UP||Event.KEY_DOWN){g=$("subject"+this.keyId)}}}}else{if(j==32&&b.id.indexOf("subject")==0&&b.tagName=="A"){this.startrange="check"+this.keyId;this.selectRow(this.startrange,!$(this.startrange).checked)}else{if(!i.shiftKey){if(j==Event.KEY_LEFT&&$("prev")){h=$("prev").href}else{if(j==Event.KEY_RIGHT&&$("next")){h=$("next").href}}if(h){document.location.href=h}return}else{return}}}if(g){g.focus();k=$("row"+this.keyId);if(i.altKey){a=g.id.replace(/subject/,"check");this.selectRow(a,!$(a).checked)}else{if(c!=g.id&&k.className.indexOf("-over")==-1){k.className+="-over"}}if(c){k=$("row"+c);if(c!=g.id){k.className=k.className.replace(/-over/,"")}}}i.stop()},submitHandler:function(a){if(a.element().readAttribute("id").startsWith("select")){a.stop()}}};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));
\ No newline at end of file
index f53cac0..cbb6105 100644 (file)
 /**
- * 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));
index 12fe5c9..5a2c539 100644 (file)
@@ -454,7 +454,7 @@ $hdr_template->set('search', false);
 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()) {
@@ -541,13 +541,13 @@ if ($pageOb['msgcount']) {
     $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']) {
@@ -559,32 +559,32 @@ if ($pageOb['msgcount']) {
     }
 
     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');
 }
@@ -891,5 +891,9 @@ if (($pageOb['end'] - $pageOb['begin']) >= 20) {
     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';
index 8ee5e46..d0cf3df 100644 (file)
@@ -11,7 +11,6 @@
 $code = array(
 /* Variables used in core javascript files. */
     'conf' =>  array(
-        'hasDOM' => $GLOBALS['browser']->hasFeature('dom'),
         'IMP_ALL' => IMP::FLAG_ALL,
         'isIE' => $GLOBALS['browser']->isBrowser('msie'),
         'pop3' => (isset($_SESSION['imp']) && ($_SESSION['imp']['protocol'] == 'pop')),
index 734a090..55a04da 100644 (file)
@@ -1,7 +1,7 @@
 <loop:messages>
  <tr id="row<tag:messages.id />" class="<tag:messages.bg />">
   <td>
-   <tag:overflow_begin /><label><input id="check<tag:messages.id />" type="checkbox" class="checkbox" name="indices[]" onclick="selectRange(event);" value="<tag:messages.uid />" /><tag:messages.status />&nbsp;</label><tag:overflow_end />
+   <tag:overflow_begin /><label><input id="check<tag:messages.id />" type="checkbox" class="checkbox" name="indices[]" value="<tag:messages.uid />" /><tag:messages.status />&nbsp;</label><tag:overflow_end />
   </td>
   <td<if:messages.color> style="background:<tag:messages.color />"</if:messages.color>>
    <tag:overflow_begin /><tag:messages.number /><tag:overflow_end />
index 4f541e0..6424135 100644 (file)
@@ -9,13 +9,13 @@
 <if:mh_count>
   <th width="8%">&nbsp;</th>
 <else:mh_count>
-  <th id="checkheader" width="8%" onclick="$('checkAll').checked = !$('checkAll').checked;makeSelection(-1);">
+  <th id="checkheader" width="8%">
    <label for="checkAll" class="hidden"><gettext>Check All/None</gettext></label>
-   <input type="checkbox" class="checkbox" id="checkAll" name="checkAll" onclick="makeSelection(-1);if(window.event){window.event.cancelBubble = true;}else if(event){event.stopPropagation();}" <tag:check_all /> />
+   <input type="checkbox" class="checkbox" id="checkAll" name="checkAll" <tag:check_all /> />
   </th>
 </else:mh_count></if:mh_count>
 <loop:headers>
-  <th class="<tag:headers.class />" width="<tag:headers.width />" <if:sortlimit><else:sortlimit>onclick="document.location.href=this.down('A').href;"</else:sortlimit></if:sortlimit>>
+<th class="<tag:headers.class />" width="<tag:headers.width />">
    <tag:headers.change_sort_link /> <if:sortlimit><tag:headers.sortlimit_text /><else:sortlimit><tag:headers.change_sort_widget /> <tag:headers.extra /></else:sortlimit></if:sortlimit>
   </th>
 </loop:headers>
index de80ab9..19721e3 100644 (file)
@@ -2,10 +2,10 @@
  <tr class="mboxcontrol">
   <td<if:isbottom> class="bottomborder"</if:isbottom>>
    <div class="leftFloat">
-    <form id="select<tag:id />" action="javascript:void(0)" onsubmit="return false">
+    <form id="select<tag:id />">
     <input type="hidden" name="mailbox" value="<tag:mailbox />" />
     <label for="filter<tag:id />" class="hidden"><gettext>Select:</gettext></label>
-    <select id="filter<tag:id />" name="filter" onchange="makeSelection(<tag:id />);">
+    <select id="filter<tag:id />" name="filter">
      <option value="" selected="selected"><gettext>Select:</gettext></option>
      <option value="!<tag:imp_all />"><gettext>All</gettext></option>
      <option value="<tag:imp_all />"><gettext>None</gettext></option>
@@ -28,7 +28,7 @@
     </select>
 <if:readonly><else:readonly>
     <label for="flag<tag:id />" class="hidden"><gettext>Mark as:</gettext></label>
-    <select id="flag<tag:id />" name="flag" onchange="flagMessages(<tag:id />);">
+    <select id="flag<tag:id />" name="flag">
      <option value="" selected="selected"><gettext>Mark as:</gettext></option>
      <option value="\seen"><gettext>Seen</gettext></option>
      <option value="0\seen"><gettext>Unseen</gettext></option>
@@ -57,7 +57,7 @@
      <li class="lastnavbar"><tag:copy /></li>
     </ul>
     <label for="targetMailbox<tag:id />" class="hidden"><gettext>Target Mailbox:</gettext></label>
-    <select id="targetMailbox<tag:id />" name="targetMailbox" onchange="updateFolders(<tag:id />);">
+    <select id="targetMailbox<tag:id />" name="targetMailbox">
      <tag:folder_options />
     </select>
     </form>