{"action":"created","comment":{"url":"https://api.github.com/repos/angular/angular.js/pulls/comments/28641945","id":28641945,"diff_hunk":"@@ -13,6 +13,301 @@ which drives many of these changes.\n * Several new features, especially animations, would not be possible without a few changes.\n * Finally, some outstanding bugs were best fixed by changing an existing API.\n \n+# Migrating from 1.3 to 1.4\n+\n+Angular 1.4 fixes the major animation issues and introduces some breaking changes for `cookies`, `ngMessages`,\n+`$compile`, `ngRepeat`, `ngOptions `and some fixes to core filters: `limitTo` and `filter`.\n+\n+The reason for the ngAnimate refactor was to fix timing issues and to expose new APIs to allow\n+for developers to construct more versatile animations.  We now have access to `$animateCss`\n+and the many timing-oriented bugs were fixed which resulted in more smoother animations.\n+If animation is something of interest, then please read over the breaking changes below for animations when\n+`ngAnimate` is used.\n+\n+ngMessages has also been upgraded to allow for dynamic message resolution. This handy feature allows for developers\n+to render error messages with ngMessages that are listed with a directive such as ngRepeat. A great usecase for this\n+involves pulling error message data from a server and then displaying that data via the mechanics of ngMessages. Be\n+sure to read the breaking change involved with `ngMessagesInclude` to upgrade your template code.\n+\n+Other changes, such as the ordering of elements with ngRepeat and ngOptions, may also effect the behavior of your\n+application. And be sure to also read up on the changes to `$cookies`. The migration jump from 1.3 to 1.4 should be\n+relatively straightforward otherwise.\n+\n+\n+\n+\n+## Animation (`ngAnimate`)\n+\n+Animation in 1.4 have been refactored internally and the API has stayed much the same. There are, however,\n+some breaking changes that need to be addressed when any Angular animation code is upgraded to work in 1.4.\n+\n+Due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef),\n+JavaSript and CSS animations can no longer be run in\n+parallel. With earlier versions of ngAnimate, both CSS and JS animations\n+would be run together when multiple animations were detected. This\n+feature has now been removed, however, the same effect, with even more\n+possibilities, can be achieved by injecting `$animateCss` into a\n+JavaScript-defined animation and creating custom CSS-based animations\n+from there.\n+\n+By using `$animateCss` inside of a JavaScript animation in Angular 1.4, we can trigger custom CSS-based animations\n+directly from our JavaScript code.\n+\n+```js\n+ngModule.animation('.slide-animation', ['$animateCss', function($animateCss) {\n+  return {\n+    enter: function(element, doneFn) {\n+      // this will trigger a `.ng-enter` and `.ng-enter-active` CSS animation\n+      var animation = $animateCss(element, {\n+        event: 'enter'\n+        // any other CSS-related properties\n+        //   addClass: 'some-class',\n+        //   removeClass: 'some-other-class',\n+        //   from: {},\n+        //   to: {}\n+      });\n+\n+      // make sure to read the ngAnimate docs to understand how this works\n+      animation.start().done(doneFn);\n+    }\n+  }\n+}]);\n+```\n+\n+{@link ngAnimate.$animateCss Click here to learn how to use $animateCss in your animation code}\n+\n+Due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef),\n+animation-related callbacks are now fired on `$animate.on` instead of directly being on the element.\n+\n+```js\n+// < 1.4\n+element.on('$animate:before', function(e, data) {\n+  if (data.event === 'enter') { ... }\n+});\n+element.off('$animate:before', fn);\n+\n+// 1.4+\n+$animate.on(element, 'enter', function(data) {\n+  //...\n+});\n+$animate.off(element, 'enter', fn);\n+```\n+\n+Due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef),\n+the function params for `$animate.enabled()` when an element is used are now flipped. This fix allows\n+the function to act as a getter when a single element param is provided.\n+\n+```js\n+// < 1.4\n+$animate.enabled(false, element);\n+\n+// 1.4+\n+$animate.enabled(element, false);\n+```\n+\n+Due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef),\n+in addition to disabling the children of the element, `$animate.enabled(element, false)` will now also\n+disable animations on the element itself.\n+\n+Due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef),\n+there is no need to call `$scope.$apply` or `$scope.$digest` inside of a animation promise callback anymore\n+since the promise is resolved within a digest automatically. (Not to worry, any extra digests will not be\n+run unless the promise is used.)\n+\n+```js\n+// < 1.4\n+$animate.enter(element).then(function() {\n+  $scope.$apply(function() {\n+    $scope.explode = true;\n+  });\n+});\n+\n+// 1.4+\n+$animate.enter(element).then(function() {\n+  $scope.explode = true;\n+});\n+```\n+\n+Due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef),\n+when an enter, leave or move animation is triggered then it will always end any pending or active parent\n+class based animations (animations triggered via ngClass) in order to ensure that any CSS styles are resolved in time.\n+\n+\n+\n+\n+## Forms (`ngMessages`, `ngOptions`)\n+\n+### ngMessages\n+The ngMessages module has also been subject to an internal refactor to allow the featire to be more flexible\n+and compatible with dynamic message data. The ngMessage directive now supports a new attribute called `ng-message-exp`\n+which will evaluate an expression and will keep track of that expression as it changes in order to re-evaluate\n+the listed messages.\n+\n+There is only one breaking change. Please consider the following when including remote message templates via `ng-messages-include`:\n+\n+Due to [c9a4421f](https://github.com/angular/angular.js/commit/c9a4421fc3c97448527eadef1f42eb2f487ec2e0),\n+the `ngMessagesInclude` attribute has now been removed and cannot be used in the same element containing\n+the `ngMessages` directive. Instead, `ngMessagesInclude` is to be used on its own element inline with\n+other inline messages situated as children within the `ngMessages` container directive.\n+\n+```html\n+<!-- AngularJS 1.3.x -->\n+<div ng-messages=\"model.$error\" ng-messages-include=\"remote.html\">\n+  <div ng-message=\"required\">Your message is required</div>\n+</div>\n+\n+<!-- AngularJS 1.4.x -->\n+<div ng-messages=\"model.$error\">\n+  <div ng-message=\"required\">Your message is required</div>\n+  <div ng-messages-include=\"remote.html\"></div>\n+</div>\n+```\n+\n+Depending on where the `ngMessagesInclude` directive is placed it will be prioritized inline with the other messages\n+before and after it.\n+\n+### ngOptions\n+\n+Due to [7fda214c](https://github.com/angular/angular.js/commit/7fda214c4f65a6a06b25cf5d5aff013a364e9cef),\n+when `ngOptions` renders the option values within the DOM, the resulting HTML code is different. Normally this\n+should effect your application at all, however, if your code relies on inspecing the value property of `<option>`\n+elements (that `ngOptions` generates) then be sure to read the details\n+[here](https://github.com/angular/angular.js/commit/7fda214c4f65a6a06b25cf5d5aff013a364e9cef).\n+\n+Due to [7fda214c](https://github.com/angular/angular.js/commit/7fda214c4f65a6a06b25cf5d5aff013a364e9cef),\n+when iterating over an object's properties using the `(key, value) in obj` syntax\n+the order of the elements used to be sorted alphabetically. This was an artificial\n+attempt to create a deterministic ordering since browsers don't guarantee the order.\n+But in practice this is not what people want and so this change iterates over properties\n+in the order they are returned by Object.keys(obj), which is almost always the order\n+in which the properties were defined.\n+\n+\n+\n+\n+## Templating (`ngRepeat`, `$compile`)\n+\n+### ngRepeat\n+\n+Due to [c260e738](https://github.com/angular/angular.js/commit/c260e7386391877625eda086480de73e8a0ba921),\n+previously, the order of items when using ngRepeat to iterate over object properties was guaranteed to be consistent\n+by sorting the keys into alphabetic order.\n+\n+Now, the order of the items is browser dependent based on the order returned\n+from iterating over the object using the `for key in obj` syntax.\n+\n+It seems that browsers generally follow the strategy of providing\n+keys in the order in which they were defined, although there are exceptions\n+when keys are deleted and reinstated. See\n+https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete#Cross-browser_issues\n+\n+The best approach is to convert Objects into Arrays by a filter such as\n+https://github.com/petebacondarwin/angular-toArrayFilter\n+or some other mechanism, and then sort them manually in the order you need.\n+\n+\n+### $compile\n+\n+Due to [6a38dbfd](https://github.com/angular/angular.js/commit/6a38dbfd3c34c8f9efff503d17eb3cbeb666d422),\n+previously, '&' expressions would always set up a function in the isolate scope. Now, if the binding\n+is marked as optional and the attribute is not specified, no function will be added to the isolate scope.\n+","path":"docs/content/guide/migration.ngdoc","position":202,"original_position":202,"commit_id":"bb5a17b5131563fd6431754165b6af3557e5fcbe","original_commit_id":"bb5a17b5131563fd6431754165b6af3557e5fcbe","user":{"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},"body":"I can.","created_at":"2015-04-18T06:38:27Z","updated_at":"2015-04-18T06:38:27Z","html_url":"https://github.com/angular/angular.js/pull/11584#discussion_r28641945","pull_request_url":"https://api.github.com/repos/angular/angular.js/pulls/11584","_links":{"self":{"href":"https://api.github.com/repos/angular/angular.js/pulls/comments/28641945"},"html":{"href":"https://github.com/angular/angular.js/pull/11584#discussion_r28641945"},"pull_request":{"href":"https://api.github.com/repos/angular/angular.js/pulls/11584"}}},"pull_request":{"url":"https://api.github.com/repos/angular/angular.js/pulls/11584","id":33286816,"html_url":"https://github.com/angular/angular.js/pull/11584","diff_url":"https://github.com/angular/angular.js/pull/11584.diff","patch_url":"https://github.com/angular/angular.js/pull/11584.patch","issue_url":"https://api.github.com/repos/angular/angular.js/issues/11584","number":11584,"state":"closed","locked":false,"title":"docs(MIGRATION): add notes for the migration from 1.3 to 1.4","user":{"login":"matsko","id":93018,"avatar_url":"https://avatars.githubusercontent.com/u/93018?v=3","gravatar_id":"","url":"https://api.github.com/users/matsko","html_url":"https://github.com/matsko","followers_url":"https://api.github.com/users/matsko/followers","following_url":"https://api.github.com/users/matsko/following{/other_user}","gists_url":"https://api.github.com/users/matsko/gists{/gist_id}","starred_url":"https://api.github.com/users/matsko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matsko/subscriptions","organizations_url":"https://api.github.com/users/matsko/orgs","repos_url":"https://api.github.com/users/matsko/repos","events_url":"https://api.github.com/users/matsko/events{/privacy}","received_events_url":"https://api.github.com/users/matsko/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-04-14T18:40:06Z","updated_at":"2015-04-18T06:38:28Z","closed_at":"2015-04-17T21:51:33Z","merged_at":null,"merge_commit_sha":"de20b73f01d576a8091566a164bbdc3363a8e49a","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":null,"commits_url":"https://api.github.com/repos/angular/angular.js/pulls/11584/commits","review_comments_url":"https://api.github.com/repos/angular/angular.js/pulls/11584/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/11584/comments","statuses_url":"https://api.github.com/repos/angular/angular.js/statuses/bb5a17b5131563fd6431754165b6af3557e5fcbe","head":{"label":"matsko:1_4_migration_guide","ref":"1_4_migration_guide","sha":"bb5a17b5131563fd6431754165b6af3557e5fcbe","user":{"login":"matsko","id":93018,"avatar_url":"https://avatars.githubusercontent.com/u/93018?v=3","gravatar_id":"","url":"https://api.github.com/users/matsko","html_url":"https://github.com/matsko","followers_url":"https://api.github.com/users/matsko/followers","following_url":"https://api.github.com/users/matsko/following{/other_user}","gists_url":"https://api.github.com/users/matsko/gists{/gist_id}","starred_url":"https://api.github.com/users/matsko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matsko/subscriptions","organizations_url":"https://api.github.com/users/matsko/orgs","repos_url":"https://api.github.com/users/matsko/repos","events_url":"https://api.github.com/users/matsko/events{/privacy}","received_events_url":"https://api.github.com/users/matsko/received_events","type":"User","site_admin":false},"repo":{"id":8178278,"name":"angular.js","full_name":"matsko/angular.js","owner":{"login":"matsko","id":93018,"avatar_url":"https://avatars.githubusercontent.com/u/93018?v=3","gravatar_id":"","url":"https://api.github.com/users/matsko","html_url":"https://github.com/matsko","followers_url":"https://api.github.com/users/matsko/followers","following_url":"https://api.github.com/users/matsko/following{/other_user}","gists_url":"https://api.github.com/users/matsko/gists{/gist_id}","starred_url":"https://api.github.com/users/matsko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matsko/subscriptions","organizations_url":"https://api.github.com/users/matsko/orgs","repos_url":"https://api.github.com/users/matsko/repos","events_url":"https://api.github.com/users/matsko/events{/privacy}","received_events_url":"https://api.github.com/users/matsko/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/matsko/angular.js","description":"","fork":true,"url":"https://api.github.com/repos/matsko/angular.js","forks_url":"https://api.github.com/repos/matsko/angular.js/forks","keys_url":"https://api.github.com/repos/matsko/angular.js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/matsko/angular.js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/matsko/angular.js/teams","hooks_url":"https://api.github.com/repos/matsko/angular.js/hooks","issue_events_url":"https://api.github.com/repos/matsko/angular.js/issues/events{/number}","events_url":"https://api.github.com/repos/matsko/angular.js/events","assignees_url":"https://api.github.com/repos/matsko/angular.js/assignees{/user}","branches_url":"https://api.github.com/repos/matsko/angular.js/branches{/branch}","tags_url":"https://api.github.com/repos/matsko/angular.js/tags","blobs_url":"https://api.github.com/repos/matsko/angular.js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/matsko/angular.js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/matsko/angular.js/git/refs{/sha}","trees_url":"https://api.github.com/repos/matsko/angular.js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/matsko/angular.js/statuses/{sha}","languages_url":"https://api.github.com/repos/matsko/angular.js/languages","stargazers_url":"https://api.github.com/repos/matsko/angular.js/stargazers","contributors_url":"https://api.github.com/repos/matsko/angular.js/contributors","subscribers_url":"https://api.github.com/repos/matsko/angular.js/subscribers","subscription_url":"https://api.github.com/repos/matsko/angular.js/subscription","commits_url":"https://api.github.com/repos/matsko/angular.js/commits{/sha}","git_commits_url":"https://api.github.com/repos/matsko/angular.js/git/commits{/sha}","comments_url":"https://api.github.com/repos/matsko/angular.js/comments{/number}","issue_comment_url":"https://api.github.com/repos/matsko/angular.js/issues/comments{/number}","contents_url":"https://api.github.com/repos/matsko/angular.js/contents/{+path}","compare_url":"https://api.github.com/repos/matsko/angular.js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/matsko/angular.js/merges","archive_url":"https://api.github.com/repos/matsko/angular.js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/matsko/angular.js/downloads","issues_url":"https://api.github.com/repos/matsko/angular.js/issues{/number}","pulls_url":"https://api.github.com/repos/matsko/angular.js/pulls{/number}","milestones_url":"https://api.github.com/repos/matsko/angular.js/milestones{/number}","notifications_url":"https://api.github.com/repos/matsko/angular.js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/matsko/angular.js/labels{/name}","releases_url":"https://api.github.com/repos/matsko/angular.js/releases{/id}","created_at":"2013-02-13T11:54:29Z","updated_at":"2015-04-10T17:45:17Z","pushed_at":"2015-04-17T21:56:52Z","git_url":"git://github.com/matsko/angular.js.git","ssh_url":"git@github.com:matsko/angular.js.git","clone_url":"https://github.com/matsko/angular.js.git","svn_url":"https://github.com/matsko/angular.js","homepage":"http://angularjs.org","size":67163,"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":"angular:master","ref":"master","sha":"6dd64ab5f34fa19db8f90e6eabc810843089ba14","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}","created_at":"2010-01-06T00:34:37Z","updated_at":"2015-04-18T06:20:15Z","pushed_at":"2015-04-17T23:17:09Z","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":233359,"stargazers_count":37570,"watchers_count":37570,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15656,"mirror_url":null,"open_issues_count":1195,"forks":15656,"open_issues":1195,"watchers":37570,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/angular/angular.js/pulls/11584"},"html":{"href":"https://github.com/angular/angular.js/pull/11584"},"issue":{"href":"https://api.github.com/repos/angular/angular.js/issues/11584"},"comments":{"href":"https://api.github.com/repos/angular/angular.js/issues/11584/comments"},"review_comments":{"href":"https://api.github.com/repos/angular/angular.js/pulls/11584/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/11584/commits"},"statuses":{"href":"https://api.github.com/repos/angular/angular.js/statuses/bb5a17b5131563fd6431754165b6af3557e5fcbe"}}}}