{"action":"created","comment":{"url":"https://api.github.com/repos/codeforamerica/streetmix/pulls/comments/77570660","id":77570660,"diff_hunk":"@@ -0,0 +1,170 @@\n+import React from 'react'\n+import EnvironmentBadge from './EnvironmentBadge'\n+\n+// import { t } from '../app/locale'\n+import { debug } from '../preinit/debug_settings'\n+import { URL_SIGN_IN_REDIRECT } from '../app/routing'\n+import { onMyStreetsClick } from '../gallery/view'\n+import { fetchAvatars } from '../users/avatars'\n+import { getElAbsolutePos } from '../util/helpers'\n+import { closestEl } from '../util/dom_helpers'\n+\n+export default class MenuBar extends React.Component {\n+  constructor (props) {\n+    super(props)\n+\n+    this.state = {\n+      userId: null\n+    }\n+\n+    this.onClickMenuButton = this.onClickMenuButton.bind(this)\n+    this.updateSignInUI = this.updateSignInUI.bind(this)\n+\n+    // Listen for sign-in. This updates the sign-in button.\n+    window.addEventListener('stmx:signed_in', this.updateSignInUI)\n+  }\n+\n+  componentDidMount () {\n+    // This fills in avatar elements on the page after mounting\n+    fetchAvatars()\n+  }\n+\n+  componentDidUpdate () {\n+    // This fills in avatar elements on the page after mounting\n+    fetchAvatars()\n+  }\n+\n+  /**\n+   * Handles clicks on <button> elements which result in a dropdown menu.\n+   */\n+  onClickMenuButton (event) {\n+    // We need to send to the parent component (which handles menus) information\n+    // about what button was clicked and its position, so that the specified\n+    // menu can open in the correct place. The clicked button stores `data-name`\n+    // on its attributes, and position is based on its parent `li` element.\n+    const buttonEl = closestEl(event.target, 'button')\n+    const name = buttonEl.dataset.name\n+    const position = getElAbsolutePos(buttonEl.parentNode)\n+    this.props.onMenuDropdownClick({ name, position })\n+  }\n+\n+  updateSignInUI (event) {\n+    // Sign-in details are passed in via `event.detail`. If a user is not\n+    // signed in, the event that calls this will pass an empty object for\n+    // `event.detail`\n+    if (event.detail.userId) {\n+      this.setState({ userId: event.detail.userId })\n+    }\n+  }\n+\n+  render () {\n+    const userId = this.state.userId\n+    const myStreetsLink = userId ? `/${userId}` : ''\n+    const identityMenuVisibilityStyle = userId\n+      ? {} : { display: 'none' }\n+    const signInVisibilityStyle = userId\n+      ? { display: 'none' } : {}\n+\n+    // Buttons have `disabled={false}` because\n+    // Firefox sometimes disables some buttons… unsure why\n+    // --\n+    // Note on translations - the {t()} method doesn't re-render when the\n+    // language changes, so this still uses the `data-i18n` method to pick up\n+    // on text content changes. Individual menus will re-render with {t()}.\n+    return (\n+      <nav className='menu-bar'>\n+        <ul className='menu-bar-left'>\n+          <li className='menu-bar-title'>\n+            <div className='streetmix-logo' />\n+            <h1>Streetmix</h1>\n+          </li>\n+          <li id='help-menu-item'>\n+            <button\n+              data-name='help'\n+              data-i18n='menu.item.help'\n+              className='menu-attached'\n+              disabled={false}\n+              onClick={this.onClickMenuButton}\n+            >\n+              Help\n+            </button>\n+          </li>\n+          <li id='contact-menu-item'>\n+            <button\n+              data-name='contact'\n+              data-i18n='menu.item.contact'\n+              className='menu-attached'\n+              disabled={false}\n+              onClick={this.onClickMenuButton}\n+            >\n+              Contact\n+            </button>\n+          </li>\n+        </ul>\n+        <ul className='menu-bar-right'>\n+          <li id='identity-menu-item' style={identityMenuVisibilityStyle}>\n+            <button\n+              data-name='identity'\n+              className='menu-attached'\n+              disabled={false}\n+              onClick={this.onClickMenuButton}\n+            >\n+              <div className='avatar' data-user-id={userId} />\n+              <span className='user-id'>{userId}</span>\n+            </button>\n+          </li>\n+          <li id='sign-in-menu-item' style={signInVisibilityStyle}>\n+            <a href={`/${URL_SIGN_IN_REDIRECT}`} className='command' data-i18n='menu.item.sign-in'>\n+              Sign in\n+            </a>\n+          </li>\n+          <li>\n+            <a href='/new' target='_blank' data-i18n='menu.item.new-street'>\n+              New street\n+            </a>\n+          </li>\n+          <li id='gallery-link'>\n+            <a href={myStreetsLink} data-i18n='menu.item.my-streets' onClick={onMyStreetsClick}>\n+              My streets\n+            </a>\n+          </li>\n+          {\n+            (() => {\n+              if (debug.experimental) {\n+                return (\n+                  <li id='settings-menu-item'>\n+                    <button\n+                      data-name='settings'\n+                      data-i18n='menu.item.settings'\n+                      className='menu-attached'\n+                      disabled={false}\n+                      onClick={this.onClickMenuButton}\n+                    >\n+                      Settings\n+                    </button>\n+                  </li>\n+                )\n+              }\n+            })()","path":"assets/scripts/menus/MenuBar.jsx","position":148,"original_position":148,"commit_id":"56682ae23c08450123b8fcb56450cf98d53b69ec","original_commit_id":"56682ae23c08450123b8fcb56450cf98d53b69ec","user":{"login":"ryross","id":152982,"avatar_url":"https://avatars.githubusercontent.com/u/152982?v=3","gravatar_id":"","url":"https://api.github.com/users/ryross","html_url":"https://github.com/ryross","followers_url":"https://api.github.com/users/ryross/followers","following_url":"https://api.github.com/users/ryross/following{/other_user}","gists_url":"https://api.github.com/users/ryross/gists{/gist_id}","starred_url":"https://api.github.com/users/ryross/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ryross/subscriptions","organizations_url":"https://api.github.com/users/ryross/orgs","repos_url":"https://api.github.com/users/ryross/repos","events_url":"https://api.github.com/users/ryross/events{/privacy}","received_events_url":"https://api.github.com/users/ryross/received_events","type":"User","site_admin":false},"body":"I typically do this by creating a variable outside of the return statement so that I can do something like {SettingsButton} instead of lines 132-149. ","created_at":"2016-09-06T03:57:25Z","updated_at":"2016-09-06T03:57:25Z","html_url":"https://github.com/codeforamerica/streetmix/pull/582#discussion_r77570660","pull_request_url":"https://api.github.com/repos/codeforamerica/streetmix/pulls/582","_links":{"self":{"href":"https://api.github.com/repos/codeforamerica/streetmix/pulls/comments/77570660"},"html":{"href":"https://github.com/codeforamerica/streetmix/pull/582#discussion_r77570660"},"pull_request":{"href":"https://api.github.com/repos/codeforamerica/streetmix/pulls/582"}}},"pull_request":{"url":"https://api.github.com/repos/codeforamerica/streetmix/pulls/582","id":84050823,"html_url":"https://github.com/codeforamerica/streetmix/pull/582","diff_url":"https://github.com/codeforamerica/streetmix/pull/582.diff","patch_url":"https://github.com/codeforamerica/streetmix/pull/582.patch","issue_url":"https://api.github.com/repos/codeforamerica/streetmix/issues/582","number":582,"state":"open","locked":false,"title":"Port menus and menu bar to React components","user":{"login":"louh","id":2553268,"avatar_url":"https://avatars.githubusercontent.com/u/2553268?v=3","gravatar_id":"","url":"https://api.github.com/users/louh","html_url":"https://github.com/louh","followers_url":"https://api.github.com/users/louh/followers","following_url":"https://api.github.com/users/louh/following{/other_user}","gists_url":"https://api.github.com/users/louh/gists{/gist_id}","starred_url":"https://api.github.com/users/louh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/louh/subscriptions","organizations_url":"https://api.github.com/users/louh/orgs","repos_url":"https://api.github.com/users/louh/repos","events_url":"https://api.github.com/users/louh/events{/privacy}","received_events_url":"https://api.github.com/users/louh/received_events","type":"User","site_admin":false},"body":"This is a fairly large PR, but the basic gist of this is that the menu bar and its menus are ported to React components. This is a continuation of work in the prototype started in PR https://github.com/codeforamerica/streetmix/pull/569, and influenced by the conversation in PR https://github.com/codeforamerica/streetmix/pull/563, in which we wanted to reduce the amount of imports that create side effects, plus all of the other benefits we gain from having UI organized as React components. (Read https://github.com/codeforamerica/streetmix/pull/569 for more.)\r\n\r\nSome of the diffs here are because this branch is based off of existing (and currently open) PRs https://github.com/codeforamerica/streetmix/pull/576 and https://github.com/codeforamerica/streetmix/pull/577. If those are accepted and merged, I will rebase this PR and that will remove some of the diffs that are not needed to be here. In the meantime, this PR is opened for discussion.\r\n\r\nAll existing functionality in the menu and menu bar are re-implemented as React components. This means that all HTML (written as JSX) is created directly in the component, removing the need to split the view between Jade templates and JavaScript DOM manipulation. Event handlers are added directly to components, removing the need to add event handlers during the app initialization phase. References to menu elements, and state (which one is active, etc) are controlled in the React component ecosystem, meaning less of the other logic elsewhere in the app need to know anything about menus or menu content.\r\n\r\nFurthermore, this allowed me to continue to fix a problem with the previous way of doing translation which is that HTML tags in text strings could not be appended as actual HTML. This illustrates the difference before and after:\r\n\r\n<img width=\"398\" alt=\"screenshot 2016-09-05 21 43 40\" src=\"https://cloud.githubusercontent.com/assets/2553268/18259587/992a7814-73b3-11e6-9180-2464b59cde13.png\">\r\n\r\n<img width=\"406\" alt=\"screenshot 2016-09-05 21 45 23\" src=\"https://cloud.githubusercontent.com/assets/2553268/18259588/9c2d78ae-73b3-11e6-9ab2-eac76853ae61.png\">\r\n\r\nFurthermore, text for \"Sign in\" and the keyboard instructions in the Help menu are now translated, when available. The Pirate English language was removed.\r\n\r\nYou can test out the new menu bar and make sure everything is okay. This branch is deployed to staging and can be accessed at https://streetmix-staging.herokuapp.com/-/40?debug-experimental (don't forget the `?debug-experimental` flag), and compare with something on the production server, e.g. http://streetmix.net/-/421124?debug-experimental (same flag applies).\r\n\r\nWould appreciate thoughts and review. cc @magul @treyhahn @ryross","created_at":"2016-09-06T02:02:20Z","updated_at":"2016-09-06T03:57:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"babe0c91c7af9cb7f7172879bb1d553233c5774d","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/codeforamerica/streetmix/pulls/582/commits","review_comments_url":"https://api.github.com/repos/codeforamerica/streetmix/pulls/582/comments","review_comment_url":"https://api.github.com/repos/codeforamerica/streetmix/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codeforamerica/streetmix/issues/582/comments","statuses_url":"https://api.github.com/repos/codeforamerica/streetmix/statuses/56682ae23c08450123b8fcb56450cf98d53b69ec","head":{"label":"codeforamerica:react-menus","ref":"react-menus","sha":"56682ae23c08450123b8fcb56450cf98d53b69ec","user":{"login":"codeforamerica","id":337792,"avatar_url":"https://avatars.githubusercontent.com/u/337792?v=3","gravatar_id":"","url":"https://api.github.com/users/codeforamerica","html_url":"https://github.com/codeforamerica","followers_url":"https://api.github.com/users/codeforamerica/followers","following_url":"https://api.github.com/users/codeforamerica/following{/other_user}","gists_url":"https://api.github.com/users/codeforamerica/gists{/gist_id}","starred_url":"https://api.github.com/users/codeforamerica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codeforamerica/subscriptions","organizations_url":"https://api.github.com/users/codeforamerica/orgs","repos_url":"https://api.github.com/users/codeforamerica/repos","events_url":"https://api.github.com/users/codeforamerica/events{/privacy}","received_events_url":"https://api.github.com/users/codeforamerica/received_events","type":"Organization","site_admin":false},"repo":{"id":7708819,"name":"streetmix","full_name":"codeforamerica/streetmix","owner":{"login":"codeforamerica","id":337792,"avatar_url":"https://avatars.githubusercontent.com/u/337792?v=3","gravatar_id":"","url":"https://api.github.com/users/codeforamerica","html_url":"https://github.com/codeforamerica","followers_url":"https://api.github.com/users/codeforamerica/followers","following_url":"https://api.github.com/users/codeforamerica/following{/other_user}","gists_url":"https://api.github.com/users/codeforamerica/gists{/gist_id}","starred_url":"https://api.github.com/users/codeforamerica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codeforamerica/subscriptions","organizations_url":"https://api.github.com/users/codeforamerica/orgs","repos_url":"https://api.github.com/users/codeforamerica/repos","events_url":"https://api.github.com/users/codeforamerica/events{/privacy}","received_events_url":"https://api.github.com/users/codeforamerica/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codeforamerica/streetmix","description":"Design, remix, and share your neighborhood street.","fork":false,"url":"https://api.github.com/repos/codeforamerica/streetmix","forks_url":"https://api.github.com/repos/codeforamerica/streetmix/forks","keys_url":"https://api.github.com/repos/codeforamerica/streetmix/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codeforamerica/streetmix/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codeforamerica/streetmix/teams","hooks_url":"https://api.github.com/repos/codeforamerica/streetmix/hooks","issue_events_url":"https://api.github.com/repos/codeforamerica/streetmix/issues/events{/number}","events_url":"https://api.github.com/repos/codeforamerica/streetmix/events","assignees_url":"https://api.github.com/repos/codeforamerica/streetmix/assignees{/user}","branches_url":"https://api.github.com/repos/codeforamerica/streetmix/branches{/branch}","tags_url":"https://api.github.com/repos/codeforamerica/streetmix/tags","blobs_url":"https://api.github.com/repos/codeforamerica/streetmix/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codeforamerica/streetmix/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codeforamerica/streetmix/git/refs{/sha}","trees_url":"https://api.github.com/repos/codeforamerica/streetmix/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codeforamerica/streetmix/statuses/{sha}","languages_url":"https://api.github.com/repos/codeforamerica/streetmix/languages","stargazers_url":"https://api.github.com/repos/codeforamerica/streetmix/stargazers","contributors_url":"https://api.github.com/repos/codeforamerica/streetmix/contributors","subscribers_url":"https://api.github.com/repos/codeforamerica/streetmix/subscribers","subscription_url":"https://api.github.com/repos/codeforamerica/streetmix/subscription","commits_url":"https://api.github.com/repos/codeforamerica/streetmix/commits{/sha}","git_commits_url":"https://api.github.com/repos/codeforamerica/streetmix/git/commits{/sha}","comments_url":"https://api.github.com/repos/codeforamerica/streetmix/comments{/number}","issue_comment_url":"https://api.github.com/repos/codeforamerica/streetmix/issues/comments{/number}","contents_url":"https://api.github.com/repos/codeforamerica/streetmix/contents/{+path}","compare_url":"https://api.github.com/repos/codeforamerica/streetmix/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codeforamerica/streetmix/merges","archive_url":"https://api.github.com/repos/codeforamerica/streetmix/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codeforamerica/streetmix/downloads","issues_url":"https://api.github.com/repos/codeforamerica/streetmix/issues{/number}","pulls_url":"https://api.github.com/repos/codeforamerica/streetmix/pulls{/number}","milestones_url":"https://api.github.com/repos/codeforamerica/streetmix/milestones{/number}","notifications_url":"https://api.github.com/repos/codeforamerica/streetmix/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codeforamerica/streetmix/labels{/name}","releases_url":"https://api.github.com/repos/codeforamerica/streetmix/releases{/id}","deployments_url":"https://api.github.com/repos/codeforamerica/streetmix/deployments","created_at":"2013-01-19T21:03:45Z","updated_at":"2016-08-26T17:13:57Z","pushed_at":"2016-09-06T02:02:20Z","git_url":"git://github.com/codeforamerica/streetmix.git","ssh_url":"git@github.com:codeforamerica/streetmix.git","clone_url":"https://github.com/codeforamerica/streetmix.git","svn_url":"https://github.com/codeforamerica/streetmix","homepage":"http://streetmix.net","size":33607,"stargazers_count":214,"watchers_count":214,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":60,"mirror_url":null,"open_issues_count":120,"forks":60,"open_issues":120,"watchers":214,"default_branch":"master"}},"base":{"label":"codeforamerica:master","ref":"master","sha":"289ab631719a11729b895c27e3394eb947107dff","user":{"login":"codeforamerica","id":337792,"avatar_url":"https://avatars.githubusercontent.com/u/337792?v=3","gravatar_id":"","url":"https://api.github.com/users/codeforamerica","html_url":"https://github.com/codeforamerica","followers_url":"https://api.github.com/users/codeforamerica/followers","following_url":"https://api.github.com/users/codeforamerica/following{/other_user}","gists_url":"https://api.github.com/users/codeforamerica/gists{/gist_id}","starred_url":"https://api.github.com/users/codeforamerica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codeforamerica/subscriptions","organizations_url":"https://api.github.com/users/codeforamerica/orgs","repos_url":"https://api.github.com/users/codeforamerica/repos","events_url":"https://api.github.com/users/codeforamerica/events{/privacy}","received_events_url":"https://api.github.com/users/codeforamerica/received_events","type":"Organization","site_admin":false},"repo":{"id":7708819,"name":"streetmix","full_name":"codeforamerica/streetmix","owner":{"login":"codeforamerica","id":337792,"avatar_url":"https://avatars.githubusercontent.com/u/337792?v=3","gravatar_id":"","url":"https://api.github.com/users/codeforamerica","html_url":"https://github.com/codeforamerica","followers_url":"https://api.github.com/users/codeforamerica/followers","following_url":"https://api.github.com/users/codeforamerica/following{/other_user}","gists_url":"https://api.github.com/users/codeforamerica/gists{/gist_id}","starred_url":"https://api.github.com/users/codeforamerica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codeforamerica/subscriptions","organizations_url":"https://api.github.com/users/codeforamerica/orgs","repos_url":"https://api.github.com/users/codeforamerica/repos","events_url":"https://api.github.com/users/codeforamerica/events{/privacy}","received_events_url":"https://api.github.com/users/codeforamerica/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codeforamerica/streetmix","description":"Design, remix, and share your neighborhood street.","fork":false,"url":"https://api.github.com/repos/codeforamerica/streetmix","forks_url":"https://api.github.com/repos/codeforamerica/streetmix/forks","keys_url":"https://api.github.com/repos/codeforamerica/streetmix/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codeforamerica/streetmix/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codeforamerica/streetmix/teams","hooks_url":"https://api.github.com/repos/codeforamerica/streetmix/hooks","issue_events_url":"https://api.github.com/repos/codeforamerica/streetmix/issues/events{/number}","events_url":"https://api.github.com/repos/codeforamerica/streetmix/events","assignees_url":"https://api.github.com/repos/codeforamerica/streetmix/assignees{/user}","branches_url":"https://api.github.com/repos/codeforamerica/streetmix/branches{/branch}","tags_url":"https://api.github.com/repos/codeforamerica/streetmix/tags","blobs_url":"https://api.github.com/repos/codeforamerica/streetmix/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codeforamerica/streetmix/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codeforamerica/streetmix/git/refs{/sha}","trees_url":"https://api.github.com/repos/codeforamerica/streetmix/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codeforamerica/streetmix/statuses/{sha}","languages_url":"https://api.github.com/repos/codeforamerica/streetmix/languages","stargazers_url":"https://api.github.com/repos/codeforamerica/streetmix/stargazers","contributors_url":"https://api.github.com/repos/codeforamerica/streetmix/contributors","subscribers_url":"https://api.github.com/repos/codeforamerica/streetmix/subscribers","subscription_url":"https://api.github.com/repos/codeforamerica/streetmix/subscription","commits_url":"https://api.github.com/repos/codeforamerica/streetmix/commits{/sha}","git_commits_url":"https://api.github.com/repos/codeforamerica/streetmix/git/commits{/sha}","comments_url":"https://api.github.com/repos/codeforamerica/streetmix/comments{/number}","issue_comment_url":"https://api.github.com/repos/codeforamerica/streetmix/issues/comments{/number}","contents_url":"https://api.github.com/repos/codeforamerica/streetmix/contents/{+path}","compare_url":"https://api.github.com/repos/codeforamerica/streetmix/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codeforamerica/streetmix/merges","archive_url":"https://api.github.com/repos/codeforamerica/streetmix/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codeforamerica/streetmix/downloads","issues_url":"https://api.github.com/repos/codeforamerica/streetmix/issues{/number}","pulls_url":"https://api.github.com/repos/codeforamerica/streetmix/pulls{/number}","milestones_url":"https://api.github.com/repos/codeforamerica/streetmix/milestones{/number}","notifications_url":"https://api.github.com/repos/codeforamerica/streetmix/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codeforamerica/streetmix/labels{/name}","releases_url":"https://api.github.com/repos/codeforamerica/streetmix/releases{/id}","deployments_url":"https://api.github.com/repos/codeforamerica/streetmix/deployments","created_at":"2013-01-19T21:03:45Z","updated_at":"2016-08-26T17:13:57Z","pushed_at":"2016-09-06T02:02:20Z","git_url":"git://github.com/codeforamerica/streetmix.git","ssh_url":"git@github.com:codeforamerica/streetmix.git","clone_url":"https://github.com/codeforamerica/streetmix.git","svn_url":"https://github.com/codeforamerica/streetmix","homepage":"http://streetmix.net","size":33607,"stargazers_count":214,"watchers_count":214,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":60,"mirror_url":null,"open_issues_count":120,"forks":60,"open_issues":120,"watchers":214,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codeforamerica/streetmix/pulls/582"},"html":{"href":"https://github.com/codeforamerica/streetmix/pull/582"},"issue":{"href":"https://api.github.com/repos/codeforamerica/streetmix/issues/582"},"comments":{"href":"https://api.github.com/repos/codeforamerica/streetmix/issues/582/comments"},"review_comments":{"href":"https://api.github.com/repos/codeforamerica/streetmix/pulls/582/comments"},"review_comment":{"href":"https://api.github.com/repos/codeforamerica/streetmix/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codeforamerica/streetmix/pulls/582/commits"},"statuses":{"href":"https://api.github.com/repos/codeforamerica/streetmix/statuses/56682ae23c08450123b8fcb56450cf98d53b69ec"}}}}
{"actor":{"display_login":"ryross"}}