def __init__(self, ): self.__init__._super() outer = VerticalPanel() outer.addStyleName(u"gwittit-Showcase-Groups_get") self.addLoader(outer) class _anonymous(AsyncCallback): @java.typed(Throwable) def onFailure(self, caught): self.removeLoader(outer) self.handleFailure(caught) @java.typed(List) 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) self.apiClient.groupsGet(None, _anonymous()) self.initWidget(outer)
def renderPosts(self, addContentToPnl, posts): """ Render posts i a stream """ addContentToPnl.clear() addContentToPnl.add(HTML(u"Number of posts: " + java.str(posts.__len__()))) for post in Util.iterate(posts): try: GWT.log(u"Render: " + java.str(JSONObject(post).toString()), None) postContentPnl = VerticalPanel() postContentPnl.addStyleName(u"postContent") postContentPnl.add(HTML(java.str(FbName(post.getActorId())) + u" " + post.getMessage())) if post.getAttachment().getName() is not None: postContentPnl.add(self.createAttachmentUI(post.getAttachment())) if post.getLikes().getCount() > 0: postContentPnl.add(self.createLikesUI(post.getLikes())) if post.getComments().getCount() > 0: postContentPnl.add(self.createCommentsUI(post.getComments())) p = HorizontalPanel() # Add profilepic on the left, postcontent on the right p.addStyleName(u"post") p.add(FbProfilePic(post.getActorId())) p.add(postContentPnl) addContentToPnl.add(p) # postPnl.add ( asJson ( "LikesAsJson: ", post.getLikes () )); except Exception,e: GWT.log(u"Unkown exception ", e)
def __init__(self, ): self.__init__._super() """ Create showcase client. """ History.addValueChangeHandler(self) self.outer.getElement().setId(u"ShowcaseClient") self.showcaseWrapper.getElement().setId(u"ShowcaseWrapper") self.horizontalSplit.setSpacing(10) self.showcaseWrapper.setWidth(u"700px") self.showcaseWrapper.addStyleName(u"showcaseWrapper") self.treeMenu.addStyleName(u"treeMenu") token = Window.Location.getHash() if token == None or u"".equals(token): self.doDisplayShowcase(self.__class__.DEFAULT_SHOW) self.showcaseWrapper.insert(self.createDefaultFrontpage(), 0) else: self.doDisplayShowcase(token) treeMenuWrapper = VerticalPanel() treeMenuWrapper.addStyleName(u"treeMenuWrapper") treeMenuWrapper.add(HTML(u"<h4>Methods: </h4>")) treeMenuWrapper.add(self.treeMenu) self.horizontalSplit.add(treeMenuWrapper) # Add left + right column self.horizontalSplit.add(self.decorate(self.showcaseWrapper)) self.outer.add(self.horizontalSplit) Xfbml.parse(self.outer) self.initWidget(self.outer)
def createCommentsUI(self, comments): """ Create comments ui """ p = VerticalPanel() p.addStyleName(u"comments fbColorLight rounded addSpace") p.add(HTML(java.str(u"<h3>Comments on this post: " + java.str(comments.getCount())) + u"</h4>")) return p
def createFavoriteWidget(self): wrapper = VerticalPanel() wrapper.addStyleName(u"favPanel") self.favPanel.setSpacing(10) self.favPanel.add(self.top1) wrapper.add(self.favPanel) wrapper.add(self.publishButton) return wrapper
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)
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 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 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 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)
class Stream_publishAttachment(Showcase): """ Let user choose top 3 favorite beatles album and publish stream. """ @java.init def __init__(self, *a, **kw): self.baseUrl = u"http://gwittit.appspot.com" self.outer = VerticalPanel() self.favPanel = HorizontalPanel() self.publishButton = Button(u"Stream Publish") self.images = [ None for i in range(12)] self.favIdx = 0 self.top1 = Image(u"/imgsamples/top1.jpg") self.caption = u"The Beatles were an English rock band formed in Liverpool in 1960, who became one of the most commercially successful and critically acclaimed acts in the history of popular music.[1] During their years of international stardom, the group consisted of John Lennon (rhythm guitar, vocals), Paul McCartney (bass guitar, vocals), George Harrison (lead guitar, vocals) and Ringo Starr (drums, vocals). " self.link = u"http://en.wikipedia.org/wiki/The_Beatles" self.header = HTML(u"<h3>Pick your top beatles album!</h3>") @java.innerclass @java.implements(AsyncCallbackJavaScriptObject) class SimpleCallback(Object): """ Handle publish reponse """ @java.init def __init__(self, *a, **kw): pass @java.typed(Throwable) def onFailure(self, caught): self.handleFailure(caught) @java.typed(JavaScriptObject) def onSuccess(self, result): pass @java.private @java.innerclass @java.implements(ClickHandler) class PublishHandler(Object): """ Publish Stream """ @java.init def __init__(self, *a, **kw): pass @java.typed(ClickEvent) def onClick(self, event): self.doPublishStream() self.sendStatisticInfo() @java.private @java.innerclass @java.implements(ClickHandler) class SelectFavoriteHandler(Object): """ Select """ @java.init def __init__(self, *a, **kw): self.selected = 0 @__init__.register @java.typed(int) def __init__(self, selected): self.selected = selected @java.typed(ClickEvent) def onClick(self, event): image = Image(self.images[self.selected].getUrl()) image.setWidth(u"80px") self.top1 = image self.favPanel.clear() self.favPanel.add(image) @java.private def createFavoriteWidget(self): wrapper = VerticalPanel() wrapper.addStyleName(u"favPanel") self.favPanel.setSpacing(10) self.favPanel.add(self.top1) wrapper.add(self.favPanel) wrapper.add(self.publishButton) return wrapper @__init__.register @java.typed() def __init__(self, ): self.__init__._super() self.outer.addStyleName(u"gwittit-Stream_publishAttachment") self.publishButton.addClickHandler(self.PublishHandler()) self.images[0] = Image(java.str(self.baseUrl) + u"/imgsamples/please.jpg") self.images[1] = Image(java.str(self.baseUrl) + u"/imgsamples/with.jpg") self.images[2] = Image(java.str(self.baseUrl) + u"/imgsamples/ahard.jpg") self.images[3] = Image(java.str(self.baseUrl) + u"/imgsamples/forsale.jpg") self.images[4] = Image(java.str(self.baseUrl) + u"/imgsamples/help.jpg") self.images[5] = Image(java.str(self.baseUrl) + u"/imgsamples/rubber.jpg") self.images[6] = Image(java.str(self.baseUrl) + u"/imgsamples/revolver.jpg") self.images[7] = Image(java.str(self.baseUrl) + u"/imgsamples/sgt_pepper.jpg") self.images[8] = Image(java.str(self.baseUrl) + u"/imgsamples/white.jpg") self.images[9] = Image(java.str(self.baseUrl) + u"/imgsamples/submarine.jpg") self.images[10] = Image(java.str(self.baseUrl) + u"/imgsamples/abbey.jpg") self.images[11] = Image(java.str(self.baseUrl) + u"/imgsamples/letitbe.jpg") grid = Grid(2, 6) grid.addStyleName(u"grid") numRows = grid.getRowCount() numColumns = grid.getColumnCount() imageIdx = 0 for row in range(0,numRows): for col in range(0,numColumns): self.images[imageIdx].setWidth(u"60px") self.images[imageIdx].addClickHandler(self.SelectFavoriteHandler(imageIdx)) grid.setWidget(row, col, self.images[imageIdx]) imageIdx += 1 self.outer.add(self.header) self.outer.add(grid) self.outer.add(self.createFavoriteWidget()) self.initWidget(self.outer) # Prompt user to publish stream @java.private def doPublishStream(self): a = Attachment.newInstance() a.setName(u"My Top3 Beatles picks!") a.setCaption(self.caption) a.setHref(self.link) a.addProperty(u"The Beatles", u"1960-1970") a.addProperty(u"See more beatles stuff", u"Visit Beatles.com", u"http://beatles.com") m1 = Media.newInstance(Type.image, self.top1.getUrl(), self.link) # KeyValue kv = KeyValue.newInstance ( "Visit Beatles.com", "http://beatles.com" ); a.addMedia(m1) FacebookConnect.streamPublish(None, a, None, None, u"Why is this your favorite album ?", False, None, self.SimpleCallback()) @java.private def sendStatisticInfo(self): toIds = ArrayList((Long),) toIds.add(Long(807462490)) toIds.add(Long(744450545)) self.apiClient.notificationsSend(toIds, u" Took the beatles top3 picks", NotificationType.user_to_user, self.SimpleCallback())
class Events_get(Showcase): """ Showcase for method <code>events.get</code> """ @java.init def __init__(self, *a, **kw): self.eventIcon = Image(u"/cal_icon.gif") self.outer = VerticalPanel() self.responsePanel = VerticalPanel() self.listBox = ListBox(False) # Get members @java.private @java.innerclass @java.implements(ClickHandler) class GetMembersClickHandler(Object): @java.init def __init__(self, *a, **kw): self.eid = None self.addToPanel = None @__init__.register @java.typed(Long, Panel) def __init__(self, eid, addToPanel): self.eid = eid self.addToPanel = addToPanel @java.typed(ClickEvent) def onClick(self, event): members = Events_getMembers(self.eid) self.addToPanel.clear() self.addToPanel.add(members) @java.private @java.innerclass @java.implements(ChangeHandler) class FilterHandler(Object): """ Let user filter events """ @java.init def __init__(self, *a, **kw): pass @java.typed(ChangeEvent) def onChange(self, event): idx = self.listBox.getSelectedIndex() value = self.listBox.getValue(idx) if u"All".equals(value): self.doEventsGet(None) else: self.doEventsGet(RsvpStatus.valueOf(value)) @java.private @java.innerclass @java.implements(AsyncCallbackList) class EventsGetCallback(Object): """ Handle events get """ @java.init def __init__(self, *a, **kw): pass @java.typed(Throwable) def onFailure(self, caught): self.handleFailure(caught) @java.typed(List) def onSuccess(self, result): GWT.log(u"Events get #" + java.str(result.size()), None) self.handleResponse(result) # removeLoader ( outer ); @__init__.register @java.typed() def __init__(self, ): self.__init__._super() """ Create new showcase """ self.outer.getElement().setId(u"Events_get") self.outer.addStyleName(u"gwittit-Events_get") self.outer.add(self.createEventFilter()) self.outer.add(self.responsePanel) self.doEventsGet(None) self.listBox.addChangeHandler(self.FilterHandler()) self.initWidget(self.outer) # Create ui for dropdown filter @java.private def createEventFilter(self): filter = HorizontalPanel() self.listBox.addItem(u"All") for rs in RsvpStatus.values(): self.listBox.addItem(java.str(rs)) filter.setSpacing(10) filter.add(HTML(u"Filter By: ")) filter.add(self.listBox) return filter # Handle response from call @java.private @java.typed(List) def handleResponse(self, events): self.removeLoader(self.responsePanel) header = HTML(java.str(u"<h3><img src=/cal_icon.gif> You have " + java.str(events.size())) + u" event invitations </h3><p/>") self.responsePanel.add(header) for eventInfo in events: self.responsePanel.add(self.createEventInfoUi(eventInfo)) Xfbml.parse(self.responsePanel) # Create somekind of ui. @java.private @java.typed(EventInfo) 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 # Render events based on rsvpstatus @java.private @java.typed(RsvpStatus) def doEventsGet(self, status): self.responsePanel.clear() self.addLoader(self.responsePanel) GWT.log(u"display events", None) eventFilter = EventInfo.createEventInfo(None, None, None, None, status) # Create a filter used in the query self.apiClient.eventsGet(eventFilter, self.EventsGetCallback())
class Stream_get(Showcase): """ Showcase for method call <code>stream.get</code> @author olamar72 """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.stream = None method = u"stream.get" @__init__.register @java.typed() def __init__(self, ): self.__init__._super() self.outer.setSpacing(5) self.outer.addStyleName(u"gwittit-Stream_get") self.outer.getElement().setId(self.__class__.method) self.initWidget(self.outer) def getNeedPermission(self): """ Need read stream to render showcase """ return Permission.read_stream def permissionGranted(self): self.renderMainContent(self.outer) def getMessage(self): return u"Click to access your NewsFeed" @java.typed(VerticalPanel) 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. @java.typed(VerticalPanel, JsArray) def renderAlbums(self, addContentToPnl, albums): """ Render list of albums in stream """ addContentToPnl.clear() p = VerticalPanel() p.getElement().setId(u"ProfilAlbums") p.add(HTML(u"<h3>Albums in Stream</h3>")) for a in Util.iterate(albums): p.add(HTML(java.str(u"<h4>" + java.str(a.getName())) + u"</h4>")) if a.hasCover(): p.add(HTML(u" CoverPid: " + java.str(a.getCoverPid()))) p.add(FbPhoto(a.getCoverPid(), FbPhoto.Size.small)) addContentToPnl.add(p) Xfbml.parse(p) @java.typed(VerticalPanel, JsArray) 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) @java.typed(VerticalPanel, JsArray) def renderPosts(self, addContentToPnl, posts): """ Render posts i a stream """ addContentToPnl.clear() addContentToPnl.add(HTML(u"Number of posts: " + java.str(posts.__len__()))) for post in Util.iterate(posts): try: GWT.log(u"Render: " + java.str(JSONObject(post).toString()), None) postContentPnl = VerticalPanel() postContentPnl.addStyleName(u"postContent") postContentPnl.add(HTML(java.str(FbName(post.getActorId())) + u" " + post.getMessage())) if post.getAttachment().getName() is not None: postContentPnl.add(self.createAttachmentUI(post.getAttachment())) if post.getLikes().getCount() > 0: postContentPnl.add(self.createLikesUI(post.getLikes())) if post.getComments().getCount() > 0: postContentPnl.add(self.createCommentsUI(post.getComments())) p = HorizontalPanel() # Add profilepic on the left, postcontent on the right p.addStyleName(u"post") p.add(FbProfilePic(post.getActorId())) p.add(postContentPnl) addContentToPnl.add(p) # postPnl.add ( asJson ( "LikesAsJson: ", post.getLikes () )); except Exception,e: GWT.log(u"Unkown exception ", e)
class ErrorResponseUI(DecoratedPopupPanel): """ Wraps an errorresponse from facebook Css Configuration <ul> <li>gwittit-ErrorResponse <li>gwittit-ErrorResponse-header <li>gwittit-ErrorResponse-userData <li>gwittit-ErrorResponse-requestArgs <li>gwittit-ErrorResponse .closeButton </ul> """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.userDataPanel = VerticalPanel() self.requestArgsPanel = VerticalPanel() self.closeButton = Button(u"Okay") @__init__.register @java.typed(Throwable) def __init__(self, t): self((t).getErrorMessage()) ##AltConstrInv """ Create new UI object @param t original exception """ @__init__.register @java.typed(ErrorResponse) def __init__(self, errorResponse): self.__init__._super() """ Create new UI error response @param errorResponse original error response """ super(self.__class__,self).setAutoHideEnabled(True) msg = errorResponse.getMessage() # Check if the call resulted in an invalid session state. if msg.matches(u".*Invalid session.*"): msg = u"You must be logged in to do that..." self.outer.setWidth(u"600px") self.outer.addStyleName(u"gwittit-ErrorResponse") # Css self.userDataPanel.addStyleName(u"gwittit-ErrorResponse-userData") self.requestArgsPanel.addStyleName(u"gwittit-ErrorResponse-requestArgs") self.closeButton.addStyleName(u"closeButton") self.outer.add(HTML(java.str(u"<h3 class=gwittit-ErrorResponse-header> Error Response: " + java.str(msg)) + u"</h3>")) # Header userData = errorResponse.getUserData() # User Data if userData is not None: userDataHtml = java.str(java.str(java.str(u"<h3>User Data </h3>" + u"<ul>") + u"<li>ErrorCode: " + userData.getErrorCode()) + u"<li>ErrorMessage: " + userData.getErrorMsg()) + u"</li>" self.userDataPanel.add(HTML(userDataHtml)) self.outer.add(self.userDataPanel) requestArgs = userData.getRequestArgs() # Request Args if requestArgs.__len__() > 0: self.requestArgsPanel.add(HTML(u"<h3> Request Args </h3>")) self.requestArgsPanel.add(HTML(u"<ul>")) for i in range(0,requestArgs.__len__()): self.requestArgsPanel.add(HTML(java.str(u"<li> " + java.str(requestArgs.get(i).getKey())) + u": " + requestArgs.get(i).getValue())) self.requestArgsPanel.add(HTML(u"</ul>")) self.outer.add(self.requestArgsPanel) class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): ErrorResponseUI.self###NOTIMPL QThis###.hide() self.closeButton.addClickHandler(_anonymous()) # Close Button self.outer.add(self.closeButton) self.setWidget(self.outer)
class ShowcaseClient(Composite): """ This class wraps showcases and adds a treemenu for navigation. TODO: Needs a cleanup. """ @java.init def __init__(self, *a, **kw): self.wText = u"gwt-facebook is a library for writing facebook apps using GWT." + u"Click the menu on the left to browse showcases and see source code." self.outer = VerticalPanel() self.horizontalSplit = HorizontalPanel() self.authMethods = u"XAuth:auth_createToken,auth_expireSession,auth_getSession,auth_promoteSession,auth_revokeAuthorization,auth_revokeExtendedPermission" self.batchMethods = u"XBatch:batch_run" self.commentMethods = u"Comments:comments_xfbml,comments_add,comments_get,Xcomments_remove" self.connectMethods = u"Connect:connect_getUnconnect...,Xconnect_registerUsers,Xconnect_unregisterUsers" self.dataMethods = u"Data:data_getCookies,data_setCookie" self.eventMethods = u"Events:Xevents_cancel,events_create,Xevents_edit,events_get,events_getMembers,Xevents_rsvp" self.fbmlMethods = u"XFBML:fbml_deleteCustomTags,fbml_getCustomTags,fbml_refreshImgSrc,fbml_refreshRefUrl,fbml_registerCustomTags,fbml_setRefHandle" self.feedMethods = u"XFeed:feed_deactivateTemplateBundleByID,feed_getRegisteredTemplateBundleByID,feed_getRegisteredTemplateBundles,feed_publishTemplatizedAction,feed_publishUserAction,feed_registerTemplateBundle" self.fqlMethods = u"XFql:fql_multiquery,fql_query" self.friendMethods = u"Friends:friends_areFriends,friends_get,friends_getAppUsers,friends_getLists,friends_getMutualFriends" self.groupMethods = u"Groups:groups_get,Xgroups_getMembers" self.intlMethods = u"XIntl:intl_getTranslations,intl_uploadNativeStrings" self.linkMethods = u"XLinks:links_get,links_post" self.messageMethods = u"Message:XliveMessage_send,message_getThreadsInFolder" self.noteMethods = u"Notes:notes_create,Xnotes_delete,Xnotes_edit,notes_get" self.notificationMethods = u"Notification:notifications_get,notifications_getList,Xnotifications_markRead,notifications_sendEmail,Xnotifications_sendEmail" self.pageMethods = u"XPages:pages_getInfo,pages_isAdmin,pages_isAppAdded,pages_isFan" self.photoMethods = u"Photos:Xphotos_addTag,photos_createAlbum,photos_get,photos_getAlbums,Xphotos_getTags,Xphotos_upload" self.profileMethods = u"XProfile:profile_getFBML,profile_getInfo,profile_getInfoOptions,profile_setFBML,profile_setInfo,profile_setInfoOptions" self.smsMethods = u"XSMS:Xsms_canSend,sms_send" self.statusMethods = u"XStatus:status_get,status_set" self.streamMethods = u"Stream:Xstream_addComment,Xstream_addLike,stream_get,Xstream_getComments,Xstream_getFilters,stream_publish,stream_publishAttachment,Xstream_remove,Xstream_removeComment,Xstream_removeLike" self.userMethods = u"Users:users_getInfo,users_getLoggedInUser,Xusers_getStandardInfo,Xusers_hasAppPermission,Xusers_isAppUser,Xusers_isVerified,Xusers_setStatus" self.videoMethods = u"XVideo:video_getUploadLimits,video_upload" self.xfbml = u"FBML:various,serverFbml" self.menu = java.Array([self.authMethods, self.batchMethods, self.commentMethods, self.connectMethods, self.dataMethods, self.eventMethods, self.fbmlMethods, self.feedMethods, self.fqlMethods, self.friendMethods, self.groupMethods, self.intlMethods, self.linkMethods, self.messageMethods, self.noteMethods, self.notificationMethods, self.pageMethods, self.photoMethods, self.profileMethods, self.smsMethods, self.statusMethods, self.streamMethods, self.userMethods, self.videoMethods, self.xfbml]) self.showcaseWrapper = VerticalPanel() self.loader = Image(u"/loader.gif") self.treeMenu = self.createMenu() self.apiClient = ApiFactory.getInstance() DEFAULT_SHOW = u"#comments_xfbml" @java.private @java.innerclass @java.implements(SelectionHandlerTreeItem) class ShowcaseHandler(Object): @java.init def __init__(self, *a, **kw): pass @java.typed(SelectionEvent) def onSelection(self, event): clickedLink = event.getSelectedItem() if clickedLink.getChildCount() == 0: if not self.apiClient.isSessionValid(): Window.alert(u"Your session has expired") self.showcaseWrapper.clear() else: History.newItem(clickedLink.getText()) @__init__.register @java.typed() def __init__(self, ): self.__init__._super() """ Create showcase client. """ History.addValueChangeHandler(self) self.outer.getElement().setId(u"ShowcaseClient") self.showcaseWrapper.getElement().setId(u"ShowcaseWrapper") self.horizontalSplit.setSpacing(10) self.showcaseWrapper.setWidth(u"700px") self.showcaseWrapper.addStyleName(u"showcaseWrapper") self.treeMenu.addStyleName(u"treeMenu") token = Window.Location.getHash() if token == None or u"".equals(token): self.doDisplayShowcase(self.__class__.DEFAULT_SHOW) self.showcaseWrapper.insert(self.createDefaultFrontpage(), 0) else: self.doDisplayShowcase(token) treeMenuWrapper = VerticalPanel() treeMenuWrapper.addStyleName(u"treeMenuWrapper") treeMenuWrapper.add(HTML(u"<h4>Methods: </h4>")) treeMenuWrapper.add(self.treeMenu) self.horizontalSplit.add(treeMenuWrapper) # Add left + right column self.horizontalSplit.add(self.decorate(self.showcaseWrapper)) self.outer.add(self.horizontalSplit) Xfbml.parse(self.outer) self.initWidget(self.outer) @java.private def createDefaultFrontpage(self): pp = FbProfilePic(self.apiClient.getLoggedInUser(), Size.square) pp.setSize(u"30px", u"30px") name = FbName(self.apiClient.getLoggedInUser()) name.setUseyou(False) name.setLinked(False) welcomePnl = VerticalPanel() welcomePnl.setSpacing(10) welcomePnl.add(HTML(java.str(java.str(java.str(u"<h4>Welcome, " + java.str(name)) + u" ") + java.str(pp)) + u"</h4> ")) welcomePnl.add(HTML(self.wText)) return welcomePnl # Create menu @java.private def createMenu(self): treeMenu = Tree() # Create vertical left menu for m in self.menu: labelMethods = m.split(u":") if not labelMethods[0].startswith(u"X"): treeItem = treeMenu.addItem(labelMethods[0]) self.addSections(treeItem, labelMethods[1].split(u",")) treeMenu.addSelectionHandler(self.ShowcaseHandler()) # Add selection handler ( user clicks ) return treeMenu # Create sections left vertical menu @java.private @java.typed(TreeItem, [String]) def addSections(self, parent, methods): parentOpen = False for method in methods: if not method.startswith(u"X"): token = Window.Location.getHash() if token is not None: token = token.replace(u"#", u"") item = TreeItem(method) if method.equals(token): parentOpen = True parent.addItem(item) if parentOpen: parent.setState(True) # Display showcase @java.private @java.typed(String) def doDisplayShowcase(self, token): self.showcaseWrapper.clear() token = token.replace(u"#", u"") example = self.createExample(token) if example == None: Window.alert(u"Failed to create example: null") if example.getNeedPermission() == None: self.createShowcasePanel(example) else: pd = PermissionDialog(example.getMessage()) class _anonymous(PermissionHandler): @java.typed(Boolean) def onPermissionChange(self, granted): if granted: example.permissionGranted() self.createShowcasePanel(example) else: self.showcaseWrapper.add(HTML(java.str(u"Need " + java.str(example.getNeedPermission())) + u" to show this demo, hit reload")) pd.addPermissionHandler(_anonymous()) pd.checkPermission(example.getNeedPermission()) self.showcaseWrapper.add(pd) # Create showcase with source link on top. @java.private @java.typed(Showcase) 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) # Add panel @java.private @java.typed(Panel) def decorate(self, p): dp = DecoratorPanel() dp.setWidget(p) return dp @java.private @java.typed(String) def createExample(self, m): GWT.log(u"Create example " + java.str(m), None) showcase = None if u"admin_banUsers".equals(m): pass elif u"admin_banUsers".equals(m): pass elif u"batch_run".equals(m): pass elif u"comments_xfbml".equals(m): showcase = Comments_xfbml() elif u"comments_add".equals(m): showcase = Comments_add() elif u"comments_get".equals(m): showcase = Comments_get() elif u"comments_remove".equals(m): pass elif u"connect_getUnconnect...".equals(m): showcase = Connect_getUnconnectedFriendsCount() elif u"connect_registerUsers".equals(m): pass elif u"connect_unregisterUsers".equals(m): pass elif u"data_getCookies".equals(m): showcase = Data_getCookies() elif u"data_setCookie".equals(m): showcase = Data_setCookie() elif u"events_cancel".equals(m): pass elif u"events_create".equals(m): showcase = Events_create() elif u"events_edit".equals(m): pass elif u"events_get".equals(m): showcase = Events_get() elif u"events_getMembers".equals(m): return Events_getMembers() elif u"events_rsvp".equals(m): pass elif u"fbml_deleteCustomTags".equals(m): pass elif u"fbml_getCustomTags".equals(m): pass elif u"fbml_refreshImgSrc".equals(m): pass elif u"fbml_refreshRefUrl".equals(m): pass elif u"fbml_registerCustomTags".equals(m): pass elif u"fbml_setRefHandle".equals(m): pass elif u"feed_deactivateTemplateBundleByID".equals(m): pass elif u"feed_getRegisteredTemplateBundleByID".equals(m): pass elif u"feed_getRegisteredTemplateBundles".equals(m): pass elif u"feed_publishTemplatizedAction".equals(m): pass elif u"feed_publishUserAction".equals(m): pass elif u"feed_registerTemplateBundle".equals(m): pass elif u"fql_multiquery".equals(m): pass elif u"fql_query".equals(m): pass elif u"friends_areFriends".equals(m): showcase = Friends_areFriends() elif u"friends_get".equals(m): showcase = Friends_get() elif u"friends_getAppUsers".equals(m): showcase = Friends_getAppUsers() elif u"friends_getLists".equals(m): showcase = Friends_getLists() elif u"friends_getMutualFriends".equals(m): showcase = Friends_getMutualFriends() elif u"groups_get".equals(m): showcase = Groups_get() elif u"groups_getMembers".equals(m): pass elif u"hashCode".equals(m): pass elif u"intl_getTranslations".equals(m): pass elif u"intl_uploadNativeStrings".equals(m): pass elif u"links_get".equals(m): pass elif u"links_post".equals(m): pass elif u"liveMessage_send".equals(m): pass elif u"message_getThreadsInFolder".equals(m): showcase = Message_getThreadsInFolder() elif u"notes_create".equals(m): showcase = Notes_create() elif u"notes_delete".equals(m): pass elif u"notes_edit".equals(m): pass elif u"notes_get".equals(m): showcase = Notes_get() elif u"notifications_get".equals(m): showcase = Notifications_get() elif u"notifications_getList".equals(m): showcase = Notifications_getList() elif u"notifications_markRead".equals(m): pass elif u"notifications_sendEmail".equals(m): showcase = Notifications_send() elif u"pages_getInfo".equals(m): pass elif u"pages_isAdmin".equals(m): pass elif u"pages_isAppAdded".equals(m): pass elif u"pages_isFan".equals(m): pass elif u"photos_addTag".equals(m): pass elif u"photos_createAlbum".equals(m): showcase = Photos_createAlbum() elif u"photos_get".equals(m): showcase = Photos_get() elif u"photos_getAlbums".equals(m): showcase = Photos_getAlbums() elif u"photos_getTags".equals(m): pass elif u"photos_upload".equals(m): pass elif u"profile_getFBML".equals(m): pass elif u"profile_getInfo".equals(m): pass elif u"profile_getInfoOptions".equals(m): pass elif u"profile_setFBML".equals(m): pass elif u"profile_setInfo".equals(m): pass elif u"profile_setInfoOptions".equals(m): pass elif u"sms_canSend".equals(m): pass elif u"sms_send".equals(m): showcase = Sms_send() elif u"status_get".equals(m): pass elif u"status_set".equals(m): pass elif u"stream_addComment".equals(m): pass elif u"stream_addLike".equals(m): pass elif u"stream_get".equals(m): showcase = Stream_get() elif u"stream_getComments".equals(m): pass elif u"stream_getFilters".equals(m): pass elif u"stream_publishAttachment".equals(m): showcase = Stream_publishAttachment() elif u"stream_publish".equals(m): showcase = Stream_publish() elif u"stream_remove".equals(m): pass elif u"stream_removeComment".equals(m): pass elif u"stream_removeLike".equals(m): pass elif u"toString".equals(m): pass elif u"users_getInfo".equals(m): showcase = Users_getInfo() elif u"users_getLoggedInUser".equals(m): showcase = Users_getLoggedInUser() elif u"users_getStandardInfo".equals(m): pass elif u"users_hasAppPermission".equals(m): pass elif u"users_isAppUser".equals(m): pass elif u"users_isVerified".equals(m): pass elif u"users_setStatus".equals(m): pass elif u"video_getUploadLimits".equals(m): pass elif u"video_upload".equals(m): pass elif u"various".equals(m): showcase = XFBMLShowcase() else: if u"serverFbml".equals(m): showcase = XFBML_serverFbml() return showcase @java.typed(ValueChangeEvent) def onValueChange(self, event): self.doDisplayShowcase(event.getValue())
class ProfilePicsPopup(DecoratedPopupPanel): """ Let user browse a user list in a popup. CSS Configuration <ul> <li>.gwittit-ProfilePicsPopup <li>.gwittit-ProfilePicsPopup-content <li>.gwittit-ProfilePicsPopup-moreButton </ul> """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.scrollPanel = ScrollPanel() self.picsHolder = VerticalPanel() self.PAGE_SIZE = 30 self.page = 0 self.moreButton = Button(u"More") self.uids = None @__init__.register @java.typed(List) def __init__(self, uids): self.__init__._super() self.uids = uids super(self.__class__,self).setAutoHideEnabled(True) self.outer.addStyleName(u"gwittit-ProfilePicsPopup") self.moreButton.addStyleName(u"gwittit-ProfilePicsPopup-moreButton") self.scrollPanel.addStyleDependentName(u"gwittit-ProfilePicsPopup-scrollPanel") # ScrollPanel self.scrollPanel.setWidth(u"400px") self.scrollPanel.setHeight(u"500px") self.outer.getElement().setId(u"gwittit-ProfilePicsPopup-content") # Main Content self.outer.addStyleName(u"gwittit-ProfilePicsPopup-content") self.displayUsers(self.picsHolder, self.page) self.outer.add(self.picsHolder) # Compile Panels self.outer.add(self.moreButton) self.scrollPanel.add(self.outer) super(self.__class__,self).setWidget(self.scrollPanel) Xfbml.parse(self.outer) class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): self.displayUsers(self.picsHolder, self.page+= 1) self.moreButton.addClickHandler(_anonymous()) # Add Clickhandler that enables user to browse list @java.private @java.typed(VerticalPanel, int) def displayUsers(self, picsList, page): startIdx = page * PAGE_SIZE stopIdx = startIdx + (PAGE_SIZE - 1) holder = VerticalPanel() holder.getElement().setId(u"ProfilePics-Page_" + java.str(page)) i = startIdx while i < self.uids.size() and i < stopIdx: i+= 1 uid = self.uids.get(i) wrapper = HorizontalPanel() wrapper.setSpacing(10) profilePic = FbProfilePic(uid, Size.square) name = FbName(uid) wrapper.add(profilePic) wrapper.add(name) holder.add(wrapper) picsList.add(holder) Xfbml.parse(holder)
class EventEditor(Composite): """ Let user create a new Event. CSS Configuration <ul> <li>.gwittit-EventEditor </ul> """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.loader = Image(u"/loader.gif") self.eventInfo = None self.nameText = TextBox() self.categoryListBox = ListBox(False) self.subCategoriesListBox = ListBox(False) self.hostText = TextBox() self.locationText = TextBox() self.cityText = TextBox() self.createEventButton = Button(u"Create Event") self.apiClient = ApiFactory.getInstance() @__init__.register @java.typed() def __init__(self, ): self.__init__._super() self.outer.addStyleName(u"gwittit-EventEditor") self.outer.setSpacing(10) self.initFields() self.outer.add(self.createLabelAndInput(u"Name", self.nameText)) self.outer.add(self.createLabelAndInput(u"Category", self.categoryListBox)) self.outer.add(self.createLabelAndInput(u"SubCategory", self.subCategoriesListBox)) self.outer.add(self.createLabelAndInput(u"Host", self.hostText)) # outer.add ( createLabelAndInput ( "EventEnds" , endTimePicker ) ); self.outer.add(self.createLabelAndInput(u"Location", self.locationText)) self.outer.add(self.createLabelAndInput(u"City", self.cityText)) self.outer.add(self.createEventButton) class _anonymous(ClickHandler): @java.typed(ClickEvent) def onClick(self, event): self.saveOrUpdate() self.createEventButton.addClickHandler(_anonymous()) self.initWidget(self.outer) @java.private def saveOrUpdate(self): """ Save event to facebook """ jEvent = Json() jEvent.put(u"name", self.nameText.getValue()) jEvent.put(u"host", self.hostText.getValue()) jEvent.put(u"location", self.locationText.getValue()) jEvent.put(u"city", self.cityText.getValue()) selectedCategory = Integer(self.categoryListBox.getValue(self.categoryListBox.getSelectedIndex())) # Save Category selectedSubCategory = Integer(self.subCategoriesListBox.getValue(self.subCategoriesListBox.getSelectedIndex())) jEvent.put(u"category", EventInfo.Category.values()[(selectedCategory - 1)].toString()) jEvent.put(u"subcategory", EventInfo.SubCategory.values()[(selectedSubCategory - 1)].toString()) jEvent.put(u"start_time", Date().getTime() + Long(u"9999999999")) jEvent.put(u"end_time", Date().getTime() + Long(u"9999999999999")) eventInfo = EventInfo.fromJson(java.str(jEvent)) self.outer.add(self.loader) class _anonymous(AsyncCallback): @java.typed(Throwable) def onFailure(self, caught): self.outer.remove(self.loader) errorResponse = ErrorResponseUI(caught) errorResponse.center() errorResponse.show() @java.typed(JavaScriptObject) def onSuccess(self, result): self.outer.remove(self.loader) self.outer.add(HTML(u"Created event with ID " + java.str(result))) self.apiClient.eventsCreate(eventInfo, _anonymous()) # Create the event. @java.private def initFields(self): """ Create widgets, and set default values if any """ self.nameText.setValue(u"Birthday") self.hostText.setValue(u"host") self.locationText.setValue(u"location") self.cityText.setValue(u"Palo Alto, CA") for category in EventInfo.Category.values(): self.categoryListBox.addItem(java.str(category).replace(u"_", u" "), u"" + java.str(category.getId())) for subCategory in EventInfo.SubCategory.values(): self.subCategoriesListBox.addItem(java.str(subCategory).replace(u"_", u" "), u"" + java.str(subCategory.getId())) @java.private @java.typed(String, Widget) def createLabelAndInput(self, label, field): h = HorizontalPanel() l = HTML(java.str(u"<b>" + java.str(label)) + u": </b>") l.setWidth(u"150px") h.add(l) h.add(field) return h