blob: 39f79748700ee915dfe3d348d857d82f90dcca77 [file] [log] [blame]
Rushabh Mehtafdea9662012-02-27 18:03:54 +05301wn.provide('erpnext.messages');
2
3wn.pages.messages.onload = function(wrapper) {
4 erpnext.messages.show_active_users();
5 erpnext.messages.make_list();
6
7 // post message
8 $('#message-post').click(function() {
9 var txt = $('#message-post-text').val();
10 if(txt) {
11 wn.call({
12 module:'utilities',
13 page:'messages',
14 method:'post',
15 args: {
16 txt: txt,
17 contact: erpnext.messages.contact
18 },
19 callback:function(r,rt) {
20 $('#message-post-text').val('')
21 erpnext.messages.list.run();
22 },
23 btn: this
24 });
25 }
26 });
27
28 // enable, disable button
29 $('#message-post-text').keyup(function() {
30 if($(this).val()) {
31 $('#message-post').attr('disabled', false);
32 } else {
33 $('#message-post').attr('disabled', true);
34 }
35 })
36}
37
38wn.pages.messages.onshow = function(wrapper) {
39 erpnext.messages.show();
40 setTimeout(erpnext.messages.refresh, 5000);
Rushabh Mehta1a5c9c52012-02-27 18:56:31 +053041 $('#message-post-text').focus();
Rushabh Mehtafdea9662012-02-27 18:03:54 +053042}
43
44erpnext.messages = {
45 show: function() {
46 var contact = erpnext.messages.get_contact();
47
48 // can't send message to self
49 $(wn.pages.messages).find('.well').toggle(contact==user ? false : true);
50
51 $(wn.pages.messages).find('h1:first').html('Messages: '
52 + (user==contact ? 'From everyone' : wn.boot.user_fullnames[contact]))
53
54 erpnext.messages.contact = contact;
55 erpnext.messages.list.opts.args.contact = contact;
56 erpnext.messages.list.run();
57
58 },
59 // check for updates every 5 seconds if page is active
60 refresh: function() {
61 setTimeout(erpnext.messages.refresh, 10000);
62 if(page_body.cur_page_label != 'messages') return;
63 erpnext.messages.show();
64 },
65 get_contact: function() {
66 var route = location.hash;
67 if(route.indexOf('/')!=-1) {
68 var name = decodeURIComponent(route.split('/')[1]);
69 if(name.indexOf('__at__')!=-1) {
70 name = name.replace('__at__', '@');
71 }
72 return name;
73 }
74 return user;
75 },
76 make_list: function() {
77 erpnext.messages.list = new wn.widgets.Listing({
78 parent: $('#message-list').get(0),
79 method: 'utilities.page.messages.messages.get_list',
80 args: {
81 contact: null
82 },
83 render_row: function(wrapper, data) {
84 data.creation = dateutil.comment_when(data.creation);
85 data.comment_by_fullname = wn.boot.user_fullnames[data.owner];
86
Rushabh Mehta1a5c9c52012-02-27 18:56:31 +053087 data.reply_html = '';
Rushabh Mehtafdea9662012-02-27 18:03:54 +053088 if(data.owner==user) {
89 data.cls = 'message-self';
90 data.comment_by_fullname = 'You';
Rushabh Mehta1a5c9c52012-02-27 18:56:31 +053091 data.delete_html = repl('<a class="close" \
92 onclick="erpnext.messages.delete(this)"\
Rushabh Mehtaef29e552012-02-27 18:41:11 +053093 data-name="%(name)s">&times;</a>', data);
Rushabh Mehtafdea9662012-02-27 18:03:54 +053094 } else {
Rushabh Mehtaef29e552012-02-27 18:41:11 +053095 data.cls = 'message-other';
96 data.delete_html = '';
Rushabh Mehta1a5c9c52012-02-27 18:56:31 +053097 if(erpnext.messages.contact==user) {
98 data.reply_html = repl('<a href="#!messages/%(owner)s">\
99 <i class="icon-share-alt"></i> Reply</a>', data)
100 }
Rushabh Mehtafdea9662012-02-27 18:03:54 +0530101 }
102
Rushabh Mehtaef29e552012-02-27 18:41:11 +0530103 wrapper.innerHTML = repl('<div class="message %(cls)s">%(delete_html)s\
104 <b>%(comment)s</b>\
Rushabh Mehta1a5c9c52012-02-27 18:56:31 +0530105 <div class="help">by %(comment_by_fullname)s, %(creation)s</div>\
106 %(reply_html)s</div>\
Rushabh Mehtafdea9662012-02-27 18:03:54 +0530107 <div style="clear: both;"></div>', data);
108 }
109 });
110 },
Rushabh Mehtaef29e552012-02-27 18:41:11 +0530111 delete: function(ele) {
112 $(ele).parent().css('opacity', 0.6);
113 wn.call({
114 method:'utilities.page.messages.messages.delete',
115 args: {name : $(ele).attr('data-name')},
116 callback: function() {
117 $(ele).parent().toggle(false);
118 }
119 });
120 },
Rushabh Mehtafdea9662012-02-27 18:03:54 +0530121 show_active_users: function() {
122 wn.call({
123 module:'utilities',
124 page:'messages',
125 method:'get_active_users',
126 callback: function(r,rt) {
127 var $body = $(wn.pages.messages).find('.section-body');
128 for(var i in r.message) {
129 var p = r.message[i];
130 p.fullname = wn.boot.user_fullnames[p.name];
131 p.name = p.name.replace('@', '__at__');
132 $body.append(repl('<div class="section-item">\
133 <a href="#!messages/%(name)s">%(fullname)s</a></div>', p))
134 }
135 }
136 });
137 }
138}
139
140