{"action":"created","comment":{"url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/comments/30733317","id":30733317,"diff_hunk":"@@ -0,0 +1,430 @@\n+<?php\n+\n+include_once(\"../../../s2s/opensearch/utils.php\");\n+\n+// parent class S2SConfig\n+include_once(\"../../../s2s/opensearch/config.php\");\n+\n+class DCO_Datatypes_S2SConfig extends S2SConfig {\n+\t\n+\tprivate $namespaces = array(\n+\t\t'dco'\t=> \"http://info.deepcarbon.net/schema#\",\n+\t\t'vivo'\t=> \"http://vivoweb.org/ontology/core#\",\n+\t\t'bibo'\t=> \"http://purl.org/ontology/bibo/\",\n+\t\t'rdfs'\t=> \"http://www.w3.org/2000/01/rdf-schema#\",\n+\t\t'xsd'\t=> \"http://www.w3.org/2001/XMLSchema#\",\n+\t\t'skos'\t=> \"http://www.w3.org/2004/02/skos/core#\",\n+\t\t'prov'  => \"http://www.w3.org/ns/prov#\"\n+\t);\n+\n+\t/**\n+\t* Return SPARQL endpoint URL\n+\t* @return string SPARQL endpoint URL\n+\t*/\n+\tpublic function getEndpoint() {\n+\t\treturn \"http://deepcarbon.tw.rpi.edu:3030/VIVO/query\";\n+\t}\n+\n+\t/**\n+\t* Return array of prefix, namespace key-value pairs\n+\t* @return array of prefix, namespace key-value pairs\n+\t*/\n+\tpublic function getNamespaces() {\n+\t\treturn $this->namespaces;\n+\t}\n+\t\n+\t/**\n+\t* Execute SPARQL select query\n+\t* @param string $query SPARQL query to execute\n+\t* @return array an array of associative arrays containing the bindings of the query results\n+\t*/\n+\tpublic function sparqlSelect($query) {\n+\t\n+\t\t$options = array(\n+\t\t\tCURLOPT_FOLLOWLOCATION => true,\n+\t\t\tCURLOPT_CONNECTTIMEOUT => 5,\n+\t\t\tCURLOPT_TIMEOUT => 120\n+\t\t);\n+\t\t\t\t\n+\t\t$encoded_query = 'query=' . urlencode($query) . '&output=xml';\n+\t\treturn execSelect($this->getEndpoint(), $encoded_query, $options);\n+\t}\n+\n+\t/**\n+\t* Get parameters for a given data type\n+\t* @param string $datatype datatype uri\n+\t* @return array an array of associative arrays containing Parameters of a data type\n+\t*/\n+\tprivate function getParametersByDatatype($datatype) {\n+\t\t$query = $this->getPrefixes();\n+\t\t$query .= \"SELECT DISTINCT ?uri ?label ?unit WHERE { \";\n+\t\t$query .= \"<$datatype> dco:hasParameter ?uri . \";\n+\t\t$query .= \"?uri a dco:Parameter . \";\n+\t\t$query .= \"?uri rdfs:label ?label . \";\n+\t\t$query .= \"?uri dco:hasUnit ?unit . \";\n+\t\t$query .= \"BIND(str(?label) AS ?label) . \";\n+\t\t$query .= \"BIND(str(?unit) AS ?unit) } \";\n+\t\treturn $this->sparqlSelect($query);\n+\t}\n+\n+\t/*\n+\t* Get Subject Area for a given datatype\n+\t* @param string $datatype datatype uri\n+\t* @return array an array of associative arrays containing Subject Area of a data type\n+\t*/\n+\tprivate function getSubjectAreaByDatatype($datatype) {\n+\n+\t\t$query = $this->getPrefixes();\n+\t\t$query .= \"SELECT DISTINCT ?concept WHERE { \";\n+\t\t$query .= \"<$datatype> vivo:hasSubjectArea ?concept . \";\n+\t\t$query .= \"?concept a skos:Concept . \";\n+\t\t$query .= \"?BIND(str(?concept) AS ?concept) } \";\n+\t\treturn $this->sparqlSelect($query);\n+\t}\n+\n+\t/*\n+\t* Get Datasets for a given datatype\n+\t* @param string $datatype datatype uri\n+\t* @return array an array of associative arrays containing datasets assoicated with a data type\n+\t*/\n+\tprivate function getDatasetsByDatatype($datatype) {\n+\n+\t\t$query = $this->getPrefixes();\n+\t\t$query .= \"SELECT DISTINCT ?uri ?label WHERE { \";\n+\t\t$query .= \"?d dco:hasDataType <$datatype> . \";\n+\t\t$query .= \"?d a vivo:Dataset . \";\n+\t\t$query .= \"?d dco:hasDcoId ?uri . \";\n+\t\t$query .= \"?d rdfs:label ?label . \";\n+\t\t$query .= \"BIND(str(?label) AS ?label) } \";\n+\t\treturn $this->sparqlSelect($query);\n+\t}\n+\n+\t/*\n+\t* Get details of a data type\n+\t* @param string $datatype datatype uri\n+\t* @return array an array of associative arrays containing details of a data type\n+\t*/\n+\tprivate function getDetailsOfDatatype($datatype) {\n+\n+\t\t$query = $this->getPrefixes();\n+\t\t$query .= \"SELECT DISTINCT ?uri ?label ?creationTime ?lastModifiedTime ?expectedUses WHERE { \";\n+\t\t$query .= \"<$datatype> dco:hasDcoId ?uri . \";\n+\t\t$query .= \"<$datatype> rdfs:label ?label . \";\n+\t\t$query .= \"<$datatype> dco:createdAtTime ?creationTime . \";\n+\t\t$query .= \"<$datatype> dco:lastModifiedAtTime ?lastModifiedTime . \";\n+\t\t$query .= \"<$datatype> dco:expectedUses ?expectedUses . \";\n+\t\t$query .= \"BIND(str(?label) AS ?label) . \";\n+\t\t$query .= \"BIND(str(?creationTime) AS ?creationTime) . \";\n+\t\t$query .= \"BIND(str(?lastModifiedTime) AS ?lastModifiedTime) . \";\n+\t\t$query .= \"BIND(str(?expectedUses) AS ?expectedUses) } \";\n+\t\treturn $this->sparqlSelect($query);\n+\t}\n+\n+\t/**\n+\t* Return count of total search results for specified constraints\n+\t* @param array $constraints array of arrays with search constraints\n+\t* @result int search result count\n+\t*/\n+\tpublic function getSearchResultCount(array $constraints) {\n+\t\t\n+\t\t$query = $this->getSelectQuery(\"count\", $constraints);\n+\t\t$results = $this->sparqlSelect($query);\n+\t\t$result = $results[0];\n+\t\treturn $result['count'];\n+\t}\n+\n+\t/**\n+\t* Create HTML of search result\n+\t* @param array $result query result to be processed into HTML\n+\t* @return string HTML div of search result entry\n+\t*/\n+\tpublic function getSearchResultOutput(array $result) {\n+\n+\t\t$html = \"<div class='result-list-item'>\";\n+\n+\t\t// label\n+\t\t$datatype_summary_url = \"http://deepcarbon.net/dco_datatype_summary?uri=\" . $result['datatype'];\n+\t\t$html .= \"<span class='title'><a target='_blank' href=\\\"\" . $datatype_summary_url . \"\\\">\" . $result['label'] . \"</a></span>\";\n+\t\t\t\n+\t\t// DCO-ID\n+\t\tif (isset($result['dco_id'])) {\n+\t\t\t$dco_id_label = substr(@$result['dco_id'], 25);\n+\t\t\t$html .= \"<br /><span>DCO ID: <a target='_blank' href=\\\"\" . $result['dco_id'] . \"\\\">\" . $dco_id_label . \"</a></span>\";\n+\t\t}\n+\n+\t\t// Author\n+\t\tif (isset($result['creator'])) {\n+\t\t\t$html .= \"<br /><span>Author: \";\n+\t\t\t$auth_arr = explode(\",\", $result['creator']);\n+\t\t\t$auth_label_arr = explode(\",\", $result['creator_label']);\n+\t\t\t$authors_markup = array();\n+\t\t\tforeach ($auth_arr as $i => $auth) {\n+\t\t\t\tarray_push($authors_markup, \"<a target='_blank' href=\\\"\" . $auth . \"\\\">\" . $auth_label_arr[$i] . \"</a>\");\n+\t\t\t}\n+\t\t\t$html .= implode('; ', $authors_markup);\n+\t\t\t$html .= \"</span>\";\n+\t\t}\n+\n+\t\t// Datatype details\n+\t\t$datatypeDetails = $this->getDetailsOfDatatype($result['datatype']);\n+\t\tif(count($datatypeDetails) > 0){\n+\t\t\t$html .= \"<br /><span>Details: \";\n+\t\t\t$datatypeDetails_markup = array();\n+\t\t\t\tforeach($datatypeDetails as $key => $datatypeDetail){\n+\t\t\t\t\tarray_push($datatypeDetails_markup, \"<a target='_blank' href=\\\"\" . $datatypeDetail['uri'] . \"\\\">\" . $datatypeDetail['label'] . \"</a>\", \"<br>\" . $datatypeDetail['creationTime'], \"<br>\" . $datatypeDetail['lastModifiedTime'], \"<br>\" . $datatypeDetail['expectedUses']);\n+\t\t\t\t}\n+\t\t\t$html .= implode('; ', $datatypeDetails_markup);\n+\t\t\t$html .= \"</span>\";\n+\t\t}\n+\n+\t\t// Source Standard\n+\t\tif (isset($result['sourceStandard'])) {\n+\t\t\t$html .= \"<br /><span>Source Standard: \";\n+\t\t\t$sourceStandard_arr = explode(\",\", $result['sourceStandard']);\n+\t\t\t$sourceStandard_label_arr = explode(\",\", $result['sourceStandard_label']);\n+\t\t\t$sourceStandard_markup = array();\n+\t\t\tforeach ($group_arr as $i => $sourceStandard) {\n+\t\t\t\tarray_push($sourceStandard_markup, \"<a target='_blank' href=\\\"\" . $sourceStandard . \"\\\">\" . $sourceStandard_label_arr[$i] . \"</a>\");\n+\t\t\t}\n+\t\t\t$html .= implode('; ', $sourceStandard_markup);\n+\t\t\t$html .= \"</span>\";\n+\t\t}\n+\n+\t\t// Parameters\n+\t\t$parameters = $this->getParametersByDatatype($result['datatype']);\n+\t\tif (count($parameters) > 0) {\n+\t\t\t$html .= \"<br /><span>Parameters: \";\n+\t\t\tif (count($parameters) > 0) {\n+\t\t\t\t$parameters_markup = array();\n+\t\t\t\tforeach ($parameters as $i => $parameter) {\t\n+\t\t\t\t\tarray_push($parameters_markup, \"<a target='_blank' href=\\\"\" . $parameter['uri'] . \"\\\">\" . $parameter['label'] . \"</a>\", \"<br>\" . $parameter['hasUnit']);\n+\t\t\t\t}\n+\t\t\t\t$html .= implode('; ', $parameters_markup);\n+\t\t\t}\n+\t\t\t$html .= \"</span>\";\n+\t\t}\n+\n+\t\t// Subject Area\n+\t\t$subjectAreas = $this->getSubjectAreaByDatatype($result['datatype']);\n+\t\tif(count($subjectAreas) > 0){\n+\t\t\t$html .= \"<br /><span>Subject Area: \";\n+\t\t\t$subjectAreas_markup = array();\n+\t\t\t\tforeach($subjectAreas as $key => $subjectArea){\n+\t\t\t\t\tarray_push($subjectAreas_markup, $subjectArea['concept']);\n+\t\t\t\t}\n+\t\t\t$html .= implode('; ', $subjectAreas_markup);\n+\t\t\t$html .= \"</span>\";\n+\t\t}\n+\n+\t\t// Datasets\n+\t\t$datasets = $this->getDatasetsByDatatype($result['datatype']);\n+\t\tif(count($datasets) > 0){\n+\t\t\t$html .= \"<br /><span>Datasets: \";\n+\t\t\t$datasets_markup = array();\n+\t\t\t\tforeach($datasets as $key => $dataset){\n+\t\t\t\t\tarray_push($datasets_markup, \"<a target='_blank' href=\\\"\" . $dataset['uri'] . \"\\\">\" . $dataset['label'] . \"</a>\");\n+\t\t\t\t}\n+\t\t\t$html .= implode('; ', $datasets_markup);\n+\t\t\t$html .= \"</span>\";\n+\t\t}\n+\n+\t\t// access\n+\t\tif (isset($result['access'])) {\n+\t\t\t$html .= \"<br /><span>Access restriction: \" . $result['access'] . \"</span>\";\n+\t\t}\n+\n+\t\t$html .= \"</div>\";\n+\t\treturn $html;\n+\t}\n+\t\n+\t/**\n+\t* Return SPARQL query header component\n+\t* @param string $type search type (e.g. 'parameters', 'authors', 'keywords')\n+\t* @return string query header component (e.g. 'SELECT ?id ?label')\n+\t*/\n+\tpublic function getQueryHeader($type) {\n+\t\n+\t\t$header = \"\";\n+\t\tswitch($type) {\n+\t\t\tcase \"datatypes\":\n+\t\t\t\t$header .= \"?datatype ?dco_id ?label ?year ?parameterLabel ?access \";\n+\t\t\t\t$header .= '(GROUP_CONCAT(DISTINCT ?creator ; SEPARATOR=\",\") AS ?creator) ';\n+\t\t\t\t$header .= '(GROUP_CONCAT(DISTINCT ?creator_label ; SEPARATOR=\",\") AS ?creator_label) ';\n+\t\t\t\t$header .= '(GROUP_CONCAT(DISTINCT ?sourceStandard ; SEPARATOR=\",\") AS ?sourceStandard) ';\n+                $header .= '(GROUP_CONCAT(DISTINCT ?sourceStandard_label ; SEPARATOR=\",\") AS ?sourceStandard_label) ';\n+\t\t\t\tbreak;\n+\t\t\tcase \"count\":\n+\t\t\t\t$header .= \"(count(DISTINCT ?datatype) AS ?count)\";\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$header .= \"?id ?label (COUNT(DISTINCT ?datatype) AS ?count)\";\n+\t\t\t\tbreak;\n+\t\t}\n+\t\treturn $header;\n+\t}\n+\t\n+\t/**\n+\t* Return SPARQL query footer component\n+\t* @param string $type search type (e.g. 'parameters', 'authors', 'keywords')\n+\t* @param int $limit size of result set\n+\t* @param int $offset offset into result set\n+\t* @param string $sort query result sort parameter\n+\t* @return string query footer component (e.g. 'GROUP BY ?label ?id')\n+\t*/\n+\tpublic function getQueryFooter($type, $limit=null, $offset=0, $sort=null) {\n+\t\n+\t\t$footer = \"\";\n+\t\tswitch($type) {\n+\t\t\tcase \"datatypes\":\n+\t\t\t\t$footer .= \" GROUP BY ?datatype ?dco_id ?label ?year ?parameterLabel ?access\";\n+\t\t\t\t$footer .= \" ORDER BY ?label\";\n+\t\t\t\tif ($limit)\t$footer .= \" LIMIT $limit OFFSET $offset\";\n+\t\t\t\tbreak;\n+\t\t\tcase \"count\":\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$footer .= \" GROUP BY ?label ?id\";\n+\t\t\t\tbreak;\n+\t\t}\n+\t\treturn $footer;\n+\t}\n+\t\n+\t/**\n+\t  * Return SPARQL query WHERE clause minus constraint clauses for specified search type\n+\t  * @param string $type search type (e.g. 'datasets', 'authors', 'keywords')\n+\t  * @return string WHERE clause component minus constraint clauses (e.g. '?dataset a dcat:Dataset . ')\n+\t  */\n+\tpublic function getQueryBody($type) {\n+\t\t\n+\t\t$body = \"\";\n+\t\tswitch($type) {\n+\t\t\tcase \"creationYear\":\n+\t\t\t\t$body .= \"?datatype a dco:DataType . \";\n+\t\t\t\t$body .= \"?datatype  dco:createdAtTime ?t . \";\n+\t\t\t\t$body .= \"BIND(str(?t) AS ?year) . \";\n+\t\t\t\tbreak;\n+\t\t\t\t\n+\t\t\tcase \"creator\":\n+\t\t\t\t$body .= \"?datatype a dco:DataType . \";\n+\t\t\t\t$body .= \"?datatype prov:qualifiedAttribution [prov:hadRole ?r ] . \";\n+\t\t\t\t$body .= \"?r a prov:Role . \";\n+\t\t\t\t$body .= \"?c rdf:type ?r . \";\n+\t\t\t\t$body .= \"?c a dco:creator . \";\n+\t\t\t\t$body .= \"BIND(str(?c) AS ?creator) . \";\n+\t\t\t\tbreak;\n+\n+\t\t\tcase \"parameter\":","path":"opensearch/services/datatypes/datatypes.php","position":316,"original_position":316,"commit_id":"b9c925c8f034bbebe1a87461a8aeecf9211b20a0","original_commit_id":"b9c925c8f034bbebe1a87461a8aeecf9211b20a0","user":{"login":"zednis","id":1057295,"avatar_url":"https://avatars.githubusercontent.com/u/1057295?v=3","gravatar_id":"","url":"https://api.github.com/users/zednis","html_url":"https://github.com/zednis","followers_url":"https://api.github.com/users/zednis/followers","following_url":"https://api.github.com/users/zednis/following{/other_user}","gists_url":"https://api.github.com/users/zednis/gists{/gist_id}","starred_url":"https://api.github.com/users/zednis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zednis/subscriptions","organizations_url":"https://api.github.com/users/zednis/orgs","repos_url":"https://api.github.com/users/zednis/repos","events_url":"https://api.github.com/users/zednis/events{/privacy}","received_events_url":"https://api.github.com/users/zednis/received_events","type":"User","site_admin":false},"body":"The expected parameters to return for this query should be \r\n\r\n``?id ?label (COUNT(DISTINCT ?datatype) AS ?count)``\r\n\r\nand yet the query body does not contain ?id or ?label.\r\n\r\nRewrite to\r\n```\r\n$body .= \"?datatype a dco:DataType . \";\r\n$body .= \"?datatype dco:hasParameter ?id . \";\r\n$body .= \"?id rdfs:label ?l .\";\r\n$body .= \"BIND(str(?l) AS ?label) . \";\r\n```\r\n\r\n","created_at":"2015-05-20T18:26:58Z","updated_at":"2015-05-20T18:26:58Z","html_url":"https://github.com/tetherless-world/dco-s2s-browsers/pull/5#discussion_r30733317","pull_request_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/5","_links":{"self":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/comments/30733317"},"html":{"href":"https://github.com/tetherless-world/dco-s2s-browsers/pull/5#discussion_r30733317"},"pull_request":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/5"}}},"pull_request":{"url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/5","id":35693857,"html_url":"https://github.com/tetherless-world/dco-s2s-browsers/pull/5","diff_url":"https://github.com/tetherless-world/dco-s2s-browsers/pull/5.diff","patch_url":"https://github.com/tetherless-world/dco-s2s-browsers/pull/5.patch","issue_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues/5","number":5,"state":"open","locked":false,"title":"Data type browser","user":{"login":"ApurvaSinha17","id":9153420,"avatar_url":"https://avatars.githubusercontent.com/u/9153420?v=3","gravatar_id":"","url":"https://api.github.com/users/ApurvaSinha17","html_url":"https://github.com/ApurvaSinha17","followers_url":"https://api.github.com/users/ApurvaSinha17/followers","following_url":"https://api.github.com/users/ApurvaSinha17/following{/other_user}","gists_url":"https://api.github.com/users/ApurvaSinha17/gists{/gist_id}","starred_url":"https://api.github.com/users/ApurvaSinha17/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ApurvaSinha17/subscriptions","organizations_url":"https://api.github.com/users/ApurvaSinha17/orgs","repos_url":"https://api.github.com/users/ApurvaSinha17/repos","events_url":"https://api.github.com/users/ApurvaSinha17/events{/privacy}","received_events_url":"https://api.github.com/users/ApurvaSinha17/received_events","type":"User","site_admin":false},"body":"Added code for Data type browser","created_at":"2015-05-19T03:45:09Z","updated_at":"2015-05-20T18:26:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f8fa2ed944e1ea6805484710e6afc9c8055bc7f1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/5/commits","review_comments_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/5/comments","review_comment_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues/5/comments","statuses_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/statuses/b9c925c8f034bbebe1a87461a8aeecf9211b20a0","head":{"label":"tetherless-world:data-type-browser","ref":"data-type-browser","sha":"b9c925c8f034bbebe1a87461a8aeecf9211b20a0","user":{"login":"tetherless-world","id":4519152,"avatar_url":"https://avatars.githubusercontent.com/u/4519152?v=3","gravatar_id":"","url":"https://api.github.com/users/tetherless-world","html_url":"https://github.com/tetherless-world","followers_url":"https://api.github.com/users/tetherless-world/followers","following_url":"https://api.github.com/users/tetherless-world/following{/other_user}","gists_url":"https://api.github.com/users/tetherless-world/gists{/gist_id}","starred_url":"https://api.github.com/users/tetherless-world/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tetherless-world/subscriptions","organizations_url":"https://api.github.com/users/tetherless-world/orgs","repos_url":"https://api.github.com/users/tetherless-world/repos","events_url":"https://api.github.com/users/tetherless-world/events{/privacy}","received_events_url":"https://api.github.com/users/tetherless-world/received_events","type":"Organization","site_admin":false},"repo":{"id":30934485,"name":"dco-s2s-browsers","full_name":"tetherless-world/dco-s2s-browsers","owner":{"login":"tetherless-world","id":4519152,"avatar_url":"https://avatars.githubusercontent.com/u/4519152?v=3","gravatar_id":"","url":"https://api.github.com/users/tetherless-world","html_url":"https://github.com/tetherless-world","followers_url":"https://api.github.com/users/tetherless-world/followers","following_url":"https://api.github.com/users/tetherless-world/following{/other_user}","gists_url":"https://api.github.com/users/tetherless-world/gists{/gist_id}","starred_url":"https://api.github.com/users/tetherless-world/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tetherless-world/subscriptions","organizations_url":"https://api.github.com/users/tetherless-world/orgs","repos_url":"https://api.github.com/users/tetherless-world/repos","events_url":"https://api.github.com/users/tetherless-world/events{/privacy}","received_events_url":"https://api.github.com/users/tetherless-world/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/tetherless-world/dco-s2s-browsers","description":"DCO S2S Browsers","fork":false,"url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers","forks_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/forks","keys_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/teams","hooks_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/hooks","issue_events_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues/events{/number}","events_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/events","assignees_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/assignees{/user}","branches_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/branches{/branch}","tags_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/tags","blobs_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/refs{/sha}","trees_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/statuses/{sha}","languages_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/languages","stargazers_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/stargazers","contributors_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/contributors","subscribers_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/subscribers","subscription_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/subscription","commits_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/commits{/sha}","git_commits_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/commits{/sha}","comments_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/comments{/number}","issue_comment_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues/comments{/number}","contents_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/contents/{+path}","compare_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/merges","archive_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/downloads","issues_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues{/number}","pulls_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls{/number}","milestones_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/milestones{/number}","notifications_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/labels{/name}","releases_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/releases{/id}","created_at":"2015-02-17T19:49:58Z","updated_at":"2015-04-29T01:53:30Z","pushed_at":"2015-05-20T18:14:49Z","git_url":"git://github.com/tetherless-world/dco-s2s-browsers.git","ssh_url":"git@github.com:tetherless-world/dco-s2s-browsers.git","clone_url":"https://github.com/tetherless-world/dco-s2s-browsers.git","svn_url":"https://github.com/tetherless-world/dco-s2s-browsers","homepage":null,"size":6236,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":1,"default_branch":"master"}},"base":{"label":"tetherless-world:master","ref":"master","sha":"2033ff28c1403bd6db0af17ba7cc66a033111cb7","user":{"login":"tetherless-world","id":4519152,"avatar_url":"https://avatars.githubusercontent.com/u/4519152?v=3","gravatar_id":"","url":"https://api.github.com/users/tetherless-world","html_url":"https://github.com/tetherless-world","followers_url":"https://api.github.com/users/tetherless-world/followers","following_url":"https://api.github.com/users/tetherless-world/following{/other_user}","gists_url":"https://api.github.com/users/tetherless-world/gists{/gist_id}","starred_url":"https://api.github.com/users/tetherless-world/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tetherless-world/subscriptions","organizations_url":"https://api.github.com/users/tetherless-world/orgs","repos_url":"https://api.github.com/users/tetherless-world/repos","events_url":"https://api.github.com/users/tetherless-world/events{/privacy}","received_events_url":"https://api.github.com/users/tetherless-world/received_events","type":"Organization","site_admin":false},"repo":{"id":30934485,"name":"dco-s2s-browsers","full_name":"tetherless-world/dco-s2s-browsers","owner":{"login":"tetherless-world","id":4519152,"avatar_url":"https://avatars.githubusercontent.com/u/4519152?v=3","gravatar_id":"","url":"https://api.github.com/users/tetherless-world","html_url":"https://github.com/tetherless-world","followers_url":"https://api.github.com/users/tetherless-world/followers","following_url":"https://api.github.com/users/tetherless-world/following{/other_user}","gists_url":"https://api.github.com/users/tetherless-world/gists{/gist_id}","starred_url":"https://api.github.com/users/tetherless-world/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tetherless-world/subscriptions","organizations_url":"https://api.github.com/users/tetherless-world/orgs","repos_url":"https://api.github.com/users/tetherless-world/repos","events_url":"https://api.github.com/users/tetherless-world/events{/privacy}","received_events_url":"https://api.github.com/users/tetherless-world/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/tetherless-world/dco-s2s-browsers","description":"DCO S2S Browsers","fork":false,"url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers","forks_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/forks","keys_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/teams","hooks_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/hooks","issue_events_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues/events{/number}","events_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/events","assignees_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/assignees{/user}","branches_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/branches{/branch}","tags_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/tags","blobs_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/refs{/sha}","trees_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/statuses/{sha}","languages_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/languages","stargazers_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/stargazers","contributors_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/contributors","subscribers_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/subscribers","subscription_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/subscription","commits_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/commits{/sha}","git_commits_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/git/commits{/sha}","comments_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/comments{/number}","issue_comment_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues/comments{/number}","contents_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/contents/{+path}","compare_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/merges","archive_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/downloads","issues_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues{/number}","pulls_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls{/number}","milestones_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/milestones{/number}","notifications_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/labels{/name}","releases_url":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/releases{/id}","created_at":"2015-02-17T19:49:58Z","updated_at":"2015-04-29T01:53:30Z","pushed_at":"2015-05-20T18:14:49Z","git_url":"git://github.com/tetherless-world/dco-s2s-browsers.git","ssh_url":"git@github.com:tetherless-world/dco-s2s-browsers.git","clone_url":"https://github.com/tetherless-world/dco-s2s-browsers.git","svn_url":"https://github.com/tetherless-world/dco-s2s-browsers","homepage":null,"size":6236,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/5"},"html":{"href":"https://github.com/tetherless-world/dco-s2s-browsers/pull/5"},"issue":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues/5"},"comments":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/issues/5/comments"},"review_comments":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/5/comments"},"review_comment":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/pulls/5/commits"},"statuses":{"href":"https://api.github.com/repos/tetherless-world/dco-s2s-browsers/statuses/b9c925c8f034bbebe1a87461a8aeecf9211b20a0"}}}}