✨ Added strict mode to Pattern.needs()
This commit is contained in:
parent
902fe72b4a
commit
f0035e751c
5 changed files with 32 additions and 30 deletions
|
@ -278,19 +278,21 @@ Pattern.prototype.pack = function() {
|
|||
* If partName is an array of names, any name needed
|
||||
* will cause this to return true
|
||||
*/
|
||||
Pattern.prototype.needs = function(partName) {
|
||||
Pattern.prototype.needs = function(partName, strict = false) {
|
||||
if (typeof partName !== "string") {
|
||||
for (let part of partName) {
|
||||
if (this.needs(part)) return true;
|
||||
if (this.needs(part, strict)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (typeof this.settings.only === "undefined") return true;
|
||||
else if (this.settings.only === partName) return true;
|
||||
if (typeof this.settings.only === "undefined") {
|
||||
if (strict) return false;
|
||||
else return true;
|
||||
} else if (this.settings.only === partName) return true;
|
||||
else if (
|
||||
typeof this.settings.only === "object" &&
|
||||
this.settings.only.indexOf(partName) !== -1
|
||||
)
|
||||
) {
|
||||
return true;
|
||||
else return false;
|
||||
} else return false;
|
||||
};
|
||||
|
|
|
@ -214,9 +214,6 @@ Svg.prototype.renderSnippet = function(snippet) {
|
|||
let svg = this.nl();
|
||||
svg += `<use x="${snippet.anchor.x}" y="${snippet.anchor.y}" `;
|
||||
svg += `xlink:href="#${snippet.def}" ${snippet.attributes.render()}>`;
|
||||
if (snippet.description) {
|
||||
svg += `<title>${snippet.description}</title>`;
|
||||
}
|
||||
svg += "</use>";
|
||||
|
||||
return svg;
|
||||
|
|
2
tests/fixtures/render.js
vendored
2
tests/fixtures/render.js
vendored
|
@ -372,7 +372,7 @@ var render = {
|
|||
|
||||
<!-- Start of group #fs-part-test -->
|
||||
<g id="fs-part-test" transform="translate(10, 10)">
|
||||
<use x="20" y="20" xlink:href="#test" ><title>This is a snippet</title></use>
|
||||
<use x="20" y="20" xlink:href="#test" ></use>
|
||||
</g>
|
||||
<!-- end of group #fs-part-test -->
|
||||
</g>
|
||||
|
|
|
@ -157,8 +157,14 @@ it("Should check whether a parts is needed with array", () => {
|
|||
let pattern = new freesewing.Pattern();
|
||||
pattern.settings.only = ["test", "foo", "bar"];
|
||||
expect(pattern.needs("foo")).to.equal(true);
|
||||
//expect(pattern.needs(["bar"])).to.equal(true);
|
||||
//expect(pattern.needs(["mest", "foo"])).to.equal(true);
|
||||
expect(pattern.needs(["mist", "hugs"])).to.equal(false);
|
||||
//expect(pattern.needs("fo")).to.equal(false);
|
||||
});
|
||||
|
||||
it("Should check whether a parts is strictly needed", () => {
|
||||
let pattern = new freesewing.Pattern();
|
||||
expect(pattern.needs("foo")).to.equal(true);
|
||||
expect(pattern.needs("foo", true)).to.equal(false);
|
||||
pattern.settings.only = ["test", "foo", "bar"];
|
||||
expect(pattern.needs("foo")).to.equal(true);
|
||||
expect(pattern.needs("foo", true)).to.equal(true);
|
||||
});
|
||||
|
|
|
@ -2,30 +2,27 @@ let expect = require("chai").expect;
|
|||
let freesewing = require("./dist/index.js");
|
||||
|
||||
it("Should create a snippet", () => {
|
||||
let snip1 = new freesewing.Snippet(
|
||||
"test",
|
||||
new freesewing.Point(12, 34),
|
||||
"this is an example"
|
||||
);
|
||||
let snip1 = new freesewing.Snippet("test", new freesewing.Point(12, 34));
|
||||
expect(snip1.def).to.equal("test");
|
||||
expect(snip1.anchor.x).to.equal(12);
|
||||
expect(snip1.anchor.y).to.equal(34);
|
||||
expect(snip1.description).to.equal("this is an example");
|
||||
});
|
||||
|
||||
it("Should default to empty description", () => {
|
||||
let snip2 = new freesewing.Snippet("test", new freesewing.Point(12, 34));
|
||||
expect(snip2.description).to.equal("");
|
||||
});
|
||||
|
||||
it("Should clone a snippet", () => {
|
||||
let snip3 = new freesewing.Snippet(
|
||||
"boo",
|
||||
new freesewing.Point(56, 78),
|
||||
"clone me"
|
||||
);
|
||||
let snip3 = new freesewing.Snippet("boo", new freesewing.Point(56, 78));
|
||||
expect(snip3.clone().def).to.equal("boo");
|
||||
expect(snip3.clone().anchor.x).to.equal(56);
|
||||
expect(snip3.clone().anchor.y).to.equal(78);
|
||||
expect(snip3.clone().description).to.equal("clone me");
|
||||
});
|
||||
|
||||
it("Should set an attribute", () => {
|
||||
let s = new freesewing.Snippet("test", new freesewing.Point(12, -34)).attr(
|
||||
"class",
|
||||
"test"
|
||||
);
|
||||
expect(s.attributes.get("class")).to.equal("test");
|
||||
s.attr("class", "more");
|
||||
expect(s.attributes.get("class")).to.equal("test more");
|
||||
s.attr("class", "less", true);
|
||||
expect(s.attributes.get("class")).to.equal("less");
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue