{"action":"created","comment":{"url":"https://api.github.com/repos/learningequality/ka-lite/pulls/comments/30843278","id":30843278,"diff_hunk":"@@ -0,0 +1,343 @@\n+var CoachReportView = BaseView.extend({\n+\n+    template: HB.template('coach_nav/reports-nav'),\n+\n+    initialize: function(options) {\n+\n+        this.facility_select_view = new FacilitySelectView({model: this.model});\n+        this.group_select_view = new GroupSelectView({model: this.model});\n+\n+        this.render();\n+    },\n+\n+    render: function() {\n+        this.$el.html(this.template());\n+        this.$('#group-select-container').append(this.group_select_view.$el);\n+        this.$('#facility-select-container').append(this.facility_select_view.$el);\n+        this.tabular_view = new TabularReportView({model: this.model});\n+        this.$(\"#student_report_container\").append(this.tabular_view.$el);\n+    }\n+});\n+\n+var DetailPanelInlineRowView = BaseView.extend({\n+\n+    tagName: 'tr',\n+\n+    className: 'details-row',\n+\n+    initialize: function(options) {\n+        this.contents_length = options.contents_length;\n+        this.content_item = options.content_item;\n+        this.render();\n+    },\n+\n+    render: function() {\n+        this.detail_view = new detailsPanelView({\n+            tagName: 'td',\n+            model: this.model,\n+            content_item: this.content_item,\n+            attributes: {colspan: this.contents_length + 1}\n+        });\n+        this.$el.append(this.detail_view.el);\n+    }\n+})\n+        \n+var detailsPanelView = BaseView.extend({\n+    \n+    //Number of items to show from the collection\n+    limit: 4,\n+    \n+    template: HB.template(\"coach_nav/detailspanel\"),\n+    \n+    initialize: function (options) {\n+        _.bindAll(this);\n+        this.content_item = options.content_item;\n+        if (this.content_item.get(\"kind\") === \"Exercise\") {\n+            this.collection = new window.AttemptLogCollection([], {\n+                user: this.model.get(\"user\"),\n+                limit: this.limit,\n+                exercise_id: this.model.get(\"exercise_id\")\n+            });\n+            this.collection.fetch();\n+        }\n+        this.listenToOnce(this.collection, \"sync\", this.render);\n+        this.render();\n+    },\n+    \n+    render: function() {\n+        var item_count = 0;\n+        if (this.collection.meta) {\n+            item_count = this.collection.meta.total_count;\n+        }\n+        this.pages = [];\n+        if (item_count/this.limit > 1) {\n+            for (var i=1; i < item_count/this.limit + 1; i++) {\n+                this.pages.push(i);\n+            }\n+        }\n+        this.$el.html(this.template({\n+            model: this.model.attributes,\n+            itemdata: this.content_item.attributes,\n+            pages: this.pages,\n+            collection: this.collection.to_objects()\n+        }));\n+        this.bodyView = new detailsPanelBodyView ({\n+            collection: this.collection,\n+            el: this.$(\".body\")\n+        });\n+    }\n+});\n+\n+\n+var detailsPanelBodyView = BaseView.extend({\n+    \n+    template: HB.template(\"coach_nav/detailspanelbody\"),\n+    \n+    initialize: function (options) {\n+        _.bindAll(this);\n+        this.render();\n+    },\n+    \n+    render: function() {\n+        this.$el.html(this.template({\n+            collection: this.collection.to_objects()\n+        }));\n+    }\n+});\n+\n+var TabularReportView = BaseView.extend({\n+\n+    template: HB.template(\"tabular_reports/tabular-view\"),\n+\n+    initialize: function() {\n+        _.bindAll(this);\n+        this.set_data_model();\n+        this.listenTo(this.model, \"change\", this.set_data_model);\n+    },\n+\n+    render: function() {\n+        this.$el.html(this.template({\n+            contents: this.contents.toJSON(),\n+            learners: this.contents.length\n+        }));\n+        var row_views = [];\n+        for (var i = 0; i < this.learners.length; i++) {\n+            var row_view = this.add_subview(TabularReportRowView, {model: this.learners.at(i), contents: this.contents})\n+            row_views.push(row_view);\n+            this.listenTo(row_view, \"detail_view\", this.set_detail_view);\n+        }\n+        this.append_views(row_views, \".student-data\");\n+    },\n+\n+    set_data_model: function (){\n+        var self = this;\n+        this.data_model = new CoachReportModel({\n+            facility: this.model.get(\"facility\"),\n+            group: this.model.get(\"group\")\n+        });\n+        if (this.model.get(\"facility\")) {\n+            this.data_model.fetch().then(function() {\n+                self.learners = new Backbone.Collection(self.data_model.get(\"learners\"));\n+                self.contents = new Backbone.Collection(self.data_model.get(\"contents\"));\n+                for (var i = 0; i < self.learners.length; i++) {\n+                    self.learners.models[i].set(\"logs\", _.object(\n+                        _.map(_.filter(self.data_model.get(\"logs\"), function(log) {\n+                            return log.user === self.learners.models[i].get(\"pk\");\n+                        }), function(item) {\n+                            return [item.exercise_id || item.video_id || item.content_id, item];\n+                        })));\n+                }\n+                self.render();\n+            });\n+        }\n+    },\n+\n+    set_detail_view: function(detail_view) {\n+        if (this.detail_view) {\n+            this.detail_view.remove();\n+        }\n+        if (detail_view) {\n+            this.detail_view = detail_view;\n+        }\n+    }\n+\n+});\n+\n+var TabularReportRowView = BaseView.extend({\n+\n+    template: HB.template(\"tabular_reports/tabular-view-row\"),\n+\n+    tagName: 'tr',\n+\n+    initialize: function(options) {\n+        _.bindAll(this);\n+\n+        this.contents = options.contents;\n+        this.render();\n+    },\n+\n+    render: function() {\n+        this.$el.html(this.template(this.model.attributes));\n+\n+        var cell_views = [];\n+        for (var i = 0; i < this.contents.length; i++) {\n+            var data = this.model.get(\"logs\")[this.contents.at(i).get(\"id\")];\n+            var new_view = this.add_subview(TabularReportRowCellView, {model: new Backbone.Model(data)});\n+            cell_views.push(new_view);\n+            this.listenTo(new_view, \"detail_view\", this.show_detail_view);\n+        }\n+        this.append_views(cell_views);\n+    },\n+\n+    show_detail_view: function(model) {\n+        if (this.detail_view) {\n+            // TODO (rtibbles): Implement Models properly here to reflect server side id attributes\n+            if (this.detail_view.model.cid === model.cid) {\n+                delete this.detail_view;\n+                this.trigger(\"detail_view\");\n+                return false\n+            }\n+            this.detail_view.remove();\n+        }\n+\n+\n+        var model_id = model.get(\"exercise_id\") || model.get(\"video_id\") || model.get(\"content_id\");\n+        this.detail_view = new DetailPanelInlineRowView({\n+            model: model,\n+            contents_length: this.contents.length,\n+            content_item: this.contents.find(function(item) {return item.get(\"id\") === model_id;})\n+        });\n+        this.$el.after(this.detail_view.el);\n+\n+        this.trigger(\"detail_view\", this.detail_view);\n+\n+    }\n+\n+});\n+\n+var TabularReportRowCellView = BaseView.extend({\n+\n+    tagName: 'td',\n+\n+    events: {\n+        \"click\": \"show_detail_view\"\n+    },\n+\n+    status_class: function() {\n+        var status_class = \"partial\";\n+        if (_.isEmpty(this.model.attributes)) {\n+            status_class = \"not-attempted\";\n+        } else if (this.model.get(\"complete\")) {\n+            status_class = \"complete\";\n+        } else if (this.model.get(\"struggling\")) {\n+            status_class = \"struggling\";\n+        }\n+        return status_class;\n+    },\n+\n+    className: function() {\n+        return sprintf(\"status data %s\", this.status_class());\n+    },\n+\n+    title_attributes: {\n+        \"not-attempted\": gettext(\"Not Attempted\"),\n+        \"partial\": gettext(\"Attempted\"),\n+        \"complete\": gettext(\"Complete\"),\n+        \"struggling\": gettext(\"Struggling\")\n+    },\n+\n+    attributes: function() {\n+        return {title: this.title_attributes[this.status_class()]};\n+    },\n+\n+    initialize: function() {\n+        this.render();\n+    },\n+\n+    render: function() {\n+        if (this.model.has(\"streak_progress\")) {\n+            this.$el.html(this.model.get(\"streak_progress\") + \"%\");\n+        }\n+    },\n+\n+    show_detail_view: function() {\n+        if (_.isEmpty(this.model.attributes)) {\n+            return false;\n+        } else {\n+            this.trigger(\"detail_view\", this.model);\n+        }\n+    }\n+});\n+\n+var FacilitySelectView = Backbone.View.extend({\n+    template: HB.template('coach_nav/facility-select'),\n+\n+    initialize: function() {\n+        _.bindAll(this);\n+        this.facility_list = new FacilityCollection();\n+        this.facility_list.fetch();\n+        this.listenTo(this.facility_list, 'sync', this.render);\n+        this.render();\n+    },\n+\n+    render: function() {\n+        this.$el.html(this.template({\n+            facilities: this.facility_list.toJSON(),\n+            selected: this.model.get(\"facility\")\n+        }));\n+        if (!this.model.get(\"facility\")) {\n+            this.facility_changed();\n+        }\n+        return this;\n+    },\n+\n+    events: {\n+        \"change\": \"facility_changed\"\n+    },\n+\n+    facility_changed: function() {\n+        this.model.set(\"facility\", this.$(\":selected\").val());\n+    }\n+});\n+\n+var GroupSelectView = Backbone.View.extend({\n+    template: HB.template('coach_nav/group-select'),\n+\n+    initialize: function() {\n+        this.group_list = new GroupCollection();\n+        this.fetch_by_facility();\n+        this.listenTo(this.group_list, 'sync', this.render);","path":"kalite/coachreports/static/js/coachreports/coach_reports/views.js","position":309,"original_position":309,"commit_id":"d0320d6d371a5b11e19d34626bf2fa624d42bfa3","original_commit_id":"d0320d6d371a5b11e19d34626bf2fa624d42bfa3","user":{"login":"MCGallaspy","id":8888020,"avatar_url":"https://avatars.githubusercontent.com/u/8888020?v=3","gravatar_id":"","url":"https://api.github.com/users/MCGallaspy","html_url":"https://github.com/MCGallaspy","followers_url":"https://api.github.com/users/MCGallaspy/followers","following_url":"https://api.github.com/users/MCGallaspy/following{/other_user}","gists_url":"https://api.github.com/users/MCGallaspy/gists{/gist_id}","starred_url":"https://api.github.com/users/MCGallaspy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MCGallaspy/subscriptions","organizations_url":"https://api.github.com/users/MCGallaspy/orgs","repos_url":"https://api.github.com/users/MCGallaspy/repos","events_url":"https://api.github.com/users/MCGallaspy/events{/privacy}","received_events_url":"https://api.github.com/users/MCGallaspy/received_events","type":"User","site_admin":false},"body":"Same as above, you should register the listener before `fetch`ing, and what happens on the `error` event?","created_at":"2015-05-21T20:23:22Z","updated_at":"2015-05-21T20:23:22Z","html_url":"https://github.com/learningequality/ka-lite/pull/3649#discussion_r30843278","pull_request_url":"https://api.github.com/repos/learningequality/ka-lite/pulls/3649","_links":{"self":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/comments/30843278"},"html":{"href":"https://github.com/learningequality/ka-lite/pull/3649#discussion_r30843278"},"pull_request":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/3649"}}},"pull_request":{"url":"https://api.github.com/repos/learningequality/ka-lite/pulls/3649","id":35543564,"html_url":"https://github.com/learningequality/ka-lite/pull/3649","diff_url":"https://github.com/learningequality/ka-lite/pull/3649.diff","patch_url":"https://github.com/learningequality/ka-lite/pull/3649.patch","issue_url":"https://api.github.com/repos/learningequality/ka-lite/issues/3649","number":3649,"state":"open","locked":false,"title":"Coach report burn down and refactor","user":{"login":"rtibbles","id":1680573,"avatar_url":"https://avatars.githubusercontent.com/u/1680573?v=3","gravatar_id":"","url":"https://api.github.com/users/rtibbles","html_url":"https://github.com/rtibbles","followers_url":"https://api.github.com/users/rtibbles/followers","following_url":"https://api.github.com/users/rtibbles/following{/other_user}","gists_url":"https://api.github.com/users/rtibbles/gists{/gist_id}","starred_url":"https://api.github.com/users/rtibbles/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rtibbles/subscriptions","organizations_url":"https://api.github.com/users/rtibbles/orgs","repos_url":"https://api.github.com/users/rtibbles/repos","events_url":"https://api.github.com/users/rtibbles/events{/privacy}","received_events_url":"https://api.github.com/users/rtibbles/received_events","type":"User","site_admin":false},"body":"A first pass at fixing #1739.\r\n\r\nSummary of changes:\r\n* Refactors tabular view from Django template to Backbone View driven by an API call.\r\n* Adds detail view to allow expanded information on student engagement within tabular view.\r\n* Simplifies and removes all other coach report code (leaves individual student progress reports intact).\r\n* Deletes knowledgemap app.\r\n* Adds handlebars helper to render django URLs in handlebars templates (accepts arguments in sequence, as per django-js-reverse function).\r\n\r\nMore to come.","created_at":"2015-05-15T19:31:59Z","updated_at":"2015-05-21T20:23:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7e5e442fe64750d8e2f3bdafeecb1115cd5a05ae","assignee":{"login":"MCGallaspy","id":8888020,"avatar_url":"https://avatars.githubusercontent.com/u/8888020?v=3","gravatar_id":"","url":"https://api.github.com/users/MCGallaspy","html_url":"https://github.com/MCGallaspy","followers_url":"https://api.github.com/users/MCGallaspy/followers","following_url":"https://api.github.com/users/MCGallaspy/following{/other_user}","gists_url":"https://api.github.com/users/MCGallaspy/gists{/gist_id}","starred_url":"https://api.github.com/users/MCGallaspy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MCGallaspy/subscriptions","organizations_url":"https://api.github.com/users/MCGallaspy/orgs","repos_url":"https://api.github.com/users/MCGallaspy/repos","events_url":"https://api.github.com/users/MCGallaspy/events{/privacy}","received_events_url":"https://api.github.com/users/MCGallaspy/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/learningequality/ka-lite/milestones/41","html_url":"https://github.com/learningequality/ka-lite/milestones/0.14.0","labels_url":"https://api.github.com/repos/learningequality/ka-lite/milestones/41/labels","id":795036,"number":41,"title":"0.14.0","description":"","creator":{"login":"aronasorman","id":191955,"avatar_url":"https://avatars.githubusercontent.com/u/191955?v=3","gravatar_id":"","url":"https://api.github.com/users/aronasorman","html_url":"https://github.com/aronasorman","followers_url":"https://api.github.com/users/aronasorman/followers","following_url":"https://api.github.com/users/aronasorman/following{/other_user}","gists_url":"https://api.github.com/users/aronasorman/gists{/gist_id}","starred_url":"https://api.github.com/users/aronasorman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aronasorman/subscriptions","organizations_url":"https://api.github.com/users/aronasorman/orgs","repos_url":"https://api.github.com/users/aronasorman/repos","events_url":"https://api.github.com/users/aronasorman/events{/privacy}","received_events_url":"https://api.github.com/users/aronasorman/received_events","type":"User","site_admin":false},"open_issues":100,"closed_issues":148,"state":"open","created_at":"2014-09-18T21:53:07Z","updated_at":"2015-05-21T17:16:08Z","due_on":"2015-07-01T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/learningequality/ka-lite/pulls/3649/commits","review_comments_url":"https://api.github.com/repos/learningequality/ka-lite/pulls/3649/comments","review_comment_url":"https://api.github.com/repos/learningequality/ka-lite/pulls/comments{/number}","comments_url":"https://api.github.com/repos/learningequality/ka-lite/issues/3649/comments","statuses_url":"https://api.github.com/repos/learningequality/ka-lite/statuses/d0320d6d371a5b11e19d34626bf2fa624d42bfa3","head":{"label":"rtibbles:coach_report_API","ref":"coach_report_API","sha":"d0320d6d371a5b11e19d34626bf2fa624d42bfa3","user":{"login":"rtibbles","id":1680573,"avatar_url":"https://avatars.githubusercontent.com/u/1680573?v=3","gravatar_id":"","url":"https://api.github.com/users/rtibbles","html_url":"https://github.com/rtibbles","followers_url":"https://api.github.com/users/rtibbles/followers","following_url":"https://api.github.com/users/rtibbles/following{/other_user}","gists_url":"https://api.github.com/users/rtibbles/gists{/gist_id}","starred_url":"https://api.github.com/users/rtibbles/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rtibbles/subscriptions","organizations_url":"https://api.github.com/users/rtibbles/orgs","repos_url":"https://api.github.com/users/rtibbles/repos","events_url":"https://api.github.com/users/rtibbles/events{/privacy}","received_events_url":"https://api.github.com/users/rtibbles/received_events","type":"User","site_admin":false},"repo":{"id":10712071,"name":"ka-lite","full_name":"rtibbles/ka-lite","owner":{"login":"rtibbles","id":1680573,"avatar_url":"https://avatars.githubusercontent.com/u/1680573?v=3","gravatar_id":"","url":"https://api.github.com/users/rtibbles","html_url":"https://github.com/rtibbles","followers_url":"https://api.github.com/users/rtibbles/followers","following_url":"https://api.github.com/users/rtibbles/following{/other_user}","gists_url":"https://api.github.com/users/rtibbles/gists{/gist_id}","starred_url":"https://api.github.com/users/rtibbles/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rtibbles/subscriptions","organizations_url":"https://api.github.com/users/rtibbles/orgs","repos_url":"https://api.github.com/users/rtibbles/repos","events_url":"https://api.github.com/users/rtibbles/events{/privacy}","received_events_url":"https://api.github.com/users/rtibbles/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rtibbles/ka-lite","description":"Khan Academy Lite: lightweight web server for serving core Khan Academy content (videos and exercises) without needing internet connectivity","fork":true,"url":"https://api.github.com/repos/rtibbles/ka-lite","forks_url":"https://api.github.com/repos/rtibbles/ka-lite/forks","keys_url":"https://api.github.com/repos/rtibbles/ka-lite/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rtibbles/ka-lite/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rtibbles/ka-lite/teams","hooks_url":"https://api.github.com/repos/rtibbles/ka-lite/hooks","issue_events_url":"https://api.github.com/repos/rtibbles/ka-lite/issues/events{/number}","events_url":"https://api.github.com/repos/rtibbles/ka-lite/events","assignees_url":"https://api.github.com/repos/rtibbles/ka-lite/assignees{/user}","branches_url":"https://api.github.com/repos/rtibbles/ka-lite/branches{/branch}","tags_url":"https://api.github.com/repos/rtibbles/ka-lite/tags","blobs_url":"https://api.github.com/repos/rtibbles/ka-lite/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rtibbles/ka-lite/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rtibbles/ka-lite/git/refs{/sha}","trees_url":"https://api.github.com/repos/rtibbles/ka-lite/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rtibbles/ka-lite/statuses/{sha}","languages_url":"https://api.github.com/repos/rtibbles/ka-lite/languages","stargazers_url":"https://api.github.com/repos/rtibbles/ka-lite/stargazers","contributors_url":"https://api.github.com/repos/rtibbles/ka-lite/contributors","subscribers_url":"https://api.github.com/repos/rtibbles/ka-lite/subscribers","subscription_url":"https://api.github.com/repos/rtibbles/ka-lite/subscription","commits_url":"https://api.github.com/repos/rtibbles/ka-lite/commits{/sha}","git_commits_url":"https://api.github.com/repos/rtibbles/ka-lite/git/commits{/sha}","comments_url":"https://api.github.com/repos/rtibbles/ka-lite/comments{/number}","issue_comment_url":"https://api.github.com/repos/rtibbles/ka-lite/issues/comments{/number}","contents_url":"https://api.github.com/repos/rtibbles/ka-lite/contents/{+path}","compare_url":"https://api.github.com/repos/rtibbles/ka-lite/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rtibbles/ka-lite/merges","archive_url":"https://api.github.com/repos/rtibbles/ka-lite/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rtibbles/ka-lite/downloads","issues_url":"https://api.github.com/repos/rtibbles/ka-lite/issues{/number}","pulls_url":"https://api.github.com/repos/rtibbles/ka-lite/pulls{/number}","milestones_url":"https://api.github.com/repos/rtibbles/ka-lite/milestones{/number}","notifications_url":"https://api.github.com/repos/rtibbles/ka-lite/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rtibbles/ka-lite/labels{/name}","releases_url":"https://api.github.com/repos/rtibbles/ka-lite/releases{/id}","created_at":"2013-06-15T21:10:12Z","updated_at":"2014-07-11T22:41:10Z","pushed_at":"2015-05-21T17:20:44Z","git_url":"git://github.com/rtibbles/ka-lite.git","ssh_url":"git@github.com:rtibbles/ka-lite.git","clone_url":"https://github.com/rtibbles/ka-lite.git","svn_url":"https://github.com/rtibbles/ka-lite","homepage":"http://kalite.adhocsync.com/","size":194067,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"learningequality:develop","ref":"develop","sha":"3783c00b0d71ee4b0d129be7109b0e87c083c900","user":{"login":"learningequality","id":3926525,"avatar_url":"https://avatars.githubusercontent.com/u/3926525?v=3","gravatar_id":"","url":"https://api.github.com/users/learningequality","html_url":"https://github.com/learningequality","followers_url":"https://api.github.com/users/learningequality/followers","following_url":"https://api.github.com/users/learningequality/following{/other_user}","gists_url":"https://api.github.com/users/learningequality/gists{/gist_id}","starred_url":"https://api.github.com/users/learningequality/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/learningequality/subscriptions","organizations_url":"https://api.github.com/users/learningequality/orgs","repos_url":"https://api.github.com/users/learningequality/repos","events_url":"https://api.github.com/users/learningequality/events{/privacy}","received_events_url":"https://api.github.com/users/learningequality/received_events","type":"Organization","site_admin":false},"repo":{"id":5741125,"name":"ka-lite","full_name":"learningequality/ka-lite","owner":{"login":"learningequality","id":3926525,"avatar_url":"https://avatars.githubusercontent.com/u/3926525?v=3","gravatar_id":"","url":"https://api.github.com/users/learningequality","html_url":"https://github.com/learningequality","followers_url":"https://api.github.com/users/learningequality/followers","following_url":"https://api.github.com/users/learningequality/following{/other_user}","gists_url":"https://api.github.com/users/learningequality/gists{/gist_id}","starred_url":"https://api.github.com/users/learningequality/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/learningequality/subscriptions","organizations_url":"https://api.github.com/users/learningequality/orgs","repos_url":"https://api.github.com/users/learningequality/repos","events_url":"https://api.github.com/users/learningequality/events{/privacy}","received_events_url":"https://api.github.com/users/learningequality/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/learningequality/ka-lite","description":"KA Lite: lightweight web server for serving core Khan Academy content (videos and exercises) without needing internet connectivity","fork":false,"url":"https://api.github.com/repos/learningequality/ka-lite","forks_url":"https://api.github.com/repos/learningequality/ka-lite/forks","keys_url":"https://api.github.com/repos/learningequality/ka-lite/keys{/key_id}","collaborators_url":"https://api.github.com/repos/learningequality/ka-lite/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/learningequality/ka-lite/teams","hooks_url":"https://api.github.com/repos/learningequality/ka-lite/hooks","issue_events_url":"https://api.github.com/repos/learningequality/ka-lite/issues/events{/number}","events_url":"https://api.github.com/repos/learningequality/ka-lite/events","assignees_url":"https://api.github.com/repos/learningequality/ka-lite/assignees{/user}","branches_url":"https://api.github.com/repos/learningequality/ka-lite/branches{/branch}","tags_url":"https://api.github.com/repos/learningequality/ka-lite/tags","blobs_url":"https://api.github.com/repos/learningequality/ka-lite/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/learningequality/ka-lite/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/learningequality/ka-lite/git/refs{/sha}","trees_url":"https://api.github.com/repos/learningequality/ka-lite/git/trees{/sha}","statuses_url":"https://api.github.com/repos/learningequality/ka-lite/statuses/{sha}","languages_url":"https://api.github.com/repos/learningequality/ka-lite/languages","stargazers_url":"https://api.github.com/repos/learningequality/ka-lite/stargazers","contributors_url":"https://api.github.com/repos/learningequality/ka-lite/contributors","subscribers_url":"https://api.github.com/repos/learningequality/ka-lite/subscribers","subscription_url":"https://api.github.com/repos/learningequality/ka-lite/subscription","commits_url":"https://api.github.com/repos/learningequality/ka-lite/commits{/sha}","git_commits_url":"https://api.github.com/repos/learningequality/ka-lite/git/commits{/sha}","comments_url":"https://api.github.com/repos/learningequality/ka-lite/comments{/number}","issue_comment_url":"https://api.github.com/repos/learningequality/ka-lite/issues/comments{/number}","contents_url":"https://api.github.com/repos/learningequality/ka-lite/contents/{+path}","compare_url":"https://api.github.com/repos/learningequality/ka-lite/compare/{base}...{head}","merges_url":"https://api.github.com/repos/learningequality/ka-lite/merges","archive_url":"https://api.github.com/repos/learningequality/ka-lite/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/learningequality/ka-lite/downloads","issues_url":"https://api.github.com/repos/learningequality/ka-lite/issues{/number}","pulls_url":"https://api.github.com/repos/learningequality/ka-lite/pulls{/number}","milestones_url":"https://api.github.com/repos/learningequality/ka-lite/milestones{/number}","notifications_url":"https://api.github.com/repos/learningequality/ka-lite/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/learningequality/ka-lite/labels{/name}","releases_url":"https://api.github.com/repos/learningequality/ka-lite/releases{/id}","created_at":"2012-09-09T20:01:40Z","updated_at":"2015-05-21T00:20:55Z","pushed_at":"2015-05-21T19:49:57Z","git_url":"git://github.com/learningequality/ka-lite.git","ssh_url":"git@github.com:learningequality/ka-lite.git","clone_url":"https://github.com/learningequality/ka-lite.git","svn_url":"https://github.com/learningequality/ka-lite","homepage":"https://learningequality.org/ka-lite/","size":228077,"stargazers_count":210,"watchers_count":210,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":245,"mirror_url":null,"open_issues_count":245,"forks":245,"open_issues":245,"watchers":210,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/3649"},"html":{"href":"https://github.com/learningequality/ka-lite/pull/3649"},"issue":{"href":"https://api.github.com/repos/learningequality/ka-lite/issues/3649"},"comments":{"href":"https://api.github.com/repos/learningequality/ka-lite/issues/3649/comments"},"review_comments":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/3649/comments"},"review_comment":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/learningequality/ka-lite/pulls/3649/commits"},"statuses":{"href":"https://api.github.com/repos/learningequality/ka-lite/statuses/d0320d6d371a5b11e19d34626bf2fa624d42bfa3"}}}}