817e3ac5d8a4fc50ec53e53dfd520b806a9f24e5
[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         overlayevent:null,
13         overlays: [], //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.overlays[commentid] = new M.core.dialogue({
22                     headerContent:Y.one('#commentoverlay-'+commentid+' .commenttitle').get('innerHTML'),
23                     bodyContent:Y.one('#commentoverlay-'+commentid).get('innerHTML'),
24                     visible: false, //by default it is not displayed
25                     lightbox : false,
26                     zIndex:100,
27                     height: '350px'
28                 });
30                 this.overlays[commentid].get('contentBox').one('.commenttitle').remove();
31                 this.overlays[commentid].render();
32                 this.overlays[commentid].hide();
34                 Y.one('#comments-'+commentid).on('click', this.show, this, commentid);
35             }
37         },
39         show : function (e, commentid) {
41             //hide all overlays
42             for (var i=0;i<this.get('commentids').length;i++)
43             {
44                 this.hide(e, this.get('commentids')[i]);
45             }
47             this.overlays[commentid].show(); //show the overlay
49             e.halt(); // we are going to attach a new 'hide overlay' 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 overlay 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 overlay in order to hide the overlay for the next click (touch device)
57             this.overlayevent = Y.one("#commentoverlay-"+commentid).on('click', this.hide, this, commentid);
58         },
60         hide : function (e, commentid) {
61             this.overlays[commentid].hide(); //hide the overlay
62             if (this.event != null) {
63                 this.event.detach(); //we need to detach the body hide event
64             //Note: it would work without but create js warning everytime
65             //we click on the body
66             }
67             if (this.overlayevent != null) {
68                 this.overlayevent.detach(); //we need to detach the overlay hide event
69             //Note: it would work without but create js warning everytime
70             //we click on the body
71             }
73         }
75     }, {
76         NAME : COMMENTSNAME,
77         ATTRS : {
78             commentids: {}
79         }
80     });
82     M.blocks_community = M.blocks_community || {};
83     M.blocks_community.init_comments = function(params) {
84         return new COMMENTS(params);
85     }
87 }, '@VERSION@', {
88     requires:['base','overlay', 'moodle-core-notification']
89 });