Skip to content
This repository was archived by the owner on Jul 23, 2019. It is now read-only.

Commit e24075f

Browse files
author
Nathan Sobo
committed
Render discussion UI
We still need to match the cursor/selection colors to the avatar colors,which will require work on the Rust side. We also need to jump to theworkspace anchor when clicking messages.
1 parent b61a159 commit e24075f

File tree

15 files changed

+331
-92
lines changed

15 files changed

+331
-92
lines changed

xray_browser/static/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
padding: 0;
1010
margin: 0;
1111
}
12+
13+
* {
14+
outline: none;
15+
}
1216

1317
#spinner {
1418
position: absolute;

xray_core/src/buffer.rs

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type LocalTimestamp = usize;
2121
type LamportTimestamp = usize;
2222
pub type SelectionSetId = usize;
2323
type SelectionSetVersion = usize;
24+
pub type BufferId = usize;
2425

2526
#[derive(Clone, Debug, Serialize, Deserialize)]
2627
pub struct Version(
@@ -36,6 +37,7 @@ pub enum Error {
3637
}
3738

3839
pub struct Buffer {
40+
id: BufferId,
3941
pub replica_id: ReplicaId,
4042
next_replica_id: Option<ReplicaId>,
4143
local_clock: LocalTimestamp,
@@ -213,8 +215,8 @@ impl Version {
213215
}
214216

215217
pub mod rpc {
216-
use super::{Buffer, EditId, FragmentId, Insertion, InsertionSplit, Operation, ReplicaId,
217-
Selection, SelectionSetId, SelectionSetVersion, Version};
218+
use super::{Buffer, BufferId, EditId, FragmentId, Insertion, InsertionSplit, Operation,
219+
ReplicaId, Selection, SelectionSetId, SelectionSetVersion, Version};
218220
use futures::{Async, Future, Stream};
219221
use never::Never;
220222
use notify_cell::NotifyCellObserver;
@@ -227,6 +229,7 @@ pub mod rpc {
227229

228230
#[derive(Serialize, Deserialize)]
229231
pub struct State {
232+
pub(super) id: BufferId,
230233
pub(super) replica_id: ReplicaId,
231234
pub(super) fragments: Vec<Fragment>,
232235
pub(super) insertions: HashMap<EditId, Insertion>,
@@ -359,6 +362,7 @@ pub mod rpc {
359362
fn init(&mut self, _: &rpc::server::Connection) -> Self::State {
360363
let buffer = self.buffer.borrow_mut();
361364
let mut state = State {
365+
id: buffer.id,
362366
replica_id: self.replica_id,
363367
fragments: Vec::new(),
364368
insertions: HashMap::new(),
@@ -464,7 +468,7 @@ pub mod rpc {
464468
}
465469

466470
impl Buffer {
467-
pub fn new() -> Self {
471+
pub fn new(id: BufferId) -> Self {
468472
let mut fragments = Tree::new();
469473

470474
// Push start sentinel.
@@ -496,6 +500,7 @@ impl Buffer {
496500
);
497501

498502
Self {
503+
id,
499504
replica_id: 1,
500505
next_replica_id: Some(2),
501506
local_clock: 0,
@@ -553,6 +558,7 @@ impl Buffer {
553558
}
554559

555560
let buffer = Buffer {
561+
id: state.id,
556562
replica_id: state.replica_id,
557563
next_replica_id: None,
558564
local_clock: 0,
@@ -599,6 +605,10 @@ impl Buffer {
599605
Ok(buffer)
600606
}
601607

608+
pub fn id(&self) -> BufferId {
609+
self.id
610+
}
611+
602612
pub fn next_replica_id(&mut self) -> Result<ReplicaId, ()> {
603613
let replica_id = self.next_replica_id.ok_or(())?;
604614
self.next_replica_id = Some(replica_id + 1);
@@ -1586,6 +1596,10 @@ impl Selection {
15861596
pub fn is_empty(&self, buffer: &Buffer) -> bool {
15871597
buffer.cmp_anchors(&self.start, &self.end).unwrap() == cmp::Ordering::Equal
15881598
}
1599+
1600+
pub fn anchor_range(&self) -> Range<Anchor> {
1601+
self.start.clone()..self.end.clone()
1602+
}
15891603
}
15901604

15911605
impl Text {
@@ -1989,7 +2003,7 @@ mod tests {
19892003

19902004
#[test]
19912005
fn test_edit() {
1992-
let mut buffer = Buffer::new();
2006+
let mut buffer = Buffer::new(0);
19932007
buffer.edit(0..0, "abc");
19942008
assert_eq!(buffer.to_string(), "abc");
19952009
buffer.edit(3..3, "def");
@@ -2010,7 +2024,7 @@ mod tests {
20102024
println!("{:?}", seed);
20112025
let mut rng = StdRng::from_seed(&[seed]);
20122026

2013-
let mut buffer = Buffer::new();
2027+
let mut buffer = Buffer::new(0);
20142028
let mut reference_string = String::new();
20152029

20162030
for _i in 0..30 {
@@ -2033,7 +2047,7 @@ mod tests {
20332047

20342048
#[test]
20352049
fn test_len_for_row() {
2036-
let mut buffer = Buffer::new();
2050+
let mut buffer = Buffer::new(0);
20372051
buffer.edit(0..0, "abcd\nefg\nhij");
20382052
buffer.edit(12..12, "kl\nmno");
20392053
buffer.edit(18..18, "\npqrs\n");
@@ -2050,7 +2064,7 @@ mod tests {
20502064

20512065
#[test]
20522066
fn iter_starting_at_row() {
2053-
let mut buffer = Buffer::new();
2067+
let mut buffer = Buffer::new(0);
20542068
buffer.edit(0..0, "abcd\nefgh\nij");
20552069
buffer.edit(12..12, "kl\nmno");
20562070
buffer.edit(18..18, "\npqrs");
@@ -2169,7 +2183,7 @@ mod tests {
21692183

21702184
#[test]
21712185
fn test_anchors() {
2172-
let mut buffer = Buffer::new();
2186+
let mut buffer = Buffer::new(0);
21732187
buffer.edit(0..0, "abc");
21742188
let left_anchor = buffer.anchor_before_offset(2).unwrap();
21752189
let right_anchor = buffer.anchor_after_offset(2).unwrap();
@@ -2311,7 +2325,7 @@ mod tests {
23112325

23122326
#[test]
23132327
fn anchors_at_start_and_end() {
2314-
let mut buffer = Buffer::new();
2328+
let mut buffer = Buffer::new(0);
23152329
let before_start_anchor = buffer.anchor_before_offset(0).unwrap();
23162330
let after_end_anchor = buffer.anchor_after_offset(0).unwrap();
23172331

@@ -2342,7 +2356,7 @@ mod tests {
23422356
let mut buffers = Vec::new();
23432357
let mut queues = Vec::new();
23442358
for i in site_range.clone() {
2345-
let mut buffer = Buffer::new();
2359+
let mut buffer = Buffer::new(0);
23462360
buffer.replica_id = i + 1;
23472361
buffers.push(buffer);
23482362
queues.push(Vec::new());
@@ -2387,7 +2401,7 @@ mod tests {
23872401

23882402
#[test]
23892403
fn test_edit_replication() {
2390-
let local_buffer = Buffer::new().into_shared();
2404+
let local_buffer = Buffer::new(0).into_shared();
23912405
local_buffer.borrow_mut().edit(0..0, "abcdef");
23922406
local_buffer.borrow_mut().edit(2..4, "ghi");
23932407

@@ -2439,7 +2453,7 @@ mod tests {
24392453
fn test_selection_replication() {
24402454
use stream_ext::StreamExt;
24412455

2442-
let mut buffer_1 = Buffer::new();
2456+
let mut buffer_1 = Buffer::new(0);
24432457
buffer_1.edit(0..0, "abcdef");
24442458
let sels = vec![empty_selection(&buffer_1, 1), empty_selection(&buffer_1, 3)];
24452459
buffer_1.add_selection_set(sels);

xray_core/src/buffer_view.rs

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use buffer::{Buffer, Point, ReplicaId, Selection, SelectionSetId};
1+
use buffer::{Buffer, BufferId, Point, ReplicaId, Selection, SelectionSetId};
22
use futures::{Poll, Stream};
33
use movement;
44
use notify_cell::NotifyCell;
@@ -480,6 +480,16 @@ impl<T: BufferViewDelegate> BufferView<T> {
480480
.unwrap();
481481
}
482482

483+
pub fn selections(&self) -> Ref<[Selection]> {
484+
Ref::map(self.buffer.borrow(), |buffer| {
485+
buffer.selections(self.selection_set_id).unwrap()
486+
})
487+
}
488+
489+
pub fn buffer_id(&self) -> BufferId {
490+
self.buffer.borrow().id()
491+
}
492+
483493
fn render_selections(&self, range: Range<Point>) -> Vec<SelectionProps> {
484494
let buffer = self.buffer.borrow();
485495
let mut rendered_selections = Vec::new();
@@ -548,12 +558,6 @@ impl<T: BufferViewDelegate> BufferView<T> {
548558
}
549559
}
550560

551-
fn selections(&self) -> Ref<[Selection]> {
552-
Ref::map(self.buffer.borrow(), |buffer| {
553-
buffer.selections(self.selection_set_id).unwrap()
554-
})
555-
}
556-
557561
fn updated(&mut self) {
558562
self.updates_tx.set(());
559563
}
@@ -665,10 +669,11 @@ impl<T: BufferViewDelegate> Drop for BufferView<T> {
665669
mod tests {
666670
use super::*;
667671
use IntoShared;
672+
use workspace::WorkspaceView;
668673

669674
#[test]
670675
fn test_cursor_movement() {
671-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
676+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
672677
editor.buffer.borrow_mut().edit(0..0, "abc");
673678
editor.buffer.borrow_mut().edit(3..3, "\n");
674679
editor.buffer.borrow_mut().edit(4..4, "\ndef");
@@ -749,7 +754,7 @@ mod tests {
749754

750755
#[test]
751756
fn test_selection_movement() {
752-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
757+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
753758
editor.buffer.borrow_mut().edit(0..0, "abc");
754759
editor.buffer.borrow_mut().edit(3..3, "\n");
755760
editor.buffer.borrow_mut().edit(4..4, "\ndef");
@@ -840,7 +845,7 @@ mod tests {
840845

841846
#[test]
842847
fn test_backspace() {
843-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
848+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
844849
editor.buffer.borrow_mut().edit(0..0, "abcdefghi");
845850
editor.add_selection(Point::new(0, 3), Point::new(0, 4));
846851
editor.add_selection(Point::new(0, 9), Point::new(0, 9));
@@ -852,7 +857,7 @@ mod tests {
852857

853858
#[test]
854859
fn test_delete() {
855-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
860+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
856861
editor.buffer.borrow_mut().edit(0..0, "abcdefghi");
857862
editor.add_selection(Point::new(0, 3), Point::new(0, 4));
858863
editor.add_selection(Point::new(0, 9), Point::new(0, 9));
@@ -864,7 +869,7 @@ mod tests {
864869

865870
#[test]
866871
fn test_add_selection() {
867-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
872+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
868873
editor
869874
.buffer
870875
.borrow_mut()
@@ -918,7 +923,7 @@ mod tests {
918923

919924
#[test]
920925
fn test_add_selection_above() {
921-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
926+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
922927
editor.buffer.borrow_mut().edit(
923928
0..0,
924929
"\
@@ -987,7 +992,7 @@ mod tests {
987992

988993
#[test]
989994
fn test_add_selection_below() {
990-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
995+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
991996
editor.buffer.borrow_mut().edit(
992997
0..0,
993998
"\
@@ -1047,7 +1052,7 @@ mod tests {
10471052

10481053
#[test]
10491054
fn test_edit() {
1050-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
1055+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
10511056

10521057
editor.buffer.borrow_mut().edit(0..0, "abcdefgh\nhijklmno");
10531058

@@ -1070,14 +1075,14 @@ mod tests {
10701075

10711076
#[test]
10721077
fn test_render() {
1073-
let buffer = Rc::new(RefCell::new(Buffer::new()));
1078+
let buffer = Rc::new(RefCell::new(Buffer::new(0)));
10741079
buffer
10751080
.borrow_mut()
10761081
.edit(0..0, "abc\ndef\nghi\njkl\nmno\npqr\nstu\nvwx\nyz");
10771082
let line_height = 6.0;
10781083

10791084
{
1080-
let mut editor = BufferView::new(buffer.clone());
1085+
let mut editor = BufferView::<WorkspaceView>::new(buffer.clone(), None);
10811086
editor
10821087
.set_height(3.0 * line_height)
10831088
.set_line_height(line_height)
@@ -1108,7 +1113,7 @@ mod tests {
11081113

11091114
// Selection starting at the end of buffer
11101115
{
1111-
let mut editor = BufferView::new(buffer.clone());
1116+
let mut editor = BufferView::<WorkspaceView>::new(buffer.clone(), None);
11121117
editor
11131118
.set_height(8.0 * line_height)
11141119
.set_line_height(line_height)
@@ -1126,7 +1131,7 @@ mod tests {
11261131

11271132
// Selection ending exactly at first visible row
11281133
{
1129-
let mut editor = BufferView::new(buffer.clone());
1134+
let mut editor = BufferView::<WorkspaceView>::new(buffer.clone(), None);
11301135
editor
11311136
.set_height(3.0 * line_height)
11321137
.set_line_height(line_height)
@@ -1143,7 +1148,7 @@ mod tests {
11431148
#[test]
11441149
fn test_render_past_last_line() {
11451150
let line_height = 4.0;
1146-
let mut editor = BufferView::new(Rc::new(RefCell::new(Buffer::new())));
1151+
let mut editor = BufferView::<WorkspaceView>::new(Rc::new(RefCell::new(Buffer::new(0))), None);
11471152

11481153
editor
11491154
.set_height(3.0 * line_height)
@@ -1166,8 +1171,8 @@ mod tests {
11661171

11671172
#[test]
11681173
fn test_dropping_view_removes_selection_set() {
1169-
let buffer = Buffer::new().into_shared();
1170-
let editor = BufferView::new(buffer.clone());
1174+
let buffer = Buffer::new(0).into_shared();
1175+
let editor = BufferView::<WorkspaceView>::new(buffer.clone(), None);
11711176
let selection_set_id = editor.selection_set_id;
11721177
assert!(buffer.borrow_mut().selections(selection_set_id).is_ok());
11731178

@@ -1184,7 +1189,7 @@ mod tests {
11841189
.collect()
11851190
}
11861191

1187-
fn render_selections(editor: &BufferView) -> Vec<SelectionProps> {
1192+
fn render_selections(editor: &BufferView<WorkspaceView>) -> Vec<SelectionProps> {
11881193
let buffer = editor.buffer.borrow();
11891194
editor
11901195
.selections()

0 commit comments

Comments
 (0)