--- title: Snippet --- A snippet is a reuseable bit of markup for your pattern. They are added to the SVG `defs` section, and rendered with the SVG `use` tag. The snippet constructor takes two arguments: - `def` : The `xlink:href` id that links to the relevant entry in the SVG `defs` section - `anchor` : A [`Point`](#point) on which to anchor the snippet ```js Snippet new Snippet(def, Point); ``` A Snippet object comes with the following properties: - `def` : The `xlink:href` id that links to the relevant entry in the SVG `defs` section - `anchor` : A [`Point`](../point) on which to anchor the snippet - `attributes` : An [`Attributes`](../attributes) instance holding the snippet's attributes In addition, a Snippet object exposes the following methods: ## attr() ```js Snippet snippet.attr( string name, mixed value, bool overwrite = false ) ``` This `Snippet.attr()` method calls [`Attributes.add()`](./attributes#add) under the hood, but returns the Snippet object. This allows you to chain different calls together. If the third parameter is set to `true` it will call [`Attributes.set()`](./attributes#set) instead, thereby overwriting the value of the attribute. ### Snippet.attr() example ```js let { Point, points, Snippet, snippets } = part.shorthand(); points.anchor = new Point(50, 15); snippets.demo = new Snippet("logo", points.anchor) .attr("data-scale", 0.8) .attr("data-rotate", 180); ``` ## clone() ```js Snippet snippet.clone() ``` ### Snippet.clone() example Returns a new Snippets object that is a deep copy of this one. ```js let { Point, points, Snippet, snippets } = part.shorthand(); points.anchor = new Point(35, 35); snippets.demo = new Snippet("logo", points.anchor) .attr("style", "color: #f006"); snippets.clone = snippets.demo .clone() .attr("data-scale", 0.5); ```