source: ComponentRegistry/branches/ComponentRegistry-1.13.0-olha/ComponentBrowserGui/src/main/flex/clarin/cmdi/componentregistry/browser/CommentsPanel.as @ 2338

Last change on this file since 2338 was 2338, checked in by olhsha, 12 years ago

the even about accessibility of the vertical scroll bar on the comments panel

File size: 5.6 KB
Line 
1 package clarin.cmdi.componentregistry.browser
2{
3        import clarin.cmdi.componentregistry.common.Comment;
4        import clarin.cmdi.componentregistry.common.Credentials;
5        import clarin.cmdi.componentregistry.common.ItemDescription;
6        import clarin.cmdi.componentregistry.common.StyleConstants;
7        import clarin.cmdi.componentregistry.common.components.RssCommentsContextMenu;
8        import clarin.cmdi.componentregistry.common.components.RssLinkButton;
9        import clarin.cmdi.componentregistry.services.CommentListService;
10        import clarin.cmdi.componentregistry.services.CommentPostService;
11        import clarin.cmdi.componentregistry.services.Config;
12        import clarin.cmdi.componentregistry.services.DeleteService;
13       
14        import flash.events.Event;
15        import flash.events.MouseEvent;
16        import flash.net.URLRequest;
17        import flash.net.navigateToURL;
18       
19        import mx.containers.Canvas;
20        import mx.containers.HBox;
21        import mx.containers.VBox;
22        import mx.controls.HRule;
23        import mx.controls.Image;
24        import mx.controls.Label;
25        import mx.controls.scrollClasses.ScrollBar;
26       
27       
28       
29        [Event(name="commentsLoaded",type="flash.events.Event")]
30        public class CommentsPanel extends Canvas
31        {
32                public static const COMMENTS_LOADED:String = "commentsLoaded";
33               
34               
35                public static const SCROLL_BAR_SWITCHED_EVENT:String = "verticalScrollBarSwitched";
36                [Bindable]
37                private var _vScrollBarVisibility:Boolean;
38               
39                [Bindable]
40                private var _itemDescription:ItemDescription;
41                private var service:CommentListService;
42               
43                private var commentsBox:VBox;
44                private const hPadding:int = 5;
45                private const vPadding:int = 5;
46               
47               
48                public function get commentListService():CommentListService {
49                        return service;
50                }
51               
52                public function set itemDescription(itemDescription:ItemDescription):void {
53                        _itemDescription = itemDescription;
54                }
55               
56               
57                public function CommentsPanel()
58                { 
59
60                        this.setStyle("layout", "absolute");
61                        this.verticalScrollPolicy = "on";
62                        this.addEventListener(SCROLL_BAR_SWITCHED_EVENT, vScrollBarSwitchedHandler);
63                        // this is for responding to the deletion of comments. At this point there is no way to distinghuish between item and component deletion
64                        // and that probably is fine since they mostly require the same response. It does mean that this component will also reload when a
65                        // component gets deleted, which is a bit superfluous.
66                        DeleteService.instance.addEventListener(DeleteService.ITEM_DELETED, commentDeletedHandler);
67                }
68               
69            private function vScrollBarSwitchedHandler(e:Event):void{
70                        this.verticalScrollBar.visible = _vScrollBarVisibility;
71                }
72               
73                // where to put this dispatcher, where the panel is redrawn/made a displayObject? where is it?
74                public function vScrollBarDispatcher():void {
75                        if (_vScrollBarVisibility != this.verticalScrollBar.accessibilityEnabled) {
76                                _vScrollBarVisibility = this.verticalScrollBar.accessibilityEnabled;
77                                dispatchEvent(new Event(SCROLL_BAR_SWITCHED_EVENT));
78                        }
79                }
80               
81                private function makeRssLinkButton():RssLinkButton{
82                       
83                        var rssButtonTmp:RssLinkButton = new RssLinkButton();
84                        rssButtonTmp.contextMenu = (new RssCommentsContextMenu(_itemDescription)).cm;
85                        rssButtonTmp.addEventListener(MouseEvent.CLICK,  goToFeed);
86                        rssButtonTmp.setStyle("top", vPadding);
87                        rssButtonTmp.setStyle("right", hPadding);
88                        return rssButtonTmp;
89                }
90               
91                private function goToFeed(event:MouseEvent):void{
92                        navigateToURL(new URLRequest(Config.getRssUriComments(_itemDescription)), "_blank");
93                }
94               
95                public function load():void{
96                        removeAllChildren();
97                       
98                        if(_itemDescription != null) {
99                               
100                                // A box for the comments (will be loaded in callback but should be shown first)
101                                commentsBox = new VBox();
102                                commentsBox.setStyle("top", vPadding);
103                                commentsBox.setStyle("left", hPadding);
104                                addChild(commentsBox);
105                               
106                                // Do actual loading
107                                service = new CommentListService(_itemDescription, _itemDescription.isInUserSpace);
108                                service.addEventListener(CommentListService.COMMENTS_LOADED, commentsLoaded);
109                                service.load();
110                               
111                               
112                                // Rss feed "button"
113                                if (! _itemDescription.isInUserSpace){
114                                        var rssButton:RssLinkButton  = makeRssLinkButton();
115                                        addChild(rssButton);
116                                }
117                               
118                        }
119                }
120               
121                private function addPostPanel():void{
122                        if(Credentials.instance.isLoggedIn()){
123                                var postPanel:commentPostPanel = new commentPostPanel();
124                                postPanel.itemDescription = _itemDescription;
125                                postPanel.commentPostService.addEventListener(CommentPostService.POST_COMPLETE, postCompleteHandler);
126                                commentsBox.addChild(postPanel);
127                        } else{
128                                var loginToPostLabel:Label = new Label();
129                                loginToPostLabel.setStyle("fontWeight","bold");
130                                loginToPostLabel.text = "Login to leave a comment!";
131                                commentsBox.addChild(loginToPostLabel);
132                        }
133                }
134               
135                private function commentsLoaded(event:Event):void{
136                        if(service) {
137                                var commentsCount:int = service.comments.length;
138                                _itemDescription.commentsCount = commentsCount;
139                               
140                                if(commentsCount > 0) {
141                                        for each(var comment:Comment in service.comments) {
142                                                var panel:CommentPanel = new CommentPanel(comment);
143                                                commentsBox.addChild(panel);
144                                        }
145                                } else {
146                                        var noCommentsPostedLabel:Label = new Label();
147                                        noCommentsPostedLabel.text = "No comments have been posted thus far.";
148                                        commentsBox.addChild(noCommentsPostedLabel);
149                                       
150                                        var rule:HRule = new HRule();
151                                        rule.percentWidth = 100;
152                                        commentsBox.addChild(rule);
153                                }
154                        }
155                        dispatchEvent(new Event(COMMENTS_LOADED));
156                       
157                        // A panel for posting a comment (or a message 'login to post');
158                        addPostPanel();
159                }
160               
161                private function postCompleteHandler(event:Event):void{
162                        load();
163                }
164               
165                private function commentDeletedHandler(event:Event):void {
166                        load();
167                }
168        }
169}
Note: See TracBrowser for help on using the repository browser.