{"action":"created","comment":{"url":"https://api.github.com/repos/openlayers/ol3/pulls/comments/75849817","id":75849817,"diff_hunk":"@@ -0,0 +1,506 @@\n+goog.provide('ol.interaction.Extent');\n+goog.provide('ol.interaction.ExtentEvent');\n+goog.provide('ol.interaction.ExtentEventType');\n+\n+goog.require('ol');\n+goog.require('ol.Feature');\n+goog.require('ol.MapBrowserEvent.EventType');\n+goog.require('ol.MapBrowserPointerEvent');\n+goog.require('ol.coordinate');\n+goog.require('ol.events.Event');\n+goog.require('ol.extent');\n+goog.require('ol.geom.GeometryType');\n+goog.require('ol.geom.Point');\n+goog.require('ol.geom.Polygon');\n+goog.require('ol.interaction.Pointer');\n+goog.require('ol.layer.Vector');\n+goog.require('ol.source.Vector');\n+goog.require('ol.style.Style');\n+\n+\n+/**\n+ * @enum {string}\n+ */\n+ol.interaction.ExtentEventType = {\n+  /**\n+   * Triggered after the extent is changed\n+   * @event ol.interaction.ExtentEvent\n+   * @api\n+   */\n+  EXTENTCHANGED: 'extentchanged'\n+};\n+\n+/**\n+ * @classdesc\n+ * Events emitted by {@link ol.interaction.ExtentInteraction} instances are instances of\n+ * this type.\n+ *\n+ * @constructor\n+ * @param {ol.Extent} extent the new extent\n+ * @extends {ol.events.Event}\n+ */\n+ol.interaction.ExtentEvent = function(extent) {\n+  ol.events.Event.call(this, ol.interaction.ExtentEventType.EXTENTCHANGED);\n+\n+  /**\n+   * The current extent.\n+   * @type {ol.Extent}\n+   * @api\n+   */\n+  this.extent = extent;\n+};\n+\n+ol.inherits(ol.interaction.ExtentEvent, ol.events.Event);\n+\n+/**\n+ * @classdesc\n+ * Allows the user to draw a vector box by clicking and dragging on the map.\n+ * Once drawn, the vector box can be modified by draging its vertices or edges.\n+ * This interaction is only supported for mouse devices.\n+ *\n+ * @constructor\n+ * @extends {ol.interaction.Pointer}\n+ * @fires ol.ExtentEvent\n+ * @param {olx.interaction.ExtentOptions} opts Options.\n+ * @api\n+ */\n+ol.interaction.Extent = function(opts) {\n+\n+  /**\n+   * extent Extent\n+   * @type {ol.Extent}\n+   * @private\n+   */\n+  this.extent = null;\n+\n+  /**\n+   * pointerHandler_ Handler for mointer move events\n+   * @type {function (ol.Coordinate): ol.Extent|null}\n+   * @private\n+   */\n+  this.pointerHandler = null;\n+\n+  /**\n+   * pixelTolerance_ pixel threshold to snap to extent\n+   * @type {number}\n+   * @private\n+   */\n+  this.pixelTolerance_ = 10;\n+\n+  /**\n+   * lastPixel_ Last known pixel coordinate of the pointer\n+   * @type {ol.Pixel}\n+   * @private\n+   */\n+  this.lastPixel_ = null;\n+\n+  /**\n+   * snappedToVertex_ Is the pointer snapped to an extent vertex\n+   * @type {boolean}\n+   * @private\n+   */\n+  this.snappedToVertex_ = false;\n+\n+  /**\n+   * extentFeature_ Feature for displaying the visible extent\n+   * @type {ol.Feature}\n+   * @private\n+   */\n+  this.extentFeature_ = null;\n+\n+  /**\n+   * vertexFeature_ Feature for displaying the visible pointer\n+   * @type {ol.Feature}\n+   * @private\n+   */\n+  this.vertexFeature_ = null;\n+\n+  if (!opts) {\n+    opts = {};\n+  }\n+\n+  if (opts.extent) {\n+    this.setExtent(opts.extent);\n+  }\n+\n+  /* Inherit ol.interaction.Pointer */\n+  ol.interaction.Pointer.call(this, {\n+    handleDownEvent: ol.interaction.Extent.handleDownEvent_,\n+    handleDragEvent: ol.interaction.Extent.handleDragEvent_,\n+    handleEvent: ol.interaction.Extent.handleEvent_,\n+    handleUpEvent: ol.interaction.Extent.handleUpEvent_\n+  });\n+\n+  /**\n+   * extentOverlay_ Layer for the extentFeature\n+   * @type {ol.layer.Vector}\n+   * @private\n+   */\n+  this.extentOverlay = new ol.layer.Vector({\n+    source: new ol.source.Vector({\n+      useSpatialIndex: false,\n+      wrapX: !!opts.wrapX\n+    }),\n+    style: opts.boxStyle ? opts.boxStyle : ol.interaction.Extent.getDefaultExtentStyleFunction_(),\n+    updateWhileAnimating: true,\n+    updateWhileInteracting: true\n+  });\n+\n+  /**\n+   * vertexOverlay_ Layer for the vertexFeature\n+   * @type {ol.layer.Vector}\n+   * @private\n+   */\n+  this.vertexOverlay_ = new ol.layer.Vector({\n+    source: new ol.source.Vector({\n+      useSpatialIndex: false,\n+      wrapX: !!opts.wrapX\n+    }),\n+    style: opts.pointerStyle ? opts.pointerStyle : ol.interaction.Extent.getDefaultPointerStyleFunction_(),\n+    updateWhileAnimating: true,\n+    updateWhileInteracting: true\n+  });\n+};\n+\n+ol.inherits(ol.interaction.Extent, ol.interaction.Pointer);\n+\n+/**\n+ * @param {ol.MapBrowserEvent} mapBrowserEvent Event.\n+ * @return {boolean} Propagate event?\n+ * @this {ol.interaction.Extent}\n+ * @private\n+ */\n+ol.interaction.Extent.handleEvent_ = function(mapBrowserEvent) {\n+  if (!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) {\n+    return true;\n+  }\n+  //display pointer (if not dragging)\n+  if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERMOVE && !this.handlingDownUpSequence) {\n+    this.handlePointerMove_(mapBrowserEvent);\n+  }\n+  //call pointer to determine up/down/drag\n+  ol.interaction.Pointer.handleEvent.call(this, mapBrowserEvent);\n+  //return false to stop propagation\n+  return false;\n+};\n+\n+/**\n+ * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n+ * @return {boolean} Event handled?\n+ * @this {ol.interaction.Extent}\n+ * @private\n+ */\n+ol.interaction.Extent.handleDownEvent_ = function(mapBrowserEvent) {\n+  var pixel = mapBrowserEvent.pixel;\n+  var map = mapBrowserEvent.map;\n+\n+  var extent = this.getExtent();\n+  var vertex = this.snapToVertex_(pixel, map);\n+\n+  //find the extent corner opposite the passed corner\n+  var getOpposingPoint = function(point) {\n+    var x_ = null;\n+    var y_ = null;\n+    if (point[0] == extent[0]) {\n+      x_ = extent[2];\n+    } else if (point[0] == extent[2]) {\n+      x_ = extent[0];\n+    }\n+    if (point[1] == extent[1]) {\n+      y_ = extent[3];\n+    } else if (point[1] == extent[3]) {\n+      y_ = extent[1];\n+    }\n+    if (x_ !== null && y_ !== null) {\n+      return [x_, y_];\n+    }\n+    return null;\n+  };\n+  if (vertex && extent) {\n+    var x = (vertex[0] == extent[0] || vertex[0] == extent[2]) ? vertex[0] : null;\n+    var y = (vertex[1] == extent[1] || vertex[1] == extent[3]) ? vertex[1] : null;\n+\n+    //snap to point\n+    if (x !== null && y !== null) {\n+      this.pointerHandler = this.getPointHandler_(getOpposingPoint(vertex));\n+    //snap to edge\n+    } else if (x !== null) {\n+      this.pointerHandler = this.getEdgeHandler_(\n+        getOpposingPoint([x, extent[1]]),\n+        getOpposingPoint([x, extent[3]])\n+      );\n+    } else if (y !== null) {\n+      this.pointerHandler = this.getEdgeHandler_(\n+        getOpposingPoint([extent[0], y]),\n+        getOpposingPoint([extent[2], y])\n+      );\n+    }\n+  //no snap - new bbox\n+  } else {\n+    vertex = map.getCoordinateFromPixel(pixel);\n+    this.setExtent([vertex[0], vertex[1], vertex[0], vertex[1]]);\n+    this.pointerHandler = this.getPointHandler_(vertex);\n+  }\n+  return true; //event handled; start downup sequence\n+};\n+\n+/**\n+ * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n+ * @return {boolean} Event handled?\n+ * @this {ol.interaction.Extent}\n+ * @private\n+ */\n+ol.interaction.Extent.handleDragEvent_ = function(mapBrowserEvent) {\n+  this.lastPixel_ = mapBrowserEvent.pixel;\n+  if (this.pointerHandler) {\n+    var pixelCoordinate = mapBrowserEvent.map.getCoordinateFromPixel(mapBrowserEvent.pixel);\n+    this.setExtent(this.pointerHandler(pixelCoordinate));\n+    this.createOrUpdatePointerFeature_(pixelCoordinate);\n+  }\n+  return true;\n+};\n+\n+/**\n+ * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.\n+ * @return {boolean} Stop drag sequence?\n+ * @this {ol.interaction.Extent}\n+ * @private\n+ */\n+ol.interaction.Extent.handleUpEvent_ = function(mapBrowserEvent) {\n+  this.pointerHandler = null;\n+  //If bbox is zero area, set to null;\n+  var extent = this.getExtent();\n+  if (!extent || extent[0] == extent[2] || extent[1] == extent[3]) {\n+    this.setExtent(null);\n+  }\n+  return false; //Stop handling downup sequence\n+};\n+\n+/**\n+ * Returns the default style for the drawn bbox\n+ *\n+ * @return {ol.StyleFunction} Default Extent style\n+ * @private\n+ */\n+ol.interaction.Extent.getDefaultExtentStyleFunction_ = function() {\n+  var style = ol.style.Style.createDefaultEditing();\n+  return function(feature, resolution) {\n+    return style[ol.geom.GeometryType.POLYGON];\n+  };\n+};\n+\n+/**\n+ * Returns the default style for the pointer\n+ *\n+ * @return {ol.StyleFunction} Default pointer style\n+ * @private\n+ */\n+ol.interaction.Extent.getDefaultPointerStyleFunction_ = function() {\n+  var style = ol.style.Style.createDefaultEditing();\n+  return function(feature, resolution) {\n+    return style[ol.geom.GeometryType.POINT];\n+  };\n+};\n+\n+/**\n+ * @param {ol.Coordinate} fixedPoint corner that will be unchanged in the new extent\n+ * @returns {function (ol.Coordinate): ol.Extent} event handler\n+ * @private\n+ */\n+ol.interaction.Extent.prototype.getPointHandler_ = function(fixedPoint) {","path":"src/ol/interaction/extent.js","position":310,"original_position":310,"commit_id":"d26a7a656c86d7b65c97aa88708760756e087e40","original_commit_id":"d26a7a656c86d7b65c97aa88708760756e087e40","user":{"login":"bartvde","id":319678,"avatar_url":"https://avatars.githubusercontent.com/u/319678?v=3","gravatar_id":"","url":"https://api.github.com/users/bartvde","html_url":"https://github.com/bartvde","followers_url":"https://api.github.com/users/bartvde/followers","following_url":"https://api.github.com/users/bartvde/following{/other_user}","gists_url":"https://api.github.com/users/bartvde/gists{/gist_id}","starred_url":"https://api.github.com/users/bartvde/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bartvde/subscriptions","organizations_url":"https://api.github.com/users/bartvde/orgs","repos_url":"https://api.github.com/users/bartvde/repos","events_url":"https://api.github.com/users/bartvde/events{/privacy}","received_events_url":"https://api.github.com/users/bartvde/received_events","type":"User","site_admin":false},"body":"can this be static instead?","created_at":"2016-08-23T11:48:56Z","updated_at":"2016-08-23T11:48:56Z","html_url":"https://github.com/openlayers/ol3/pull/5290#discussion_r75849817","pull_request_url":"https://api.github.com/repos/openlayers/ol3/pulls/5290","_links":{"self":{"href":"https://api.github.com/repos/openlayers/ol3/pulls/comments/75849817"},"html":{"href":"https://github.com/openlayers/ol3/pull/5290#discussion_r75849817"},"pull_request":{"href":"https://api.github.com/repos/openlayers/ol3/pulls/5290"}}},"pull_request":{"url":"https://api.github.com/repos/openlayers/ol3/pulls/5290","id":68247755,"html_url":"https://github.com/openlayers/ol3/pull/5290","diff_url":"https://github.com/openlayers/ol3/pull/5290.diff","patch_url":"https://github.com/openlayers/ol3/pull/5290.patch","issue_url":"https://api.github.com/repos/openlayers/ol3/issues/5290","number":5290,"state":"open","locked":false,"title":"Add extent interaction","user":{"login":"tbarsballe","id":9271497,"avatar_url":"https://avatars.githubusercontent.com/u/9271497?v=3","gravatar_id":"","url":"https://api.github.com/users/tbarsballe","html_url":"https://github.com/tbarsballe","followers_url":"https://api.github.com/users/tbarsballe/followers","following_url":"https://api.github.com/users/tbarsballe/following{/other_user}","gists_url":"https://api.github.com/users/tbarsballe/gists{/gist_id}","starred_url":"https://api.github.com/users/tbarsballe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tbarsballe/subscriptions","organizations_url":"https://api.github.com/users/tbarsballe/orgs","repos_url":"https://api.github.com/users/tbarsballe/repos","events_url":"https://api.github.com/users/tbarsballe/events{/privacy}","received_events_url":"https://api.github.com/users/tbarsballe/received_events","type":"User","site_admin":false},"body":"As described in https://github.com/openlayers/ol3/issues/5283","created_at":"2016-04-28T16:09:51Z","updated_at":"2016-08-23T11:48:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c19cc2ae59c9d8773b37dc7b0835f3c37dc2e0c8","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/openlayers/ol3/pulls/5290/commits","review_comments_url":"https://api.github.com/repos/openlayers/ol3/pulls/5290/comments","review_comment_url":"https://api.github.com/repos/openlayers/ol3/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openlayers/ol3/issues/5290/comments","statuses_url":"https://api.github.com/repos/openlayers/ol3/statuses/d26a7a656c86d7b65c97aa88708760756e087e40","head":{"label":"tbarsballe:bboxinteraction","ref":"bboxinteraction","sha":"d26a7a656c86d7b65c97aa88708760756e087e40","user":{"login":"tbarsballe","id":9271497,"avatar_url":"https://avatars.githubusercontent.com/u/9271497?v=3","gravatar_id":"","url":"https://api.github.com/users/tbarsballe","html_url":"https://github.com/tbarsballe","followers_url":"https://api.github.com/users/tbarsballe/followers","following_url":"https://api.github.com/users/tbarsballe/following{/other_user}","gists_url":"https://api.github.com/users/tbarsballe/gists{/gist_id}","starred_url":"https://api.github.com/users/tbarsballe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tbarsballe/subscriptions","organizations_url":"https://api.github.com/users/tbarsballe/orgs","repos_url":"https://api.github.com/users/tbarsballe/repos","events_url":"https://api.github.com/users/tbarsballe/events{/privacy}","received_events_url":"https://api.github.com/users/tbarsballe/received_events","type":"User","site_admin":false},"repo":{"id":43781397,"name":"ol3","full_name":"tbarsballe/ol3","owner":{"login":"tbarsballe","id":9271497,"avatar_url":"https://avatars.githubusercontent.com/u/9271497?v=3","gravatar_id":"","url":"https://api.github.com/users/tbarsballe","html_url":"https://github.com/tbarsballe","followers_url":"https://api.github.com/users/tbarsballe/followers","following_url":"https://api.github.com/users/tbarsballe/following{/other_user}","gists_url":"https://api.github.com/users/tbarsballe/gists{/gist_id}","starred_url":"https://api.github.com/users/tbarsballe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tbarsballe/subscriptions","organizations_url":"https://api.github.com/users/tbarsballe/orgs","repos_url":"https://api.github.com/users/tbarsballe/repos","events_url":"https://api.github.com/users/tbarsballe/events{/privacy}","received_events_url":"https://api.github.com/users/tbarsballe/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/tbarsballe/ol3","description":"OpenLayers 3","fork":true,"url":"https://api.github.com/repos/tbarsballe/ol3","forks_url":"https://api.github.com/repos/tbarsballe/ol3/forks","keys_url":"https://api.github.com/repos/tbarsballe/ol3/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tbarsballe/ol3/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tbarsballe/ol3/teams","hooks_url":"https://api.github.com/repos/tbarsballe/ol3/hooks","issue_events_url":"https://api.github.com/repos/tbarsballe/ol3/issues/events{/number}","events_url":"https://api.github.com/repos/tbarsballe/ol3/events","assignees_url":"https://api.github.com/repos/tbarsballe/ol3/assignees{/user}","branches_url":"https://api.github.com/repos/tbarsballe/ol3/branches{/branch}","tags_url":"https://api.github.com/repos/tbarsballe/ol3/tags","blobs_url":"https://api.github.com/repos/tbarsballe/ol3/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tbarsballe/ol3/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tbarsballe/ol3/git/refs{/sha}","trees_url":"https://api.github.com/repos/tbarsballe/ol3/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tbarsballe/ol3/statuses/{sha}","languages_url":"https://api.github.com/repos/tbarsballe/ol3/languages","stargazers_url":"https://api.github.com/repos/tbarsballe/ol3/stargazers","contributors_url":"https://api.github.com/repos/tbarsballe/ol3/contributors","subscribers_url":"https://api.github.com/repos/tbarsballe/ol3/subscribers","subscription_url":"https://api.github.com/repos/tbarsballe/ol3/subscription","commits_url":"https://api.github.com/repos/tbarsballe/ol3/commits{/sha}","git_commits_url":"https://api.github.com/repos/tbarsballe/ol3/git/commits{/sha}","comments_url":"https://api.github.com/repos/tbarsballe/ol3/comments{/number}","issue_comment_url":"https://api.github.com/repos/tbarsballe/ol3/issues/comments{/number}","contents_url":"https://api.github.com/repos/tbarsballe/ol3/contents/{+path}","compare_url":"https://api.github.com/repos/tbarsballe/ol3/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tbarsballe/ol3/merges","archive_url":"https://api.github.com/repos/tbarsballe/ol3/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tbarsballe/ol3/downloads","issues_url":"https://api.github.com/repos/tbarsballe/ol3/issues{/number}","pulls_url":"https://api.github.com/repos/tbarsballe/ol3/pulls{/number}","milestones_url":"https://api.github.com/repos/tbarsballe/ol3/milestones{/number}","notifications_url":"https://api.github.com/repos/tbarsballe/ol3/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tbarsballe/ol3/labels{/name}","releases_url":"https://api.github.com/repos/tbarsballe/ol3/releases{/id}","deployments_url":"https://api.github.com/repos/tbarsballe/ol3/deployments","created_at":"2015-10-06T22:01:12Z","updated_at":"2016-04-27T19:57:15Z","pushed_at":"2016-08-21T18:24:50Z","git_url":"git://github.com/tbarsballe/ol3.git","ssh_url":"git@github.com:tbarsballe/ol3.git","clone_url":"https://github.com/tbarsballe/ol3.git","svn_url":"https://github.com/tbarsballe/ol3","homepage":"http://openlayers.org","size":56696,"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":"openlayers:master","ref":"master","sha":"4c098e04195b71b607bf3990db7a8cc7d0bc9311","user":{"login":"openlayers","id":240579,"avatar_url":"https://avatars.githubusercontent.com/u/240579?v=3","gravatar_id":"","url":"https://api.github.com/users/openlayers","html_url":"https://github.com/openlayers","followers_url":"https://api.github.com/users/openlayers/followers","following_url":"https://api.github.com/users/openlayers/following{/other_user}","gists_url":"https://api.github.com/users/openlayers/gists{/gist_id}","starred_url":"https://api.github.com/users/openlayers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openlayers/subscriptions","organizations_url":"https://api.github.com/users/openlayers/orgs","repos_url":"https://api.github.com/users/openlayers/repos","events_url":"https://api.github.com/users/openlayers/events{/privacy}","received_events_url":"https://api.github.com/users/openlayers/received_events","type":"Organization","site_admin":false},"repo":{"id":4723248,"name":"ol3","full_name":"openlayers/ol3","owner":{"login":"openlayers","id":240579,"avatar_url":"https://avatars.githubusercontent.com/u/240579?v=3","gravatar_id":"","url":"https://api.github.com/users/openlayers","html_url":"https://github.com/openlayers","followers_url":"https://api.github.com/users/openlayers/followers","following_url":"https://api.github.com/users/openlayers/following{/other_user}","gists_url":"https://api.github.com/users/openlayers/gists{/gist_id}","starred_url":"https://api.github.com/users/openlayers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openlayers/subscriptions","organizations_url":"https://api.github.com/users/openlayers/orgs","repos_url":"https://api.github.com/users/openlayers/repos","events_url":"https://api.github.com/users/openlayers/events{/privacy}","received_events_url":"https://api.github.com/users/openlayers/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openlayers/ol3","description":"OpenLayers 3","fork":false,"url":"https://api.github.com/repos/openlayers/ol3","forks_url":"https://api.github.com/repos/openlayers/ol3/forks","keys_url":"https://api.github.com/repos/openlayers/ol3/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openlayers/ol3/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openlayers/ol3/teams","hooks_url":"https://api.github.com/repos/openlayers/ol3/hooks","issue_events_url":"https://api.github.com/repos/openlayers/ol3/issues/events{/number}","events_url":"https://api.github.com/repos/openlayers/ol3/events","assignees_url":"https://api.github.com/repos/openlayers/ol3/assignees{/user}","branches_url":"https://api.github.com/repos/openlayers/ol3/branches{/branch}","tags_url":"https://api.github.com/repos/openlayers/ol3/tags","blobs_url":"https://api.github.com/repos/openlayers/ol3/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openlayers/ol3/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openlayers/ol3/git/refs{/sha}","trees_url":"https://api.github.com/repos/openlayers/ol3/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openlayers/ol3/statuses/{sha}","languages_url":"https://api.github.com/repos/openlayers/ol3/languages","stargazers_url":"https://api.github.com/repos/openlayers/ol3/stargazers","contributors_url":"https://api.github.com/repos/openlayers/ol3/contributors","subscribers_url":"https://api.github.com/repos/openlayers/ol3/subscribers","subscription_url":"https://api.github.com/repos/openlayers/ol3/subscription","commits_url":"https://api.github.com/repos/openlayers/ol3/commits{/sha}","git_commits_url":"https://api.github.com/repos/openlayers/ol3/git/commits{/sha}","comments_url":"https://api.github.com/repos/openlayers/ol3/comments{/number}","issue_comment_url":"https://api.github.com/repos/openlayers/ol3/issues/comments{/number}","contents_url":"https://api.github.com/repos/openlayers/ol3/contents/{+path}","compare_url":"https://api.github.com/repos/openlayers/ol3/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openlayers/ol3/merges","archive_url":"https://api.github.com/repos/openlayers/ol3/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openlayers/ol3/downloads","issues_url":"https://api.github.com/repos/openlayers/ol3/issues{/number}","pulls_url":"https://api.github.com/repos/openlayers/ol3/pulls{/number}","milestones_url":"https://api.github.com/repos/openlayers/ol3/milestones{/number}","notifications_url":"https://api.github.com/repos/openlayers/ol3/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openlayers/ol3/labels{/name}","releases_url":"https://api.github.com/repos/openlayers/ol3/releases{/id}","deployments_url":"https://api.github.com/repos/openlayers/ol3/deployments","created_at":"2012-06-20T06:53:59Z","updated_at":"2016-08-23T05:20:15Z","pushed_at":"2016-08-23T11:45:36Z","git_url":"git://github.com/openlayers/ol3.git","ssh_url":"git@github.com:openlayers/ol3.git","clone_url":"https://github.com/openlayers/ol3.git","svn_url":"https://github.com/openlayers/ol3","homepage":"http://openlayers.org","size":101390,"stargazers_count":2000,"watchers_count":2000,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1034,"mirror_url":null,"open_issues_count":474,"forks":1034,"open_issues":474,"watchers":2000,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openlayers/ol3/pulls/5290"},"html":{"href":"https://github.com/openlayers/ol3/pull/5290"},"issue":{"href":"https://api.github.com/repos/openlayers/ol3/issues/5290"},"comments":{"href":"https://api.github.com/repos/openlayers/ol3/issues/5290/comments"},"review_comments":{"href":"https://api.github.com/repos/openlayers/ol3/pulls/5290/comments"},"review_comment":{"href":"https://api.github.com/repos/openlayers/ol3/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openlayers/ol3/pulls/5290/commits"},"statuses":{"href":"https://api.github.com/repos/openlayers/ol3/statuses/d26a7a656c86d7b65c97aa88708760756e087e40"}}}}
{"actor":{"display_login":"bartvde"}}