mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-31 21:27:00 -06:00
Merge pull request #4718 from dotCooCoo/fix/stylelib-ids-null
Graphic Styles: addFromLibrary treats ids: null as left out
This commit is contained in:
@@ -194,10 +194,11 @@ fn add(s: &mut Session, p: &Value) -> Result<Value> {
|
||||
"existing": existing.iter().map(|g| &g.name).collect::<Vec<_>>(),
|
||||
});
|
||||
let first = picked.first().map(|g| doc_name(&g.name));
|
||||
let targets = p.get("ids").is_some() || !super::appearance::appearance_targets(s, &json!({}))?.is_empty();
|
||||
let ids = p.get("ids").filter(|v| !v.is_null());
|
||||
let targets = ids.is_some() || !super::appearance::appearance_targets(s, &json!({}))?.is_empty();
|
||||
if let Some(name) = first.filter(|_| apply && targets) {
|
||||
let mut params = json!({"name": name, "add": add});
|
||||
if let Some(ids) = p.get("ids") {
|
||||
if let Some(ids) = ids {
|
||||
params["ids"] = ids.clone();
|
||||
}
|
||||
s.execute("graphicStyle.apply", ¶ms)?;
|
||||
|
||||
@@ -117,6 +117,35 @@ fn add_with_apply_styles_the_selection_in_the_same_undo_step() {
|
||||
assert_eq!(doc(&s).node(id).unwrap().opacity, 0.4);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_with_null_ids_and_no_selection_only_adds_style() {
|
||||
let mut omitted = session();
|
||||
let mut null_ids = session();
|
||||
let params = json!({"library": "shadows-glows", "name": "Halo", "apply": true});
|
||||
let expected = run(&mut omitted, "graphicStyle.addFromLibrary", params.clone());
|
||||
let mut with_null = params;
|
||||
with_null["ids"] = Value::Null;
|
||||
let actual = run(&mut null_ids, "graphicStyle.addFromLibrary", with_null);
|
||||
assert_eq!(actual, expected);
|
||||
assert_eq!(names(&actual["added"]), ["Halo"]);
|
||||
assert!(actual.get("applied").is_none());
|
||||
assert!(doc(&null_ids).graphic_style("Halo").is_some());
|
||||
assert_eq!(undo_len(&null_ids), undo_len(&omitted));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_with_null_ids_applies_to_selection() {
|
||||
let mut s = session();
|
||||
let id = rect(&mut s, 10.0, 20.0, 100.0, 50.0);
|
||||
let before = undo_len(&s);
|
||||
let result = run(&mut s, "graphicStyle.addFromLibrary", json!({"library": "shadows-glows", "name": "Halo", "apply": true, "ids": null}));
|
||||
assert_eq!(result["applied"], "Halo");
|
||||
assert_eq!(undo_len(&s), before + 1);
|
||||
let (style, linked) = s.selection_graphic_style().unwrap();
|
||||
assert_eq!((style.name.as_str(), linked), ("Halo", true));
|
||||
assert_eq!(doc(&s).node(id).unwrap().extras().graphic_style, Some(style.id));
|
||||
}
|
||||
|
||||
/// A document with pattern `name` (a dot) and its swatch.
|
||||
fn add_pattern(s: &mut Session, name: &str, radius: f64) {
|
||||
s.edit("Pattern", |d, _| {
|
||||
|
||||
Reference in New Issue
Block a user