{"action":"created","comment":{"url":"https://api.github.com/repos/rangle/ngcourse-next/pulls/comments/35345863","id":35345863,"diff_hunk":"@@ -45,69 +35,213 @@ angular.element(document).ready(function() {\n });\n ```\n \n-## Defining Components\n+# Angular 1.x Basics\n \n-This app doesn't do anything at all. To make it do something remotely interesting we'll need to define a component. \n+This app doesn't do anything at all. To make it do something remotely interesting we'll need to define a directive. \n \n-## ...But What is a Component?\n+## Directives\n \n-Component is an object that structures and represents a UI element. It consists of two parts, component **controller** and component **template**.\n+In Angular 1.x, directives are the building blocks of your application. Directives can be described as markers on the DOM tree that allow to define custom behaviour and/or transformations on that DOM element.\n \n-With that in mind let's define a basic component in a separate typescript file in *components/main/main-component.ts*:\n+Let's define a basic directive in our *app.ts* file to see this in action,\n \n-```typescript\n-  import {makeComponent} from 'utils/component-maker';\n-\n-  const template = `\n-    <div>\n-      <span>\n-        Hello, {{ ctrl.username }}!\n-        You've got {{ ctrl.numberOfTasks }} tasks.\n-      </span>\n-    </div>\n-  `;\n+```javascript\n+...\n+angular.module('ngcourse')\n+  .directive('ngcMain', () => {\n+    return {\n+      restrict: 'E', // vs 'A', 'AE'\n+      replace: true,\n+      scope: {}, // vs 'true', 'null'\n+      template: '<span>Hello World from Directive!</span>'\n+    };\n+  });\n+...\n+```\n \n-  class MainCtrl {\n-    username: any;\n-    numberOfTasks: any;\n+Note the way `angular.module()` is invoked in these two files. Let's make sure we understand the difference.\n \n-    constructor() { \n-      this.username = 'alice';\n-      this.numberOfTasks = 0;\n-    }\n-  };\n+We already saw code that is similar, so we recognize JavaScript's \"fluent\" chaining style and the use of a function expression in the second argument to `directive()`.\n+\n+And now we can use our directive in our *index.html* as follows:\n \n-  export var MainComponent = makeComponent(\n-    template,\n-    MainCtrl,\n-    {}\n-  );\n+```html\n+...\n+  <body>\n+    <ngc-main></ngc-main>\n+    ...\n+  </body>\n ```\n \n-### Component Template\n-The template of a component is just an HTML snippet defining a view that represent this component. Templates have access to any properties or functions defined on the component's controller.\n+Note that we used \"camelCase\" when we defined this directive in our Angular application, but we used hyphens when inserting them into the HTML.\n \n-### Component Controller\n-The component controller is just an ES6 class that backs component's view represented by a template. The template above binds the `username` and \n-`numberOfTasks` properties defined on the `MainCtrl` controller class using the `{{ ctrl.username }}` and `{{ ctrl.numberOfTasks }}`, refered to as the double-mustache syntax.\n+Angular will figure out that `<ngc-main></ngc-main>` refers to the directive that we defined as `ngcMain`.\n \n-## Using Components in your Angular 1.x Application\n+## Transclusion with `ng-transclude`\n \n-In the previous section we learned how to define a component, now we need to use this component within our Angular 1.x application context.\n+The way we defined our `ngc-main` directive above will ignore anything between the directive tags, as illustrated by example below.\n \n-Lets change our *app.ts* and let Angular know about our component via the `.directive()` function.\n+```html\n+<ngc-main>This text will be thrown away.</ngc-main>\n+```\n \n-```typescript\n+In some situation we would like the content to be preserved and shown on the DOM. To achieve this we will need to modify the transclude property of our directive like so:\n+\n+```javascript\n+...\n+  .directive('ngcMain', () => {\n+    return {\n+      ...\n+      transclude: true,\n+      template: '<span>Hello World from Directive! <div ng-transclude/></span>'\n+    };\n+  });\n+...  \n+```\n+\n+## Controllers\n+\n+Our application still does not do very much. In order to add behaviour to our directive, lets define a controller class with some simple logic.\n+\n+```javascript\n+class MainDirectiveCtrl {\n+  private userDisplayName;\n+  constructor() {\n+    this.userDisplayName = 'Mike Tyson';\n+  }\n+}\n+\n+angular.module('ngcourse')\n+  .directive('ngcMain', () => {\n+    return {\n+      restrict: 'E',\n+      replace: true,\n+      scope: {},\n+      template: '<span>Hello, {{ ctrl.userDisplayName }}.</span>',\n+      controller: MainDirectiveCtrl,\n+      controllerAs: 'ctrl',\n+      bindToController: true\n+    };\n+  });\n+```\n+\n+Note Angular's `{{ }}` syntax, refered to as the double mustache, used here\n+to bind controller's property to the template.\n+\n+Let's recap:\n+\n+### Template\n+The template is just an HTML snippet defining a view that represent this directive. Templates have access to any properties or functions defined on the directive's controller scope.\n+\n+### Controller\n+The controller is just an ES6 class that backs component's view represented by a template. The template above binds the `userDisplayName` property defined on the `MainDirectiveCtrl` controller class using the double-mustache syntax `{{ ctrl.userDisplayName }}`.\n+\n+## Using an External Template\n+\n+Our templates are usualy too complex to include as a string. So, instead we often provide a URL to the template file by using `templateUrl` instead of the `template` option in our Directive Definition Object (DDO).\n+\n+Let's create a new directory *client/app/components/main/* and extract our template into a html file called *main-component.html*. Our templateUrl option should now point to */dist/components/main/main-component.html*.\n+\n+## Using an External Controller Class\n+\n+In the same fashion we should extract our controller class into a separate file, as we want to avoid clutter when our application grows.\n+\n+Create a file called *main-component.ts* in the */dist/components/main/main-component.html* and move our controller class definition there.\n+\n+### Import and Export\n+\n+Moving the controller class into a separate file is not enough as we need to reference it within our main *app.ts* file. That is what the ES6 import/export syntax is useful for.\n+\n+Change the controller class definition in the *main-component.ts* file to include the export keyword as follows:\n+\n+```javascript\n+export class MainDirectiveCtrl {\n+  private userDisplayName;\n+  constructor() {\n+    this.userDisplayName = 'Mike Tyson';\n+  }\n+}\n+```\n+\n+Now in *app.ts* lets import our class as follows:\n+\n+```javascript\n+import {MainDirectiveCtrl} from 'components/main/main-component';\n ...\n-angular.module('ngcourse', [])\n-  .directive('ngcMain', MainComponent);\n+angular.module('ngcourse', []);\n+\n+angular.module('ngcourse')\n+  .directive('ngcMain', () => {\n+    return {\n+      restrict: 'E',\n+      replace: true,\n+      scope: {},\n+      templateUrl: '/dist/components/main/main-component.html',\n+      controller: MainDirectiveCtrl,","path":"handout/05-components.md","position":236,"original_position":236,"commit_id":"abd253b08b392168d79705301377f4d6c57f8b70","original_commit_id":"abd253b08b392168d79705301377f4d6c57f8b70","user":{"login":"SethDavenport","id":4614141,"avatar_url":"https://avatars.githubusercontent.com/u/4614141?v=3","gravatar_id":"","url":"https://api.github.com/users/SethDavenport","html_url":"https://github.com/SethDavenport","followers_url":"https://api.github.com/users/SethDavenport/followers","following_url":"https://api.github.com/users/SethDavenport/following{/other_user}","gists_url":"https://api.github.com/users/SethDavenport/gists{/gist_id}","starred_url":"https://api.github.com/users/SethDavenport/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SethDavenport/subscriptions","organizations_url":"https://api.github.com/users/SethDavenport/orgs","repos_url":"https://api.github.com/users/SethDavenport/repos","events_url":"https://api.github.com/users/SethDavenport/events{/privacy}","received_events_url":"https://api.github.com/users/SethDavenport/received_events","type":"User","site_admin":false},"body":"I use a similar setup in ES5 where by 'directive' file is basically just the DDO.\r\n\r\nHowever I usually supply the name of the component instead of a reference to the actual function, because then the component is injectable, which means I can test it directly like any other controller.\r\n\r\nSo:\r\n\r\n```javascript\r\nangular.module('ngcourse.ngc-main.directive', [])\r\n  .directive('ngcMain', () => {\r\n    return {\r\n      restrict: 'E',\r\n      replace: true,\r\n      scope: {},\r\n      templateUrl: '/dist/components/main/main-component.html',\r\n      controller: 'NgcMainCtrl',\r\n      controllerAs: 'ctrl',\r\n      bindToController: true\r\n    };\r\n  });\r\n\r\n// another file:\r\n\r\nangular.module('ngcourse.ngc-main.controller', [])\r\n  .controller('NgcMainCtrl', function () {\r\n    // ...\r\n  });\r\n})\r\n```\r\n\r\nThoughts?  Maybe ES6 modules make this superfluous?","created_at":"2015-07-23T17:11:54Z","updated_at":"2015-07-23T17:11:54Z","html_url":"https://github.com/rangle/ngcourse-next/pull/13#discussion_r35345863","pull_request_url":"https://api.github.com/repos/rangle/ngcourse-next/pulls/13","_links":{"self":{"href":"https://api.github.com/repos/rangle/ngcourse-next/pulls/comments/35345863"},"html":{"href":"https://github.com/rangle/ngcourse-next/pull/13#discussion_r35345863"},"pull_request":{"href":"https://api.github.com/repos/rangle/ngcourse-next/pulls/13"}}},"pull_request":{"url":"https://api.github.com/repos/rangle/ngcourse-next/pulls/13","id":40608844,"html_url":"https://github.com/rangle/ngcourse-next/pull/13","diff_url":"https://github.com/rangle/ngcourse-next/pull/13.diff","patch_url":"https://github.com/rangle/ngcourse-next/pull/13.patch","issue_url":"https://api.github.com/repos/rangle/ngcourse-next/issues/13","number":13,"state":"open","locked":false,"title":"Write Components Section","user":{"login":"igor-ka","id":12536242,"avatar_url":"https://avatars.githubusercontent.com/u/12536242?v=3","gravatar_id":"","url":"https://api.github.com/users/igor-ka","html_url":"https://github.com/igor-ka","followers_url":"https://api.github.com/users/igor-ka/followers","following_url":"https://api.github.com/users/igor-ka/following{/other_user}","gists_url":"https://api.github.com/users/igor-ka/gists{/gist_id}","starred_url":"https://api.github.com/users/igor-ka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/igor-ka/subscriptions","organizations_url":"https://api.github.com/users/igor-ka/orgs","repos_url":"https://api.github.com/users/igor-ka/repos","events_url":"https://api.github.com/users/igor-ka/events{/privacy}","received_events_url":"https://api.github.com/users/igor-ka/received_events","type":"User","site_admin":false},"body":" - Basics of Angular\r\n  - Directives\r\n  - Controllers\r\n  - Templates\r\n - Components\r\n  - Classes\r\n  - Import/Export\r\n  - DI\r\n  - Utility Methods\r\n  - Data Binding\r\n  - Component Communication\r\n  - Component Types","created_at":"2015-07-22T20:38:25Z","updated_at":"2015-07-23T17:11:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bb628f3f0ddcaf5ef747fb77400d9c09c75304d0","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/rangle/ngcourse-next/pulls/13/commits","review_comments_url":"https://api.github.com/repos/rangle/ngcourse-next/pulls/13/comments","review_comment_url":"https://api.github.com/repos/rangle/ngcourse-next/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rangle/ngcourse-next/issues/13/comments","statuses_url":"https://api.github.com/repos/rangle/ngcourse-next/statuses/abd253b08b392168d79705301377f4d6c57f8b70","head":{"label":"igor-ka:feat-section-components","ref":"feat-section-components","sha":"abd253b08b392168d79705301377f4d6c57f8b70","user":{"login":"igor-ka","id":12536242,"avatar_url":"https://avatars.githubusercontent.com/u/12536242?v=3","gravatar_id":"","url":"https://api.github.com/users/igor-ka","html_url":"https://github.com/igor-ka","followers_url":"https://api.github.com/users/igor-ka/followers","following_url":"https://api.github.com/users/igor-ka/following{/other_user}","gists_url":"https://api.github.com/users/igor-ka/gists{/gist_id}","starred_url":"https://api.github.com/users/igor-ka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/igor-ka/subscriptions","organizations_url":"https://api.github.com/users/igor-ka/orgs","repos_url":"https://api.github.com/users/igor-ka/repos","events_url":"https://api.github.com/users/igor-ka/events{/privacy}","received_events_url":"https://api.github.com/users/igor-ka/received_events","type":"User","site_admin":false},"repo":{"id":37665852,"name":"ngcourse-next","full_name":"igor-ka/ngcourse-next","owner":{"login":"igor-ka","id":12536242,"avatar_url":"https://avatars.githubusercontent.com/u/12536242?v=3","gravatar_id":"","url":"https://api.github.com/users/igor-ka","html_url":"https://github.com/igor-ka","followers_url":"https://api.github.com/users/igor-ka/followers","following_url":"https://api.github.com/users/igor-ka/following{/other_user}","gists_url":"https://api.github.com/users/igor-ka/gists{/gist_id}","starred_url":"https://api.github.com/users/igor-ka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/igor-ka/subscriptions","organizations_url":"https://api.github.com/users/igor-ka/orgs","repos_url":"https://api.github.com/users/igor-ka/repos","events_url":"https://api.github.com/users/igor-ka/events{/privacy}","received_events_url":"https://api.github.com/users/igor-ka/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/igor-ka/ngcourse-next","description":"A course that teaches how to build Angular 1 applications the Angular 2 way.","fork":true,"url":"https://api.github.com/repos/igor-ka/ngcourse-next","forks_url":"https://api.github.com/repos/igor-ka/ngcourse-next/forks","keys_url":"https://api.github.com/repos/igor-ka/ngcourse-next/keys{/key_id}","collaborators_url":"https://api.github.com/repos/igor-ka/ngcourse-next/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/igor-ka/ngcourse-next/teams","hooks_url":"https://api.github.com/repos/igor-ka/ngcourse-next/hooks","issue_events_url":"https://api.github.com/repos/igor-ka/ngcourse-next/issues/events{/number}","events_url":"https://api.github.com/repos/igor-ka/ngcourse-next/events","assignees_url":"https://api.github.com/repos/igor-ka/ngcourse-next/assignees{/user}","branches_url":"https://api.github.com/repos/igor-ka/ngcourse-next/branches{/branch}","tags_url":"https://api.github.com/repos/igor-ka/ngcourse-next/tags","blobs_url":"https://api.github.com/repos/igor-ka/ngcourse-next/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/igor-ka/ngcourse-next/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/igor-ka/ngcourse-next/git/refs{/sha}","trees_url":"https://api.github.com/repos/igor-ka/ngcourse-next/git/trees{/sha}","statuses_url":"https://api.github.com/repos/igor-ka/ngcourse-next/statuses/{sha}","languages_url":"https://api.github.com/repos/igor-ka/ngcourse-next/languages","stargazers_url":"https://api.github.com/repos/igor-ka/ngcourse-next/stargazers","contributors_url":"https://api.github.com/repos/igor-ka/ngcourse-next/contributors","subscribers_url":"https://api.github.com/repos/igor-ka/ngcourse-next/subscribers","subscription_url":"https://api.github.com/repos/igor-ka/ngcourse-next/subscription","commits_url":"https://api.github.com/repos/igor-ka/ngcourse-next/commits{/sha}","git_commits_url":"https://api.github.com/repos/igor-ka/ngcourse-next/git/commits{/sha}","comments_url":"https://api.github.com/repos/igor-ka/ngcourse-next/comments{/number}","issue_comment_url":"https://api.github.com/repos/igor-ka/ngcourse-next/issues/comments{/number}","contents_url":"https://api.github.com/repos/igor-ka/ngcourse-next/contents/{+path}","compare_url":"https://api.github.com/repos/igor-ka/ngcourse-next/compare/{base}...{head}","merges_url":"https://api.github.com/repos/igor-ka/ngcourse-next/merges","archive_url":"https://api.github.com/repos/igor-ka/ngcourse-next/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/igor-ka/ngcourse-next/downloads","issues_url":"https://api.github.com/repos/igor-ka/ngcourse-next/issues{/number}","pulls_url":"https://api.github.com/repos/igor-ka/ngcourse-next/pulls{/number}","milestones_url":"https://api.github.com/repos/igor-ka/ngcourse-next/milestones{/number}","notifications_url":"https://api.github.com/repos/igor-ka/ngcourse-next/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/igor-ka/ngcourse-next/labels{/name}","releases_url":"https://api.github.com/repos/igor-ka/ngcourse-next/releases{/id}","created_at":"2015-06-18T14:55:20Z","updated_at":"2015-07-13T18:52:23Z","pushed_at":"2015-07-23T13:41:51Z","git_url":"git://github.com/igor-ka/ngcourse-next.git","ssh_url":"git@github.com:igor-ka/ngcourse-next.git","clone_url":"https://github.com/igor-ka/ngcourse-next.git","svn_url":"https://github.com/igor-ka/ngcourse-next","homepage":null,"size":2872,"stargazers_count":2,"watchers_count":2,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":2,"default_branch":"master"}},"base":{"label":"rangle:master","ref":"master","sha":"b98406c5d7f5efe296baafd341cf4a39824c1b78","user":{"login":"rangle","id":4304982,"avatar_url":"https://avatars.githubusercontent.com/u/4304982?v=3","gravatar_id":"","url":"https://api.github.com/users/rangle","html_url":"https://github.com/rangle","followers_url":"https://api.github.com/users/rangle/followers","following_url":"https://api.github.com/users/rangle/following{/other_user}","gists_url":"https://api.github.com/users/rangle/gists{/gist_id}","starred_url":"https://api.github.com/users/rangle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rangle/subscriptions","organizations_url":"https://api.github.com/users/rangle/orgs","repos_url":"https://api.github.com/users/rangle/repos","events_url":"https://api.github.com/users/rangle/events{/privacy}","received_events_url":"https://api.github.com/users/rangle/received_events","type":"Organization","site_admin":false},"repo":{"id":36198776,"name":"ngcourse-next","full_name":"rangle/ngcourse-next","owner":{"login":"rangle","id":4304982,"avatar_url":"https://avatars.githubusercontent.com/u/4304982?v=3","gravatar_id":"","url":"https://api.github.com/users/rangle","html_url":"https://github.com/rangle","followers_url":"https://api.github.com/users/rangle/followers","following_url":"https://api.github.com/users/rangle/following{/other_user}","gists_url":"https://api.github.com/users/rangle/gists{/gist_id}","starred_url":"https://api.github.com/users/rangle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rangle/subscriptions","organizations_url":"https://api.github.com/users/rangle/orgs","repos_url":"https://api.github.com/users/rangle/repos","events_url":"https://api.github.com/users/rangle/events{/privacy}","received_events_url":"https://api.github.com/users/rangle/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rangle/ngcourse-next","description":"A course that teaches how to build Angular 1 applications the Angular 2 way.","fork":false,"url":"https://api.github.com/repos/rangle/ngcourse-next","forks_url":"https://api.github.com/repos/rangle/ngcourse-next/forks","keys_url":"https://api.github.com/repos/rangle/ngcourse-next/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rangle/ngcourse-next/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rangle/ngcourse-next/teams","hooks_url":"https://api.github.com/repos/rangle/ngcourse-next/hooks","issue_events_url":"https://api.github.com/repos/rangle/ngcourse-next/issues/events{/number}","events_url":"https://api.github.com/repos/rangle/ngcourse-next/events","assignees_url":"https://api.github.com/repos/rangle/ngcourse-next/assignees{/user}","branches_url":"https://api.github.com/repos/rangle/ngcourse-next/branches{/branch}","tags_url":"https://api.github.com/repos/rangle/ngcourse-next/tags","blobs_url":"https://api.github.com/repos/rangle/ngcourse-next/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rangle/ngcourse-next/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rangle/ngcourse-next/git/refs{/sha}","trees_url":"https://api.github.com/repos/rangle/ngcourse-next/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rangle/ngcourse-next/statuses/{sha}","languages_url":"https://api.github.com/repos/rangle/ngcourse-next/languages","stargazers_url":"https://api.github.com/repos/rangle/ngcourse-next/stargazers","contributors_url":"https://api.github.com/repos/rangle/ngcourse-next/contributors","subscribers_url":"https://api.github.com/repos/rangle/ngcourse-next/subscribers","subscription_url":"https://api.github.com/repos/rangle/ngcourse-next/subscription","commits_url":"https://api.github.com/repos/rangle/ngcourse-next/commits{/sha}","git_commits_url":"https://api.github.com/repos/rangle/ngcourse-next/git/commits{/sha}","comments_url":"https://api.github.com/repos/rangle/ngcourse-next/comments{/number}","issue_comment_url":"https://api.github.com/repos/rangle/ngcourse-next/issues/comments{/number}","contents_url":"https://api.github.com/repos/rangle/ngcourse-next/contents/{+path}","compare_url":"https://api.github.com/repos/rangle/ngcourse-next/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rangle/ngcourse-next/merges","archive_url":"https://api.github.com/repos/rangle/ngcourse-next/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rangle/ngcourse-next/downloads","issues_url":"https://api.github.com/repos/rangle/ngcourse-next/issues{/number}","pulls_url":"https://api.github.com/repos/rangle/ngcourse-next/pulls{/number}","milestones_url":"https://api.github.com/repos/rangle/ngcourse-next/milestones{/number}","notifications_url":"https://api.github.com/repos/rangle/ngcourse-next/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rangle/ngcourse-next/labels{/name}","releases_url":"https://api.github.com/repos/rangle/ngcourse-next/releases{/id}","created_at":"2015-05-24T23:17:16Z","updated_at":"2015-07-23T08:25:40Z","pushed_at":"2015-07-23T13:35:45Z","git_url":"git://github.com/rangle/ngcourse-next.git","ssh_url":"git@github.com:rangle/ngcourse-next.git","clone_url":"https://github.com/rangle/ngcourse-next.git","svn_url":"https://github.com/rangle/ngcourse-next","homepage":null,"size":2859,"stargazers_count":5,"watchers_count":5,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":10,"mirror_url":null,"open_issues_count":2,"forks":10,"open_issues":2,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rangle/ngcourse-next/pulls/13"},"html":{"href":"https://github.com/rangle/ngcourse-next/pull/13"},"issue":{"href":"https://api.github.com/repos/rangle/ngcourse-next/issues/13"},"comments":{"href":"https://api.github.com/repos/rangle/ngcourse-next/issues/13/comments"},"review_comments":{"href":"https://api.github.com/repos/rangle/ngcourse-next/pulls/13/comments"},"review_comment":{"href":"https://api.github.com/repos/rangle/ngcourse-next/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rangle/ngcourse-next/pulls/13/commits"},"statuses":{"href":"https://api.github.com/repos/rangle/ngcourse-next/statuses/abd253b08b392168d79705301377f4d6c57f8b70"}}}}