paper 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +158 -0
- package/README.md +24 -16
- package/dist/docs/assets/js/paper.js +4811 -808
- package/dist/docs/classes/AreaText.html +771 -243
- package/dist/docs/classes/ChangeFlag.html +1 -1
- package/dist/docs/classes/Color.html +218 -21
- package/dist/docs/classes/CompoundPath.html +1174 -274
- package/dist/docs/classes/Curve.html +2 -2
- package/dist/docs/classes/CurveLocation.html +1 -1
- package/dist/docs/classes/DrawEvent.html +69 -0
- package/dist/docs/classes/Effect.html +434 -0
- package/dist/docs/classes/EffectInstance.html +304 -0
- package/dist/docs/classes/Event.html +1 -1
- package/dist/docs/classes/Gradient.html +1 -1
- package/dist/docs/classes/GradientStop.html +1 -1
- package/dist/docs/classes/Group.html +842 -243
- package/dist/docs/classes/HitResult.html +1 -1
- package/dist/docs/classes/HostItem.html +770 -242
- package/dist/docs/classes/Item.html +827 -242
- package/dist/docs/classes/Key.html +1 -1
- package/dist/docs/classes/KeyEvent.html +1 -1
- package/dist/docs/classes/Layer.html +784 -185
- package/dist/docs/classes/Matrix.html +1 -1
- package/dist/docs/classes/MouseEvent.html +1 -1
- package/dist/docs/classes/PaperScope.html +1 -1
- package/dist/docs/classes/PaperScript.html +4 -2
- package/dist/docs/classes/Path.html +1366 -352
- package/dist/docs/classes/PathItem.html +1198 -298
- package/dist/docs/classes/PathText.html +772 -244
- package/dist/docs/classes/PatternDefinition.html +367 -0
- package/dist/docs/classes/Point.html +33 -5
- package/dist/docs/classes/PointText.html +771 -243
- package/dist/docs/classes/Project.html +251 -9
- package/dist/docs/classes/Raster.html +770 -242
- package/dist/docs/classes/Rectangle.html +50 -8
- package/dist/docs/classes/Segment.html +79 -2
- package/dist/docs/classes/Shape.html +770 -242
- package/dist/docs/classes/Size.html +31 -3
- package/dist/docs/classes/StrokeProfileStop.html +346 -0
- package/dist/docs/classes/Style.html +67 -6
- package/dist/docs/classes/SymbolDefinition.html +28 -2
- package/dist/docs/classes/SymbolItem.html +807 -242
- package/dist/docs/classes/TextItem.html +771 -243
- package/dist/docs/classes/TextRange.html +1 -1
- package/dist/docs/classes/TextStory.html +1 -1
- package/dist/docs/classes/Tool.html +2 -2
- package/dist/docs/classes/ToolEvent.html +1 -1
- package/dist/docs/classes/Tween.html +1 -1
- package/dist/docs/classes/View.html +2 -2
- package/dist/docs/classes/global.html +1 -1
- package/dist/docs/classes/index.html +2 -2
- package/dist/docs/index.html +1 -1
- package/dist/node/browser.js +15 -0
- package/dist/paper-core.js +4701 -728
- package/dist/paper-core.min.js +3 -3
- package/dist/paper-full.js +4811 -808
- package/dist/paper-full.min.js +3 -3
- package/dist/paper-hosted.js +5389 -892
- package/dist/paper.d.ts +1058 -69
- package/examples/Paperjs.org/LiveEffects.html +366 -0
- package/examples/Paperjs.org/Offsetting.html +379 -0
- package/examples/Paperjs.org/StrokeProfiles.html +706 -0
- package/examples/Scripts/Patterns.html +57 -0
- package/package.json +21 -11
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>PatternDefinition</title>
|
|
6
|
+
<base target="class-frame">
|
|
7
|
+
<link href="../assets/css/docs.css" rel="stylesheet" type="text/css">
|
|
8
|
+
<script src="../assets/js/paper.js"></script>
|
|
9
|
+
<script src="../assets/js/jquery.js"></script>
|
|
10
|
+
<script src="../assets/js/codemirror.js"></script>
|
|
11
|
+
<script src="../assets/js/docs.js"></script>
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<article class="reference">
|
|
15
|
+
<div class="reference-class">
|
|
16
|
+
<h1>PatternDefinition</h1>
|
|
17
|
+
|
|
18
|
+
<p>A pattern definition repeats an item as the tile of pattern colors, which fill and stroke items with it, see <a href="../classes/Color.html#pattern"><tt>color.pattern</tt></a>: a <a href="../classes/Raster.html"><tt>Raster</tt></a> for image patterns, or any other item for vector patterns. As with symbol definitions, the item is removed from the scene graph, and all pattern colors that use the pattern share it, so they change along with it.</p>
|
|
19
|
+
<h4>Example:<span class="description">A dotted pattern, filling and stroking a circle:</span></h4>
|
|
20
|
+
|
|
21
|
+
<div class="paperscript split">
|
|
22
|
+
|
|
23
|
+
<div class="buttons">
|
|
24
|
+
<div class="button run">Run</div>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<script type="text/paperscript" canvas="canvas-0">
|
|
28
|
+
var dot = new Path.Circle({
|
|
29
|
+
center: [5, 5],
|
|
30
|
+
radius: 3,
|
|
31
|
+
fillColor: 'red'
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Repeat the dot every 10 points, with a gap of 2 points between the
|
|
35
|
+
// tiles of the stroke's pattern:
|
|
36
|
+
var pattern = new PatternDefinition(dot, {
|
|
37
|
+
tile: new Rectangle(0, 0, 10, 10)
|
|
38
|
+
});
|
|
39
|
+
var spaced = new PatternDefinition(dot.clone(), {
|
|
40
|
+
tile: new Rectangle(0, 0, 10, 10),
|
|
41
|
+
spacing: 2
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
var circle = new Path.Circle({
|
|
45
|
+
center: view.center,
|
|
46
|
+
radius: 70,
|
|
47
|
+
fillColor: { pattern: pattern },
|
|
48
|
+
strokeColor: {
|
|
49
|
+
pattern: spaced,
|
|
50
|
+
matrix: new Matrix().rotate(45)
|
|
51
|
+
},
|
|
52
|
+
strokeWidth: 20
|
|
53
|
+
});
|
|
54
|
+
</script>
|
|
55
|
+
<div class="canvas"><canvas width="516" height="200" id="canvas-0"></canvas></div>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<!-- =============================== constructors ========================== -->
|
|
63
|
+
<div class="reference-members">
|
|
64
|
+
<h2>Constructors</h2>
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
<div id="patterndefinition-item" class="member">
|
|
68
|
+
<div class="member-link">
|
|
69
|
+
<a name="patterndefinition-item" href="#patterndefinition-item"><tt><b>PatternDefinition</b>(item[, options])</tt></a>
|
|
70
|
+
</div>
|
|
71
|
+
<div class="member-description hidden">
|
|
72
|
+
<div class="member-text">
|
|
73
|
+
<p>Creates a pattern definition.</p>
|
|
74
|
+
<ul class="member-list">
|
|
75
|
+
<h4>Options:</h4>
|
|
76
|
+
<li>[options.tile] {Rectangle} the rectangle that is repeated,
|
|
77
|
+
the bounds of the item by default</li>
|
|
78
|
+
<li><tt>options.spacing: <a href="../classes/Size.html"><tt>Size</tt></a></tt> — the gap between the tiles — default: <tt>0</tt></li>
|
|
79
|
+
<li>[options.name] {String} the name of the pattern</li>
|
|
80
|
+
</ul>
|
|
81
|
+
|
|
82
|
+
<ul class="member-list">
|
|
83
|
+
<h4>Parameters:</h4>
|
|
84
|
+
|
|
85
|
+
<li>
|
|
86
|
+
<tt>item:</tt>
|
|
87
|
+
<a href="../classes/Item.html"><tt>Item</tt></a>
|
|
88
|
+
— the item to repeat, which is removed from the scene graph and becomes the pattern’s tile content
|
|
89
|
+
|
|
90
|
+
</li>
|
|
91
|
+
|
|
92
|
+
<li>
|
|
93
|
+
<tt>options:</tt>
|
|
94
|
+
<tt>Object</tt>
|
|
95
|
+
|
|
96
|
+
— optional
|
|
97
|
+
</li>
|
|
98
|
+
|
|
99
|
+
</ul>
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
<ul class="member-list">
|
|
103
|
+
<h4>Returns:</h4>
|
|
104
|
+
|
|
105
|
+
<li>
|
|
106
|
+
<tt><a href="../classes/PatternDefinition.html"><tt>PatternDefinition</tt></a></tt>
|
|
107
|
+
</li>
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
</ul>
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
<!-- ================================ properties =========================== -->
|
|
127
|
+
<div class="reference-members">
|
|
128
|
+
<h2>Properties</h2>
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
<div id="project" class="member">
|
|
132
|
+
<div class="member-link">
|
|
133
|
+
<a name="project" href="#project"><tt><b>project</b></tt></a>
|
|
134
|
+
</div>
|
|
135
|
+
<div class="member-description hidden">
|
|
136
|
+
|
|
137
|
+
<div class="member-text">
|
|
138
|
+
<p>The project that this pattern belongs to.</p>
|
|
139
|
+
|
|
140
|
+
<p>Read only.</p>
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
<ul class="member-list">
|
|
145
|
+
<h4>Type:</h4>
|
|
146
|
+
<li>
|
|
147
|
+
<a href="../classes/Project.html"><tt>Project</tt></a>
|
|
148
|
+
</li>
|
|
149
|
+
</ul>
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
<div id="name" class="member">
|
|
160
|
+
<div class="member-link">
|
|
161
|
+
<a name="name" href="#name"><tt><b>name</b></tt></a>
|
|
162
|
+
</div>
|
|
163
|
+
<div class="member-description hidden">
|
|
164
|
+
|
|
165
|
+
<div class="member-text">
|
|
166
|
+
<p>The name of the pattern.</p>
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
<ul class="member-list">
|
|
171
|
+
<h4>Type:</h4>
|
|
172
|
+
<li>
|
|
173
|
+
<tt>String</tt>
|
|
174
|
+
</li>
|
|
175
|
+
</ul>
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
<div id="item" class="member">
|
|
186
|
+
<div class="member-link">
|
|
187
|
+
<a name="item" href="#item"><tt><b>item</b></tt></a>
|
|
188
|
+
</div>
|
|
189
|
+
<div class="member-description hidden">
|
|
190
|
+
|
|
191
|
+
<div class="member-text">
|
|
192
|
+
<p>The item that the pattern repeats. Unlike the items of symbols, it isn’t moved to 0, 0, so the tiles are at its own coordinates.</p>
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
<ul class="member-list">
|
|
197
|
+
<h4>Type:</h4>
|
|
198
|
+
<li>
|
|
199
|
+
<a href="../classes/Item.html"><tt>Item</tt></a>
|
|
200
|
+
</li>
|
|
201
|
+
</ul>
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
</div>
|
|
206
|
+
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
<div id="tile" class="member">
|
|
212
|
+
<div class="member-link">
|
|
213
|
+
<a name="tile" href="#tile"><tt><b>tile</b></tt></a>
|
|
214
|
+
</div>
|
|
215
|
+
<div class="member-description hidden">
|
|
216
|
+
|
|
217
|
+
<div class="member-text">
|
|
218
|
+
<p>The rectangle that is repeated, in the coordinates of the pattern’s item.</p>
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
<ul class="member-list">
|
|
223
|
+
<h4>Default:</h4>
|
|
224
|
+
<li><tt>the bounds of the pattern's item</tt></li>
|
|
225
|
+
</ul>
|
|
226
|
+
|
|
227
|
+
<ul class="member-list">
|
|
228
|
+
<h4>Type:</h4>
|
|
229
|
+
<li>
|
|
230
|
+
<a href="../classes/Rectangle.html"><tt>Rectangle</tt></a>
|
|
231
|
+
</li>
|
|
232
|
+
</ul>
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
<div id="spacing" class="member">
|
|
243
|
+
<div class="member-link">
|
|
244
|
+
<a name="spacing" href="#spacing"><tt><b>spacing</b></tt></a>
|
|
245
|
+
</div>
|
|
246
|
+
<div class="member-description hidden">
|
|
247
|
+
|
|
248
|
+
<div class="member-text">
|
|
249
|
+
<p>The gap between the tiles, horizontally and vertically.</p>
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
<ul class="member-list">
|
|
254
|
+
<h4>Default:</h4>
|
|
255
|
+
<li><tt>0</tt></li>
|
|
256
|
+
</ul>
|
|
257
|
+
|
|
258
|
+
<ul class="member-list">
|
|
259
|
+
<h4>Type:</h4>
|
|
260
|
+
<li>
|
|
261
|
+
<a href="../classes/Size.html"><tt>Size</tt></a>
|
|
262
|
+
</li>
|
|
263
|
+
</ul>
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
</div>
|
|
268
|
+
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
|
|
272
|
+
</div>
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
<!-- ============================== methods ================================ -->
|
|
279
|
+
<div class="reference-members">
|
|
280
|
+
<h2>Methods</h2>
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
<div id="clone" class="member">
|
|
284
|
+
<div class="member-link">
|
|
285
|
+
<a name="clone" href="#clone"><tt><b>clone</b>()</tt></a>
|
|
286
|
+
</div>
|
|
287
|
+
<div class="member-description hidden">
|
|
288
|
+
<div class="member-text">
|
|
289
|
+
<p>Returns a copy of the pattern, with a copy of its item and its name.</p>
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
<ul class="member-list">
|
|
294
|
+
<h4>Returns:</h4>
|
|
295
|
+
|
|
296
|
+
<li>
|
|
297
|
+
<tt><a href="../classes/PatternDefinition.html"><tt>PatternDefinition</tt></a></tt>
|
|
298
|
+
</li>
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
</ul>
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
<div id="equals-pattern" class="member">
|
|
313
|
+
<div class="member-link">
|
|
314
|
+
<a name="equals-pattern" href="#equals-pattern"><tt><b>equals</b>(pattern)</tt></a>
|
|
315
|
+
</div>
|
|
316
|
+
<div class="member-description hidden">
|
|
317
|
+
<div class="member-text">
|
|
318
|
+
<p>Checks whether the pattern is equal to the supplied pattern.</p>
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
<ul class="member-list">
|
|
322
|
+
<h4>Parameters:</h4>
|
|
323
|
+
|
|
324
|
+
<li>
|
|
325
|
+
<tt>pattern:</tt>
|
|
326
|
+
<a href="../classes/PatternDefinition.html"><tt>PatternDefinition</tt></a>
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
</li>
|
|
330
|
+
|
|
331
|
+
</ul>
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
<ul class="member-list">
|
|
335
|
+
<h4>Returns:</h4>
|
|
336
|
+
|
|
337
|
+
<li>
|
|
338
|
+
<tt><tt>Boolean</tt></tt> — <tt>true</tt> if they are equal, <tt>false</tt> otherwise
|
|
339
|
+
</li>
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
</ul>
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
</div>
|
|
349
|
+
</div>
|
|
350
|
+
</div>
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
</div>
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
<!-- =========================== copyright notice ========================== -->
|
|
360
|
+
<p class="footer">
|
|
361
|
+
Paper.js v0.17.0<br>
|
|
362
|
+
Copyright © 2011—2026 <a href="http://www.lehni.org" target="_blank">Jürg Lehni</a> & <a href="http://www.jonathanpuckey.com" target="_blank">Jonathan Puckey</a>. All Rights Reserved.</p>
|
|
363
|
+
<div class="content-end"></div>
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
</article>
|
|
367
|
+
</body>
|
|
@@ -844,6 +844,34 @@ console.log(result); // {x: 2, y: 0}</code></pre>
|
|
|
844
844
|
|
|
845
845
|
|
|
846
846
|
|
|
847
|
+
</div>
|
|
848
|
+
|
|
849
|
+
</div>
|
|
850
|
+
</div>
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
<div id="values" class="member">
|
|
854
|
+
<div class="member-link">
|
|
855
|
+
<a name="values" href="#values"><tt><b>values</b></tt></a>
|
|
856
|
+
</div>
|
|
857
|
+
<div class="member-description hidden">
|
|
858
|
+
|
|
859
|
+
<div class="member-text">
|
|
860
|
+
<p>The point’s coordinates as an array, <code>[x, y]</code>, as <a href="../classes/Matrix.html#values"><tt>matrix.values</tt></a> gives those of a matrix.</p>
|
|
861
|
+
|
|
862
|
+
<p>Read only.</p>
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
<ul class="member-list">
|
|
867
|
+
<h4>Type:</h4>
|
|
868
|
+
<li>
|
|
869
|
+
Array of <tt>Numbers</tt>
|
|
870
|
+
</li>
|
|
871
|
+
</ul>
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
|
|
847
875
|
</div>
|
|
848
876
|
|
|
849
877
|
</div>
|
|
@@ -1634,7 +1662,7 @@ console.log(result); // {x: -12, y: 6}</code></pre>
|
|
|
1634
1662
|
</div>
|
|
1635
1663
|
<div class="member-description hidden">
|
|
1636
1664
|
<div class="member-text">
|
|
1637
|
-
<p>Checks if the vector represented by this point is collinear (parallel) to another vector.</p>
|
|
1665
|
+
<p>Checks if the vector represented by this point is collinear (parallel) to another vector, within a tolerance of 1e-8 for the sine of the angle between them.</p>
|
|
1638
1666
|
|
|
1639
1667
|
|
|
1640
1668
|
<ul class="member-list">
|
|
@@ -1675,7 +1703,7 @@ console.log(result); // {x: -12, y: 6}</code></pre>
|
|
|
1675
1703
|
</div>
|
|
1676
1704
|
<div class="member-description hidden">
|
|
1677
1705
|
<div class="member-text">
|
|
1678
|
-
<p>Checks if the vector represented by this point is orthogonal (perpendicular) to another vector.</p>
|
|
1706
|
+
<p>Checks if the vector represented by this point is orthogonal (perpendicular) to another vector, within a tolerance of 1e-8 for the cosine of the angle between them.</p>
|
|
1679
1707
|
|
|
1680
1708
|
|
|
1681
1709
|
<ul class="member-list">
|
|
@@ -1716,7 +1744,7 @@ console.log(result); // {x: -12, y: 6}</code></pre>
|
|
|
1716
1744
|
</div>
|
|
1717
1745
|
<div class="member-description hidden">
|
|
1718
1746
|
<div class="member-text">
|
|
1719
|
-
<p>Checks if this point has both the x and y coordinate set to 0.</p>
|
|
1747
|
+
<p>Checks if this point has both the x and y coordinate set to 0, within a tolerance of 1e-12, unlike <a href="../classes/Point.html#equals-point"><tt>equals(point)</tt></a>, which compares exactly.</p>
|
|
1720
1748
|
|
|
1721
1749
|
|
|
1722
1750
|
|
|
@@ -1724,7 +1752,7 @@ console.log(result); // {x: -12, y: 6}</code></pre>
|
|
|
1724
1752
|
<h4>Returns:</h4>
|
|
1725
1753
|
|
|
1726
1754
|
<li>
|
|
1727
|
-
<tt><tt>Boolean</tt></tt> — <tt>true</tt> if both x and y are 0, <tt>false</tt> otherwise
|
|
1755
|
+
<tt><tt>Boolean</tt></tt> — <tt>true</tt> if both x and y are 0, within the tolerance, <tt>false</tt> otherwise
|
|
1728
1756
|
</li>
|
|
1729
1757
|
|
|
1730
1758
|
|
|
@@ -2823,7 +2851,7 @@ var point = maxPoint * randomPoint;</code></pre>
|
|
|
2823
2851
|
|
|
2824
2852
|
<!-- =========================== copyright notice ========================== -->
|
|
2825
2853
|
<p class="footer">
|
|
2826
|
-
Paper.js v0.
|
|
2854
|
+
Paper.js v0.17.0<br>
|
|
2827
2855
|
Copyright © 2011—2026 <a href="http://www.lehni.org" target="_blank">Jürg Lehni</a> & <a href="http://www.jonathanpuckey.com" target="_blank">Jonathan Puckey</a>. All Rights Reserved.</p>
|
|
2828
2856
|
<div class="content-end"></div>
|
|
2829
2857
|
|