class ProfilePicsPanel(Composite): """ Display Profile Pics in a panel. CSS Configuration. <ul> <li>.gwittit-ProfilePicsPanel <li>.gwittit-ProfilePicsPanel-pics </ul> """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.pics = FlowPanel() self.seeAllLink = Anchor(u"See All") self.PAGE_SIZE = 10 self.uids = None @__init__.register @java.typed(List) def __init__(self, uids): self.__init__._super() """ Create a new Panel """ self.uids = uids self.outer.getElement().setId(u"ProfilePicsPanel") self.pics.getElement().setId(u"ProfilePicsPanel-pics-" + java.str(System.currentTimeMillis())) self.outer.addStyleName(u"gwittit-ProfilePicsPanel") self.pics.addStyleName(u"gwittit-ProfilePicsPanel-pics") self.outer.add(self.pics) self.renderProfilePics() # Add list of fbprofilepics to the pics panel if uids.size() > PAGE_SIZE: self.outer.add(self.seeAllLink) class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): popup = ProfilePicsPopup(uids) popup.center() popup.show() self.seeAllLink.addClickHandler(_anonymous()) Xfbml.parse(self.pics) self.initWidget(self.outer) @java.private def renderProfilePics(self): i = 0 while i < PAGE_SIZE and i < self.uids.size(): i+= 1 uid = self.uids.get(i) profilePic = FbProfilePic(uid, Size.square) profilePic.setWidth(u"35px") profilePic.setHeight(u"35px") self.pics.add(profilePic)
class LoginBox(Composite): """ Displays a rounded box ( firefox/safari ) with at facebook connect button. And a link as backup in case the button is not rendered. """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.inner = HorizontalPanel() self.loginButton = FbLoginButton(u"facebookConnectLogin()") self.loginLink = Anchor(u"don't see a button? Click here to login") self.loginCallback = None @java.typed(LoginCallback) def addLoginCallback(self, loginCallback): self.loginCallback = loginCallback @__init__.register @java.typed() def __init__(self, ): self.__init__._super() self.outer.getElement().setId(u"OuterRouter") class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): class _anonymous(AsyncCallback): @java.typed(Throwable) def onFailure(self, caught): GWT.log(u"Require session failed: " + java.str(caught)) @java.typed(Boolean) def onSuccess(self, isLoggedIn): if self.loginCallback is not None and isLoggedIn: self.loginCallback.onLogin() FacebookConnect.requireSession(_anonymous()) self.loginLink.addClickHandler(_anonymous()) # Login with the javascript api. GWT client doesnt render the fb:login-button self.outer.getElement().setId(u"LoginBox") self.inner.addStyleName(u"inner") self.outer.add(HTML(u"<h1>Login with your facebook id: </h1>")) self.outer.add(HTML(u"This demo uses facebook data heavily to demonstrate API calls etc so you might as well login right away")) self.inner.setSpacing(10) self.inner.add(HTML(u"Click the button to allow this application to access your facebook account")) self.inner.add(self.loginButton) self.outer.add(self.inner) self.outer.add(self.loginLink) sourceCode = HTML(u"<br/><br/>This project on Gogle code : <a target=_blank href=\"http://code.google.com/p/gwt-facebook/\"> http://code.google.com/p/gwt-facebook/ </a>") sourceCode.addStyleName(u"sourceCode") self.outer.setWidth(u"400px") self.outer.add(sourceCode) Xfbml.parse(self.outer) self.initWidget(self.outer)
def createEventInfoUi(self, eventInfo): p = VerticalPanel() p.addStyleName(u"eventInfo") html = java.str(u"<h4>" + java.str(eventInfo.getName())) + u"</h4>" html += java.str(java.str(u"When: " + java.str(eventInfo.getStartTime())) + u", Where: " + eventInfo.getLocation()) + u"<br/>" self.responsePanel.add(HTML(html)) mPanel = SimplePanel() mLink = Anchor(u"See who's attending") mLink.addClickHandler(self.GetMembersClickHandler(eventInfo.getEid(), mPanel)) p.add(mLink) p.add(mPanel) return p
def handleCommentsResponse(self, comments): for comment in comments: box = VerticalPanel() box.addStyleName(u"commentBox") p = HorizontalPanel() p.setSpacing(5) p.add(FbProfilePic(comment.getFromId(), Size.square)) p.add(HTML(java.str(comment.getText()) + u" from " + FbName(comment.getFromId()))) box.add(p) removeLink = Anchor(u"Remove") removeLink.addClickHandler(self.CommentsRemoveClickHandler(comment.getId())) box.add(removeLink) self.outer.add(box) Xfbml.parse(self.outer)
def renderProfiles(self, addContentToPnl, profiles): """ Render profiles in the stream """ addContentToPnl.clear() addContentToPnl.add(HTML(u"<h3>Profiles in Strea</h3>")) for p in Util.iterate(profiles): tmp = FlowPanel() # Split pic on the left, name on the right tmp.addStyleName(u"profiles fbColorLight rounded addSpace") tmp.add(Image(p.getPicSquare())) a = Anchor(p.getName()) # Link to profile a.addStyleName(u"postContent") a.setHref(p.getUrl()) tmp.add(a) addContentToPnl.add(tmp)
def onSuccess(self, groups): self.removeLoader(outer) for g in groups: membersWrapper = VerticalPanel() membersWrapper.addStyleName(u"membersWrapper") memberLink = Anchor(u"See Members") class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): self.displayMembers(membersWrapper, g.getGid()) memberLink.addClickHandler(_anonymous()) outer.add(HTML(java.str(u"<h4>Group: " + java.str(g.getName())) + u"</h4>")) outer.add(memberLink) outer.add(membersWrapper)
def createShowcasePanel(self, example): self.showcaseWrapper.clear() sourceLink = Anchor() sourceLink.setHTML(java.str(u"Browse Source: " + java.str(example.getClass().getName())) + u".java ") sourceLink.addStyleName(u"sourceLink") repo = u"http://code.google.com/p/gwt-facebook/source/browse/trunk/GwittIt/src/" className = java.str((u"" + java.str(example.getClass().getName())).replace(u".", u"/")) + u".java" sourceLink.setHref(repo + className) sourceLink.setTarget(u"_blank") self.showcaseWrapper.add(sourceLink) self.showcaseWrapper.add(HTML(u"<hr/>")) self.showcaseWrapper.add(example)
def renderMainContent(self, addContentToPnl): """ Render when user granted us permission to read stream """ streamBody = VerticalPanel() streamBody.getElement().setId(u"streamBody") menu = HorizontalPanel() menu.addStyleName(u"streamMenu") menu.setSpacing(5) postsLink = Anchor(u"Posts") # Create menu profilesLink = Anchor(u"Profiles") albumsLink = Anchor(u"Albums") menu.add(HTML(u"<b> Choose Stream : </b> ")) menu.add(postsLink) menu.add(albumsLink) menu.add(profilesLink) class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): self.renderPosts(streamBody, self.stream.getPosts()) Xfbml.parse(streamBody) postsLink.addClickHandler(_anonymous()) # Click posts link class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): streamBody.clear() self.renderProfiles(streamBody, self.stream.getProfiles()) profilesLink.addClickHandler(_anonymous()) # Click profiles link class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): self.renderAlbums(streamBody, self.stream.getAlbums()) albumsLink.addClickHandler(_anonymous()) # Click album links addContentToPnl.add(streamBody) self.addLoader(streamBody) # Start loading class _anonymous(AsyncCallback): @java.typed(Throwable) def onFailure(self, caught): self.handleFailure(caught) @java.typed(Stream) def onSuccess(self, result): self.stream = result addContentToPnl.insert(menu, 0) self.removeLoader(streamBody) self.renderPosts(streamBody, result.getPosts()) Xfbml.parse(streamBody) self.apiClient.streamGet(_anonymous()) # Get stream from facebook.
def createAttachmentUI(self, attachment): """ Create attachment UI """ p = VerticalPanel() p.addStyleName(u"attachment fbColorLight rounded addSpace") p.add(HTML(u"<h3>Attachment</h3> ")) thumbs = HorizontalPanel() thumbs.setSpacing(10) for m in Util.iterate(attachment.getMedia()): p.add(HTML(u"<b>MediaContent:</b> " + java.str(m.getType()))) if m.getSrc() is not None: thumbs.add(Image(m.getSrc())) if m.getTypeEnum() == Type.video: vLink = Anchor(u"See Video") vLink.setHref(m.getVideo().getSourceUrl()) p.add(vLink) p.add(thumbs) return p
def renderLoginInfo(self): self.loginInfo.clear() uid = self.apiClient.getLoggedInUser() fbName = FbName(uid, False) fbName.setUseyou(False) pic = FbProfilePic(uid, FbProfilePic.Size.square) pic.setSize(u"15px", u"15px") GWT.log(u"TopMenu: render " + java.str(fbName), None) self.loginInfo.add(fbName) tmp = SimplePanel() tmp.addStyleName(u"miniProfilePic") tmp.setWidget(pic) self.loginInfo.add(tmp) logout = Anchor(u"Logout") class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): FacebookConnect.logoutAndRedirect(u"/") logout.addClickHandler(_anonymous()) self.loginInfo.add(logout)
def onSuccess(self, result): self.removeLoader(outer) outer.add(HTML(u"Result Size " + java.str(result.size()))) for no in result: tmp = VerticalPanel() tmp.addStyleName(u"notification") tmp.add(HTML(java.str(u"<h3>" + java.str(no.getTitleText())) + u"</h3>")) tmp.add(HTML(no.getBodyHtml())) tmp.add(HTML(no.getHref())) if not no.getIsUnread(): tmp.add(HTML(u"Status : Old")) markRead = Anchor(u"Mark as Read") class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): markRead.setHTML(u"Marked as Read") markRead(no.getNotificationId()) markRead.addClickHandler(_anonymous()) tmp.add(markRead) outer.add(tmp)
def createShowPermissionUI(self, permission): a = Anchor() if self.message is not None: a.setHTML(java.str(u"<h3>" + java.str(self.message)) + u"</h3>") else: a.setHTML(java.str(u"<h3>Grant " + java.str(permission)) + u" permission</h3>") a.addStyleName(u"clickable") class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): class _anonymous(AsyncCallback): @java.typed(Throwable) def onFailure(self, caught): ErrorResponseUI(caught).center() @java.typed(Boolean) def onSuccess(self, result): if self.handler is not None: self.handler.onPermissionChange(result) FacebookConnect.showPermissionDialog(permission, _anonymous()) a.addClickHandler(_anonymous()) return a
def __init__(self, *a, **kw): self.outer = VerticalPanel() self.pics = FlowPanel() self.seeAllLink = Anchor(u"See All") self.PAGE_SIZE = 10 self.uids = None
def onSuccess(self, noteId): p.add(HTML(u"Added note with id " + java.str(noteId))) deleteNoteLink = Anchor(u"Delete") deleteNoteLink.addClickHandler(self.DeleteNoteClickHandler(noteId)) p.add(deleteNoteLink)
def __init__(self, *a, **kw): self.outer = VerticalPanel() self.inner = HorizontalPanel() self.loginButton = FbLoginButton(u"facebookConnectLogin()") self.loginLink = Anchor(u"don't see a button? Click here to login") self.loginCallback = None