{"action":"created","comment":{"url":"https://api.github.com/repos/google/blockly-games/pulls/comments/82087507","pull_request_review_id":3019385,"id":82087507,"diff_hunk":"@@ -0,0 +1,417 @@\n+/**\n+ * Blockly Games: Genetics\n+ *\n+ * Copyright 2016 Google Inc.\n+ * https://github.com/google/blockly-games\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *   http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+/**\n+ * @fileoverview JavaScript for mice avatars in the visualization of the game.\n+ * @author kozbial@google.com (Monica Kozbial)\n+ */\n+'use strict';\n+\n+goog.provide('Genetics.MouseAvatar');\n+\n+goog.require('Genetics.Mouse');\n+goog.require('goog.dom');\n+goog.require('goog.math');\n+goog.require('goog.object');\n+\n+\n+/**\n+ * Stores mouse attributes and visualization information for a mouse.\n+ * @param {!Genetics.Mouse} mouse The mouse to create a avatar for.\n+ * @constructor\n+ * @struct\n+ */\n+Genetics.MouseAvatar = function(mouse) {\n+  /**\n+   * The unique ID of the mouse.\n+   * @const {number}\n+   */\n+  this.id = mouse.id;\n+  /**\n+   * The sex of the mouse.\n+   * @const {Genetics.Mouse.Sex}\n+   */\n+  this.sex = mouse.sex;\n+  /**\n+   * The size of the mouse.\n+   * @const {number}\n+   */\n+  this.size = mouse.size;\n+  /**\n+   * The ID of the player owning the pickFight function on this mouse.\n+   * @const {number}\n+   */\n+  this.pickFightOwner = mouse.pickFightOwner;\n+  /**\n+   * The ID of the player owning the proposeMate function on this mouse.\n+   * @const {number}\n+   */\n+  this.proposeMateOwner = mouse.proposeMateOwner;\n+  /**\n+   * The ID of the player owning the acceptMate function on this mouse.\n+   * @const {number}\n+   */\n+  this.acceptMateOwner = mouse.acceptMateOwner;\n+\n+  /**\n+   * The SVG element containing the mouse.\n+   * @const {SVGElement}\n+   */\n+  this.element = document.createElementNS(Blockly.SVG_NS, 'svg');\n+  this.element.setAttribute('id', 'mouse' + mouse.id);\n+  this.element.setAttribute('class', 'mouse');\n+  this.element.style.transformOrigin = Genetics.MouseAvatar.HALF_SIZE + 'px ' +\n+      Genetics.MouseAvatar.HALF_SIZE + 'px';\n+\n+  // Create clip path for mouse image\n+  var mouseClip = document.createElementNS(Blockly.SVG_NS, 'clipPath');\n+  mouseClip.setAttribute('id', 'mouse' + mouse.id + 'ClipPath');\n+  var clipRect = document.createElementNS(Blockly.SVG_NS, 'rect');\n+  clipRect.setAttribute('width', Genetics.MouseAvatar.WIDTH + 'px');\n+  clipRect.setAttribute('height', Genetics.MouseAvatar.FULL_HEIGHT + 'px');\n+  mouseClip.appendChild(clipRect);\n+  this.element.appendChild(mouseClip);\n+\n+  /**\n+   * The image element containing the mouse sprite.\n+   * @private {HTMLImageElement}\n+   * @const\n+   */\n+  this.image_ = document.createElementNS(Blockly.SVG_NS, 'image');\n+  this.image_.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href',\n+      'genetics/mouse.png');\n+  this.image_.setAttribute('width', Genetics.MouseAvatar.WIDTH * 3 + 'px');\n+  this.image_.setAttribute('height',\n+      Genetics.MouseAvatar.FULL_HEIGHT * 2 + 'px');\n+  if (this.sex == Genetics.Mouse.Sex.FEMALE) {\n+    this.image_.setAttribute('y', - Genetics.MouseAvatar.FULL_HEIGHT + 'px');\n+  }\n+  this.image_.setAttribute('clip-path', 'url(#mouse' + mouse.id + 'ClipPath)');\n+  this.element.appendChild(this.image_);\n+\n+  // Calculate the pie chart arc start/end based on avatar size.\n+  var xOffset = Genetics.MouseAvatar.WIDTH / 2 -\n+      Genetics.MouseAvatar.CHART_RADIUS;\n+  var yOffset = Genetics.MouseAvatar.HEIGHT * 4 / 5 -\n+      Genetics.MouseAvatar.CHART_RADIUS;\n+  var radius = Genetics.MouseAvatar.CHART_RADIUS;\n+  var x1 = radius + xOffset;\n+  var y1 = yOffset;\n+  var x2 = radius * (1 + 0.5 * Math.sqrt(3)) + xOffset;\n+  var y2 = radius * 1.5 + yOffset;\n+  var x3 = radius * (1 - 0.5 * Math.sqrt(3)) + xOffset;\n+  var y3 = radius * 1.5 + yOffset;\n+  var centerX = radius + xOffset;\n+  var centerY = radius + yOffset;\n+\n+  // Draw top right slice.\n+  var proposeMateSlice = document.createElementNS(Blockly.SVG_NS, 'path');\n+  proposeMateSlice.setAttribute('d', 'M ' + x1 + ' ' + y1 +\n+      ' A ' + radius + ' ' + radius + ', 0, 0, 1, ' +\n+      x2 + ' ' + y2 + ' L ' + centerX + ' ' + centerY + ' Z');\n+  proposeMateSlice.setAttribute('fill',\n+      Genetics.Visualization.COLOURS[this.proposeMateOwner]);\n+  this.element.appendChild(proposeMateSlice);\n+\n+  // Draw bottom slice.\n+  var pickFightSlice = document.createElementNS(Blockly.SVG_NS, 'path');\n+  pickFightSlice.setAttribute('d', 'M ' + x2 + ' ' + y2 +\n+      ' A ' + radius + ' ' + radius + ', 0, 0, 1, ' +\n+      x3 + ' ' + y3 + ' L ' + centerX + ' ' + centerY + ' Z');\n+  pickFightSlice.setAttribute('fill',\n+      Genetics.Visualization.COLOURS[this.pickFightOwner]);\n+  this.element.appendChild(pickFightSlice);\n+\n+  // Draw top left slice.\n+  var acceptMateSlice = document.createElementNS(Blockly.SVG_NS, 'path');\n+  acceptMateSlice.setAttribute('d', 'M ' + x3 + ' ' + y3 +\n+      ' A ' + radius + ' ' + radius + ', 0, 0, 1, ' +\n+      x1 + ' ' + y1 + ' L ' + centerX + ' ' + centerY + ' Z');\n+  acceptMateSlice.setAttribute('fill',\n+      Genetics.Visualization.COLOURS[this.acceptMateOwner]);\n+  this.element.appendChild(acceptMateSlice);\n+\n+  /**\n+   * The direction of the mouse, in radians, between 0 and 2PI.\n+   * @private {number}\n+   */\n+  this.direction_ = Math.random() * 2 * Math.PI; // Choose a random direction.\n+\n+  /**\n+   * Whether the mouse is performing a busy animation.\n+   * @type {boolean}\n+   */\n+  this.busy = true;  // Mouse is busy until it is added to the display.\n+\n+  /**\n+   * The process ids for the idle mouse animation [0] and busy animation [1].\n+   * @const {Array.<number>}\n+   */\n+  this.actionPids = [0, 0];\n+  var wanderAbout = goog.bind(function() {\n+    var wanderTime = 400 + 100 * Math.random();\n+    if (!Genetics.MouseAvatar.wanderingDisabled && !this.busy) {\n+      this.randomMove_(wanderTime);\n+    }\n+    this.actionPids[Genetics.MouseAvatar.IDLE_ACTION_PID_INDEX] =\n+        setTimeout(wanderAbout, wanderTime);\n+  }, this);\n+  wanderAbout();\n+};\n+\n+Object.defineProperty(Genetics.MouseAvatar.prototype, 'direction', {\n+  /**\n+   * Sets the direction to a value between 0-2PI in radians\n+   * and rotates the mouse to  match the direction facing.\n+   * Direction angle is clockwise, with 0 indicating the mouse facing right.\n+   * @param {number} direction\n+   * @this Genetics.MouseAvatar\n+   */\n+  set: function(direction) {\n+    // Convert direction to a value between 0-2PI\n+    direction = goog.math.standardAngleInRadians(direction);\n+    // Determine what the change of direction is.\n+    var delta = goog.math.angleDifference(direction, this.direction_);\n+    if (Math.abs(delta) > Math.PI / 10) {\n+      // If change is significant enough, show tail animation.\n+      var image = this.image_;\n+      var resetStraight = function() {\n+        image.setAttribute('x', '0px');\n+      };\n+      if (delta > 0) {\n+        // If the mouse turned right.\n+        this.image_.setAttribute('x', -Genetics.MouseAvatar.WIDTH + 'px');\n+        setTimeout(resetStraight, 150);\n+      } else if (delta < 0) {\n+        // If the mouse turned left.\n+        this.image_.setAttribute('x', -2 * Genetics.MouseAvatar.WIDTH + 'px');\n+        setTimeout(resetStraight, 150);\n+      }\n+    }\n+    // Rotate mouse image to match direction facing.\n+    this.element.style.transform =\n+        'rotate(' + (direction + Math.PI / 2) + 'rad)';\n+    this.direction_ = direction;\n+  },\n+  /**\n+   * Returns the direction the mouse is facing as an angle in radians.\n+   * @return {number}\n+   * @this Genetics.MouseAvatar\n+   */\n+  get: function() {\n+    return this.direction_;\n+  }\n+});\n+\n+/**\n+ * The width of a mouse.\n+ * @const {number}\n+ */\n+Genetics.MouseAvatar.WIDTH = 40;\n+\n+/**\n+ * The height of a mouse (without tail).\n+ * @const {number}\n+ */\n+Genetics.MouseAvatar.HEIGHT = 45;\n+\n+/**\n+ * The height of a mouse (with tail).\n+ * @const {number}\n+ */\n+Genetics.MouseAvatar.FULL_HEIGHT = 60;\n+\n+/**\n+ * The half of the width of the mouse.\n+ * @const {number}\n+ */\n+Genetics.MouseAvatar.HALF_SIZE = Genetics.MouseAvatar.WIDTH / 2;\n+\n+/**\n+ * The radius of the chart on the mouse.\n+ * @const {number}\n+ */\n+Genetics.MouseAvatar.CHART_RADIUS = 15 / 2;\n+\n+/**\n+ * The index at which process ids for idle actions is stored.\n+ * @const {number}\n+ */\n+Genetics.MouseAvatar.IDLE_ACTION_PID_INDEX = 0;\n+\n+/**\n+ * The index at which process ids for busy actions is stored.\n+ * @const {number}\n+ */\n+Genetics.MouseAvatar.BUSY_ACTION_PID_INDEX = 1;\n+\n+/**\n+ * Speed of mouse in pixels per second when moving to a destination with\n+ * purpose.\n+ * @const {number}\n+ */\n+Genetics.MouseAvatar.BUSY_SPEED = .07;","path":"appengine/genetics/js/mouseAvatar.js","position":269,"original_position":269,"commit_id":"1798d0d06a942e26408fb381a602ff1853672853","original_commit_id":"1798d0d06a942e26408fb381a602ff1853672853","user":{"login":"moniika","id":6621618,"avatar_url":"https://avatars.githubusercontent.com/u/6621618?v=3","gravatar_id":"","url":"https://api.github.com/users/moniika","html_url":"https://github.com/moniika","followers_url":"https://api.github.com/users/moniika/followers","following_url":"https://api.github.com/users/moniika/following{/other_user}","gists_url":"https://api.github.com/users/moniika/gists{/gist_id}","starred_url":"https://api.github.com/users/moniika/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/moniika/subscriptions","organizations_url":"https://api.github.com/users/moniika/orgs","repos_url":"https://api.github.com/users/moniika/repos","events_url":"https://api.github.com/users/moniika/events{/privacy}","received_events_url":"https://api.github.com/users/moniika/received_events","type":"User","site_admin":false},"body":"done","created_at":"2016-10-05T22:49:11Z","updated_at":"2016-10-05T22:49:11Z","html_url":"https://github.com/google/blockly-games/pull/42#discussion_r82087507","pull_request_url":"https://api.github.com/repos/google/blockly-games/pulls/42","_links":{"self":{"href":"https://api.github.com/repos/google/blockly-games/pulls/comments/82087507"},"html":{"href":"https://github.com/google/blockly-games/pull/42#discussion_r82087507"},"pull_request":{"href":"https://api.github.com/repos/google/blockly-games/pulls/42"}}},"pull_request":{"url":"https://api.github.com/repos/google/blockly-games/pulls/42","id":86262609,"html_url":"https://github.com/google/blockly-games/pull/42","diff_url":"https://github.com/google/blockly-games/pull/42.diff","patch_url":"https://github.com/google/blockly-games/pull/42.patch","issue_url":"https://api.github.com/repos/google/blockly-games/issues/42","number":42,"state":"open","locked":false,"title":"Genetics Game Visualization [NOT READY FOR MERGE]","user":{"login":"moniika","id":6621618,"avatar_url":"https://avatars.githubusercontent.com/u/6621618?v=3","gravatar_id":"","url":"https://api.github.com/users/moniika","html_url":"https://github.com/moniika","followers_url":"https://api.github.com/users/moniika/followers","following_url":"https://api.github.com/users/moniika/following{/other_user}","gists_url":"https://api.github.com/users/moniika/gists{/gist_id}","starred_url":"https://api.github.com/users/moniika/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/moniika/subscriptions","organizations_url":"https://api.github.com/users/moniika/orgs","repos_url":"https://api.github.com/users/moniika/repos","events_url":"https://api.github.com/users/moniika/events{/privacy}","received_events_url":"https://api.github.com/users/moniika/received_events","type":"User","site_admin":false},"body":"Refactoring logic and extension to Genetics game visualization.\r\n@NeilFraser @seanlip PTAL","created_at":"2016-09-22T00:09:08Z","updated_at":"2016-10-05T22:49:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"14fdf3d57e8bc5e5b001234c8e7f225544fb763d","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/google/blockly-games/pulls/42/commits","review_comments_url":"https://api.github.com/repos/google/blockly-games/pulls/42/comments","review_comment_url":"https://api.github.com/repos/google/blockly-games/pulls/comments{/number}","comments_url":"https://api.github.com/repos/google/blockly-games/issues/42/comments","statuses_url":"https://api.github.com/repos/google/blockly-games/statuses/1798d0d06a942e26408fb381a602ff1853672853","head":{"label":"google:genetics-lab","ref":"genetics-lab","sha":"1798d0d06a942e26408fb381a602ff1853672853","user":{"login":"google","id":1342004,"avatar_url":"https://avatars.githubusercontent.com/u/1342004?v=3","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"repo":{"id":23320068,"name":"blockly-games","full_name":"google/blockly-games","owner":{"login":"google","id":1342004,"avatar_url":"https://avatars.githubusercontent.com/u/1342004?v=3","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/google/blockly-games","description":"Games for tomorrow's programmers.","fork":false,"url":"https://api.github.com/repos/google/blockly-games","forks_url":"https://api.github.com/repos/google/blockly-games/forks","keys_url":"https://api.github.com/repos/google/blockly-games/keys{/key_id}","collaborators_url":"https://api.github.com/repos/google/blockly-games/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/google/blockly-games/teams","hooks_url":"https://api.github.com/repos/google/blockly-games/hooks","issue_events_url":"https://api.github.com/repos/google/blockly-games/issues/events{/number}","events_url":"https://api.github.com/repos/google/blockly-games/events","assignees_url":"https://api.github.com/repos/google/blockly-games/assignees{/user}","branches_url":"https://api.github.com/repos/google/blockly-games/branches{/branch}","tags_url":"https://api.github.com/repos/google/blockly-games/tags","blobs_url":"https://api.github.com/repos/google/blockly-games/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/google/blockly-games/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/google/blockly-games/git/refs{/sha}","trees_url":"https://api.github.com/repos/google/blockly-games/git/trees{/sha}","statuses_url":"https://api.github.com/repos/google/blockly-games/statuses/{sha}","languages_url":"https://api.github.com/repos/google/blockly-games/languages","stargazers_url":"https://api.github.com/repos/google/blockly-games/stargazers","contributors_url":"https://api.github.com/repos/google/blockly-games/contributors","subscribers_url":"https://api.github.com/repos/google/blockly-games/subscribers","subscription_url":"https://api.github.com/repos/google/blockly-games/subscription","commits_url":"https://api.github.com/repos/google/blockly-games/commits{/sha}","git_commits_url":"https://api.github.com/repos/google/blockly-games/git/commits{/sha}","comments_url":"https://api.github.com/repos/google/blockly-games/comments{/number}","issue_comment_url":"https://api.github.com/repos/google/blockly-games/issues/comments{/number}","contents_url":"https://api.github.com/repos/google/blockly-games/contents/{+path}","compare_url":"https://api.github.com/repos/google/blockly-games/compare/{base}...{head}","merges_url":"https://api.github.com/repos/google/blockly-games/merges","archive_url":"https://api.github.com/repos/google/blockly-games/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/google/blockly-games/downloads","issues_url":"https://api.github.com/repos/google/blockly-games/issues{/number}","pulls_url":"https://api.github.com/repos/google/blockly-games/pulls{/number}","milestones_url":"https://api.github.com/repos/google/blockly-games/milestones{/number}","notifications_url":"https://api.github.com/repos/google/blockly-games/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/google/blockly-games/labels{/name}","releases_url":"https://api.github.com/repos/google/blockly-games/releases{/id}","deployments_url":"https://api.github.com/repos/google/blockly-games/deployments","created_at":"2014-08-25T16:09:42Z","updated_at":"2016-10-02T10:12:42Z","pushed_at":"2016-10-05T19:46:18Z","git_url":"git://github.com/google/blockly-games.git","ssh_url":"git@github.com:google/blockly-games.git","clone_url":"https://github.com/google/blockly-games.git","svn_url":"https://github.com/google/blockly-games","homepage":"https://blockly-games.appspot.com/","size":726692,"stargazers_count":275,"watchers_count":275,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":160,"mirror_url":null,"open_issues_count":10,"forks":160,"open_issues":10,"watchers":275,"default_branch":"master"}},"base":{"label":"google:master","ref":"master","sha":"cf5a1fc9256f812082c1d81b2d466301e0349ca3","user":{"login":"google","id":1342004,"avatar_url":"https://avatars.githubusercontent.com/u/1342004?v=3","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"repo":{"id":23320068,"name":"blockly-games","full_name":"google/blockly-games","owner":{"login":"google","id":1342004,"avatar_url":"https://avatars.githubusercontent.com/u/1342004?v=3","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/google/blockly-games","description":"Games for tomorrow's programmers.","fork":false,"url":"https://api.github.com/repos/google/blockly-games","forks_url":"https://api.github.com/repos/google/blockly-games/forks","keys_url":"https://api.github.com/repos/google/blockly-games/keys{/key_id}","collaborators_url":"https://api.github.com/repos/google/blockly-games/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/google/blockly-games/teams","hooks_url":"https://api.github.com/repos/google/blockly-games/hooks","issue_events_url":"https://api.github.com/repos/google/blockly-games/issues/events{/number}","events_url":"https://api.github.com/repos/google/blockly-games/events","assignees_url":"https://api.github.com/repos/google/blockly-games/assignees{/user}","branches_url":"https://api.github.com/repos/google/blockly-games/branches{/branch}","tags_url":"https://api.github.com/repos/google/blockly-games/tags","blobs_url":"https://api.github.com/repos/google/blockly-games/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/google/blockly-games/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/google/blockly-games/git/refs{/sha}","trees_url":"https://api.github.com/repos/google/blockly-games/git/trees{/sha}","statuses_url":"https://api.github.com/repos/google/blockly-games/statuses/{sha}","languages_url":"https://api.github.com/repos/google/blockly-games/languages","stargazers_url":"https://api.github.com/repos/google/blockly-games/stargazers","contributors_url":"https://api.github.com/repos/google/blockly-games/contributors","subscribers_url":"https://api.github.com/repos/google/blockly-games/subscribers","subscription_url":"https://api.github.com/repos/google/blockly-games/subscription","commits_url":"https://api.github.com/repos/google/blockly-games/commits{/sha}","git_commits_url":"https://api.github.com/repos/google/blockly-games/git/commits{/sha}","comments_url":"https://api.github.com/repos/google/blockly-games/comments{/number}","issue_comment_url":"https://api.github.com/repos/google/blockly-games/issues/comments{/number}","contents_url":"https://api.github.com/repos/google/blockly-games/contents/{+path}","compare_url":"https://api.github.com/repos/google/blockly-games/compare/{base}...{head}","merges_url":"https://api.github.com/repos/google/blockly-games/merges","archive_url":"https://api.github.com/repos/google/blockly-games/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/google/blockly-games/downloads","issues_url":"https://api.github.com/repos/google/blockly-games/issues{/number}","pulls_url":"https://api.github.com/repos/google/blockly-games/pulls{/number}","milestones_url":"https://api.github.com/repos/google/blockly-games/milestones{/number}","notifications_url":"https://api.github.com/repos/google/blockly-games/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/google/blockly-games/labels{/name}","releases_url":"https://api.github.com/repos/google/blockly-games/releases{/id}","deployments_url":"https://api.github.com/repos/google/blockly-games/deployments","created_at":"2014-08-25T16:09:42Z","updated_at":"2016-10-02T10:12:42Z","pushed_at":"2016-10-05T19:46:18Z","git_url":"git://github.com/google/blockly-games.git","ssh_url":"git@github.com:google/blockly-games.git","clone_url":"https://github.com/google/blockly-games.git","svn_url":"https://github.com/google/blockly-games","homepage":"https://blockly-games.appspot.com/","size":726692,"stargazers_count":275,"watchers_count":275,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":160,"mirror_url":null,"open_issues_count":10,"forks":160,"open_issues":10,"watchers":275,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/google/blockly-games/pulls/42"},"html":{"href":"https://github.com/google/blockly-games/pull/42"},"issue":{"href":"https://api.github.com/repos/google/blockly-games/issues/42"},"comments":{"href":"https://api.github.com/repos/google/blockly-games/issues/42/comments"},"review_comments":{"href":"https://api.github.com/repos/google/blockly-games/pulls/42/comments"},"review_comment":{"href":"https://api.github.com/repos/google/blockly-games/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/google/blockly-games/pulls/42/commits"},"statuses":{"href":"https://api.github.com/repos/google/blockly-games/statuses/1798d0d06a942e26408fb381a602ff1853672853"}}}}
{"actor":{"display_login":"moniika"}}