{"action":"created","comment":{"url":"https://api.github.com/repos/angular/angular.js/pulls/comments/61551968","id":61551968,"diff_hunk":"@@ -1,108 +1,239 @@\n @ngdoc tutorial\n-@name 6 - Templating Links & Images\n+@name 6 - Two-way Data Binding\n @step 6\n @description\n \n <ul doc-tutorial-nav=\"6\"></ul>\n \n \n-In this step, you will add thumbnail images for the phones in the phone list, and links that, for\n-now, will go nowhere. In subsequent steps you will use the links to display additional information\n-about the phones in the catalog.\n+In this step, we will add a feature to let our users control the order of the items in the phone\n+list. The dynamic ordering is implemented by creating a new model property, wiring it together with\n+the repeater, and letting the data binding magic do the rest of the work.\n \n-* There are now links and images of the phones in the list.\n+* In addition to the search box, the application displays a drop-down menu that allows users to\n+  control the order in which the phones are listed.\n \n-<div doc-tutorial-reset=\"6\"></div>\n-\n-## Data\n-\n-Note that the `phones.json` file contains unique IDs and image URLs for each of the phones. The\n-URLs point to the `app/img/phones/` directory.\n-\n-__`app/phones/phones.json`__ (sample snippet):\n \n-```js\n-[\n-  {\n-    ...\n-    \"id\": \"motorola-defy-with-motoblur\",\n-    \"imageUrl\": \"img/phones/motorola-defy-with-motoblur.0.jpg\",\n-    \"name\": \"Motorola DEFY\\u2122 with MOTOBLUR\\u2122\",\n-    ...\n-  },\n-  ...\n-]\n-```\n+<div doc-tutorial-reset=\"6\"></div>\n \n \n ## Template\n \n-__`app/index.html`:__\n+<br />\n+**`app/phone-list/phone-list.template.html`:**\n \n ```html\n-...\n+  <div class=\"container-fluid\">\n+    <div class=\"row\">\n+      <div class=\"col-md-2\">\n+        <!--Sidebar content-->\n+\n+        <p>\n+          Search:\n+          <input ng-model=\"$ctrl.query\">\n+        </p>\n+\n+        <p>\n+          Sort by:\n+          <select ng-model=\"$ctrl.orderProp\">\n+            <option value=\"name\">Alphabetical</option>\n+            <option value=\"age\">Newest</option>\n+          </select>\n+        </p>\n+\n+      </div>\n+      <div class=\"col-md-10\">\n+        <!--Body content-->\n+\n         <ul class=\"phones\">\n-          <li ng-repeat=\"phone in phones | filter:query | orderBy:orderProp\" class=\"thumbnail\">\n-            <a href=\"#/phones/{{phone.id}}\" class=\"thumb\"><img ng-src=\"{{phone.imageUrl}}\" alt=\"{{phone.name}}\"></a>\n-            <a href=\"#/phones/{{phone.id}}\">{{phone.name}}</a>\n+          <li ng-repeat=\"phone in $ctrl.phones | filter:$ctrl.query | orderBy:$ctrl.orderProp\">\n+            <span>{{phone.name}}</span>\n             <p>{{phone.snippet}}</p>\n           </li>\n         </ul>\n-...\n+\n+      </div>\n+    </div>\n+  </div>\n ```\n \n-To dynamically generate links that will in the future lead to phone detail pages, we used the\n-now-familiar double-curly brace binding in the `href` attribute values. In step 2, we added the\n-`{{phone.name}}` binding as the element content. In this step the `{{phone.id}}` binding is used in\n-the element attribute.\n+We made the following changes to the `phone-list.template.html` template:\n+\n+* First, we added a `<select>` element bound to `$ctrl.orderProp`, so that our users can pick from\n+  the two provided sorting options.\n+\n+  <img class=\"diagram\" src=\"img/tutorial/tutorial_06.png\">\n \n-We also added phone images next to each record using an image tag with the {@link\n-ng.directive:ngSrc ngSrc} directive. That directive prevents the\n-browser from treating the Angular `{{ expression }}` markup literally, and initiating a request to\n-an invalid URL `http://localhost:8000/app/{{phone.imageUrl}}`, which it would have done if we had\n-only specified an attribute binding in a regular `src` attribute (`<img src=\"{{phone.imageUrl}}\">`).\n-Using the `ngSrc` directive prevents the browser from making an http request to an invalid location.\n+* We then chained the `filter` filter with the {@link ng.filter:orderBy orderBy} filter to further\n+  process the input for the repeater. `orderBy` is a filter that takes an input array, copies it and\n+  reorders the copy which is then returned.\n \n+  Angular creates a two way data-binding between the select element and the `$ctrl.orderProp` model.\n+  `$ctrl.orderProp` is then used as the input for the `orderBy` filter.\n \n-## Test\n+As we discussed in the section about data-binding and the repeater in {@link step_05 step 5},\n+whenever the model changes (for example because a user changes the order with the select drop-down\n+menu), Angular's data-binding will cause the view to automatically update. No bloated DOM\n+manipulation code is necessary!\n \n-__`test/e2e/scenarios.js`__:\n+\n+## Controller\n+\n+<br />\n+**`app/phone-list/phone-list.components.js`:**\n \n ```js\n-...\n-    it('should render phone specific links', function() {\n-      var query = element(by.model('query'));\n-      query.sendKeys('nexus');\n-      element.all(by.css('.phones li a')).first().click();\n-      browser.getLocationAbsUrl().then(function(url) {\n-        expect(url).toBe('/phones/nexus-s');\n-      });\n+  angular.\n+    module('phoneList').\n+    component('phoneList', {\n+      templateUrl: 'phone-list/phone-list.template.html',\n+      controller: function PhoneListController() {\n+        this.phones = [\n+          {\n+            name: 'Nexus S',\n+            snippet: 'Fast just got faster with Nexus S.',\n+            age: 1\n+          }, {\n+            name: 'Motorola XOOM™ with Wi-Fi',\n+            snippet: 'The Next, Next Generation tablet.',\n+            age: 2\n+          }, {\n+            name: 'MOTOROLA XOOM™',\n+            snippet: 'The Next, Next Generation tablet.',\n+            age: 3\n+          }\n+        ];\n+\n+        this.orderProp = 'age';\n+      }\n+    });\n+```\n+\n+* We modified the `phones` model - the array of phones - and added an `age` property to each phone\n+  record. This property is used to order the phones by age.\n+\n+* We added a line to the controller that sets the default value of `orderProp` to `age`. If we had\n+  not set a default value here, the `orderBy` filter would remain uninitialized until the user\n+  picked an option from the drop-down menu.\n+\n+This is a good time to talk about two-way data-binding. Notice that when the application is loaded\n+in the browser, \"Newest\" is selected in the drop-down menu. This is because we set `orderProp` to\n+`'age'` in the controller. So the binding works in the direction from our model to the UI. Now if\n+you select \"Alphabetically\" in the drop-down menu, the model will be updated as well and the phones\n+will be reordered. That is the data-binding doing its job in the opposite direction — from the UI to\n+the model.\n+\n+\n+# Testing\n+\n+The changes we made should be verified with both a unit test and an E2E test. Let's look at the unit\n+test first.\n+\n+<br />\n+**`app/phone-list/phone-list.component.spec.js`:**\n+\n+```js\n+describe('phoneList', function() {\n+\n+  // Load the module that contains the `phoneList` component before each test\n+  beforeEach(module('phoneList'));\n+\n+  // Test the controller\n+  describe('PhoneListController', function() {\n+    var ctrl;\n+\n+    beforeEach(inject(function($componentController) {\n+      ctrl = $componentController('phoneList', {$scope: {}});\n+    }));\n+\n+    it('should create a `phones` model with 3 phones', function() {\n+      expect(ctrl.phones.length).toBe(3);\n+    });\n+\n+    it('should set a default value for the `orderProp` model', function() {\n+      expect(ctrl.orderProp).toBe('age');\n     });\n-...\n+\n+  });\n+\n+});\n+```\n+\n+The unit test now verifies that the default ordering property is set.\n+\n+We used Jasmine's API to extract the controller construction into a `beforeEach` block, which is\n+shared by all tests in the parent `describe` block.\n+\n+You should now see the following output in the Karma tab:\n+\n+```\n+Chrome 49.0: Executed 2 of 2 SUCCESS (0.136 secs / 0.08 secs)\n+```\n+\n+Let's turn our attention to the E2E tests.\n+\n+<br />\n+**`e2e-tests/scenarios.js`:**\n+\n+```js\n+  describe('PhoneCat Application', function() {\n+\n+    describe('phoneList', function() {\n+\n+      ...\n+\n+      it('should be possible to control phone order via the drop-down menu', function() {\n+        var phoneNameColumn = element.all(by.repeater('phone in $ctrl.phones').column('phone.name'));\n+        var query = element(by.model('$ctrl.query'));\n+\n+        function getNames() {\n+          return phoneNameColumn.map(function(elem) {\n+            return elem.getText();\n+          });\n+        }\n+\n+        query.sendKeys('tablet'); // Let's narrow the dataset to make the test assertions shorter\n+\n+        expect(getNames()).toEqual([\n+          'Motorola XOOM\\u2122 with Wi-Fi',\n+          'MOTOROLA XOOM\\u2122'\n+        ]);\n+\n+        element(by.model('$ctrl.orderProp')).element(by.css('option[value=\"name\"]')).click();","path":"docs/content/tutorial/step_06.ngdoc","position":254,"original_position":254,"commit_id":"0234f66cdb8703393ab24bffc49a467b48e912e7","original_commit_id":"0234f66cdb8703393ab24bffc49a467b48e912e7","user":{"login":"gkalpak","id":8604205,"avatar_url":"https://avatars.githubusercontent.com/u/8604205?v=3","gravatar_id":"","url":"https://api.github.com/users/gkalpak","html_url":"https://github.com/gkalpak","followers_url":"https://api.github.com/users/gkalpak/followers","following_url":"https://api.github.com/users/gkalpak/following{/other_user}","gists_url":"https://api.github.com/users/gkalpak/gists{/gist_id}","starred_url":"https://api.github.com/users/gkalpak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gkalpak/subscriptions","organizations_url":"https://api.github.com/users/gkalpak/orgs","repos_url":"https://api.github.com/users/gkalpak/repos","events_url":"https://api.github.com/users/gkalpak/events{/privacy}","received_events_url":"https://api.github.com/users/gkalpak/received_events","type":"User","site_admin":false},"body":"Done","created_at":"2016-04-29T09:16:41Z","updated_at":"2016-04-29T09:16:41Z","html_url":"https://github.com/angular/angular.js/pull/14416#discussion_r61551968","pull_request_url":"https://api.github.com/repos/angular/angular.js/pulls/14416","_links":{"self":{"href":"https://api.github.com/repos/angular/angular.js/pulls/comments/61551968"},"html":{"href":"https://github.com/angular/angular.js/pull/14416#discussion_r61551968"},"pull_request":{"href":"https://api.github.com/repos/angular/angular.js/pulls/14416"}}},"pull_request":{"url":"https://api.github.com/repos/angular/angular.js/pulls/14416","id":66133995,"html_url":"https://github.com/angular/angular.js/pull/14416","diff_url":"https://github.com/angular/angular.js/pull/14416.diff","patch_url":"https://github.com/angular/angular.js/pull/14416.patch","issue_url":"https://api.github.com/repos/angular/angular.js/issues/14416","number":14416,"state":"open","locked":false,"title":"WIP - docs(tutorial): update to use `v1.5.x` and best practices","user":{"login":"gkalpak","id":8604205,"avatar_url":"https://avatars.githubusercontent.com/u/8604205?v=3","gravatar_id":"","url":"https://api.github.com/users/gkalpak","html_url":"https://github.com/gkalpak","followers_url":"https://api.github.com/users/gkalpak/followers","following_url":"https://api.github.com/users/gkalpak/following{/other_user}","gists_url":"https://api.github.com/users/gkalpak/gists{/gist_id}","starred_url":"https://api.github.com/users/gkalpak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gkalpak/subscriptions","organizations_url":"https://api.github.com/users/gkalpak/orgs","repos_url":"https://api.github.com/users/gkalpak/repos","events_url":"https://api.github.com/users/gkalpak/events{/privacy}","received_events_url":"https://api.github.com/users/gkalpak/received_events","type":"User","site_admin":false},"body":"This is a major re-structuring of the tutorial app's codebase, aiming at applying established best practices (in terms of file naming/layout and code organization) and utilizing several new features and enhancements (most notably components) introduced in recent versions of Angular (especially v1.5).\r\n\r\nApart from the overall changes, two new chapters were introduced: one on components and one on code organization.\r\n\r\n--\r\nIn the process, several other things were (incidentally) taken care of, including:\r\n\r\n* Dependencies were upgraded to latest versions.\r\n* Animations were polished.\r\n* Outdated links were updated.\r\n* The app's base URL was changed to `/` (instead of `/app/`).\r\n\r\nBTW, this has been tested with the following versions of Node (on Windows 10) and everything worked fine:\r\n\r\n* 0.11.16\r\n* 4.2.6\r\n* 4.4.2\r\n* 5.10.0\r\n\r\n--\r\nThis was inspired by (and loosely based on) #13834.\r\nAgain, mad props to @teropa for leading the way :)\r\n\r\n--\r\n**Note:**\r\nThe old version of the tutorial, that is compatible with Angular version 1.4 or older, has been saved on the `pre-v1.5.0-snapshot` branch of [angular-phonecat](https://github.com/angular/angular-phonecat). The `v1.4.x` version of the tutorial should be pointed to that branch instead of `master`.\r\n\r\n--\r\nRelated to angular/angular-phonecat#326.\r\nRelated to angular/angular-seed#329.\r\nRelated to angular/angular-seed#333.\r\n\r\n---\r\nFixes #12755\r\nFixes #13312\r\nFixes #13623\r\nFixes #13632\r\n\r\nCloses #8952\r\nCloses #11726\r\nCloses #12946\r\nCloses #12947\r\nCloses #13198\r\nCloses #13284\r\nCloses #13834\r\nCloses #14178\r\nCloses #14223","created_at":"2016-04-12T10:27:26Z","updated_at":"2016-04-29T09:16:41Z","closed_at":null,"merged_at":null,"merge_commit_sha":"37865c6d426b33bbf61358cbeda21cde6521d523","assignee":{"login":"petebacondarwin","id":15655,"avatar_url":"https://avatars.githubusercontent.com/u/15655?v=3","gravatar_id":"","url":"https://api.github.com/users/petebacondarwin","html_url":"https://github.com/petebacondarwin","followers_url":"https://api.github.com/users/petebacondarwin/followers","following_url":"https://api.github.com/users/petebacondarwin/following{/other_user}","gists_url":"https://api.github.com/users/petebacondarwin/gists{/gist_id}","starred_url":"https://api.github.com/users/petebacondarwin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/petebacondarwin/subscriptions","organizations_url":"https://api.github.com/users/petebacondarwin/orgs","repos_url":"https://api.github.com/users/petebacondarwin/repos","events_url":"https://api.github.com/users/petebacondarwin/events{/privacy}","received_events_url":"https://api.github.com/users/petebacondarwin/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/angular/angular.js/milestones/115","html_url":"https://github.com/angular/angular.js/milestones/Phonecat%20Tutorial%20Overhaul","labels_url":"https://api.github.com/repos/angular/angular.js/milestones/115/labels","id":1542152,"number":115,"title":"Phonecat Tutorial Overhaul","description":"","creator":{"login":"petebacondarwin","id":15655,"avatar_url":"https://avatars.githubusercontent.com/u/15655?v=3","gravatar_id":"","url":"https://api.github.com/users/petebacondarwin","html_url":"https://github.com/petebacondarwin","followers_url":"https://api.github.com/users/petebacondarwin/followers","following_url":"https://api.github.com/users/petebacondarwin/following{/other_user}","gists_url":"https://api.github.com/users/petebacondarwin/gists{/gist_id}","starred_url":"https://api.github.com/users/petebacondarwin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/petebacondarwin/subscriptions","organizations_url":"https://api.github.com/users/petebacondarwin/orgs","repos_url":"https://api.github.com/users/petebacondarwin/repos","events_url":"https://api.github.com/users/petebacondarwin/events{/privacy}","received_events_url":"https://api.github.com/users/petebacondarwin/received_events","type":"User","site_admin":false},"open_issues":15,"closed_issues":3,"state":"open","created_at":"2016-01-25T16:56:20Z","updated_at":"2016-04-12T10:28:32Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/angular/angular.js/pulls/14416/commits","review_comments_url":"https://api.github.com/repos/angular/angular.js/pulls/14416/comments","review_comment_url":"https://api.github.com/repos/angular/angular.js/pulls/comments{/number}","comments_url":"https://api.github.com/repos/angular/angular.js/issues/14416/comments","statuses_url":"https://api.github.com/repos/angular/angular.js/statuses/0234f66cdb8703393ab24bffc49a467b48e912e7","head":{"label":"gkalpak:docs-tutorial-post-v1.5.0","ref":"docs-tutorial-post-v1.5.0","sha":"0234f66cdb8703393ab24bffc49a467b48e912e7","user":{"login":"gkalpak","id":8604205,"avatar_url":"https://avatars.githubusercontent.com/u/8604205?v=3","gravatar_id":"","url":"https://api.github.com/users/gkalpak","html_url":"https://github.com/gkalpak","followers_url":"https://api.github.com/users/gkalpak/followers","following_url":"https://api.github.com/users/gkalpak/following{/other_user}","gists_url":"https://api.github.com/users/gkalpak/gists{/gist_id}","starred_url":"https://api.github.com/users/gkalpak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gkalpak/subscriptions","organizations_url":"https://api.github.com/users/gkalpak/orgs","repos_url":"https://api.github.com/users/gkalpak/repos","events_url":"https://api.github.com/users/gkalpak/events{/privacy}","received_events_url":"https://api.github.com/users/gkalpak/received_events","type":"User","site_admin":false},"repo":{"id":23513120,"name":"angular.js","full_name":"gkalpak/angular.js","owner":{"login":"gkalpak","id":8604205,"avatar_url":"https://avatars.githubusercontent.com/u/8604205?v=3","gravatar_id":"","url":"https://api.github.com/users/gkalpak","html_url":"https://github.com/gkalpak","followers_url":"https://api.github.com/users/gkalpak/followers","following_url":"https://api.github.com/users/gkalpak/following{/other_user}","gists_url":"https://api.github.com/users/gkalpak/gists{/gist_id}","starred_url":"https://api.github.com/users/gkalpak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gkalpak/subscriptions","organizations_url":"https://api.github.com/users/gkalpak/orgs","repos_url":"https://api.github.com/users/gkalpak/repos","events_url":"https://api.github.com/users/gkalpak/events{/privacy}","received_events_url":"https://api.github.com/users/gkalpak/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gkalpak/angular.js","description":"HTML enhanced for web apps","fork":true,"url":"https://api.github.com/repos/gkalpak/angular.js","forks_url":"https://api.github.com/repos/gkalpak/angular.js/forks","keys_url":"https://api.github.com/repos/gkalpak/angular.js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gkalpak/angular.js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gkalpak/angular.js/teams","hooks_url":"https://api.github.com/repos/gkalpak/angular.js/hooks","issue_events_url":"https://api.github.com/repos/gkalpak/angular.js/issues/events{/number}","events_url":"https://api.github.com/repos/gkalpak/angular.js/events","assignees_url":"https://api.github.com/repos/gkalpak/angular.js/assignees{/user}","branches_url":"https://api.github.com/repos/gkalpak/angular.js/branches{/branch}","tags_url":"https://api.github.com/repos/gkalpak/angular.js/tags","blobs_url":"https://api.github.com/repos/gkalpak/angular.js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gkalpak/angular.js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gkalpak/angular.js/git/refs{/sha}","trees_url":"https://api.github.com/repos/gkalpak/angular.js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gkalpak/angular.js/statuses/{sha}","languages_url":"https://api.github.com/repos/gkalpak/angular.js/languages","stargazers_url":"https://api.github.com/repos/gkalpak/angular.js/stargazers","contributors_url":"https://api.github.com/repos/gkalpak/angular.js/contributors","subscribers_url":"https://api.github.com/repos/gkalpak/angular.js/subscribers","subscription_url":"https://api.github.com/repos/gkalpak/angular.js/subscription","commits_url":"https://api.github.com/repos/gkalpak/angular.js/commits{/sha}","git_commits_url":"https://api.github.com/repos/gkalpak/angular.js/git/commits{/sha}","comments_url":"https://api.github.com/repos/gkalpak/angular.js/comments{/number}","issue_comment_url":"https://api.github.com/repos/gkalpak/angular.js/issues/comments{/number}","contents_url":"https://api.github.com/repos/gkalpak/angular.js/contents/{+path}","compare_url":"https://api.github.com/repos/gkalpak/angular.js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gkalpak/angular.js/merges","archive_url":"https://api.github.com/repos/gkalpak/angular.js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gkalpak/angular.js/downloads","issues_url":"https://api.github.com/repos/gkalpak/angular.js/issues{/number}","pulls_url":"https://api.github.com/repos/gkalpak/angular.js/pulls{/number}","milestones_url":"https://api.github.com/repos/gkalpak/angular.js/milestones{/number}","notifications_url":"https://api.github.com/repos/gkalpak/angular.js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gkalpak/angular.js/labels{/name}","releases_url":"https://api.github.com/repos/gkalpak/angular.js/releases{/id}","deployments_url":"https://api.github.com/repos/gkalpak/angular.js/deployments","created_at":"2014-08-31T12:31:10Z","updated_at":"2016-01-11T10:14:26Z","pushed_at":"2016-04-28T17:43:42Z","git_url":"git://github.com/gkalpak/angular.js.git","ssh_url":"git@github.com:gkalpak/angular.js.git","clone_url":"https://github.com/gkalpak/angular.js.git","svn_url":"https://github.com/gkalpak/angular.js","homepage":"http://angularjs.org","size":75640,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":1,"default_branch":"master"}},"base":{"label":"angular:master","ref":"master","sha":"761c70c7b9585d3dc61ae9cab338df2558b9a1ac","user":{"login":"angular","id":139426,"avatar_url":"https://avatars.githubusercontent.com/u/139426?v=3","gravatar_id":"","url":"https://api.github.com/users/angular","html_url":"https://github.com/angular","followers_url":"https://api.github.com/users/angular/followers","following_url":"https://api.github.com/users/angular/following{/other_user}","gists_url":"https://api.github.com/users/angular/gists{/gist_id}","starred_url":"https://api.github.com/users/angular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/angular/subscriptions","organizations_url":"https://api.github.com/users/angular/orgs","repos_url":"https://api.github.com/users/angular/repos","events_url":"https://api.github.com/users/angular/events{/privacy}","received_events_url":"https://api.github.com/users/angular/received_events","type":"Organization","site_admin":false},"repo":{"id":460078,"name":"angular.js","full_name":"angular/angular.js","owner":{"login":"angular","id":139426,"avatar_url":"https://avatars.githubusercontent.com/u/139426?v=3","gravatar_id":"","url":"https://api.github.com/users/angular","html_url":"https://github.com/angular","followers_url":"https://api.github.com/users/angular/followers","following_url":"https://api.github.com/users/angular/following{/other_user}","gists_url":"https://api.github.com/users/angular/gists{/gist_id}","starred_url":"https://api.github.com/users/angular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/angular/subscriptions","organizations_url":"https://api.github.com/users/angular/orgs","repos_url":"https://api.github.com/users/angular/repos","events_url":"https://api.github.com/users/angular/events{/privacy}","received_events_url":"https://api.github.com/users/angular/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/angular/angular.js","description":"HTML enhanced for web apps","fork":false,"url":"https://api.github.com/repos/angular/angular.js","forks_url":"https://api.github.com/repos/angular/angular.js/forks","keys_url":"https://api.github.com/repos/angular/angular.js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/angular/angular.js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/angular/angular.js/teams","hooks_url":"https://api.github.com/repos/angular/angular.js/hooks","issue_events_url":"https://api.github.com/repos/angular/angular.js/issues/events{/number}","events_url":"https://api.github.com/repos/angular/angular.js/events","assignees_url":"https://api.github.com/repos/angular/angular.js/assignees{/user}","branches_url":"https://api.github.com/repos/angular/angular.js/branches{/branch}","tags_url":"https://api.github.com/repos/angular/angular.js/tags","blobs_url":"https://api.github.com/repos/angular/angular.js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/angular/angular.js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/angular/angular.js/git/refs{/sha}","trees_url":"https://api.github.com/repos/angular/angular.js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/angular/angular.js/statuses/{sha}","languages_url":"https://api.github.com/repos/angular/angular.js/languages","stargazers_url":"https://api.github.com/repos/angular/angular.js/stargazers","contributors_url":"https://api.github.com/repos/angular/angular.js/contributors","subscribers_url":"https://api.github.com/repos/angular/angular.js/subscribers","subscription_url":"https://api.github.com/repos/angular/angular.js/subscription","commits_url":"https://api.github.com/repos/angular/angular.js/commits{/sha}","git_commits_url":"https://api.github.com/repos/angular/angular.js/git/commits{/sha}","comments_url":"https://api.github.com/repos/angular/angular.js/comments{/number}","issue_comment_url":"https://api.github.com/repos/angular/angular.js/issues/comments{/number}","contents_url":"https://api.github.com/repos/angular/angular.js/contents/{+path}","compare_url":"https://api.github.com/repos/angular/angular.js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/angular/angular.js/merges","archive_url":"https://api.github.com/repos/angular/angular.js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/angular/angular.js/downloads","issues_url":"https://api.github.com/repos/angular/angular.js/issues{/number}","pulls_url":"https://api.github.com/repos/angular/angular.js/pulls{/number}","milestones_url":"https://api.github.com/repos/angular/angular.js/milestones{/number}","notifications_url":"https://api.github.com/repos/angular/angular.js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/angular/angular.js/labels{/name}","releases_url":"https://api.github.com/repos/angular/angular.js/releases{/id}","deployments_url":"https://api.github.com/repos/angular/angular.js/deployments","created_at":"2010-01-06T00:34:37Z","updated_at":"2016-04-29T08:46:16Z","pushed_at":"2016-04-29T07:56:18Z","git_url":"git://github.com/angular/angular.js.git","ssh_url":"git@github.com:angular/angular.js.git","clone_url":"https://github.com/angular/angular.js.git","svn_url":"https://github.com/angular/angular.js","homepage":"http://angularjs.org","size":177191,"stargazers_count":48874,"watchers_count":48874,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":23356,"mirror_url":null,"open_issues_count":1133,"forks":23356,"open_issues":1133,"watchers":48874,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/angular/angular.js/pulls/14416"},"html":{"href":"https://github.com/angular/angular.js/pull/14416"},"issue":{"href":"https://api.github.com/repos/angular/angular.js/issues/14416"},"comments":{"href":"https://api.github.com/repos/angular/angular.js/issues/14416/comments"},"review_comments":{"href":"https://api.github.com/repos/angular/angular.js/pulls/14416/comments"},"review_comment":{"href":"https://api.github.com/repos/angular/angular.js/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/angular/angular.js/pulls/14416/commits"},"statuses":{"href":"https://api.github.com/repos/angular/angular.js/statuses/0234f66cdb8703393ab24bffc49a467b48e912e7"}}}}