irongit

A Neovim plugin enabling you to solve LeetCode problems.

109 lines2.0 KBLua
1local Renderer = require("leetcode-ui.renderer")
2local NuiSplit = require("nui.split")
3local config = require("leetcode.config")
4local keys = config.user.keys
5
6local log = require("leetcode.logger")
7
8---@class lc-ui.Split : NuiSplit
9---@field renderer lc.ui.Renderer
10---@field visible boolean
11local Split = NuiSplit:extend("LeetSplit")
12
13function Split:_open_window()
14 Split.super._open_window(self)
15 self:update_renderer()
16end
17
18function Split:_close_window()
19 Split.super._close_window(self)
20 self:update_renderer()
21end
22
23function Split:_buf_create()
24 Split.super._buf_create(self)
25 self:update_renderer()
26end
27
28function Split:_buf_destory()
29 Split.super._buf_destory(self)
30 self:update_renderer()
31end
32
33function Split:toggle()
34 if not self.visible then
35 self:show()
36 else
37 self:hide()
38 end
39end
40
41function Split:show()
42 if not self._.mounted then
43 self:mount()
44 elseif not self.visible then
45 Split.super.show(self)
46 end
47
48 self.visible = true
49end
50
51function Split:hide()
52 if not self.visible then
53 return
54 end
55 Split.super.hide(self)
56
57 self.visible = false
58end
59
60function Split:mount()
61 Split.super.mount(self)
62
63 self.visible = true
64
65 self:map("n", keys.toggle, function()
66 self:toggle()
67 end)
68end
69
70function Split:map(...)
71 self.renderer:map(...)
72end
73
74function Split:unmount()
75 Split.super.unmount(self)
76
77 self.visible = false
78end
79
80function Split:draw()
81 self.renderer:draw(self)
82end
83
84function Split:clear()
85 self.renderer:clear()
86end
87
88function Split:update_renderer()
89 self.renderer.bufnr = self.bufnr
90 self.renderer.winid = self.winid
91end
92
93function Split:init(opts) --
94 local options = vim.tbl_deep_extend("force", {
95 relative = "editor",
96 enter = false,
97 focusable = true,
98 }, opts or {})
99
100 self.renderer = self.renderer or Renderer()
101 self.visible = false
102
103 Split.super.init(self, options)
104end
105
106---@type fun(opts?: nui_split_options): lc-ui.Split
107local LeetSplit = Split
108
109return LeetSplit