{"action":"created","comment":{"url":"https://api.github.com/repos/TEAMMATES/teammates/pulls/comments/70240404","id":70240404,"diff_hunk":"@@ -0,0 +1,358 @@\n+var FEEDBACK_PARTICIPANT_TYPE_CUSTOM = 'CUSTOM';\n+var FEEDBACK_PARTICIPANT_TYPE_SELF = 'SELF';\n+var FEEDBACK_PARTICIPANT_TYPE_STUDENTS = 'STUDENTS';\n+var FEEDBACK_PARTICIPANT_TYPE_INSTRUCTORS = 'INSTRUCTORS';\n+var FEEDBACK_PARTICIPANT_TYPE_TEAMS = 'TEAMS';\n+var FEEDBACK_PARTICIPANT_TYPE_OWN_TEAM = 'OWN_TEAM';\n+var FEEDBACK_PARTICIPANT_TYPE_OWN_TEAM_MEMBERS = 'OWN_TEAM_MEMBERS';\n+var FEEDBACK_PARTICIPANT_TYPE_OWN_TEAM_MEMBERS_INCLUDING_SELF = 'OWN_TEAM_MEMBERS_INCLUDING_SELF';\n+var FEEDBACK_PARTICIPANT_TYPE_NONE = 'NONE';\n+var TEAM_NAME_INSTRUCTORS = 'Instructors';\n+\n+var sessionCreator;\n+var studentEmailToTeamNameMap;\n+var instructorEmails;\n+var teamNameToStudentEmailsMap;\n+var studentEmails;\n+var teamNames;\n+var allPossibleFeedbackGivers;\n+var allPossibleFeedbackRecipients;\n+\n+$(document).ready(function() {\n+    initialiseCustomFeedbackPathsData();\n+    initialiseFeedbackPathsSpreadsheets();\n+    bindEventHandlers();\n+});\n+\n+function initialiseCustomFeedbackPathsData() {\n+    sessionCreator = $('#session-creator-data').data('session-creator');\n+    studentEmailToTeamNameMap = $('#students-data').data('students');\n+    instructorEmails = $('#instructors-data').data('instructors');\n+    teamNameToStudentEmailsMap = [[]];\n+    studentEmails = [];\n+    teamNames = [];\n+    \n+    for (var studentEmail in studentEmailToTeamNameMap) {\n+        if (studentEmailToTeamNameMap.hasOwnProperty(studentEmail)) {\n+            studentEmails.push(studentEmail);\n+            \n+            var teamName = studentEmailToTeamNameMap[studentEmail];\n+            if (!teamNames.includes(teamName)) {\n+                teamNames.push(teamName);\n+            }\n+            \n+            var studentEmailsList = teamNameToStudentEmailsMap[teamName];\n+            if (studentEmailsList === undefined) {\n+                studentEmailsList = [];\n+            }\n+            studentEmailsList.push(studentEmail);\n+            teamNameToStudentEmailsMap[teamName] = studentEmailsList;\n+        }\n+    }\n+    \n+    allPossibleFeedbackGivers = [''];\n+    allPossibleFeedbackGivers = allPossibleFeedbackGivers.concat(studentEmails);\n+    for (var i = 0; i < instructorEmails.length; i++) {\n+        if (!allPossibleFeedbackGivers.includes(instructorEmails[i])) {\n+            allPossibleFeedbackGivers.push(instructorEmails[i]);\n+        }\n+    }\n+    allPossibleFeedbackGivers = allPossibleFeedbackGivers.concat(teamNames);\n+    allPossibleFeedbackRecipients = allPossibleFeedbackGivers.slice();\n+    allPossibleFeedbackRecipients.push(TEAM_NAME_INSTRUCTORS);\n+    allPossibleFeedbackRecipients.push('%GENERAL%');\n+}\n+\n+function initialiseFeedbackPathsSpreadsheets() {\n+    $('.form_question').each(function() {\n+        var $questionForm = $(this);\n+        var giverType = $questionForm.find('select[id^=\"' + FEEDBACK_QUESTION_GIVERTYPE + '\"]').val();\n+        var recipientType = $questionForm.find('select[id^=\"' + FEEDBACK_QUESTION_RECIPIENTTYPE + '\"]').val();\n+        generateFeedbackPathsSpreadsheet($questionForm.find('.custom-feedback-paths-spreadsheet'), giverType, recipientType);\n+    });\n+}\n+\n+function generateFeedbackPathsSpreadsheet($container, giverType, recipientType) {\n+    var data = getDataForFeedbackPathsSpreadsheet(giverType, recipientType);\n+    var columns = getColumnsForFeedbackPathsSpreadsheet(giverType, recipientType);\n+    $container.handsontable({\n+        data: data,\n+        minRows: 15,\n+        minCols: 2,\n+        minSpareRows: 1,\n+        rowHeaders: true,\n+        colHeaders: ['Feedback giver', 'Feedback recipient'],\n+        columns: columns,\n+        manualColumnResize: true,\n+        manualRowResize: true,\n+        stretchH: 'all'\n+    });\n+}\n+\n+function updateFeedbackPathsSpreadsheetForQuestionTable($questionTable) {\n+    var $container = $questionTable.find('.custom-feedback-paths-spreadsheet');\n+    var giverType = $questionTable.find('select[id^=\"' + FEEDBACK_QUESTION_GIVERTYPE + '\"]').val();\n+    var recipientType = $questionTable.find('select[id^=\"' + FEEDBACK_QUESTION_RECIPIENTTYPE + '\"]').val();\n+    updateFeedbackPathsSpreadsheet($container, giverType, recipientType);\n+}\n+\n+function updateFeedbackPathsSpreadsheet($container, giverType, recipientType) {\n+    var data = getDataForFeedbackPathsSpreadsheet(giverType, recipientType);\n+    var columns = getColumnsForFeedbackPathsSpreadsheet(giverType, recipientType);\n+    var hotInstance = $container.handsontable('getInstance');\n+    hotInstance.updateSettings({\n+        data: data,\n+        columns: columns\n+    });\n+}\n+\n+function getDataForFeedbackPathsSpreadsheet(giverType, recipientType) {\n+    var giverToRecipientsMap = {};\n+    switch (giverType) {\n+    case FEEDBACK_PARTICIPANT_TYPE_SELF:\n+        populateGiverToRecipientsMapForGiver(giverToRecipientsMap, [sessionCreator]);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_STUDENTS:\n+        populateGiverToRecipientsMapForGiver(giverToRecipientsMap, studentEmails);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_INSTRUCTORS:\n+        populateGiverToRecipientsMapForGiver(giverToRecipientsMap, instructorEmails);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_TEAMS:\n+        populateGiverToRecipientsMapForGiver(giverToRecipientsMap, teamNames);\n+        break;\n+    default:\n+        // no change\n+    }\n+    \n+    switch (recipientType) {\n+    case FEEDBACK_PARTICIPANT_TYPE_SELF:\n+        populateGiverToRecipientsMapForRecipientAsSelf(giverToRecipientsMap);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_STUDENTS:\n+        populateGiverToRecipientsMapForRecipientAsStudents(giverToRecipientsMap);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_INSTRUCTORS:\n+        populateGiverToRecipientsMapForRecipientAsInstructors(giverToRecipientsMap);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_TEAMS:\n+        populateGiverToRecipientsMapForRecipientAsTeams(giverToRecipientsMap, giverType);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_OWN_TEAM:\n+        populateGiverToRecipientsMapForRecipientAsOwnTeam(giverToRecipientsMap, giverType);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_OWN_TEAM_MEMBERS:\n+        populateGiverToRecipientsMapForRecipientAsOwnTeamMembers(giverToRecipientsMap, giverType);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_OWN_TEAM_MEMBERS_INCLUDING_SELF:\n+        populateGiverToRecipientsMapForRecipientAsOwnTeamMembersIncludingSelf(\n+                giverToRecipientsMap, giverType);\n+        break;\n+    case FEEDBACK_PARTICIPANT_TYPE_NONE:\n+        populateGiverToRecipientsMapForRecipientAsNobodySpecific(giverToRecipientsMap);\n+        break;\n+    default:\n+        // no change\n+    }\n+    return getFeedbackPathsDataUsingGiverToRecipientsMap(giverToRecipientsMap);\n+}\n+\n+function getFeedbackPathsDataUsingGiverToRecipientsMap(giverToRecipientsMap) {\n+    var data = [];\n+    for (var giver in giverToRecipientsMap) {\n+        if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+            for (var i = 0; i < giverToRecipientsMap[giver].length; i++) {\n+                data.push([giver, giverToRecipientsMap[giver][i]]);\n+            }\n+        }\n+    }\n+    \n+    // data should minimally contain one empty row\n+    data.push(['', '']);\n+    return data;\n+}\n+\n+function getColumnsForFeedbackPathsSpreadsheet(giverType, recipientType) {\n+    var columns = [{}, {}];\n+    if (giverType === FEEDBACK_PARTICIPANT_TYPE_CUSTOM\n+            && recipientType === FEEDBACK_PARTICIPANT_TYPE_CUSTOM) {\n+        columns = [{\n+            type: 'dropdown',\n+            source: allPossibleFeedbackGivers,\n+            readOnly: false\n+        }, {\n+            type: 'dropdown',\n+            source: allPossibleFeedbackRecipients,\n+            readOnly: false\n+        }];\n+    } else {\n+        columns = [{ readOnly: true }, { readOnly: true }];\n+    }\n+    return columns;\n+}\n+\n+function populateGiverToRecipientsMapForGiver(giverToRecipientsMap, giverList) {\n+    for (var i = 0; i < giverList.length; i++) {\n+        giverToRecipientsMap[giverList[i]] = [];\n+    }\n+    \n+}\n+\n+function populateGiverToRecipientsMapForRecipientAsSelf(giverToRecipientsMap) {\n+    for (var giver in giverToRecipientsMap) {\n+        if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+            giverToRecipientsMap[giver].push(giver);\n+        }\n+    }\n+}\n+\n+function populateGiverToRecipientsMapForRecipientAsStudents(giverToRecipientsMap) {\n+    for (var giver in giverToRecipientsMap) {\n+        if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+            for (var i = 0; i < studentEmails.length; i++) {\n+                if (studentEmails[i] !== giver) {\n+                    giverToRecipientsMap[giver].push(studentEmails[i]);\n+                }\n+            }\n+        }\n+    }\n+}\n+\n+function populateGiverToRecipientsMapForRecipientAsInstructors(giverToRecipientsMap) {\n+    for (var giver in giverToRecipientsMap) {\n+        if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+            for (var i = 0; i < instructorEmails.length; i++) {\n+                if (instructorEmails[i] !== giver) {\n+                    giverToRecipientsMap[giver].push(instructorEmails[i]);\n+                }\n+            }\n+        }\n+    }\n+}\n+\n+function populateGiverToRecipientsMapForRecipientAsTeams(giverToRecipientsMap, giverType) {\n+    for (var giver in giverToRecipientsMap) {\n+        if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+            for (var i = 0; i < teamNames.length; i++) {\n+                if (giverType === FEEDBACK_PARTICIPANT_TYPE_STUDENTS) {\n+                    if (teamNames[i] !== studentEmailToTeamNameMap[giver]) {\n+                        giverToRecipientsMap[giver].push(teamNames[i]);\n+                    }\n+                } else if (teamNames[i] !== giver) {\n+                    giverToRecipientsMap[giver].push(teamNames[i]);\n+                }\n+            }\n+        }\n+    }\n+}\n+\n+function populateGiverToRecipientsMapForRecipientAsOwnTeam(giverToRecipientsMap, giverType) {\n+    for (var giver in giverToRecipientsMap) {\n+        if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+            if (giverType === FEEDBACK_PARTICIPANT_TYPE_SELF || giverType === FEEDBACK_PARTICIPANT_TYPE_INSTRUCTORS) {\n+                giverToRecipientsMap[giver].push(TEAM_NAME_INSTRUCTORS);\n+            } else if (giverType === FEEDBACK_PARTICIPANT_TYPE_STUDENTS) {\n+                giverToRecipientsMap[giver].push(studentEmailToTeamNameMap[giver]);\n+            }\n+        }\n+    }\n+}\n+\n+function populateGiverToRecipientsMapForRecipientAsOwnTeamMembers(giverToRecipientsMap, giverType) {\n+    if (giverType === FEEDBACK_PARTICIPANT_TYPE_STUDENTS) {\n+        for (var giver in giverToRecipientsMap) {\n+            if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+                var giverTeamName = studentEmailToTeamNameMap[giver];\n+                var giverTeamMembers = teamNameToStudentEmailsMap[giverTeamName];\n+                for (var i = 0; i < giverTeamMembers.length; i++) {\n+                    if (giverTeamMembers[i] !== giver) {\n+                        giverToRecipientsMap[giver].push(giverTeamMembers[i]);\n+                    }\n+                }\n+            }\n+        }\n+    }\n+}\n+\n+function populateGiverToRecipientsMapForRecipientAsOwnTeamMembersIncludingSelf(giverToRecipientsMap, giverType) {\n+    for (var giver in giverToRecipientsMap) {\n+        if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+            if (giverType === FEEDBACK_PARTICIPANT_TYPE_STUDENTS) {\n+                var giverTeamName = studentEmailToTeamNameMap[giver];\n+                giverToRecipientsMap[giver] = teamNameToStudentEmailsMap[giverTeamName];\n+            } else if (giverType === FEEDBACK_PARTICIPANT_TYPE_TEAMS) {\n+                giverToRecipientsMap[giver] = teamNameToStudentEmailsMap[giver];\n+            }\n+        }\n+    }\n+}\n+\n+function populateGiverToRecipientsMapForRecipientAsNobodySpecific(giverToRecipientsMap) {\n+    for (var giver in giverToRecipientsMap) {\n+        if (giverToRecipientsMap.hasOwnProperty(giver)) {\n+            giverToRecipientsMap[giver].push('%GENERAL%');\n+        }\n+    }\n+}\n+\n+function bindEventHandlers() {\n+    $('.form_question').on('change', '.participantSelect', function() {\n+        var $questionForm = $(this).closest('.form_question');\n+        var $container = $questionForm.find('.custom-feedback-paths-spreadsheet');\n+        var $giverSelect = $questionForm.find('select[id^=\"' + FEEDBACK_QUESTION_GIVERTYPE + '\"]');\n+        var $recipientSelect = $questionForm.find('select[id^=\"' + FEEDBACK_QUESTION_RECIPIENTTYPE + '\"]');\n+        var giverType = $giverSelect.val();\n+        var recipientType = $recipientSelect.val();\n+        \n+        if (giverType === FEEDBACK_PARTICIPANT_TYPE_CUSTOM\n+                || recipientType === FEEDBACK_PARTICIPANT_TYPE_CUSTOM) {\n+            $giverSelect.find('option[value=\"' + FEEDBACK_PARTICIPANT_TYPE_CUSTOM + '\"]').remove();\n+            $recipientSelect.find('option[value=\"' + FEEDBACK_PARTICIPANT_TYPE_CUSTOM + '\"]').remove();\n+        }\n+        \n+        giverType = $giverSelect.val();\n+        recipientType = $recipientSelect.val();","path":"src/main/webapp/js/instructorFeedbackEdit/customFeedbackPaths.js","position":314,"original_position":314,"commit_id":"86aae908b3c3fb1ea47ddb41110c0b445ca8a48d","original_commit_id":"86aae908b3c3fb1ea47ddb41110c0b445ca8a48d","user":{"login":"JosephineKwa","id":9999077,"avatar_url":"https://avatars.githubusercontent.com/u/9999077?v=3","gravatar_id":"","url":"https://api.github.com/users/JosephineKwa","html_url":"https://github.com/JosephineKwa","followers_url":"https://api.github.com/users/JosephineKwa/followers","following_url":"https://api.github.com/users/JosephineKwa/following{/other_user}","gists_url":"https://api.github.com/users/JosephineKwa/gists{/gist_id}","starred_url":"https://api.github.com/users/JosephineKwa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JosephineKwa/subscriptions","organizations_url":"https://api.github.com/users/JosephineKwa/orgs","repos_url":"https://api.github.com/users/JosephineKwa/repos","events_url":"https://api.github.com/users/JosephineKwa/events{/privacy}","received_events_url":"https://api.github.com/users/JosephineKwa/received_events","type":"User","site_admin":false},"body":"Yup it uses the default value, generally this would be the first non-disabled option. If I use a standard default, I would need to consider the case where the question is a Team Contrib question as it only allows students to giver's team members and giver as the predefined feedback path. This might make the logic more complicated than necessary.","created_at":"2016-07-11T11:22:31Z","updated_at":"2016-07-11T11:22:31Z","html_url":"https://github.com/TEAMMATES/teammates/pull/5777#discussion_r70240404","pull_request_url":"https://api.github.com/repos/TEAMMATES/teammates/pulls/5777","_links":{"self":{"href":"https://api.github.com/repos/TEAMMATES/teammates/pulls/comments/70240404"},"html":{"href":"https://github.com/TEAMMATES/teammates/pull/5777#discussion_r70240404"},"pull_request":{"href":"https://api.github.com/repos/TEAMMATES/teammates/pulls/5777"}}},"pull_request":{"url":"https://api.github.com/repos/TEAMMATES/teammates/pulls/5777","id":75852779,"html_url":"https://github.com/TEAMMATES/teammates/pull/5777","diff_url":"https://github.com/TEAMMATES/teammates/pull/5777.diff","patch_url":"https://github.com/TEAMMATES/teammates/pull/5777.patch","issue_url":"https://api.github.com/repos/TEAMMATES/teammates/issues/5777","number":5777,"state":"open","locked":false,"title":"Custom Feedback Paths: Frontend","user":{"login":"JosephineKwa","id":9999077,"avatar_url":"https://avatars.githubusercontent.com/u/9999077?v=3","gravatar_id":"","url":"https://api.github.com/users/JosephineKwa","html_url":"https://github.com/JosephineKwa","followers_url":"https://api.github.com/users/JosephineKwa/followers","following_url":"https://api.github.com/users/JosephineKwa/following{/other_user}","gists_url":"https://api.github.com/users/JosephineKwa/gists{/gist_id}","starred_url":"https://api.github.com/users/JosephineKwa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JosephineKwa/subscriptions","organizations_url":"https://api.github.com/users/JosephineKwa/orgs","repos_url":"https://api.github.com/users/JosephineKwa/repos","events_url":"https://api.github.com/users/JosephineKwa/events{/privacy}","received_events_url":"https://api.github.com/users/JosephineKwa/received_events","type":"User","site_admin":false},"body":"@damithc changes made:\r\n1. Added handsontable library for the spreadsheet functionality\r\n2. Added an editable spreadsheet to display the individual giver to recipient feedback paths.\r\n3. Added a simple UI test for the showing and hiding of the spreadsheet.\r\n\r\nAfter clicking edit, the link to show/hide spreadsheet appears\r\n![fp1](https://cloud.githubusercontent.com/assets/9999077/16517930/ba55f7f0-3fb2-11e6-956d-dc13f72db158.PNG)\r\n\r\nAfter clicking \"Show details and further customizations\", the spreadsheet appears\r\n![fp2](https://cloud.githubusercontent.com/assets/9999077/16517932/bc37ec22-3fb2-11e6-9eff-261bf468295f.PNG)\r\n\r\nUpon selecting a different giver (Session Creator), the spreadsheet is updated to reflect the new feedback paths\r\n![fp3](https://cloud.githubusercontent.com/assets/9999077/16517971/e4810736-3fb2-11e6-8477-b52c5c2a30a9.PNG)\r\n\r\nIf the recipient type is invalid for the chosen giver type (or if no recipients are available for the giver), only the givers are displayed\r\n![fp4](https://cloud.githubusercontent.com/assets/9999077/16518034/52b5b36e-3fb3-11e6-80c2-5c1856c85f4a.PNG)\r\n\r\nIf the data in the spreadsheet is changed, the giver type and recipient type options will be changed to \"Custom\"\r\n![fp5](https://cloud.githubusercontent.com/assets/9999077/16518145/d4c459aa-3fb3-11e6-92e4-9a8fa7637b22.PNG)\r\n\r\nSome notes:\r\n1. Selecting \"Nobody specific\" as the recipient type will result in the recipients being \"%GENERAL%\"\r\n2. Selecting \"Instructors in this course\" as the giver type and \"Giver's team\" as the recipient type will result in the recipients being \"Instructors\"\r\n3. Columns and rows can be resized\r\n4. When the the giver and recipient types are custom, all the visibility rows are shown","created_at":"2016-06-30T16:45:27Z","updated_at":"2016-07-11T11:22:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"12797cd929f5a4de00b21822c91fead263cc96dd","assignee":{"login":"YongJieYongJie","id":14101781,"avatar_url":"https://avatars.githubusercontent.com/u/14101781?v=3","gravatar_id":"","url":"https://api.github.com/users/YongJieYongJie","html_url":"https://github.com/YongJieYongJie","followers_url":"https://api.github.com/users/YongJieYongJie/followers","following_url":"https://api.github.com/users/YongJieYongJie/following{/other_user}","gists_url":"https://api.github.com/users/YongJieYongJie/gists{/gist_id}","starred_url":"https://api.github.com/users/YongJieYongJie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/YongJieYongJie/subscriptions","organizations_url":"https://api.github.com/users/YongJieYongJie/orgs","repos_url":"https://api.github.com/users/YongJieYongJie/repos","events_url":"https://api.github.com/users/YongJieYongJie/events{/privacy}","received_events_url":"https://api.github.com/users/YongJieYongJie/received_events","type":"User","site_admin":false},"assignees":[{"login":"YongJieYongJie","id":14101781,"avatar_url":"https://avatars.githubusercontent.com/u/14101781?v=3","gravatar_id":"","url":"https://api.github.com/users/YongJieYongJie","html_url":"https://github.com/YongJieYongJie","followers_url":"https://api.github.com/users/YongJieYongJie/followers","following_url":"https://api.github.com/users/YongJieYongJie/following{/other_user}","gists_url":"https://api.github.com/users/YongJieYongJie/gists{/gist_id}","starred_url":"https://api.github.com/users/YongJieYongJie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/YongJieYongJie/subscriptions","organizations_url":"https://api.github.com/users/YongJieYongJie/orgs","repos_url":"https://api.github.com/users/YongJieYongJie/repos","events_url":"https://api.github.com/users/YongJieYongJie/events{/privacy}","received_events_url":"https://api.github.com/users/YongJieYongJie/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/TEAMMATES/teammates/pulls/5777/commits","review_comments_url":"https://api.github.com/repos/TEAMMATES/teammates/pulls/5777/comments","review_comment_url":"https://api.github.com/repos/TEAMMATES/teammates/pulls/comments{/number}","comments_url":"https://api.github.com/repos/TEAMMATES/teammates/issues/5777/comments","statuses_url":"https://api.github.com/repos/TEAMMATES/teammates/statuses/86aae908b3c3fb1ea47ddb41110c0b445ca8a48d","head":{"label":"TEAMMATES:custom-feedback-paths-frontend","ref":"custom-feedback-paths-frontend","sha":"86aae908b3c3fb1ea47ddb41110c0b445ca8a48d","user":{"login":"TEAMMATES","id":7374810,"avatar_url":"https://avatars.githubusercontent.com/u/7374810?v=3","gravatar_id":"","url":"https://api.github.com/users/TEAMMATES","html_url":"https://github.com/TEAMMATES","followers_url":"https://api.github.com/users/TEAMMATES/followers","following_url":"https://api.github.com/users/TEAMMATES/following{/other_user}","gists_url":"https://api.github.com/users/TEAMMATES/gists{/gist_id}","starred_url":"https://api.github.com/users/TEAMMATES/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TEAMMATES/subscriptions","organizations_url":"https://api.github.com/users/TEAMMATES/orgs","repos_url":"https://api.github.com/users/TEAMMATES/repos","events_url":"https://api.github.com/users/TEAMMATES/events{/privacy}","received_events_url":"https://api.github.com/users/TEAMMATES/received_events","type":"Organization","site_admin":false},"repo":{"id":19369035,"name":"teammates","full_name":"TEAMMATES/teammates","owner":{"login":"TEAMMATES","id":7374810,"avatar_url":"https://avatars.githubusercontent.com/u/7374810?v=3","gravatar_id":"","url":"https://api.github.com/users/TEAMMATES","html_url":"https://github.com/TEAMMATES","followers_url":"https://api.github.com/users/TEAMMATES/followers","following_url":"https://api.github.com/users/TEAMMATES/following{/other_user}","gists_url":"https://api.github.com/users/TEAMMATES/gists{/gist_id}","starred_url":"https://api.github.com/users/TEAMMATES/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TEAMMATES/subscriptions","organizations_url":"https://api.github.com/users/TEAMMATES/orgs","repos_url":"https://api.github.com/users/TEAMMATES/repos","events_url":"https://api.github.com/users/TEAMMATES/events{/privacy}","received_events_url":"https://api.github.com/users/TEAMMATES/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/TEAMMATES/teammates","description":"This is the project website for the TEAMMATES feedback management tool for education","fork":false,"url":"https://api.github.com/repos/TEAMMATES/teammates","forks_url":"https://api.github.com/repos/TEAMMATES/teammates/forks","keys_url":"https://api.github.com/repos/TEAMMATES/teammates/keys{/key_id}","collaborators_url":"https://api.github.com/repos/TEAMMATES/teammates/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/TEAMMATES/teammates/teams","hooks_url":"https://api.github.com/repos/TEAMMATES/teammates/hooks","issue_events_url":"https://api.github.com/repos/TEAMMATES/teammates/issues/events{/number}","events_url":"https://api.github.com/repos/TEAMMATES/teammates/events","assignees_url":"https://api.github.com/repos/TEAMMATES/teammates/assignees{/user}","branches_url":"https://api.github.com/repos/TEAMMATES/teammates/branches{/branch}","tags_url":"https://api.github.com/repos/TEAMMATES/teammates/tags","blobs_url":"https://api.github.com/repos/TEAMMATES/teammates/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/TEAMMATES/teammates/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/TEAMMATES/teammates/git/refs{/sha}","trees_url":"https://api.github.com/repos/TEAMMATES/teammates/git/trees{/sha}","statuses_url":"https://api.github.com/repos/TEAMMATES/teammates/statuses/{sha}","languages_url":"https://api.github.com/repos/TEAMMATES/teammates/languages","stargazers_url":"https://api.github.com/repos/TEAMMATES/teammates/stargazers","contributors_url":"https://api.github.com/repos/TEAMMATES/teammates/contributors","subscribers_url":"https://api.github.com/repos/TEAMMATES/teammates/subscribers","subscription_url":"https://api.github.com/repos/TEAMMATES/teammates/subscription","commits_url":"https://api.github.com/repos/TEAMMATES/teammates/commits{/sha}","git_commits_url":"https://api.github.com/repos/TEAMMATES/teammates/git/commits{/sha}","comments_url":"https://api.github.com/repos/TEAMMATES/teammates/comments{/number}","issue_comment_url":"https://api.github.com/repos/TEAMMATES/teammates/issues/comments{/number}","contents_url":"https://api.github.com/repos/TEAMMATES/teammates/contents/{+path}","compare_url":"https://api.github.com/repos/TEAMMATES/teammates/compare/{base}...{head}","merges_url":"https://api.github.com/repos/TEAMMATES/teammates/merges","archive_url":"https://api.github.com/repos/TEAMMATES/teammates/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/TEAMMATES/teammates/downloads","issues_url":"https://api.github.com/repos/TEAMMATES/teammates/issues{/number}","pulls_url":"https://api.github.com/repos/TEAMMATES/teammates/pulls{/number}","milestones_url":"https://api.github.com/repos/TEAMMATES/teammates/milestones{/number}","notifications_url":"https://api.github.com/repos/TEAMMATES/teammates/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/TEAMMATES/teammates/labels{/name}","releases_url":"https://api.github.com/repos/TEAMMATES/teammates/releases{/id}","deployments_url":"https://api.github.com/repos/TEAMMATES/teammates/deployments","created_at":"2014-05-02T07:43:00Z","updated_at":"2016-07-10T13:36:45Z","pushed_at":"2016-07-11T11:02:11Z","git_url":"git://github.com/TEAMMATES/teammates.git","ssh_url":"git@github.com:TEAMMATES/teammates.git","clone_url":"https://github.com/TEAMMATES/teammates.git","svn_url":"https://github.com/TEAMMATES/teammates","homepage":"http://teammatesv4.appspot.com/","size":189642,"stargazers_count":102,"watchers_count":102,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":260,"mirror_url":null,"open_issues_count":486,"forks":260,"open_issues":486,"watchers":102,"default_branch":"master"}},"base":{"label":"TEAMMATES:custom-feedback-paths","ref":"custom-feedback-paths","sha":"352b6384b2adc0144b937b0053c30a935fc1c0a6","user":{"login":"TEAMMATES","id":7374810,"avatar_url":"https://avatars.githubusercontent.com/u/7374810?v=3","gravatar_id":"","url":"https://api.github.com/users/TEAMMATES","html_url":"https://github.com/TEAMMATES","followers_url":"https://api.github.com/users/TEAMMATES/followers","following_url":"https://api.github.com/users/TEAMMATES/following{/other_user}","gists_url":"https://api.github.com/users/TEAMMATES/gists{/gist_id}","starred_url":"https://api.github.com/users/TEAMMATES/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TEAMMATES/subscriptions","organizations_url":"https://api.github.com/users/TEAMMATES/orgs","repos_url":"https://api.github.com/users/TEAMMATES/repos","events_url":"https://api.github.com/users/TEAMMATES/events{/privacy}","received_events_url":"https://api.github.com/users/TEAMMATES/received_events","type":"Organization","site_admin":false},"repo":{"id":19369035,"name":"teammates","full_name":"TEAMMATES/teammates","owner":{"login":"TEAMMATES","id":7374810,"avatar_url":"https://avatars.githubusercontent.com/u/7374810?v=3","gravatar_id":"","url":"https://api.github.com/users/TEAMMATES","html_url":"https://github.com/TEAMMATES","followers_url":"https://api.github.com/users/TEAMMATES/followers","following_url":"https://api.github.com/users/TEAMMATES/following{/other_user}","gists_url":"https://api.github.com/users/TEAMMATES/gists{/gist_id}","starred_url":"https://api.github.com/users/TEAMMATES/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TEAMMATES/subscriptions","organizations_url":"https://api.github.com/users/TEAMMATES/orgs","repos_url":"https://api.github.com/users/TEAMMATES/repos","events_url":"https://api.github.com/users/TEAMMATES/events{/privacy}","received_events_url":"https://api.github.com/users/TEAMMATES/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/TEAMMATES/teammates","description":"This is the project website for the TEAMMATES feedback management tool for education","fork":false,"url":"https://api.github.com/repos/TEAMMATES/teammates","forks_url":"https://api.github.com/repos/TEAMMATES/teammates/forks","keys_url":"https://api.github.com/repos/TEAMMATES/teammates/keys{/key_id}","collaborators_url":"https://api.github.com/repos/TEAMMATES/teammates/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/TEAMMATES/teammates/teams","hooks_url":"https://api.github.com/repos/TEAMMATES/teammates/hooks","issue_events_url":"https://api.github.com/repos/TEAMMATES/teammates/issues/events{/number}","events_url":"https://api.github.com/repos/TEAMMATES/teammates/events","assignees_url":"https://api.github.com/repos/TEAMMATES/teammates/assignees{/user}","branches_url":"https://api.github.com/repos/TEAMMATES/teammates/branches{/branch}","tags_url":"https://api.github.com/repos/TEAMMATES/teammates/tags","blobs_url":"https://api.github.com/repos/TEAMMATES/teammates/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/TEAMMATES/teammates/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/TEAMMATES/teammates/git/refs{/sha}","trees_url":"https://api.github.com/repos/TEAMMATES/teammates/git/trees{/sha}","statuses_url":"https://api.github.com/repos/TEAMMATES/teammates/statuses/{sha}","languages_url":"https://api.github.com/repos/TEAMMATES/teammates/languages","stargazers_url":"https://api.github.com/repos/TEAMMATES/teammates/stargazers","contributors_url":"https://api.github.com/repos/TEAMMATES/teammates/contributors","subscribers_url":"https://api.github.com/repos/TEAMMATES/teammates/subscribers","subscription_url":"https://api.github.com/repos/TEAMMATES/teammates/subscription","commits_url":"https://api.github.com/repos/TEAMMATES/teammates/commits{/sha}","git_commits_url":"https://api.github.com/repos/TEAMMATES/teammates/git/commits{/sha}","comments_url":"https://api.github.com/repos/TEAMMATES/teammates/comments{/number}","issue_comment_url":"https://api.github.com/repos/TEAMMATES/teammates/issues/comments{/number}","contents_url":"https://api.github.com/repos/TEAMMATES/teammates/contents/{+path}","compare_url":"https://api.github.com/repos/TEAMMATES/teammates/compare/{base}...{head}","merges_url":"https://api.github.com/repos/TEAMMATES/teammates/merges","archive_url":"https://api.github.com/repos/TEAMMATES/teammates/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/TEAMMATES/teammates/downloads","issues_url":"https://api.github.com/repos/TEAMMATES/teammates/issues{/number}","pulls_url":"https://api.github.com/repos/TEAMMATES/teammates/pulls{/number}","milestones_url":"https://api.github.com/repos/TEAMMATES/teammates/milestones{/number}","notifications_url":"https://api.github.com/repos/TEAMMATES/teammates/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/TEAMMATES/teammates/labels{/name}","releases_url":"https://api.github.com/repos/TEAMMATES/teammates/releases{/id}","deployments_url":"https://api.github.com/repos/TEAMMATES/teammates/deployments","created_at":"2014-05-02T07:43:00Z","updated_at":"2016-07-10T13:36:45Z","pushed_at":"2016-07-11T11:02:11Z","git_url":"git://github.com/TEAMMATES/teammates.git","ssh_url":"git@github.com:TEAMMATES/teammates.git","clone_url":"https://github.com/TEAMMATES/teammates.git","svn_url":"https://github.com/TEAMMATES/teammates","homepage":"http://teammatesv4.appspot.com/","size":189642,"stargazers_count":102,"watchers_count":102,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":260,"mirror_url":null,"open_issues_count":486,"forks":260,"open_issues":486,"watchers":102,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/TEAMMATES/teammates/pulls/5777"},"html":{"href":"https://github.com/TEAMMATES/teammates/pull/5777"},"issue":{"href":"https://api.github.com/repos/TEAMMATES/teammates/issues/5777"},"comments":{"href":"https://api.github.com/repos/TEAMMATES/teammates/issues/5777/comments"},"review_comments":{"href":"https://api.github.com/repos/TEAMMATES/teammates/pulls/5777/comments"},"review_comment":{"href":"https://api.github.com/repos/TEAMMATES/teammates/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/TEAMMATES/teammates/pulls/5777/commits"},"statuses":{"href":"https://api.github.com/repos/TEAMMATES/teammates/statuses/86aae908b3c3fb1ea47ddb41110c0b445ca8a48d"}}}}
{"actor":{"display_login":"JosephineKwa"}}