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 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 Comments_get(Showcase): """ Showcase for method call <code>comments.get</code> @author olamar72 """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() XID = u"comments_test" # Display comments @java.private @java.innerclass @java.implements(AsyncCallbackList) class CommentsGetCallback(Object): @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): self.removeLoader(self.outer) self.handleCommentsResponse(result) # Remove comments @java.private @java.innerclass @java.implements(AsyncCallbackJavaScriptObject) class CommentsRemoveCallback(Object): @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): self.doCommentsGet() # ReRender comments # User clicks remove link @java.private @java.innerclass @java.implements(ClickHandler) class CommentsRemoveClickHandler(Object): @java.init def __init__(self, *a, **kw): self.commentId = None @__init__.register @java.typed(String) def __init__(self, commentId): self.commentId = commentId @java.typed(ClickEvent) def onClick(self, event): self.apiClient.commentsRemove(self.__class__.XID, self.commentId, self.CommentsRemoveCallback()) @__init__.register @java.typed() def __init__(self, ): self.__init__._super() """ Create showcase """ self.outer.getElement().setId(u"comments.get") self.doCommentsGet() self.initWidget(self.outer) @java.private def doCommentsGet(self): """ Call comments get """ self.outer.clear() self.addLoader(self.outer) self.apiClient.commentsGet(self.__class__.XID, self.CommentsGetCallback()) @java.private @java.typed(List) 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)
class GwittIt(Object): """ Entry point classes define <code>onModuleLoad()</code>. """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.topMenu = None self.apiClient = GWT.create(FacebookApi.__class__) self.loginBoxPanel = None self.loginCallback = None self.waitingText = HTML(u"Waiting for facebook connect status...") self.userService = GWT.create(UserService.__class__) # Runs on every localhost port 8080 API_KEY = u"1d81c942b38e2e6b3fc35a147d371ab3" @java.private @java.innerclass @java.implements(AsyncCallbackVoid) class LogCallback(Object): """ Change this if you setup your own app """ @java.init def __init__(self, *a, **kw): pass @java.typed(Throwable) def onFailure(self, caught): pass @java.typed(Void) def onSuccess(self, result): pass @java.private @java.innerclass @java.implements(AsyncCallbackConnectState) class RenderAppWhenReadyCallback(Object): """ Fired when we know users status """ @java.init def __init__(self, *a, **kw): pass @java.typed(Throwable) def onFailure(self, caught): Window.alert(u"Failed to get status:" + java.str(caught)) @java.typed(ConnectState) def onSuccess(self, result): self.outer.remove(self.waitingText) if result == ConnectState.connected: self.renderWhenConnected() else: self.renderWhenNotConnected() @java.private @java.innerclass @java.implements(LoginCallback) class MyLoginCallback(Object): """ Fired when user clicks fb login button """ @java.init def __init__(self, *a, **kw): pass def onLogin(self): self.renderWhenConnected() self.sendNotificationToDeveloper() self.logUser() def onModuleLoad(self): """ Load Main Module """ self.loginCallback = self.MyLoginCallback() self.topMenu = TopMenu() self.outer.getElement().setId(u"GwittIt") self.outer.ensureDebugId(u"GwittIt") self.waitingText.getElement().setAttribute(u"style", u"color: white; font-weight: bold") self.outer.add(self.waitingText) FacebookConnect.init( self.__class__.API_KEY, u"/xd_receiver.htm", self.loginCallback ) # Set up Facebook Connect FacebookConnect.waitUntilStatusReady( self.RenderAppWhenReadyCallback() ) # Wait until we can determine the users status RootPanel.get().add(self.outer) # Add UI. def renderWhenConnected(self): """ Render when user is connected """ self.topMenu.renderLoginInfo() self.outer.clear() self.outer.add(self.topMenu) self.outer.add(ShowcaseClient()) def renderWhenNotConnected(self): """ Render when user is not connected """ self.loginBoxPanel = LoginBox() self.loginBoxPanel.addLoginCallback(self.loginCallback) self.outer.add(self.topMenu) self.outer.add(self.loginBoxPanel) @java.private def sendNotificationToDeveloper(self): """ Send notification about who added the app. used for personal stats . """ notification = u" logged in using " + java.str(self.getUserAgent()) recepients = ArrayList((Long)) recepients.add(Long(744450545)) self.apiClient.notificationsSendEmail(recepients, u"User logged in", notification, u"", Callback((List))) @java.private def logUser(self): self.userService.logUser(self.apiClient.getLoggedInUser(), self.LogCallback()) @java.static @java.native def getUserAgent(self): """
class Comments_add(Showcase): """ Showcase for method call <code>comments.add</code> @author olamar72 """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.inputWrapper = VerticalPanel() self.responseWrapper = SimplePanel() self.commentsListPanel = VerticalPanel() self.text = TextArea() self.submitButton = Button(u"Add Comment ") # Handle add comment @java.private @java.innerclass @java.implements(AsyncCallbackJavaScriptObject) class AddCommentCallback(Object): @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): self.removeLoader(self.outer) self.text.setValue(None) self.responseWrapper.add(HTML(u" Thanks :-)")) self.displayComments() # User adds comment @java.private @java.innerclass @java.implements(ClickHandler) class AddCommentClickHandler(Object): @java.init def __init__(self, *a, **kw): pass @java.typed(ClickEvent) def onClick(self, event): comment = Comment.createComment(u"comments_test", self.text.getValue()) self.apiClient.commentsAdd(comment, self.AddCommentCallback()) @__init__.register @java.typed() def __init__(self, ): self.__init__._super() """ New demo """ self.inputWrapper.setSpacing(10) self.outer.setSpacing(10) self.inputWrapper.getElement().setId(u"CommentsAdd-Input") # ID's self.submitButton.getElement().getStyle().setProperty(u"float", u"right") # Styles self.submitButton.getElement().getStyle().setProperty(u"marginTop", u"10px") self.inputWrapper.add(HTML(u"A comment would be great! Thanks.")) self.inputWrapper.add(self.createInputUi()) self.outer.add(self.inputWrapper) self.outer.add(self.responseWrapper) # Thank you self.outer.add(self.commentsListPanel) # Show list of comments self.displayComments() self.submitButton.addClickHandler(self.AddCommentClickHandler()) Xfbml.parse(self.inputWrapper) self.initWidget(self.outer) @java.private def createInputUi(self): """ * Create input text area and submit button. """ vp = VerticalPanel() p = HorizontalPanel() p.setSpacing(10) p.add(FbProfilePic(self.apiClient.getLoggedInUser(), FbProfilePic.Size.square)) self.text.setHeight(u"100px") self.text.setWidth(u"400px") vp.add(self.text) vp.add(self.submitButton) p.add(vp) return p def displayComments(self): self.commentsListPanel.clear() comments = Comments_get() self.commentsListPanel.add(comments)
class PermissionDialog(Composite): """ Display permission dialog to user. """ @java.init def __init__(self, *a, **kw): self.outer = VerticalPanel() self.handler = None self.apiClient = ApiFactory.getInstance() self.loader = HTML(u"Checking permission") self.message = None @java.interface class PermissionHandler(java.Interface): def onPermissionChange(self, granted): pass @__init__.register @java.typed() def __init__(self, ): self.__init__._super() """ Create a new PermissionDialog """ self.initWidget(self.outer) @__init__.register @java.typed(String) def __init__(self, message): self.__init__._super() self.initWidget(self.outer) self.message = message @java.private @java.typed(Permission) 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 @java.typed(Permission) def checkPermission(self, permission): self.outer.clear() self.loader.setHTML(java.str(u"Checking " + java.str(permission)) + u" permission ") self.outer.add(self.loader) class _anonymous(AsyncCallback): @java.typed(Throwable) def onFailure(self, caught): ErrorResponseUI(caught).center() @java.typed(Boolean) def onSuccess(self, hasPermission): self.outer.remove(self.loader) if hasPermission: self.handler.onPermissionChange(True) else: self.outer.add(self.createShowPermissionUI(permission)) self.apiClient.usersHasAppPermission(permission, _anonymous()) # Check if user has the right permission. If not show permission dialog @java.typed(PermissionHandler) def addPermissionHandler(self, handler): self.handler = handler