{"action":"created","comment":{"url":"https://api.github.com/repos/koreader/koreader/pulls/comments/173968383","pull_request_review_id":103244393,"id":173968383,"diff_hunk":"@@ -0,0 +1,433 @@\n+local Blitbuffer = require(\"ffi/blitbuffer\")\n+local Button = require(\"ui/widget/button\")\n+local CenterContainer = require(\"ui/widget/container/centercontainer\")\n+local Device = require(\"device\")\n+local FrameContainer = require(\"ui/widget/container/framecontainer\")\n+local Geom = require(\"ui/geometry\")\n+local Font = require(\"ui/font\")\n+local HorizontalGroup = require(\"ui/widget/horizontalgroup\")\n+local HorizontalSpan = require(\"ui/widget/horizontalspan\")\n+local InputContainer = require(\"ui/widget/container/inputcontainer\")\n+local LineWidget = require(\"ui/widget/linewidget\")\n+local OverlapGroup = require(\"ui/widget/overlapgroup\")\n+local Size = require(\"ui/size\")\n+local TextBoxWidget = require(\"ui/widget/textboxwidget\")\n+local TextWidget = require(\"ui/widget/textwidget\")\n+local UIManager = require(\"ui/uimanager\")\n+local VerticalGroup = require(\"ui/widget/verticalgroup\")\n+local VerticalSpan = require(\"ui/widget/verticalspan\")\n+local WidgetContainer = require(\"ui/widget/container/widgetcontainer\")\n+local InputText = require(\"ui/widget/inputtext\")\n+local _ = require(\"gettext\")\n+local Screen = Device.screen\n+\n+local NaturalLightWidget = InputContainer:new{\n+    is_always_active = true,\n+    title_face = Font:getFace(\"x_smalltfont\"),\n+    width = nil,\n+    height = nil,\n+    textbox_width = 0.1,\n+    button_width = 0.07,\n+    text_width = 0.3,\n+    white_gain = nil,\n+    white_offset = nil,\n+    red_gain = nil,\n+    red_offset = nil,\n+    green_gain = nil,\n+    green_offset = nil,\n+    exponent = nil,\n+    fl_widget = nil,\n+    old_values = nil\n+}\n+\n+function NaturalLightWidget:init()\n+    self.medium_font_face = Font:getFace(\"ffont\")\n+    self.nl_bar = {}\n+    self.screen_width = Screen:getWidth()\n+    self.screen_height = Screen:getHeight()\n+    self.span = math.ceil(self.screen_height * 0.01)\n+    self.width = self.screen_width*0.95\n+    self.button_width = 0.08 * self.width\n+    self.textbox_width = 0.1 * self.width\n+    self.text_width = 0.2 * self.width\n+    self.powerd = Device:getPowerDevice()\n+    self:createFrame()\n+end\n+\n+function NaturalLightWidget:applyValues()\n+    self.powerd.fl.white_gain = self.white_gain[2]:getText()\n+    self.powerd.fl.white_offset = self.white_offset[2]:getText()\n+    self.powerd.fl.red_gain = self.red_gain[2]:getText()\n+    self.powerd.fl.red_offset = self.red_offset[2]:getText()\n+    self.powerd.fl.green_gain = self.green_gain[2]:getText()\n+    self.powerd.fl.green_offset = self.green_offset[2]:getText()\n+    self.powerd.fl.exponent = self.exponent[2]:getText()\n+    self.powerd.fl:setNaturalBrightness()\n+end\n+\n+-- Create an InputText with '-' and '+' button next to it. Tapping\n+-- those buttons will de/increase by 'step', and 'step/10' on hold.\n+function NaturalLightWidget:adaptableNumber(initial, step)\n+    local minus_number_plus = HorizontalGroup:new{ align = \"center\" }\n+    local input_text = InputText:new{\n+        parent=self,\n+        text=initial,\n+        input_type=\"number\",\n+        hint=\"\",\n+        width=self.textbox_width,\n+        enter_callback = function()\n+            self:closeKeyboard()\n+            self:applyValues()\n+            UIManager:setDirty(self._current_input, \"fast\")\n+        end\n+    }\n+    input_text:unfocus()\n+    local button_minus = Button:new{\n+        text = \"-\",\n+        margin = Size.margin.small,\n+        radius = 0,\n+        width = self.button_width,\n+        show_parent = self,\n+        callback = function()\n+            self:closeKeyboard()\n+            self:setValueTextBox(input_text, input_text:getText() - step)\n+            self:applyValues()\n+        end,\n+        hold_callback = function()\n+            self:closeKeyboard()\n+            self:setValueTextBox(input_text, input_text:getText() - step/10.0)\n+            self:applyValues()\n+        end,\n+    }\n+    local button_plus = Button:new{\n+        text = \"+\",\n+        margin = Size.margin.small,\n+        radius = 0,\n+        width = self.button_width,\n+        show_parent = self,\n+        callback = function()\n+            self:closeKeyboard()\n+            self:setValueTextBox(input_text, input_text:getText() + step)\n+            self:applyValues()\n+            end,\n+        hold_callback = function()\n+            self:closeKeyboard()\n+            self:setValueTextBox(input_text, input_text:getText() + step/10)\n+            self:applyValues()\n+            end,\n+    }\n+    table.insert(minus_number_plus, button_minus)\n+    table.insert(minus_number_plus, input_text)\n+    table.insert(minus_number_plus, button_plus)\n+    return minus_number_plus\n+end\n+\n+-- Get current values that are used in sysfs_light\n+function NaturalLightWidget:getCurrentValues()\n+    return {white_gain =\n+                self.powerd.fl.white_gain,\n+            white_offset =\n+                self.powerd.fl.white_offset,\n+            red_gain =\n+                self.powerd.fl.red_gain,\n+            red_offset =\n+                self.powerd.fl.red_offset,\n+            green_gain =\n+                self.powerd.fl.green_gain,\n+            green_offset =\n+                self.powerd.fl.green_offset,\n+            exponent =\n+                self.powerd.fl.exponent}\n+end\n+\n+function NaturalLightWidget:createFrame()\n+    self.nl_title = FrameContainer:new{\n+        padding = Size.padding.default,\n+        margin = Size.margin.title,\n+        bordersize = 0,\n+        TextWidget:new{\n+            text = _(\"Natural Light configuration\"),\n+            face = self.title_face,\n+            bold = true,\n+            width = self.screen_width * 0.95,\n+        },\n+    }\n+    local main_content = FrameContainer:new{\n+        padding = Size.padding.button,\n+        margin = Size.margin.small,\n+        bordersize = 0,\n+        self:createMainContent(self.screen_width * 0.95,\n+                               self.screen_height * 0.201)\n+    }\n+    local nl_line = LineWidget:new{\n+        dimen = Geom:new{\n+            w = self.width,\n+            h = Size.line.thick,\n+        }\n+    }\n+    self.nl_bar = OverlapGroup:new{\n+        dimen = {\n+            w = self.width,\n+            h = self.nl_title:getSize().h\n+        },\n+        self.nl_title,\n+    }\n+    self.nl_frame = FrameContainer:new{\n+        radius = Size.radius.window,\n+        bordersize = Size.border.window,\n+        padding = 0,\n+        margin = 0,\n+        background = Blitbuffer.COLOR_WHITE,\n+        VerticalGroup:new{\n+            align = \"left\",\n+            self.nl_bar,\n+            nl_line,\n+            CenterContainer:new{\n+                dimen = Geom:new{\n+                    w = nl_line:getSize().w,\n+                    h = main_content:getSize().h,\n+                },\n+                main_content,\n+            },\n+        }\n+    }\n+    self[1] = WidgetContainer:new{\n+        align = \"top\",\n+        dimen =Geom:new{\n+            x = 0, y = 0,\n+            w = self.screen_width,\n+            h = self.screen_height,\n+        },\n+        FrameContainer:new{\n+            bordersize = 0,\n+            self.nl_frame,\n+        }\n+    }\n+end\n+\n+function NaturalLightWidget:createMainContent(width, height)\n+    self.fl_container = CenterContainer:new{\n+        dimen = Geom:new{ w = width, h = height },\n+    }\n+    self.white_gain = self:adaptableNumber(self.powerd.fl.white_gain, 1)\n+    self.white_offset = self:adaptableNumber(self.powerd.fl.white_offset, 1)\n+    self.red_gain = self:adaptableNumber(self.powerd.fl.red_gain, 1)\n+    self.red_offset = self:adaptableNumber(self.powerd.fl.red_offset, 1)\n+    self.green_gain = self:adaptableNumber(self.powerd.fl.green_gain, 1)\n+    self.green_offset = self:adaptableNumber(self.powerd.fl.green_offset, 1)\n+    self.exponent = self:adaptableNumber(self.powerd.fl.exponent, 0.1)\n+\n+    local separator = HorizontalSpan:new{ width = Size.span.horizontal_default }\n+    local vspan = VerticalSpan:new{ width = 2 * Size.span.vertical_large }\n+    local vertical_group = VerticalGroup:new{ align = \"center\" }\n+    local title_group = HorizontalGroup:new{ align = \"center\" }\n+    local white_group = HorizontalGroup:new{ align = \"center\" }\n+    local red_group = HorizontalGroup:new{ align = \"center\" }\n+    local green_group = HorizontalGroup:new{ align = \"center\" }\n+    local exponent_group = HorizontalGroup:new{ align = \"center\" }\n+    local button_group = HorizontalGroup:new{ align = \"center\" }\n+    local text_gain = TextBoxWidget:new{\n+        text = _(\"Gain\"),\n+        face = self.medium_font_face,\n+        bold = true,\n+        alignment = \"left\",\n+        width = self.textbox_width + 2 * self.button_width\n+    }\n+    local text_offset = TextBoxWidget:new{\n+        text = _(\"Offset\"),\n+        face = self.medium_font_face,\n+        bold = true,\n+        alignment = \"left\",\n+        width = self.textbox_width + self.button_width\n+    }\n+    local text_white = TextBoxWidget:new{\n+        text = _(\"White\"),\n+        face = self.medium_font_face,\n+        bold = true,\n+        alignment = \"left\",\n+        width = self.text_width\n+    }\n+    local text_red = TextBoxWidget:new{\n+        text = _(\"Red\"),\n+        face = self.medium_font_face,\n+        bold = true,\n+        alignment = \"left\",\n+        width = self.text_width\n+    }\n+    local text_green = TextBoxWidget:new{\n+        text = _(\"Green\"),\n+        face = self.medium_font_face,\n+        bold = true,\n+        alignment = \"left\",\n+        width = self.text_width\n+    }\n+    local text_exponent = TextBoxWidget:new{\n+        text = _(\"Exponent\"),\n+        face = self.medium_font_face,\n+        bold = true,\n+        alignment = \"left\",\n+        width = self.text_width\n+    }\n+    local button_defaults = Button:new{\n+        text = \"Restore Defaults\",\n+        margin = Size.margin.small,\n+        radius = 0,\n+        width = self.width * 0.35,\n+        show_parent = self,\n+        callback = function()\n+            self:setAllValues({white_gain = 25,\n+                               white_offset = -25,\n+                               red_gain = 24,\n+                               red_offset = 0,\n+                               green_gain = 24,\n+                               green_offset = -65,\n+                               exponent = 0.25})\n+        end,\n+    }\n+    local button_cancel = Button:new{\n+        text = \"Cancel\",\n+        margin = Size.margin.small,\n+        radius = 0,\n+        width = self.width * 0.2,\n+        show_parent = self,\n+        callback = function()\n+            self:setAllValues(self.old_values)\n+            self:onClose()\n+        end,\n+    }\n+    local button_ok = Button:new{\n+        text = \"OK\",","path":"frontend/ui/widget/naturallightwidget.lua","position":299,"original_position":299,"commit_id":"19dc9dcfdd75b8307eab49662cc8ec5daa164cfd","original_commit_id":"19dc9dcfdd75b8307eab49662cc8ec5daa164cfd","user":{"login":"Frenzie","id":202757,"avatar_url":"https://avatars2.githubusercontent.com/u/202757?v=4","gravatar_id":"","url":"https://api.github.com/users/Frenzie","html_url":"https://github.com/Frenzie","followers_url":"https://api.github.com/users/Frenzie/followers","following_url":"https://api.github.com/users/Frenzie/following{/other_user}","gists_url":"https://api.github.com/users/Frenzie/gists{/gist_id}","starred_url":"https://api.github.com/users/Frenzie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Frenzie/subscriptions","organizations_url":"https://api.github.com/users/Frenzie/orgs","repos_url":"https://api.github.com/users/Frenzie/repos","events_url":"https://api.github.com/users/Frenzie/events{/privacy}","received_events_url":"https://api.github.com/users/Frenzie/received_events","type":"User","site_admin":false},"body":"Is there anything better we can say here? E.g., `Save` or `Save settings`. See the UX guidelines here: http://koreader.rocks/doc/modules/ui.widget.confirmbox.html (not a requirement but nice to have)","created_at":"2018-03-12T22:34:34Z","updated_at":"2018-03-12T22:34:34Z","html_url":"https://github.com/koreader/koreader/pull/3744#discussion_r173968383","pull_request_url":"https://api.github.com/repos/koreader/koreader/pulls/3744","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/koreader/koreader/pulls/comments/173968383"},"html":{"href":"https://github.com/koreader/koreader/pull/3744#discussion_r173968383"},"pull_request":{"href":"https://api.github.com/repos/koreader/koreader/pulls/3744"}}},"pull_request":{"url":"https://api.github.com/repos/koreader/koreader/pulls/3744","id":174500727,"html_url":"https://github.com/koreader/koreader/pull/3744","diff_url":"https://github.com/koreader/koreader/pull/3744.diff","patch_url":"https://github.com/koreader/koreader/pull/3744.patch","issue_url":"https://api.github.com/repos/koreader/koreader/issues/3744","number":3744,"state":"open","locked":false,"title":"Natural light configuration","user":{"login":"dengste","id":1818708,"avatar_url":"https://avatars2.githubusercontent.com/u/1818708?v=4","gravatar_id":"","url":"https://api.github.com/users/dengste","html_url":"https://github.com/dengste","followers_url":"https://api.github.com/users/dengste/followers","following_url":"https://api.github.com/users/dengste/following{/other_user}","gists_url":"https://api.github.com/users/dengste/gists{/gist_id}","starred_url":"https://api.github.com/users/dengste/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dengste/subscriptions","organizations_url":"https://api.github.com/users/dengste/orgs","repos_url":"https://api.github.com/users/dengste/repos","events_url":"https://api.github.com/users/dengste/events{/privacy}","received_events_url":"https://api.github.com/users/dengste/received_events","type":"User","site_admin":false},"body":"New widget to configure natural light on Kobo Aura One and H2O2.","created_at":"2018-03-12T21:32:05Z","updated_at":"2018-03-12T22:34:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4cd086fb7fcaf0e8cc4ff074a73e3be94d2c0079","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/koreader/koreader/pulls/3744/commits","review_comments_url":"https://api.github.com/repos/koreader/koreader/pulls/3744/comments","review_comment_url":"https://api.github.com/repos/koreader/koreader/pulls/comments{/number}","comments_url":"https://api.github.com/repos/koreader/koreader/issues/3744/comments","statuses_url":"https://api.github.com/repos/koreader/koreader/statuses/19dc9dcfdd75b8307eab49662cc8ec5daa164cfd","head":{"label":"dengste:natural_light_configuration","ref":"natural_light_configuration","sha":"19dc9dcfdd75b8307eab49662cc8ec5daa164cfd","user":{"login":"dengste","id":1818708,"avatar_url":"https://avatars2.githubusercontent.com/u/1818708?v=4","gravatar_id":"","url":"https://api.github.com/users/dengste","html_url":"https://github.com/dengste","followers_url":"https://api.github.com/users/dengste/followers","following_url":"https://api.github.com/users/dengste/following{/other_user}","gists_url":"https://api.github.com/users/dengste/gists{/gist_id}","starred_url":"https://api.github.com/users/dengste/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dengste/subscriptions","organizations_url":"https://api.github.com/users/dengste/orgs","repos_url":"https://api.github.com/users/dengste/repos","events_url":"https://api.github.com/users/dengste/events{/privacy}","received_events_url":"https://api.github.com/users/dengste/received_events","type":"User","site_admin":false},"repo":{"id":120219475,"name":"koreader","full_name":"dengste/koreader","owner":{"login":"dengste","id":1818708,"avatar_url":"https://avatars2.githubusercontent.com/u/1818708?v=4","gravatar_id":"","url":"https://api.github.com/users/dengste","html_url":"https://github.com/dengste","followers_url":"https://api.github.com/users/dengste/followers","following_url":"https://api.github.com/users/dengste/following{/other_user}","gists_url":"https://api.github.com/users/dengste/gists{/gist_id}","starred_url":"https://api.github.com/users/dengste/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dengste/subscriptions","organizations_url":"https://api.github.com/users/dengste/orgs","repos_url":"https://api.github.com/users/dengste/repos","events_url":"https://api.github.com/users/dengste/events{/privacy}","received_events_url":"https://api.github.com/users/dengste/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dengste/koreader","description":"An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Kindle, Kobo, PocketBook, Ubuntu Touch and Android devices","fork":true,"url":"https://api.github.com/repos/dengste/koreader","forks_url":"https://api.github.com/repos/dengste/koreader/forks","keys_url":"https://api.github.com/repos/dengste/koreader/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dengste/koreader/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dengste/koreader/teams","hooks_url":"https://api.github.com/repos/dengste/koreader/hooks","issue_events_url":"https://api.github.com/repos/dengste/koreader/issues/events{/number}","events_url":"https://api.github.com/repos/dengste/koreader/events","assignees_url":"https://api.github.com/repos/dengste/koreader/assignees{/user}","branches_url":"https://api.github.com/repos/dengste/koreader/branches{/branch}","tags_url":"https://api.github.com/repos/dengste/koreader/tags","blobs_url":"https://api.github.com/repos/dengste/koreader/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dengste/koreader/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dengste/koreader/git/refs{/sha}","trees_url":"https://api.github.com/repos/dengste/koreader/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dengste/koreader/statuses/{sha}","languages_url":"https://api.github.com/repos/dengste/koreader/languages","stargazers_url":"https://api.github.com/repos/dengste/koreader/stargazers","contributors_url":"https://api.github.com/repos/dengste/koreader/contributors","subscribers_url":"https://api.github.com/repos/dengste/koreader/subscribers","subscription_url":"https://api.github.com/repos/dengste/koreader/subscription","commits_url":"https://api.github.com/repos/dengste/koreader/commits{/sha}","git_commits_url":"https://api.github.com/repos/dengste/koreader/git/commits{/sha}","comments_url":"https://api.github.com/repos/dengste/koreader/comments{/number}","issue_comment_url":"https://api.github.com/repos/dengste/koreader/issues/comments{/number}","contents_url":"https://api.github.com/repos/dengste/koreader/contents/{+path}","compare_url":"https://api.github.com/repos/dengste/koreader/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dengste/koreader/merges","archive_url":"https://api.github.com/repos/dengste/koreader/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dengste/koreader/downloads","issues_url":"https://api.github.com/repos/dengste/koreader/issues{/number}","pulls_url":"https://api.github.com/repos/dengste/koreader/pulls{/number}","milestones_url":"https://api.github.com/repos/dengste/koreader/milestones{/number}","notifications_url":"https://api.github.com/repos/dengste/koreader/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dengste/koreader/labels{/name}","releases_url":"https://api.github.com/repos/dengste/koreader/releases{/id}","deployments_url":"https://api.github.com/repos/dengste/koreader/deployments","created_at":"2018-02-04T20:16:05Z","updated_at":"2018-02-04T20:16:09Z","pushed_at":"2018-03-12T21:28:25Z","git_url":"git://github.com/dengste/koreader.git","ssh_url":"git@github.com:dengste/koreader.git","clone_url":"https://github.com/dengste/koreader.git","svn_url":"https://github.com/dengste/koreader","homepage":"http://koreader.rocks/","size":37520,"stargazers_count":0,"watchers_count":0,"language":"Lua","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"koreader:master","ref":"master","sha":"7d71d73cc48f3d5ba4f61ee3316021a09e49ad32","user":{"login":"koreader","id":3957564,"avatar_url":"https://avatars0.githubusercontent.com/u/3957564?v=4","gravatar_id":"","url":"https://api.github.com/users/koreader","html_url":"https://github.com/koreader","followers_url":"https://api.github.com/users/koreader/followers","following_url":"https://api.github.com/users/koreader/following{/other_user}","gists_url":"https://api.github.com/users/koreader/gists{/gist_id}","starred_url":"https://api.github.com/users/koreader/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/koreader/subscriptions","organizations_url":"https://api.github.com/users/koreader/orgs","repos_url":"https://api.github.com/users/koreader/repos","events_url":"https://api.github.com/users/koreader/events{/privacy}","received_events_url":"https://api.github.com/users/koreader/received_events","type":"Organization","site_admin":false},"repo":{"id":8986217,"name":"koreader","full_name":"koreader/koreader","owner":{"login":"koreader","id":3957564,"avatar_url":"https://avatars0.githubusercontent.com/u/3957564?v=4","gravatar_id":"","url":"https://api.github.com/users/koreader","html_url":"https://github.com/koreader","followers_url":"https://api.github.com/users/koreader/followers","following_url":"https://api.github.com/users/koreader/following{/other_user}","gists_url":"https://api.github.com/users/koreader/gists{/gist_id}","starred_url":"https://api.github.com/users/koreader/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/koreader/subscriptions","organizations_url":"https://api.github.com/users/koreader/orgs","repos_url":"https://api.github.com/users/koreader/repos","events_url":"https://api.github.com/users/koreader/events{/privacy}","received_events_url":"https://api.github.com/users/koreader/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/koreader/koreader","description":"An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Kindle, Kobo, PocketBook, Ubuntu Touch and Android devices","fork":false,"url":"https://api.github.com/repos/koreader/koreader","forks_url":"https://api.github.com/repos/koreader/koreader/forks","keys_url":"https://api.github.com/repos/koreader/koreader/keys{/key_id}","collaborators_url":"https://api.github.com/repos/koreader/koreader/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/koreader/koreader/teams","hooks_url":"https://api.github.com/repos/koreader/koreader/hooks","issue_events_url":"https://api.github.com/repos/koreader/koreader/issues/events{/number}","events_url":"https://api.github.com/repos/koreader/koreader/events","assignees_url":"https://api.github.com/repos/koreader/koreader/assignees{/user}","branches_url":"https://api.github.com/repos/koreader/koreader/branches{/branch}","tags_url":"https://api.github.com/repos/koreader/koreader/tags","blobs_url":"https://api.github.com/repos/koreader/koreader/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/koreader/koreader/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/koreader/koreader/git/refs{/sha}","trees_url":"https://api.github.com/repos/koreader/koreader/git/trees{/sha}","statuses_url":"https://api.github.com/repos/koreader/koreader/statuses/{sha}","languages_url":"https://api.github.com/repos/koreader/koreader/languages","stargazers_url":"https://api.github.com/repos/koreader/koreader/stargazers","contributors_url":"https://api.github.com/repos/koreader/koreader/contributors","subscribers_url":"https://api.github.com/repos/koreader/koreader/subscribers","subscription_url":"https://api.github.com/repos/koreader/koreader/subscription","commits_url":"https://api.github.com/repos/koreader/koreader/commits{/sha}","git_commits_url":"https://api.github.com/repos/koreader/koreader/git/commits{/sha}","comments_url":"https://api.github.com/repos/koreader/koreader/comments{/number}","issue_comment_url":"https://api.github.com/repos/koreader/koreader/issues/comments{/number}","contents_url":"https://api.github.com/repos/koreader/koreader/contents/{+path}","compare_url":"https://api.github.com/repos/koreader/koreader/compare/{base}...{head}","merges_url":"https://api.github.com/repos/koreader/koreader/merges","archive_url":"https://api.github.com/repos/koreader/koreader/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/koreader/koreader/downloads","issues_url":"https://api.github.com/repos/koreader/koreader/issues{/number}","pulls_url":"https://api.github.com/repos/koreader/koreader/pulls{/number}","milestones_url":"https://api.github.com/repos/koreader/koreader/milestones{/number}","notifications_url":"https://api.github.com/repos/koreader/koreader/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/koreader/koreader/labels{/name}","releases_url":"https://api.github.com/repos/koreader/koreader/releases{/id}","deployments_url":"https://api.github.com/repos/koreader/koreader/deployments","created_at":"2013-03-24T13:09:42Z","updated_at":"2018-03-12T22:27:14Z","pushed_at":"2018-03-12T22:14:48Z","git_url":"git://github.com/koreader/koreader.git","ssh_url":"git@github.com:koreader/koreader.git","clone_url":"https://github.com/koreader/koreader.git","svn_url":"https://github.com/koreader/koreader","homepage":"http://koreader.rocks/","size":37517,"stargazers_count":3694,"watchers_count":3694,"language":"Lua","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":521,"mirror_url":null,"archived":false,"open_issues_count":371,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0"},"forks":521,"open_issues":371,"watchers":3694,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/koreader/koreader/pulls/3744"},"html":{"href":"https://github.com/koreader/koreader/pull/3744"},"issue":{"href":"https://api.github.com/repos/koreader/koreader/issues/3744"},"comments":{"href":"https://api.github.com/repos/koreader/koreader/issues/3744/comments"},"review_comments":{"href":"https://api.github.com/repos/koreader/koreader/pulls/3744/comments"},"review_comment":{"href":"https://api.github.com/repos/koreader/koreader/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/koreader/koreader/pulls/3744/commits"},"statuses":{"href":"https://api.github.com/repos/koreader/koreader/statuses/19dc9dcfdd75b8307eab49662cc8ec5daa164cfd"}},"author_association":"NONE"}}
{"actor":{"display_login":"Frenzie"}}