1
0
Fork 0

Added strict mode to Pattern.needs()

This commit is contained in:
Joost De Cock 2018-08-20 12:16:13 +02:00
parent 902fe72b4a
commit f0035e751c
5 changed files with 32 additions and 30 deletions

View file

@ -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;
};

View file

@ -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;

View file

@ -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>

View file

@ -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);
});

View file

@ -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");
});