tangled
alpha
login
or
join now
rockorager.dev
/
comlink
2
fork
atom
an experimental irc client
2
fork
atom
overview
issues
pulls
pipelines
paste-protection: small improvements
rockorager.dev
2 years ago
033dda1f
52b09951
+55
-3
2 changed files
expand all
collapse all
unified
split
src
App.zig
Button.zig
+29
-3
src/App.zig
···
7
const base64 = std.base64.standard.Encoder;
8
const mem = std.mem;
9
0
10
const irc = @import("irc.zig");
11
const lua = @import("lua.zig");
12
···
1922
// Draw a modal dialog for how to handle multi-line paste
1923
const multiline_paste_win = vaxis.widgets.alignment.center(win, win.width - 10, win.height - 10);
1924
const bordered = vaxis.widgets.border.all(multiline_paste_win, .{});
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1925
var segs = [_]vaxis.Segment{
1926
-
.{ .text = "WARNING: multiline paste detected\n\n" },
1927
.{ .text = self.paste_buffer.items },
1928
};
1929
-
bordered.clear();
1930
-
_ = try bordered.print(&segs, .{ .wrap = .word });
0
0
0
0
0
0
0
0
0
1931
}
1932
1933
self.state.buffers.count = row;
···
7
const base64 = std.base64.standard.Encoder;
8
const mem = std.mem;
9
10
+
const Button = @import("Button.zig");
11
const irc = @import("irc.zig");
12
const lua = @import("lua.zig");
13
···
1923
// Draw a modal dialog for how to handle multi-line paste
1924
const multiline_paste_win = vaxis.widgets.alignment.center(win, win.width - 10, win.height - 10);
1925
const bordered = vaxis.widgets.border.all(multiline_paste_win, .{});
1926
+
bordered.clear();
1927
+
const warning_width: usize = 37;
1928
+
const title_win = multiline_paste_win.child(.{
1929
+
.height = .{ .limit = 2 },
1930
+
.y_off = 1,
1931
+
.x_off = multiline_paste_win.width / 2 - warning_width / 2,
1932
+
});
1933
+
const title_seg = [_]vaxis.Segment{
1934
+
.{
1935
+
.text = "/!\\ Warning: Multiline paste detected",
1936
+
.style = .{
1937
+
.fg = .{ .index = 3 },
1938
+
.bold = true,
1939
+
},
1940
+
},
1941
+
};
1942
+
_ = try title_win.print(&title_seg, .{ .wrap = .none });
1943
var segs = [_]vaxis.Segment{
0
1944
.{ .text = self.paste_buffer.items },
1945
};
1946
+
_ = try bordered.print(&segs, .{ .wrap = .word, .row_offset = 2 });
1947
+
const button: Button = .{
1948
+
.label = "Accept",
1949
+
.style = .{ .bg = .{ .index = 7 } },
1950
+
};
1951
+
try button.draw(bordered.child(.{
1952
+
.x_off = 3,
1953
+
.y_off = bordered.height - 4,
1954
+
.height = .{ .limit = 3 },
1955
+
.width = .{ .limit = 10 },
1956
+
}));
1957
}
1958
1959
self.state.buffers.count = row;
+26
src/Button.zig
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
const vaxis = @import("vaxis");
2
+
3
+
const Button = @This();
4
+
5
+
label: []const u8,
6
+
style: vaxis.Style = .{},
7
+
8
+
pub fn draw(self: Button, win: vaxis.Window) !void {
9
+
win.fill(.{
10
+
.char = .{
11
+
.grapheme = " ",
12
+
.width = 1,
13
+
},
14
+
.style = self.style,
15
+
});
16
+
const label_width = win.gwidth(self.label);
17
+
const label_win = vaxis.widgets.alignment.center(win, label_width, 1);
18
+
_ = try label_win.print(&.{.{ .text = self.label, .style = self.style }}, .{});
19
+
}
20
+
21
+
pub fn clicked(_: Button, win: vaxis.Window, mouse: ?vaxis.Mouse) bool {
22
+
if (win.hasMouse(mouse)) |m| {
23
+
return m.button == .left and m.type == .press;
24
+
}
25
+
return false;
26
+
}