0fa8601e23c981f70499a80d0cf898e4280ae1bd
[moodle.git] / blocks / community / yui / comments / comments.js
1 YUI.add('moodle-block_community-comments', function(Y) {
3     var COMMENTSNAME = 'blocks_community_comments';
5     var COMMENTS = function() {
6         COMMENTS.superclass.constructor.apply(this, arguments);
7     };
9     Y.extend(COMMENTS, Y.Base, {
11         event:null,
12         panelevent: null,
13         panels: [], //all the comment boxes
15         initializer : function(params) {
17             //attach a show event on the div with id = comments
18             for (var i=0;i<this.get('commentids').length;i++)
19             {
20                 var commentid = this.get('commentids')[i];
21                 this.panels[commentid] = new M.core.dialogue({
22                     headerContent:Y.Node.create('<h1>')
23                         .append(Y.one('#commentoverlay-'+commentid+' .commenttitle').get('innerHTML')),
24                     bodyContent:Y.one('#commentoverlay-'+commentid).get('innerHTML'),
25                     visible: false, //by default it is not displayed
26                     lightbox : false,
27                     zIndex:100
28                 });
30                 this.panels[commentid].get('contentBox').one('.commenttitle').remove();
31                 this.panels[commentid].render();
32                 this.panels[commentid].hide();
34                 Y.one('#comments-'+commentid).on('click', this.show, this, commentid);
35             }
37         },
39         show : function (e, commentid) {
41             // Hide all panels.
42             for (var i=0;i<this.get('commentids').length;i++)
43             {
44                 this.hide(e, this.get('commentids')[i]);
45             }
47             this.panels[commentid].show(); //show the panel
49             e.halt(); // we are going to attach a new 'hide panel' event to the body,
50             // because javascript always propagate event to parent tag,
51             // we need to tell Yahoo to stop to call the event on parent tag
52             // otherwise the hide event will be call right away.
54             // We add a new event on the body in order to hide the panel for the next click.
55             this.event = Y.one(document.body).on('click', this.hide, this, commentid);
56             // We add a new event on the panel in order to hide the panel for the next click (touch device).
57             this.panelevent = Y.one("#commentoverlay-"+commentid).on('click', this.hide, this, commentid);
59             // Focus on the close button
60             this.panels[commentid].get('buttons').header[0].focus();
61         },
63         hide : function (e, commentid) {
64             this.panels[commentid].hide(); //hide the panel
65             if (this.event != null) {
66                 this.event.detach(); //we need to detach the body hide event
67             //Note: it would work without but create js warning everytime
68             //we click on the body
69             }
70             if (this.panelevent != null) {
71                 this.panelevent.detach(); //we need to detach the panel hide event
72             //Note: it would work without but create js warning everytime
73             //we click on the body
74             }
76         }
78     }, {
79         NAME : COMMENTSNAME,
80         ATTRS : {
81             commentids: {}
82         }
83     });
85     M.blocks_community = M.blocks_community || {};
86     M.blocks_community.init_comments = function(params) {
87         return new COMMENTS(params);
88     }
90 }, '@VERSION@', {
91     requires:['base', 'moodle-core-notification']
92 });