{"action":"created","comment":{"url":"https://api.github.com/repos/juju/juju-gui/pulls/comments/73265317","id":73265317,"diff_hunk":"@@ -0,0 +1,351 @@\n+/*\n+This file is part of the Juju GUI, which lets users view and manage Juju\n+environments within a graphical interface (https://launchpad.net/juju-gui).\n+Copyright (C) 2016 Canonical Ltd.\n+\n+This program is free software: you can redistribute it and/or modify it under\n+the terms of the GNU Affero General Public License version 3, as published by\n+the Free Software Foundation.\n+\n+This program is distributed in the hope that it will be useful, but WITHOUT\n+ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,\n+SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero\n+General Public License for more details.\n+\n+You should have received a copy of the GNU Affero General Public License along\n+with this program.  If not, see <http://www.gnu.org/licenses/>.\n+*/\n+\n+'use strict';\n+\n+YUI.add('entity-list', function() {\n+\n+  juju.components.EntityList = React.createClass({\n+    propTypes: {\n+      changeState: React.PropTypes.func.isRequired,\n+      charmstore: React.PropTypes.object.isRequired,\n+      getDiagramURL: React.PropTypes.func.isRequired,\n+      type: React.PropTypes.string.isRequired,\n+      user: React.PropTypes.object,\n+      users: React.PropTypes.object.isRequired\n+    },\n+\n+    getInitialState: function() {\n+      this.xhrs = [];\n+\n+      return {\n+        entityList: [],\n+        loadingEntities: false,\n+      };\n+    },\n+\n+    componentWillMount: function() {\n+      var users = this.props.users;\n+      if (users.charmstore && users.charmstore.user) {\n+        this._fetchEntities(this.props);\n+      }\n+    },\n+\n+    componentWillUnmount: function() {\n+      this.xhrs.forEach((xhr) => {\n+        xhr && xhr.abort && xhr.abort();\n+      });\n+    },\n+\n+    componentWillReceiveProps: function(nextProps) {\n+      var props = this.props;\n+      // Compare next and previous charmstore users in a data-safe manner.\n+      var prevCSUser = props.users.charmstore || {};\n+      var nextCSUser = nextProps.users.charmstore || {};\n+      if (nextCSUser.user !== prevCSUser.user) {\n+        this._fetchEntities(nextProps);\n+      }\n+    },\n+\n+    /**\n+      Requests a list from charmstore of the user's entities.\n+\n+      @method _fetchEntities\n+      @param {Object} props the component properties to use.\n+    */\n+    _fetchEntities:  function(props) {\n+      var callback = this._fetchEntitiesCallback.bind(this);\n+      var charmstore = props.charmstore;\n+      var username = props.users.charmstore && props.users.charmstore.user;\n+      if (charmstore && charmstore.list && username) {\n+        // Delay the call until after the state change to prevent race\n+        // conditions.\n+        this.setState({loadingEntities: true}, () => {\n+          var xhr = charmstore.list(username, callback, props.type);\n+          this.xhrs.push(xhr);\n+        });\n+      }\n+    },\n+\n+    /**\n+      Callback for the request to list a user's entities.\n+\n+      @method _fetchEntitiesCallback\n+      @param {String} error The error from the request, or null.\n+      @param {Object} data The data from the request.\n+    */\n+    _fetchEntitiesCallback: function(error, data) {\n+      this.setState({loadingEntities: false});\n+      if (error) {\n+        console.error('Can not retrieve entities: ', error);\n+        return;\n+      }\n+      this.setState({entityList: data});\n+    },\n+\n+    /**\n+      Generate a list of tags.\n+\n+      @method _generateTags\n+      @param {Array} tags A list of tags.\n+      @param {String} id The id of the entity.\n+      @returns {Object} A list of tag components.\n+    */\n+    _generateTags: function(tagList, id) {\n+      if (!tagList) {\n+        return;\n+      }\n+      var tags = [];\n+      tagList.forEach((tag) => {\n+        tags.push(\n+          <li className=\"user-profile__comma-item\"\n+            key={id + '-' + tag}>\n+            {tag}\n+          </li>);\n+      });\n+      return (\n+        <ul className=\"user-profile__list-tags\">\n+          {tags}\n+        </ul>);\n+    },\n+\n+    /**\n+      Generate a list of series.\n+\n+      @method _generateSeries\n+      @param {Array} series A list of series.\n+      @param {String} id The id of the entity.\n+      @returns {Object} A list of series components.\n+    */\n+    _generateSeries: function(series, id) {\n+      if (!series) {\n+        return;\n+      }\n+      var listItems = [];\n+      series.forEach((release) => {\n+        listItems.push(\n+          <li className=\"user-profile__comma-item\"\n+            key={id + '-' + release}>\n+            {release}\n+          </li>);\n+      });\n+      return (\n+        <ul className=\"user-profile__list-series\">\n+          {listItems}\n+        </ul>);\n+    },\n+\n+    /**\n+      Construct the URL for a service icon.\n+\n+      @method _getIcon\n+      @param {String} id The service ID.\n+      @returns {String} The icon URL.\n+    */\n+    _getIcon: function(id) {\n+      if (!id) {\n+        return;\n+      }\n+      var cs = this.props.charmstore;\n+      var path = id.replace('cs:', '');\n+      return `${cs.url}/${path}/icon.svg`;\n+    },\n+\n+    /**\n+      Generate the details for the provided bundle.\n+\n+      @method _generateBundleRow\n+      @param {Object} bundle A bundle object.\n+      @returns {Array} The markup for the row.\n+    */\n+    _generateBundleRow: function(bundle) {\n+      var id = bundle.id;\n+      var services = [];\n+      var applications = bundle.applications || bundle.services || {};\n+      var serviceNames = Object.keys(applications);\n+      serviceNames.forEach((serviceName, idx) => {\n+        var service = applications[serviceName];\n+        var id = service.charm;\n+        var key = `icon-${idx}-${id}`;\n+        services.push(\n+          <img className=\"user-profile__list-icon\"\n+            key={key}\n+            src={this._getIcon(id)}\n+            title={service.charm} />);\n+      });\n+      var unitCount = bundle.unitCount || <span>&nbsp;</span>;\n+      return (\n+        <juju.components.UserProfileEntity\n+          changeState={this.props.changeState}\n+          entity={bundle}\n+          getDiagramURL={this.props.getDiagramURL}\n+          key={id}\n+          type=\"bundle\">\n+          <span className={'user-profile__list-col five-col ' +\n+            'user-profile__list-name'}>\n+            {bundle.name}\n+            {this._generateTags(bundle.tags, id)}\n+          </span>\n+          <span className={'user-profile__list-col three-col ' +\n+            'user-profile__list-icons'}>\n+            {services}\n+          </span>\n+          <span className=\"user-profile__list-col one-col prepend-one\">\n+            {unitCount}\n+          </span>\n+          <span className=\"user-profile__list-col two-col last-col\">\n+            {bundle.owner}\n+          </span>\n+        </juju.components.UserProfileEntity>);\n+    },\n+\n+    /**\n+      Generate the header for the bundles.\n+\n+      @method _generateBundleHeader\n+      @returns {Array} The markup for the header.\n+    */\n+    _generateBundleHeader: function() {\n+      return (\n+        <li className=\"user-profile__list-header twelve-col\">\n+          <span className=\"user-profile__list-col five-col\">\n+            Name\n+          </span>\n+          <span className={'user-profile__list-col three-col ' +\n+            'user-profile__list-icons'}>\n+            Charms\n+          </span>\n+          <span className=\"user-profile__list-col one-col prepend-one\">\n+            Units\n+          </span>\n+          <span className={\n+            'user-profile__list-col two-col last-col'}>\n+            Owner\n+          </span>\n+        </li>);\n+    },\n+\n+    /**\n+      Generate the details for the provided charm.\n+\n+      @method _generateCharmRow\n+      @param {Object} charm A charm object.\n+      @returns {Array} The markup for the row.\n+    */\n+    _generateCharmRow: function(charm) {\n+      var id = charm.id;\n+      // Ensure the icon is set.\n+      charm.icon = charm.icon || this._getIcon(id);\n+      return (\n+        <juju.components.UserProfileEntity\n+          changeState={this.props.changeState}\n+          entity={charm}\n+          key={id}\n+          type=\"charm\">\n+          <span className={'user-profile__list-col three-col ' +\n+            'user-profile__list-name'}>\n+            {charm.name}\n+            {this._generateTags(charm.tags, id)}\n+          </span>\n+          <span className=\"user-profile__list-col four-col\">\n+            {this._generateSeries(charm.series, id)}\n+          </span>\n+          <span className={'user-profile__list-col one-col ' +\n+            'user-profile__list-icons'}>\n+            <img className=\"user-profile__list-icon\"\n+              src={charm.icon}\n+              title={charm.name} />\n+          </span>\n+          <span className={'user-profile__list-col two-col ' +\n+            'prepend-two last-col'}>\n+            {charm.owner}\n+          </span>\n+        </juju.components.UserProfileEntity>);\n+    },\n+\n+    /**\n+      Generate the header for the charms.\n+\n+      @method _generateCharmHeader\n+      @returns {Array} The markup for the header.\n+    */\n+    _generateCharmHeader: function() {\n+      return (\n+        <li className=\"user-profile__list-header twelve-col\">\n+          <span className=\"user-profile__list-col three-col\">\n+            Name\n+          </span>\n+          <span className=\"user-profile__list-col seven-col\">\n+            Series\n+          </span>\n+          <span className=\"user-profile__list-col two-col last-col\">\n+            Owner\n+          </span>\n+        </li>);\n+    },\n+\n+    render: function() {\n+      var type = this.props.type;\n+      if (this.state.loadingEntities) {\n+        return (\n+          <div className=\"user-profile__{type}-list twelve-col\">","path":"jujugui/static/gui/src/app/components/user-profile/entity-list.js","position":306,"original_position":306,"commit_id":"6c5538f80cc1ed308b64d70919869de55958b170","original_commit_id":"6c5538f80cc1ed308b64d70919869de55958b170","user":{"login":"huwshimi","id":361637,"avatar_url":"https://avatars.githubusercontent.com/u/361637?v=3","gravatar_id":"","url":"https://api.github.com/users/huwshimi","html_url":"https://github.com/huwshimi","followers_url":"https://api.github.com/users/huwshimi/followers","following_url":"https://api.github.com/users/huwshimi/following{/other_user}","gists_url":"https://api.github.com/users/huwshimi/gists{/gist_id}","starred_url":"https://api.github.com/users/huwshimi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/huwshimi/subscriptions","organizations_url":"https://api.github.com/users/huwshimi/orgs","repos_url":"https://api.github.com/users/huwshimi/repos","events_url":"https://api.github.com/users/huwshimi/events{/privacy}","received_events_url":"https://api.github.com/users/huwshimi/received_events","type":"User","site_admin":false},"body":"This will need to be something like ={\\`user-profile__${type}-list twelve-col\\`}.","created_at":"2016-08-03T00:57:29Z","updated_at":"2016-08-03T00:57:29Z","html_url":"https://github.com/juju/juju-gui/pull/1894#discussion_r73265317","pull_request_url":"https://api.github.com/repos/juju/juju-gui/pulls/1894","_links":{"self":{"href":"https://api.github.com/repos/juju/juju-gui/pulls/comments/73265317"},"html":{"href":"https://github.com/juju/juju-gui/pull/1894#discussion_r73265317"},"pull_request":{"href":"https://api.github.com/repos/juju/juju-gui/pulls/1894"}}},"pull_request":{"url":"https://api.github.com/repos/juju/juju-gui/pulls/1894","id":79752088,"html_url":"https://github.com/juju/juju-gui/pull/1894","diff_url":"https://github.com/juju/juju-gui/pull/1894.diff","patch_url":"https://github.com/juju/juju-gui/pull/1894.patch","issue_url":"https://api.github.com/repos/juju/juju-gui/issues/1894","number":1894,"state":"open","locked":false,"title":"Split BudgetList and EntityList components out of UserProfile.","user":{"login":"kadams54","id":378036,"avatar_url":"https://avatars.githubusercontent.com/u/378036?v=3","gravatar_id":"","url":"https://api.github.com/users/kadams54","html_url":"https://github.com/kadams54","followers_url":"https://api.github.com/users/kadams54/followers","following_url":"https://api.github.com/users/kadams54/following{/other_user}","gists_url":"https://api.github.com/users/kadams54/gists{/gist_id}","starred_url":"https://api.github.com/users/kadams54/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kadams54/subscriptions","organizations_url":"https://api.github.com/users/kadams54/orgs","repos_url":"https://api.github.com/users/kadams54/repos","events_url":"https://api.github.com/users/kadams54/events{/privacy}","received_events_url":"https://api.github.com/users/kadams54/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-08-02T15:06:23Z","updated_at":"2016-08-03T00:57:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6da2d1e5b91996cb69963d157e46b6b4c07716cf","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/juju/juju-gui/pulls/1894/commits","review_comments_url":"https://api.github.com/repos/juju/juju-gui/pulls/1894/comments","review_comment_url":"https://api.github.com/repos/juju/juju-gui/pulls/comments{/number}","comments_url":"https://api.github.com/repos/juju/juju-gui/issues/1894/comments","statuses_url":"https://api.github.com/repos/juju/juju-gui/statuses/6c5538f80cc1ed308b64d70919869de55958b170","head":{"label":"kadams54:budget-list","ref":"budget-list","sha":"6c5538f80cc1ed308b64d70919869de55958b170","user":{"login":"kadams54","id":378036,"avatar_url":"https://avatars.githubusercontent.com/u/378036?v=3","gravatar_id":"","url":"https://api.github.com/users/kadams54","html_url":"https://github.com/kadams54","followers_url":"https://api.github.com/users/kadams54/followers","following_url":"https://api.github.com/users/kadams54/following{/other_user}","gists_url":"https://api.github.com/users/kadams54/gists{/gist_id}","starred_url":"https://api.github.com/users/kadams54/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kadams54/subscriptions","organizations_url":"https://api.github.com/users/kadams54/orgs","repos_url":"https://api.github.com/users/kadams54/repos","events_url":"https://api.github.com/users/kadams54/events{/privacy}","received_events_url":"https://api.github.com/users/kadams54/received_events","type":"User","site_admin":false},"repo":{"id":17426336,"name":"juju-gui","full_name":"kadams54/juju-gui","owner":{"login":"kadams54","id":378036,"avatar_url":"https://avatars.githubusercontent.com/u/378036?v=3","gravatar_id":"","url":"https://api.github.com/users/kadams54","html_url":"https://github.com/kadams54","followers_url":"https://api.github.com/users/kadams54/followers","following_url":"https://api.github.com/users/kadams54/following{/other_user}","gists_url":"https://api.github.com/users/kadams54/gists{/gist_id}","starred_url":"https://api.github.com/users/kadams54/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kadams54/subscriptions","organizations_url":"https://api.github.com/users/kadams54/orgs","repos_url":"https://api.github.com/users/kadams54/repos","events_url":"https://api.github.com/users/kadams54/events{/privacy}","received_events_url":"https://api.github.com/users/kadams54/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kadams54/juju-gui","description":"Juju-GUI is a web-based GUI for Juju <https://juju.ubuntu.com/>.","fork":true,"url":"https://api.github.com/repos/kadams54/juju-gui","forks_url":"https://api.github.com/repos/kadams54/juju-gui/forks","keys_url":"https://api.github.com/repos/kadams54/juju-gui/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kadams54/juju-gui/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kadams54/juju-gui/teams","hooks_url":"https://api.github.com/repos/kadams54/juju-gui/hooks","issue_events_url":"https://api.github.com/repos/kadams54/juju-gui/issues/events{/number}","events_url":"https://api.github.com/repos/kadams54/juju-gui/events","assignees_url":"https://api.github.com/repos/kadams54/juju-gui/assignees{/user}","branches_url":"https://api.github.com/repos/kadams54/juju-gui/branches{/branch}","tags_url":"https://api.github.com/repos/kadams54/juju-gui/tags","blobs_url":"https://api.github.com/repos/kadams54/juju-gui/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kadams54/juju-gui/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kadams54/juju-gui/git/refs{/sha}","trees_url":"https://api.github.com/repos/kadams54/juju-gui/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kadams54/juju-gui/statuses/{sha}","languages_url":"https://api.github.com/repos/kadams54/juju-gui/languages","stargazers_url":"https://api.github.com/repos/kadams54/juju-gui/stargazers","contributors_url":"https://api.github.com/repos/kadams54/juju-gui/contributors","subscribers_url":"https://api.github.com/repos/kadams54/juju-gui/subscribers","subscription_url":"https://api.github.com/repos/kadams54/juju-gui/subscription","commits_url":"https://api.github.com/repos/kadams54/juju-gui/commits{/sha}","git_commits_url":"https://api.github.com/repos/kadams54/juju-gui/git/commits{/sha}","comments_url":"https://api.github.com/repos/kadams54/juju-gui/comments{/number}","issue_comment_url":"https://api.github.com/repos/kadams54/juju-gui/issues/comments{/number}","contents_url":"https://api.github.com/repos/kadams54/juju-gui/contents/{+path}","compare_url":"https://api.github.com/repos/kadams54/juju-gui/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kadams54/juju-gui/merges","archive_url":"https://api.github.com/repos/kadams54/juju-gui/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kadams54/juju-gui/downloads","issues_url":"https://api.github.com/repos/kadams54/juju-gui/issues{/number}","pulls_url":"https://api.github.com/repos/kadams54/juju-gui/pulls{/number}","milestones_url":"https://api.github.com/repos/kadams54/juju-gui/milestones{/number}","notifications_url":"https://api.github.com/repos/kadams54/juju-gui/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kadams54/juju-gui/labels{/name}","releases_url":"https://api.github.com/repos/kadams54/juju-gui/releases{/id}","deployments_url":"https://api.github.com/repos/kadams54/juju-gui/deployments","created_at":"2014-03-05T03:12:51Z","updated_at":"2016-01-11T14:41:14Z","pushed_at":"2016-08-02T16:38:35Z","git_url":"git://github.com/kadams54/juju-gui.git","ssh_url":"git@github.com:kadams54/juju-gui.git","clone_url":"https://github.com/kadams54/juju-gui.git","svn_url":"https://github.com/kadams54/juju-gui","homepage":null,"size":117296,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"juju:develop","ref":"develop","sha":"827af726cca678dbd84555d857223cd313e43a30","user":{"login":"juju","id":4604548,"avatar_url":"https://avatars.githubusercontent.com/u/4604548?v=3","gravatar_id":"","url":"https://api.github.com/users/juju","html_url":"https://github.com/juju","followers_url":"https://api.github.com/users/juju/followers","following_url":"https://api.github.com/users/juju/following{/other_user}","gists_url":"https://api.github.com/users/juju/gists{/gist_id}","starred_url":"https://api.github.com/users/juju/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juju/subscriptions","organizations_url":"https://api.github.com/users/juju/orgs","repos_url":"https://api.github.com/users/juju/repos","events_url":"https://api.github.com/users/juju/events{/privacy}","received_events_url":"https://api.github.com/users/juju/received_events","type":"Organization","site_admin":false},"repo":{"id":14960387,"name":"juju-gui","full_name":"juju/juju-gui","owner":{"login":"juju","id":4604548,"avatar_url":"https://avatars.githubusercontent.com/u/4604548?v=3","gravatar_id":"","url":"https://api.github.com/users/juju","html_url":"https://github.com/juju","followers_url":"https://api.github.com/users/juju/followers","following_url":"https://api.github.com/users/juju/following{/other_user}","gists_url":"https://api.github.com/users/juju/gists{/gist_id}","starred_url":"https://api.github.com/users/juju/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juju/subscriptions","organizations_url":"https://api.github.com/users/juju/orgs","repos_url":"https://api.github.com/users/juju/repos","events_url":"https://api.github.com/users/juju/events{/privacy}","received_events_url":"https://api.github.com/users/juju/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/juju/juju-gui","description":"Juju-GUI is a web-based GUI for Juju <https://jujucharms.com/>.","fork":false,"url":"https://api.github.com/repos/juju/juju-gui","forks_url":"https://api.github.com/repos/juju/juju-gui/forks","keys_url":"https://api.github.com/repos/juju/juju-gui/keys{/key_id}","collaborators_url":"https://api.github.com/repos/juju/juju-gui/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/juju/juju-gui/teams","hooks_url":"https://api.github.com/repos/juju/juju-gui/hooks","issue_events_url":"https://api.github.com/repos/juju/juju-gui/issues/events{/number}","events_url":"https://api.github.com/repos/juju/juju-gui/events","assignees_url":"https://api.github.com/repos/juju/juju-gui/assignees{/user}","branches_url":"https://api.github.com/repos/juju/juju-gui/branches{/branch}","tags_url":"https://api.github.com/repos/juju/juju-gui/tags","blobs_url":"https://api.github.com/repos/juju/juju-gui/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/juju/juju-gui/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/juju/juju-gui/git/refs{/sha}","trees_url":"https://api.github.com/repos/juju/juju-gui/git/trees{/sha}","statuses_url":"https://api.github.com/repos/juju/juju-gui/statuses/{sha}","languages_url":"https://api.github.com/repos/juju/juju-gui/languages","stargazers_url":"https://api.github.com/repos/juju/juju-gui/stargazers","contributors_url":"https://api.github.com/repos/juju/juju-gui/contributors","subscribers_url":"https://api.github.com/repos/juju/juju-gui/subscribers","subscription_url":"https://api.github.com/repos/juju/juju-gui/subscription","commits_url":"https://api.github.com/repos/juju/juju-gui/commits{/sha}","git_commits_url":"https://api.github.com/repos/juju/juju-gui/git/commits{/sha}","comments_url":"https://api.github.com/repos/juju/juju-gui/comments{/number}","issue_comment_url":"https://api.github.com/repos/juju/juju-gui/issues/comments{/number}","contents_url":"https://api.github.com/repos/juju/juju-gui/contents/{+path}","compare_url":"https://api.github.com/repos/juju/juju-gui/compare/{base}...{head}","merges_url":"https://api.github.com/repos/juju/juju-gui/merges","archive_url":"https://api.github.com/repos/juju/juju-gui/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/juju/juju-gui/downloads","issues_url":"https://api.github.com/repos/juju/juju-gui/issues{/number}","pulls_url":"https://api.github.com/repos/juju/juju-gui/pulls{/number}","milestones_url":"https://api.github.com/repos/juju/juju-gui/milestones{/number}","notifications_url":"https://api.github.com/repos/juju/juju-gui/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/juju/juju-gui/labels{/name}","releases_url":"https://api.github.com/repos/juju/juju-gui/releases{/id}","deployments_url":"https://api.github.com/repos/juju/juju-gui/deployments","created_at":"2013-12-05T17:15:48Z","updated_at":"2016-07-29T07:52:36Z","pushed_at":"2016-08-02T16:52:20Z","git_url":"git://github.com/juju/juju-gui.git","ssh_url":"git@github.com:juju/juju-gui.git","clone_url":"https://github.com/juju/juju-gui.git","svn_url":"https://github.com/juju/juju-gui","homepage":"","size":121694,"stargazers_count":93,"watchers_count":93,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":57,"mirror_url":null,"open_issues_count":101,"forks":57,"open_issues":101,"watchers":93,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/juju/juju-gui/pulls/1894"},"html":{"href":"https://github.com/juju/juju-gui/pull/1894"},"issue":{"href":"https://api.github.com/repos/juju/juju-gui/issues/1894"},"comments":{"href":"https://api.github.com/repos/juju/juju-gui/issues/1894/comments"},"review_comments":{"href":"https://api.github.com/repos/juju/juju-gui/pulls/1894/comments"},"review_comment":{"href":"https://api.github.com/repos/juju/juju-gui/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/juju/juju-gui/pulls/1894/commits"},"statuses":{"href":"https://api.github.com/repos/juju/juju-gui/statuses/6c5538f80cc1ed308b64d70919869de55958b170"}}}}
{"actor":{"display_login":"huwshimi"}}