{"action":"created","comment":{"url":"https://api.github.com/repos/aframevr/aframe/pulls/comments/93708372","pull_request_review_id":14241604,"id":93708372,"diff_hunk":"@@ -0,0 +1,261 @@\n+var registerComponent = require('../core/component').registerComponent;\n+var THREE = require('../lib/three');\n+\n+var createTextGeometry = require('three-bmfont-text');\n+var loadBMFont = require('load-bmfont');\n+var path = require('path');\n+var assign = require('object-assign');\n+var createSDF = require('three-bmfont-text/shaders/sdf');\n+var createMSDF = require('three-bmfont-text/shaders/msdf');\n+var createBasic = require('three-bmfont-text/shaders/basic');\n+\n+var alignments = ['left', 'right', 'center'];\n+var anchors = ['left', 'right', 'center', 'align'];\n+var baselines = ['top', 'center', 'bottom'];\n+\n+var DEFAULT_WIDTH = 1; // 1 matches other AFRAME default widths... 5 matches prior bmfont examples etc.\n+\n+var FONT_BASE_URL = 'https://cdn.rawgit.com/fernandojsg/aframe-bmfont-component/5c88edf40bbc88b336d7db6f040c3ae0d2f65aff/fonts/';\n+var fontMap = {\n+  'default': FONT_BASE_URL + 'DejaVu-sdf.fnt',\n+  'Aileron-Semibold': FONT_BASE_URL + 'Aileron-Semibold.fnt',\n+  'DejaVu': FONT_BASE_URL + 'DejaVu-sdf.fnt',\n+  'Exo2Bold': FONT_BASE_URL + 'Exo2Bold.fnt',\n+  'Exo2SemiBold': FONT_BASE_URL + 'Exo2SemiBold.fnt',\n+  'KelsonSans': FONT_BASE_URL + 'KelsonSans.fnt',\n+  'Monoid': FONT_BASE_URL + 'Monoid.fnt',\n+  'SourceCodePro': FONT_BASE_URL + 'SourceCodePro.fnt',\n+  'mozillavr': FONT_BASE_URL + 'mozillavr.fnt'\n+};\n+\n+module.exports.Component = registerComponent('bmfont-text', {\n+  schema: {\n+    // scale is now determined by width and wrappixels/wrapcount... scale: {default: 0.003},\n+    font: {default: ''},\n+    tabSize: {default: 4},\n+    anchor: {default: 'center', oneOf: anchors}, // center default to match primitives like plane; if 'align', null or undefined, same as align\n+    baseline: {default: 'center', oneOf: baselines},\n+    text: {type: 'string'},\n+    width: {type: 'number'}, // use AFRAME units i.e. meters, not arbitrary numbers... // default to geometry width, or if not present then DEFAULT_WIDTH\n+    height: {type: 'number'}, // use AFRAME units i.e. meters, not arbitrary numbers... // no default, will be populated at layout\n+    align: {type: 'string', default: 'left', oneOf: alignments},\n+    letterSpacing: {type: 'number', default: 0},\n+    lineHeight: {type: 'number'},  // default to font's lineHeight value\n+    fnt: {type: 'string', default: 'default'},\n+    fntImage: {type: 'string'}, // default to fnt but with .fnt replaced by .png\n+    mode: {default: 'normal', oneOf: ['normal', 'pre', 'nowrap']},\n+    color: {type: 'color', default: '#000'},\n+    opacity: {type: 'number', default: '1.0'},\n+    type: {default: 'SDF', oneOf: ['SDF', 'basic', 'MSDF']},\n+    side: {default: 'front', oneOf: ['front', 'back', 'double']},\n+    transparent: {default: true},\n+    alphaTest: {default: 0.5},\n+    wrappixels: {type: 'number'}, // if specified, units are bmfont pixels (e.g. DejaVu default is size 32)\n+    wrapcount: {type: 'number', default: 40} // units are 0.6035 * font size e.g. about one default font character (monospace DejaVu size 32)\n+  },\n+\n+  init: function () {\n+    this.texture = new THREE.Texture();\n+    this.texture.anisotropy = 16; // ??\n+\n+    this.geometry = createTextGeometry();\n+\n+    this.updateMaterial();\n+    this.mesh = new THREE.Mesh(this.geometry, this.material);\n+    this.el.setObject3D('bmfont-text', this.mesh);\n+  },\n+\n+  update: function (oldData) {\n+    var data = this.coerceData(this.data);\n+\n+    // decide whether to update font, or just text data\n+    if (!oldData || oldData.fnt !== data.fnt) {\n+      // new font, will also subsequently change data & layout\n+      this.updateFont();\n+    } else if (this.currentFont) {\n+      // new data like change of text string\n+      var font = this.currentFont;\n+      var textRenderWidth = data.wrappixels || (data.wrapcount * 0.6035 * font.info.size);\n+      var options = assign({}, data, { font: font, width: textRenderWidth, lineHeight: data.lineHeight || font.common.lineHeight });\n+      this.geometry.update(options);\n+      this.updateLayout(data);\n+    }\n+    // ??\n+    this.updateMaterial(oldData.type);\n+  },\n+\n+  remove: function () {\n+    this.geometry.dispose();\n+    this.geometry = null;\n+    this.el.removeObject3D('bmfont-text');\n+  },\n+\n+  coerceData: function (data) {\n+    // We have to coerce some data to numbers/booleans\n+    data = assign({}, data);\n+    if (typeof data.lineHeight !== 'undefined') {\n+      data.lineHeight = parseFloat(data.lineHeight);\n+      if (!isFinite(data.lineHeight)) { data.lineHeight = undefined; }\n+    }\n+    if (typeof data.width !== 'undefined') {\n+      data.width = parseFloat(data.width);\n+      if (!isFinite(data.width)) { data.width = undefined; }\n+    }\n+    return data;\n+  },\n+\n+  updateMaterial: function (oldType) {\n+    if (oldType !== this.data.type) {\n+      var data = {\n+        side: threeSideFromString(this.data.side),\n+        transparent: this.data.transparent,\n+        alphaTest: this.data.alphaTest,\n+        color: this.data.color,\n+        opacity: this.data.opacity,\n+        map: this.texture\n+      };\n+      var shader;\n+      if (this.data.type === 'SDF') {\n+        shader = createSDF(data);\n+      } else if (this.data.type === 'MSDF') {\n+        shader = createMSDF(data);\n+      } else {\n+        shader = createBasic(data);\n+      }\n+      this.material = new THREE.RawShaderMaterial(shader);\n+    } else {\n+      this.material.uniforms.opacity.value = this.data.opacity;\n+      this.material.uniforms.color.value.set(this.data.color);\n+      this.material.uniforms.map.value = this.texture;\n+    }\n+\n+    if (this.mesh) {\n+      this.mesh.material = this.material;\n+    }\n+  },\n+\n+  registerFont: function (key, url) { fontMap[key] = url; },\n+\n+  lookupFont: function (keyOrUrl) { return fontMap[keyOrUrl] || keyOrUrl; },\n+\n+  updateFont: function () {\n+    if (!this.data.fnt) {\n+      console.error(new TypeError('No font specified for bmfont text!'));\n+      return;\n+    }\n+\n+    var geometry = this.geometry;\n+    var self = this;\n+    this.mesh.visible = false;\n+    loadBMFont(this.lookupFont(this.data.fnt), onLoadFont);\n+\n+    function onLoadFont (err, font) {\n+      if (err) {\n+        console.error(new Error('Error loading font ' + self.data.fnt +\n+          '\\nMake sure the path is correct and that it points' +\n+          ' to a valid BMFont file (xml, json, fnt).\\n' + err.message));\n+        return;\n+      }\n+\n+      if (font.pages.length !== 1) {\n+        console.error(new Error('Currently only single-page bitmap fonts are supported.'));\n+        return;\n+      }\n+      var data = self.coerceData(self.data);\n+\n+      var src = self.data.fntImage || self.lookupFont(self.data.fnt).replace('.fnt', '.png') || path.dirname(data.fnt) + '/' + font.pages[0];\n+      var textRenderWidth = data.wrappixels || (data.wrapcount * 0.6035 * font.info.size);\n+      var options = assign({}, data, { font: font, width: textRenderWidth, lineHeight: data.lineHeight || font.common.lineHeight });\n+      geometry.update(options);\n+      self.mesh.geometry = geometry;\n+\n+      var obj3d = self.el.object3D;","path":"src/components/bmfont-text.js","position":172,"original_position":172,"commit_id":"77648aaaf706f5d6bf85a6cc86fe2331dc0394da","original_commit_id":"77648aaaf706f5d6bf85a6cc86fe2331dc0394da","user":{"login":"dmarcos","id":39342,"avatar_url":"https://avatars.githubusercontent.com/u/39342?v=3","gravatar_id":"","url":"https://api.github.com/users/dmarcos","html_url":"https://github.com/dmarcos","followers_url":"https://api.github.com/users/dmarcos/followers","following_url":"https://api.github.com/users/dmarcos/following{/other_user}","gists_url":"https://api.github.com/users/dmarcos/gists{/gist_id}","starred_url":"https://api.github.com/users/dmarcos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmarcos/subscriptions","organizations_url":"https://api.github.com/users/dmarcos/orgs","repos_url":"https://api.github.com/users/dmarcos/repos","events_url":"https://api.github.com/users/dmarcos/events{/privacy}","received_events_url":"https://api.github.com/users/dmarcos/received_events","type":"User","site_admin":false},"body":"variable at the top and rename to `object3D`","created_at":"2016-12-22T22:43:40Z","updated_at":"2016-12-22T22:47:05Z","html_url":"https://github.com/aframevr/aframe/pull/2200#discussion_r93708372","pull_request_url":"https://api.github.com/repos/aframevr/aframe/pulls/2200","_links":{"self":{"href":"https://api.github.com/repos/aframevr/aframe/pulls/comments/93708372"},"html":{"href":"https://github.com/aframevr/aframe/pull/2200#discussion_r93708372"},"pull_request":{"href":"https://api.github.com/repos/aframevr/aframe/pulls/2200"}}},"pull_request":{"url":"https://api.github.com/repos/aframevr/aframe/pulls/2200","id":99009589,"html_url":"https://github.com/aframevr/aframe/pull/2200","diff_url":"https://github.com/aframevr/aframe/pull/2200.diff","patch_url":"https://github.com/aframevr/aframe/pull/2200.patch","issue_url":"https://api.github.com/repos/aframevr/aframe/issues/2200","number":2200,"state":"open","locked":false,"title":"add bmfont-text component and a-text primitive to core","user":{"login":"machenmusik","id":2080738,"avatar_url":"https://avatars.githubusercontent.com/u/2080738?v=3","gravatar_id":"","url":"https://api.github.com/users/machenmusik","html_url":"https://github.com/machenmusik","followers_url":"https://api.github.com/users/machenmusik/followers","following_url":"https://api.github.com/users/machenmusik/following{/other_user}","gists_url":"https://api.github.com/users/machenmusik/gists{/gist_id}","starred_url":"https://api.github.com/users/machenmusik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/machenmusik/subscriptions","organizations_url":"https://api.github.com/users/machenmusik/orgs","repos_url":"https://api.github.com/users/machenmusik/repos","events_url":"https://api.github.com/users/machenmusik/events{/privacy}","received_events_url":"https://api.github.com/users/machenmusik/received_events","type":"User","site_admin":false},"body":"add bmfont-text component and a-text primitive to core from https://github.com/chenzlabs/aframe-bmfont-component","created_at":"2016-12-21T21:40:41Z","updated_at":"2016-12-22T22:47:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b6a9256096c236a3f43c434f9d59667dc2aa0323","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/aframevr/aframe/pulls/2200/commits","review_comments_url":"https://api.github.com/repos/aframevr/aframe/pulls/2200/comments","review_comment_url":"https://api.github.com/repos/aframevr/aframe/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aframevr/aframe/issues/2200/comments","statuses_url":"https://api.github.com/repos/aframevr/aframe/statuses/77648aaaf706f5d6bf85a6cc86fe2331dc0394da","head":{"label":"chenzlabs:add-bmfont-text-to-core","ref":"add-bmfont-text-to-core","sha":"77648aaaf706f5d6bf85a6cc86fe2331dc0394da","user":{"login":"chenzlabs","id":11540216,"avatar_url":"https://avatars.githubusercontent.com/u/11540216?v=3","gravatar_id":"","url":"https://api.github.com/users/chenzlabs","html_url":"https://github.com/chenzlabs","followers_url":"https://api.github.com/users/chenzlabs/followers","following_url":"https://api.github.com/users/chenzlabs/following{/other_user}","gists_url":"https://api.github.com/users/chenzlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/chenzlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chenzlabs/subscriptions","organizations_url":"https://api.github.com/users/chenzlabs/orgs","repos_url":"https://api.github.com/users/chenzlabs/repos","events_url":"https://api.github.com/users/chenzlabs/events{/privacy}","received_events_url":"https://api.github.com/users/chenzlabs/received_events","type":"Organization","site_admin":false},"repo":{"id":74418613,"name":"aframe","full_name":"chenzlabs/aframe","owner":{"login":"chenzlabs","id":11540216,"avatar_url":"https://avatars.githubusercontent.com/u/11540216?v=3","gravatar_id":"","url":"https://api.github.com/users/chenzlabs","html_url":"https://github.com/chenzlabs","followers_url":"https://api.github.com/users/chenzlabs/followers","following_url":"https://api.github.com/users/chenzlabs/following{/other_user}","gists_url":"https://api.github.com/users/chenzlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/chenzlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chenzlabs/subscriptions","organizations_url":"https://api.github.com/users/chenzlabs/orgs","repos_url":"https://api.github.com/users/chenzlabs/repos","events_url":"https://api.github.com/users/chenzlabs/events{/privacy}","received_events_url":"https://api.github.com/users/chenzlabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/chenzlabs/aframe","description":"A web framework for building virtual reality experiences.","fork":true,"url":"https://api.github.com/repos/chenzlabs/aframe","forks_url":"https://api.github.com/repos/chenzlabs/aframe/forks","keys_url":"https://api.github.com/repos/chenzlabs/aframe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chenzlabs/aframe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chenzlabs/aframe/teams","hooks_url":"https://api.github.com/repos/chenzlabs/aframe/hooks","issue_events_url":"https://api.github.com/repos/chenzlabs/aframe/issues/events{/number}","events_url":"https://api.github.com/repos/chenzlabs/aframe/events","assignees_url":"https://api.github.com/repos/chenzlabs/aframe/assignees{/user}","branches_url":"https://api.github.com/repos/chenzlabs/aframe/branches{/branch}","tags_url":"https://api.github.com/repos/chenzlabs/aframe/tags","blobs_url":"https://api.github.com/repos/chenzlabs/aframe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chenzlabs/aframe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chenzlabs/aframe/git/refs{/sha}","trees_url":"https://api.github.com/repos/chenzlabs/aframe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chenzlabs/aframe/statuses/{sha}","languages_url":"https://api.github.com/repos/chenzlabs/aframe/languages","stargazers_url":"https://api.github.com/repos/chenzlabs/aframe/stargazers","contributors_url":"https://api.github.com/repos/chenzlabs/aframe/contributors","subscribers_url":"https://api.github.com/repos/chenzlabs/aframe/subscribers","subscription_url":"https://api.github.com/repos/chenzlabs/aframe/subscription","commits_url":"https://api.github.com/repos/chenzlabs/aframe/commits{/sha}","git_commits_url":"https://api.github.com/repos/chenzlabs/aframe/git/commits{/sha}","comments_url":"https://api.github.com/repos/chenzlabs/aframe/comments{/number}","issue_comment_url":"https://api.github.com/repos/chenzlabs/aframe/issues/comments{/number}","contents_url":"https://api.github.com/repos/chenzlabs/aframe/contents/{+path}","compare_url":"https://api.github.com/repos/chenzlabs/aframe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chenzlabs/aframe/merges","archive_url":"https://api.github.com/repos/chenzlabs/aframe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chenzlabs/aframe/downloads","issues_url":"https://api.github.com/repos/chenzlabs/aframe/issues{/number}","pulls_url":"https://api.github.com/repos/chenzlabs/aframe/pulls{/number}","milestones_url":"https://api.github.com/repos/chenzlabs/aframe/milestones{/number}","notifications_url":"https://api.github.com/repos/chenzlabs/aframe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chenzlabs/aframe/labels{/name}","releases_url":"https://api.github.com/repos/chenzlabs/aframe/releases{/id}","deployments_url":"https://api.github.com/repos/chenzlabs/aframe/deployments","created_at":"2016-11-22T00:35:28Z","updated_at":"2016-11-22T00:35:29Z","pushed_at":"2016-12-22T16:38:15Z","git_url":"git://github.com/chenzlabs/aframe.git","ssh_url":"git@github.com:chenzlabs/aframe.git","clone_url":"https://github.com/chenzlabs/aframe.git","svn_url":"https://github.com/chenzlabs/aframe","homepage":"https://aframe.io/","size":151144,"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":"aframevr:master","ref":"master","sha":"ba19d61487687d0818adac223ddbf268a921920d","user":{"login":"aframevr","id":16024092,"avatar_url":"https://avatars.githubusercontent.com/u/16024092?v=3","gravatar_id":"","url":"https://api.github.com/users/aframevr","html_url":"https://github.com/aframevr","followers_url":"https://api.github.com/users/aframevr/followers","following_url":"https://api.github.com/users/aframevr/following{/other_user}","gists_url":"https://api.github.com/users/aframevr/gists{/gist_id}","starred_url":"https://api.github.com/users/aframevr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aframevr/subscriptions","organizations_url":"https://api.github.com/users/aframevr/orgs","repos_url":"https://api.github.com/users/aframevr/repos","events_url":"https://api.github.com/users/aframevr/events{/privacy}","received_events_url":"https://api.github.com/users/aframevr/received_events","type":"Organization","site_admin":false},"repo":{"id":42488903,"name":"aframe","full_name":"aframevr/aframe","owner":{"login":"aframevr","id":16024092,"avatar_url":"https://avatars.githubusercontent.com/u/16024092?v=3","gravatar_id":"","url":"https://api.github.com/users/aframevr","html_url":"https://github.com/aframevr","followers_url":"https://api.github.com/users/aframevr/followers","following_url":"https://api.github.com/users/aframevr/following{/other_user}","gists_url":"https://api.github.com/users/aframevr/gists{/gist_id}","starred_url":"https://api.github.com/users/aframevr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aframevr/subscriptions","organizations_url":"https://api.github.com/users/aframevr/orgs","repos_url":"https://api.github.com/users/aframevr/repos","events_url":"https://api.github.com/users/aframevr/events{/privacy}","received_events_url":"https://api.github.com/users/aframevr/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aframevr/aframe","description":"A web framework for building virtual reality experiences.","fork":false,"url":"https://api.github.com/repos/aframevr/aframe","forks_url":"https://api.github.com/repos/aframevr/aframe/forks","keys_url":"https://api.github.com/repos/aframevr/aframe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aframevr/aframe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aframevr/aframe/teams","hooks_url":"https://api.github.com/repos/aframevr/aframe/hooks","issue_events_url":"https://api.github.com/repos/aframevr/aframe/issues/events{/number}","events_url":"https://api.github.com/repos/aframevr/aframe/events","assignees_url":"https://api.github.com/repos/aframevr/aframe/assignees{/user}","branches_url":"https://api.github.com/repos/aframevr/aframe/branches{/branch}","tags_url":"https://api.github.com/repos/aframevr/aframe/tags","blobs_url":"https://api.github.com/repos/aframevr/aframe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aframevr/aframe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aframevr/aframe/git/refs{/sha}","trees_url":"https://api.github.com/repos/aframevr/aframe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aframevr/aframe/statuses/{sha}","languages_url":"https://api.github.com/repos/aframevr/aframe/languages","stargazers_url":"https://api.github.com/repos/aframevr/aframe/stargazers","contributors_url":"https://api.github.com/repos/aframevr/aframe/contributors","subscribers_url":"https://api.github.com/repos/aframevr/aframe/subscribers","subscription_url":"https://api.github.com/repos/aframevr/aframe/subscription","commits_url":"https://api.github.com/repos/aframevr/aframe/commits{/sha}","git_commits_url":"https://api.github.com/repos/aframevr/aframe/git/commits{/sha}","comments_url":"https://api.github.com/repos/aframevr/aframe/comments{/number}","issue_comment_url":"https://api.github.com/repos/aframevr/aframe/issues/comments{/number}","contents_url":"https://api.github.com/repos/aframevr/aframe/contents/{+path}","compare_url":"https://api.github.com/repos/aframevr/aframe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aframevr/aframe/merges","archive_url":"https://api.github.com/repos/aframevr/aframe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aframevr/aframe/downloads","issues_url":"https://api.github.com/repos/aframevr/aframe/issues{/number}","pulls_url":"https://api.github.com/repos/aframevr/aframe/pulls{/number}","milestones_url":"https://api.github.com/repos/aframevr/aframe/milestones{/number}","notifications_url":"https://api.github.com/repos/aframevr/aframe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aframevr/aframe/labels{/name}","releases_url":"https://api.github.com/repos/aframevr/aframe/releases{/id}","deployments_url":"https://api.github.com/repos/aframevr/aframe/deployments","created_at":"2015-09-15T02:04:40Z","updated_at":"2016-12-22T21:56:55Z","pushed_at":"2016-12-22T17:09:02Z","git_url":"git://github.com/aframevr/aframe.git","ssh_url":"git@github.com:aframevr/aframe.git","clone_url":"https://github.com/aframevr/aframe.git","svn_url":"https://github.com/aframevr/aframe","homepage":"https://aframe.io/","size":142351,"stargazers_count":4255,"watchers_count":4255,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":848,"mirror_url":null,"open_issues_count":228,"forks":848,"open_issues":228,"watchers":4255,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/aframevr/aframe/pulls/2200"},"html":{"href":"https://github.com/aframevr/aframe/pull/2200"},"issue":{"href":"https://api.github.com/repos/aframevr/aframe/issues/2200"},"comments":{"href":"https://api.github.com/repos/aframevr/aframe/issues/2200/comments"},"review_comments":{"href":"https://api.github.com/repos/aframevr/aframe/pulls/2200/comments"},"review_comment":{"href":"https://api.github.com/repos/aframevr/aframe/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aframevr/aframe/pulls/2200/commits"},"statuses":{"href":"https://api.github.com/repos/aframevr/aframe/statuses/77648aaaf706f5d6bf85a6cc86fe2331dc0394da"}}}}
{"actor":{"display_login":"dmarcos"}}