*** c.js 2010-01-23 07:50:08.910979557 +0800 --- comment.js 2010-01-23 07:54:25.337618900 +0800 *************** *** 17,327 **** * Comment Helper * @author Dongsheng Cai */ ! M.core_comment = { ! /** ! * Initialize commenting system ! */ ! init: function(options) { ! var CommentHelper = function(args) { ! CommentHelper.superclass.constructor.apply(this, arguments); ! } ! CommentHelper.NAME = "COMMENT"; ! CommentHelper.ATTRS = { ! options: {}, ! lang: {} ! }; ! Y.extend(CommentHelper, Y.Base, { ! api: M.cfg.wwwroot+'/comment/comment_ajax.php', ! initializer: function(args) { ! var scope = this; ! this.client_id = args.client_id; ! this.itemid = args.itemid; ! this.commentarea = args.commentarea; ! this.courseid = args.courseid; ! this.contextid = args.contextid; ! if (args.autostart) { ! this.view(args.page); ! } ! if (args.notoggle) { ! Y.one('#comment-link-'+this.client_id).setStyle('display', 'none'); ! } ! // load comments ! Y.one('#comment-link-'+this.client_id).on('click', function(e) { ! e.preventDefault(); ! this.view(0); ! return false; ! }, this); ! }, ! post: function() { ! var ta = Y.one('#dlg-content-'+this.client_id); ! var scope = this; ! var value = ta.get('value'); ! if (value && value != mstr.moodle.addcomment) { ! var params = {'content': value}; ! this.request({ ! action: 'add', ! scope: scope, ! params: params, ! callback: function(id, obj, args) { ! var scope = args.scope; ! var cid = scope.client_id; ! var ta = Y.one('#dlg-content-'+cid); ! ta.set('value', ''); ! var container = Y.one('#comment-list-'+cid); ! var result = scope.render([obj], true); ! var newcomment = Y.Node.create(result.html); ! container.appendChild(newcomment); ! var ids = result.ids; ! var linktext = Y.one('#comment-link-text-'+cid); ! linktext.set('innerHTML', mstr.moodle.comments + ' ('+obj.count+')'); ! for(var i in ids) { ! var attributes = { ! color: { to: '#06e' }, ! backgroundColor: { to: '#FFE390' } ! }; ! var anim = new YAHOO.util.ColorAnim(ids[i], attributes); ! anim.animate(); ! } } - }, true); - } else { - var attributes = { - backgroundColor: { from: '#FFE390', to:'#FFFFFF' } - }; - var anim = new YAHOO.util.ColorAnim('dlg-content-'+cid, attributes); - anim.animate(); - } - }, - request: function(args, noloading) { - var params = {}; - var scope = this; - if (args['scope']) { - scope = args['scope']; - } - //params['page'] = args.page?args.page:''; - params['env'] = ''; - // the form element only accept certain file types - params['sesskey'] = M.cfg.sesskey; - params['action'] = args.action?args.action:''; - params['client_id'] = this.client_id; - params['itemid'] = this.itemid; - params['area'] = this.commentarea; - params['courseid'] = this.courseid; - params['contextid'] = this.contextid; - if (args['params']) { - for (i in args['params']) { - params[i] = args['params'][i]; } ! } ! var cfg = { ! method: 'POST', ! on: { ! complete: function(id,o,p) { ! if (!o) { ! alert('IO FATAL'); ! return; ! } ! var data = json_decode(o.responseText); ! if (data.error) { ! alert(data.error); ! return false; ! } else { ! args.callback(id,data,p); ! return true; ! } ! } ! }, ! arguments: { ! scope: scope ! }, ! headers: { ! 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', ! 'User-Agent': 'MoodleComment/3.0' ! }, ! data: build_querystring(params) }; ! if (args.form) { ! cfg.form = args.form; ! } ! Y.io(this.api, cfg); ! if (!noloading) { ! this.wait(); ! } ! }, ! render: function(list, newcmt) { ! var ret = {}; ! ret.ids = []; ! var template = Y.one('#cmt-tmpl'); ! var html = ''; ! for(var i in list) { ! var htmlid = 'comment-'+list[i].id+'-'+this.client_id; ! var val = template.get('innerHTML'); ! val = val.replace('___name___', list[i].username); ! if (list[i]['delete']||newcmt) { ! list[i].content = '
' + list[i].content; ! } ! val = val.replace('___time___', list[i].time); ! val = val.replace('___picture___', list[i].avatar); ! val = val.replace('___content___', list[i].content); ! val = '
  • '+val+'
  • '; ! ret.ids.push(htmlid); ! html = (val+html); ! } ! ret.html = html; ! return ret; ! }, ! load: function(page) { ! var scope = this; ! var container = Y.one('#comment-ctrl-'+this.client_id); ! var params = { ! 'page': page, } ! this.request({ ! scope: scope, ! params: params, ! callback: function(id, ret, args) { ! var linktext = Y.one('#comment-link-text-'+scope.client_id); ! linktext.set('innerHTML', mstr.moodle.comments + ' ('+ret.count+')'); ! var container = Y.one('#comment-list-'+scope.client_id); ! var pagination = Y.one('#comment-pagination-'+scope.client_id); ! if (ret.pagination) { ! pagination.set('innerHTML', ret.pagination); } else { ! //empty paging bar ! pagination.set('innerHTML', ''); } - var result = scope.render(ret.list); - container.set('innerHTML', result.html); - args.scope.register_pagination(); - args.scope.register_delete_buttons(); } ! }); ! }, ! delete: function(id) { ! var scope = this; ! var params = {'commentid': id}; ! ! function remove_dom(type, anmi, cmt) { ! cmt.remove(); ! } ! this.request({ ! action: 'delete', ! scope: scope, ! params: params, ! callback: function(id, resp, args) { ! var htmlid= 'comment-'+resp.commentid+'-'+resp.client_id; ! var attributes = { ! width:{to:0}, ! height:{to:0} ! }; ! var cmt = Y.one('#'+htmlid); ! cmt.setStyle('overflow', 'hidden'); ! var anim = new YAHOO.util.Anim(htmlid, attributes, 1, YAHOO.util.Easing.easeOut); ! anim.onComplete.subscribe(remove_dom, cmt, this); ! anim.animate(); } ! }, true); ! }, ! register_actions: function() { ! // add new comment ! Y.one('#comment-action-post-'+this.client_id).on('click', function(e) { e.preventDefault(); ! this.post(); return false; }, this); ! // cancel comment box ! var cancel = Y.one('#comment-action-cancel-'+this.client_id); ! if (cancel) { ! cancel.on('click', function(e) { ! e.preventDefault(); ! this.view(0); ! return false; ! }, this); ! } ! }, ! register_delete_buttons: function() { ! var scope = this; ! // page buttons ! Y.all('div.comment-content a').each( ! function(node, id) { ! node.on('click', function(e, node) { ! var id = node.get('id'); ! var re = new RegExp("comment-delete-"+this.client_id+"-(\\d+)", "i"); ! var result = id.match(re); ! if (result[1]) { ! this.delete(result[1]); ! } ! //this.load(result[1]); ! }, scope, node); ! } ! ); ! }, ! register_pagination: function() { ! var scope = this; ! // page buttons ! Y.all('#comment-paging-'+this.client_id+' a').each( ! function(node, id) { ! node.on('click', function(e, node) { ! var id = node.get('id'); ! var re = new RegExp("comment-page-"+this.client_id+"-(\\d+)", "i"); ! var result = id.match(re); ! this.load(result[1]); ! }, scope, node); ! } ! ); ! }, ! view: function(page) { ! var container = Y.one('#comment-ctrl-'+this.client_id); ! var ta = Y.one('#dlg-content-'+this.client_id); ! var img = Y.one('#comment-img-'+this.client_id); ! var d = container.getStyle('display'); ! if (d=='none'||d=='') { ! // show ! this.load(page); ! container.setStyle('display', 'block'); ! img.src=M.util.image_url('t/expanded', 'core'); ! } else { ! // hide ! container.setStyle('display', 'none'); ! img.src=M.util.image_url('t/collapsed', 'core'); ! ta.set('value',''); } ! //toggle_textarea.apply(ta, [false]); ! //// reset textarea size ! ta.on('click', function() { ! this.toggle_textarea(true); ! }, this) ! //ta.onkeypress = function() { ! //if (this.scrollHeight > this.clientHeight && !window.opera) ! //this.rows += 1; ! //} ! ta.on('blur', function() { ! this.toggle_textarea(false); ! }, this); ! this.register_actions(); ! return false; ! }, ! toggle_textarea: function(focus) { ! var t = Y.one('#dlg-content-'+this.client_id); ! if (focus) { ! if (t.get('value') == mstr.moodle.addcomment) { ! t.set('value', ''); ! t.setStyle('color', 'black'); ! } ! }else{ ! if (t.get('value') == '') { ! t.set('value', mstr.moodle.addcomment); ! t.setStyle('color','grey'); ! t.set('rows', 1); ! } } - }, - wait: function() { - var container = Y.one('#comment-list-'+this.client_id); - container.set('innerHTML', '
    '); } ! }); ! new CommentHelper(options); ! } ! }; --- 17,330 ---- * Comment Helper * @author Dongsheng Cai */ ! M.core_comment = (function(){ ! var CommentHelper = function(args) { ! CommentHelper.superclass.constructor.apply(this, arguments); ! } ! CommentHelper.NAME = "COMMENT"; ! CommentHelper.ATTRS = { ! options: {}, ! lang: {} ! }; ! Y.extend(CommentHelper, Y.Base, { ! api: M.cfg.wwwroot+'/comment/comment_ajax.php', ! initializer: function(args) { ! var scope = this; ! this.client_id = args.client_id; ! this.itemid = args.itemid; ! this.commentarea = args.commentarea; ! this.courseid = args.courseid; ! this.contextid = args.contextid; ! if (args.autostart) { ! this.view(args.page); ! } ! if (args.notoggle) { ! Y.one('#comment-link-'+this.client_id).setStyle('display', 'none'); ! } ! // load comments ! Y.one('#comment-link-'+this.client_id).on('click', function(e) { ! e.preventDefault(); ! this.view(0); ! return false; ! }, this); ! }, ! post: function() { ! var ta = Y.one('#dlg-content-'+this.client_id); ! var scope = this; ! var value = ta.get('value'); ! if (value && value != mstr.moodle.addcomment) { ! var params = {'content': value}; ! this.request({ ! action: 'add', ! scope: scope, ! params: params, ! callback: function(id, obj, args) { ! var scope = args.scope; ! var cid = scope.client_id; ! var ta = Y.one('#dlg-content-'+cid); ! ta.set('value', ''); ! var container = Y.one('#comment-list-'+cid); ! var result = scope.render([obj], true); ! var newcomment = Y.Node.create(result.html); ! container.appendChild(newcomment); ! var ids = result.ids; ! var linktext = Y.one('#comment-link-text-'+cid); ! linktext.set('innerHTML', mstr.moodle.comments + ' ('+obj.count+')'); ! for(var i in ids) { ! var attributes = { ! color: { to: '#06e' }, ! backgroundColor: { to: '#FFE390' } ! }; ! var anim = new YAHOO.util.ColorAnim(ids[i], attributes); ! anim.animate(); } } ! }, true); ! } else { ! var attributes = { ! backgroundColor: { from: '#FFE390', to:'#FFFFFF' } }; ! var anim = new YAHOO.util.ColorAnim('dlg-content-'+cid, attributes); ! anim.animate(); ! } ! }, ! request: function(args, noloading) { ! var params = {}; ! var scope = this; ! if (args['scope']) { ! scope = args['scope']; ! } ! //params['page'] = args.page?args.page:''; ! params['env'] = ''; ! // the form element only accept certain file types ! params['sesskey'] = M.cfg.sesskey; ! params['action'] = args.action?args.action:''; ! params['client_id'] = this.client_id; ! params['itemid'] = this.itemid; ! params['area'] = this.commentarea; ! params['courseid'] = this.courseid; ! params['contextid'] = this.contextid; ! if (args['params']) { ! for (i in args['params']) { ! params[i] = args['params'][i]; } ! } ! var cfg = { ! method: 'POST', ! on: { ! complete: function(id,o,p) { ! if (!o) { ! alert('IO FATAL'); ! return; ! } ! var data = json_decode(o.responseText); ! if (data.error) { ! alert(data.error); ! return false; } else { ! args.callback(id,data,p); ! return true; } } ! }, ! arguments: { ! scope: scope ! }, ! headers: { ! 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', ! 'User-Agent': 'MoodleComment/3.0' ! }, ! data: build_querystring(params) ! }; ! if (args.form) { ! cfg.form = args.form; ! } ! Y.io(this.api, cfg); ! if (!noloading) { ! this.wait(); ! } ! }, ! render: function(list, newcmt) { ! var ret = {}; ! ret.ids = []; ! var template = Y.one('#cmt-tmpl'); ! var html = ''; ! for(var i in list) { ! var htmlid = 'comment-'+list[i].id+'-'+this.client_id; ! var val = template.get('innerHTML'); ! val = val.replace('___name___', list[i].username); ! if (list[i]['delete']||newcmt) { ! list[i].content = '
    ' + list[i].content; ! } ! val = val.replace('___time___', list[i].time); ! val = val.replace('___picture___', list[i].avatar); ! val = val.replace('___content___', list[i].content); ! val = '
  • '+val+'
  • '; ! ret.ids.push(htmlid); ! html = (val+html); ! } ! ret.html = html; ! return ret; ! }, ! load: function(page) { ! var scope = this; ! var container = Y.one('#comment-ctrl-'+this.client_id); ! var params = { ! 'page': page, ! } ! this.request({ ! scope: scope, ! params: params, ! callback: function(id, ret, args) { ! var linktext = Y.one('#comment-link-text-'+scope.client_id); ! linktext.set('innerHTML', mstr.moodle.comments + ' ('+ret.count+')'); ! var container = Y.one('#comment-list-'+scope.client_id); ! var pagination = Y.one('#comment-pagination-'+scope.client_id); ! if (ret.pagination) { ! pagination.set('innerHTML', ret.pagination); ! } else { ! //empty paging bar ! pagination.set('innerHTML', ''); } ! var result = scope.render(ret.list); ! container.set('innerHTML', result.html); ! args.scope.register_pagination(); ! args.scope.register_delete_buttons(); ! } ! }); ! }, ! delete: function(id) { ! var scope = this; ! var params = {'commentid': id}; ! ! function remove_dom(type, anmi, cmt) { ! cmt.remove(); ! } ! this.request({ ! action: 'delete', ! scope: scope, ! params: params, ! callback: function(id, resp, args) { ! var htmlid= 'comment-'+resp.commentid+'-'+resp.client_id; ! var attributes = { ! width:{to:0}, ! height:{to:0} ! }; ! var cmt = Y.one('#'+htmlid); ! cmt.setStyle('overflow', 'hidden'); ! var anim = new YAHOO.util.Anim(htmlid, attributes, 1, YAHOO.util.Easing.easeOut); ! anim.onComplete.subscribe(remove_dom, cmt, this); ! anim.animate(); ! } ! }, true); ! }, ! register_actions: function() { ! // add new comment ! Y.one('#comment-action-post-'+this.client_id).on('click', function(e) { ! e.preventDefault(); ! this.post(); ! return false; ! }, this); ! // cancel comment box ! var cancel = Y.one('#comment-action-cancel-'+this.client_id); ! if (cancel) { ! cancel.on('click', function(e) { e.preventDefault(); ! this.view(0); return false; }, this); ! } ! }, ! register_delete_buttons: function() { ! var scope = this; ! // page buttons ! Y.all('div.comment-content a').each( ! function(node, id) { ! node.on('click', function(e, node) { ! var id = node.get('id'); ! var re = new RegExp("comment-delete-"+this.client_id+"-(\\d+)", "i"); ! var result = id.match(re); ! if (result[1]) { ! this.delete(result[1]); ! } ! //this.load(result[1]); ! }, scope, node); } ! ); ! }, ! register_pagination: function() { ! var scope = this; ! // page buttons ! Y.all('#comment-paging-'+this.client_id+' a').each( ! function(node, id) { ! node.on('click', function(e, node) { ! var id = node.get('id'); ! var re = new RegExp("comment-page-"+this.client_id+"-(\\d+)", "i"); ! var result = id.match(re); ! this.load(result[1]); ! }, scope, node); ! } ! ); ! }, ! view: function(page) { ! var container = Y.one('#comment-ctrl-'+this.client_id); ! var ta = Y.one('#dlg-content-'+this.client_id); ! var img = Y.one('#comment-img-'+this.client_id); ! var d = container.getStyle('display'); ! if (d=='none'||d=='') { ! // show ! this.load(page); ! container.setStyle('display', 'block'); ! img.src=M.util.image_url('t/expanded', 'core'); ! } else { ! // hide ! container.setStyle('display', 'none'); ! img.src=M.util.image_url('t/collapsed', 'core'); ! ta.set('value',''); ! } ! //toggle_textarea.apply(ta, [false]); ! //// reset textarea size ! ta.on('click', function() { ! this.toggle_textarea(true); ! }, this) ! //ta.onkeypress = function() { ! //if (this.scrollHeight > this.clientHeight && !window.opera) ! //this.rows += 1; ! //} ! ta.on('blur', function() { ! this.toggle_textarea(false); ! }, this); ! this.register_actions(); ! return false; ! }, ! toggle_textarea: function(focus) { ! var t = Y.one('#dlg-content-'+this.client_id); ! if (focus) { ! if (t.get('value') == mstr.moodle.addcomment) { ! t.set('value', ''); ! t.setStyle('color', 'black'); ! } ! }else{ ! if (t.get('value') == '') { ! t.set('value', mstr.moodle.addcomment); ! t.setStyle('color','grey'); ! t.set('rows', 1); } } ! }, ! wait: function() { ! var container = Y.one('#comment-list-'+this.client_id); ! container.set('innerHTML', '
    '); ! } ! }); ! M.core_comment = CommentHelper(options); ! })(); ! /** ! * Initialize commenting system ! */ ! M.core_comment.init = function (options) { ! Y.use('core_comment', function() { ! new M.core_comment(options); ! }); ! }