wn.widgets.form.comments = { n_comments: {}, comment_list: {}, sync: function(dt, dn, r) { var f = wn.widgets.form.comments; f.n_comments[dn] = r.n_comments; f.comment_list[dn] = r.comment_list; }, add: function(input, dt, dn, callback) { $c('webnotes.widgets.form.add_comment', wn.widgets.form.comments.get_args(input, dt, dn), function(r,rt) { // update the comments wn.widgets.form.comments.update_comment_list(input, dt, dn); // clean up the text area input.value = ''; callback(input, dt, dn); } ); }, remove: function(dt, dn, comment_id, callback) { $c('webnotes.widgets.form.remove_comment',{ id:comment_id, dt:dt, dn:dn }, callback ); }, get_args: function(input, dt, dn) { return { comment: input.value, comment_by: user, comment_by_fullname: user_fullname, comment_doctype: dt, comment_docname: dn } }, update_comment_list: function(input, dt, dn) { var f = wn.widgets.form.comments; // update no of comments f.n_comments[dn] = cint(f.n_comments[dn]) + 1; // update comment list f.comment_list[dn] = add_lists( [f.get_args(input, dt, dn)], f.comment_list[dn] ); } } // Comment Listing // =============== CommentList = function(parent, dt, dn) { this.wrapper = $a(parent, 'div', '', {margin:'16px'}); this.input_area = $a(this.wrapper, 'div', '', {margin:'2px'}); this.lst_area = $a(this.wrapper, 'div', '', {margin:'2px'}); this.make_input(); this.make_lst(); this.dt; this.dn; } CommentList.prototype.run = function() { this.lst.run(); } CommentList.prototype.make_input = function() { var me = this; // make the input text area and button this.input = $a(this.input_area, 'textarea', '', {height:'60px', width:'300px', fontSize:'14px'}); this.btn = $btn($a(this.input_area, 'div'), 'Post', function() {me.add_comment();},{marginTop:'8px'}); } // Add comment listing // -------------------- CommentList.prototype.add_comment = function() { var me = this; var callback = function(input, dt, dn) { me.lst.run(); } wn.widgets.form.comments.add(this.input, cur_frm.docname, cur_frm.doctype, callback) } // Make comment listing // -------------------- CommentList.prototype.make_lst = function() { if(!this.lst) { var l = new Listing('Comments', 1); var me = this; // define the columns etc l.colwidths = ['100%']; // define options l.opts.hide_export = 1; l.opts.hide_print = 1; l.opts.hide_refresh = 1; l.opts.no_border = 1; l.opts.hide_rec_label = 0; l.opts.show_calc = 0; l.opts.round_corners = 0; l.opts.alt_cell_style = {}; l.opts.cell_style = {padding:'3px'}; l.no_rec_message = 'No comments yet. Be the first one to comment!'; l.get_query = function(){ //---------------------- 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 this.query = repl("select t1.name, t1.comment, t1.comment_by, '', t1.creation, t1.comment_doctype, t1.comment_docname, ifnull(concat_ws(' ',ifnull(t2.first_name,''),ifnull(t2.middle_name,''),ifnull(t2.last_name,'')),''), '', DAYOFMONTH(t1.creation), MONTHNAME(t1.creation), YEAR(t1.creation), hour(t1.creation), minute(t1.creation), second(t1.creation) from `tabComment Widget Record` t1, `tabProfile` t2 where t1.comment_doctype = '%(dt)s' and t1.comment_docname = '%(dn)s' and t1.comment_by = t2.name order by t1.creation desc",{dt:me.dt, dn:me.dn}); this.query_max = repl("select count(name) from `tabComment Widget Record` where comment_doctype='%(dt)s' and comment_docname='%(dn)s'",{'dt': me.dt, 'dn': me.dn}); } l.show_cell = function(cell, ri, ci, d){ new CommentItem(cell, ri, ci, d, me) } this.lst = l; this.lst.make(this.lst_area); } } // Comment Item //============= CommentItem = function(cell, ri, ci, d, comment) { this.comment = comment; $y(cell, {padding:'4px 0px'}) var t = make_table(cell, 1, 3, '100%', ['15%', '65%', '20%'], {padding:'4px'}); // image this.img = $a($td(t,0,0), 'img', '', {width:'40px'}); this.cmt_by = $a($td(t,0,0), 'div'); this.set_picture(d, ri); // comment this.cmt_dtl = $a($td(t,0,1), 'div', 'comment', {fontSize:'11px'}); this.cmt = $a($td(t,0,1), 'div','',{fontSize:'14px'}); this.show_cmt($td(t,0,1), ri, ci, d); this.cmt_delete($td(t,0,2), ri, ci, d); } // Set picture // ----------- CommentItem.prototype.set_picture = function(d, ri){ set_user_img(this.img, user) this.cmt_by.innerHTML = d[ri][7] ? d[ri][7] : d[ri][2]; } // Set comment details // ------------------- CommentItem.prototype.show_cmt = function(cell, ri, ci, d) { //time and date of comment if(d[ri][4]){ hr = d[ri][12]; min = d[ri][13]; sec = d[ri][14]; if(parseInt(hr) > 12) { time = (parseInt(hr)-12) + ':' + min + ' PM' } else{ time = hr + ':' + min + ' AM'} } this.cmt_dtl.innerHTML = 'On ' + d[ri][10].substring(0,3) + ' ' + d[ri][9] + ', ' + d[ri][11] + ' at ' + time; this.cmt.innerHTML = replace_newlines(d[ri][1]); } // Set delete button // ----------------- CommentItem.prototype.cmt_delete = function(cell, ri, ci, d) { var me = this; if(d[ri][2] == user || d[ri][3] == user) { del = $a(cell,'div','wn-icon ic-trash',{cursor:'pointer'}); del.cmt_id = d[ri][0]; del.onclick = function(){ wn.widgets.form.comments.remove(cur_frm.doctype, cur_frm.docname, this.cmt_id, function() { me.comment.lst.run(); }) } } }