diff --git a/rust-lib/flowy-ot/src/core/attributes/attribute.rs b/rust-lib/flowy-ot/src/core/attributes/attribute.rs index 5882fcb0d6..c790b0efe6 100644 --- a/rust-lib/flowy-ot/src/core/attributes/attribute.rs +++ b/rust-lib/flowy-ot/src/core/attributes/attribute.rs @@ -29,10 +29,6 @@ impl Attribute { block_attribute!(Indent, usize); block_attribute!(Align, String); block_attribute!(List, String); - block_attribute!(Bullet, bool); - block_attribute!(Ordered, bool); - block_attribute!(Checked, bool); - block_attribute!(UnChecked, bool); block_attribute!(CodeBlock, bool); block_attribute!(QuoteBlock, bool); @@ -94,14 +90,6 @@ pub enum AttributeKey { Height, #[serde(rename = "header")] Header, - #[serde(rename = "bullet")] - Bullet, - #[serde(rename = "ordered")] - Ordered, - #[serde(rename = "checked")] - Checked, - #[serde(rename = "unchecked")] - UnChecked, } // pub trait AttributeValueData<'a>: Serialize + Deserialize<'a> {} @@ -127,7 +115,13 @@ impl std::convert::From<&str> for AttributeValue { } impl std::convert::From for AttributeValue { - fn from(val: String) -> Self { AttributeValue(Some(val)) } + fn from(val: String) -> Self { + if val.is_empty() { + AttributeValue(None) + } else { + AttributeValue(Some(val)) + } + } } impl std::convert::From<&bool> for AttributeValue { @@ -158,10 +152,6 @@ lazy_static! { AttributeKey::Align, AttributeKey::CodeBlock, AttributeKey::List, - AttributeKey::Bullet, - AttributeKey::Ordered, - AttributeKey::Checked, - AttributeKey::UnChecked, AttributeKey::QuoteBlock, ]); static ref INLINE_KEYS: HashSet = HashSet::from_iter(vec![ diff --git a/rust-lib/flowy-ot/src/core/attributes/attributes_serde.rs b/rust-lib/flowy-ot/src/core/attributes/attributes_serde.rs index 5221b0a101..3caeedae05 100644 --- a/rust-lib/flowy-ot/src/core/attributes/attributes_serde.rs +++ b/rust-lib/flowy-ot/src/core/attributes/attributes_serde.rs @@ -45,15 +45,7 @@ impl Serialize for Attributes { Err(e) => log::error!("Serial {:?} failed. {:?}", k, e), }, - AttributeKey::Link - | AttributeKey::Color - | AttributeKey::Background - | AttributeKey::Align - | AttributeKey::Bullet - | AttributeKey::Ordered - | AttributeKey::Checked - | AttributeKey::UnChecked - | AttributeKey::List => { + AttributeKey::Link | AttributeKey::Color | AttributeKey::Background | AttributeKey::Align | AttributeKey::List => { map.serialize_entry(k, v)?; }, } diff --git a/rust-lib/flowy-ot/tests/attribute_test.rs b/rust-lib/flowy-ot/tests/attribute_test.rs index a10374ac8b..00d915aabe 100644 --- a/rust-lib/flowy-ot/tests/attribute_test.rs +++ b/rust-lib/flowy-ot/tests/attribute_test.rs @@ -601,7 +601,7 @@ fn attributes_bullet_added() { let ops = vec![ Insert(0, "12", 0), Bullet(0, Interval::new(0, 1), true), - AssertOpsJson(0, r#"[{"insert":"12"},{"insert":"\n","attributes":{"bullet":"true"}}]"#), + AssertOpsJson(0, r#"[{"insert":"12"},{"insert":"\n","attributes":{"list":"bullet"}}]"#), ]; TestBuilder::new().run_script::(ops); @@ -612,13 +612,13 @@ fn attributes_bullet_added_2() { let ops = vec![ Insert(0, "1", 0), Bullet(0, Interval::new(0, 1), true), - AssertOpsJson(0, r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}}]"#), + AssertOpsJson(0, r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}}]"#), Insert(0, NEW_LINE, 1), - AssertOpsJson(0, r#"[{"insert":"1"},{"insert":"\n\n","attributes":{"bullet":"true"}}]"#), + AssertOpsJson(0, r#"[{"insert":"1"},{"insert":"\n\n","attributes":{"list":"bullet"}}]"#), Insert(0, "2", 2), AssertOpsJson( 0, - r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"2"},{"insert":"\n","attributes":{"bullet":"true"}}]"#, + r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#, ), ]; @@ -635,7 +635,7 @@ fn attributes_bullet_remove_partial() { Bullet(0, Interval::new(2, 3), false), AssertOpsJson( 0, - r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"2\n"}]"#, + r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2\n"}]"#, ), ]; @@ -651,7 +651,7 @@ fn attributes_bullet_auto_exit() { Insert(0, NEW_LINE, 2), AssertOpsJson( 0, - r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"\n"}]"#, + r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"\n"}]"#, ), ]; @@ -664,30 +664,30 @@ fn attributes_preserve_block_when_insert_newline_inside() { Insert(0, "12", 0), Bullet(0, Interval::new(0, 2), true), Insert(0, NEW_LINE, 2), - AssertOpsJson(0, r#"[{"insert":"12"},{"insert":"\n\n","attributes":{"bullet":"true"}}]"#), + AssertOpsJson(0, r#"[{"insert":"12"},{"insert":"\n\n","attributes":{"list":"bullet"}}]"#), Insert(0, "34", 3), AssertOpsJson( 0, r#"[ - {"insert":"12"},{"insert":"\n","attributes":{"bullet":"true"}}, - {"insert":"34"},{"insert":"\n","attributes":{"bullet":"true"}} + {"insert":"12"},{"insert":"\n","attributes":{"list":"bullet"}}, + {"insert":"34"},{"insert":"\n","attributes":{"list":"bullet"}} ]"#, ), Insert(0, NEW_LINE, 3), AssertOpsJson( 0, r#"[ - {"insert":"12"},{"insert":"\n\n","attributes":{"bullet":"true"}}, - {"insert":"34"},{"insert":"\n","attributes":{"bullet":"true"}} + {"insert":"12"},{"insert":"\n\n","attributes":{"list":"bullet"}}, + {"insert":"34"},{"insert":"\n","attributes":{"list":"bullet"}} ]"#, ), Insert(0, "ab", 3), AssertOpsJson( 0, r#"[ - {"insert":"12"},{"insert":"\n","attributes":{"bullet":"true"}}, - {"insert":"ab"},{"insert":"\n","attributes":{"bullet":"true"}}, - {"insert":"34"},{"insert":"\n","attributes":{"bullet":"true"}} + {"insert":"12"},{"insert":"\n","attributes":{"list":"bullet"}}, + {"insert":"ab"},{"insert":"\n","attributes":{"list":"bullet"}}, + {"insert":"34"},{"insert":"\n","attributes":{"list":"bullet"}} ]"#, ), ]; @@ -720,10 +720,10 @@ fn attributes_preserve_list_format_on_merge() { Insert(0, NEW_LINE, 3), AssertOpsJson( 0, - r#"[{"insert":"123"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"456"},{"insert":"\n","attributes":{"bullet":"true"}}]"#, + r#"[{"insert":"123"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"456"},{"insert":"\n","attributes":{"list":"bullet"}}]"#, ), Delete(0, Interval::new(3, 4)), - AssertOpsJson(0, r#"[{"insert":"123456"},{"insert":"\n","attributes":{"bullet":"true"}}]"#), + AssertOpsJson(0, r#"[{"insert":"123456"},{"insert":"\n","attributes":{"list":"bullet"}}]"#), ]; TestBuilder::new().run_script::(ops); diff --git a/rust-lib/flowy-ot/tests/helper/mod.rs b/rust-lib/flowy-ot/tests/helper/mod.rs index f0562f4ed9..9933159df8 100644 --- a/rust-lib/flowy-ot/tests/helper/mod.rs +++ b/rust-lib/flowy-ot/tests/helper/mod.rs @@ -79,7 +79,7 @@ impl TestBuilder { } fn run_op(&mut self, op: &TestOp) { - log::debug!("***************** 😈{} *******************", &op); + log::trace!("***************** 😈{} *******************", &op); match op { TestOp::Insert(delta_i, s, index) => { let document = &mut self.documents[*delta_i]; @@ -123,7 +123,11 @@ impl TestBuilder { }, TestOp::Bullet(delta_i, iv, enable) => { let document = &mut self.documents[*delta_i]; - let attribute = Attribute::Bullet(*enable); + let value = match *enable { + true => "bullet", + false => "", + }; + let attribute = Attribute::List(value.to_owned()); document.format(*iv, attribute).unwrap(); }, TestOp::Transform(delta_a_i, delta_b_i) => { diff --git a/rust-lib/flowy-ot/tests/undo_redo_test.rs b/rust-lib/flowy-ot/tests/undo_redo_test.rs index 731fb81029..baa6625665 100644 --- a/rust-lib/flowy-ot/tests/undo_redo_test.rs +++ b/rust-lib/flowy-ot/tests/undo_redo_test.rs @@ -306,14 +306,14 @@ fn history_bullet_undo() { Insert(0, "2", 2), AssertOpsJson( 0, - r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"2"},{"insert":"\n","attributes":{"bullet":"true"}}]"#, + r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#, ), Undo(0), AssertOpsJson(0, r#"[{"insert":"\n"}]"#), Redo(0), AssertOpsJson( 0, - r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"2"},{"insert":"\n","attributes":{"bullet":"true"}}]"#, + r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#, ), ]; @@ -331,17 +331,17 @@ fn history_bullet_undo_with_lagging() { Wait(RECORD_THRESHOLD), AssertOpsJson( 0, - r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"2"},{"insert":"\n","attributes":{"bullet":"true"}}]"#, + r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#, ), Undo(0), - AssertOpsJson(0, r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}}]"#), + AssertOpsJson(0, r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}}]"#), Undo(0), AssertOpsJson(0, r#"[{"insert":"\n"}]"#), Redo(0), Redo(0), AssertOpsJson( 0, - r#"[{"insert":"1"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"2"},{"insert":"\n","attributes":{"bullet":"true"}}]"#, + r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#, ), ]; @@ -358,14 +358,14 @@ fn history_undo_attribute_on_merge_between_line() { Wait(RECORD_THRESHOLD), AssertOpsJson( 0, - r#"[{"insert":"123"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"456"},{"insert":"\n","attributes":{"bullet":"true"}}]"#, + r#"[{"insert":"123"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"456"},{"insert":"\n","attributes":{"list":"bullet"}}]"#, ), Delete(0, Interval::new(3, 4)), // delete the newline - AssertOpsJson(0, r#"[{"insert":"123456"},{"insert":"\n","attributes":{"bullet":"true"}}]"#), + AssertOpsJson(0, r#"[{"insert":"123456"},{"insert":"\n","attributes":{"list":"bullet"}}]"#), Undo(0), AssertOpsJson( 0, - r#"[{"insert":"123"},{"insert":"\n","attributes":{"bullet":"true"}},{"insert":"456"},{"insert":"\n","attributes":{"bullet":"true"}}]"#, + r#"[{"insert":"123"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"456"},{"insert":"\n","attributes":{"list":"bullet"}}]"#, ), ];