GitHub PullRequestReviewCommentEvent at 2014-08-01 19:53:33
Repository: Markus
Actor: oneohtrix
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/MarkUsProject/Markus/pulls/comments/15715481","id":15715481,"diff_hunk":"@@ -0,0 +1,558 @@\n+<script type='text/jsx'>\n+  /** @jsx React.DOM */\n+\n+  var GradersManager = React.createClass({\n+    getInitialState: function() {\n+      return {\n+        assign_to_criteria: false,\n+        error: null,\n+        current_table: 'groups_table',\n+        groups_and_criteria: {groups: [], criteria: []},\n+        graders: [],\n+        sections: [],\n+        selected_groups: [],\n+        selected_criteria: [],\n+        selected_graders: [],\n+        selected_graders_in_groups: [],\n+        selected_graders_in_criteria: []\n+      }\n+    },\n+    updateCurrentTable: function(table) {\n+      this.setState({current_table: table});\n+    },\n+    updateSelectedGraders: function(graders) {\n+      this.setState({selected_graders: graders});\n+    },\n+    updateSelectedGroups: function(groups) {\n+      this.setState({selected_groups: groups});\n+    },\n+    updateSelectedGradersInGroups: function(graders) {\n+      this.setState({selected_graders_in_groups: graders});\n+    },\n+    updateSelectedCriteria: function(criteria) {\n+      this.setState({selected_criteria: criteria});\n+    },\n+    updateSelectedGradersInCriteria: function(graders) {\n+      this.setState({selected_graders_in_criteria: graders});\n+    },\n+    setError: function(error_msg) {\n+      this.setState({error: error_msg});\n+    },\n+    criteriaCheckboxClicked: function(event) {\n+      var dataLoad = { value: event.currentTarget.checked};\n+      jQuery.ajax({\n+        method: 'POST',\n+        url: 'graders/set_assign_criteria',\n+        data: dataLoad,\n+        success: function(data) {\n+          this.refresh();\n+        }.bind(this)\n+      });\n+    },\n+    componentWillMount: function() {\n+      this.refresh();\n+    },\n+    refresh: function() {\n+      //must collect data for both tables\n+      //1st element: true false (use criteria?_)\n+      //2nd elemnet: info for graders table\n+      //3rd element: info for groups table + criteria(if)\n+      jQuery.ajax({\n+        method: 'GET',\n+        url: 'graders',\n+        dataType: 'json',\n+        success: function(data) {\n+          console.log(data);\n+          // if not assigning graders to criteria,\n+          // make current_table groups_table (always)\n+          if (!data[0]) {\n+            this.setState({current_table: 'groups_table'});\n+          }\n+          this.setState({\n+            assign_to_criteria: data[0],\n+            sections: data[1],\n+            graders: data[2],\n+            groups_and_criteria: data[3],\n+          });\n+        }.bind(this)\n+      });\n+    },\n+    render: function() {\n+      var to_render = [];\n+      to_render.push(<input type='checkbox'\n+            checked={this.state.assign_to_criteria}\n+            onChange={this.criteriaCheckboxClicked}>Assign graders to criteria</input>);\n+      to_render.push(<ErrorDiv error={this.state.error} />);\n+      to_render.push(<GradersTable graders={this.state.graders}\n+        selected_graders={this.state.selected_graders}\n+        onSelectedGradersChange={this.updateSelectedGraders} />);\n+        to_render.push(<GradersActionsColumn\n+          refresh={this.refresh}\n+          current_table={this.state.current_table}\n+          selected_graders={this.state.selected_graders}\n+          selected_groups={this.state.selected_groups}\n+          selected_criteria={this.state.selected_criteria}\n+          selected_graders_in_groups={this.state.selected_graders_in_groups}\n+          selected_graders_in_criteria={this.state.selected_graders_in_criteria}\n+          updateSelectedGraders={this.updateSelectedGraders}\n+          updateSelectedGroups={this.updateSelectedGroups}\n+          updateSelectedCriteria={this.updateSelectedCriteria}\n+          updateSelectedGradersInGroups={this.updateSelectedGradersInGroups}\n+          updateSelectedGradersInCriteria={this.updateSelectedGradersInCriteria}\n+          setError={this.setError}\n+         />);\n+      to_render.push(<GroupsTableManager \n+        assign_to_criteria={this.state.assign_to_criteria} \n+        groups_and_criteria={this.state.groups_and_criteria}\n+        selected_groups={this.state.selected_groups}\n+        onSelectedGroupsChange={this.updateSelectedGroups}\n+        selected_graders_in_groups={this.state.selected_graders_in_groups}\n+        onSelectedGradersInGroupsChange={this.updateSelectedGradersInGroups}\n+        selected_criteria={this.state.selected_criteria}\n+        onSelectedCriteriaChange={this.updateSelectedCriteria}\n+        selected_graders_in_criteria={this.state.selected_graders_in_criteria}\n+        onSelectedGradersInCriteriaChange={this.updateSelectedGradersInCriteria}\n+        sections={this.state.sections}\n+        refresh={this.refresh}\n+        current_table={this.state.current_table}\n+        onTableChange={this.updateCurrentTable}\n+      />);\n+      return (<div>{to_render}</div>);\n+    }\n+  });\n+\n+  var GroupsTableManager = React.createClass({\n+    propTypes: {\n+      assign_to_criteria: React.PropTypes.bool,\n+      groups_and_criteria: React.PropTypes.object,\n+      selected_groups: React.PropTypes.array,\n+      onSelectedGroupsChange: React.PropTypes.func,\n+      selected_graders_in_groups: React.PropTypes.array,\n+      onSelectedGradersInGroupsChange: React.PropTypes.func,\n+      selected_criteria: React.PropTypes.array,\n+      onSelectedCriteriaChange: React.PropTypes.func,\n+      selected_graders_in_criteria: React.PropTypes.array,\n+      onSelectedGradersInCriteriaChange: React.PropTypes.func,\n+      sections: React.PropTypes.array,\n+      refresh: React.PropTypes.func,\n+      current_table: React.PropTypes.string,\n+      onTableChange: React.PropTypes.func\n+    },\n+     render: function() {\n+      if (this.props.assign_to_criteria) {\n+        return <GroupsTableWithCriteria\n+          groups={this.props.groups_and_criteria.groups}\n+          selected_groups={this.props.selected_groups}\n+          onSelectedGroupsChange={this.props.onSelectedGroupsChange}\n+          selected_graders_in_groups={this.props.selected_graders_in_groups}\n+          onSelectedGradersInGroupsChange={this.props.onSelectedGradersInGroupsChange}\n+          criteria={this.props.groups_and_criteria.criteria}\n+          selected_criteria={this.props.selected_criteria}\n+          onSelectedCriteriaChange={this.props.onSelectedCriteriaChange}\n+          selected_graders_in_criteria={this.props.selected_graders_in_criteria}\n+          onSelectedGradersInCriteriaChange={this.props.onSelectedGradersInCriteriaChange}\n+          sections={this.props.sections}\n+          refresh={this.props.refresh}\n+          onTableChange={this.props.onTableChange}\n+        />\n+      } else {\n+        return <GroupsTableNoCriteria \n+          groups={this.props.groups_and_criteria.groups}\n+          selected_groups={this.props.selected_groups}\n+          onSelectedGroupsChange={this.props.onSelectedGroupsChange}\n+          selected_graders_in_groups={this.props.selected_graders_in_groups}\n+          onSelectedGradersInGroupsChange={this.props.onSelectedGradersInGroupsChange}\n+          sections={this.props.sections}\n+          refresh={this.props.refresh}\n+        />\n+      }\n+    }\n+  });\n+\n+  var GroupsTableWithCriteria = React.createClass({\n+    propTypes: {\n+      groups: React.PropTypes.array,\n+      selected_groups: React.PropTypes.array,\n+      onSelectedGroupsChange: React.PropTypes.func,\n+      selected_graders_in_groups: React.PropTypes.array,\n+      onSelectedGradersInGroupsChange: React.PropTypes.func,\n+      criteria: React.PropTypes.array,\n+      selected_criteria: React.PropTypes.array,\n+      onSelectedCriteriaChange: React.PropTypes.func,\n+      sections: React.PropTypes.array,\n+      refresh: React.PropTypes.func\n+    },\n+    componentDidMount: function() {\n+      jQuery('#group-tabs').tabs();\n+    },\n+    tableChanged: function(event) {\n+      var table = event.currentTarget.getAttribute('id');\n+      this.props.onTableChange(table);\n+    },\n+    groupCheckboxAllClicked: function(event) {\n+      var value = event.currentTarget.checked;\n+      if (value) {\n+        var new_selected_groups = this.props.groups.map(function(x) { return x.id; }).slice();\n+        this.props.onSelectedGroupsChange(new_selected_groups);\n+      } else {\n+        this.props.onSelectedGroupsChange([]);\n+      }\n+    },\n+    criteriaCheckboxAllClicked: function(event) {\n+      var value = event.currentTarget.checked;\n+      if (value) {\n+        var new_selected_criteria = this.props.groups.map(function(x) { return x.id; }).slice();\n+        this.props.onSelectedCriteriaChange(new_selected_criteria);\n+      } else {\n+        this.props.onSelectedCriteriaChange([]);\n+      }\n+    },\n+    gradersInGroupsCheckboxAllClicked: function(event) {\n+      var value = event.currentTarget.checked;\n+      if (value) {\n+        var new_selected_graders_in_groups = [];\n+        for (var i = 0; i < this.props.groups.length; i++) {\n+          for (var j = 0; j < this.props.groups[i].graders.length; j++) {\n+            new_selected_graders_in_groups.push(this.props.groups[i].graders[j].membership_id);\n+          }\n+        }\n+        this.props.onSelectedGradersInGroupsChange(new_selected_graders_in_groups);\n+      } else {\n+        this.props.onSelectedGradersInGroupsChange([]);\n+      }\n+    },\n+     gradersInCriteriaCheckboxAllClicked: function(event) {\n+      var value = event.currentTarget.checked;\n+      if (value) {\n+        var new_selected_graders_in_criteria = [];\n+        for (var i = 0; i < this.props.criteria.length; i++) {\n+          for (var j = 0; j < this.props.criteria[i].graders.length; j++) {\n+            new_selected_graders_in_criteria.push(this.props.criteria[i].graders[j].criterion_association);\n+          }\n+        }\n+        this.props.onSelectedGradersInCriteriaChange(new_selected_graders_in_criteria);\n+      } else {\n+        this.props.onSelectedGradersInCriteriaChange([]);\n+      }\n+    },\n+    groupCheckboxClicked: function(event) {\n+      var value = event.currentTarget.checked;\n+      var group_id = parseInt(event.currentTarget.getAttribute('id'));\n+      var new_selected_groups = this.props.selected_groups.slice();\n+      if (value == true) {\n+        new_selected_groups.push(group_id);\n+      } else {\n+        new_selected_groups.splice(new_selected_groups.indexOf(group_id), 1);\n+      }\n+      this.props.onSelectedGroupsChange(new_selected_groups);\n+    },\n+    criteriaCheckboxClicked: function(event) {\n+      var value = event.currentTarget.checked;\n+      var criteria_id = parseInt(event.currentTarget.getAttribute('id'));\n+      var new_selected_criteria = this.props.selected_criteria.slice();\n+      if (value == true) {\n+        new_selected_criteria.push(criteria_id);\n+      } else {\n+        new_selected_criteria.splice(new_selected_criteria.indexOf(criteria_id), 1);\n+      }\n+      this.props.onSelectedCriteriaChange(new_selected_criteria);\n+    },\n+    graderCheckboxClicked: function(event) {\n+      var value = event.currentTarget.checked;\n+      var group_grader_id = parseInt(event.currentTarget.getAttribute('id'));\n+      var new_selected_graders_in_groups = this.props.selected_graders_in_groups.slice();\n+      if (value == true) {\n+        new_selected_graders_in_groups.push(group_grader_id);\n+      } else {\n+        new_selected_graders_in_groups.splice(new_selected_graders_in_groups.indexOf(group_grader_id), 1);\n+      }\n+      this.props.onSelectedGradersInGroupsChange(new_selected_graders_in_groups);\n+    },\n+    render: function() {\n+      var group_columns = [\n+      {\n+        id: 'checkbox',\n+        content: <div>\n+          <input type='checkbox'\n+            onChange={this.groupCheckboxAllClicked} />\n+          </div>,\n+        sortable: false,\n+        searchable: false\n+      },\n+      {\n+        id: 'name',\n+        content: '<%= j raw I18n.t('groups.groupe_name') %>',\n+        sortable: true,\n+        searchable: true\n+      },\n+      {\n+        id: 'section',\n+        content: 'Section',\n+        sortable: true,\n+        searchable: true\n+      },\n+      {\n+        id: 'graders',\n+        content:<input type='checkbox'\n+            onChange={this.gradersInGroupsCheckboxAllClicked}>Graders</input>,\n+        sortable: true,\n+        searchable: false\n+      },\n+      {\n+        id: 'coverage',\n+        content: 'Coverage',","path":"app/views/graders/_graders_manager.js.jsx.erb","position":303,"original_position":303,"commit_id":"4b0c06a715f36996e6b9da5bcdab8bccd64b5e98","original_commit_id":"f9a6a1e9de1ae24881fde785605af72ab1b503da","user":{"login":"oneohtrix","id":963922,"avatar_url":"https://avatars.githubusercontent.com/u/963922?v=1","gravatar_id":"0b4c9712cae2a50775fa0a3c1a41aab1","url":"https://api.github.com/users/oneohtrix","html_url":"https://github.com/oneohtrix","followers_url":"https://api.github.com/users/oneohtrix/followers","following_url":"https://api.github.com/users/oneohtrix/following{/other_user}","gists_url":"https://api.github.com/users/oneohtrix/gists{/gist_id}","starred_url":"https://api.github.com/users/oneohtrix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oneohtrix/subscriptions","organizations_url":"https://api.github.com/users/oneohtrix/orgs","repos_url":"https://api.github.com/users/oneohtrix/repos","events_url":"https://api.github.com/users/oneohtrix/events{/privacy}","received_events_url":"https://api.github.com/users/oneohtrix/received_events","type":"User","site_admin":false},"body":"fixed","created_at":"2014-08-01T19:53:33Z","updated_at":"2014-08-01T19:53:33Z","html_url":"https://github.com/MarkUsProject/Markus/pull/1539#discussion_r15715481","pull_request_url":"https://api.github.com/repos/MarkUsProject/Markus/pulls/1539","_links":{"self":{"href":"https://api.github.com/repos/MarkUsProject/Markus/pulls/comments/15715481"},"html":{"href":"https://github.com/MarkUsProject/Markus/pull/1539#discussion_r15715481"},"pull_request":{"href":"https://api.github.com/repos/MarkUsProject/Markus/pulls/1539"}}},"pull_request":{"url":"https://api.github.com/repos/MarkUsProject/Markus/pulls/1539","id":17316149,"html_url":"https://github.com/MarkUsProject/Markus/pull/1539","diff_url":"https://github.com/MarkUsProject/Markus/pull/1539.diff","patch_url":"https://github.com/MarkUsProject/Markus/pull/1539.patch","issue_url":"https://api.github.com/repos/MarkUsProject/Markus/issues/1539","number":1539,"state":"open","title":"React tables","user":{"login":"oneohtrix","id":963922,"avatar_url":"https://avatars.githubusercontent.com/u/963922?v=1","gravatar_id":"0b4c9712cae2a50775fa0a3c1a41aab1","url":"https://api.github.com/users/oneohtrix","html_url":"https://github.com/oneohtrix","followers_url":"https://api.github.com/users/oneohtrix/followers","following_url":"https://api.github.com/users/oneohtrix/following{/other_user}","gists_url":"https://api.github.com/users/oneohtrix/gists{/gist_id}","starred_url":"https://api.github.com/users/oneohtrix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oneohtrix/subscriptions","organizations_url":"https://api.github.com/users/oneohtrix/orgs","repos_url":"https://api.github.com/users/oneohtrix/repos","events_url":"https://api.github.com/users/oneohtrix/events{/privacy}","received_events_url":"https://api.github.com/users/oneohtrix/received_events","type":"User","site_admin":false},"body":"This is a redo of #1502. I have done some architectural restructuring so that the base Table React component is more generalizable, and I've changed the way components get mounted onto the view (originally was using the react-rails gem, but now going a more native route). Also deleted unnecessary .rjs files (for the original tables) and partials, as well as the students' populate route in route.rb (we now populate by sending an AJAX request to the same url, just requesting it in JSON).","created_at":"2014-06-18T20:08:42Z","updated_at":"2014-08-01T19:53:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d3941e467dfab8fce90fc0cfaa1934f1087a10d4","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/MarkUsProject/Markus/pulls/1539/commits","review_comments_url":"https://api.github.com/repos/MarkUsProject/Markus/pulls/1539/comments","review_comment_url":"https://api.github.com/repos/MarkUsProject/Markus/pulls/comments/{number}","comments_url":"https://api.github.com/repos/MarkUsProject/Markus/issues/1539/comments","statuses_url":"https://api.github.com/repos/MarkUsProject/Markus/statuses/4b0c06a715f36996e6b9da5bcdab8bccd64b5e98","head":{"label":"oneohtrix:react_tables","ref":"react_tables","sha":"4b0c06a715f36996e6b9da5bcdab8bccd64b5e98","user":{"login":"oneohtrix","id":963922,"avatar_url":"https://avatars.githubusercontent.com/u/963922?v=1","gravatar_id":"0b4c9712cae2a50775fa0a3c1a41aab1","url":"https://api.github.com/users/oneohtrix","html_url":"https://github.com/oneohtrix","followers_url":"https://api.github.com/users/oneohtrix/followers","following_url":"https://api.github.com/users/oneohtrix/following{/other_user}","gists_url":"https://api.github.com/users/oneohtrix/gists{/gist_id}","starred_url":"https://api.github.com/users/oneohtrix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oneohtrix/subscriptions","organizations_url":"https://api.github.com/users/oneohtrix/orgs","repos_url":"https://api.github.com/users/oneohtrix/repos","events_url":"https://api.github.com/users/oneohtrix/events{/privacy}","received_events_url":"https://api.github.com/users/oneohtrix/received_events","type":"User","site_admin":false},"repo":{"id":19577180,"name":"Markus","full_name":"oneohtrix/Markus","owner":{"login":"oneohtrix","id":963922,"avatar_url":"https://avatars.githubusercontent.com/u/963922?v=1","gravatar_id":"0b4c9712cae2a50775fa0a3c1a41aab1","url":"https://api.github.com/users/oneohtrix","html_url":"https://github.com/oneohtrix","followers_url":"https://api.github.com/users/oneohtrix/followers","following_url":"https://api.github.com/users/oneohtrix/following{/other_user}","gists_url":"https://api.github.com/users/oneohtrix/gists{/gist_id}","starred_url":"https://api.github.com/users/oneohtrix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oneohtrix/subscriptions","organizations_url":"https://api.github.com/users/oneohtrix/orgs","repos_url":"https://api.github.com/users/oneohtrix/repos","events_url":"https://api.github.com/users/oneohtrix/events{/privacy}","received_events_url":"https://api.github.com/users/oneohtrix/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/oneohtrix/Markus","description":"Git repository of MarkUs","fork":true,"url":"https://api.github.com/repos/oneohtrix/Markus","forks_url":"https://api.github.com/repos/oneohtrix/Markus/forks","keys_url":"https://api.github.com/repos/oneohtrix/Markus/keys{/key_id}","collaborators_url":"https://api.github.com/repos/oneohtrix/Markus/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/oneohtrix/Markus/teams","hooks_url":"https://api.github.com/repos/oneohtrix/Markus/hooks","issue_events_url":"https://api.github.com/repos/oneohtrix/Markus/issues/events{/number}","events_url":"https://api.github.com/repos/oneohtrix/Markus/events","assignees_url":"https://api.github.com/repos/oneohtrix/Markus/assignees{/user}","branches_url":"https://api.github.com/repos/oneohtrix/Markus/branches{/branch}","tags_url":"https://api.github.com/repos/oneohtrix/Markus/tags","blobs_url":"https://api.github.com/repos/oneohtrix/Markus/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/oneohtrix/Markus/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/oneohtrix/Markus/git/refs{/sha}","trees_url":"https://api.github.com/repos/oneohtrix/Markus/git/trees{/sha}","statuses_url":"https://api.github.com/repos/oneohtrix/Markus/statuses/{sha}","languages_url":"https://api.github.com/repos/oneohtrix/Markus/languages","stargazers_url":"https://api.github.com/repos/oneohtrix/Markus/stargazers","contributors_url":"https://api.github.com/repos/oneohtrix/Markus/contributors","subscribers_url":"https://api.github.com/repos/oneohtrix/Markus/subscribers","subscription_url":"https://api.github.com/repos/oneohtrix/Markus/subscription","commits_url":"https://api.github.com/repos/oneohtrix/Markus/commits{/sha}","git_commits_url":"https://api.github.com/repos/oneohtrix/Markus/git/commits{/sha}","comments_url":"https://api.github.com/repos/oneohtrix/Markus/comments{/number}","issue_comment_url":"https://api.github.com/repos/oneohtrix/Markus/issues/comments/{number}","contents_url":"https://api.github.com/repos/oneohtrix/Markus/contents/{+path}","compare_url":"https://api.github.com/repos/oneohtrix/Markus/compare/{base}...{head}","merges_url":"https://api.github.com/repos/oneohtrix/Markus/merges","archive_url":"https://api.github.com/repos/oneohtrix/Markus/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/oneohtrix/Markus/downloads","issues_url":"https://api.github.com/repos/oneohtrix/Markus/issues{/number}","pulls_url":"https://api.github.com/repos/oneohtrix/Markus/pulls{/number}","milestones_url":"https://api.github.com/repos/oneohtrix/Markus/milestones{/number}","notifications_url":"https://api.github.com/repos/oneohtrix/Markus/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/oneohtrix/Markus/labels{/name}","releases_url":"https://api.github.com/repos/oneohtrix/Markus/releases{/id}","created_at":"2014-05-08T14:49:32Z","updated_at":"2014-06-24T18:40:20Z","pushed_at":"2014-08-01T14:39:42Z","git_url":"git://github.com/oneohtrix/Markus.git","ssh_url":"git@github.com:oneohtrix/Markus.git","clone_url":"https://github.com/oneohtrix/Markus.git","svn_url":"https://github.com/oneohtrix/Markus","homepage":"http://www.markusproject.org","size":17849,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"MarkUsProject:master","ref":"master","sha":"e18342e4df8d0d92a029cecaab95215788491eef","user":{"login":"MarkUsProject","id":415874,"avatar_url":"https://avatars.githubusercontent.com/u/415874?v=1","gravatar_id":"7fd5c1f7357ff6089fd2ea12640529ab","url":"https://api.github.com/users/MarkUsProject","html_url":"https://github.com/MarkUsProject","followers_url":"https://api.github.com/users/MarkUsProject/followers","following_url":"https://api.github.com/users/MarkUsProject/following{/other_user}","gists_url":"https://api.github.com/users/MarkUsProject/gists{/gist_id}","starred_url":"https://api.github.com/users/MarkUsProject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MarkUsProject/subscriptions","organizations_url":"https://api.github.com/users/MarkUsProject/orgs","repos_url":"https://api.github.com/users/MarkUsProject/repos","events_url":"https://api.github.com/users/MarkUsProject/events{/privacy}","received_events_url":"https://api.github.com/users/MarkUsProject/received_events","type":"Organization","site_admin":false},"repo":{"id":940538,"name":"Markus","full_name":"MarkUsProject/Markus","owner":{"login":"MarkUsProject","id":415874,"avatar_url":"https://avatars.githubusercontent.com/u/415874?v=1","gravatar_id":"7fd5c1f7357ff6089fd2ea12640529ab","url":"https://api.github.com/users/MarkUsProject","html_url":"https://github.com/MarkUsProject","followers_url":"https://api.github.com/users/MarkUsProject/followers","following_url":"https://api.github.com/users/MarkUsProject/following{/other_user}","gists_url":"https://api.github.com/users/MarkUsProject/gists{/gist_id}","starred_url":"https://api.github.com/users/MarkUsProject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MarkUsProject/subscriptions","organizations_url":"https://api.github.com/users/MarkUsProject/orgs","repos_url":"https://api.github.com/users/MarkUsProject/repos","events_url":"https://api.github.com/users/MarkUsProject/events{/privacy}","received_events_url":"https://api.github.com/users/MarkUsProject/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MarkUsProject/Markus","description":"Git repository of MarkUs","fork":false,"url":"https://api.github.com/repos/MarkUsProject/Markus","forks_url":"https://api.github.com/repos/MarkUsProject/Markus/forks","keys_url":"https://api.github.com/repos/MarkUsProject/Markus/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MarkUsProject/Markus/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MarkUsProject/Markus/teams","hooks_url":"https://api.github.com/repos/MarkUsProject/Markus/hooks","issue_events_url":"https://api.github.com/repos/MarkUsProject/Markus/issues/events{/number}","events_url":"https://api.github.com/repos/MarkUsProject/Markus/events","assignees_url":"https://api.github.com/repos/MarkUsProject/Markus/assignees{/user}","branches_url":"https://api.github.com/repos/MarkUsProject/Markus/branches{/branch}","tags_url":"https://api.github.com/repos/MarkUsProject/Markus/tags","blobs_url":"https://api.github.com/repos/MarkUsProject/Markus/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MarkUsProject/Markus/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MarkUsProject/Markus/git/refs{/sha}","trees_url":"https://api.github.com/repos/MarkUsProject/Markus/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MarkUsProject/Markus/statuses/{sha}","languages_url":"https://api.github.com/repos/MarkUsProject/Markus/languages","stargazers_url":"https://api.github.com/repos/MarkUsProject/Markus/stargazers","contributors_url":"https://api.github.com/repos/MarkUsProject/Markus/contributors","subscribers_url":"https://api.github.com/repos/MarkUsProject/Markus/subscribers","subscription_url":"https://api.github.com/repos/MarkUsProject/Markus/subscription","commits_url":"https://api.github.com/repos/MarkUsProject/Markus/commits{/sha}","git_commits_url":"https://api.github.com/repos/MarkUsProject/Markus/git/commits{/sha}","comments_url":"https://api.github.com/repos/MarkUsProject/Markus/comments{/number}","issue_comment_url":"https://api.github.com/repos/MarkUsProject/Markus/issues/comments/{number}","contents_url":"https://api.github.com/repos/MarkUsProject/Markus/contents/{+path}","compare_url":"https://api.github.com/repos/MarkUsProject/Markus/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MarkUsProject/Markus/merges","archive_url":"https://api.github.com/repos/MarkUsProject/Markus/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MarkUsProject/Markus/downloads","issues_url":"https://api.github.com/repos/MarkUsProject/Markus/issues{/number}","pulls_url":"https://api.github.com/repos/MarkUsProject/Markus/pulls{/number}","milestones_url":"https://api.github.com/repos/MarkUsProject/Markus/milestones{/number}","notifications_url":"https://api.github.com/repos/MarkUsProject/Markus/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MarkUsProject/Markus/labels{/name}","releases_url":"https://api.github.com/repos/MarkUsProject/Markus/releases{/id}","created_at":"2010-09-26T16:18:08Z","updated_at":"2014-07-31T20:22:25Z","pushed_at":"2014-07-31T19:39:28Z","git_url":"git://github.com/MarkUsProject/Markus.git","ssh_url":"git@github.com:MarkUsProject/Markus.git","clone_url":"https://github.com/MarkUsProject/Markus.git","svn_url":"https://github.com/MarkUsProject/Markus","homepage":"http://www.markusproject.org","size":44727,"stargazers_count":108,"watchers_count":108,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":124,"mirror_url":null,"open_issues_count":95,"forks":124,"open_issues":95,"watchers":108,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/MarkUsProject/Markus/pulls/1539"},"html":{"href":"https://github.com/MarkUsProject/Markus/pull/1539"},"issue":{"href":"https://api.github.com/repos/MarkUsProject/Markus/issues/1539"},"comments":{"href":"https://api.github.com/repos/MarkUsProject/Markus/issues/1539/comments"},"review_comments":{"href":"https://api.github.com/repos/MarkUsProject/Markus/pulls/1539/comments"},"review_comment":{"href":"https://api.github.com/repos/MarkUsProject/Markus/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/MarkUsProject/Markus/pulls/1539/commits"},"statuses":{"href":"https://api.github.com/repos/MarkUsProject/Markus/statuses/4b0c06a715f36996e6b9da5bcdab8bccd64b5e98"}}}}