annotate gpp/messages/static/js/tabbed_messages.js @ 505:a5d11471d031

Refactor the logic in the rate limiter decorator. Check to see if the request was ajax, as the ajax view always returns 200. Have to decode the JSON response to see if an error occurred or not.
author Brian Neal <bgneal@gmail.com>
date Sat, 03 Dec 2011 19:13:38 +0000
parents 9f888dbe61ce
children
rev   line source
bgneal@425 1 $(document).ready(function() {
bgneal@425 2 $tabs = $('#tabs').tabs({
bgneal@425 3 selected: initialTab,
bgneal@425 4 select: function(event, ui) {
bgneal@425 5 $(ui.panel).html('');
bgneal@425 6 },
bgneal@425 7 load: function(event, ui) {
bgneal@425 8 selectedTab = ui;
bgneal@428 9 if (ui.index == 1 && receiver && !doReply)
bgneal@428 10 {
bgneal@428 11 $('#id_receiver').val(receiver);
bgneal@428 12 receiver = '';
bgneal@428 13 }
bgneal@428 14 else if (doReply && ui.index == 1)
bgneal@425 15 {
bgneal@425 16 doReply = false;
bgneal@425 17 var msg = msgCache[$msgDialog.msgId];
bgneal@425 18 $('#id_receiver').val(msg.sender);
bgneal@425 19 $('#id_subject').val(msg.re_subject);
bgneal@425 20 $('#id_message').val(msg.re_content);
bgneal@430 21 $('#msg_compose_form').append('<input type="hidden" name="reply_to" value="' +
bgneal@430 22 $msgDialog.msgId + '" />');
bgneal@425 23 }
bgneal@425 24 },
bgneal@425 25 ajaxOptions: {
bgneal@425 26 error: function(xhr, status, index, anchor) {
bgneal@425 27 $(anchor.hash).html(
bgneal@425 28 "Oops, we couldn't load this tab. We'll try to fix this as soon as possible.");
bgneal@425 29 }
bgneal@425 30 }
bgneal@425 31 });
bgneal@425 32 $msgDialog = $('#msgDialog').dialog({
bgneal@425 33 autoOpen: false,
bgneal@425 34 width: 460,
bgneal@481 35 height: 'auto',
bgneal@481 36 maxHeight: false,
bgneal@481 37 resizable: false,
bgneal@425 38 buttons: [
bgneal@425 39 {
bgneal@425 40 text: "Reply",
bgneal@425 41 click: function() {
bgneal@425 42 doReply = true;
bgneal@425 43 $(this).dialog('close');
bgneal@425 44 $tabs.tabs("select", 1);
bgneal@425 45 }
bgneal@425 46 },
bgneal@425 47 {
bgneal@425 48 text: "Close",
bgneal@425 49 click: function() {
bgneal@425 50 $(this).dialog('close');
bgneal@425 51 }
bgneal@425 52 }
bgneal@425 53 ]
bgneal@425 54 });
bgneal@425 55 });
bgneal@425 56
bgneal@425 57 var $tabs = 0;
bgneal@425 58 var $msgDialog = 0;
bgneal@425 59 var msgCache = {};
bgneal@425 60 var doReply = false;
bgneal@425 61 var selectedTab = 0;
bgneal@425 62
bgneal@429 63 function updateUnreadMsgText(n)
bgneal@429 64 {
bgneal@429 65 var txt = '';
bgneal@429 66 if (n == 1) {
bgneal@429 67 txt = "1 New Message";
bgneal@429 68 }
bgneal@429 69 else if (n > 1) {
bgneal@429 70 txt = n + " New Messages";
bgneal@429 71 }
bgneal@429 72 else {
bgneal@429 73 txt = "Private Messages";
bgneal@429 74 }
bgneal@429 75 $('#unread_msg_text').html(txt);
bgneal@429 76 }
bgneal@429 77
bgneal@425 78 function showMsg(link, id) {
bgneal@425 79 $msgDialog.msgId = id; // create a msgId attribute on the dialog
bgneal@425 80 var msg = msgCache[id];
bgneal@425 81
bgneal@425 82 // mark as read if necessary
bgneal@429 83 var $link = $(link);
bgneal@429 84
bgneal@429 85 if (username == msg.receiver && $link.hasClass('unread')) {
bgneal@425 86 $(link).removeClass('unread');
bgneal@429 87
bgneal@429 88 // decrement count of unread messages in base template
bgneal@429 89 if (unreadMsgCount > 0)
bgneal@429 90 {
bgneal@429 91 updateUnreadMsgText(--unreadMsgCount);
bgneal@429 92 }
bgneal@425 93 }
bgneal@425 94
bgneal@481 95 var s = '<div style="max-height:450px;overflow:auto">' + msg.content + '</div>';
bgneal@481 96 $msgDialog.html(s);
bgneal@425 97 var title = 'PM From ' + msg.sender + ' To ' + msg.receiver + '<br /> ' + msg.subject;
bgneal@425 98 $msgDialog.dialog('option', 'title', title);
bgneal@425 99 $msgDialog.dialog('open');
bgneal@425 100 }
bgneal@425 101
bgneal@425 102 function msgShow(link, id) {
bgneal@425 103 if (msgCache[id]) {
bgneal@425 104 showMsg(link, id);
bgneal@425 105 return;
bgneal@425 106 }
bgneal@425 107 $.ajax({
bgneal@429 108 url: '/messages/message/',
bgneal@425 109 type: 'POST',
bgneal@425 110 data: {
bgneal@425 111 msg_id : id
bgneal@425 112 },
bgneal@425 113 dataType: 'json',
bgneal@425 114 success: function (data, textStatus) {
bgneal@425 115 msgCache[id] = data;
bgneal@425 116 showMsg(link, id);
bgneal@425 117 },
bgneal@425 118 error: function (xhr, textStatus, ex) {
bgneal@425 119 alert('Oops, an error occurred. ' + xhr.statusText + ' - ' +
bgneal@425 120 xhr.responseText);
bgneal@425 121 }
bgneal@425 122 });
bgneal@425 123 }
bgneal@425 124
bgneal@425 125 function submitOptions(form) {
bgneal@425 126 $.ajax({
bgneal@429 127 url: '/messages/options-tab/',
bgneal@425 128 type: 'POST',
bgneal@425 129 data: $(form).serialize(),
bgneal@425 130 dataType: 'html',
bgneal@425 131 success: function (data, textStatus) {
bgneal@425 132 $(selectedTab.panel).html(data);
bgneal@425 133 },
bgneal@425 134 error: function (xhr, textStatus, ex) {
bgneal@425 135 alert('Oops, an error occurred. ' + xhr.statusText + ' - ' +
bgneal@425 136 xhr.responseText);
bgneal@425 137 }
bgneal@425 138 });
bgneal@425 139 return false;
bgneal@425 140 }
bgneal@425 141
bgneal@425 142 function messageSubmit(form) {
bgneal@425 143 $.ajax({
bgneal@429 144 url: '/messages/compose-tab/',
bgneal@425 145 type: 'POST',
bgneal@425 146 data: $(form).serialize(),
bgneal@425 147 dataType: 'html',
bgneal@425 148 success: function (data, textStatus) {
bgneal@430 149 $(selectedTab.panel).html(data);
bgneal@425 150 },
bgneal@425 151 error: function (xhr, textStatus, ex) {
bgneal@425 152 alert('Oops, an error occurred. ' + xhr.statusText + ' - ' +
bgneal@425 153 xhr.responseText);
bgneal@425 154 }
bgneal@425 155 });
bgneal@425 156 return false;
bgneal@425 157 }
bgneal@425 158
bgneal@425 159 function tabMasterCheckClick(box, name) {
bgneal@425 160 var state = $(box).attr('checked');
bgneal@425 161 $('input[name="' + name + '"]').each(function() {
bgneal@425 162 this.checked = state;
bgneal@425 163 });
bgneal@425 164 }
bgneal@425 165
bgneal@425 166 function bulkMsgAction(form, action) {
bgneal@425 167 if (confirm("Really " + action + " checked messages?")) {
bgneal@425 168 $.ajax({
bgneal@429 169 url: '/messages/bulk/',
bgneal@425 170 type: 'POST',
bgneal@425 171 data: $(form).serialize(),
bgneal@425 172 dataType: 'text',
bgneal@425 173 success: function (data, textStatus) {
bgneal@425 174 $tabs.tabs("load", selectedTab.index);
bgneal@425 175 },
bgneal@425 176 error: function (xhr, textStatus, ex) {
bgneal@425 177 alert('Oops, an error occurred. ' + xhr.statusText + ' - ' +
bgneal@425 178 xhr.responseText);
bgneal@425 179 }
bgneal@425 180 });
bgneal@425 181 }
bgneal@425 182 return false;
bgneal@425 183 }
bgneal@425 184
bgneal@425 185 function ajaxPageFetch(link) {
bgneal@425 186 $.ajax({
bgneal@425 187 url: link.href,
bgneal@425 188 type: 'GET',
bgneal@425 189 dataType: 'html',
bgneal@425 190 success: function (data, textStatus) {
bgneal@425 191 $(selectedTab.panel).html(data);
bgneal@425 192 },
bgneal@425 193 error: function (xhr, textStatus, ex) {
bgneal@425 194 alert('Oops, an error occurred. ' + xhr.statusText + ' - ' +
bgneal@425 195 xhr.responseText);
bgneal@425 196 }
bgneal@425 197 });
bgneal@425 198 return false;
bgneal@425 199 }