{"action":"closed","number":124,"pull_request":{"url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls/124","id":233281063,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMzMjgxMDYz","html_url":"https://github.com/compucorp/uk.co.compucorp.civicase/pull/124","diff_url":"https://github.com/compucorp/uk.co.compucorp.civicase/pull/124.diff","patch_url":"https://github.com/compucorp/uk.co.compucorp.civicase/pull/124.patch","issue_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues/124","number":124,"state":"closed","locked":false,"title":"C51-291: civicase popover","user":{"login":"reneolivo","id":1642119,"node_id":"MDQ6VXNlcjE2NDIxMTk=","avatar_url":"https://avatars1.githubusercontent.com/u/1642119?v=4","gravatar_id":"","url":"https://api.github.com/users/reneolivo","html_url":"https://github.com/reneolivo","followers_url":"https://api.github.com/users/reneolivo/followers","following_url":"https://api.github.com/users/reneolivo/following{/other_user}","gists_url":"https://api.github.com/users/reneolivo/gists{/gist_id}","starred_url":"https://api.github.com/users/reneolivo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/reneolivo/subscriptions","organizations_url":"https://api.github.com/users/reneolivo/orgs","repos_url":"https://api.github.com/users/reneolivo/repos","events_url":"https://api.github.com/users/reneolivo/events{/privacy}","received_events_url":"https://api.github.com/users/reneolivo/received_events","type":"User","site_admin":false},"body":"## Overview\r\n\r\nThis PR allows the contact popover to remain open when moving the mouse from the contact icon to the popover card.\r\n\r\nIt also fixes the style for the additional contacts popover since it was not the same as the one in the invision design.\r\n\r\n## Before\r\n![pr-before](https://user-images.githubusercontent.com/1642119/48959190-34561b00-ef3a-11e8-9f95-082657e11682.gif)\r\n\r\n## After\r\n![pr-after](https://user-images.githubusercontent.com/1642119/48959241-7a12e380-ef3a-11e8-92e7-9eebdd947f45.gif)\r\n\r\n\r\n## Technical details\r\n\r\n### Civicase Popover\r\n\r\nA new civicase popover component was created for the following reasons:\r\n\r\n* UIB Popover only supports basic hover of the original toggle element. There's no built in support to keep the popover visible when moving from the toggle element to the popover card.\r\n* UIB Popover can only be appended to the body, you can't append it to an arbitrary element. The popover would not be properly rendered at the body, only when inside the `#bootstrap-theme` container element. We need to append it to this element when the popover is for an element that is inside an `overflow: scroll` or similar.\r\n* UIB Popover can't be positioned on top of an arbitrary coordinate/element. If you try to manually position it elsewhere, it will keep being repositioned back to its original toggle element. For the [Activities Calendar](https://github.com/compucorp/uk.co.compucorp.civicase/blob/develop/ang/civicase/ActivitiesCalendar.js) we need the popover to open on top of a specific calendar day, which is not possible with UIB Popover.\r\n\r\nAlso, there are these other benefits to having this new component:\r\n\r\n* We can remove the [Popover Append to Element](https://github.com/compucorp/uk.co.compucorp.civicase/blob/develop/ang/civicase/PopoverAppendToElement.js) directive since this component automatically appends the popover to `#bootstrap-theme`\r\n* We can simplify the [Activities Calendar](https://github.com/compucorp/uk.co.compucorp.civicase/blob/develop/ang/civicase/ActivitiesCalendar.js) and remove a lot of the code that is associated with position the popover. This will keep things more manageable for both the Activities Calendar, and the Popover. \r\n\r\n### Usage\r\n\r\n**Normal usage with a toggle button element:**\r\n```html\r\n<civicase-popover>\r\n  <civicase-popover-toggle-button>Click Here!</civicase-popover-toggle-button>\r\n  <civicase-popover-content>And you'll see this!</civicase-popover-content>\r\n</civicase-popover>\r\n```\r\n\r\n**Opening the popover programmatically on top of an element:**\r\n```html\r\n<civicase-popover\r\n  is-open=\"popoverIsOpen\"\r\n  position-reference=\"'#custom-trigger-button'\">\r\n  <civicase-popover-content>Here goes the content</civicase-popover-content>\r\n</civicase-popover>\r\n\r\n<button\r\n  id=\"custom-trigger-button\"\r\n  ng-click=\"popoverIsOpen = true\">\r\n  Open the popover\r\n</button>\r\n```\r\n\r\nYou can pass the following parameters to the popover:\r\n\r\n* **append-to** (*string|element*) where should the popover be appended to when opened. Defaults to `#bootstrap-theme`.\r\n* **is-open** (*boolean*) can be used to programmatically  show or hide the popover.\r\n* **popover-class** (*string*) the class that the popover will have. Important: using `class=\"something\"` won't work on the popover since it will be attached outside of the component when opened.\r\n* **position-reference** (*string|element*) if provided, it will open the popover on top of this element, otherwise it will open on top of the toggle button element.\r\n* **trigger-event** (*string*) is the event that will trigger the showing and hiding of the popover. Defaults to `click`, but you can `hover` too.\r\n\r\nEvents:\r\n* **on-open** is emitted right before opening the popover.\r\n\r\n### The code\r\n\r\nOn init, the component will watch for `isOpen` and `positionReference` changes in order to access the DOM elements and show or hide the popover:\r\n\r\n```js\r\n$scope.$watch('isOpen', repositionPopover);\r\n$scope.$watch('positionReference', repositionPopover);\r\n```\r\n\r\nThe most important part is the `repositionPopover` function:\r\n\r\n```js\r\nfunction repositionPopover () {\r\n  var arrowPosition, popoverDirection, position, positionReference;\r\n\r\n  if (!$scope.isOpen) {\r\n    return;\r\n  }\r\n\r\n  initPopoverReference();\r\n\r\n  $scope.$$postDigest(function () {\r\n    positionReference = $scope.positionReference || $toggleButton;\r\n    position = getPopoverPositionUnderElement(positionReference);\r\n    popoverDirection = getPopoverDirection(position);\r\n    arrowPosition = ARROW_POSITION_VALUES[popoverDirection]\r\n      .replace('%width%', $popoverArrow.outerWidth());\r\n\r\n    if (popoverDirection !== 'bottom') {\r\n      position = getPopoverPositionUnderElement(positionReference, popoverDirection);\r\n    }\r\n\r\n    $popoverArrow.css('left', arrowPosition);\r\n    $popover.css(position);\r\n  });\r\n}\r\n```\r\n\r\n`initPopoverReference` will setup a direct reference to `.popover` element, append it to the `#bootstrap-theme` element, and attach hover events to it if necessary.\r\n\r\n`$scope.$$postDigest` is an internal angular function, but it's needed to wait for the popover content to render so we can properly determine the popover width and position it accordingly. `$timeout` does not work because it is triggered more slowly and produces a noticeable jump when moving the popover.\r\n\r\n`getPopoverPositionUnderElement` returns the position the popover will have relative to the toggle button (or the position reference)\r\n\r\n`getPopoverDirection` will return the direction the popover should be facing in case it gets hidden by the window container. The possible values are `bottom-left`, `bottom-right`, and `bottom`. `bottom` is returned when the popover can be properly displayed without issues under the given element.\r\n\r\n```js\r\nARROW_POSITION_VALUES[popoverDirection]\r\n      .replace('%width%', $popoverArrow.outerWidth());\r\n```\r\nreturns the position the arrow should be aligned depending on the popover position. These are the 3 possible outcomes if we consider that the popover arrow width is 22px:\r\n\r\n* **bottom**: `''` no alignment.\r\n* **bottom-left**: `22px` 22px from the start of the popover\r\n* **bottom-right**: `calc(100% - 22px)` 22px from the end of the popover\r\n\r\nif the popover can't be properly displayed inside of the window (`popoverDirection !== 'bottom'`), we need to reposition it taking into consideration the direction that will allow the popover to be displayed properly: \r\n```js\r\nposition = getPopoverPositionUnderElement(positionReference, popoverDirection);\r\n```\r\n\r\nFinally, we assign the arrow and popover positions:\r\n\r\n```js\r\n$popoverArrow.css('left', arrowPosition);\r\n$popover.css(position);\r\n```\r\n\r\n---\r\n\r\n`getPopoverPositionUnderElement` also has some considerations:\r\n\r\n```js\r\nfunction getPopoverPositionUnderElement ($element, direction) {\r\n  var arrowPositionModifier, position, bootstrapThemeContainerOffset;\r\n  direction = direction || 'bottom';\r\n  position = $uibPosition.positionElements($element, $popover, direction, true);\r\n  bootstrapThemeContainerOffset = $bootstrapThemeContainer.offset();\r\n  arrowPositionModifier = getArrowPositionModifier(direction);\r\n\r\n  return {\r\n    top: position.top - bootstrapThemeContainerOffset.top,\r\n    left: position.left - bootstrapThemeContainerOffset.left + arrowPositionModifier\r\n  };\r\n}\r\n\r\nfunction getArrowPositionModifier (direction) {\r\n  if (direction === 'bottom-left') {\r\n    return $popoverArrow.outerWidth() / 2 * -1;\r\n  } else if (direction === 'bottom-right') {\r\n    return $popoverArrow.outerWidth() / 2;\r\n  } else {\r\n    return 0;\r\n  }\r\n}\r\n```\r\n\r\nWe use `$uibPosition.positionElements` by giving it the `$element` where the popover should be displayed under, the `$popover` itself, the `direction` (defaults to `bottom`), and passing `true` so it uses the `body` as the container reference, it will gives the coordinates needed to position the `popover`.\r\n\r\nSince we are attaching the popover to the `#bootstrap-theme` element and it has a position different than that of the `body` we need to subtract this difference to properly align the popover:\r\n![container-offset](https://user-images.githubusercontent.com/1642119/48960353-463bbc00-ef42-11e8-8b8f-9b69aa55e5b7.png)\r\nIn this case, the `240px` is the value that the `$uibPosition.positionElements` method gives us for the top position, but since the popover is attached to `#bootstrap-theme` we first need to find out what's the offset from the top of the body, in this case `140px`. That means that the popover should be positioned `100px` on the top.\r\n\r\n\r\n### Additional contacts popover\r\n\r\nThe additional contacts popover did not have the right styles applied to it. This was fixed so it follows the invision design.\r\n\r\n#### Before\r\n![pr-before](https://user-images.githubusercontent.com/1642119/48960592-358c4580-ef44-11e8-8e24-336e7a872c24.gif)\r\n\r\n#### After\r\n![pr-after](https://user-images.githubusercontent.com/1642119/48960596-3ae99000-ef44-11e8-956a-62097a7569d1.gif)\r\n","created_at":"2018-11-23T21:24:38Z","updated_at":"2018-11-28T12:09:21Z","closed_at":"2018-11-28T12:09:20Z","merged_at":"2018-11-28T12:09:20Z","merge_commit_sha":"6f717ab401eec76354341e1d2576422e15482fe7","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls/124/commits","review_comments_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls/124/comments","review_comment_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls/comments{/number}","comments_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues/124/comments","statuses_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/statuses/3c8a562ed4d9273bbe4094bcbf13f238ec3b706d","head":{"label":"compucorp:C51-291-civicase-popup","ref":"C51-291-civicase-popup","sha":"3c8a562ed4d9273bbe4094bcbf13f238ec3b706d","user":{"login":"compucorp","id":2040164,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIwNDAxNjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/2040164?v=4","gravatar_id":"","url":"https://api.github.com/users/compucorp","html_url":"https://github.com/compucorp","followers_url":"https://api.github.com/users/compucorp/followers","following_url":"https://api.github.com/users/compucorp/following{/other_user}","gists_url":"https://api.github.com/users/compucorp/gists{/gist_id}","starred_url":"https://api.github.com/users/compucorp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/compucorp/subscriptions","organizations_url":"https://api.github.com/users/compucorp/orgs","repos_url":"https://api.github.com/users/compucorp/repos","events_url":"https://api.github.com/users/compucorp/events{/privacy}","received_events_url":"https://api.github.com/users/compucorp/received_events","type":"Organization","site_admin":false},"repo":{"id":143011708,"node_id":"MDEwOlJlcG9zaXRvcnkxNDMwMTE3MDg=","name":"uk.co.compucorp.civicase","full_name":"compucorp/uk.co.compucorp.civicase","private":false,"owner":{"login":"compucorp","id":2040164,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIwNDAxNjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/2040164?v=4","gravatar_id":"","url":"https://api.github.com/users/compucorp","html_url":"https://github.com/compucorp","followers_url":"https://api.github.com/users/compucorp/followers","following_url":"https://api.github.com/users/compucorp/following{/other_user}","gists_url":"https://api.github.com/users/compucorp/gists{/gist_id}","starred_url":"https://api.github.com/users/compucorp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/compucorp/subscriptions","organizations_url":"https://api.github.com/users/compucorp/orgs","repos_url":"https://api.github.com/users/compucorp/repos","events_url":"https://api.github.com/users/compucorp/events{/privacy}","received_events_url":"https://api.github.com/users/compucorp/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/compucorp/uk.co.compucorp.civicase","description":"CiviCase Extension","fork":true,"url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase","forks_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/forks","keys_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/keys{/key_id}","collaborators_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/teams","hooks_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/hooks","issue_events_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues/events{/number}","events_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/events","assignees_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/assignees{/user}","branches_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/branches{/branch}","tags_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/tags","blobs_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/refs{/sha}","trees_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/trees{/sha}","statuses_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/statuses/{sha}","languages_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/languages","stargazers_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/stargazers","contributors_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/contributors","subscribers_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/subscribers","subscription_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/subscription","commits_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/commits{/sha}","git_commits_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/commits{/sha}","comments_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/comments{/number}","issue_comment_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues/comments{/number}","contents_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/contents/{+path}","compare_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/compare/{base}...{head}","merges_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/merges","archive_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/downloads","issues_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues{/number}","pulls_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls{/number}","milestones_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/milestones{/number}","notifications_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/labels{/name}","releases_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/releases{/id}","deployments_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/deployments","created_at":"2018-07-31T12:33:33Z","updated_at":"2018-10-29T17:05:42Z","pushed_at":"2018-11-28T12:09:20Z","git_url":"git://github.com/compucorp/uk.co.compucorp.civicase.git","ssh_url":"git@github.com:compucorp/uk.co.compucorp.civicase.git","clone_url":"https://github.com/compucorp/uk.co.compucorp.civicase.git","svn_url":"https://github.com/compucorp/uk.co.compucorp.civicase","homepage":null,"size":2795,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":7,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":0,"open_issues":7,"watchers":0,"default_branch":"master"}},"base":{"label":"compucorp:develop","ref":"develop","sha":"b79dd62a73d60fb99bf69728a396a32d5b770a90","user":{"login":"compucorp","id":2040164,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIwNDAxNjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/2040164?v=4","gravatar_id":"","url":"https://api.github.com/users/compucorp","html_url":"https://github.com/compucorp","followers_url":"https://api.github.com/users/compucorp/followers","following_url":"https://api.github.com/users/compucorp/following{/other_user}","gists_url":"https://api.github.com/users/compucorp/gists{/gist_id}","starred_url":"https://api.github.com/users/compucorp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/compucorp/subscriptions","organizations_url":"https://api.github.com/users/compucorp/orgs","repos_url":"https://api.github.com/users/compucorp/repos","events_url":"https://api.github.com/users/compucorp/events{/privacy}","received_events_url":"https://api.github.com/users/compucorp/received_events","type":"Organization","site_admin":false},"repo":{"id":143011708,"node_id":"MDEwOlJlcG9zaXRvcnkxNDMwMTE3MDg=","name":"uk.co.compucorp.civicase","full_name":"compucorp/uk.co.compucorp.civicase","private":false,"owner":{"login":"compucorp","id":2040164,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIwNDAxNjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/2040164?v=4","gravatar_id":"","url":"https://api.github.com/users/compucorp","html_url":"https://github.com/compucorp","followers_url":"https://api.github.com/users/compucorp/followers","following_url":"https://api.github.com/users/compucorp/following{/other_user}","gists_url":"https://api.github.com/users/compucorp/gists{/gist_id}","starred_url":"https://api.github.com/users/compucorp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/compucorp/subscriptions","organizations_url":"https://api.github.com/users/compucorp/orgs","repos_url":"https://api.github.com/users/compucorp/repos","events_url":"https://api.github.com/users/compucorp/events{/privacy}","received_events_url":"https://api.github.com/users/compucorp/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/compucorp/uk.co.compucorp.civicase","description":"CiviCase Extension","fork":true,"url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase","forks_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/forks","keys_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/keys{/key_id}","collaborators_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/teams","hooks_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/hooks","issue_events_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues/events{/number}","events_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/events","assignees_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/assignees{/user}","branches_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/branches{/branch}","tags_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/tags","blobs_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/refs{/sha}","trees_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/trees{/sha}","statuses_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/statuses/{sha}","languages_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/languages","stargazers_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/stargazers","contributors_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/contributors","subscribers_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/subscribers","subscription_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/subscription","commits_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/commits{/sha}","git_commits_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/git/commits{/sha}","comments_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/comments{/number}","issue_comment_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues/comments{/number}","contents_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/contents/{+path}","compare_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/compare/{base}...{head}","merges_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/merges","archive_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/downloads","issues_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues{/number}","pulls_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls{/number}","milestones_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/milestones{/number}","notifications_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/labels{/name}","releases_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/releases{/id}","deployments_url":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/deployments","created_at":"2018-07-31T12:33:33Z","updated_at":"2018-10-29T17:05:42Z","pushed_at":"2018-11-28T12:09:20Z","git_url":"git://github.com/compucorp/uk.co.compucorp.civicase.git","ssh_url":"git@github.com:compucorp/uk.co.compucorp.civicase.git","clone_url":"https://github.com/compucorp/uk.co.compucorp.civicase.git","svn_url":"https://github.com/compucorp/uk.co.compucorp.civicase","homepage":null,"size":2795,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":7,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":0,"open_issues":7,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls/124"},"html":{"href":"https://github.com/compucorp/uk.co.compucorp.civicase/pull/124"},"issue":{"href":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues/124"},"comments":{"href":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/issues/124/comments"},"review_comments":{"href":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls/124/comments"},"review_comment":{"href":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/pulls/124/commits"},"statuses":{"href":"https://api.github.com/repos/compucorp/uk.co.compucorp.civicase/statuses/3c8a562ed4d9273bbe4094bcbf13f238ec3b706d"}},"author_association":"NONE","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"reneolivo","id":1642119,"node_id":"MDQ6VXNlcjE2NDIxMTk=","avatar_url":"https://avatars1.githubusercontent.com/u/1642119?v=4","gravatar_id":"","url":"https://api.github.com/users/reneolivo","html_url":"https://github.com/reneolivo","followers_url":"https://api.github.com/users/reneolivo/followers","following_url":"https://api.github.com/users/reneolivo/following{/other_user}","gists_url":"https://api.github.com/users/reneolivo/gists{/gist_id}","starred_url":"https://api.github.com/users/reneolivo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/reneolivo/subscriptions","organizations_url":"https://api.github.com/users/reneolivo/orgs","repos_url":"https://api.github.com/users/reneolivo/repos","events_url":"https://api.github.com/users/reneolivo/events{/privacy}","received_events_url":"https://api.github.com/users/reneolivo/received_events","type":"User","site_admin":false},"comments":3,"review_comments":4,"maintainer_can_modify":false,"commits":26,"additions":723,"deletions":74,"changed_files":14}}
{"actor":{"display_login":"reneolivo"}}