3 $(document).ready(function() {
4 if (!window.console) window.console = {};
5 if (!window.console.log) window.console.log = function() {};
7 $("#messageform").on("submit", function() {
11 $("#messageform").on("keypress", function(e) {
12 if (e.keyCode == 13) {
17 $("#message").select();
18 {% if user.is_authenticated %}
26 function newMessage(form) {
27 var message = form.formToDict();
28 var disabled = form.find("input[type=submit]");
30 $.postJSON("{% url fetch-new %}", message, function(response) {
31 updater.showMessage(response);
33 form.parent().remove();
35 form.find("input[type=text]").val("").select();
41 function getCookie(name) {
42 var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
43 return r ? r[1] : undefined;
46 jQuery.postJSON = function(url, args, callback) {
47 $.ajax({url: url, dataType: "json", type: "POST",
48 success: function(response) {
49 if (callback) callback(response);
50 }, error: function(response) {
51 console.log("ERROR:", response);
55 jQuery.fn.formToDict = function() {
56 var fields = this.serializeArray();
58 for (var i = 0; i < fields.length; i++) {
59 json[fields[i].name] = fields[i].value;
61 if (json.next) delete json.next;
65 jQuery.fn.disable = function() {
70 jQuery.fn.enable = function(opt_enable) {
71 if (arguments.length && !opt_enable) {
72 this.attr("disabled", "disabled");
74 this.removeAttr("disabled");
83 $.ajax({url: "{% url fetch-existing %}", type: "POST", dataType: "json",
84 success: updater.onFetchExisting,
85 error: updater.onError});
89 {% if user.is_authenticated %}
90 if (updater.errorSleepTime > 128000){
91 oTable.fnReloadAjax(refreshUrl);
93 timeout = {{timeout}};
94 $.ajax({url: "{% url fetch-updates %}", type: "POST", dataType: "json",
95 success: updater.onSuccess,
97 error: updater.onError});
100 onSuccess: function(response) {
102 updater.newMessages(response);
107 updater.errorSleepTime = 500;
108 window.setTimeout(updater.poll, 0);
111 onFetchExisting: function(response) {
113 updater.existingMessages(response);
121 onError: function(response, text) {
122 if (text == 'timeout'){
123 oTable.fnReloadAjax(refreshUrl);
125 updater.errorSleepTime *= 2;
126 console.log("Poll error; sleeping for", updater.errorSleepTime, "ms");
127 window.setTimeout(updater.poll, updater.errorSleepTime);
131 newMessages: function(response) {
132 if (!response.messages) return;
133 if (response.messages.length == 0){
136 updater.cursor = response.cursor;
137 var messages = response.messages;
138 updater.cursor = messages[messages.length - 1].id;
139 console.log(messages.length, "new messages, cursor:", updater.cursor);
141 for (var i = 0; i < messages.length; i++) {
142 updater.showMessage(messages[i]);
144 $("#hid_mid").val('UPDATED');
145 oTable.fnReloadAjax(refreshUrl);
148 existingMessages: function(response) {
149 if (!response.messages) return;
150 if (response.messages.length == 0){
153 updater.cursor = response.cursor;
154 var messages = response.messages;
155 updater.cursor = messages[messages.length - 1].id;
156 var i = messages.length
157 for (var i = 0; i < messages.length; i++) {
158 updater.showMessage(messages[i]);
162 showMessage: function(message) {
163 var existing = $("#m" + message.id);
164 if (existing.length > 0) return;
165 var username = message.body.split("]")[0].replace("[","");
166 var mbody = message.body.replace("["+username+"] ","");
167 var htmlnode = '<li class="left clearfix">\
168 <div class="chat-body clearfix" style="margin-left: 0px;"> \
169 <div class="header"> \
170 <small class="pull-right text-muted"> \
171 <i class="fa fa-clock-o fa-fw"></i> '+ message.time +' \
174 <p><small><strong class="primary-font">'+username+'</strong>:\
179 var node = $(htmlnode);
181 // $('#inbox').val($('#inbox').val()+message.text);
182 $("#inbox").prepend(node);
187 function blink(selector){
188 $(selector).animate({color: "#EE5F5B"}, 500, function(){
189 $(this).animate({ color: "white" }, 500, function(){