{"action":"created","comment":{"url":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/comments/26004731","id":26004731,"diff_hunk":"@@ -0,0 +1,212 @@\n+var d3 = require('d3');\n+require('d3-tip')(d3); // add d3-tip plugin to d3 namespace\n+\n+/**\n+ * ClusterPlot: Object to draw scatterplot of dimension reduced data.\n+ *\n+ * This scatterplot is controlled by a slider that allows the user to\n+ * select the number of k partitions they would like the data clustered into.\n+ * The plot points are coloured according to which cluster they belong to for\n+ * the currently selected k.\n+ *\n+ * @constructor\n+ * @param {array} sampleData - The sample data for the screen. Each element\n+ * in the array is an instance of a Sample document.\n+ * @param {string} element - The ID of the target div for this plot.\n+ */\n+function ClusterPlot(sampleData, element) {\n+    this.clusterMin = 2;\n+    this.clusterMax = 20;\n+    this.clusterMid = Math.round((this.clusterMax+this.clusterMin)/2);\n+    this.sampleData = sampleData;\n+\n+    this.element = element;\n+    this.fullWidth = 650;\n+    this.fullHeight = 450;\n+    this.pointRadius = 5;\n+    this.xAxisTicks = 10;\n+    this.yAxisTicks = 10;\n+\n+    this.margin = {top: 10, right: 40, bottom: 30, left: 40};\n+    this.width = this.fullWidth - this.margin.left - this.margin.right;\n+    this.height = this.fullHeight - this.margin.top - this.margin.bottom;\n+\n+    this.colourScale = d3.scale.category20();\n+    this.drawScatterplot();\n+    this.mountSlider();\n+}\n+\n+/**\n+ * drawScatterplot: Draw the scatterplot.\n+ *\n+ * Draw the SVG canvas, axis, scatterplot points and tooltips.\n+ *\n+ * @this {NeighbourPlot}\n+ */\n+ClusterPlot.prototype.drawScatterplot = function() {\n+    var self = this;\n+    self.destroy();\n+\n+    // find min/max for each axis\n+    var xMin = d3.min(self.sampleData, function(d) { return d.pca[0]; });\n+    var yMin = d3.min(self.sampleData, function(d) { return d.pca[1]; });\n+    var xMax = d3.max(self.sampleData, function(d) { return d.pca[0]; });\n+    var yMax = d3.max(self.sampleData, function(d) { return d.pca[1]; });\n+\n+    // setup scales and axis\n+    var xScale = d3.scale.linear()\n+        .domain([xMin-1, xMax+1])\n+        .range([0, self.width]);\n+    var xAxis = d3.svg.axis()\n+        .scale(xScale)\n+        .ticks(self.xAxisTicks)\n+        .orient('bottom');\n+\n+    var yScale = d3.scale.linear()\n+        .domain([yMin-1, yMax+1])\n+        .range([self.height, 0]);\n+    var yAxis = d3.svg.axis()\n+        .scale(yScale)\n+        .ticks(self.yAxisTicks)\n+        .orient('left');\n+\n+    // tooltip function\n+    var tip = d3.tip()\n+        .attr('class', 'd3-tip')\n+        .offset([-10, 0])\n+        .html(function(d) {\n+            return \"<p><strong>ID: </strong>\" + d._id + \"</p>\" +\n+                \"<p><strong>Gene: </strong>\" + d.gene_name + \"</p>\" +\n+                \"<p><strong>Cluster: </strong>\" +\n+                (d.cluster_member[self.clusterMid-self.clusterMin] + 1) + \"</span></p>\";\n+        });\n+\n+    // setup canvas\n+    self.svg = d3.select(self.element).append('svg')\n+        .attr('width', self.width + self.margin.left + self.margin.right)\n+        .attr('height', self.height + self.margin.top + self.margin.bottom)\n+        .append('g')\n+        .attr('transform', 'translate(' + self.margin.left + ',' + self.margin.top + ')')\n+        .call(tip);\n+\n+    // add scatter points\n+    self.svg.selectAll('circle')\n+        .data(self.sampleData)\n+        .enter()\n+        .append('circle')\n+        .attr('cx', function(d) {\n+            return xScale(d.pca[0]);\n+        })\n+        .attr('cy', function(d) {\n+            return yScale(d.pca[1]);\n+        })\n+        .attr('r', self.pointRadius)\n+        .attr('stroke', 'white')\n+        .attr('fill', function(d) {\n+            var cluster_id = d.cluster_member[self.clusterMid-self.clusterMin];\n+            return self.colourScale(cluster_id);\n+        })\n+        .attr('id', function(d) {\n+            return d._id;\n+        })\n+        .on('mouseover', tip.show)\n+        .on('mouseout', tip.hide);\n+\n+    // append axis\n+    self.svg.append('g')\n+        .attr('class', 'x axis')\n+        .attr('transform', 'translate(0,' + self.height + ')')\n+        .call(xAxis);\n+\n+    self.svg.append('g')\n+        .attr('class', 'y axis')\n+        .call(yAxis);\n+\n+    // append axis labels\n+    self.svg.append('text')\n+        .attr('transform', 'translate(' + self.width/2 + ' ,' + (self.height +\n+        self.margin.bottom) + ')')\n+        .style('text-anchor', 'middle')\n+        .text('PC1');\n+\n+    self.svg.append('text')\n+        .attr('transform', 'rotate(-90)')\n+        .attr('y', -self.margin.left)\n+        .attr('x', -self.height/2)\n+        .attr('dy', '1em')\n+        .style('text-anchor', 'middle')\n+        .text('PC2');\n+};\n+\n+/**\n+ * redrawClusters: Update the scatterplot points.\n+ *\n+ * When a new value of k is chosen, update the colouring of the\n+ * scatterplot points and their tool-tips to show which cluster they\n+ * belong to.\n+ *\n+ * @this {redrawClusters}\n+ * @param {int} newk - The number of k partitions to cluster the data into.\n+ */\n+ClusterPlot.prototype.redrawClusters = function(newk) {\n+    var self = this;\n+\n+    //reset tooltips\n+    var tip = d3.tip()\n+        .attr('class', 'd3-tip')\n+        .offset([-10, 0])\n+        .html(function(d) {\n+            return \"<p><strong>ID: </strong>\" + d._id + \"</p>\" +\n+                \"<p><strong>Gene: </strong>\" + d.gene_name + \"</p>\" +\n+                \"<p><strong>Cluster: </strong>\" +\n+                (d.cluster_member[newk-self.clusterMin] + 1) + \"</span></p>\";\n+        });\n+\n+    d3.selectAll('.d3-tip').remove();\n+\n+    // recolour points\n+    self.svg.selectAll('circle')\n+        .data(self.sampleData)\n+        .attr('fill', function(d) {\n+            var cluster_id = d.cluster_member[newk-self.clusterMin];\n+            return self.colourScale(cluster_id);\n+        })\n+        .on('mouseover', tip.show)\n+        .on('mouseout', tip.hide)\n+        .call(tip);\n+};\n+\n+/**\n+ * destroy: Remove all child SVG elements of the plot objects containing div.\n+ *\n+ * @this {Lineplot}","path":"public/js/ClusterPlot.js","position":182,"original_position":182,"commit_id":"e2a841c1422ab83f2d9c8e56c1f4facb47df2813","original_commit_id":"e2a841c1422ab83f2d9c8e56c1f4facb47df2813","user":{"login":"jni","id":492549,"avatar_url":"https://avatars.githubusercontent.com/u/492549?v=3","gravatar_id":"","url":"https://api.github.com/users/jni","html_url":"https://github.com/jni","followers_url":"https://api.github.com/users/jni/followers","following_url":"https://api.github.com/users/jni/following{/other_user}","gists_url":"https://api.github.com/users/jni/gists{/gist_id}","starred_url":"https://api.github.com/users/jni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jni/subscriptions","organizations_url":"https://api.github.com/users/jni/orgs","repos_url":"https://api.github.com/users/jni/repos","events_url":"https://api.github.com/users/jni/events{/privacy}","received_events_url":"https://api.github.com/users/jni/received_events","type":"User","site_admin":false},"body":"Nevermind, I see now Lineplot is your own. But is it the right `this`, here? Or just the result of some over-eager copy-pasting? ;)","created_at":"2015-03-08T12:38:56Z","updated_at":"2015-03-08T12:38:56Z","html_url":"https://github.com/microscopium/microscopium-ui/pull/34#discussion_r26004731","pull_request_url":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/34","_links":{"self":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/comments/26004731"},"html":{"href":"https://github.com/microscopium/microscopium-ui/pull/34#discussion_r26004731"},"pull_request":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/34"}}},"pull_request":{"url":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/34","id":29956479,"html_url":"https://github.com/microscopium/microscopium-ui/pull/34","diff_url":"https://github.com/microscopium/microscopium-ui/pull/34.diff","patch_url":"https://github.com/microscopium/microscopium-ui/pull/34.patch","issue_url":"https://api.github.com/repos/microscopium/microscopium-ui/issues/34","number":34,"state":"open","locked":false,"title":"Add Browserify and re-write plot functions as objects","user":{"login":"starcalibre","id":7637964,"avatar_url":"https://avatars.githubusercontent.com/u/7637964?v=3","gravatar_id":"","url":"https://api.github.com/users/starcalibre","html_url":"https://github.com/starcalibre","followers_url":"https://api.github.com/users/starcalibre/followers","following_url":"https://api.github.com/users/starcalibre/following{/other_user}","gists_url":"https://api.github.com/users/starcalibre/gists{/gist_id}","starred_url":"https://api.github.com/users/starcalibre/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/starcalibre/subscriptions","organizations_url":"https://api.github.com/users/starcalibre/orgs","repos_url":"https://api.github.com/users/starcalibre/repos","events_url":"https://api.github.com/users/starcalibre/events{/privacy}","received_events_url":"https://api.github.com/users/starcalibre/received_events","type":"User","site_admin":false},"body":"Okay, this is a pretty significant PR.. but I think this takes the quality of the code from 'something hacked together by a noob who has no idea WTF' to something approaching quality. Happy to run through it in person if need be!\r\n\r\n* Plots have now been re-written as objects with methods for drawing and updating. This makes the plots much more modular and easier to understand, and when a filter is applied to the data we'll be able to update the bare minimum needed to reflect the new data. The old plots were 'draw once' type functions, so the whole plot needed to be re-drawn if the data changed. Another advantage to this approach is that plots can be re-usable, so we could say draw two lineplots to allow a user to compare feature distributions of two samples at once.\r\n\r\n* The 'active' feature selected in the lineplot stays the same even after you select a new sample from the PCA plot.\r\n\r\n* All JS files are now Browserified! Now that modules can now be imported with 'require' on the front-end, dependencies are now loaded in NPM instead of Bower where possible. Bower is used for libraries where there's CSS being imported (eg Bootstrap, Font-Awesome, Slidebars) or when we want the library to be global (eg jQuery and jQuery plugins). This means you HAVE to use grunt whenever you run the UI locally to make sure all the JS files get browserified first. Also remember to ``npm install && bower install`` if you run this locally too.\r\n\r\n* Lodash has been used whenever possible for array operations. Lodash usually outperforms Javascript for many operations.\r\n\r\nOnce this is merged, I can add methods to the plots that will update them whenever the Filter is updated.","created_at":"2015-02-25T02:30:14Z","updated_at":"2015-03-08T12:38:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"047f00781043904dba76beb1e3c4c7c1ee26cb99","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/34/commits","review_comments_url":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/34/comments","review_comment_url":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/comments{/number}","comments_url":"https://api.github.com/repos/microscopium/microscopium-ui/issues/34/comments","statuses_url":"https://api.github.com/repos/microscopium/microscopium-ui/statuses/e2a841c1422ab83f2d9c8e56c1f4facb47df2813","head":{"label":"starcalibre:browserify-all-the-things","ref":"browserify-all-the-things","sha":"e2a841c1422ab83f2d9c8e56c1f4facb47df2813","user":{"login":"starcalibre","id":7637964,"avatar_url":"https://avatars.githubusercontent.com/u/7637964?v=3","gravatar_id":"","url":"https://api.github.com/users/starcalibre","html_url":"https://github.com/starcalibre","followers_url":"https://api.github.com/users/starcalibre/followers","following_url":"https://api.github.com/users/starcalibre/following{/other_user}","gists_url":"https://api.github.com/users/starcalibre/gists{/gist_id}","starred_url":"https://api.github.com/users/starcalibre/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/starcalibre/subscriptions","organizations_url":"https://api.github.com/users/starcalibre/orgs","repos_url":"https://api.github.com/users/starcalibre/repos","events_url":"https://api.github.com/users/starcalibre/events{/privacy}","received_events_url":"https://api.github.com/users/starcalibre/received_events","type":"User","site_admin":false},"repo":{"id":29283595,"name":"microscopium-ui","full_name":"starcalibre/microscopium-ui","owner":{"login":"starcalibre","id":7637964,"avatar_url":"https://avatars.githubusercontent.com/u/7637964?v=3","gravatar_id":"","url":"https://api.github.com/users/starcalibre","html_url":"https://github.com/starcalibre","followers_url":"https://api.github.com/users/starcalibre/followers","following_url":"https://api.github.com/users/starcalibre/following{/other_user}","gists_url":"https://api.github.com/users/starcalibre/gists{/gist_id}","starred_url":"https://api.github.com/users/starcalibre/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/starcalibre/subscriptions","organizations_url":"https://api.github.com/users/starcalibre/orgs","repos_url":"https://api.github.com/users/starcalibre/repos","events_url":"https://api.github.com/users/starcalibre/events{/privacy}","received_events_url":"https://api.github.com/users/starcalibre/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/starcalibre/microscopium-ui","description":"Microscopium web interface.","fork":true,"url":"https://api.github.com/repos/starcalibre/microscopium-ui","forks_url":"https://api.github.com/repos/starcalibre/microscopium-ui/forks","keys_url":"https://api.github.com/repos/starcalibre/microscopium-ui/keys{/key_id}","collaborators_url":"https://api.github.com/repos/starcalibre/microscopium-ui/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/starcalibre/microscopium-ui/teams","hooks_url":"https://api.github.com/repos/starcalibre/microscopium-ui/hooks","issue_events_url":"https://api.github.com/repos/starcalibre/microscopium-ui/issues/events{/number}","events_url":"https://api.github.com/repos/starcalibre/microscopium-ui/events","assignees_url":"https://api.github.com/repos/starcalibre/microscopium-ui/assignees{/user}","branches_url":"https://api.github.com/repos/starcalibre/microscopium-ui/branches{/branch}","tags_url":"https://api.github.com/repos/starcalibre/microscopium-ui/tags","blobs_url":"https://api.github.com/repos/starcalibre/microscopium-ui/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/starcalibre/microscopium-ui/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/starcalibre/microscopium-ui/git/refs{/sha}","trees_url":"https://api.github.com/repos/starcalibre/microscopium-ui/git/trees{/sha}","statuses_url":"https://api.github.com/repos/starcalibre/microscopium-ui/statuses/{sha}","languages_url":"https://api.github.com/repos/starcalibre/microscopium-ui/languages","stargazers_url":"https://api.github.com/repos/starcalibre/microscopium-ui/stargazers","contributors_url":"https://api.github.com/repos/starcalibre/microscopium-ui/contributors","subscribers_url":"https://api.github.com/repos/starcalibre/microscopium-ui/subscribers","subscription_url":"https://api.github.com/repos/starcalibre/microscopium-ui/subscription","commits_url":"https://api.github.com/repos/starcalibre/microscopium-ui/commits{/sha}","git_commits_url":"https://api.github.com/repos/starcalibre/microscopium-ui/git/commits{/sha}","comments_url":"https://api.github.com/repos/starcalibre/microscopium-ui/comments{/number}","issue_comment_url":"https://api.github.com/repos/starcalibre/microscopium-ui/issues/comments{/number}","contents_url":"https://api.github.com/repos/starcalibre/microscopium-ui/contents/{+path}","compare_url":"https://api.github.com/repos/starcalibre/microscopium-ui/compare/{base}...{head}","merges_url":"https://api.github.com/repos/starcalibre/microscopium-ui/merges","archive_url":"https://api.github.com/repos/starcalibre/microscopium-ui/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/starcalibre/microscopium-ui/downloads","issues_url":"https://api.github.com/repos/starcalibre/microscopium-ui/issues{/number}","pulls_url":"https://api.github.com/repos/starcalibre/microscopium-ui/pulls{/number}","milestones_url":"https://api.github.com/repos/starcalibre/microscopium-ui/milestones{/number}","notifications_url":"https://api.github.com/repos/starcalibre/microscopium-ui/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/starcalibre/microscopium-ui/labels{/name}","releases_url":"https://api.github.com/repos/starcalibre/microscopium-ui/releases{/id}","created_at":"2015-01-15T06:12:36Z","updated_at":"2015-01-29T07:06:19Z","pushed_at":"2015-03-08T02:46:55Z","git_url":"git://github.com/starcalibre/microscopium-ui.git","ssh_url":"git@github.com:starcalibre/microscopium-ui.git","clone_url":"https://github.com/starcalibre/microscopium-ui.git","svn_url":"https://github.com/starcalibre/microscopium-ui","homepage":null,"size":6216,"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":"microscopium:master","ref":"master","sha":"4897e60af821fa09a22d4a2027a1181fd073602c","user":{"login":"microscopium","id":10542326,"avatar_url":"https://avatars.githubusercontent.com/u/10542326?v=3","gravatar_id":"","url":"https://api.github.com/users/microscopium","html_url":"https://github.com/microscopium","followers_url":"https://api.github.com/users/microscopium/followers","following_url":"https://api.github.com/users/microscopium/following{/other_user}","gists_url":"https://api.github.com/users/microscopium/gists{/gist_id}","starred_url":"https://api.github.com/users/microscopium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/microscopium/subscriptions","organizations_url":"https://api.github.com/users/microscopium/orgs","repos_url":"https://api.github.com/users/microscopium/repos","events_url":"https://api.github.com/users/microscopium/events{/privacy}","received_events_url":"https://api.github.com/users/microscopium/received_events","type":"Organization","site_admin":false},"repo":{"id":28170352,"name":"microscopium-ui","full_name":"microscopium/microscopium-ui","owner":{"login":"microscopium","id":10542326,"avatar_url":"https://avatars.githubusercontent.com/u/10542326?v=3","gravatar_id":"","url":"https://api.github.com/users/microscopium","html_url":"https://github.com/microscopium","followers_url":"https://api.github.com/users/microscopium/followers","following_url":"https://api.github.com/users/microscopium/following{/other_user}","gists_url":"https://api.github.com/users/microscopium/gists{/gist_id}","starred_url":"https://api.github.com/users/microscopium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/microscopium/subscriptions","organizations_url":"https://api.github.com/users/microscopium/orgs","repos_url":"https://api.github.com/users/microscopium/repos","events_url":"https://api.github.com/users/microscopium/events{/privacy}","received_events_url":"https://api.github.com/users/microscopium/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/microscopium/microscopium-ui","description":"Microscopium web interface.","fork":false,"url":"https://api.github.com/repos/microscopium/microscopium-ui","forks_url":"https://api.github.com/repos/microscopium/microscopium-ui/forks","keys_url":"https://api.github.com/repos/microscopium/microscopium-ui/keys{/key_id}","collaborators_url":"https://api.github.com/repos/microscopium/microscopium-ui/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/microscopium/microscopium-ui/teams","hooks_url":"https://api.github.com/repos/microscopium/microscopium-ui/hooks","issue_events_url":"https://api.github.com/repos/microscopium/microscopium-ui/issues/events{/number}","events_url":"https://api.github.com/repos/microscopium/microscopium-ui/events","assignees_url":"https://api.github.com/repos/microscopium/microscopium-ui/assignees{/user}","branches_url":"https://api.github.com/repos/microscopium/microscopium-ui/branches{/branch}","tags_url":"https://api.github.com/repos/microscopium/microscopium-ui/tags","blobs_url":"https://api.github.com/repos/microscopium/microscopium-ui/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/microscopium/microscopium-ui/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/microscopium/microscopium-ui/git/refs{/sha}","trees_url":"https://api.github.com/repos/microscopium/microscopium-ui/git/trees{/sha}","statuses_url":"https://api.github.com/repos/microscopium/microscopium-ui/statuses/{sha}","languages_url":"https://api.github.com/repos/microscopium/microscopium-ui/languages","stargazers_url":"https://api.github.com/repos/microscopium/microscopium-ui/stargazers","contributors_url":"https://api.github.com/repos/microscopium/microscopium-ui/contributors","subscribers_url":"https://api.github.com/repos/microscopium/microscopium-ui/subscribers","subscription_url":"https://api.github.com/repos/microscopium/microscopium-ui/subscription","commits_url":"https://api.github.com/repos/microscopium/microscopium-ui/commits{/sha}","git_commits_url":"https://api.github.com/repos/microscopium/microscopium-ui/git/commits{/sha}","comments_url":"https://api.github.com/repos/microscopium/microscopium-ui/comments{/number}","issue_comment_url":"https://api.github.com/repos/microscopium/microscopium-ui/issues/comments{/number}","contents_url":"https://api.github.com/repos/microscopium/microscopium-ui/contents/{+path}","compare_url":"https://api.github.com/repos/microscopium/microscopium-ui/compare/{base}...{head}","merges_url":"https://api.github.com/repos/microscopium/microscopium-ui/merges","archive_url":"https://api.github.com/repos/microscopium/microscopium-ui/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/microscopium/microscopium-ui/downloads","issues_url":"https://api.github.com/repos/microscopium/microscopium-ui/issues{/number}","pulls_url":"https://api.github.com/repos/microscopium/microscopium-ui/pulls{/number}","milestones_url":"https://api.github.com/repos/microscopium/microscopium-ui/milestones{/number}","notifications_url":"https://api.github.com/repos/microscopium/microscopium-ui/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/microscopium/microscopium-ui/labels{/name}","releases_url":"https://api.github.com/repos/microscopium/microscopium-ui/releases{/id}","created_at":"2014-12-18T05:52:59Z","updated_at":"2015-02-24T02:53:07Z","pushed_at":"2015-02-24T02:53:07Z","git_url":"git://github.com/microscopium/microscopium-ui.git","ssh_url":"git@github.com:microscopium/microscopium-ui.git","clone_url":"https://github.com/microscopium/microscopium-ui.git","svn_url":"https://github.com/microscopium/microscopium-ui","homepage":null,"size":6271,"stargazers_count":2,"watchers_count":2,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":19,"forks":2,"open_issues":19,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/34"},"html":{"href":"https://github.com/microscopium/microscopium-ui/pull/34"},"issue":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/issues/34"},"comments":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/issues/34/comments"},"review_comments":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/34/comments"},"review_comment":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/pulls/34/commits"},"statuses":{"href":"https://api.github.com/repos/microscopium/microscopium-ui/statuses/e2a841c1422ab83f2d9c8e56c1f4facb47df2813"}}}}